apiVersion: v1
kind: ConfigMap
metadata:
  name: session-telemetry-dashboard
  labels:
    grafana_dashboard: "1"
data:
  session-telemetry.json: |
    {
      "annotations": {
        "list": []
      },
      "editable": true,
      "gnetId": null,
      "graphTooltip": 0,
      "hideControls": false,
      "id": null,
      "iteration": 1583185057230,
      "links": [],
      "panels": [
        {
          "datasource": "Prometheus",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "red", "value": null },
                  { "color": "green", "value": 95 }
                ]
              },
              "unit": "percent"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 4,
            "w": 6,
            "x": 0,
            "y": 0
          },
          "id": 1,
          "options": {
            "orientation": "auto",
            "reduceOptions": {
              "calcs": ["lastNotNull"],
              "fields": "",
              "values": false
            },
            "showThresholdLabels": false,
            "showThresholdMarkers": true
          },
          "pluginVersion": "8.0.0",
          "targets": [
            {
              "expr": "sum(increase(session_peer_telemetry_total{video_seen="true", classifier=~"$classifier"}[$__range])) / sum(increase(session_peer_telemetry_total{classifier=~"$classifier"}[$__range])) * 100",
              "refId": "A"
            }
          ],
          "description": "Percentage of telemetry events where video was successfully seen by the participant.",
          "title": "Overall Video Success Rate",
          "type": "stat"
        },
        {
          "datasource": "${logs}",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "green", "value": null }
                ]
              },
              "unit": "none"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 4,
            "w": 6,
            "x": 6,
            "y": 0
          },
          "id": 13,
          "options": {
            "orientation": "auto",
            "reduceOptions": {
              "calcs": ["lastNotNull"],
              "fields": "",
              "values": false
            },
            "showThresholdLabels": false,
            "showThresholdMarkers": true
          },
          "pluginVersion": "8.0.0",
          "targets": [
            {
              "expr": "sum(count_over_time({namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" [$__range]))",
              "refId": "A"
            }
          ],
          "description": "Total number of participants who joined a session in the selected time range.",
          "title": "Participants Joined",
          "type": "stat"
        },
        {
          "datasource": "${logs}",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "thresholds"
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "blue", "value": null }
                ]
              },
              "unit": "none"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 4,
            "w": 6,
            "x": 12,
            "y": 0
          },
          "id": 14,
          "options": {
            "orientation": "auto",
            "reduceOptions": {
              "calcs": ["lastNotNull"],
              "fields": "",
              "values": false
            },
            "showThresholdLabels": false,
            "showThresholdMarkers": true
          },
          "pluginVersion": "8.0.0",
          "targets": [
            {
              "expr": "count(sum by (room) (count_over_time({namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt [$__range])))",
              "refId": "A"
            }
          ],
          "description": "Total number of unique rooms joined in the selected time range.",
          "title": "Unique Rooms Joined",
          "type": "stat"
        },
        {
          "datasource": "${logs}",
          "fieldConfig": {
            "defaults": {
              "color": {
                "mode": "palette-classic"
              },
              "custom": {
                "axisLabel": "Joins",
                "axisPlacement": "auto",
                "barAlignment": 0,
                "drawStyle": "line",
                "fillOpacity": 10,
                "gradientMode": "none",
                "hideFrom": {
                  "legend": false,
                  "tooltip": false,
                  "viz": false
                },
                "lineInterpolation": "smooth",
                "lineWidth": 2,
                "pointSize": 5,
                "showPoints": "auto",
                "spanNulls": false,
                "stacking": {
                  "group": "A",
                  "mode": "none"
                },
                "thresholdsStyle": {
                  "mode": "off"
                }
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "green", "value": null }
                ]
              },
              "unit": "none"
            },
            "overrides": []
          },
          "gridPos": {
            "h": 4,
            "w": 6,
            "x": 18,
            "y": 0
          },
          "id": 15,
          "options": {
            "legend": {
              "calcs": [],
              "displayMode": "list",
              "placement": "bottom"
            },
            "tooltip": {
              "mode": "single"
            }
          },
          "targets": [
            {
              "expr": "sum(count_over_time({namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" [$__interval]))",
              "legendFormat": "Joins",
              "refId": "A"
            }
          ],
          "description": "Timeline of participant join events.",
          "title": "Join Events Over Time",
          "type": "timeseries"
        },
        {
          "datasource": "Prometheus",
          "gridPos": {
            "h": 8,
            "w": 8,
            "x": 0,
            "y": 4
          },
          "id": 2,
          "options": {
            "legend": {
              "displayMode": "list",
              "placement": "right",
              "values": [
                "value"
              ]
            },
            "pieType": "pie",
            "reduceOptions": {
              "calcs": ["lastNotNull"],
              "fields": "",
              "values": false
            }
          },
          "targets": [
            {
              "expr": "sum(increase(session_peer_telemetry_total{classifier=~"$classifier"}[$__range])) by (p2p)",
              "legendFormat": "P2P: {{ "{{" }}p2p{{ "}}" }}",
              "refId": "A"
            }
          ],
          "description": "Breakdown of peer connections using direct P2P vs those relayed through a TURN server.",
          "title": "P2P vs non-P2P",
          "type": "piechart"
        },
        {
          "datasource": "Prometheus",
          "gridPos": {
            "h": 8,
            "w": 8,
            "x": 8,
            "y": 4
          },
          "id": 12,
          "options": {
            "legend": {
              "displayMode": "list",
              "placement": "right",
              "values": [
                "value"
              ]
            },
            "pieType": "pie",
            "reduceOptions": {
              "calcs": ["lastNotNull"],
              "fields": "",
              "values": false
            }
          },
          "targets": [
            {
              "expr": "sum(increase(session_peer_telemetry_total{classifier=~"$classifier"}[$__range])) by (relay)",
              "legendFormat": "Relay: {{ "{{" }}relay{{ "}}" }}",
              "refId": "A"
            }
          ],
          "description": "Breakdown of peer connections using a TURN relay vs direct connections.",
          "title": "Turn vs No Turn",
          "type": "piechart"
        },
        {
          "datasource": "Prometheus",
          "gridPos": {
            "h": 8,
            "w": 8,
            "x": 16,
            "y": 4
          },
          "id": 3,
          "options": {
            "legend": {
              "displayMode": "list",
              "placement": "right",
              "values": [
                "value"
              ]
            },
            "pieType": "pie",
            "reduceOptions": {
              "calcs": ["lastNotNull"],
              "fields": "",
              "values": false
            }
          },
          "targets": [
            {
              "expr": "sum(increase(session_peer_telemetry_total{classifier=~"$classifier"}[$__range])) by (protocol)",
              "legendFormat": "{{ "{{" }}protocol{{ "}}" }}",
              "refId": "A"
            }
          ],
          "description": "Comparison of transport protocols (UDP vs TCP) used by participants.",
          "title": "Protocol Breakdown (UDP/TCP)",
          "type": "piechart"
        },
        {
          "datasource": "Prometheus",
          "gridPos": {
            "h": 8,
            "w": 8,
            "x": 0,
            "y": 12
          },
          "id": 4,
          "options": {
            "legend": {
              "displayMode": "list",
              "placement": "right",
              "values": [
                "value"
              ]
            },
            "pieType": "pie",
            "reduceOptions": {
              "calcs": ["lastNotNull"],
              "fields": "",
              "values": false
            }
          },
          "targets": [
            {
              "expr": "sum(increase(session_summary_telemetry_total{type=\"join\", classifier=~\"${classifier:regex}\"}[$__range])) by (how_many_seen)",
              "legendFormat": "{{ "{{" }}how_many_seen{{ "}}" }}",
              "refId": "A"
            }
          ],
          "description": "Summary of what participants saw upon joining (e.g., 'first' in the room vs 'all' others seen).",
          "title": "Join Summary",
          "type": "piechart"
        },
        {
          "datasource": "Prometheus",
          "gridPos": {
            "h": 8,
            "w": 8,
            "x": 8,
            "y": 12
          },
          "id": 7,
          "options": {
            "legend": {
              "displayMode": "list",
              "placement": "right",
              "values": [
                "value"
              ]
            },
            "pieType": "pie",
            "reduceOptions": {
              "calcs": ["lastNotNull"],
              "fields": "",
              "values": false
            }
          },
          "targets": [
            {
              "expr": "sum(increase(session_summary_telemetry_total{type=\"leave\", classifier=~\"${classifier:regex}\"}[$__range])) by (how_many_seen)",
              "legendFormat": "{{ "{{" }}how_many_seen{{ "}}" }}",
              "refId": "A"
            }
          ],
          "description": "Summary of what participants had seen by the time they left the session.",
          "title": "Leave Summary",
          "type": "piechart"
        },
        {
          "datasource": "Prometheus",
          "gridPos": {
            "h": 8,
            "w": 8,
            "x": 0,
            "y": 20
          },
          "id": 5,
          "options": {
            "calculate": false,
            "calculation": {},
            "color": {
              "mode": "scheme",
              "scheme": "Oranges"
            },
            "dataFormat": "tsbuckets",
            "hideZeroBuckets": true,
            "yAxis": {
              "axisPlacement": "auto",
              "axisUnit": "short"
            }
          },
          "targets": [
            {
              "expr": "sum(increase(session_join_telemetry_others_bucket{classifier=~\"${classifier:regex}\"}[$__range])) by (le)",
              "format": "heatmap",
              "refId": "A"
            }
          ],
          "description": "Heatmap showing the number of other participants already present in the room when a new user joins.",
          "title": "Participants on Join (Distribution)",
          "type": "heatmap"
        },
        {
          "datasource": "Prometheus",
          "gridPos": {
            "h": 8,
            "w": 8,
            "x": 8,
            "y": 20
          },
          "id": 6,
          "options": {
            "calculate": false,
            "calculation": {},
            "color": {
              "mode": "scheme",
              "scheme": "Blues"
            },
            "dataFormat": "tsbuckets",
            "hideZeroBuckets": true,
            "yAxis": {
              "axisPlacement": "auto",
              "axisUnit": "s"
            }
          },
          "targets": [
            {
              "expr": "sum(increase(session_join_telemetry_age_bucket{classifier=~\"${classifier:regex}\"}[$__range])) by (le)",
              "format": "heatmap",
              "refId": "A"
            }
          ],
          "description": "Heatmap showing how long the session has been active when a new user joins.",
          "title": "Session Age on Join (Distribution)",
          "type": "heatmap"
        },
        {
          "datasource": "${logs}",
          "fieldConfig": {
            "defaults": {
              "custom": {
                "align": "auto",
                "displayMode": "auto"
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "green", "value": null }
                ]
              }
            },
            "overrides": []
          },
          "gridPos": {
            "h": 8,
            "w": 24,
            "x": 0,
            "y": 28
          },
          "id": 8,
          "options": {
            "showHeader": true
          },
          "targets": [
            {
              "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=peer_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt",
              "maxLines": 500,
              "refId": "A"
            }
          ],
          "description": "Raw table of connection and media telemetry events per user/room.",
          "title": "Raw Peer Telemetry",
          "transformations": [
            {
              "id": "extractFields",
              "options": {
                "format": "json",
                "source": "labels"
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {
                  "app": true,
                  "app_kubernetes_io_component": true,
                  "app_kubernetes_io_name": true,
                  "cluster": true,
                  "container": true,
                  "filename": true,
                  "id": true,
                  "job": true,
                  "labels": true,
                  "level": true,
                  "Line": true,
                  "namespace": true,
                  "pod": true,
                  "pod_template_hash": true,
                  "stream": true,
                  "tsNs": true,
                  "type": true
                },
                "indexByName": {
                  "Time": 0,
                  "room": 1,
                  "user": 2,
                  "p2p": 3,
                  "protocol": 4,
                  "relay": 5,
                  "turn_server": 6,
                  "video_seen": 7,
                  "local_candidate_type": 8,
                  "remote_candidate_type": 9,
                  "remote_ip": 10,
                  "ice_state": 11,
                  "user_agent": 12,
                  "local_url": 13,
                  "local_port": 14,
                  "local_rel_port": 15,
                  "local_rel_addr": 16,
                  "rtt": 17
                },
                "renameByName": {
                  "ice_state": "ICE State",
                  "local_candidate_type": "Local Candidate",
                  "remote_candidate_type": "Remote Candidate",
                  "remote_ip": "Remote IP",
                  "user_agent": "User Agent",
                  "local_url": "STUN/TURN URL",
                  "local_port": "Ext Port",
                  "local_rel_port": "Int Port",
                  "local_rel_addr": "Int IP",
                  "rtt": "RTT"
                }
              }
            }
          ],
          "type": "table"
        },
        {
          "datasource": "${logs}",
          "fieldConfig": {
            "defaults": {
              "custom": {
                "align": "auto",
                "displayMode": "auto"
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "green", "value": null }
                ]
              }
            },
            "overrides": []
          },
          "gridPos": {
            "h": 8,
            "w": 24,
            "x": 0,
            "y": 36
          },
          "id": 9,
          "options": {
            "showHeader": true
          },
          "targets": [
            {
              "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt",
              "maxLines": 500,
              "refId": "A"
            }
          ],
          "description": "Raw table of events recorded exactly when a user joins a room.",
          "title": "Raw Join Telemetry",
          "transformations": [
            {
              "id": "extractFields",
              "options": {
                "format": "json",
                "source": "labels"
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {
                  "app": true,
                  "app_kubernetes_io_component": true,
                  "app_kubernetes_io_name": true,
                  "cluster": true,
                  "container": true,
                  "filename": true,
                  "id": true,
                  "job": true,
                  "labels": true,
                  "level": true,
                  "Line": true,
                  "namespace": true,
                  "pod": true,
                  "pod_template_hash": true,
                  "stream": true,
                  "tsNs": true,
                  "type": true
                },
                "indexByName": {
                  "Time": 0,
                  "room": 1,
                  "user": 2,
                  "others_on_join": 3,
                  "session_age_on_join": 4
                },
                "renameByName": {}
              }
            }
          ],
          "type": "table"
        },
        {
          "datasource": "${logs}",
          "fieldConfig": {
            "defaults": {
              "custom": {
                "align": "auto",
                "displayMode": "auto"
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "green", "value": null }
                ]
              }
            },
            "overrides": []
          },
          "gridPos": {
            "h": 8,
            "w": 24,
            "x": 0,
            "y": 44
          },
          "id": 10,
          "options": {
            "showHeader": true
          },
          "targets": [
            {
              "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=join_summary_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt",
              "maxLines": 500,
              "refId": "A"
            }
          ],
          "description": "Detailed counts of participants seen by the user upon joining.",
          "title": "Raw Join Summary Telemetry",
          "transformations": [
            {
              "id": "extractFields",
              "options": {
                "format": "json",
                "source": "labels"
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {
                  "app": true,
                  "app_kubernetes_io_component": true,
                  "app_kubernetes_io_name": true,
                  "cluster": true,
                  "container": true,
                  "filename": true,
                  "id": true,
                  "job": true,
                  "labels": true,
                  "level": true,
                  "Line": true,
                  "namespace": true,
                  "pod": true,
                  "pod_template_hash": true,
                  "stream": true,
                  "tsNs": true,
                  "type": true
                },
                "indexByName": {
                  "Time": 0,
                  "room": 1,
                  "user": 2,
                  "how_many_seen_on_join": 3
                },
                "renameByName": {}
              }
            }
          ],
          "type": "table"
        },
        {
          "datasource": "${logs}",
          "fieldConfig": {
            "defaults": {
              "custom": {
                "align": "auto",
                "displayMode": "auto"
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "green", "value": null }
                ]
              }
            },
            "overrides": []
          },
          "gridPos": {
            "h": 8,
            "w": 24,
            "x": 0,
            "y": 52
          },
          "id": 11,
          "options": {
            "showHeader": true
          },
          "targets": [
            {
              "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=leave_summary_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" | logfmt",
              "maxLines": 500,
              "refId": "A"
            }
          ],
          "description": "Detailed counts of participants seen by the user throughout their entire session once they leave.",
          "title": "Raw Leave Summary Telemetry",
          "transformations": [
            {
              "id": "extractFields",
              "options": {
                "format": "json",
                "source": "labels"
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {
                  "app": true,
                  "app_kubernetes_io_component": true,
                  "app_kubernetes_io_name": true,
                  "cluster": true,
                  "container": true,
                  "filename": true,
                  "id": true,
                  "job": true,
                  "labels": true,
                  "level": true,
                  "Line": true,
                  "namespace": true,
                  "pod": true,
                  "pod_template_hash": true,
                  "stream": true,
                  "tsNs": true,
                  "type": true
                },
                "indexByName": {
                  "Time": 0,
                  "room": 1,
                  "user": 2,
                  "how_many_seen_on_leave": 3
                },
                "renameByName": {}
              }
            }
          ],
          "type": "table"
        },
        {
          "datasource": "${logs}",
          "fieldConfig": {
            "defaults": {
              "custom": {
                "align": "auto",
                "displayMode": "auto"
              },
              "mappings": [],
              "thresholds": {
                "mode": "absolute",
                "steps": [
                  { "color": "green", "value": null }
                ]
              }
            },
            "overrides": []
          },
          "gridPos": {
            "h": 8,
            "w": 24,
            "x": 0,
            "y": 60
          },
          "id": 16,
          "options": {
            "showHeader": true
          },
          "targets": [
            {
              "expr": "{namespace=\"webrtc-be\", container=\"webrtc-be\"} |= \"type=peer_telemetry\" |~ \"classifier=\\\"(${classifier:regex})\\\"\" |= \"protocol=unknown\" | logfmt",
              "maxLines": 500,
              "refId": "A"
            }
          ],
          "description": "Filtered view of telemetry where the protocol was reported as unknown.",
          "title": "Unknown Peers",
          "transformations": [
            {
              "id": "extractFields",
              "options": {
                "format": "json",
                "source": "labels"
              }
            },
            {
              "id": "organize",
              "options": {
                "excludeByName": {
                  "app": true,
                  "app_kubernetes_io_component": true,
                  "app_kubernetes_io_name": true,
                  "cluster": true,
                  "container": true,
                  "filename": true,
                  "id": true,
                  "job": true,
                  "labels": true,
                  "level": true,
                  "Line": true,
                  "namespace": true,
                  "pod": true,
                  "pod_template_hash": true,
                  "stream": true,
                  "tsNs": true,
                  "type": true
                },
                "indexByName": {
                  "Time": 0,
                  "room": 1,
                  "user": 2,
                  "p2p": 3,
                  "protocol": 4,
                  "relay": 5,
                  "turn_server": 6,
                  "video_seen": 7,
                  "local_candidate_type": 8,
                  "remote_candidate_type": 9,
                  "remote_ip": 10,
                  "ice_state": 11,
                  "user_agent": 12,
                  "local_url": 13,
                  "local_port": 14,
                  "local_rel_port": 15,
                  "local_rel_addr": 16,
                  "rtt": 17
                },
                "renameByName": {
                  "ice_state": "ICE State",
                  "local_candidate_type": "Local Candidate",
                  "remote_candidate_type": "Remote Candidate",
                  "remote_ip": "Remote IP",
                  "user_agent": "User Agent",
                  "local_url": "STUN/TURN URL",
                  "local_port": "Ext Port",
                  "local_rel_port": "Int Port",
                  "local_rel_addr": "Int IP",
                  "rtt": "RTT"
                }
              }
            }
          ],
          "type": "table"
        }
      ],
      "refresh": "30s",
      "schemaVersion": 30,
      "style": "dark",
      "tags": ["webrtc", "telemetry"],
      "templating": {
        "list": [
          {
            "current": {
              "selected": false,
              "text": "Loki",
              "value": "Loki"
            },
            "hide": 0,
            "includeAll": false,
            "label": "Logs Datasource",
            "multi": false,
            "name": "logs",
            "options": [],
            "query": "loki",
            "refresh": 1,
            "regex": "",
            "skipUrlSync": false,
            "type": "datasource"
          },
          {
            "allValue": ".*",
            "current": {
              "selected": false,
              "text": "All",
              "value": "$__all"
            },
            "hide": 0,
            "includeAll": true,
            "label": "Classifier",
            "multi": true,
            "name": "classifier",
            "options": [
              {
                "selected": true,
                "text": "All",
                "value": "$__all"
              },
              {
                "selected": false,
                "text": "Real",
                "value": "Real"
              },
              {
                "selected": false,
                "text": "Test",
                "value": "Test"
              },
              {
                "selected": false,
                "text": "Probe",
                "value": "Probe"
              }
            ],
            "query": "Real,Test,Probe",
            "refresh": 0,
            "type": "custom"
          }
        ]
      },
      "time": {
        "from": "now-1h",
        "to": "now"
      },
      "timepicker": {},
      "timezone": "",
      "title": "WebRTC Session Telemetry",
      "uid": "webrtc-session-telemetry"
    }
