Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
6a6ddea
feat: add plugin
adubovik Feb 27, 2026
2dfec49
fix: reformatting JSON with dashboard
adubovik Feb 27, 2026
8e53955
feat: add Influx DB3 basic Grafana dashboards
adubovik Feb 27, 2026
da0952e
feat: fix dashboards
adubovik Feb 27, 2026
64d8a02
fix: fix uids
adubovik Feb 27, 2026
3cd15d9
fix: fix dial_analytics_raw_data_v3
adubovik Mar 3, 2026
fa31839
feat: add SQL to the DIAL Analytics dashboard
adubovik Mar 3, 2026
dba38c2
feat: update DIAL Analytics Raw Data dashboard
adubovik Mar 3, 2026
0300613
fix: minor fix
adubovik Mar 3, 2026
2f15665
feat: bump DIAL Analytics MCP dashboard
adubovik Mar 3, 2026
0effa55
feat: update buckets in MCP
adubovik Mar 3, 2026
bd6803d
feat: migrate MCP dashboard to InfluxDB 3
adubovik Mar 3, 2026
96a9731
feat: fix MCP dashboard
adubovik Mar 3, 2026
1262f37
feat: simplify plugin
adubovik Mar 4, 2026
5b7a8e0
feat: introduce Config class for plugin
adubovik Mar 4, 2026
90e8180
feat: simplify Config class
adubovik Mar 4, 2026
0db0dd7
chore: update README
adubovik Mar 4, 2026
2fc117e
chore: fix yml formatting
adubovik Mar 4, 2026
3064233
feat: fix rollup monthly script
adubovik Mar 4, 2026
121f139
feat: fix hourly script
adubovik Mar 4, 2026
c696079
feat: fix default_agg_topic table
adubovik Mar 5, 2026
a942303
feat: minor refactoring
adubovik Mar 5, 2026
ad39867
fix: remove offset_minutes parameter
adubovik Mar 5, 2026
5ff3615
feat: support mode with many windows
adubovik Mar 5, 2026
bb69fa5
fix: simplify code
adubovik Mar 5, 2026
431619f
feat: add InfluxDBClient class
adubovik Mar 5, 2026
179561a
feat: support epoch-aligned bins
adubovik Mar 5, 2026
497daa4
chore: minor refactoring
adubovik Mar 5, 2026
8c27fc6
feat: add mocks for InfluxDB
adubovik Mar 5, 2026
92530c5
chore: moving code around
adubovik Mar 5, 2026
48b2d07
feat: add more validations
adubovik Mar 5, 2026
85655cb
feat: make actual queries form DryRunInfluxDBClient
adubovik Mar 5, 2026
552b689
feat: borrow actual implementation of the LineBuilder
adubovik Mar 5, 2026
9266fde
feat: add validation for datapoints
adubovik Mar 5, 2026
0ec271f
feat: add InfluxDB decorator
adubovik Mar 6, 2026
db21bde
feat: add readonly config flag
adubovik Mar 6, 2026
d8437f3
fix: moving code around
adubovik Mar 6, 2026
920387d
feat: add add_prefix method
adubovik Mar 6, 2026
42db861
feat: use add_prefix more liberally
adubovik Mar 6, 2026
c1704fc
fix: minor fixes
adubovik Mar 6, 2026
a5fb4df
feat: add verbose config flag
adubovik Mar 6, 2026
4804a0c
feat: moving code around
adubovik Mar 6, 2026
c37e1ed
feat: support batching for writes
adubovik Mar 6, 2026
745bc23
fix: fix bug in Config
adubovik Mar 6, 2026
d2e514e
feat: add ThreadPoolExecutor
adubovik Mar 6, 2026
a8d9f90
fix: improve printing
adubovik Mar 6, 2026
5b38cec
fix: minor fix
adubovik Mar 6, 2026
f878989
chore: update README
adubovik Mar 9, 2026
d5a579d
chore: update README
adubovik Mar 9, 2026
9755f91
feat: remove typing_extension package dependency
adubovik Mar 10, 2026
cfe33cc
chore: moving code around
adubovik Mar 10, 2026
1b41552
feat: user sequential executor in the plugin
adubovik Mar 10, 2026
759b50c
Merge branch 'development' into feat/support-influxdb-3
adubovik Mar 10, 2026
eb3eb65
chore: add comment
adubovik Mar 11, 2026
129bbb2
feat: add migration guide
adubovik Mar 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
259 changes: 206 additions & 53 deletions dashboards/customized/dial_analytics.json

Large diffs are not rendered by default.

382 changes: 292 additions & 90 deletions dashboards/customized/dial_analytics_mcp.json

Large diffs are not rendered by default.

74 changes: 48 additions & 26 deletions dashboards/customized/dial_analytics_raw_data.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
{
"__inputs": [
{
"name": "DS_INFLUXDB",
"label": "InfluxDB",
"description": "",
"type": "datasource",
"pluginId": "influxdb",
"pluginName": "InfluxDB"
}
],
"__elements": {},
"__requires": [
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "10.0.3"
"version": "12.0.0"
},
{
"type": "datasource",
Expand Down Expand Up @@ -35,12 +46,11 @@
}
]
},
"editable": false,
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": null,
"links": [],
"liveNow": false,
"panels": [
{
"datasource": {
Expand All @@ -64,8 +74,7 @@
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
"color": "green"
},
{
"color": "red",
Expand Down Expand Up @@ -108,15 +117,36 @@
},
"showHeader": true
},
"pluginVersion": "10.0.3",
"pluginVersion": "12.0.0",
"targets": [
{
"dataset": "iox",
"datasource": {
"type": "influxdb",
"uid": "${datasource}"
"uid": "${DS_INFLUXDB}"
},
"editorMode": "code",
"format": "table",
"query": "import \"influxdata/influxdb/schema\"\r\nbucket = \"${INFLUX_BUCKET}\"\r\n\r\nfrom(bucket: bucket)\r\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\r\n |> filter(fn: (r) => r._measurement == \"analytics\")\r\n |> filter(fn: (r) => r._field == \"number_request_messages\" or r._field == \"price\")\r\n |> keep(columns: [\"_time\", \"_field\", \"_value\", \"response_id\", \"project_id\", \"topic\", \"title\", \"deployment\", \"model\"])\r\n |> schema.fieldsAsCols()\r\n |> keep(columns: [\"_time\", \"project_id\", \"topic\", \"title\", \"deployment\", \"model\", \"price\"])\r\n |> group()\r\n |> sort(columns: [\"_time\"], desc: true)",
"refId": "A"
"rawQuery": true,
"rawSql": "SELECT\n time AS \"_time\",\n project_id,\n topic,\n title,\n deployment,\n model,\n price\nFROM analytics\nWHERE time >= $__timeFrom AND time < $__timeTo\nORDER BY time DESC",
"refId": "A",
"sql": {
"columns": [
{
"parameters": [],
"type": "function"
}
],
"groupBy": [
{
"property": {
"type": "string"
},
"type": "groupBy"
}
]
}
}
],
"title": "Panel Title",
Expand Down Expand Up @@ -150,51 +180,43 @@
}
],
"refresh": "1m",
"schemaVersion": 38,
"style": "dark",
"schemaVersion": 41,
"tags": [
"DIAL",
"ai-dial-analytics-realtime"
],
"templating": {
"list": [
{
"current": {
"selected": true,
"text": "default",
"value": "default"
},
"current": {},
"description": "InfluxDB datasource",
"hide": 0,
"includeAll": false,
"label": "Data source",
"multi": false,
"name": "datasource",
"options": [],
"query": "influxdb",
"queryValue": "",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"type": "datasource"
},
{
"current": {
"selected": true,
"text": "default",
"value": "default"
},
"datasource": {
"type": "influxdb",
"uid": "${datasource}"
},
"definition": "buckets()",
"definition": "import \"strings\"\n\nbuckets()\n |> filter(fn: (r) => not strings.hasPrefix(v: r.name, prefix: \"_\"))",
"description": "A InfluxDB bucket name",
"hide": 0,
"includeAll": false,
"multi": false,
"name": "INFLUX_BUCKET",
"options": [],
"query": "buckets()",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 0,
"type": "query"
}
]
Expand All @@ -207,6 +229,6 @@
"timezone": "",
"title": "DIAL Analytics Raw Data",
"uid": "98a34b22-dd32-4e2a-8c4c-81147d2ff3df",
"version": 1,
"version": 4,
"weekStart": ""
}
}
63 changes: 63 additions & 0 deletions dashboards/customized/influx2_to_influx3_migration_guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Migrating Data from InfluxDB2 to InfluxDB3

## Overview

This document describes the recommended procedure for migrating analytics data from **InfluxDB2** to **InfluxDB3**.

Only the **`default` bucket** needs to be migrated.

All other buckets contain **derived / aggregated data** and should **not be migrated**. Instead, they should be recreated using the **backfilling mode** of the [aggregation plugin](./influxdb_v3/README.md).


The migration process consists of:

1. Exporting the `default` bucket from **InfluxDB2** as **Line Protocol**
2. Splitting the export into chunks
3. Uploading the chunks in parallel to **InfluxDB3**

The instructions below assume that **InfluxDB2** is running using the Bitnami container image:

```yaml
image:
registry: bitnamilegacy
repository: influxdb
tag: 2.7.11-debian-12-r20
```

In this image the storage engine resides at:

```
/bitnami/influxdb
```

---

## Migration script

```sh
set -euo pipefail

# Get the bucket id of the "default" bucket
BUCKET_ID=$(influx bucket list --org dial --json \
| jq -r '.[] | select(.name == "default") | .id')

echo "Bucket id: ${BUCKET_ID}"

cd /tmp

# Export and split into chunks 500K datapoints each
influxd inspect export-lp \
--bucket-id "${BUCKET_ID}" \
--engine-path /bitnami/influxdb \
--output-path - \
| split -l 500000 - chunk_

# Upload chunks to InfluxDB 3 in parallel
find . -maxdepth 1 -name 'chunk_*' -print0 \
| xargs -0 -n1 -P4 -I{} \
curl --fail -sS \
-X POST "${INFLUXDB3_URL}/api/v3/write_lp?db=default&precision=ns" \
-H "Authorization: Bearer ${INFLUXDB3_TOKEN}" \
-H "Content-Type: text/plain; charset=utf-8" \
--data-binary @{}
```
Loading
Loading