#!/bin/bash # discover-influxdb.sh — Query InfluxDB to discover measurements, fields, and tags # Usage: ./discover-influxdb.sh [namespace] # Requires: kubectl, curl, jq set -euo pipefail NAMESPACE="${1:-influxdb}" INFLUXDB_TOKEN="enaiY9yaiWi6ahv0phoph3FaiphoGh" INFLUXDB_ORG="influxdata" INFLUXDB_BUCKET="default" LOCAL_PORT="8086" echo "=== InfluxDB Discovery ===" echo "Namespace: $NAMESPACE" echo "" # Start port-forward in background echo "→ Starting port-forward to influxdb-influxdb2..." kubectl -n "$NAMESPACE" port-forward "svc/influxdb-influxdb2" "$LOCAL_PORT:80" &>/dev/null & PF_PID=$! sleep 2 # Ensure cleanup on exit cleanup() { kill "$PF_PID" 2>/dev/null || true } trap cleanup EXIT API="http://localhost:$LOCAL_PORT/api/v2/query?org=$INFLUXDB_ORG" AUTH="Authorization: Token $INFLUXDB_TOKEN" CT="Content-Type: application/vnd.flux" echo "" echo "=== Measurements (tables) in bucket '$INFLUXDB_BUCKET' ===" curl -s "$API" -H "$AUTH" -H "$CT" \ -d "import \"influxdata/influxdb/schema\" schema.measurements(bucket: \"$INFLUXDB_BUCKET\")" \ | jq -r '.[] | ._value' 2>/dev/null || echo "(no results or parse error)" echo "" echo "=== Measurements with data in last 6 months ===" curl -s "$API" -H "$AUTH" -H "$CT" \ -d "from(bucket: \"$INFLUXDB_BUCKET\") |> range(start: -6mo) |> keep(columns: [\"_measurement\"]) |> distinct() |> sort()" \ | jq -r '.[] | ._value' 2>/dev/null || echo "(no results or parse error)" echo "" echo "=== For each measurement: fields, tags, and sample count ===" # Get measurements MEASUREMENTS=$(curl -s "$API" -H "$AUTH" -H "$CT" \ -d "import \"influxdata/influxdb/schema\" schema.measurements(bucket: \"$INFLUXDB_BUCKET\")" \ | jq -r '.[] | ._value' 2>/dev/null) for m in $MEASUREMENTS; do echo "" echo "--- Measurement: $m ---" # Fields echo " Fields:" curl -s "$API" -H "$AUTH" -H "$CT" \ -d "import \"influxdata/influxdb/schema\" schema.measurementFieldKeys(bucket: \"$INFLUXDB_BUCKET\", measurement: \"$m\")" \ | jq -r '.[] | " - \(._value)"' 2>/dev/null || echo " (none)" # Tags echo " Tags:" curl -s "$API" -H "$AUTH" -H "$CT" \ -d "import \"influxdata/influxdb/schema\" schema.measurementTagKeys(bucket: \"$INFLUXDB_BUCKET\", measurement: \"$m\")" \ | jq -r '.[] | " - \(._value)"' 2>/dev/null || echo " (none)" # Tag values for entity_id (most common tag in HA data) echo " entity_id values (sample):" curl -s "$API" -H "$AUTH" -H "$CT" \ -d "import \"influxdata/influxdb/schema\" schema.tagValues(bucket: \"$INFLUXDB_BUCKET\", tag: \"entity_id\") |> filter(fn: (r) => r._measurement == \"$m\") |> limit(n: 20)" \ | jq -r '.[] | " - \(._value)"' 2>/dev/null || echo " (none)" # Sample count in last 6 months echo " Data points (last 6 months):" curl -s "$API" -H "$AUTH" -H "$CT" \ -d "from(bucket: \"$INFLUXDB_BUCKET\") |> range(start: -6mo) |> filter(fn: (r) => r._measurement == \"$m\") |> count()" \ | jq -r '.[] | " - \(._value)"' 2>/dev/null || echo " (none)" done echo "" echo "=== Discovery complete ==="