{
  "version": 21,
  "variables": [],
  "tiles": {
    "0": {
      "type": "markdown",
      "content": "# Sky Airline — Centro de Observabilidad de la Experiencia del Pasajero\n### Compra de Pasajes | Check-in Digital | Revenue Ancillary | Seguridad"
    },
    "1": {
      "title": "Interacciones Totales Pasajeros",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| summarize total = count()",
      "visualization": "singleValue"
    },
    "2": {
      "title": "Journeys de Pasajeros",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| summarize journeys = countDistinct(trace_id)",
      "visualization": "singleValue"
    },
    "3": {
      "title": "Revenue Total (CLP)",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| summarize revenue = sum(json.transactionValue)",
      "visualization": "singleValue"
    },
    "4": {
      "title": "Compras de Pasajes",
      "type": "data",
      "query": "fetch bizevents\n| filter event.provider == \"Sky-CompraVuelo\"\n| filter event.kind == \"BIZ_EVENT\"\n| summarize total = count()",
      "visualization": "singleValue"
    },
    "5": {
      "title": "Check-ins Digitales",
      "type": "data",
      "query": "fetch bizevents\n| filter event.provider == \"Sky-Checkin\"\n| filter event.kind == \"BIZ_EVENT\"\n| summarize total = count()",
      "visualization": "singleValue"
    },
    "6": {
      "title": "Vulnerabilidades Detectadas",
      "type": "data",
      "query": "fetch security.events\n| filter event.type == \"VULNERABILITY_FINDING\"\n| summarize total = count()",
      "visualization": "singleValue"
    },
    "7": {
      "type": "markdown",
      "content": "---\n## Operacion Aerea — Vista Ejecutiva"
    },
    "8": {
      "title": "Distribucion por Journey del Pasajero",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| fieldsAdd journey = if(event.provider == \"Sky-CompraVuelo\", \"Compra Pasaje\", else: \"Check-in Digital\")\n| summarize total = count(), by:{journey}",
      "visualization": "pieChart"
    },
    "9": {
      "title": "Actividad de Pasajeros en Tiempo Real",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| fieldsAdd journey = if(event.provider == \"Sky-CompraVuelo\", \"Compra\", else: \"Check-in\")\n| makeTimeseries count(), by:{journey}, interval:5m",
      "visualization": "lineChart"
    },
    "10": {
      "type": "markdown",
      "content": "---\n## Revenue y Modelo Low-Cost\n\n| Metrica | Compra de Pasaje | Check-in Digital |\n|---------|-----------------|------------------|\n| Ticket promedio | $69.990 CLP | N/A |\n| Ancillary promedio | $18 USD/pasajero | $8-45 USD/pasajero |\n| Ancillary % revenue | 35-40% del total | Asiento + Equipaje |\n| Conversion | 3.5% (web) | 92% (check-in online) |\n| Ahorro digital | vs agencia: $15 USD | vs counter: $5 USD/pasajero |\n| Competencia | LATAM, JetSmart | LATAM, JetSmart |\n| Regulador | DGAC Chile | DGAC Chile |"
    },
    "11": {
      "title": "Revenue por Journey",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| fieldsAdd journey = if(event.provider == \"Sky-CompraVuelo\", \"Compra Pasaje\", else: \"Check-in Digital\")\n| summarize revenue = sum(json.transactionValue), by:{journey}",
      "visualization": "pieChart"
    },
    "12": {
      "title": "Revenue en el Tiempo",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| fieldsAdd journey = if(event.provider == \"Sky-CompraVuelo\", \"Compra\", else: \"Check-in\")\n| makeTimeseries sum(json.transactionValue), by:{journey}, interval:5m",
      "visualization": "areaChart"
    },
    "13": {
      "title": "Cuadro de Mando por Journey",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| fieldsAdd journey = if(event.provider == \"Sky-CompraVuelo\", \"Compra Pasaje\", else: \"Check-in Digital\")\n| summarize Revenue = sum(json.transactionValue), Operaciones = count(), TicketPromedio = avg(json.transactionValue), by:{journey}\n| sort Revenue desc",
      "visualization": "table"
    },
    "14": {
      "type": "markdown",
      "content": "---\n## Compra de Pasaje — Funnel de Conversion\n\n**Busqueda Vuelos (GDS)** → **Seleccion Tarifa (Light/Base/Plus)** → **Datos Pasajeros** → **Venta Ancillaries** → **Pago Webpay** → **Confirmacion PNR**"
    },
    "15": {
      "title": "Etapas de Compra de Pasaje",
      "type": "data",
      "query": "fetch bizevents\n| filter event.provider == \"Sky-CompraVuelo\"\n| filter event.kind == \"BIZ_EVENT\"\n| fieldsAdd etapa = if(event.type == \"busquedavuelosdisponiblesservice\", \"1. Busqueda Vuelos\", else: if(event.type == \"seleccionvuelotarifaservice\", \"2. Seleccion Tarifa\", else: if(event.type == \"datospasajerosservice\", \"3. Datos Pasajeros\", else: if(event.type == \"ventaancillariesservice\", \"4. Venta Ancillaries\", else: if(event.type == \"pagopasajeservice\", \"5. Pago Webpay\", else: if(event.type == \"confirmacionreservaservice\", \"6. Confirmacion PNR\", else: event.type))))))\n| summarize total = count(), by:{etapa}\n| sort etapa asc",
      "visualization": "barChart"
    },
    "16": {
      "type": "markdown",
      "content": "## Check-in Digital — Experiencia del Pasajero\n\n**Buscar Reserva (PNR)** → **Seleccion Asiento** → **Venta Equipaje** → **Validacion Documentos (TIMATIC)** → **Emision Boarding Pass QR** → **Notificacion Wallet**"
    },
    "17": {
      "title": "Etapas de Check-in Digital",
      "type": "data",
      "query": "fetch bizevents\n| filter event.provider == \"Sky-Checkin\"\n| filter event.kind == \"BIZ_EVENT\"\n| fieldsAdd etapa = if(event.type == \"buscareservavueloservice\", \"1. Buscar Reserva\", else: if(event.type == \"seleccionasientoservice\", \"2. Seleccion Asiento\", else: if(event.type == \"ventaequipajeadicionalservice\", \"3. Venta Equipaje\", else: if(event.type == \"validaciondocumentosservice\", \"4. Validacion TIMATIC\", else: if(event.type == \"emisiontarjetaembarqueservice\", \"5. Boarding Pass QR\", else: if(event.type == \"notificacionpasajeroservice\", \"6. Notificacion Wallet\", else: event.type))))))\n| summarize total = count(), by:{etapa}\n| sort etapa asc",
      "visualization": "barChart"
    },
    "18": {
      "type": "markdown",
      "content": "---\n## Seguridad — Vulnerabilidades en Plataforma Digital"
    },
    "19": {
      "title": "Vulnerabilidades por Severidad",
      "type": "data",
      "query": "fetch security.events\n| filter event.type == \"VULNERABILITY_FINDING\"\n| summarize total = count(), by:{dt.security.risk.level}\n| sort total desc",
      "visualization": "barChart"
    },
    "20": {
      "title": "Componentes Vulnerables",
      "type": "data",
      "query": "fetch security.events\n| filter event.type == \"VULNERABILITY_FINDING\"\n| fields CVE=vulnerability.references.cve, Componente=component.name, Version=component.version, Severidad=dt.security.risk.level, Descripcion=event.description\n| sort Severidad asc\n| limit 20",
      "visualization": "table"
    },
    "21": {
      "type": "markdown",
      "content": "### Riesgo de Seguridad en Contexto Aerolinea\n\n| Componente | Riesgo para Sky | Impacto |\n|-----------|----------------|--------|\n| **protobufjs** (ejecucion codigo) | Acceso al PSS, manipulacion de reservas y precios | Fraude masivo, pasajes a $0 |\n| **ws** (DoS) | Caida de websockets en busqueda de vuelos | Perdida de ventas en CyberDay |\n| **uuid** (IDs predecibles) | Prediccion de codigos PNR, acceso a reservas ajenas | Suplantacion de identidad de pasajeros |\n| **OpenTelemetry** (memoria) | Puntos ciegos en monitoreo durante peak | No detectar degradacion en CyberDay |"
    },
    "22": {
      "type": "markdown",
      "content": "---\n## Infraestructura — Plataforma Digital Sky"
    },
    "23": {
      "title": "CPU Servidores",
      "type": "data",
      "query": "timeseries cpu = avg(dt.host.cpu.usage), by:{dt.entity.host}\n| limit 5",
      "visualization": "lineChart"
    },
    "24": {
      "title": "Memoria Servidores",
      "type": "data",
      "query": "timeseries mem = avg(dt.host.memory.usage), by:{dt.entity.host}\n| limit 5",
      "visualization": "lineChart"
    },
    "25": {
      "title": "Volumen Total de Pasajeros",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| makeTimeseries count(), interval:5m",
      "visualization": "areaChart"
    },
    "26": {
      "type": "markdown",
      "content": "---\n## Trazabilidad"
    },
    "27": {
      "title": "Ultimas 30 Interacciones de Pasajeros",
      "type": "data",
      "query": "fetch bizevents\n| filter event.kind == \"BIZ_EVENT\"\n| filter event.provider == \"Sky-CompraVuelo\" or event.provider == \"Sky-Checkin\"\n| fieldsAdd journey = if(event.provider == \"Sky-CompraVuelo\", \"Compra\", else: \"Check-in\")\n| fields timestamp, Journey=journey, Operacion=event.type, Monto=json.transactionValue, TraceId=trace_id\n| sort timestamp desc\n| limit 30",
      "visualization": "table"
    },
    "28": {
      "type": "markdown",
      "content": "## Escenarios de Riesgo Operacional\n\n| Escenario | Impacto Revenue | Impacto Pasajeros |\n|-----------|----------------|------------------|\n| Motor busqueda lento (+1s) | -7% conversion = $500K USD/mes | Pasajero se va a LATAM/JetSmart |\n| Webpay caido en CyberDay | Miles de ventas perdidas (10x trafico) | #SkyCaido trending en redes |\n| PSS Amadeus caido | 0 check-ins, caos aeropuerto | 2.232 pasajeros al counter |\n| TIMATIC falla | Multa $3.5K-$5K USD/pasajero sin visa | Riesgo regulatorio DGAC |\n| CDN caida | App y web inaccesibles | NPS -30 puntos |\n\n> *Con Dynatrace, Sky detecta que el motor de busqueda esta lento en 28 segundos — antes de que el primer pasajero abandone y compre en la competencia.*\n\n---\n*Dashboard generado por Transafety Ltda. para Sky Airline | Dynatrace Business Observability*"
    }
  },
  "layouts": {
    "0":  {"x": 0,  "y": 0,  "w": 24, "h": 3},
    "1":  {"x": 0,  "y": 3,  "w": 8,  "h": 4},
    "2":  {"x": 8,  "y": 3,  "w": 8,  "h": 4},
    "3":  {"x": 16, "y": 3,  "w": 8,  "h": 4},
    "4":  {"x": 0,  "y": 7,  "w": 8,  "h": 4},
    "5":  {"x": 8,  "y": 7,  "w": 8,  "h": 4},
    "6":  {"x": 16, "y": 7,  "w": 8,  "h": 4},
    "7":  {"x": 0,  "y": 11, "w": 24, "h": 2},
    "8":  {"x": 0,  "y": 13, "w": 12, "h": 8},
    "9":  {"x": 12, "y": 13, "w": 12, "h": 8},
    "10": {"x": 0,  "y": 21, "w": 24, "h": 9},
    "11": {"x": 0,  "y": 30, "w": 12, "h": 8},
    "12": {"x": 12, "y": 30, "w": 12, "h": 8},
    "13": {"x": 0,  "y": 38, "w": 24, "h": 8},
    "14": {"x": 0,  "y": 46, "w": 24, "h": 4},
    "15": {"x": 0,  "y": 50, "w": 24, "h": 8},
    "16": {"x": 0,  "y": 58, "w": 24, "h": 4},
    "17": {"x": 0,  "y": 62, "w": 24, "h": 8},
    "18": {"x": 0,  "y": 70, "w": 24, "h": 2},
    "19": {"x": 0,  "y": 72, "w": 12, "h": 8},
    "20": {"x": 12, "y": 72, "w": 12, "h": 8},
    "21": {"x": 0,  "y": 80, "w": 24, "h": 8},
    "22": {"x": 0,  "y": 88, "w": 24, "h": 2},
    "23": {"x": 0,  "y": 90, "w": 12, "h": 7},
    "24": {"x": 12, "y": 90, "w": 12, "h": 7},
    "25": {"x": 0,  "y": 97, "w": 24, "h": 7},
    "26": {"x": 0,  "y": 104, "w": 24, "h": 2},
    "27": {"x": 0,  "y": 106, "w": 12, "h": 10},
    "28": {"x": 12, "y": 106, "w": 12, "h": 14}
  }
}
