Ir al contenido

Conector Validation

El conector Validation comprueba cada carga contra una lista de reglas por campo. Cuando una regla falla, la política onInvalid configurada decide si descartar la carga, reenviarla tal cual o etiquetarla con una bandera de validez.

Tipo de Conector: MeddleValidation

{
"type": "MeddleValidation",
"config": {
"onInvalid": "drop",
"rules": [
{ "key": "temperature", "type": "number", "required": true, "min": -40, "max": 150 },
{ "key": "sensor_id", "type": "string", "required": true, "pattern": "^S-[0-9]{4}$" },
{ "key": "active", "type": "boolean", "required": false }
]
}
}
  • rules (obligatorio, mínimo 1): Lista de reglas por campo
  • onInvalid (obligatorio): Comportamiento cuando al menos una regla falla — drop, forward o tag
  • invalidTag: Clave escrita en la carga en el modo tag (por defecto _valid)
  • key (obligatorio): Nombre del campo de la carga a verificar
  • type (obligatorio): string, number o boolean
  • required: Cuando es true, un campo ausente hace fallar la regla. Cuando es false, un campo ausente omite la regla.
  • min, max: Rango numérico inclusivo (sólo válido para type: number)
  • pattern: Expresión regular (sólo válido para type: string)
  • number — Acepta cualquier valor numérico coercible a float64 (int, float, etc.). Una discrepancia de tipo se reporta como un error.
  • string — Acepta string de Go. Si pattern está definido, el valor debe coincidir.
  • boolean — Acepta bool de Go.

min / max son inclusivos. Una temperature de exactamente -40 pasa min: -40. Los patrones regex se compilan una vez al inicio con la sintaxis RE2 de Go; los patrones inválidos impiden que el conector arranque.

{ "onInvalid": "drop" }

Las cargas que fallan se descartan silenciosamente (los errores siguen apareciendo en el canal de errores). Sólo se reenvían las cargas válidas.

{ "onInvalid": "forward" }

Toda carga se reenvía independientemente de su validez. Úsalo sólo para monitoreo.

{
"onInvalid": "tag",
"invalidTag": "is_valid"
}

Las cargas inválidas se reenvían con la clave de etiqueta establecida a false. Las cargas válidas pasan sin cambios. Si invalidTag se omite, la clave por defecto es _valid.

  1. Rechazar lecturas de sensores malformadas antes de que lleguen al almacenamiento
  2. Forzar convenciones de IDs con patrones regex (ej. tags de activos)
  3. Filtrado por rango para sensores físicos con envolventes operativas conocidas
  4. Validación suave con modo tag para manejo descendente basado en Router
{
"type": "MeddleValidation",
"config": {
"onInvalid": "drop",
"rules": [
{ "key": "device_id", "type": "string", "required": true, "pattern": "^DEV-[A-Z0-9]+$" },
{ "key": "temperature", "type": "number", "required": true, "min": -20, "max": 120 },
{ "key": "online", "type": "boolean", "required": true }
]
}
}

Cualquier carga sin un campo, que falle el regex, o con temperature fuera de [-20, 120] se descarta.

{
"type": "MeddleValidation",
"config": {
"onInvalid": "tag",
"invalidTag": "is_valid",
"rules": [
{ "key": "pressure", "type": "number", "required": true, "min": 0, "max": 200 }
]
}
}

Combina con un Router descendente que se ramifique sobre is_valid para enviar las cargas limpias y las sucias a sumideros diferentes.

  • Usa drop para esquemas estrictos en la frontera entre datos confiables y no confiables
  • Usa tag + Router cuando quieras inspeccionar o aislar cargas inválidas en lugar de perderlas
  • Mantén los patrones regex anclados (^...$) para evitar coincidencias parciales accidentales
  • Define rangos numéricos estrechos basados en límites físicos/operativos — esto detecta fallos de sensor temprano
  • Coloca Validation cerca del inicio de los pipelines para que los conectores descendentes puedan asumir cargas bien formadas
  • Router - Ramificar según la etiqueta _valid
  • Transform - Derivar o renombrar campos antes de la validación
  • Filter - Descartar claves no deseadas