98 lines
3.1 KiB
Bash
Executable File
98 lines
3.1 KiB
Bash
Executable File
#!/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 ===" |