{"type":"index-pattern","id":"sparrow-droneid-index-pattern","attributes":{"title":"sparrow-droneid-*","timeFieldName":"@timestamp","sourceFilters":"[]","fieldFormatMap":"{}"},"references":[],"migrationVersion":{"index-pattern":"7.6.0"}}
{"type":"visualization","id":"sparrow-droneid-metric-active-drones","attributes":{"title":"Active Drones","visState":"{\"title\":\"Active Drones\",\"type\":\"metric\",\"params\":{\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}},\"dimensions\":{\"metrics\":[{\"type\":\"vis_dimension\",\"accessor\":0,\"format\":{\"id\":\"number\",\"params\":{}}}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.serial_number\",\"customLabel\":\"Active Drones\"}}]}","uiStateJSON":"{\"vis\":{\"defaultColors\":{\"0 - 10000\":\"rgb(0,104,55)\"}}}","description":"","savedSearchRefName":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"droneid.state\",\"value\":\"active\"},\"query\":{\"match\":{\"droneid.state\":{\"query\":\"active\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-metric-active-alerts","attributes":{"title":"Active Alerts","visState":"{\"title\":\"Active Alerts\",\"type\":\"metric\",\"params\":{\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"Background\",\"colorsRange\":[{\"from\":0,\"to\":1},{\"from\":1,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":true,\"labelColor\":false,\"subText\":\"\",\"fontSize\":60}},\"dimensions\":{\"metrics\":[{\"type\":\"vis_dimension\",\"accessor\":0,\"format\":{\"id\":\"number\",\"params\":{}}}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Active Alerts\"}}]}","uiStateJSON":"{\"vis\":{\"defaultColors\":{\"0 - 1\":\"rgb(0,104,55)\",\"1 - 10000\":\"rgb(165,0,38)\"}}}","description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"alert\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"alert\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}},{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"droneid.alert.state\",\"value\":\"ACTIVE\"},\"query\":{\"match\":{\"droneid.alert.state\":{\"query\":\"ACTIVE\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-metric-max-altitude","attributes":{"title":"Max Altitude AGL (m)","visState":"{\"title\":\"Max Altitude AGL (m)\",\"type\":\"metric\",\"params\":{\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"metres AGL\",\"fontSize\":60}},\"dimensions\":{\"metrics\":[{\"type\":\"vis_dimension\",\"accessor\":0,\"format\":{\"id\":\"number\",\"params\":{\"pattern\":\"0.0\"}}}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.drone.height_agl\",\"customLabel\":\"Max Altitude AGL (m)\"}}]}","uiStateJSON":"{}","description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-metric-closest-drone","attributes":{"title":"Closest Drone (m)","visState":"{\"title\":\"Closest Drone (m)\",\"type\":\"metric\",\"params\":{\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"metres to nearest\",\"fontSize\":60}},\"dimensions\":{\"metrics\":[{\"type\":\"vis_dimension\",\"accessor\":0,\"format\":{\"id\":\"number\",\"params\":{\"pattern\":\"0\"}}}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"min\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.range.drone_m\",\"customLabel\":\"Closest Drone (m)\"}}]}","uiStateJSON":"{}","description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-vega-tactical-map","attributes":{"title":"Active Drones by Sensor","visState":"{\"title\": \"Active Drones by Sensor\", \"type\": \"vega\", \"params\": {\"spec\": \"{\\n  \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v5.json\\\",\\n  \\\"title\\\": \\\"Active Drones by Sensor\\\",\\n  \\\"data\\\": {\\n    \\\"url\\\": {\\n      \\\"index\\\": \\\"sparrow-droneid-*\\\",\\n      \\\"body\\\": {\\n        \\\"size\\\": 0,\\n        \\\"query\\\": {\\\"bool\\\": {\\\"must\\\": [{\\\"term\\\": {\\\"event.kind\\\": \\\"event\\\"}}]}},\\n        \\\"aggs\\\": {\\n          \\\"by_sensor\\\": {\\n            \\\"terms\\\": {\\\"field\\\": \\\"observer.name\\\", \\\"size\\\": 20},\\n            \\\"aggs\\\": {\\n              \\\"drones\\\": {\\\"cardinality\\\": {\\\"field\\\": \\\"droneid.serial_number\\\"}},\\n              \\\"latest\\\": {\\\"top_hits\\\": {\\\"size\\\": 1, \\\"sort\\\": [{\\\"@timestamp\\\": \\\"desc\\\"}], \\\"_source\\\": [\\\"droneid.serial_number\\\", \\\"droneid.state\\\"]}}\\n            }\\n          }\\n        }\\n      }\\n    },\\n    \\\"format\\\": {\\\"property\\\": \\\"aggregations.by_sensor.buckets\\\"}\\n  },\\n  \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true},\\n  \\\"encoding\\\": {\\n    \\\"x\\\": {\\\"field\\\": \\\"drones.value\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Unique Drones Detected\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"y\\\": {\\\"field\\\": \\\"key\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Sensor\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"color\\\": {\\\"value\\\": \\\"#27ae60\\\"},\\n    \\\"tooltip\\\": [\\n      {\\\"field\\\": \\\"key\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Sensor\\\"},\\n      {\\\"field\\\": \\\"drones.value\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Unique Drones\\\"},\\n      {\\\"field\\\": \\\"doc_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Total Detections\\\"}\\n    ]\\n  },\\n  \\\"config\\\": {\\\"background\\\": \\\"#1a1a2e\\\", \\\"view\\\": {\\\"stroke\\\": null}}\\n}\"}, \"aggs\": []}","uiStateJSON":"{}","description":"Vega-Lite map with three layers: drone positions (circles, colored by state), sensor positions (blue squares), operator positions (yellow triangles)","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-table-drone-roster","attributes":{"title":"Drone Roster","visState":"{\"title\":\"Drone Roster\",\"type\":\"table\",\"params\":{\"perPage\":25,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":12,\"direction\":\"desc\"},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Detections\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.drone.height_agl\",\"customLabel\":\"Height AGL (m)\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.drone.speed\",\"customLabel\":\"Speed (m/s)\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.drone.vertical_speed\",\"customLabel\":\"Vert Speed (m/s)\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.rf.rssi\",\"customLabel\":\"Avg RSSI (dBm)\"}},{\"id\":\"6\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.time_in_area_s\",\"customLabel\":\"Max Dwell (s)\"}},{\"id\":\"7\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"@timestamp\",\"customLabel\":\"Last Seen\"}},{\"id\":\"8\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.serial_number\",\"size\":500,\"order\":\"desc\",\"orderBy\":\"7\",\"customLabel\":\"Serial Number\"}},{\"id\":\"9\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.ua_type_name\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"UA Type\"}},{\"id\":\"10\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.vendor\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"Vendor\"}},{\"id\":\"11\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.state\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"State\"}},{\"id\":\"12\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.rf.rssi_trend\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"RSSI Trend\"}},{\"id\":\"13\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.range.drone_bearing_cardinal\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"Bearing\"}},{\"id\":\"14\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.operator.bvlos\",\"size\":2,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"BVLOS\"}}]}","uiStateJSON":"{\"vis\":{\"columnsWidth\":[]}}","description":"Latest status per drone: serial number, UA type, vendor, height, speed, RSSI, trend, bearing, BVLOS, state, dwell","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-area-presence","attributes":{"title":"Drone Presence Timeline","visState":"{\"title\":\"Drone Presence Timeline\",\"type\":\"area\",\"params\":{\"type\":\"area\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Detections\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"area\",\"mode\":\"stacked\",\"data\":{\"label\":\"Detections\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#34130C\"}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Detections\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-24h\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"droneid.serial_number\",\"size\":20,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"missingBucket\":false,\"customLabel\":\"Serial Number\"}}]}","uiStateJSON":"{}","description":"Area chart: detection count per drone over time \u2014 Gantt-style presence view","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"dashboard","id":"sparrow-droneid-tactical","attributes":{"title":"Sparrow DroneID \u2014 Tactical","description":"Real-time tactical overview: active drone count, alert count, closest drone, max altitude, live map, drone roster, and presence timeline.","hits":0,"timeRestore":true,"timeTo":"now","timeFrom":"now-24h","refreshInterval":{"pause":false,"value":30000},"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"hidePanelTitles\":false}","version":1,"panelsJSON":"[{\"gridData\":{\"x\":0,\"y\":0,\"w\":6,\"h\":6,\"i\":\"1\"},\"panelIndex\":\"1\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_1\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":6,\"y\":0,\"w\":6,\"h\":6,\"i\":\"2\"},\"panelIndex\":\"2\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_2\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":12,\"y\":0,\"w\":6,\"h\":6,\"i\":\"3\"},\"panelIndex\":\"3\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_3\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":18,\"y\":0,\"w\":6,\"h\":6,\"i\":\"4\"},\"panelIndex\":\"4\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_4\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":0,\"y\":6,\"w\":24,\"h\":22,\"i\":\"5\"},\"panelIndex\":\"5\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_5\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":0,\"y\":28,\"w\":24,\"h\":16,\"i\":\"6\"},\"panelIndex\":\"6\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_6\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":0,\"y\":44,\"w\":24,\"h\":12,\"i\":\"7\"},\"panelIndex\":\"7\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_7\",\"type\":\"visualization\",\"version\":\"7.9.3\"}]"},"references":[{"name":"panel_1","type":"visualization","id":"sparrow-droneid-metric-active-drones"},{"name":"panel_2","type":"visualization","id":"sparrow-droneid-metric-active-alerts"},{"name":"panel_3","type":"visualization","id":"sparrow-droneid-metric-max-altitude"},{"name":"panel_4","type":"visualization","id":"sparrow-droneid-metric-closest-drone"},{"name":"panel_5","type":"visualization","id":"sparrow-droneid-vega-tactical-map"},{"name":"panel_6","type":"visualization","id":"sparrow-droneid-table-drone-roster"},{"name":"panel_7","type":"visualization","id":"sparrow-droneid-area-presence"},{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"dashboard":"7.9.0"}}
{"type":"visualization","id":"sparrow-droneid-table-sensor-health","attributes":{"title":"Sensor Health Table","visState":"{\"title\":\"Sensor Health Table\",\"type\":\"table\",\"params\":{\"perPage\":25,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Total Detections (24h)\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"@timestamp\",\"customLabel\":\"Last Detection\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.serial_number\",\"customLabel\":\"Unique Drones\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.rf.rssi\",\"customLabel\":\"Avg RSSI (dBm)\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"observer.name\",\"size\":100,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Sensor\"}}]}","uiStateJSON":"{\"vis\":{\"columnsWidth\":[]}}","description":"Per-sensor: last detection time, total detections in the selected window, unique drones observed, and average RSSI","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-bar-detections-per-sensor","attributes":{"title":"Detections per Sensor per Hour","visState":"{\"title\":\"Detections per Sensor per Hour\",\"type\":\"histogram\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"stacked\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Detections\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"stacked\",\"data\":{\"label\":\"Detections\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true,\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#34130C\"}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Detections\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"timeRange\":{\"from\":\"now-24h\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"scaleMetricValues\":false,\"interval\":\"1h\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"observer.name\",\"size\":20,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"missingBucket\":false,\"customLabel\":\"Sensor\"}}]}","uiStateJSON":"{}","description":"Stacked bar: hourly detection count per sensor","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-vega-range-rssi-scatter","attributes":{"title":"Range vs RSSI Scatter","visState":"{\"title\": \"Range vs RSSI Scatter\", \"type\": \"vega\", \"params\": {\"spec\": \"{\\n  \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v5.json\\\",\\n  \\\"title\\\": \\\"Range vs RSSI\\\",\\n  \\\"data\\\": {\\n    \\\"url\\\": {\\n      \\\"index\\\": \\\"sparrow-droneid-*\\\",\\n      \\\"body\\\": {\\n        \\\"size\\\": 500,\\n        \\\"query\\\": {\\\"bool\\\": {\\\"must\\\": [{\\\"term\\\": {\\\"event.kind\\\": \\\"event\\\"}}, {\\\"exists\\\": {\\\"field\\\": \\\"droneid.range.drone_m\\\"}}, {\\\"exists\\\": {\\\"field\\\": \\\"droneid.rf.rssi\\\"}}]}},\\n        \\\"_source\\\": [\\\"droneid.range.drone_m\\\", \\\"droneid.rf.rssi\\\", \\\"observer.name\\\"],\\n        \\\"sort\\\": [{\\\"@timestamp\\\": \\\"desc\\\"}]\\n      }\\n    },\\n    \\\"format\\\": {\\\"property\\\": \\\"hits.hits\\\"}\\n  },\\n  \\\"transform\\\": [\\n    {\\\"calculate\\\": \\\"datum._source.droneid.range.drone_m\\\", \\\"as\\\": \\\"range_m\\\"},\\n    {\\\"calculate\\\": \\\"datum._source.droneid.rf.rssi\\\", \\\"as\\\": \\\"rssi\\\"},\\n    {\\\"calculate\\\": \\\"datum._source.observer.name || 'unknown'\\\", \\\"as\\\": \\\"sensor\\\"}\\n  ],\\n  \\\"mark\\\": {\\\"type\\\": \\\"point\\\", \\\"filled\\\": true, \\\"size\\\": 40, \\\"tooltip\\\": true},\\n  \\\"encoding\\\": {\\n    \\\"x\\\": {\\\"field\\\": \\\"range_m\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Range (m)\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"y\\\": {\\\"field\\\": \\\"rssi\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"RSSI (dBm)\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"color\\\": {\\\"field\\\": \\\"sensor\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Sensor\\\"},\\n    \\\"tooltip\\\": [\\n      {\\\"field\\\": \\\"sensor\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Sensor\\\"},\\n      {\\\"field\\\": \\\"range_m\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Range (m)\\\"},\\n      {\\\"field\\\": \\\"rssi\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"RSSI (dBm)\\\"}\\n    ]\\n  },\\n  \\\"config\\\": {\\\"background\\\": \\\"#1a1a2e\\\", \\\"view\\\": {\\\"stroke\\\": null}}\\n}\"}, \"aggs\": []}","uiStateJSON":"{}","description":"Vega-Lite scatter: range on X, average RSSI on Y, colored by sensor \u2014 shows per-sensor RF detection envelope","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-vega-sensor-health-map","attributes":{"title":"Sensor Status","description":"Active sensors with heartbeat count and coordinates","visState":"{\"title\": \"Sensor Status\", \"type\": \"vega\", \"aggs\": [], \"params\": {\"spec\": \"{\\n  \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v5.json\\\",\\n  \\\"title\\\": \\\"Sensor Status\\\",\\n  \\\"description\\\": \\\"Active sensors reporting heartbeats\\\",\\n  \\\"data\\\": {\\n    \\\"url\\\": {\\n      \\\"index\\\": \\\"sparrow-droneid-*\\\",\\n      \\\"body\\\": {\\n        \\\"size\\\": 0,\\n        \\\"aggs\\\": {\\n          \\\"sensors\\\": {\\n            \\\"terms\\\": {\\\"field\\\": \\\"observer.name\\\", \\\"size\\\": 50},\\n            \\\"aggs\\\": {\\n              \\\"last_seen\\\": {\\\"max\\\": {\\\"field\\\": \\\"@timestamp\\\"}},\\n              \\\"active_drones\\\": {\\\"max\\\": {\\\"field\\\": \\\"droneid.heartbeat.active_drones\\\"}},\\n              \\\"monitoring\\\": {\\\"max\\\": {\\\"field\\\": \\\"droneid.heartbeat.monitoring\\\"}},\\n              \\\"lat\\\": {\\\"avg\\\": {\\\"field\\\": \\\"observer.geo.location.lat\\\"}},\\n              \\\"lon\\\": {\\\"avg\\\": {\\\"field\\\": \\\"observer.geo.location.lon\\\"}}\\n            }\\n          }\\n        }\\n      }\\n    },\\n    \\\"format\\\": {\\\"property\\\": \\\"aggregations.sensors.buckets\\\"}\\n  },\\n  \\\"mark\\\": {\\\"type\\\": \\\"text\\\", \\\"fontSize\\\": 14},\\n  \\\"encoding\\\": {\\n    \\\"y\\\": {\\\"field\\\": \\\"key\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Sensor\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"x\\\": {\\\"field\\\": \\\"doc_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Heartbeats\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"text\\\": {\\\"field\\\": \\\"key\\\", \\\"type\\\": \\\"nominal\\\"},\\n    \\\"color\\\": {\\\"value\\\": \\\"#2980b9\\\"},\\n    \\\"tooltip\\\": [\\n      {\\\"field\\\": \\\"key\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Sensor\\\"},\\n      {\\\"field\\\": \\\"doc_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Heartbeats\\\"},\\n      {\\\"field\\\": \\\"active_drones.value\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Active Drones\\\"},\\n      {\\\"field\\\": \\\"lat.value\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Latitude\\\"},\\n      {\\\"field\\\": \\\"lon.value\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Longitude\\\"}\\n    ]\\n  },\\n  \\\"config\\\": {\\\"background\\\": \\\"#1a1a2e\\\", \\\"view\\\": {\\\"stroke\\\": null}}\\n}\"}}","uiStateJSON":"{}","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}"}},"references":[],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"dashboard","id":"sparrow-droneid-sensor-health","attributes":{"title":"Sparrow DroneID \u2014 Sensor Health","description":"Per-sensor coverage: last detection timestamp, detection volume, unique drones tracked, average RSSI, detections-per-hour chart, and range-vs-RSSI scatter.","hits":0,"timeRestore":true,"timeTo":"now","timeFrom":"now-24h","refreshInterval":{"pause":false,"value":60000},"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":true,\"hidePanelTitles\":false}","version":1,"panelsJSON":"[{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":16,\"i\":\"panel-map\"},\"panelIndex\":\"panel-map\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_map\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":0,\"y\":16,\"w\":24,\"h\":14,\"i\":\"1\"},\"panelIndex\":\"1\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_1\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":0,\"y\":30,\"w\":14,\"h\":14,\"i\":\"2\"},\"panelIndex\":\"2\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_2\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":14,\"y\":30,\"w\":10,\"h\":14,\"i\":\"3\"},\"panelIndex\":\"3\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_3\",\"type\":\"visualization\",\"version\":\"7.9.3\"}]"},"references":[{"name":"panel_1","type":"visualization","id":"sparrow-droneid-table-sensor-health"},{"name":"panel_2","type":"visualization","id":"sparrow-droneid-bar-detections-per-sensor"},{"name":"panel_3","type":"visualization","id":"sparrow-droneid-vega-range-rssi-scatter"},{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"},{"name":"panel_map","type":"visualization","id":"sparrow-droneid-vega-sensor-health-map"}],"migrationVersion":{"dashboard":"7.9.0"}}
{"type":"visualization","id":"sparrow-droneid-table-known-drones","attributes":{"title":"Known Drones","visState":"{\"title\":\"Known Drones\",\"type\":\"table\",\"params\":{\"perPage\":25,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":1,\"direction\":\"desc\"},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Detections\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"observer.name\",\"customLabel\":\"Sensors\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"min\",\"schema\":\"metric\",\"params\":{\"field\":\"@timestamp\",\"customLabel\":\"First Seen\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"@timestamp\",\"customLabel\":\"Last Seen\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"droneid.time_in_area_s\",\"customLabel\":\"Max Dwell (s)\"}},{\"id\":\"6\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.serial_number\",\"size\":500,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":false,\"missingBucket\":false,\"customLabel\":\"Serial Number\"}}]}","uiStateJSON":"{\"vis\":{\"columnsWidth\":[]}}","description":"Intelligence registry: per-drone detection count, sensors that saw it, first/last seen, and maximum dwell time","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-vega-activity-heatmap","attributes":{"title":"Activity Heatmap \u2014 Hour of Day vs Day of Week","visState":"{\"title\": \"Activity Heatmap \\u2014 Hour of Day vs Day of Week\", \"type\": \"vega\", \"params\": {\"spec\": \"{\\n  \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v5.json\\\",\\n  \\\"title\\\": \\\"Activity by Hour & Day\\\",\\n  \\\"data\\\": {\\n    \\\"url\\\": {\\n      \\\"index\\\": \\\"sparrow-droneid-*\\\",\\n      \\\"body\\\": {\\n        \\\"size\\\": 0,\\n        \\\"query\\\": {\\\"bool\\\": {\\\"must\\\": [{\\\"term\\\": {\\\"event.kind\\\": \\\"event\\\"}}]}},\\n        \\\"aggs\\\": {\\n          \\\"by_hour\\\": {\\n            \\\"histogram\\\": {\\\"field\\\": \\\"@timestamp\\\", \\\"interval\\\": 3600000, \\\"min_doc_count\\\": 1},\\n            \\\"aggs\\\": {\\\"count\\\": {\\\"value_count\\\": {\\\"field\\\": \\\"@timestamp\\\"}}}\\n          }\\n        }\\n      }\\n    },\\n    \\\"format\\\": {\\\"property\\\": \\\"aggregations.by_hour.buckets\\\"}\\n  },\\n  \\\"transform\\\": [\\n    {\\\"calculate\\\": \\\"hours(datum.key)\\\", \\\"as\\\": \\\"hour\\\"},\\n    {\\\"calculate\\\": \\\"day(datum.key)\\\", \\\"as\\\": \\\"day_name\\\"}\\n  ],\\n  \\\"mark\\\": {\\\"type\\\": \\\"rect\\\", \\\"tooltip\\\": true},\\n  \\\"encoding\\\": {\\n    \\\"x\\\": {\\\"field\\\": \\\"hour\\\", \\\"type\\\": \\\"ordinal\\\", \\\"title\\\": \\\"Hour of Day\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"y\\\": {\\\"field\\\": \\\"day_name\\\", \\\"type\\\": \\\"ordinal\\\", \\\"title\\\": \\\"Day\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"color\\\": {\\\"field\\\": \\\"doc_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Detections\\\", \\\"scale\\\": {\\\"scheme\\\": \\\"greens\\\"}},\\n    \\\"tooltip\\\": [\\n      {\\\"field\\\": \\\"hour\\\", \\\"type\\\": \\\"ordinal\\\", \\\"title\\\": \\\"Hour\\\"},\\n      {\\\"field\\\": \\\"day_name\\\", \\\"type\\\": \\\"ordinal\\\", \\\"title\\\": \\\"Day\\\"},\\n      {\\\"field\\\": \\\"doc_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Count\\\"}\\n    ]\\n  },\\n  \\\"config\\\": {\\\"background\\\": \\\"#1a1a2e\\\", \\\"view\\\": {\\\"stroke\\\": null}}\\n}\"}, \"aggs\": []}","uiStateJSON":"{}","description":"Vega-Lite heatmap: rows=day of week, columns=hour of day, color=detection count \u2014 reveals activity patterns","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-pie-protocol","attributes":{"title":"Protocol Distribution","visState":"{\"title\":\"Protocol Distribution\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Count\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"droneid.protocol\",\"size\":20,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"missingBucket\":false,\"customLabel\":\"Protocol\"}}]}","uiStateJSON":"{}","description":"Donut pie chart: proportion of detections by drone communication protocol","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-bar-altitude-dist","attributes":{"title":"Altitude Class Distribution","visState":"{\"title\":\"Altitude Class Distribution\",\"type\":\"histogram\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Detections\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"data\":{\"label\":\"Detections\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true,\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":false,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":false,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#34130C\"}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Detections\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"droneid.drone.altitude_class\",\"size\":10,\"order\":\"asc\",\"orderBy\":\"_key\",\"otherBucket\":false,\"missingBucket\":false,\"customLabel\":\"Altitude Class\"}}]}","uiStateJSON":"{}","description":"Bar chart: detection count by altitude class \u2014 GROUND, LOW, MEDIUM, HIGH, ILLEGAL","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"event\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"event\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"dashboard","id":"sparrow-droneid-intelligence","attributes":{"title":"Sparrow DroneID \u2014 Intelligence","description":"Historical intelligence: known drone registry, activity heatmap by time-of-week, protocol mix, and altitude class distribution.","hits":0,"timeRestore":true,"timeTo":"now","timeFrom":"now-7d","refreshInterval":{"pause":true,"value":0},"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":true,\"hidePanelTitles\":false}","version":1,"panelsJSON":"[{\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":14,\"i\":\"1\"},\"panelIndex\":\"1\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_1\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":0,\"y\":14,\"w\":12,\"h\":14,\"i\":\"2\"},\"panelIndex\":\"2\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_2\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":12,\"y\":14,\"w\":6,\"h\":14,\"i\":\"3\"},\"panelIndex\":\"3\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_3\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":18,\"y\":14,\"w\":6,\"h\":14,\"i\":\"4\"},\"panelIndex\":\"4\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_4\",\"type\":\"visualization\",\"version\":\"7.9.3\"}]"},"references":[{"name":"panel_1","type":"visualization","id":"sparrow-droneid-table-known-drones"},{"name":"panel_2","type":"visualization","id":"sparrow-droneid-vega-activity-heatmap"},{"name":"panel_3","type":"visualization","id":"sparrow-droneid-pie-protocol"},{"name":"panel_4","type":"visualization","id":"sparrow-droneid-bar-altitude-dist"},{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"dashboard":"7.9.0"}}
{"type":"visualization","id":"sparrow-droneid-table-alerts","attributes":{"title":"Alert Log","visState":"{\"title\":\"Alert Log\",\"type\":\"table\",\"params\":{\"perPage\":25,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":0,\"direction\":\"desc\"},\"showTotal\":false,\"totalFunc\":\"sum\",\"percentageCol\":\"\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Count\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"@timestamp\",\"customLabel\":\"Timestamp\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.serial_number\",\"size\":500,\"order\":\"desc\",\"orderBy\":\"2\",\"customLabel\":\"Serial Number\"}},{\"id\":\"4\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.alert.type\",\"size\":20,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"Alert Type\"}},{\"id\":\"5\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"droneid.alert.state\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"Alert State\"}},{\"id\":\"6\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"observer.name\",\"size\":50,\"order\":\"desc\",\"orderBy\":\"_count\",\"customLabel\":\"Sensor\"}}]}","uiStateJSON":"{\"vis\":{\"columnsWidth\":[]}}","description":"Sortable alert log: timestamp, serial number, alert type, alert state, sensor \u2014 filtered to event.kind:alert","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"alert\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"alert\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-pie-alert-types","attributes":{"title":"Alert Type Distribution","visState":"{\"title\":\"Alert Type Distribution\",\"type\":\"pie\",\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"bottom\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Count\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"droneid.alert.type\",\"size\":20,\"order\":\"desc\",\"orderBy\":\"1\",\"otherBucket\":true,\"missingBucket\":false,\"customLabel\":\"Alert Type\"}}]}","uiStateJSON":"{}","description":"Donut pie: proportion of each alert type fired in the selected time window","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"alert\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"alert\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-line-alert-timeline","attributes":{"title":"Alert Volume Over Time","visState":"{\"title\":\"Alert Volume Over Time\",\"type\":\"line\",\"params\":{\"type\":\"line\",\"grid\":{\"categoryLines\":false},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"filter\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":100},\"title\":{\"text\":\"Alerts\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"line\",\"mode\":\"normal\",\"data\":{\"label\":\"Alerts\",\"id\":\"1\"},\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true,\"interpolate\":\"linear\",\"valueAxis\":\"ValueAxis-1\"}],\"addTooltip\":true,\"addLegend\":false,\"legendPosition\":\"bottom\",\"times\":[],\"addTimeMarker\":true,\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#34130C\"}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Alerts\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"useNormalizedEsInterval\":true,\"scaleMetricValues\":false,\"interval\":\"auto\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{}}}]}","uiStateJSON":"{}","description":"Line chart: alert count per time bucket \u2014 shows alert rate spikes","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"alert\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"alert\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-metric-unacknowledged","attributes":{"title":"Unacknowledged Alerts","visState":"{\"title\":\"Unacknowledged Alerts\",\"type\":\"metric\",\"params\":{\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"Background\",\"colorsRange\":[{\"from\":0,\"to\":1},{\"from\":1,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":true,\"labelColor\":false,\"subText\":\"unacknowledged\",\"fontSize\":60}},\"dimensions\":{\"metrics\":[{\"type\":\"vis_dimension\",\"accessor\":0,\"format\":{\"id\":\"number\",\"params\":{}}}]}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Unacknowledged Alerts\"}}]}","uiStateJSON":"{\"vis\":{\"defaultColors\":{\"0 - 1\":\"rgb(0,104,55)\",\"1 - 10000\":\"rgb(165,0,38)\"}}}","description":"Count of alerts with droneid.alert.state:ACTIVE","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"sparrow-droneid-index-pattern\",\"filter\":[{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"event.kind\",\"value\":\"alert\"},\"query\":{\"match\":{\"event.kind\":{\"query\":\"alert\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}},{\"meta\":{\"index\":\"sparrow-droneid-index-pattern\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"droneid.alert.state\",\"value\":\"ACTIVE\"},\"query\":{\"match\":{\"droneid.alert.state\":{\"query\":\"ACTIVE\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}],\"query\":{\"query\":\"\",\"language\":\"kuery\"}}"}},"references":[{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"}],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"visualization","id":"sparrow-droneid-vega-alerts-map","attributes":{"title":"Alerts by Type & Sensor","description":"Geographic distribution of alerts","visState":"{\"title\": \"Alerts by Type & Sensor\", \"type\": \"vega\", \"aggs\": [], \"params\": {\"spec\": \"{\\n  \\\"$schema\\\": \\\"https://vega.github.io/schema/vega-lite/v5.json\\\",\\n  \\\"title\\\": \\\"Alert Locations\\\",\\n  \\\"description\\\": \\\"Alert events by sensor and type\\\",\\n  \\\"data\\\": {\\n    \\\"url\\\": {\\n      \\\"index\\\": \\\"sparrow-droneid-*\\\",\\n      \\\"body\\\": {\\n        \\\"size\\\": 0,\\n        \\\"query\\\": {\\\"bool\\\": {\\\"must\\\": [{\\\"term\\\": {\\\"event.kind\\\": \\\"alert\\\"}}]}},\\n        \\\"aggs\\\": {\\n          \\\"by_type\\\": {\\n            \\\"terms\\\": {\\\"field\\\": \\\"droneid.alert.type\\\", \\\"size\\\": 20},\\n            \\\"aggs\\\": {\\n              \\\"by_sensor\\\": {\\\"terms\\\": {\\\"field\\\": \\\"observer.name\\\", \\\"size\\\": 20}}\\n            }\\n          }\\n        }\\n      }\\n    },\\n    \\\"format\\\": {\\\"property\\\": \\\"aggregations.by_type.buckets\\\"}\\n  },\\n  \\\"transform\\\": [{\\\"flatten\\\": [\\\"by_sensor.buckets\\\"], \\\"as\\\": [\\\"sensor_bucket\\\"]}, {\\\"filter\\\": \\\"datum.sensor_bucket != null\\\"}],\\n  \\\"mark\\\": {\\\"type\\\": \\\"bar\\\", \\\"tooltip\\\": true},\\n  \\\"encoding\\\": {\\n    \\\"x\\\": {\\\"field\\\": \\\"sensor_bucket.doc_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Alerts\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"y\\\": {\\\"field\\\": \\\"key\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Alert Type\\\", \\\"axis\\\": {\\\"labelColor\\\": \\\"#ccc\\\", \\\"titleColor\\\": \\\"#ccc\\\"}},\\n    \\\"color\\\": {\\\"field\\\": \\\"sensor_bucket.key\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Sensor\\\"},\\n    \\\"tooltip\\\": [\\n      {\\\"field\\\": \\\"key\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Alert Type\\\"},\\n      {\\\"field\\\": \\\"sensor_bucket.key\\\", \\\"type\\\": \\\"nominal\\\", \\\"title\\\": \\\"Sensor\\\"},\\n      {\\\"field\\\": \\\"sensor_bucket.doc_count\\\", \\\"type\\\": \\\"quantitative\\\", \\\"title\\\": \\\"Count\\\"}\\n    ]\\n  },\\n  \\\"config\\\": {\\\"background\\\": \\\"#1a1a2e\\\", \\\"view\\\": {\\\"stroke\\\": null}}\\n}\"}}","uiStateJSON":"{}","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\": {\"query\": \"\", \"language\": \"kuery\"}, \"filter\": []}"}},"references":[],"migrationVersion":{"visualization":"7.10.0"}}
{"type":"dashboard","id":"sparrow-droneid-alerts","attributes":{"title":"Sparrow DroneID \u2014 Alerts","description":"Alert management: unacknowledged count, alert type distribution, alert volume timeline, and sortable alert log filtered to event.kind:alert.","hits":0,"timeRestore":true,"timeTo":"now","timeFrom":"now-24h","refreshInterval":{"pause":false,"value":30000},"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"event.kind: alert\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"hidePanelTitles\":false}","version":1,"panelsJSON":"[{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":14,\"i\":\"panel-map\"},\"panelIndex\":\"panel-map\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_map\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":0,\"y\":14,\"w\":8,\"h\":6,\"i\":\"1\"},\"panelIndex\":\"1\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_1\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":8,\"y\":14,\"w\":8,\"h\":12,\"i\":\"2\"},\"panelIndex\":\"2\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_2\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":16,\"y\":14,\"w\":8,\"h\":12,\"i\":\"3\"},\"panelIndex\":\"3\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_3\",\"type\":\"visualization\",\"version\":\"7.9.3\"},{\"gridData\":{\"x\":0,\"y\":26,\"w\":24,\"h\":16,\"i\":\"4\"},\"panelIndex\":\"4\",\"embeddableConfig\":{\"enhancements\":{}},\"panelRefName\":\"panel_4\",\"type\":\"visualization\",\"version\":\"7.9.3\"}]"},"references":[{"name":"panel_1","type":"visualization","id":"sparrow-droneid-metric-unacknowledged"},{"name":"panel_2","type":"visualization","id":"sparrow-droneid-pie-alert-types"},{"name":"panel_3","type":"visualization","id":"sparrow-droneid-line-alert-timeline"},{"name":"panel_4","type":"visualization","id":"sparrow-droneid-table-alerts"},{"name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern","id":"sparrow-droneid-index-pattern"},{"name":"panel_map","type":"visualization","id":"sparrow-droneid-vega-alerts-map"}],"migrationVersion":{"dashboard":"7.9.0"}}
