diff --git a/examples/grafana/dashboard.json b/examples/grafana/dashboard.json index 9af6a16..cb9c0b1 100644 --- a/examples/grafana/dashboard.json +++ b/examples/grafana/dashboard.json @@ -27,10 +27,19 @@ "type": "prometheus", "uid": "prometheus" }, - "query": "query_result(time() - proxy_usage_resets_at{window=\"5h\"} + 18000)", + "definition": "query_result(time() - proxy_usage_resets_at{window=\"5h\"} + 18000)", + "query": { + "query": "query_result(time() - proxy_usage_resets_at{window=\"5h\"} + 18000)", + "refId": "A" + }, "regex": "/.* (\\d+\\.?\\d*) .*/", "refresh": 2, - "hide": 2 + "hide": 2, + "sort": 0, + "current": { + "text": "", + "value": "" + } }, { "name": "window_age_7d", @@ -39,10 +48,19 @@ "type": "prometheus", "uid": "prometheus" }, - "query": "query_result(time() - proxy_usage_resets_at{window=\"7d\"} + 604800)", + "definition": "query_result(time() - proxy_usage_resets_at{window=\"7d\"} + 604800)", + "query": { + "query": "query_result(time() - proxy_usage_resets_at{window=\"7d\"} + 604800)", + "refId": "A" + }, "regex": "/.* (\\d+\\.?\\d*) .*/", "refresh": 2, - "hide": 2 + "hide": 2, + "sort": 0, + "current": { + "text": "", + "value": "" + } } ] }, @@ -355,8 +373,35 @@ "uid": "loki" }, "expr": "sum(sum_over_time({service_name=\"anthropic-proxy\"} |= \"completed\" | unwrap output_tokens | __error__=\"\" [$__interval]))", - "legendFormat": "output", + "legendFormat": "out: total", "refId": "A" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum by (model) (sum_over_time({service_name=\"anthropic-proxy\"} |= \"completed\" | unwrap output_tokens | __error__=\"\" [$__interval]))", + "legendFormat": "out: {{model}}", + "refId": "B" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(sum_over_time({service_name=\"anthropic-proxy\"} |= \"completed\" | unwrap input_tokens | __error__=\"\" [$__interval]))", + "legendFormat": "in: total", + "refId": "C" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum by (model) (sum_over_time({service_name=\"anthropic-proxy\"} |= \"completed\" | unwrap input_tokens | __error__=\"\" [$__interval]))", + "legendFormat": "in: {{model}}", + "refId": "D" } ], "timeFrom": "${window_age_5h}s", @@ -408,16 +453,147 @@ ] }, "transformations": [ + { + "id": "prepareTimeSeries", + "options": { + "format": "wide" + } + }, { "id": "calculateField", "options": { "mode": "cumulativeFunctions", "cumulative": { - "field": "Value", + "field": "out: total", "reducer": "sum" }, - "alias": "output total", - "replaceFields": true + "alias": "OUT: total", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "out: claude-opus-4-5", + "reducer": "sum" + }, + "alias": "OUT: claude-opus-4-5", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "out: claude-opus-4-6", + "reducer": "sum" + }, + "alias": "OUT: claude-opus-4-6", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "out: claude-sonnet-4-6", + "reducer": "sum" + }, + "alias": "OUT: claude-sonnet-4-6", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "out: claude-haiku-4-5", + "reducer": "sum" + }, + "alias": "OUT: claude-haiku-4-5", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: total", + "reducer": "sum" + }, + "alias": "IN: total", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: claude-opus-4-5", + "reducer": "sum" + }, + "alias": "IN: claude-opus-4-5", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: claude-opus-4-6", + "reducer": "sum" + }, + "alias": "IN: claude-opus-4-6", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: claude-sonnet-4-6", + "reducer": "sum" + }, + "alias": "IN: claude-sonnet-4-6", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: claude-haiku-4-5", + "reducer": "sum" + }, + "alias": "IN: claude-haiku-4-5", + "replaceFields": false + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "out: total": true, + "out: claude-opus-4-5": true, + "out: claude-opus-4-6": true, + "out: claude-sonnet-4-6": true, + "out: claude-haiku-4-5": true, + "in: total": true, + "in: claude-opus-4-5": true, + "in: claude-opus-4-6": true, + "in: claude-sonnet-4-6": true, + "in: claude-haiku-4-5": true + } } } ], @@ -449,8 +625,35 @@ "uid": "loki" }, "expr": "sum(sum_over_time({service_name=\"anthropic-proxy\"} |= \"completed\" | unwrap output_tokens | __error__=\"\" [$__interval]))", - "legendFormat": "output", + "legendFormat": "out: total", "refId": "A" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum by (model) (sum_over_time({service_name=\"anthropic-proxy\"} |= \"completed\" | unwrap output_tokens | __error__=\"\" [$__interval]))", + "legendFormat": "out: {{model}}", + "refId": "B" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(sum_over_time({service_name=\"anthropic-proxy\"} |= \"completed\" | unwrap input_tokens | __error__=\"\" [$__interval]))", + "legendFormat": "in: total", + "refId": "C" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum by (model) (sum_over_time({service_name=\"anthropic-proxy\"} |= \"completed\" | unwrap input_tokens | __error__=\"\" [$__interval]))", + "legendFormat": "in: {{model}}", + "refId": "D" } ], "timeFrom": "${window_age_7d}s", @@ -502,16 +705,147 @@ ] }, "transformations": [ + { + "id": "prepareTimeSeries", + "options": { + "format": "wide" + } + }, { "id": "calculateField", "options": { "mode": "cumulativeFunctions", "cumulative": { - "field": "Value", + "field": "out: total", "reducer": "sum" }, - "alias": "output total", - "replaceFields": true + "alias": "OUT: total", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "out: claude-opus-4-5", + "reducer": "sum" + }, + "alias": "OUT: claude-opus-4-5", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "out: claude-opus-4-6", + "reducer": "sum" + }, + "alias": "OUT: claude-opus-4-6", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "out: claude-sonnet-4-6", + "reducer": "sum" + }, + "alias": "OUT: claude-sonnet-4-6", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "out: claude-haiku-4-5", + "reducer": "sum" + }, + "alias": "OUT: claude-haiku-4-5", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: total", + "reducer": "sum" + }, + "alias": "IN: total", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: claude-opus-4-5", + "reducer": "sum" + }, + "alias": "IN: claude-opus-4-5", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: claude-opus-4-6", + "reducer": "sum" + }, + "alias": "IN: claude-opus-4-6", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: claude-sonnet-4-6", + "reducer": "sum" + }, + "alias": "IN: claude-sonnet-4-6", + "replaceFields": false + } + }, + { + "id": "calculateField", + "options": { + "mode": "cumulativeFunctions", + "cumulative": { + "field": "in: claude-haiku-4-5", + "reducer": "sum" + }, + "alias": "IN: claude-haiku-4-5", + "replaceFields": false + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "out: total": true, + "out: claude-opus-4-5": true, + "out: claude-opus-4-6": true, + "out: claude-sonnet-4-6": true, + "out: claude-haiku-4-5": true, + "in: total": true, + "in: claude-opus-4-5": true, + "in: claude-opus-4-6": true, + "in: claude-sonnet-4-6": true, + "in: claude-haiku-4-5": true + } } } ],