diff --git a/.claude/agents/devops/ci-cd/ops-cicd-github.md b/.claude/agents/devops/ci-cd/ops-cicd-github.md deleted file mode 100644 index 2f008252f..000000000 --- a/.claude/agents/devops/ci-cd/ops-cicd-github.md +++ /dev/null @@ -1,164 +0,0 @@ ---- -name: "cicd-engineer" -type: "devops" -color: "cyan" -version: "1.0.0" -created: "2025-07-25" -author: "Claude Code" -metadata: - description: "Specialized agent for GitHub Actions CI/CD pipeline creation and optimization" - specialization: "GitHub Actions, workflow automation, deployment pipelines" - complexity: "moderate" - autonomous: true -triggers: - keywords: - - "github actions" - - "ci/cd" - - "pipeline" - - "workflow" - - "deployment" - - "continuous integration" - file_patterns: - - ".github/workflows/*.yml" - - ".github/workflows/*.yaml" - - "**/action.yml" - - "**/action.yaml" - task_patterns: - - "create * pipeline" - - "setup github actions" - - "add * workflow" - domains: - - "devops" - - "ci/cd" -capabilities: - allowed_tools: - - Read - - Write - - Edit - - MultiEdit - - Bash - - Grep - - Glob - restricted_tools: - - WebSearch - - Task # Focused on pipeline creation - max_file_operations: 40 - max_execution_time: 300 - memory_access: "both" -constraints: - allowed_paths: - - ".github/**" - - "scripts/**" - - "*.yml" - - "*.yaml" - - "Dockerfile" - - "docker-compose*.yml" - forbidden_paths: - - ".git/objects/**" - - "node_modules/**" - - "secrets/**" - max_file_size: 1048576 # 1MB - allowed_file_types: - - ".yml" - - ".yaml" - - ".sh" - - ".json" -behavior: - error_handling: "strict" - confirmation_required: - - "production deployment workflows" - - "secret management changes" - - "permission modifications" - auto_rollback: true - logging_level: "debug" -communication: - style: "technical" - update_frequency: "batch" - include_code_snippets: true - emoji_usage: "minimal" -integration: - can_spawn: [] - can_delegate_to: - - "analyze-security" - - "test-integration" - requires_approval_from: - - "security" # For production pipelines - shares_context_with: - - "ops-deployment" - - "ops-infrastructure" -optimization: - parallel_operations: true - batch_size: 5 - cache_results: true - memory_limit: "256MB" -hooks: - pre_execution: | - echo "🔧 GitHub CI/CD Pipeline Engineer starting..." - echo "📂 Checking existing workflows..." - find .github/workflows -name "*.yml" -o -name "*.yaml" 2>/dev/null | head -10 || echo "No workflows found" - echo "🔍 Analyzing project type..." - test -f package.json && echo "Node.js project detected" - test -f requirements.txt && echo "Python project detected" - test -f go.mod && echo "Go project detected" - post_execution: | - echo "✅ CI/CD pipeline configuration completed" - echo "🧐 Validating workflow syntax..." - # Simple YAML validation - find .github/workflows -name "*.yml" -o -name "*.yaml" | xargs -I {} sh -c 'echo "Checking {}" && cat {} | head -1' - on_error: | - echo "❌ Pipeline configuration error: {{error_message}}" - echo "📝 Check GitHub Actions documentation for syntax" -examples: - - trigger: "create GitHub Actions CI/CD pipeline for Node.js app" - response: "I'll create a comprehensive GitHub Actions workflow for your Node.js application including build, test, and deployment stages..." - - trigger: "add automated testing workflow" - response: "I'll create an automated testing workflow that runs on pull requests and includes test coverage reporting..." ---- - -# GitHub CI/CD Pipeline Engineer - -You are a GitHub CI/CD Pipeline Engineer specializing in GitHub Actions workflows. - -## Key responsibilities: -1. Create efficient GitHub Actions workflows -2. Implement build, test, and deployment pipelines -3. Configure job matrices for multi-environment testing -4. Set up caching and artifact management -5. Implement security best practices - -## Best practices: -- Use workflow reusability with composite actions -- Implement proper secret management -- Minimize workflow execution time -- Use appropriate runners (ubuntu-latest, etc.) -- Implement branch protection rules -- Cache dependencies effectively - -## Workflow patterns: -```yaml -name: CI/CD Pipeline - -on: - push: - branches: [main, develop] - pull_request: - branches: [main] - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '18' - cache: 'npm' - - run: npm ci - - run: npm test -``` - -## Security considerations: -- Never hardcode secrets -- Use GITHUB_TOKEN with minimal permissions -- Implement CODEOWNERS for workflow changes -- Use environment protection rules \ No newline at end of file diff --git a/config/grafana/dashboards/api-gateway-overview.json b/config/grafana/dashboards/api-gateway-overview.json deleted file mode 100644 index 630dc648c..000000000 --- a/config/grafana/dashboards/api-gateway-overview.json +++ /dev/null @@ -1,740 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "id": null, - "links": [], - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 0.001 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.50, rate(api_gateway_auth_duration_seconds_bucket[5m]))", - "legendFormat": "P50 Auth Latency", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.95, rate(api_gateway_auth_duration_seconds_bucket[5m]))", - "legendFormat": "P95 Auth Latency", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.99, rate(api_gateway_auth_duration_seconds_bucket[5m]))", - "legendFormat": "P99 Auth Latency", - "refId": "C" - } - ], - "title": "Authentication Latency (P50/P95/P99)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "reqps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "sum(rate(api_gateway_requests_total[1m]))", - "legendFormat": "Total Requests/sec", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "sum(rate(api_gateway_requests_total{status=\"200\"}[1m]))", - "legendFormat": "Success (200)", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "sum(rate(api_gateway_requests_total{status=\"401\"}[1m]))", - "legendFormat": "Unauthorized (401)", - "refId": "C" - } - ], - "title": "API Gateway Throughput", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 50 - }, - { - "color": "green", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 8 - }, - "id": 3, - "options": { - "orientation": "auto", - "reduceOptions": { - "values": false, - "calcs": ["lastNotNull"], - "fields": "" - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "api_gateway_revocation_cache_hit_rate * 100", - "refId": "A" - } - ], - "title": "JWT Revocation Cache Hit Rate", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 6, - "y": 8 - }, - "id": 4, - "options": { - "legend": { - "calcs": ["sum"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(api_gateway_rate_limit_exceeded_total[1m])", - "legendFormat": "Rate Limit Exceeded/sec", - "refId": "A" - } - ], - "title": "Rate Limiting Events", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "errps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 5, - "options": { - "legend": { - "calcs": ["sum"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "sum(rate(api_gateway_errors_total[1m])) by (error_type)", - "legendFormat": "{{error_type}}", - "refId": "A" - } - ], - "title": "API Gateway Error Rate by Type", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1000 - }, - { - "color": "red", - "value": 5000 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 16 - }, - "id": 6, - "options": { - "orientation": "auto", - "reduceOptions": { - "values": false, - "calcs": ["lastNotNull"], - "fields": "" - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "api_gateway_active_connections", - "refId": "A" - } - ], - "title": "Active Connections", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 16 - }, - "id": 7, - "options": { - "legend": { - "calcs": ["lastNotNull"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "sum(rate(api_gateway_mfa_verifications_total[1m]))", - "legendFormat": "Total MFA Verifications/sec", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "sum(rate(api_gateway_mfa_verifications_total{status=\"success\"}[1m]))", - "legendFormat": "Successful", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "sum(rate(api_gateway_mfa_verifications_total{status=\"failed\"}[1m]))", - "legendFormat": "Failed", - "refId": "C" - } - ], - "title": "MFA Verification Rate", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" - }, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 16 - }, - "id": 8, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": ["sum"], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "topk(10, sum(rate(api_gateway_requests_total[5m])) by (endpoint))", - "format": "table", - "instant": true, - "refId": "A" - } - ], - "title": "Top 10 Endpoints by Request Rate", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true - }, - "indexByName": {}, - "renameByName": { - "Value": "Requests/sec", - "endpoint": "Endpoint" - } - } - } - ], - "type": "table" - } - ], - "refresh": "5s", - "schemaVersion": 38, - "tags": ["foxhunt", "api-gateway", "security"], - "templating": { - "list": [] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Foxhunt API Gateway Overview", - "uid": "foxhunt-api-gateway", - "version": 1, - "weekStart": "" -} diff --git a/config/grafana/dashboards/foxhunt-service-health.json b/config/grafana/dashboards/foxhunt-service-health.json deleted file mode 100644 index 659699f01..000000000 --- a/config/grafana/dashboards/foxhunt-service-health.json +++ /dev/null @@ -1,559 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 0, - "id": null, - "links": [], - "panels": [ - { - "datasource": "Prometheus", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "legend": { - "calcs": ["last"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "expr": "up{job=~\"api_gateway|trading_service|backtesting_service|ml_training_service\"}", - "legendFormat": "{{job}}", - "refId": "A" - } - ], - "title": "Service Health Status", - "type": "timeseries" - }, - { - "datasource": "Prometheus", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "index": 1, - "text": "DOWN" - }, - "1": { - "color": "green", - "index": 0, - "text": "UP" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "orientation": "auto", - "reduceOptions": { - "values": false, - "calcs": ["lastNotNull"], - "fields": "" - }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "text": {} - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "expr": "up{job=\"api_gateway\"}", - "legendFormat": "API Gateway", - "refId": "A" - }, - { - "expr": "up{job=\"trading_service\"}", - "legendFormat": "Trading Service", - "refId": "B" - }, - { - "expr": "up{job=\"backtesting_service\"}", - "legendFormat": "Backtesting Service", - "refId": "C" - }, - { - "expr": "up{job=\"ml_training_service\"}", - "legendFormat": "ML Training Service", - "refId": "D" - } - ], - "title": "Service Status", - "type": "gauge" - }, - { - "datasource": "Prometheus", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "reqps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 3, - "options": { - "legend": { - "calcs": ["mean", "max"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "expr": "rate(http_requests_total{job=~\"api_gateway|trading_service|backtesting_service|ml_training_service\"}[5m])", - "legendFormat": "{{job}}", - "refId": "A" - } - ], - "title": "Request Rate (req/sec)", - "type": "timeseries" - }, - { - "datasource": "Prometheus", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 50 - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 4, - "options": { - "legend": { - "calcs": ["mean", "max"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "expr": "histogram_quantile(0.95, rate(http_request_duration_seconds_bucket{job=~\"api_gateway|trading_service|backtesting_service|ml_training_service\"}[5m])) * 1000", - "legendFormat": "{{job}} p95", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.99, rate(http_request_duration_seconds_bucket{job=~\"api_gateway|trading_service|backtesting_service|ml_training_service\"}[5m])) * 1000", - "legendFormat": "{{job}} p99", - "refId": "B" - } - ], - "title": "Response Time (ms)", - "type": "timeseries" - }, - { - "datasource": "Prometheus", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "reqps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 16 - }, - "id": 5, - "options": { - "legend": { - "calcs": ["mean"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "expr": "rate(http_requests_total{job=~\"api_gateway|trading_service|backtesting_service|ml_training_service\",status=~\"5..\"}[5m])", - "legendFormat": "{{job}} - {{status}}", - "refId": "A" - } - ], - "title": "Error Rate (5xx errors)", - "type": "timeseries" - }, - { - "datasource": "Prometheus", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 16 - }, - "id": 6, - "options": { - "legend": { - "calcs": ["last"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "expr": "grpc_server_handled_total{job=~\"api_gateway|trading_service|backtesting_service|ml_training_service\"}", - "legendFormat": "{{job}} - {{grpc_method}}", - "refId": "A" - } - ], - "title": "gRPC Requests", - "type": "timeseries" - }, - { - "datasource": "Prometheus", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": true - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 24 - }, - "id": 7, - "options": { - "legend": { - "calcs": ["last"], - "displayMode": "table", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.0.0", - "targets": [ - { - "expr": "pg_stat_database_numbackends{datname=\"foxhunt\"}", - "legendFormat": "PostgreSQL Connections", - "refId": "A" - } - ], - "title": "Database Connections", - "type": "timeseries" - } - ], - "schemaVersion": 27, - "style": "dark", - "tags": ["foxhunt", "services", "health"], - "templating": { - "list": [] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Foxhunt Service Health", - "uid": "foxhunt-service-health", - "version": 1 -} diff --git a/config/grafana/dashboards/hft-business-executive.json b/config/grafana/dashboards/hft-business-executive.json deleted file mode 100644 index dad02077e..000000000 --- a/config/grafana/dashboards/hft-business-executive.json +++ /dev/null @@ -1,455 +0,0 @@ -{ - "dashboard": { - "id": null, - "title": "HFT Business Executive Dashboard - P&L and Performance KPIs", - "description": "Executive-level view of trading performance, risk metrics, and business KPIs for HFT operations", - "tags": ["hft", "business", "executive", "pnl", "risk"], - "timezone": "UTC", - "refresh": "30s", - "time": { - "from": "now-24h", - "to": "now" - }, - "fiscalYearStartMonth": 0, - "panels": [ - { - "id": 1, - "title": "Real-Time P&L", - "type": "stat", - "gridPos": {"h": 8, "w": 8, "x": 0, "y": 0}, - "targets": [ - { - "expr": "foxhunt_realized_pnl + foxhunt_unrealized_pnl", - "legendFormat": "Total P&L", - "refId": "A" - }, - { - "expr": "foxhunt_realized_pnl", - "legendFormat": "Realized P&L", - "refId": "B" - }, - { - "expr": "foxhunt_unrealized_pnl", - "legendFormat": "Unrealized P&L", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "unit": "currencyUSD", - "decimals": 2, - "custom": { - "displayMode": "basic" - }, - "thresholds": { - "steps": [ - {"color": "red", "value": null}, - {"color": "yellow", "value": 0}, - {"color": "green", "value": 1000} - ] - } - } - }, - "options": { - "colorMode": "background", - "orientation": "vertical", - "textMode": "value_and_name", - "wideLayout": false - } - }, - { - "id": 2, - "title": "Daily Trading Volume", - "type": "stat", - "gridPos": {"h": 8, "w": 8, "x": 8, "y": 0}, - "targets": [ - { - "expr": "sum(increase(foxhunt_trade_volume_usd[24h]))", - "legendFormat": "Daily Volume (USD)", - "refId": "A" - }, - { - "expr": "sum(increase(foxhunt_trade_count[24h]))", - "legendFormat": "Trade Count", - "refId": "B" - } - ], - "fieldConfig": { - "defaults": { - "unit": "currencyUSD", - "custom": { - "displayMode": "basic" - }, - "thresholds": { - "steps": [ - {"color": "red", "value": null}, - {"color": "yellow", "value": 1000000}, - {"color": "green", "value": 10000000} - ] - } - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "Trade Count"}, - "properties": [ - {"id": "unit", "value": "short"} - ] - } - ] - } - }, - { - "id": 3, - "title": "Risk Metrics", - "type": "stat", - "gridPos": {"h": 8, "w": 8, "x": 16, "y": 0}, - "targets": [ - { - "expr": "foxhunt_portfolio_var_95", - "legendFormat": "VaR 95%", - "refId": "A" - }, - { - "expr": "foxhunt_risk_utilization_percent", - "legendFormat": "Risk Utilization %", - "refId": "B" - }, - { - "expr": "foxhunt_max_drawdown", - "legendFormat": "Max Drawdown", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "unit": "currencyUSD", - "custom": { - "displayMode": "basic" - }, - "thresholds": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 50000}, - {"color": "red", "value": 100000} - ] - } - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "Risk Utilization %"}, - "properties": [ - {"id": "unit", "value": "percent"}, - {"id": "thresholds", "value": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 70}, - {"color": "red", "value": 90} - ] - }} - ] - } - ] - } - }, - { - "id": 4, - "title": "Hourly P&L Trend", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 8}, - "targets": [ - { - "expr": "sum(rate(foxhunt_realized_pnl[1h]))", - "legendFormat": "Hourly P&L Rate", - "refId": "A" - }, - { - "expr": "sum(foxhunt_cumulative_pnl)", - "legendFormat": "Cumulative P&L", - "refId": "B" - } - ], - "fieldConfig": { - "defaults": { - "unit": "currencyUSD", - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "spanNulls": false, - "fillOpacity": 10, - "gradientMode": "hue" - }, - "thresholds": { - "steps": [ - {"color": "transparent", "value": null}, - {"color": "red", "value": -10000}, - {"color": "green", "value": 0} - ] - } - } - }, - "options": { - "legend": { - "displayMode": "list", - "placement": "bottom" - } - } - }, - { - "id": 5, - "title": "Order Performance Metrics", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 8}, - "targets": [ - { - "expr": "rate(foxhunt_orders_filled_total[5m]) / rate(foxhunt_orders_sent_total[5m]) * 100", - "legendFormat": "Fill Rate %", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.99, rate(foxhunt_order_latency_microseconds_bucket[5m]))", - "legendFormat": "P99 Latency (Ξs)", - "refId": "B" - }, - { - "expr": "rate(foxhunt_orders_rejected_total[5m]) / rate(foxhunt_orders_total[5m]) * 100", - "legendFormat": "Rejection Rate %", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth" - } - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "Fill Rate %"}, - "properties": [ - {"id": "unit", "value": "percent"}, - {"id": "thresholds", "value": { - "steps": [ - {"color": "red", "value": null}, - {"color": "yellow", "value": 70}, - {"color": "green", "value": 85} - ] - }} - ] - }, - { - "matcher": {"id": "byName", "options": "P99 Latency (Ξs)"}, - "properties": [ - {"id": "unit", "value": "Ξs"}, - {"id": "thresholds", "value": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 50}, - {"color": "red", "value": 100} - ] - }} - ] - } - ] - } - }, - { - "id": 6, - "title": "Market Making Performance", - "type": "timeseries", - "gridPos": {"h": 6, "w": 8, "x": 0, "y": 16}, - "targets": [ - { - "expr": "avg_over_time(foxhunt_bid_ask_spread_bps[5m])", - "legendFormat": "Avg Spread (bps)", - "refId": "A" - }, - { - "expr": "abs(foxhunt_inventory_imbalance_ratio) * 100", - "legendFormat": "Inventory Imbalance %", - "refId": "B" - }, - { - "expr": "rate(foxhunt_quotes_sent_total[1m])", - "legendFormat": "Quote Rate (/min)", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line" - } - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "Avg Spread (bps)"}, - "properties": [ - {"id": "unit", "value": "short"}, - {"id": "custom.axisLabel", "value": "Basis Points"} - ] - }, - { - "matcher": {"id": "byName", "options": "Quote Rate (/min)"}, - "properties": [ - {"id": "unit", "value": "reqps"}, - {"id": "custom.axisLabel", "value": "Quotes per Minute"} - ] - } - ] - } - }, - { - "id": 7, - "title": "System Health Overview", - "type": "table", - "gridPos": {"h": 6, "w": 8, "x": 8, "y": 16}, - "targets": [ - { - "expr": "foxhunt_service_health_status", - "legendFormat": "", - "refId": "A", - "format": "table" - } - ], - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": {"Time": true, "__name__": true}, - "renameByName": { - "service": "Service", - "Value": "Status" - } - } - } - ], - "fieldConfig": { - "overrides": [ - { - "matcher": {"id": "byName", "options": "Status"}, - "properties": [ - { - "id": "mappings", - "value": [ - {"options": {"0": {"text": "DOWN", "color": "red"}}, "type": "value"}, - {"options": {"1": {"text": "HEALTHY", "color": "green"}}, "type": "value"} - ] - }, - {"id": "custom.displayMode", "value": "color-background"} - ] - } - ] - } - }, - { - "id": 8, - "title": "Daily Performance Summary", - "type": "table", - "gridPos": {"h": 6, "w": 8, "x": 16, "y": 16}, - "targets": [ - { - "expr": "sum by (symbol) (increase(foxhunt_trade_volume_usd[24h]))", - "legendFormat": "", - "refId": "A", - "format": "table" - } - ], - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": {"Time": true, "__name__": true}, - "renameByName": { - "symbol": "Symbol", - "Value": "Volume (USD)" - } - } - } - ], - "fieldConfig": { - "overrides": [ - { - "matcher": {"id": "byName", "options": "Volume (USD)"}, - "properties": [ - {"id": "unit", "value": "currencyUSD"}, - {"id": "custom.displayMode", "value": "gradient-gauge"} - ] - } - ] - } - }, - { - "id": 9, - "title": "Risk Alerts and Compliance", - "type": "logs", - "gridPos": {"h": 8, "w": 24, "x": 0, "y": 22}, - "targets": [ - { - "expr": "increase(foxhunt_risk_violations_total[1h])", - "legendFormat": "Risk Violations", - "refId": "A" - } - ], - "options": { - "showTime": true, - "showLabels": true, - "sortOrder": "Descending", - "wrapLogMessage": false - }, - "fieldConfig": { - "defaults": { - "custom": { - "displayMode": "basic" - } - } - } - } - ], - "templating": { - "list": [ - { - "name": "time_range", - "type": "interval", - "query": "1m,5m,15m,1h,6h,12h,1d", - "current": { - "text": "5m", - "value": "5m" - } - }, - { - "name": "symbol", - "type": "query", - "query": "label_values(foxhunt_trade_volume_usd, symbol)", - "current": { - "text": "All", - "value": "$__all" - }, - "includeAll": true - } - ] - }, - "annotations": { - "list": [ - { - "name": "Trading Session Start/End", - "datasource": "prometheus", - "expr": "changes(foxhunt_trading_session_active[1m])", - "iconColor": "blue" - }, - { - "name": "Risk Limit Breaches", - "datasource": "prometheus", - "expr": "foxhunt_risk_violations_total", - "iconColor": "red" - }, - { - "name": "System Alerts", - "datasource": "prometheus", - "expr": "ALERTS{alertname!=\"\"}", - "iconColor": "orange" - } - ] - } - } -} \ No newline at end of file diff --git a/config/grafana/dashboards/hft-compliance-audit.json b/config/grafana/dashboards/hft-compliance-audit.json deleted file mode 100644 index c34675f3d..000000000 --- a/config/grafana/dashboards/hft-compliance-audit.json +++ /dev/null @@ -1,465 +0,0 @@ -{ - "dashboard": { - "id": null, - "title": "HFT Compliance & Regulatory Audit Dashboard", - "description": "Comprehensive compliance monitoring, audit trails, and regulatory reporting for HFT operations", - "tags": ["hft", "compliance", "audit", "regulatory", "risk"], - "timezone": "UTC", - "refresh": "1m", - "time": { - "from": "now-7d", - "to": "now" - }, - "panels": [ - { - "id": 1, - "title": "SLA Compliance Overview", - "type": "stat", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 0}, - "targets": [ - { - "expr": "foxhunt:sla_compliance:monthly_percentage", - "legendFormat": "Overall SLA Compliance %", - "refId": "A" - }, - { - "expr": "foxhunt:sla_breaches:count_24h", - "legendFormat": "SLA Breaches (24h)", - "refId": "B" - }, - { - "expr": "foxhunt:error_budget:order_latency_remaining_percent", - "legendFormat": "Error Budget Remaining %", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "custom": { - "displayMode": "basic" - }, - "thresholds": { - "steps": [ - {"color": "red", "value": null}, - {"color": "yellow", "value": 95}, - {"color": "green", "value": 99} - ] - } - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "SLA Breaches (24h)"}, - "properties": [ - {"id": "unit", "value": "short"}, - {"id": "thresholds", "value": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 1}, - {"color": "red", "value": 5} - ] - }} - ] - } - ] - }, - "options": { - "colorMode": "background", - "orientation": "vertical" - } - }, - { - "id": 2, - "title": "Risk Limit Compliance", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 0}, - "targets": [ - { - "expr": "foxhunt_position_risk_utilization * 100", - "legendFormat": "Risk Utilization %", - "refId": "A" - }, - { - "expr": "90", - "legendFormat": "Risk Limit Threshold", - "refId": "B" - }, - { - "expr": "foxhunt_daily_pnl", - "legendFormat": "Daily P&L", - "refId": "C" - }, - { - "expr": "foxhunt_daily_loss_limit", - "legendFormat": "Daily Loss Limit", - "refId": "D" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 10 - } - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "Risk Utilization %"}, - "properties": [ - {"id": "unit", "value": "percent"}, - {"id": "custom.axisPlacement", "value": "left"} - ] - }, - { - "matcher": {"id": "byName", "options": "Daily P&L"}, - "properties": [ - {"id": "unit", "value": "currencyUSD"}, - {"id": "custom.axisPlacement", "value": "right"} - ] - } - ] - } - }, - { - "id": 3, - "title": "Trading Activity Audit Trail", - "type": "table", - "gridPos": {"h": 10, "w": 24, "x": 0, "y": 8}, - "targets": [ - { - "expr": "increase(foxhunt_orders_total[1h])", - "legendFormat": "", - "refId": "A", - "format": "table" - } - ], - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": {"Time": false, "__name__": true}, - "renameByName": { - "service": "Service", - "symbol": "Symbol", - "order_type": "Order Type", - "Value": "Order Count (1h)" - } - } - } - ], - "fieldConfig": { - "overrides": [ - { - "matcher": {"id": "byName", "options": "Order Count (1h)"}, - "properties": [ - {"id": "custom.displayMode", "value": "gradient-gauge"}, - {"id": "unit", "value": "short"} - ] - }, - { - "matcher": {"id": "byName", "options": "Time"}, - "properties": [ - {"id": "custom.width", "value": 150} - ] - } - ] - }, - "options": { - "showHeader": true, - "sortBy": [ - { - "desc": true, - "displayName": "Order Count (1h)" - } - ] - } - }, - { - "id": 4, - "title": "Latency SLA Compliance", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 18}, - "targets": [ - { - "expr": "foxhunt:order_latency_sla:success_rate_5m", - "legendFormat": "Order Latency SLA Success Rate %", - "refId": "A" - }, - { - "expr": "99.9", - "legendFormat": "SLA Target (99.9%)", - "refId": "B" - }, - { - "expr": "foxhunt:market_data_latency_sla:success_rate_5m", - "legendFormat": "Market Data Latency SLA Success Rate %", - "refId": "C" - }, - { - "expr": "99.5", - "legendFormat": "Market Data SLA Target (99.5%)", - "refId": "D" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 99, - "max": 100, - "custom": { - "drawStyle": "line", - "thresholdsStyle": {"mode": "line"} - }, - "thresholds": { - "steps": [ - {"color": "transparent", "value": null}, - {"color": "red", "value": 99.5}, - {"color": "green", "value": 99.9} - ] - } - } - } - }, - { - "id": 5, - "title": "Risk Violations and Alerts", - "type": "table", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 18}, - "targets": [ - { - "expr": "increase(foxhunt_risk_violations_total[24h])", - "legendFormat": "", - "refId": "A", - "format": "table" - } - ], - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": {"Time": false, "__name__": true}, - "renameByName": { - "violation_type": "Violation Type", - "severity": "Severity", - "symbol": "Symbol", - "Value": "Count (24h)" - } - } - } - ], - "fieldConfig": { - "overrides": [ - { - "matcher": {"id": "byName", "options": "Severity"}, - "properties": [ - { - "id": "mappings", - "value": [ - {"options": {"critical": {"text": "CRITICAL", "color": "red"}}, "type": "value"}, - {"options": {"high": {"text": "HIGH", "color": "orange"}}, "type": "value"}, - {"options": {"medium": {"text": "MEDIUM", "color": "yellow"}}, "type": "value"} - ] - }, - {"id": "custom.displayMode", "value": "color-background"} - ] - } - ] - } - }, - { - "id": 6, - "title": "Circuit Breaker Activity", - "type": "timeseries", - "gridPos": {"h": 6, "w": 8, "x": 0, "y": 26}, - "targets": [ - { - "expr": "foxhunt_circuit_breaker_status", - "legendFormat": "{{circuit_breaker}} Status", - "refId": "A" - }, - { - "expr": "increase(foxhunt_circuit_breaker_triggers_total[1h])", - "legendFormat": "{{circuit_breaker}} Triggers (1h)", - "refId": "B" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "bars" - }, - "mappings": [ - {"options": {"0": {"text": "CLOSED", "color": "green"}}, "type": "value"}, - {"options": {"1": {"text": "OPEN", "color": "red"}}, "type": "value"} - ] - } - } - }, - { - "id": 7, - "title": "Emergency Stop Events", - "type": "stat", - "gridPos": {"h": 6, "w": 8, "x": 8, "y": 26}, - "targets": [ - { - "expr": "foxhunt_emergency_stop_status", - "legendFormat": "Emergency Stop Status", - "refId": "A" - }, - { - "expr": "increase(foxhunt_emergency_stop_activations_total[24h])", - "legendFormat": "Activations (24h)", - "refId": "B" - } - ], - "fieldConfig": { - "defaults": { - "mappings": [ - {"options": {"0": {"text": "NORMAL", "color": "green"}}, "type": "value"}, - {"options": {"1": {"text": "EMERGENCY STOP", "color": "red"}}, "type": "value"} - ], - "custom": { - "displayMode": "basic" - } - } - }, - "options": { - "colorMode": "background" - } - }, - { - "id": 8, - "title": "Data Quality Metrics", - "type": "stat", - "gridPos": {"h": 6, "w": 8, "x": 16, "y": 26}, - "targets": [ - { - "expr": "foxhunt:market_data_completeness_sla:rate_5m", - "legendFormat": "Data Completeness %", - "refId": "A" - }, - { - "expr": "increase(foxhunt_market_data_gaps_total[1h])", - "legendFormat": "Data Gaps (1h)", - "refId": "B" - }, - { - "expr": "increase(foxhunt_order_book_inconsistencies_total[1h])", - "legendFormat": "Book Inconsistencies (1h)", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "thresholds": { - "steps": [ - {"color": "red", "value": null}, - {"color": "yellow", "value": 99.9}, - {"color": "green", "value": 99.99} - ] - } - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "Data Completeness %"}, - "properties": [ - {"id": "unit", "value": "percent"} - ] - } - ] - } - }, - { - "id": 9, - "title": "Monthly SLA Performance Report", - "type": "table", - "gridPos": {"h": 8, "w": 24, "x": 0, "y": 32}, - "targets": [ - { - "expr": "foxhunt:order_latency_sla:success_rate_5m", - "legendFormat": "", - "refId": "A", - "format": "table" - } - ], - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": {"Time": false, "__name__": true}, - "renameByName": { - "sla_name": "SLA Name", - "sla_target": "Target", - "Value": "Current Performance" - } - } - } - ], - "fieldConfig": { - "overrides": [ - { - "matcher": {"id": "byName", "options": "Current Performance"}, - "properties": [ - {"id": "unit", "value": "percent"}, - {"id": "custom.displayMode", "value": "color-background"}, - {"id": "thresholds", "value": { - "steps": [ - {"color": "red", "value": null}, - {"color": "yellow", "value": 95}, - {"color": "green", "value": 99} - ] - }} - ] - } - ] - } - } - ], - "templating": { - "list": [ - { - "name": "service", - "type": "query", - "query": "label_values(up, job)", - "current": { - "text": "All", - "value": "$__all" - }, - "includeAll": true - }, - { - "name": "time_period", - "type": "interval", - "query": "1h,6h,24h,7d,30d", - "current": { - "text": "24h", - "value": "24h" - } - } - ] - }, - "annotations": { - "list": [ - { - "name": "SLA Breaches", - "datasource": "prometheus", - "expr": "foxhunt_sla_breaches:count_24h > 0", - "iconColor": "red" - }, - { - "name": "Risk Violations", - "datasource": "prometheus", - "expr": "increase(foxhunt_risk_violations_total[1h]) > 0", - "iconColor": "orange" - }, - { - "name": "Emergency Events", - "datasource": "prometheus", - "expr": "foxhunt_emergency_stop_status == 1", - "iconColor": "purple" - } - ] - } - } -} \ No newline at end of file diff --git a/config/grafana/dashboards/hft-latency-monitor.json b/config/grafana/dashboards/hft-latency-monitor.json deleted file mode 100644 index 56bb5bd49..000000000 --- a/config/grafana/dashboards/hft-latency-monitor.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "dashboard": { - "id": null, - "title": "HFT Latency Monitor - Real-Time Trading Performance", - "tags": ["hft", "latency", "trading", "performance"], - "timezone": "UTC", - "refresh": "1s", - "time": { - "from": "now-5m", - "to": "now" - }, - "panels": [ - { - "id": 1, - "title": "Tick-to-Trade Latency (Nanosecond Precision)", - "type": "stat", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 0}, - "targets": [ - { - "expr": "histogram_quantile(0.99, foxhunt_hft_tick_to_trade_latency_nanos_bucket) / 1000", - "legendFormat": "P99 (Ξs)", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.95, foxhunt_hft_tick_to_trade_latency_nanos_bucket) / 1000", - "legendFormat": "P95 (Ξs)", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.50, foxhunt_hft_tick_to_trade_latency_nanos_bucket) / 1000", - "legendFormat": "P50 (Ξs)", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "unit": "Âĩs", - "thresholds": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 50}, - {"color": "red", "value": 100} - ] - } - } - } - }, - { - "id": 2, - "title": "Order Placement Latency by Exchange", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 0}, - "targets": [ - { - "expr": "histogram_quantile(0.99, rate(foxhunt_hft_order_placement_latency_nanos_bucket[1m])) / 1000", - "legendFormat": "{{exchange}} P99", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "Âĩs", - "custom": { - "drawStyle": "line", - "lineInterpolation": "linear" - } - } - } - }, - { - "id": 3, - "title": "Latency Violations - Critical Threshold (>100Ξs)", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 0, "y": 8}, - "targets": [ - { - "expr": "sum(rate(foxhunt_hft_alerts_total{alert_type=\"LatencyViolation\",severity=\"Critical\"}[1m]))", - "legendFormat": "Critical Violations/sec", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ops", - "color": {"mode": "thresholds"}, - "thresholds": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 1}, - {"color": "red", "value": 10} - ] - } - } - } - }, - { - "id": 4, - "title": "Network Latency Heatmap", - "type": "heatmap", - "gridPos": {"h": 8, "w": 18, "x": 6, "y": 8}, - "targets": [ - { - "expr": "increase(foxhunt_network_latency_nanos_bucket[1m])", - "legendFormat": "{{le}}", - "refId": "A" - } - ], - "heatmap": { - "xAxis": {"show": true}, - "yAxis": { - "show": true, - "unit": "Âĩs" - } - } - }, - { - "id": 5, - "title": "Market Data Feed Quality", - "type": "timeseries", - "gridPos": {"h": 6, "w": 12, "x": 0, "y": 16}, - "targets": [ - { - "expr": "rate(foxhunt_market_data_messages_total[1m])", - "legendFormat": "{{exchange}} Messages/sec", - "refId": "A" - }, - { - "expr": "rate(foxhunt_market_data_gaps_total[1m])", - "legendFormat": "{{exchange}} Gaps/sec", - "refId": "B" - } - ] - }, - { - "id": 6, - "title": "Execution Quality Metrics", - "type": "timeseries", - "gridPos": {"h": 6, "w": 12, "x": 12, "y": 16}, - "targets": [ - { - "expr": "histogram_quantile(0.99, foxhunt_hft_slippage_basis_points_bucket)", - "legendFormat": "Slippage P99 (bps)", - "refId": "A" - }, - { - "expr": "foxhunt_hft_fill_rate * 100", - "legendFormat": "Fill Rate %", - "refId": "B" - } - ] - } - ], - "annotations": { - "list": [ - { - "name": "Trading Halts", - "datasource": "prometheus", - "expr": "foxhunt_hft_alerts_total{alert_type=\"TradingHalt\"}", - "iconColor": "red" - } - ] - } - } -} \ No newline at end of file diff --git a/config/grafana/dashboards/hft-risk-management.json b/config/grafana/dashboards/hft-risk-management.json deleted file mode 100644 index a54ab3da3..000000000 --- a/config/grafana/dashboards/hft-risk-management.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "dashboard": { - "id": null, - "title": "HFT Risk Management - Circuit Breakers & Limits", - "tags": ["hft", "risk", "circuit-breaker", "limits"], - "timezone": "UTC", - "refresh": "1s", - "time": { - "from": "now-30m", - "to": "now" - }, - "panels": [ - { - "id": 1, - "title": "Circuit Breaker Status Matrix", - "type": "status-history", - "gridPos": {"h": 8, "w": 24, "x": 0, "y": 0}, - "targets": [ - { - "expr": "foxhunt_circuit_breaker_state", - "legendFormat": "{{breaker_type}} - {{exchange}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "fillOpacity": 100 - }, - "mappings": [ - {"options": {"0": {"text": "CLOSED", "color": "green"}}, "type": "value"}, - {"options": {"1": {"text": "OPEN", "color": "red"}}, "type": "value"}, - {"options": {"2": {"text": "HALF_OPEN", "color": "yellow"}}, "type": "value"} - ] - } - } - }, - { - "id": 2, - "title": "Daily Loss Tracking", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 8}, - "targets": [ - { - "expr": "foxhunt_daily_pnl_usd", - "legendFormat": "Daily P&L", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "currencyUSD", - "custom": { - "thresholdsStyle": {"mode": "area"} - }, - "thresholds": { - "steps": [ - {"color": "transparent", "value": null}, - {"color": "red", "value": -50000}, - {"color": "yellow", "value": -10000}, - {"color": "green", "value": 0} - ] - } - } - }, - "options": { - "tooltip": {"mode": "single"} - } - }, - { - "id": 3, - "title": "Position Limits Monitor", - "type": "bargauge", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 8}, - "targets": [ - { - "expr": "abs(foxhunt_position_size) / 1000000 * 100", - "legendFormat": "{{symbol}} Position %", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 70}, - {"color": "orange", "value": 90}, - {"color": "red", "value": 95} - ] - } - } - }, - "options": { - "orientation": "horizontal", - "displayMode": "gradient" - } - }, - { - "id": 4, - "title": "Risk Violations Timeline", - "type": "timeseries", - "gridPos": {"h": 6, "w": 24, "x": 0, "y": 16}, - "targets": [ - { - "expr": "rate(foxhunt_risk_violations_total[1m])", - "legendFormat": "{{violation_type}} Violations/min", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "bars", - "barAlignment": 0 - } - } - }, - "options": { - "tooltip": {"mode": "multi"} - } - }, - { - "id": 5, - "title": "VaR & Risk Metrics", - "type": "stat", - "gridPos": {"h": 6, "w": 8, "x": 0, "y": 22}, - "targets": [ - { - "expr": "foxhunt_value_at_risk", - "legendFormat": "VaR (95%)", - "refId": "A" - }, - { - "expr": "foxhunt_expected_shortfall", - "legendFormat": "Expected Shortfall", - "refId": "B" - }, - { - "expr": "foxhunt_correlation_risk", - "legendFormat": "Correlation Risk", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "unit": "currencyUSD", - "color": {"mode": "thresholds"}, - "thresholds": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 10000}, - {"color": "red", "value": 50000} - ] - } - } - } - }, - { - "id": 6, - "title": "Market Volatility Spike Detection", - "type": "timeseries", - "gridPos": {"h": 6, "w": 8, "x": 8, "y": 22}, - "targets": [ - { - "expr": "foxhunt_market_volatility_percent", - "legendFormat": "{{symbol}} Volatility %", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "custom": { - "thresholdsStyle": {"mode": "line"} - }, - "thresholds": { - "steps": [ - {"color": "transparent", "value": null}, - {"color": "yellow", "value": 2}, - {"color": "red", "value": 5} - ] - } - } - } - }, - { - "id": 7, - "title": "Circuit Breaker Trigger History", - "type": "logs", - "gridPos": {"h": 6, "w": 8, "x": 16, "y": 22}, - "targets": [ - { - "expr": "{job=\"trading-engine\"} |= \"circuit_breaker\" |= \"triggered\"", - "refId": "A" - } - ], - "options": { - "showTime": true, - "showLabels": true, - "sortOrder": "Descending" - } - } - ], - "annotations": { - "list": [ - { - "name": "Circuit Breaker Triggers", - "datasource": "prometheus", - "expr": "foxhunt_hft_alerts_total{alert_type=\"CircuitBreakerTriggered\"}", - "iconColor": "red" - }, - { - "name": "Risk Limit Breaches", - "datasource": "prometheus", - "expr": "foxhunt_hft_alerts_total{alert_type=\"RiskLimitViolation\"}", - "iconColor": "orange" - } - ] - } - } -} \ No newline at end of file diff --git a/config/grafana/dashboards/hft-system-health.json b/config/grafana/dashboards/hft-system-health.json deleted file mode 100644 index aed7659cb..000000000 --- a/config/grafana/dashboards/hft-system-health.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "dashboard": { - "id": null, - "title": "HFT System Health - Infrastructure & Performance", - "tags": ["hft", "system", "health", "infrastructure"], - "timezone": "UTC", - "refresh": "5s", - "time": { - "from": "now-10m", - "to": "now" - }, - "panels": [ - { - "id": 1, - "title": "Exchange Connection Status", - "type": "stat", - "gridPos": {"h": 6, "w": 24, "x": 0, "y": 0}, - "targets": [ - { - "expr": "foxhunt_exchange_connected", - "legendFormat": "{{exchange}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "mappings": [ - {"options": {"0": {"text": "DISCONNECTED", "color": "red"}}, "type": "value"}, - {"options": {"1": {"text": "CONNECTED", "color": "green"}}, "type": "value"} - ], - "noValue": "UNKNOWN" - } - }, - "options": { - "colorMode": "background", - "orientation": "horizontal" - } - }, - { - "id": 2, - "title": "CPU Usage by Service", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 6}, - "targets": [ - { - "expr": "foxhunt_cpu_usage_percent", - "legendFormat": "{{service}} CPU %", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "custom": { - "thresholdsStyle": {"mode": "line"} - }, - "thresholds": { - "steps": [ - {"color": "transparent", "value": null}, - {"color": "yellow", "value": 70}, - {"color": "red", "value": 90} - ] - } - } - } - }, - { - "id": 3, - "title": "Memory Usage", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 6}, - "targets": [ - { - "expr": "foxhunt_memory_usage_bytes / 1024 / 1024 / 1024", - "legendFormat": "{{service}} Memory (GB)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "decbytes", - "custom": { - "thresholdsStyle": {"mode": "area"} - }, - "thresholds": { - "steps": [ - {"color": "transparent", "value": null}, - {"color": "yellow", "value": 4}, - {"color": "red", "value": 6} - ] - } - } - } - }, - { - "id": 4, - "title": "GC Pause Times", - "type": "histogram", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 14}, - "targets": [ - { - "expr": "histogram_quantile(0.99, foxhunt_gc_pause_duration_nanos_bucket) / 1000000", - "legendFormat": "GC Pause P99 (ms)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ms" - } - } - }, - { - "id": 5, - "title": "Thread Pool Utilization", - "type": "bargauge", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 14}, - "targets": [ - { - "expr": "foxhunt_thread_pool_active / foxhunt_thread_pool_size * 100", - "legendFormat": "{{pool}} Utilization %", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 70}, - {"color": "red", "value": 90} - ] - } - } - } - }, - { - "id": 6, - "title": "Network I/O", - "type": "timeseries", - "gridPos": {"h": 6, "w": 12, "x": 0, "y": 22}, - "targets": [ - { - "expr": "rate(foxhunt_network_bytes_total[1m])", - "legendFormat": "{{direction}} (bytes/sec)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "binBps" - } - } - }, - { - "id": 7, - "title": "Database Connection Pool", - "type": "stat", - "gridPos": {"h": 6, "w": 6, "x": 12, "y": 22}, - "targets": [ - { - "expr": "foxhunt_db_connections_active", - "legendFormat": "Active Connections", - "refId": "A" - }, - { - "expr": "foxhunt_db_connections_idle", - "legendFormat": "Idle Connections", - "refId": "B" - } - ], - "fieldConfig": { - "defaults": { - "color": {"mode": "thresholds"}, - "thresholds": { - "steps": [ - {"color": "green", "value": null}, - {"color": "yellow", "value": 80}, - {"color": "red", "value": 95} - ] - } - } - } - }, - { - "id": 8, - "title": "Service Health Check Status", - "type": "table", - "gridPos": {"h": 6, "w": 6, "x": 18, "y": 22}, - "targets": [ - { - "expr": "foxhunt_service_health_status", - "legendFormat": "", - "refId": "A", - "format": "table" - } - ], - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": {"Time": true, "__name__": true}, - "renameByName": { - "service": "Service", - "Value": "Status" - } - } - } - ], - "fieldConfig": { - "overrides": [ - { - "matcher": {"id": "byName", "options": "Status"}, - "properties": [ - { - "id": "mappings", - "value": [ - {"options": {"0": {"text": "DOWN", "color": "red"}}, "type": "value"}, - {"options": {"1": {"text": "UP", "color": "green"}}, "type": "value"} - ] - } - ] - } - ] - } - }, - { - "id": 9, - "title": "Error Rate by Service", - "type": "timeseries", - "gridPos": {"h": 6, "w": 24, "x": 0, "y": 28}, - "targets": [ - { - "expr": "rate(foxhunt_errors_total[1m])", - "legendFormat": "{{service}} Errors/min", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "bars" - }, - "color": {"mode": "palette-classic"} - } - } - } - ], - "annotations": { - "list": [ - { - "name": "Service Restarts", - "datasource": "prometheus", - "expr": "increase(foxhunt_service_restarts_total[1m])", - "iconColor": "blue" - }, - { - "name": "System Health Degraded", - "datasource": "prometheus", - "expr": "foxhunt_hft_alerts_total{alert_type=\"SystemHealthDegraded\"}", - "iconColor": "orange" - } - ] - } - } -} \ No newline at end of file diff --git a/config/grafana/dashboards/hft-trading-performance.json b/config/grafana/dashboards/hft-trading-performance.json deleted file mode 100644 index 29ccb621f..000000000 --- a/config/grafana/dashboards/hft-trading-performance.json +++ /dev/null @@ -1,409 +0,0 @@ -{ - "dashboard": { - "id": null, - "title": "Foxhunt HFT Trading Performance", - "description": "Ultra-low latency trading system monitoring with sub-second refresh rates", - "tags": ["foxhunt", "trading", "hft", "performance"], - "timezone": "browser", - "editable": true, - "gnetId": null, - "graphTooltip": 1, - "hideControls": false, - "links": [], - "panels": [ - { - "id": 1, - "title": "Order Submission Latency (P99) - CRITICAL", - "type": "stat", - "targets": [ - { - "expr": "histogram_quantile(0.99, rate(trading_order_processing_seconds_bucket[30s])) * 1000000", - "legendFormat": "P99 Latency (Ξs)", - "refId": "A", - "interval": "1s" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "thresholds": { - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 25 - }, - { - "color": "red", - "value": 50 - } - ] - }, - "unit": "Âĩs", - "min": 0, - "max": 100, - "displayName": "Order Latency P99" - } - }, - "options": { - "reduceOptions": { - "values": false, - "calcs": ["lastNotNull"], - "fields": "" - }, - "orientation": "auto", - "textMode": "auto", - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto" - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 0 - }, - "alert": { - "conditions": [ - { - "evaluator": { - "params": [50], - "type": "gt" - }, - "operator": { - "type": "and" - }, - "query": { - "params": ["A", "5s", "now"] - }, - "reducer": { - "params": [], - "type": "last" - }, - "type": "query" - } - ], - "executionErrorState": "alerting", - "for": "5s", - "frequency": "1s", - "handler": 1, - "name": "Critical Order Latency", - "noDataState": "no_data", - "notifications": [] - } - }, - { - "id": 2, - "title": "Order Flow Rate (Orders/Second)", - "type": "graph", - "targets": [ - { - "expr": "rate(trading_orders_submitted_total[1m])", - "legendFormat": "Submitted", - "refId": "A" - }, - { - "expr": "rate(trading_orders_filled_total[1m])", - "legendFormat": "Filled", - "refId": "B" - }, - { - "expr": "rate(trading_orders_cancelled_total[1m])", - "legendFormat": "Cancelled", - "refId": "C" - }, - { - "expr": "rate(trading_orders_rejected_total[1m])", - "legendFormat": "Rejected", - "refId": "D" - } - ], - "yAxes": [ - { - "label": "Orders/sec", - "min": 0 - } - ], - "xAxis": { - "show": true - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 6, - "y": 0 - }, - "legend": { - "show": true, - "values": true, - "current": true, - "max": true, - "avg": true - }, - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - } - }, - { - "id": 3, - "title": "Fill Rate %", - "type": "stat", - "targets": [ - { - "expr": "(rate(trading_orders_filled_total[1m]) / rate(trading_orders_submitted_total[1m])) * 100", - "legendFormat": "Fill Rate", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "thresholds": { - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 90 - }, - { - "color": "green", - "value": 95 - } - ] - }, - "unit": "percent", - "min": 0, - "max": 100 - } - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 0 - } - }, - { - "id": 4, - "title": "Latency Breakdown (P95)", - "type": "graph", - "targets": [ - { - "expr": "histogram_quantile(0.95, rate(trading_order_processing_seconds_bucket[1m])) * 1000000", - "legendFormat": "Order Processing", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.95, rate(trading_risk_check_seconds_bucket[1m])) * 1000000", - "legendFormat": "Risk Check", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.95, rate(trading_market_data_seconds_bucket[1m])) * 1000000", - "legendFormat": "Market Data", - "refId": "C" - }, - { - "expr": "histogram_quantile(0.95, rate(trading_total_latency_seconds_bucket[1m])) * 1000000", - "legendFormat": "Total Latency", - "refId": "D" - } - ], - "yAxes": [ - { - "label": "Latency (Ξs)", - "min": 0 - } - ], - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "legend": { - "show": true, - "values": true, - "current": true - } - }, - { - "id": 5, - "title": "System Resource Usage", - "type": "graph", - "targets": [ - { - "expr": "100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[2m])) * 100)", - "legendFormat": "CPU Usage %", - "refId": "A" - }, - { - "expr": "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100", - "legendFormat": "Memory Usage %", - "refId": "B" - }, - { - "expr": "trading_buffer_utilization_percent", - "legendFormat": "Metrics Buffer %", - "refId": "C" - } - ], - "yAxes": [ - { - "label": "Percentage", - "min": 0, - "max": 100 - } - ], - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - } - }, - { - "id": 6, - "title": "Trading P&L (Real-time)", - "type": "graph", - "targets": [ - { - "expr": "trading_realized_pnl_usd_total", - "legendFormat": "Realized P&L", - "refId": "A" - }, - { - "expr": "trading_unrealized_pnl_usd", - "legendFormat": "Unrealized P&L", - "refId": "B" - }, - { - "expr": "trading_daily_pnl_usd", - "legendFormat": "Daily P&L", - "refId": "C" - } - ], - "yAxes": [ - { - "label": "USD", - "logBase": 1 - } - ], - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 16 - }, - "legend": { - "show": true, - "values": true, - "current": true - } - }, - { - "id": 7, - "title": "Network & Connectivity", - "type": "graph", - "targets": [ - { - "expr": "histogram_quantile(0.95, rate(broker_connection_latency_seconds_bucket[1m])) * 1000", - "legendFormat": "Broker Latency P95 (ms)", - "refId": "A" - }, - { - "expr": "rate(market_data_messages_total[1m])", - "legendFormat": "Market Data Rate (msg/s)", - "refId": "B" - }, - { - "expr": "broker_connection_status", - "legendFormat": "Connection Status", - "refId": "C" - } - ], - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 16 - } - }, - { - "id": 8, - "title": "Alert Summary", - "type": "table", - "targets": [ - { - "expr": "ALERTS{alertstate=\"firing\"}", - "format": "table", - "refId": "A" - } - ], - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 24 - }, - "transform": { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": {}, - "renameByName": { - "alertname": "Alert", - "severity": "Severity", - "description": "Description", - "Value": "Status" - } - } - } - } - ], - "time": { - "from": "now-15m", - "to": "now" - }, - "timepicker": { - "refresh_intervals": ["1s", "5s", "10s", "30s", "1m", "5m"], - "time_options": ["5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d"] - }, - "templating": { - "list": [ - { - "name": "instance", - "query": "up{job=\"foxhunt-trading\"}", - "refresh": 1, - "type": "query" - } - ] - }, - "annotations": { - "list": [ - { - "name": "Trading Events", - "datasource": "prometheus", - "enable": true, - "expr": "trading_significant_events", - "iconColor": "red" - } - ] - }, - "refresh": "1s", - "schemaVersion": 16, - "version": 1 - } -} \ No newline at end of file diff --git a/config/grafana/dashboards/infrastructure.json b/config/grafana/dashboards/infrastructure.json deleted file mode 100644 index 5e7e0fb23..000000000 --- a/config/grafana/dashboards/infrastructure.json +++ /dev/null @@ -1,963 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "id": null, - "links": [], - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 150 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "postgres_stat_database_numbackends{datname=\"foxhunt\"}", - "legendFormat": "Active Connections", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "postgres_settings_max_connections", - "legendFormat": "Max Connections", - "refId": "B" - } - ], - "title": "PostgreSQL Connection Pool", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 0.1 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(postgres_stat_statements_total_time_ms_sum[5m]) / rate(postgres_stat_statements_total_time_ms_count[5m]) / 1000", - "legendFormat": "Avg Query Duration", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.95, rate(postgres_stat_statements_total_time_ms_bucket[5m])) / 1000", - "legendFormat": "P95 Query Duration", - "refId": "B" - } - ], - "title": "PostgreSQL Query Duration", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "ops" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 3, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(redis_commands_processed_total[1m])", - "legendFormat": "Commands/sec", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "irate(redis_keyspace_hits_total[1m])", - "legendFormat": "Cache Hits/sec", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "irate(redis_keyspace_misses_total[1m])", - "legendFormat": "Cache Misses/sec", - "refId": "C" - } - ], - "title": "Redis Operations", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 70 - }, - { - "color": "red", - "value": 85 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 12, - "y": 8 - }, - "id": 4, - "options": { - "orientation": "auto", - "reduceOptions": { - "values": false, - "calcs": ["lastNotNull"], - "fields": "" - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "(redis_memory_used_bytes / redis_memory_max_bytes) * 100", - "refId": "A" - } - ], - "title": "Redis Memory Usage", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "index": 1, - "text": "Down" - }, - "1": { - "color": "green", - "index": 0, - "text": "Up" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 8 - }, - "id": 5, - "options": { - "orientation": "auto", - "reduceOptions": { - "values": false, - "calcs": ["lastNotNull"], - "fields": "" - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "up{job=\"postgres\"}", - "refId": "A" - } - ], - "title": "PostgreSQL Health", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "color-text" - }, - "inspect": false - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "index": 1, - "text": "Open" - }, - "1": { - "color": "green", - "index": 0, - "text": "Closed" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 16 - }, - "id": 6, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": ["sum"], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "circuit_breaker_state{service=~\".*\"}", - "format": "table", - "instant": true, - "refId": "A" - } - ], - "title": "Circuit Breaker Status", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true, - "__name__": true, - "instance": true, - "job": true - }, - "indexByName": {}, - "renameByName": { - "Value": "State", - "service": "Service" - } - } - } - ], - "type": "table" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "stepAfter", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "index": 1, - "text": "Down" - }, - "1": { - "color": "green", - "index": 0, - "text": "Up" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 16 - }, - "id": 7, - "options": { - "legend": { - "calcs": ["lastNotNull"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "up{job=~\"foxhunt-.*\"}", - "legendFormat": "{{job}}", - "refId": "A" - } - ], - "title": "Service Health Timeline", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 24 - }, - "id": 8, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[2m])) * 100)", - "legendFormat": "CPU Usage", - "refId": "A" - } - ], - "title": "System CPU Usage", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 85 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 24 - }, - "id": 9, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100", - "legendFormat": "Memory Usage", - "refId": "A" - } - ], - "title": "System Memory Usage", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 90 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 24 - }, - "id": 10, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "(1 - (node_filesystem_avail_bytes{mountpoint=\"/\"} / node_filesystem_size_bytes{mountpoint=\"/\"})) * 100", - "legendFormat": "Disk Usage", - "refId": "A" - } - ], - "title": "System Disk Usage", - "type": "timeseries" - } - ], - "refresh": "5s", - "schemaVersion": 38, - "tags": ["foxhunt", "infrastructure", "monitoring"], - "templating": { - "list": [] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Foxhunt Infrastructure", - "uid": "foxhunt-infrastructure", - "version": 1, - "weekStart": "" -} diff --git a/config/grafana/dashboards/ml-training-comprehensive.json b/config/grafana/dashboards/ml-training-comprehensive.json deleted file mode 100644 index 12c9666f7..000000000 --- a/config/grafana/dashboards/ml-training-comprehensive.json +++ /dev/null @@ -1,518 +0,0 @@ -{ - "dashboard": { - "id": null, - "uid": "ml-training-comprehensive", - "title": "ML Training - Comprehensive Monitoring", - "description": "Real-time monitoring of ML training with loss curves, GPU metrics, NaN detection, and checkpoint tracking", - "tags": ["foxhunt", "ml", "training", "gpu", "monitoring"], - "timezone": "UTC", - "refresh": "10s", - "time": { - "from": "now-1h", - "to": "now" - }, - "templating": { - "list": [ - { - "name": "model_type", - "type": "query", - "query": "label_values(ml_training_loss, model_type)", - "multi": true, - "includeAll": true, - "allValue": ".*" - }, - { - "name": "job_id", - "type": "query", - "query": "label_values(ml_training_loss{model_type=~\"$model_type\"}, job_id)", - "multi": false, - "includeAll": false - } - ] - }, - "panels": [ - { - "id": 1, - "title": "Training Jobs by Status", - "type": "stat", - "gridPos": {"h": 4, "w": 8, "x": 0, "y": 0}, - "targets": [ - { - "expr": "ml_training_jobs_by_status{status=\"running\"}", - "legendFormat": "Running", - "refId": "A" - }, - { - "expr": "ml_training_jobs_by_status{status=\"pending\"}", - "legendFormat": "Pending", - "refId": "B" - }, - { - "expr": "ml_training_jobs_by_status{status=\"failed\"}", - "legendFormat": "Failed", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"} - ] - } - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "Failed"}, - "properties": [ - {"id": "color", "value": {"mode": "fixed", "fixedColor": "red"}} - ] - } - ] - } - }, - { - "id": 2, - "title": "Training Speed (Epochs/sec)", - "type": "gauge", - "gridPos": {"h": 4, "w": 8, "x": 8, "y": 0}, - "targets": [ - { - "expr": "ml_training_epochs_per_second{model_type=~\"$model_type\",job_id=~\"$job_id\"}", - "legendFormat": "{{model_type}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ops", - "min": 0, - "max": 2, - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "red"}, - {"value": 0.1, "color": "yellow"}, - {"value": 0.5, "color": "green"} - ] - } - } - } - }, - { - "id": 3, - "title": "NaN Detection Count (CRITICAL)", - "type": "stat", - "gridPos": {"h": 4, "w": 8, "x": 16, "y": 0}, - "targets": [ - { - "expr": "sum(ml_training_nan_count)", - "legendFormat": "Total NaN Events", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 1, "color": "red"} - ] - } - } - }, - "options": { - "colorMode": "background" - } - }, - { - "id": 4, - "title": "Training Loss Curves (All Models)", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 4}, - "targets": [ - { - "expr": "ml_training_loss{model_type=~\"$model_type\"}", - "legendFormat": "{{model_type}} (Job: {{job_id}})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineWidth": 2, - "fillOpacity": 10 - } - } - }, - "options": { - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": ["lastNotNull", "min"] - } - } - }, - { - "id": 5, - "title": "Validation Loss Curves", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 4}, - "targets": [ - { - "expr": "ml_training_validation_loss{model_type=~\"$model_type\"}", - "legendFormat": "{{model_type}} (Job: {{job_id}})", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineWidth": 2, - "fillOpacity": 10 - } - } - }, - "options": { - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": ["lastNotNull", "min"] - } - } - }, - { - "id": 6, - "title": "GPU Utilization Timeline", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 12}, - "targets": [ - { - "expr": "ml_gpu_utilization_percent", - "legendFormat": "GPU {{gpu_id}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "custom": { - "fillOpacity": 20 - }, - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "red"}, - {"value": 30, "color": "yellow"}, - {"value": 60, "color": "green"}, - {"value": 95, "color": "red"} - ] - } - } - } - }, - { - "id": 7, - "title": "GPU Memory Usage", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 12}, - "targets": [ - { - "expr": "100 * ml_gpu_memory_used_bytes / ml_gpu_memory_total_bytes", - "legendFormat": "GPU {{gpu_id}} Memory %", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "custom": { - "fillOpacity": 30 - }, - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 80, "color": "yellow"}, - {"value": 90, "color": "orange"}, - {"value": 95, "color": "red"} - ] - } - } - } - }, - { - "id": 8, - "title": "Training Progress", - "type": "gauge", - "gridPos": {"h": 6, "w": 8, "x": 0, "y": 20}, - "targets": [ - { - "expr": "ml_training_progress_percent{job_id=~\"$job_id\"}", - "legendFormat": "{{model_type}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "percentage", - "steps": [ - {"value": 0, "color": "blue"}, - {"value": 50, "color": "yellow"}, - {"value": 90, "color": "green"} - ] - } - } - } - }, - { - "id": 9, - "title": "Current Epoch", - "type": "stat", - "gridPos": {"h": 6, "w": 8, "x": 8, "y": 20}, - "targets": [ - { - "expr": "ml_training_current_epoch{job_id=~\"$job_id\"}", - "legendFormat": "{{model_type}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "short" - } - } - }, - { - "id": 10, - "title": "Model Accuracy", - "type": "gauge", - "gridPos": {"h": 6, "w": 8, "x": 16, "y": 20}, - "targets": [ - { - "expr": "ml_model_accuracy{job_id=~\"$job_id\"}", - "legendFormat": "{{model_type}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percentunit", - "min": 0, - "max": 1, - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "red"}, - {"value": 0.85, "color": "yellow"}, - {"value": 0.90, "color": "green"} - ] - } - } - } - }, - { - "id": 11, - "title": "GPU Temperature", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 26}, - "targets": [ - { - "expr": "ml_gpu_temperature_celsius", - "legendFormat": "GPU {{gpu_id}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "celsius", - "custom": { - "fillOpacity": 20 - }, - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 75, "color": "yellow"}, - {"value": 85, "color": "red"} - ] - } - } - } - }, - { - "id": 12, - "title": "Training Iteration Duration (P95)", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 26}, - "targets": [ - { - "expr": "histogram_quantile(0.95, rate(ml_training_iteration_seconds_bucket{model_type=~\"$model_type\"}[5m]))", - "legendFormat": "{{model_type}} P95", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "s" - } - } - }, - { - "id": 13, - "title": "Checkpoint Creation Events", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 34}, - "targets": [ - { - "expr": "rate(ml_checkpoint_saves_total{model_type=~\"$model_type\"}[5m])", - "legendFormat": "{{model_type}} Saves/sec", - "refId": "A" - }, - { - "expr": "rate(ml_checkpoint_save_failures_total{model_type=~\"$model_type\"}[5m])", - "legendFormat": "{{model_type}} Failures/sec", - "refId": "B" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ops" - }, - "overrides": [ - { - "matcher": {"id": "byFrameRefID", "options": "B"}, - "properties": [ - {"id": "color", "value": {"mode": "fixed", "fixedColor": "red"}} - ] - } - ] - } - }, - { - "id": 14, - "title": "Checkpoint Save Duration", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 34}, - "targets": [ - { - "expr": "histogram_quantile(0.95, rate(ml_checkpoint_save_duration_seconds_bucket{model_type=~\"$model_type\"}[5m]))", - "legendFormat": "{{model_type}} P95", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "s" - } - } - }, - { - "id": 15, - "title": "Model Convergence Rate", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 42}, - "targets": [ - { - "expr": "ml_training_convergence_rate{model_type=~\"$model_type\"}", - "legendFormat": "{{model_type}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line" - } - } - } - }, - { - "id": 16, - "title": "Data Loading Performance", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 42}, - "targets": [ - { - "expr": "histogram_quantile(0.95, rate(ml_training_data_loading_seconds_bucket{model_type=~\"$model_type\"}[5m]))", - "legendFormat": "{{model_type}} Data Load P95", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "s" - } - } - }, - { - "id": 17, - "title": "Training Failures by Type", - "type": "stat", - "gridPos": {"h": 6, "w": 12, "x": 0, "y": 50}, - "targets": [ - { - "expr": "sum by (error_type) (ml_training_failures_total)", - "legendFormat": "{{error_type}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 1, "color": "red"} - ] - } - } - }, - "options": { - "colorMode": "background" - } - }, - { - "id": 18, - "title": "GPU Errors", - "type": "stat", - "gridPos": {"h": 6, "w": 12, "x": 12, "y": 50}, - "targets": [ - { - "expr": "sum(rate(ml_gpu_errors_total[5m]))", - "legendFormat": "GPU Errors/sec", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 0.01, "color": "red"} - ] - } - } - }, - "options": { - "colorMode": "background" - } - } - ] - } -} diff --git a/config/grafana/dashboards/ml-training-monitoring.json b/config/grafana/dashboards/ml-training-monitoring.json deleted file mode 100644 index 3220e8d1c..000000000 --- a/config/grafana/dashboards/ml-training-monitoring.json +++ /dev/null @@ -1,390 +0,0 @@ -{ - "dashboard": { - "id": null, - "title": "ML Training & Inference Monitoring", - "description": "Monitor ML model training, GPU utilization, and inference performance", - "tags": ["foxhunt", "ml", "gpu", "training", "inference"], - "timezone": "UTC", - "refresh": "10s", - "time": { - "from": "now-1h", - "to": "now" - }, - "panels": [ - { - "id": 1, - "title": "ML Service Health", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 0, "y": 0}, - "targets": [ - { - "expr": "up{job=\"ml_training_service\"}", - "legendFormat": "Service Status", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "mappings": [ - {"options": {"0": {"text": "DOWN", "color": "red"}}, "type": "value"}, - {"options": {"1": {"text": "HEALTHY", "color": "green"}}, "type": "value"} - ], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "red"}, - {"value": 1, "color": "green"} - ] - } - } - }, - "options": { - "colorMode": "background" - } - }, - { - "id": 2, - "title": "ML Inference Latency (P99)", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 6, "y": 0}, - "targets": [ - { - "expr": "histogram_quantile(0.99, rate(ml_inference_duration_milliseconds_bucket[1m]))", - "legendFormat": "P99 Latency (ms)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ms", - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 50, "color": "yellow"}, - {"value": 100, "color": "red"} - ] - } - } - }, - "options": { - "colorMode": "value" - } - }, - { - "id": 3, - "title": "Model Accuracy", - "type": "gauge", - "gridPos": {"h": 4, "w": 6, "x": 12, "y": 0}, - "targets": [ - { - "expr": "ml_model_accuracy", - "legendFormat": "{{model}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "min": 0, - "max": 1, - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "red"}, - {"value": 0.85, "color": "yellow"}, - {"value": 0.90, "color": "green"} - ] - } - } - } - }, - { - "id": 4, - "title": "GPU Utilization", - "type": "gauge", - "gridPos": {"h": 4, "w": 6, "x": 18, "y": 0}, - "targets": [ - { - "expr": "ml_gpu_utilization_percent", - "legendFormat": "GPU {{gpu_id}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "red"}, - {"value": 30, "color": "yellow"}, - {"value": 60, "color": "green"}, - {"value": 95, "color": "red"} - ] - } - } - } - }, - { - "id": 5, - "title": "Inference Latency Percentiles", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 4}, - "targets": [ - { - "expr": "histogram_quantile(0.50, rate(ml_inference_duration_milliseconds_bucket[1m]))", - "legendFormat": "P50", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.95, rate(ml_inference_duration_milliseconds_bucket[1m]))", - "legendFormat": "P95", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.99, rate(ml_inference_duration_milliseconds_bucket[1m]))", - "legendFormat": "P99", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ms" - } - } - }, - { - "id": 6, - "title": "Predictions per Second", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 4}, - "targets": [ - { - "expr": "rate(ml_predictions_total[1m])", - "legendFormat": "{{model}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ops" - } - } - }, - { - "id": 7, - "title": "GPU Memory Usage", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 12}, - "targets": [ - { - "expr": "ml_gpu_memory_used_bytes / 1024 / 1024 / 1024", - "legendFormat": "GPU {{gpu_id}} Used (GB)", - "refId": "A" - }, - { - "expr": "ml_gpu_memory_total_bytes / 1024 / 1024 / 1024", - "legendFormat": "GPU {{gpu_id}} Total (GB)", - "refId": "B" - } - ], - "fieldConfig": { - "defaults": { - "unit": "decgbytes" - } - } - }, - { - "id": 8, - "title": "GPU Temperature", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 12}, - "targets": [ - { - "expr": "ml_gpu_temperature_celsius", - "legendFormat": "GPU {{gpu_id}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "celsius", - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 75, "color": "yellow"}, - {"value": 85, "color": "red"} - ] - } - } - } - }, - { - "id": 9, - "title": "Training Loss", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 20}, - "targets": [ - { - "expr": "ml_training_loss", - "legendFormat": "{{model}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line" - } - } - } - }, - { - "id": 10, - "title": "Model Cache Hit Rate", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 20}, - "targets": [ - { - "expr": "100 * rate(ml_model_cache_hits[5m]) / (rate(ml_model_cache_hits[5m]) + rate(ml_model_cache_misses[5m]))", - "legendFormat": "Cache Hit Rate %", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100 - } - } - }, - { - "id": 11, - "title": "Model Loading Failures", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 0, "y": 28}, - "targets": [ - { - "expr": "rate(ml_model_load_failures_total[5m])", - "legendFormat": "Failures/sec", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 0.1, "color": "yellow"}, - {"value": 1, "color": "red"} - ] - } - } - }, - "options": { - "colorMode": "background" - } - }, - { - "id": 12, - "title": "Prediction Errors", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 6, "y": 28}, - "targets": [ - { - "expr": "100 * rate(ml_prediction_errors_total[5m]) / rate(ml_predictions_total[5m])", - "legendFormat": "Error Rate %", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 1, "color": "yellow"}, - {"value": 5, "color": "red"} - ] - } - } - }, - "options": { - "colorMode": "background" - } - }, - { - "id": 13, - "title": "Model Drift Score", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 12, "y": 28}, - "targets": [ - { - "expr": "ml_model_drift_score", - "legendFormat": "{{model}}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 0.10, "color": "yellow"}, - {"value": 0.15, "color": "red"} - ] - } - } - }, - "options": { - "colorMode": "value" - } - }, - { - "id": 14, - "title": "Training Data Age", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 18, "y": 28}, - "targets": [ - { - "expr": "(time() - ml_training_data_last_updated_timestamp) / 3600", - "legendFormat": "Hours Since Update", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "h", - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "green"}, - {"value": 12, "color": "yellow"}, - {"value": 24, "color": "red"} - ] - } - } - }, - "options": { - "colorMode": "background" - } - } - ], - "templating": { - "list": [] - }, - "annotations": { - "list": [] - }, - "schemaVersion": 39, - "version": 1 - } -} diff --git a/config/grafana/dashboards/system/system-overview.json b/config/grafana/dashboards/system/system-overview.json deleted file mode 100644 index 6765c810c..000000000 --- a/config/grafana/dashboards/system/system-overview.json +++ /dev/null @@ -1,505 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": null, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 70 - }, - { - "color": "red", - "value": 90 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.0.0", - "targets": [ - { - "expr": "100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[2m])) * 100)", - "interval": "", - "legendFormat": "CPU Usage", - "refId": "A" - } - ], - "title": "CPU Usage", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 70 - }, - { - "color": "red", - "value": 85 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 6, - "y": 0 - }, - "id": 2, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.0.0", - "targets": [ - { - "expr": "(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100", - "interval": "", - "legendFormat": "Memory Usage", - "refId": "A" - } - ], - "title": "Memory Usage", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 20 - }, - { - "color": "green", - "value": 50 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 12, - "y": 0 - }, - "id": 3, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.0.0", - "targets": [ - { - "expr": "(node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100", - "interval": "", - "legendFormat": "Disk Space Available", - "refId": "A" - } - ], - "title": "Disk Space Available", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "text": "Down" - }, - "1": { - "color": "green", - "text": "Up" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 0 - }, - "id": 4, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "name" - }, - "pluginVersion": "9.0.0", - "targets": [ - { - "expr": "up{job=~\"foxhunt-.*\"}", - "interval": "", - "legendFormat": "{{ job }}", - "refId": "A" - } - ], - "title": "Service Status", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "vis": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 5, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "expr": "100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)", - "interval": "", - "legendFormat": "CPU Usage", - "refId": "A" - }, - { - "expr": "(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100", - "interval": "", - "legendFormat": "Memory Usage", - "refId": "B" - } - ], - "title": "System Resources Over Time", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "vis": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ops" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 6, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "expr": "rate(node_disk_reads_completed_total[5m])", - "interval": "", - "legendFormat": "Disk Reads", - "refId": "A" - }, - { - "expr": "rate(node_disk_writes_completed_total[5m])", - "interval": "", - "legendFormat": "Disk Writes", - "refId": "B" - }, - { - "expr": "rate(node_network_receive_packets_total[5m])", - "interval": "", - "legendFormat": "Network RX", - "refId": "C" - }, - { - "expr": "rate(node_network_transmit_packets_total[5m])", - "interval": "", - "legendFormat": "Network TX", - "refId": "D" - } - ], - "title": "I/O Operations", - "type": "timeseries" - } - ], - "schemaVersion": 37, - "style": "dark", - "tags": [ - "foxhunt", - "system" - ], - "templating": { - "list": [] - }, - "time": { - "from": "now-15m", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Foxhunt System Overview", - "uid": "foxhunt-system-overview", - "version": 1, - "weekStart": "" -} \ No newline at end of file diff --git a/config/grafana/dashboards/trading-service.json b/config/grafana/dashboards/trading-service.json deleted file mode 100644 index 608922a1d..000000000 --- a/config/grafana/dashboards/trading-service.json +++ /dev/null @@ -1,886 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "id": null, - "links": [], - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "sum"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(foxhunt_orders_submitted_total[1m])", - "legendFormat": "Orders Submitted/sec", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(foxhunt_trades_total[1m])", - "legendFormat": "Trades Executed/sec", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(foxhunt_orders_rejected_total[1m])", - "legendFormat": "Orders Rejected/sec", - "refId": "C" - } - ], - "title": "Order Flow", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 0.0005 - }, - { - "color": "red", - "value": 0.001 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.50, rate(foxhunt_order_processing_duration_seconds_bucket[5m]))", - "legendFormat": "P50 Execution Latency", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.95, rate(foxhunt_order_processing_duration_seconds_bucket[5m]))", - "legendFormat": "P95 Execution Latency", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.99, rate(foxhunt_order_processing_duration_seconds_bucket[5m]))", - "legendFormat": "P99 Execution Latency", - "refId": "C" - } - ], - "title": "Order Execution Latency (P50/P95/P99)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 3, - "options": { - "legend": { - "calcs": ["lastNotNull"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "foxhunt_positions_open", - "legendFormat": "Open Positions", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(foxhunt_positions_updated_total[1m])", - "legendFormat": "Position Updates/sec", - "refId": "B" - } - ], - "title": "Position Management", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 4, - "options": { - "legend": { - "calcs": ["sum"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(foxhunt_risk_checks_total[1m])", - "legendFormat": "Total Risk Checks/sec", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(foxhunt_risk_violations_total[1m])", - "legendFormat": "Risk Violations/sec", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "rate(foxhunt_risk_check_failures_total[1m])", - "legendFormat": "Risk Check Failures/sec", - "refId": "C" - } - ], - "title": "Risk Management", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "max": 100, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 60 - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 0, - "y": 16 - }, - "id": 5, - "options": { - "orientation": "auto", - "reduceOptions": { - "values": false, - "calcs": ["lastNotNull"], - "fields": "" - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "(foxhunt_position_size_total / foxhunt_position_limit_total) * 100", - "refId": "A" - } - ], - "title": "Position Limit Utilization", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "max": 10, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 3 - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 6, - "y": 16 - }, - "id": 6, - "options": { - "orientation": "auto", - "reduceOptions": { - "values": false, - "calcs": ["lastNotNull"], - "fields": "" - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "foxhunt_portfolio_drawdown_percent", - "refId": "A" - } - ], - "title": "Portfolio Drawdown", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 0.0005 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 16 - }, - "id": 7, - "options": { - "legend": { - "calcs": ["mean", "lastNotNull", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.50, rate(foxhunt_market_data_latency_seconds_bucket[5m]))", - "legendFormat": "P50 Market Data Latency", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.95, rate(foxhunt_market_data_latency_seconds_bucket[5m]))", - "legendFormat": "P95 Market Data Latency", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "histogram_quantile(0.99, rate(foxhunt_market_data_latency_seconds_bucket[5m]))", - "legendFormat": "P99 Market Data Latency", - "refId": "C" - } - ], - "title": "Market Data Latency (P50/P95/P99)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "currencyUSD" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 24 - }, - "id": 8, - "options": { - "legend": { - "calcs": ["lastNotNull"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "foxhunt_portfolio_value_total", - "legendFormat": "Total Portfolio Value", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "foxhunt_realized_pnl_total", - "legendFormat": "Realized PnL", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "foxhunt_unrealized_pnl_total", - "legendFormat": "Unrealized PnL", - "refId": "C" - } - ], - "title": "Portfolio Performance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" - }, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 24 - }, - "id": 9, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": ["sum"], - "show": false - }, - "showHeader": true - }, - "pluginVersion": "10.2.2", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "b4c55c0d-6a2f-4a70-a080-6f31d0dd02a2" - }, - "expr": "topk(10, sum(rate(foxhunt_trades_total[5m])) by (symbol))", - "format": "table", - "instant": true, - "refId": "A" - } - ], - "title": "Top 10 Most Active Symbols", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true - }, - "indexByName": {}, - "renameByName": { - "Value": "Trades/sec", - "symbol": "Symbol" - } - } - } - ], - "type": "table" - } - ], - "refresh": "5s", - "schemaVersion": 38, - "tags": ["foxhunt", "trading", "performance"], - "templating": { - "list": [] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Foxhunt Trading Service", - "uid": "foxhunt-trading-service", - "version": 1, - "weekStart": "" -} diff --git a/config/grafana/dashboards/trading/trading-overview.json b/config/grafana/dashboards/trading/trading-overview.json deleted file mode 100644 index 26c0daa61..000000000 --- a/config/grafana/dashboards/trading/trading-overview.json +++ /dev/null @@ -1,383 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": null, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "vis": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ops" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "expr": "rate(foxhunt_trades_total[1m])", - "interval": "", - "legendFormat": "Trades/sec", - "refId": "A" - }, - { - "expr": "rate(foxhunt_orders_total[1m])", - "interval": "", - "legendFormat": "Orders/sec", - "refId": "B" - } - ], - "title": "Trading Activity", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 0.0005 - }, - { - "color": "red", - "value": 0.001 - } - ] - }, - "unit": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.0.0", - "targets": [ - { - "expr": "foxhunt_order_processing_duration_seconds{quantile=\"0.95\"}", - "interval": "", - "legendFormat": "95th Percentile", - "refId": "A" - } - ], - "title": "Order Processing Latency (95th percentile)", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "vis": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "currencyUSD" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 3, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "expr": "foxhunt_portfolio_value_total", - "interval": "", - "legendFormat": "Portfolio Value", - "refId": "A" - }, - { - "expr": "foxhunt_unrealized_pnl_total", - "interval": "", - "legendFormat": "Unrealized PnL", - "refId": "B" - }, - { - "expr": "foxhunt_realized_pnl_total", - "interval": "", - "legendFormat": "Realized PnL", - "refId": "C" - } - ], - "title": "Portfolio Performance", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "vis": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 4, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "expr": "foxhunt_position_size_total by (symbol)", - "interval": "", - "legendFormat": "{{ symbol }}", - "refId": "A" - } - ], - "title": "Position Sizes by Symbol", - "type": "timeseries" - } - ], - "schemaVersion": 37, - "style": "dark", - "tags": [ - "foxhunt", - "trading" - ], - "templating": { - "list": [] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Foxhunt Trading Overview", - "uid": "foxhunt-trading-overview", - "version": 1, - "weekStart": "" -} \ No newline at end of file diff --git a/config/grafana/dashboards/wave_d_regime_detection.json b/config/grafana/dashboards/wave_d_regime_detection.json deleted file mode 100644 index 794b8cd78..000000000 --- a/config/grafana/dashboards/wave_d_regime_detection.json +++ /dev/null @@ -1,810 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "id": null, - "links": [], - "liveNow": true, - "panels": [ - { - "id": 1, - "title": "Regime Transitions Timeline", - "description": "Displays regime changes over time with CUSUM alert triggers. Alert if >50 transitions/hour (flip-flopping).", - "type": "timeseries", - "gridPos": {"h": 8, "w": 24, "x": 0, "y": 0}, - "datasource": { - "type": "postgres", - "uid": "postgres" - }, - "targets": [ - { - "format": "time_series", - "rawSql": "SELECT\n event_timestamp AS time,\n symbol,\n from_regime || ' → ' || to_regime AS metric,\n 1 AS value,\n CASE\n WHEN cusum_alert_triggered THEN 'CUSUM Alert'\n ELSE 'Normal'\n END AS alert_type\nFROM regime_transitions\nWHERE\n event_timestamp >= NOW() - INTERVAL '24 hours'\nORDER BY event_timestamp ASC", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "points", - "lineInterpolation": "stepAfter", - "barAlignment": 0, - "lineWidth": 2, - "fillOpacity": 0, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "always", - "pointSize": 8, - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "axisLabel": "Regime Transitions", - "scaleDistribution": { - "type": "linear" - }, - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": null, "color": "green"} - ] - }, - "unit": "short" - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "CUSUM Alert"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "red" - } - }, - { - "id": "custom.pointSize", - "value": 12 - } - ] - } - ] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "none" - }, - "legend": { - "showLegend": true, - "displayMode": "table", - "placement": "right", - "calcs": ["count"] - } - }, - "pluginVersion": "9.5.0" - }, - { - "id": 2, - "title": "Feature Extraction Latency (P50/P99)", - "description": "Wave D feature extraction performance. Target: <1ms (1000Ξs). Alert if P99 >2ms.", - "type": "timeseries", - "gridPos": {"h": 8, "w": 12, "x": 0, "y": 8}, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "targets": [ - { - "expr": "histogram_quantile(0.50, rate(wave_d_feature_extraction_duration_seconds_bucket[5m])) * 1000", - "legendFormat": "P50 Latency (ms)", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.99, rate(wave_d_feature_extraction_duration_seconds_bucket[5m])) * 1000", - "legendFormat": "P99 Latency (ms)", - "refId": "B" - }, - { - "expr": "avg(rate(wave_d_feature_extraction_duration_seconds_sum[5m]) / rate(wave_d_feature_extraction_duration_seconds_count[5m])) * 1000", - "legendFormat": "Average Latency (ms)", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "barAlignment": 0, - "lineWidth": 2, - "fillOpacity": 10, - "gradientMode": "opacity", - "spanNulls": false, - "showPoints": "never", - "pointSize": 5, - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "axisLabel": "Latency (ms)", - "scaleDistribution": { - "type": "linear" - }, - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": null, "color": "green"}, - {"value": 1, "color": "yellow"}, - {"value": 2, "color": "red"} - ] - }, - "unit": "ms" - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "P99 Latency (ms)"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "orange" - } - }, - { - "id": "custom.lineWidth", - "value": 3 - } - ] - } - ] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "showLegend": true, - "displayMode": "table", - "placement": "bottom", - "calcs": ["mean", "max", "lastNotNull"] - } - }, - "pluginVersion": "9.5.0" - }, - { - "id": 3, - "title": "Regime Distribution (24h)", - "description": "Percentage distribution of detected regimes over the last 24 hours", - "type": "piechart", - "gridPos": {"h": 8, "w": 12, "x": 12, "y": 8}, - "datasource": { - "type": "postgres", - "uid": "postgres" - }, - "targets": [ - { - "format": "table", - "rawSql": "SELECT\n regime AS metric,\n COUNT(*) AS value\nFROM regime_states\nWHERE\n event_timestamp >= NOW() - INTERVAL '24 hours'\nGROUP BY regime\nORDER BY value DESC", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - } - }, - "mappings": [], - "unit": "short" - }, - "overrides": [ - { - "matcher": {"id": "byName", "options": "Trending"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "green" - } - } - ] - }, - { - "matcher": {"id": "byName", "options": "Ranging"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "blue" - } - } - ] - }, - { - "matcher": {"id": "byName", "options": "Volatile"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "orange" - } - } - ] - }, - { - "matcher": {"id": "byName", "options": "Crisis"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "red" - } - } - ] - }, - { - "matcher": {"id": "byName", "options": "Normal"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "light-green" - } - } - ] - }, - { - "matcher": {"id": "byName", "options": "Illiquid"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "yellow" - } - } - ] - }, - { - "matcher": {"id": "byName", "options": "Momentum"}, - "properties": [ - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "purple" - } - } - ] - } - ] - }, - "options": { - "pieType": "pie", - "tooltip": { - "mode": "single" - }, - "legend": { - "displayMode": "table", - "placement": "right", - "showLegend": true, - "values": ["value", "percent"] - }, - "reduceOptions": { - "values": false, - "fields": "", - "calcs": ["lastNotNull"] - }, - "displayLabels": ["percent"] - }, - "pluginVersion": "9.5.0" - }, - { - "id": 4, - "title": "Adaptive Strategy Metrics (Real-time)", - "description": "Position sizing and stop-loss adjustments by regime. Position: 0.2x-1.5x, Stop-loss: 1.5x-4.0x ATR", - "type": "timeseries", - "gridPos": {"h": 8, "w": 24, "x": 0, "y": 16}, - "datasource": { - "type": "postgres", - "uid": "postgres" - }, - "targets": [ - { - "format": "time_series", - "rawSql": "SELECT\n event_timestamp AS time,\n symbol || ' - ' || regime AS metric,\n position_multiplier AS value\nFROM adaptive_strategy_metrics\nWHERE\n event_timestamp >= NOW() - INTERVAL '24 hours'\nORDER BY event_timestamp ASC", - "refId": "A", - "alias": "Position Multiplier" - }, - { - "format": "time_series", - "rawSql": "SELECT\n event_timestamp AS time,\n symbol || ' - ' || regime AS metric,\n stop_loss_multiplier AS value\nFROM adaptive_strategy_metrics\nWHERE\n event_timestamp >= NOW() - INTERVAL '24 hours'\nORDER BY event_timestamp ASC", - "refId": "B", - "alias": "Stop-Loss Multiplier" - }, - { - "format": "time_series", - "rawSql": "SELECT\n event_timestamp AS time,\n symbol || ' - ' || regime AS metric,\n regime_sharpe AS value\nFROM adaptive_strategy_metrics\nWHERE\n event_timestamp >= NOW() - INTERVAL '24 hours'\n AND regime_sharpe IS NOT NULL\nORDER BY event_timestamp ASC", - "refId": "C", - "alias": "Regime Sharpe Ratio" - }, - { - "format": "time_series", - "rawSql": "SELECT\n event_timestamp AS time,\n symbol || ' - ' || regime AS metric,\n risk_budget_utilization * 100 AS value\nFROM adaptive_strategy_metrics\nWHERE\n event_timestamp >= NOW() - INTERVAL '24 hours'\n AND risk_budget_utilization IS NOT NULL\nORDER BY event_timestamp ASC", - "refId": "D", - "alias": "Risk Budget Utilization (%)" - } - ], - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "barAlignment": 0, - "lineWidth": 2, - "fillOpacity": 15, - "gradientMode": "opacity", - "spanNulls": false, - "showPoints": "auto", - "pointSize": 5, - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "axisLabel": "", - "scaleDistribution": { - "type": "linear" - }, - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": null, "color": "green"} - ] - }, - "unit": "short" - }, - "overrides": [ - { - "matcher": {"id": "byFrameRefID", "options": "A"}, - "properties": [ - { - "id": "displayName", - "value": "Position Multiplier (0.2x-1.5x)" - }, - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "blue" - } - }, - { - "id": "custom.axisPlacement", - "value": "left" - }, - { - "id": "min", - "value": 0 - }, - { - "id": "max", - "value": 2 - } - ] - }, - { - "matcher": {"id": "byFrameRefID", "options": "B"}, - "properties": [ - { - "id": "displayName", - "value": "Stop-Loss Multiplier (1.5x-4.0x)" - }, - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "orange" - } - }, - { - "id": "custom.axisPlacement", - "value": "left" - }, - { - "id": "min", - "value": 1 - }, - { - "id": "max", - "value": 5 - } - ] - }, - { - "matcher": {"id": "byFrameRefID", "options": "C"}, - "properties": [ - { - "id": "displayName", - "value": "Regime Sharpe Ratio (>1.5 target)" - }, - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "green" - } - }, - { - "id": "custom.axisPlacement", - "value": "right" - }, - { - "id": "min", - "value": 0 - } - ] - }, - { - "matcher": {"id": "byFrameRefID", "options": "D"}, - "properties": [ - { - "id": "displayName", - "value": "Risk Budget Utilization (<80% target)" - }, - { - "id": "color", - "value": { - "mode": "fixed", - "fixedColor": "purple" - } - }, - { - "id": "custom.axisPlacement", - "value": "right" - }, - { - "id": "unit", - "value": "percent" - }, - { - "id": "min", - "value": 0 - }, - { - "id": "max", - "value": 100 - } - ] - } - ] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "showLegend": true, - "displayMode": "table", - "placement": "bottom", - "calcs": ["mean", "max", "lastNotNull"] - } - }, - "pluginVersion": "9.5.0" - }, - { - "id": 5, - "title": "Rollback Alert: Flip-Flopping Detection", - "description": "CRITICAL: >50 transitions/hour triggers Level 1 rollback", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 0, "y": 24}, - "datasource": { - "type": "postgres", - "uid": "postgres" - }, - "targets": [ - { - "format": "table", - "rawSql": "SELECT\n COUNT(*) AS value\nFROM regime_transitions\nWHERE\n event_timestamp >= NOW() - INTERVAL '1 hour'", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": null, "color": "green"}, - {"value": 30, "color": "yellow"}, - {"value": 50, "color": "red"} - ] - }, - "color": { - "mode": "thresholds" - }, - "unit": "short" - }, - "overrides": [] - }, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "reduceOptions": { - "values": false, - "fields": "", - "calcs": ["lastNotNull"] - }, - "textMode": "value_and_name", - "text": { - "titleSize": 14, - "valueSize": 40 - } - }, - "pluginVersion": "9.5.0" - }, - { - "id": 6, - "title": "Rollback Alert: False Positives", - "description": "WARNING: >80% error rate triggers Level 1 rollback", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 6, "y": 24}, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "targets": [ - { - "expr": "(sum(regime_detection_errors_total) / sum(regime_detections_total)) * 100", - "legendFormat": "Error Rate (%)", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": null, "color": "green"}, - {"value": 50, "color": "yellow"}, - {"value": 80, "color": "red"} - ] - }, - "color": { - "mode": "thresholds" - }, - "unit": "percent" - }, - "overrides": [] - }, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "reduceOptions": { - "values": false, - "fields": "", - "calcs": ["lastNotNull"] - }, - "textMode": "value_and_name", - "text": { - "titleSize": 14, - "valueSize": 40 - } - }, - "pluginVersion": "9.5.0" - }, - { - "id": 7, - "title": "Rollback Alert: Data Corruption", - "description": "CRITICAL: NaN/Inf triggers immediate Level 3 rollback", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 12, "y": 24}, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "targets": [ - { - "expr": "wave_d_features_nan_count + wave_d_features_inf_count", - "legendFormat": "NaN/Inf Count", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": null, "color": "green"}, - {"value": 1, "color": "red"} - ] - }, - "color": { - "mode": "thresholds" - }, - "unit": "short" - }, - "overrides": [] - }, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "reduceOptions": { - "values": false, - "fields": "", - "calcs": ["lastNotNull"] - }, - "textMode": "value_and_name", - "text": { - "titleSize": 14, - "valueSize": 40 - } - }, - "pluginVersion": "9.5.0" - }, - { - "id": 8, - "title": "System Health", - "description": "Service uptime monitoring. Down >5 minutes triggers Level 3 rollback.", - "type": "stat", - "gridPos": {"h": 4, "w": 6, "x": 18, "y": 24}, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "targets": [ - { - "expr": "up{job=\"ml_training_service\"}", - "legendFormat": "ML Training", - "refId": "A" - }, - { - "expr": "up{job=\"trading_service\"}", - "legendFormat": "Trading", - "refId": "B" - }, - { - "expr": "up{job=\"api_gateway\"}", - "legendFormat": "API Gateway", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "mappings": [ - {"options": {"0": {"text": "DOWN", "color": "red"}}, "type": "value"}, - {"options": {"1": {"text": "UP", "color": "green"}}, "type": "value"} - ], - "thresholds": { - "mode": "absolute", - "steps": [ - {"value": 0, "color": "red"}, - {"value": 1, "color": "green"} - ] - }, - "color": { - "mode": "thresholds" - }, - "unit": "short" - }, - "overrides": [] - }, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "horizontal", - "reduceOptions": { - "values": false, - "fields": "", - "calcs": ["lastNotNull"] - }, - "textMode": "value_and_name", - "text": { - "titleSize": 14, - "valueSize": 24 - } - }, - "pluginVersion": "9.5.0" - } - ], - "refresh": "10s", - "schemaVersion": 38, - "style": "dark", - "tags": ["foxhunt", "wave-d", "regime-detection", "adaptive-strategy"], - "templating": { - "list": [] - }, - "time": { - "from": "now-24h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": ["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"] - }, - "timezone": "UTC", - "title": "Wave D - Regime Detection & Adaptive Strategies", - "uid": "wave_d_regime_detection", - "version": 1, - "weekStart": "" -} diff --git a/config/grafana/provisioning/dashboards/dashboards.yml b/config/grafana/provisioning/dashboards/dashboards.yml deleted file mode 100644 index 2df0faa81..000000000 --- a/config/grafana/provisioning/dashboards/dashboards.yml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: 1 - -providers: - # Trading System Dashboards - - name: 'foxhunt-trading' - orgId: 1 - folder: 'Foxhunt Trading' - type: file - disableDeletion: false - updateIntervalSeconds: 30 - allowUiUpdates: true - options: - path: /var/lib/grafana/dashboards/trading - - # System Monitoring Dashboards - - name: 'foxhunt-system' - orgId: 1 - folder: 'System Monitoring' - type: file - disableDeletion: false - updateIntervalSeconds: 30 - allowUiUpdates: true - options: - path: /var/lib/grafana/dashboards/system - - # Risk Management Dashboards - - name: 'foxhunt-risk' - orgId: 1 - folder: 'Risk Management' - type: file - disableDeletion: false - updateIntervalSeconds: 30 - allowUiUpdates: true - options: - path: /var/lib/grafana/dashboards/risk - - # Market Data Dashboards - - name: 'foxhunt-market-data' - orgId: 1 - folder: 'Market Data' - type: file - disableDeletion: false - updateIntervalSeconds: 30 - allowUiUpdates: true - options: - path: /var/lib/grafana/dashboards/market-data \ No newline at end of file diff --git a/config/grafana/provisioning/datasources/datasources.yml b/config/grafana/provisioning/datasources/datasources.yml deleted file mode 100644 index 1bc267721..000000000 --- a/config/grafana/provisioning/datasources/datasources.yml +++ /dev/null @@ -1,72 +0,0 @@ -apiVersion: 1 - -datasources: - # Prometheus - Main metrics source - - name: Prometheus - type: prometheus - access: proxy - orgId: 1 - url: http://foxhunt-prometheus:9090 - basicAuth: false - isDefault: true - version: 1 - editable: true - jsonData: - httpMethod: POST - queryTimeout: 60s - timeInterval: 5s - - # InfluxDB - Time-series data - - name: InfluxDB - type: influxdb - access: proxy - orgId: 1 - url: http://influxdb:8086 - basicAuth: false - version: 1 - editable: true - database: market_data - user: admin - secureJsonData: - password: ${INFLUXDB_PASSWORD} - jsonData: - httpMode: GET - keepCookies: [] - - # PostgreSQL - Application data - - name: PostgreSQL - type: postgres - access: proxy - orgId: 1 - url: foxhunt-postgres:5432 - basicAuth: false - version: 1 - editable: true - database: foxhunt - user: foxhunt - secureJsonData: - password: ${POSTGRES_PASSWORD} - jsonData: - sslmode: disable - maxOpenConns: 100 - maxIdleConns: 100 - connMaxLifetime: 14400 - - # ClickHouse - Analytics data - - name: ClickHouse - type: grafana-clickhouse-datasource - access: proxy - orgId: 1 - url: http://clickhouse:8123 - basicAuth: false - version: 1 - editable: true - database: foxhunt - user: default - secureJsonData: - password: ${CLICKHOUSE_PASSWORD} - jsonData: - defaultDatabase: foxhunt - port: 8123 - server: clickhouse - username: default \ No newline at end of file diff --git a/config/monitoring/grafana/dashboards/dqn_staging_dashboard.json b/config/monitoring/grafana/dashboards/dqn_staging_dashboard.json deleted file mode 100644 index b56d10856..000000000 --- a/config/monitoring/grafana/dashboards/dqn_staging_dashboard.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "dashboard": { - "id": null, - "uid": "dqn-staging-v1", - "title": "DQN Model Staging - Paper Trading", - "tags": ["ml", "dqn", "staging", "paper-trading"], - "timezone": "browser", - "schemaVersion": 38, - "version": 1, - "refresh": "30s", - "panels": [ - { - "id": 1, - "title": "DQN Inference Latency (Ξs)", - "type": "timeseries", - "gridPos": { "x": 0, "y": 0, "w": 12, "h": 8 }, - "targets": [ - { - "expr": "histogram_quantile(0.50, rate(ml_model_inference_latency_us_bucket{model_id=\"DQN\"}[5m]))", - "legendFormat": "P50", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.95, rate(ml_model_inference_latency_us_bucket{model_id=\"DQN\"}[5m]))", - "legendFormat": "P95", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.99, rate(ml_model_inference_latency_us_bucket{model_id=\"DQN\"}[5m]))", - "legendFormat": "P99", - "refId": "C" - } - ], - "fieldConfig": { - "defaults": { - "unit": "Âĩs", - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "green" }, - { "value": 50, "color": "yellow" }, - { "value": 100, "color": "red" } - ] - } - } - } - }, - { - "id": 2, - "title": "DQN Prediction Confidence", - "type": "timeseries", - "gridPos": { "x": 12, "y": 0, "w": 12, "h": 8 }, - "targets": [ - { - "expr": "avg(ml_model_prediction_confidence{model_id=\"DQN\"})", - "legendFormat": "Avg Confidence", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percentunit", - "min": 0, - "max": 1, - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "red" }, - { "value": 0.6, "color": "yellow" }, - { "value": 0.8, "color": "green" } - ] - } - } - } - }, - { - "id": 3, - "title": "Paper Trading PnL (USD)", - "type": "timeseries", - "gridPos": { "x": 0, "y": 8, "w": 12, "h": 8 }, - "targets": [ - { - "expr": "sum(ensemble_paper_trading_pnl_cents{config=\"dqn_staging\"}) / 100", - "legendFormat": "Total PnL", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "currencyUSD", - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "red" }, - { "value": 0, "color": "green" } - ] - } - } - } - }, - { - "id": 4, - "title": "Trade Win Rate (%)", - "type": "gauge", - "gridPos": { "x": 12, "y": 8, "w": 6, "h": 8 }, - "targets": [ - { - "expr": "(sum(rate(ensemble_paper_trading_winning_trades{config=\"dqn_staging\"}[1h])) / sum(rate(ensemble_paper_trading_total_trades{config=\"dqn_staging\"}[1h]))) * 100", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "min": 0, - "max": 100, - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "red" }, - { "value": 50, "color": "yellow" }, - { "value": 55, "color": "green" } - ] - } - } - } - }, - { - "id": 5, - "title": "Sharpe Ratio", - "type": "gauge", - "gridPos": { "x": 18, "y": 8, "w": 6, "h": 8 }, - "targets": [ - { - "expr": "ensemble_paper_trading_sharpe_ratio{config=\"dqn_staging\"}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "none", - "min": -2, - "max": 3, - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "red" }, - { "value": 1.0, "color": "yellow" }, - { "value": 1.5, "color": "green" } - ] - } - } - } - }, - { - "id": 6, - "title": "DQN Predictions per Second", - "type": "timeseries", - "gridPos": { "x": 0, "y": 16, "w": 12, "h": 8 }, - "targets": [ - { - "expr": "rate(ml_model_predictions_total{model_id=\"DQN\"}[5m])", - "legendFormat": "Predictions/sec", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "ops" - } - } - }, - { - "id": 7, - "title": "GPU Memory Usage (MB)", - "type": "timeseries", - "gridPos": { "x": 12, "y": 16, "w": 12, "h": 8 }, - "targets": [ - { - "expr": "ml_model_gpu_memory_mb{model_id=\"DQN\"}", - "legendFormat": "GPU Memory", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "mbytes", - "max": 4096, - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "green" }, - { "value": 3000, "color": "yellow" }, - { "value": 3500, "color": "red" } - ] - } - } - } - }, - { - "id": 8, - "title": "Active Paper Trading Positions", - "type": "stat", - "gridPos": { "x": 0, "y": 24, "w": 6, "h": 4 }, - "targets": [ - { - "expr": "ensemble_paper_trading_active_positions{config=\"dqn_staging\"}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "none", - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "green" }, - { "value": 4, "color": "yellow" }, - { "value": 5, "color": "red" } - ] - } - } - } - }, - { - "id": 9, - "title": "Total Trades Today", - "type": "stat", - "gridPos": { "x": 6, "y": 24, "w": 6, "h": 4 }, - "targets": [ - { - "expr": "increase(ensemble_paper_trading_total_trades{config=\"dqn_staging\"}[24h])", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "none" - } - } - }, - { - "id": 10, - "title": "Max Drawdown (%)", - "type": "stat", - "gridPos": { "x": 12, "y": 24, "w": 6, "h": 4 }, - "targets": [ - { - "expr": "ensemble_paper_trading_max_drawdown_pct{config=\"dqn_staging\"}", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "percent", - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "green" }, - { "value": 3, "color": "yellow" }, - { "value": 5, "color": "red" } - ] - } - } - } - }, - { - "id": 11, - "title": "Model Inference Errors", - "type": "stat", - "gridPos": { "x": 18, "y": 24, "w": 6, "h": 4 }, - "targets": [ - { - "expr": "increase(ml_model_inference_errors_total{model_id=\"DQN\"}[1h])", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "unit": "none", - "thresholds": { - "mode": "absolute", - "steps": [ - { "value": null, "color": "green" }, - { "value": 5, "color": "yellow" }, - { "value": 10, "color": "red" } - ] - } - } - } - } - ], - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": ["10s", "30s", "1m", "5m", "15m", "30m", "1h"] - }, - "annotations": { - "list": [ - { - "name": "Model Deployments", - "datasource": "Prometheus", - "expr": "changes(ml_model_deployment_timestamp{model_id=\"DQN\"}[5m])", - "tagKeys": "model_id,version", - "textFormat": "DQN v{{version}} deployed", - "iconColor": "blue" - } - ] - } - }, - "overwrite": true -} diff --git a/crates/ml/grafana/performance_tracking_dashboard.json b/crates/ml/grafana/performance_tracking_dashboard.json deleted file mode 100644 index 4a38adfa8..000000000 --- a/crates/ml/grafana/performance_tracking_dashboard.json +++ /dev/null @@ -1,727 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": null, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 10 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "legend": { - "calcs": ["mean", "last"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_dbn_load_time_ms", - "legendFormat": "DBN Load Time (target: <10ms)", - "range": true, - "refId": "A" - } - ], - "title": "DBN Data Loading Time", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 50 - } - ] - }, - "unit": "Âĩs" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "legend": { - "calcs": ["mean", "last"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_inference_latency_us{model=\"DQN\"}", - "legendFormat": "DQN", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_inference_latency_us{model=\"PPO\"}", - "legendFormat": "PPO", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_inference_latency_us{model=\"MAMBA-2\"}", - "legendFormat": "MAMBA-2", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_inference_latency_us{model=\"TFT\"}", - "legendFormat": "TFT", - "range": true, - "refId": "D" - } - ], - "title": "Inference Latency by Model (target: <50Âĩs)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "id": 3, - "options": { - "legend": { - "calcs": ["mean", "last"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_training_step_time_ms{model=\"DQN\"}", - "legendFormat": "DQN", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_training_step_time_ms{model=\"PPO\"}", - "legendFormat": "PPO", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_training_step_time_ms{model=\"MAMBA-2\"}", - "legendFormat": "MAMBA-2", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_training_step_time_ms{model=\"TFT\"}", - "legendFormat": "TFT", - "range": true, - "refId": "D" - } - ], - "title": "Training Step Time by Model", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "decmbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 8 - }, - "id": 4, - "options": { - "legend": { - "calcs": ["mean", "last", "max"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_memory_usage_mb{model=\"DQN\"}", - "legendFormat": "DQN (50-150MB)", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_memory_usage_mb{model=\"PPO\"}", - "legendFormat": "PPO (50-200MB)", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_memory_usage_mb{model=\"MAMBA-2\"}", - "legendFormat": "MAMBA-2 (150-500MB)", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_memory_usage_mb{model=\"TFT\"}", - "legendFormat": "TFT (1.5-2.5GB)", - "range": true, - "refId": "D" - } - ], - "title": "Memory Usage by Model", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "green", - "value": 0 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 16 - }, - "id": 5, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": ["lastNotNull"], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_regression_detected", - "legendFormat": "Regressions", - "range": true, - "refId": "A" - } - ], - "title": "Performance Regressions Detected", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "red", - "value": 10 - } - ] - }, - "unit": "percent" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 6, - "y": 16 - }, - "id": 6, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": ["lastNotNull"], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "9.5.3", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_performance_change_percent", - "legendFormat": "{{metric}}", - "range": true, - "refId": "A" - } - ], - "title": "Performance Change vs Baseline", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 16 - }, - "id": 7, - "options": { - "legend": { - "calcs": ["mean", "last"], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "ml_feature_extraction_time_ms", - "legendFormat": "Feature Extraction Time", - "range": true, - "refId": "A" - } - ], - "title": "Feature Extraction Time (16 features + 10 indicators)", - "type": "timeseries" - } - ], - "refresh": "10s", - "schemaVersion": 38, - "style": "dark", - "tags": ["ml", "performance", "training"], - "templating": { - "list": [] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "ML Training Performance Tracking", - "uid": "ml-performance-tracking", - "version": 1, - "weekStart": "" -} diff --git a/infra/k8s/gitlab/grafana-values.yaml b/infra/k8s/gitlab/grafana-values.yaml index 1dc98acf5..4f3bfff30 100644 --- a/infra/k8s/gitlab/grafana-values.yaml +++ b/infra/k8s/gitlab/grafana-values.yaml @@ -23,8 +23,10 @@ resources: persistence: enabled: false -adminUser: admin -adminPassword: uzICCLSPjdP6i2HiYjPID68ijFpn9C +admin: + existingSecret: grafana-admin + userKey: admin-user + passwordKey: admin-password envFromSecrets: - name: db-credentials @@ -96,7 +98,7 @@ dashboardProviders: providers: - name: default orgId: 1 - folder: GitLab + folder: Foxhunt type: file disableDeletion: false editable: true @@ -105,7 +107,7 @@ dashboardProviders: dashboards: default: - gitlab-overview: + node-exporter: gnetId: 1860 revision: 37 datasource: Prometheus diff --git a/infra/k8s/monitoring/dashboards/foxhunt-ci-pipelines.json b/infra/k8s/monitoring/dashboards/foxhunt-ci-pipelines.json deleted file mode 100644 index 1ba91c107..000000000 --- a/infra/k8s/monitoring/dashboards/foxhunt-ci-pipelines.json +++ /dev/null @@ -1,1695 +0,0 @@ -{ - "__inputs": [ - { - "name": "DS_PROMETHEUS", - "label": "Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus" - } - ], - "id": null, - "uid": "foxhunt-ci-pipelines", - "title": "CI/CD Pipelines", - "description": "GitLab CI pipeline metrics, failure analysis, runner performance, and K8s training jobs", - "tags": [ - "foxhunt", - "ci-cd", - "pipelines" - ], - "timezone": "browser", - "schemaVersion": 39, - "version": 1, - "editable": true, - "refresh": "30s", - "time": { - "from": "now-24h", - "to": "now" - }, - "fiscalYearStartMonth": 0, - "liveNow": false, - "weekStart": "", - "templating": { - "list": [ - { - "name": "interval", - "type": "interval", - "query": "1m,5m,15m,30m,1h", - "current": { - "selected": true, - "text": "5m", - "value": "5m" - }, - "auto": false - } - ] - }, - "panels": [ - { - "id": 1, - "type": "row", - "title": "Pipeline Overview", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "collapsed": false, - "panels": [] - }, - { - "id": 2, - "type": "stat", - "title": "Pipeline Creation Rate", - "description": "Pipelines created per second (averaged over $interval)", - "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 1 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "green", - "value": 0.01 - } - ] - }, - "mappings": [], - "color": { - "mode": "thresholds" - } - }, - "overrides": [] - }, - "options": { - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "orientation": "auto", - "textMode": "auto", - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto" - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(gitlab_ci_pipeline_processing_events_total[$interval]))", - "legendFormat": "pipelines/s", - "instant": true - } - ] - }, - { - "id": 3, - "type": "stat", - "title": "CI Jobs (1h)", - "description": "Number of CI job observations in the last hour", - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 1 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "unit": "short", - "decimals": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "green", - "value": 1 - } - ] - }, - "noValue": "Idle", - "mappings": [], - "color": { - "mode": "thresholds" - } - }, - "overrides": [] - }, - "options": { - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "orientation": "auto", - "textMode": "auto", - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto" - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(increase(gitlab_ci_pipeline_processing_events_total[1h]))", - "legendFormat": "jobs", - "instant": true - } - ] - }, - { - "id": 4, - "type": "stat", - "title": "Pipeline Failure Rate", - "description": "Pipeline failures per second (averaged over $interval)", - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 1 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 0.001 - }, - { - "color": "red", - "value": 0.01 - } - ] - }, - "mappings": [], - "color": { - "mode": "thresholds" - } - }, - "overrides": [] - }, - "options": { - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "orientation": "auto", - "textMode": "auto", - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto" - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(gitlab_ci_pipeline_failure_reasons[$interval]))", - "legendFormat": "failures/s", - "instant": true - } - ] - }, - { - "id": 5, - "type": "stat", - "title": "Queue Operations Rate", - "description": "CI queue operations per second (averaged over $interval)", - "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 1 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "blue", - "value": null - }, - { - "color": "green", - "value": 0.01 - } - ] - }, - "mappings": [], - "color": { - "mode": "thresholds" - } - }, - "overrides": [] - }, - "options": { - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "orientation": "auto", - "textMode": "auto", - "colorMode": "background", - "graphMode": "area", - "justifyMode": "auto" - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(gitlab_ci_queue_operations_total[$interval]))", - "legendFormat": "queue ops/s", - "instant": true - } - ] - }, - { - "id": 10, - "type": "row", - "title": "Pipeline Performance", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 7 - }, - "collapsed": false, - "panels": [] - }, - { - "id": 11, - "type": "timeseries", - "title": "Pipeline Creation Duration", - "description": "Time to create a pipeline (P50, P90, P99)", - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 8 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 10, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 2 - }, - "unit": "s", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [] - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "P99" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "P90" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "orange", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "P50" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "green", - "mode": "fixed" - } - } - ] - } - ] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": [ - "mean", - "max", - "lastNotNull" - ] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "histogram_quantile(0.50, sum(rate(gitlab_ci_pipeline_creation_duration_seconds_bucket[$interval])) by (le))", - "legendFormat": "P50" - }, - { - "refId": "B", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "histogram_quantile(0.90, sum(rate(gitlab_ci_pipeline_creation_duration_seconds_bucket[$interval])) by (le))", - "legendFormat": "P90" - }, - { - "refId": "C", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "histogram_quantile(0.99, sum(rate(gitlab_ci_pipeline_creation_duration_seconds_bucket[$interval])) by (le))", - "legendFormat": "P99" - } - ] - }, - { - "id": 12, - "type": "timeseries", - "title": "Pipeline Size (Builds per Pipeline)", - "description": "Number of builds/jobs per pipeline (P50, P90, P99)", - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 8 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 10, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 2 - }, - "unit": "short", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [] - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "P99" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "P90" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "orange", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "P50" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "semi-dark-blue", - "mode": "fixed" - } - } - ] - } - ] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": [ - "mean", - "max", - "lastNotNull" - ] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "histogram_quantile(0.50, sum(rate(gitlab_ci_pipeline_size_builds_bucket[$interval])) by (le))", - "legendFormat": "P50" - }, - { - "refId": "B", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "histogram_quantile(0.90, sum(rate(gitlab_ci_pipeline_size_builds_bucket[$interval])) by (le))", - "legendFormat": "P90" - }, - { - "refId": "C", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "histogram_quantile(0.99, sum(rate(gitlab_ci_pipeline_size_builds_bucket[$interval])) by (le))", - "legendFormat": "P99" - } - ] - }, - { - "id": 13, - "type": "heatmap", - "title": "Active Jobs Distribution", - "description": "Heatmap of active CI job counts over time", - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 8 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "scaleDistribution": { - "type": "linear" - } - } - }, - "overrides": [] - }, - "options": { - "calculate": false, - "yAxis": { - "axisPlacement": "left", - "unit": "short" - }, - "rowsFrame": { - "layout": "auto" - }, - "color": { - "mode": "scheme", - "scheme": "Oranges", - "fill": "dark", - "scale": "exponential", - "exponent": 0.5, - "steps": 64 - }, - "cellGap": 1, - "filterValues": { - "le": 1e-09 - }, - "tooltip": { - "show": true, - "yHistogram": true - }, - "legend": { - "show": true - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(increase(gitlab_ci_active_jobs_bucket[$interval])) by (le)", - "legendFormat": "{{le}}", - "format": "heatmap" - } - ] - }, - { - "id": 20, - "type": "row", - "title": "Failure Analysis", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 16 - }, - "collapsed": false, - "panels": [] - }, - { - "id": 21, - "type": "table", - "title": "Pipeline Failure Reasons", - "description": "Breakdown of pipeline failure reasons over the selected time range", - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 17 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "unit": "short", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "red", - "value": 20 - } - ] - }, - "mappings": [], - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "color-background", - "mode": "basic" - }, - "filterable": true - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Reason" - }, - "properties": [ - { - "id": "custom.width", - "value": 200 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Time" - }, - "properties": [ - { - "id": "custom.hidden", - "value": true - } - ] - } - ] - }, - "options": { - "showHeader": true, - "sortBy": [ - { - "displayName": "Value", - "desc": true - } - ], - "footer": { - "show": true, - "reducer": [ - "sum" - ], - "countRows": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": {}, - "sort": [ - { - "field": "Value", - "desc": true - } - ] - } - } - ], - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum by (reason) (increase(gitlab_ci_pipeline_failure_reasons[$__range]))", - "legendFormat": "{{reason}}", - "instant": true, - "format": "table" - } - ] - }, - { - "id": 22, - "type": "table", - "title": "Job Failure Reasons", - "description": "Breakdown of individual job failure reasons over the selected time range", - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 17 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "unit": "short", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "red", - "value": 20 - } - ] - }, - "mappings": [], - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "color-background", - "mode": "basic" - }, - "filterable": true - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Failure Reason" - }, - "properties": [ - { - "id": "custom.width", - "value": 200 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Time" - }, - "properties": [ - { - "id": "custom.hidden", - "value": true - } - ] - } - ] - }, - "options": { - "showHeader": true, - "sortBy": [ - { - "displayName": "Value", - "desc": true - } - ], - "footer": { - "show": true, - "reducer": [ - "sum" - ], - "countRows": false - } - }, - "transformations": [ - { - "id": "sortBy", - "options": { - "fields": {}, - "sort": [ - { - "field": "Value", - "desc": true - } - ] - } - } - ], - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum by (failure_reason) (increase(gitlab_ci_job_failure_reasons[$__range]))", - "legendFormat": "{{failure_reason}}", - "instant": true, - "format": "table" - } - ] - }, - { - "id": 23, - "type": "timeseries", - "title": "Build Trace Errors", - "description": "Rate of build trace errors over time", - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 17 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 20, - "gradientMode": "scheme", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 2 - }, - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 0.1 - } - ] - }, - "color": { - "fixedColor": "red", - "mode": "fixed" - }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": [ - "mean", - "max", - "sum" - ] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(gitlab_ci_build_trace_errors_total[$interval]))", - "legendFormat": "trace errors/s" - } - ] - }, - { - "id": 30, - "type": "row", - "title": "Runner Performance", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 25 - }, - "collapsed": false, - "panels": [] - }, - { - "id": 31, - "type": "timeseries", - "title": "Runner Authentication Success", - "description": "Rate of successful runner authentication attempts", - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 26 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 15, - "gradientMode": "scheme", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 2 - }, - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "color": { - "fixedColor": "green", - "mode": "fixed" - }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": [ - "mean", - "max", - "sum" - ] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(gitlab_ci_runner_authentication_success_total[$interval]))", - "legendFormat": "auth success/s" - } - ] - }, - { - "id": 32, - "type": "timeseries", - "title": "Trace Operations & Volume", - "description": "CI trace operations rate and data volume", - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 26 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 10, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 2 - }, - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [] - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "trace bytes/s" - }, - "properties": [ - { - "id": "custom.axisPlacement", - "value": "right" - }, - { - "id": "unit", - "value": "Bps" - } - ] - } - ] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": [ - "mean", - "max" - ] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(gitlab_ci_trace_operations_total[$interval]))", - "legendFormat": "trace ops/s" - }, - { - "refId": "B", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(gitlab_ci_trace_bytes_total[$interval]))", - "legendFormat": "trace bytes/s" - } - ] - }, - { - "id": 33, - "type": "timeseries", - "title": "Artifacts Cleanup", - "description": "Rate and volume of destroyed job artifacts", - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 26 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "bars", - "lineInterpolation": "smooth", - "fillOpacity": 60, - "gradientMode": "scheme", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 0, - "barAlignment": 0 - }, - "unit": "ops", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [] - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "bytes destroyed/s" - }, - "properties": [ - { - "id": "custom.axisPlacement", - "value": "right" - }, - { - "id": "unit", - "value": "Bps" - }, - { - "id": "custom.drawStyle", - "value": "line" - }, - { - "id": "custom.fillOpacity", - "value": 0 - }, - { - "id": "custom.lineWidth", - "value": 2 - } - ] - } - ] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": [ - "mean", - "sum" - ] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(destroyed_job_artifacts_count_total[$interval]))", - "legendFormat": "artifacts destroyed/s" - }, - { - "refId": "B", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum(rate(destroyed_job_artifacts_bytes_total[$interval]))", - "legendFormat": "bytes destroyed/s" - } - ] - }, - { - "id": 40, - "type": "row", - "title": "K8s Training Jobs", - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 34 - }, - "collapsed": false, - "panels": [] - }, - { - "id": 41, - "type": "timeseries", - "title": "Training Jobs: Created vs Completed vs Failed", - "description": "K8s training job lifecycle in the foxhunt namespace", - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 35 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "stepAfter", - "fillOpacity": 15, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 2 - }, - "unit": "short", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [] - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Created" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "blue", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Succeeded" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "green", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Failed" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - } - ] - } - ] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": [ - "lastNotNull", - "max" - ] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "count(kube_job_info{namespace=\"foxhunt\", job_name=~\".*train.*\"})", - "legendFormat": "Created" - }, - { - "refId": "B", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "count(kube_job_status_succeeded{namespace=\"foxhunt\", job_name=~\".*train.*\"} == 1)", - "legendFormat": "Succeeded" - }, - { - "refId": "C", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "count(kube_job_status_failed{namespace=\"foxhunt\", job_name=~\".*train.*\"} > 0)", - "legendFormat": "Failed" - } - ] - }, - { - "id": 42, - "type": "timeseries", - "title": "Training Job Duration", - "description": "Age of active training jobs (time since creation)", - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 35 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 10, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "none", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 2 - }, - "unit": "s", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 3600 - }, - { - "color": "red", - "value": 14400 - } - ] - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "table", - "placement": "bottom", - "calcs": [ - "mean", - "max", - "lastNotNull" - ] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "time() - kube_job_created{namespace=\"foxhunt\", job_name=~\".*train.*\"} and on(job_name, namespace) kube_job_status_succeeded{namespace=\"foxhunt\"} == 0 and on(job_name, namespace) (kube_job_status_failed{namespace=\"foxhunt\"} == 0 or absent(kube_job_status_failed{namespace=\"foxhunt\"}))", - "legendFormat": "{{job_name}}" - } - ] - }, - { - "id": 43, - "type": "timeseries", - "title": "Training Pod CPU Usage", - "description": "CPU usage of training pods in the foxhunt namespace", - "gridPos": { - "h": 8, - "w": 4, - "x": 16, - "y": 35 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 20, - "gradientMode": "scheme", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "normal", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "short", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "list", - "placement": "bottom", - "calcs": [] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum by (pod) (rate(container_cpu_usage_seconds_total{namespace=\"foxhunt\", pod=~\".*train.*\", container!=\"POD\", container!=\"\"}[$interval]))", - "legendFormat": "{{pod}}" - } - ] - }, - { - "id": 44, - "type": "timeseries", - "title": "Training Pod Memory", - "description": "Memory working set of training pods in the foxhunt namespace", - "gridPos": { - "h": 8, - "w": 4, - "x": 20, - "y": 35 - }, - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 20, - "gradientMode": "scheme", - "spanNulls": false, - "showPoints": "never", - "stacking": { - "mode": "normal", - "group": "A" - }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "bytes", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "color": { - "mode": "palette-classic" - }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { - "mode": "multi", - "sort": "desc" - }, - "legend": { - "displayMode": "list", - "placement": "bottom", - "calcs": [] - } - }, - "targets": [ - { - "refId": "A", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "expr": "sum by (pod) (container_memory_working_set_bytes{namespace=\"foxhunt\", pod=~\".*train.*\", container!=\"POD\", container!=\"\"})", - "legendFormat": "{{pod}}" - } - ] - } - ] -} diff --git a/infra/k8s/monitoring/dashboards/gitlab-services.json b/infra/k8s/monitoring/dashboards/gitlab-services.json deleted file mode 100644 index 7f2762bc5..000000000 --- a/infra/k8s/monitoring/dashboards/gitlab-services.json +++ /dev/null @@ -1,587 +0,0 @@ -{ - "__inputs": [ - { "name": "DS_PROMETHEUS", "label": "Prometheus", "description": "", "type": "datasource", "pluginId": "prometheus" } - ], - "id": null, - "uid": "foxhunt-gitlab-services", - "title": "GitLab + Foxhunt Services", - "description": "GitLab internals (Puma, Sidekiq, Gitaly) and Foxhunt microservice health", - "tags": ["gitlab", "foxhunt", "services", "kubernetes"], - "timezone": "browser", - "schemaVersion": 39, - "version": 1, - "refresh": "30s", - "time": { - "from": "now-1h", - "to": "now" - }, - "fiscalYearStartMonth": 0, - "liveNow": false, - "weekStart": "", - "templating": { - "list": [ - { - "name": "namespace", - "type": "query", - "datasource": { - "type": "prometheus", - "uid": "${DS_PROMETHEUS}" - }, - "query": "label_values(kube_pod_info, namespace)", - "refresh": 2, - "includeAll": true, - "multi": true, - "allValue": ".*", - "current": { - "selected": true, - "text": "All", - "value": "$__all" - }, - "sort": 1 - } - ] - }, - "panels": [ - { - "id": 1, - "type": "row", - "title": "GitLab - Puma", - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, - "collapsed": false, - "panels": [] - }, - { - "id": 2, - "type": "timeseries", - "title": "Puma HTTP Request Rate", - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 1 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 15, - "gradientMode": "scheme", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "none", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "reqps", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["mean", "max"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(http_requests_total{job=~\".*puma.*\"}[5m])) by (method)", - "legendFormat": "{{ method }}" - } - ] - }, - { - "id": 3, - "type": "timeseries", - "title": "Puma Request Duration (p95)", - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 1 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 10, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "none", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "s", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["mean", "max"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job=~\".*puma.*\"}[5m])) by (le))", - "legendFormat": "p95" - }, - { - "refId": "B", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "histogram_quantile(0.50, sum(rate(http_request_duration_seconds_bucket{job=~\".*puma.*\"}[5m])) by (le))", - "legendFormat": "p50" - } - ] - }, - { - "id": 10, - "type": "row", - "title": "GitLab - Sidekiq", - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, - "collapsed": false, - "panels": [] - }, - { - "id": 11, - "type": "timeseries", - "title": "Sidekiq Job Processing Rate", - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 10 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 15, - "gradientMode": "scheme", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "none", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "ops", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["mean", "max"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(sidekiq_jobs_processed_total[5m]))", - "legendFormat": "Processed" - }, - { - "refId": "B", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(sidekiq_jobs_failed_total[5m]))", - "legendFormat": "Failed" - } - ] - }, - { - "id": 12, - "type": "stat", - "title": "Sidekiq Queue Size", - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 10 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "thresholds": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "yellow", "value": 100 }, - { "color": "red", "value": 500 } - ] - }, - "mappings": [], - "color": { "mode": "thresholds" } - }, - "overrides": [] - }, - "options": { - "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, - "orientation": "auto", - "textMode": "auto", - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto" - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(sidekiq_queue_size)", - "legendFormat": "Queue Size", - "instant": true - } - ] - }, - { - "id": 20, - "type": "row", - "title": "GitLab - Gitaly", - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 }, - "collapsed": false, - "panels": [] - }, - { - "id": 21, - "type": "timeseries", - "title": "Gitaly RPC Latency (p95)", - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 19 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 10, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "none", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "s", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["mean", "max"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "histogram_quantile(0.95, sum(rate(grpc_server_handling_seconds_bucket{job=~\".*gitaly.*\"}[5m])) by (le, grpc_method))", - "legendFormat": "{{ grpc_method }}" - } - ] - }, - { - "id": 22, - "type": "timeseries", - "title": "Gitaly RPC Rate", - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 19 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 15, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "normal", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "reqps", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["mean", "max"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum(rate(grpc_server_handled_total{job=~\".*gitaly.*\"}[5m])) by (grpc_code)", - "legendFormat": "{{ grpc_code }}" - } - ] - }, - { - "id": 30, - "type": "row", - "title": "Foxhunt Services - Resource Usage", - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 }, - "collapsed": false, - "panels": [] - }, - { - "id": 31, - "type": "timeseries", - "title": "Container CPU Usage by Service", - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 28 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 15, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "none", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "short", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["mean", "max"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum by (container) (rate(container_cpu_usage_seconds_total{namespace=~\"$namespace\", container=~\"web-gateway|api-gateway|trading-service|ml-training-service|backtesting-service|data-acquisition-service|broker-gateway-service|trading-agent-service\", image!=\"\"}[5m]))", - "legendFormat": "{{ container }}" - } - ] - }, - { - "id": 32, - "type": "timeseries", - "title": "Container Memory Usage by Service", - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 28 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "smooth", - "fillOpacity": 15, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "none", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "bytes", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["mean", "max"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum by (container) (container_memory_working_set_bytes{namespace=~\"$namespace\", container=~\"web-gateway|api-gateway|trading-service|ml-training-service|backtesting-service|data-acquisition-service|broker-gateway-service|trading-agent-service\", image!=\"\"})", - "legendFormat": "{{ container }}" - } - ] - }, - { - "id": 40, - "type": "row", - "title": "Foxhunt Services - Pod Health", - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 36 }, - "collapsed": false, - "panels": [] - }, - { - "id": 41, - "type": "timeseries", - "title": "Pod Restarts (by Container)", - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 37 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "bars", - "lineInterpolation": "linear", - "fillOpacity": 80, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "normal", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 1 - }, - "unit": "short", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["sum", "max"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "increase(kube_pod_container_status_restarts_total{namespace=~\"$namespace\"}[1h])", - "legendFormat": "{{ namespace }}/{{ pod }} ({{ container }})" - } - ] - }, - { - "id": 42, - "type": "table", - "title": "Pod Status by Namespace", - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 37 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "mappings": [], - "color": { "mode": "thresholds" } - }, - "overrides": [ - { - "matcher": { "id": "byName", "options": "Failed" }, - "properties": [ - { - "id": "thresholds", - "value": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "red", "value": 1 } - ] - } - }, - { "id": "custom.displayMode", "value": "color-background" } - ] - }, - { - "matcher": { "id": "byName", "options": "Pending" }, - "properties": [ - { - "id": "thresholds", - "value": { - "mode": "absolute", - "steps": [ - { "color": "green", "value": null }, - { "color": "yellow", "value": 1 } - ] - } - }, - { "id": "custom.displayMode", "value": "color-background" } - ] - } - ] - }, - "options": { - "showHeader": true, - "sortBy": [{ "displayName": "namespace", "desc": false }], - "footer": { "show": true, "reducer": ["sum"], "fields": "" } - }, - "transformations": [ - { - "id": "seriesToColumns", - "options": { "byField": "namespace" } - } - ], - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum by (namespace) (kube_pod_status_phase{namespace=~\"$namespace\", phase=\"Running\"})", - "legendFormat": "Running", - "instant": true, - "format": "table" - }, - { - "refId": "B", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum by (namespace) (kube_pod_status_phase{namespace=~\"$namespace\", phase=\"Pending\"})", - "legendFormat": "Pending", - "instant": true, - "format": "table" - }, - { - "refId": "C", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "sum by (namespace) (kube_pod_status_phase{namespace=~\"$namespace\", phase=\"Failed\"})", - "legendFormat": "Failed", - "instant": true, - "format": "table" - } - ] - }, - { - "id": 50, - "type": "row", - "title": "Kubernetes - Deployments", - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 45 }, - "collapsed": false, - "panels": [] - }, - { - "id": 51, - "type": "timeseries", - "title": "Deployment Replicas: Desired vs Available", - "gridPos": { "h": 8, "w": 24, "x": 0, "y": 46 }, - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "fieldConfig": { - "defaults": { - "custom": { - "drawStyle": "line", - "lineInterpolation": "stepAfter", - "fillOpacity": 0, - "gradientMode": "none", - "spanNulls": false, - "showPoints": "never", - "stacking": { "mode": "none", "group": "A" }, - "axisPlacement": "auto", - "lineWidth": 2 - }, - "unit": "short", - "thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }, - "color": { "mode": "palette-classic" }, - "mappings": [] - }, - "overrides": [] - }, - "options": { - "tooltip": { "mode": "multi", "sort": "desc" }, - "legend": { "displayMode": "table", "placement": "bottom", "calcs": ["last"] } - }, - "targets": [ - { - "refId": "A", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_deployment_spec_replicas{namespace=~\"$namespace\"}", - "legendFormat": "{{ deployment }} desired" - }, - { - "refId": "B", - "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, - "expr": "kube_deployment_status_replicas_available{namespace=~\"$namespace\"}", - "legendFormat": "{{ deployment }} available" - } - ] - } - ] -} \ No newline at end of file diff --git a/infra/k8s/monitoring/dashboards/import.sh b/infra/k8s/monitoring/dashboards/import.sh index 90469b126..1f64d877f 100755 --- a/infra/k8s/monitoring/dashboards/import.sh +++ b/infra/k8s/monitoring/dashboards/import.sh @@ -126,7 +126,6 @@ declare -A CONFIGMAP_GROUPS=( [grafana-dashboards-cockpits]="foxhunt-cockpit.json foxhunt-trading-cockpit.json foxhunt-training-cockpit.json" [grafana-dashboards-operations]="foxhunt-overview.json foxhunt-services.json foxhunt-traces.json foxhunt-logs.json" [grafana-dashboards-infra]="cluster-overview.json gpu-overview.json foxhunt-infrastructure.json foxhunt-gpu-training.json" - [grafana-dashboards-cicd]="foxhunt-ci-pipelines.json gitlab-services.json" ) # Folder mapping: ConfigMap name -> Grafana folder name (used by sidecar annotation) @@ -134,7 +133,6 @@ declare -A CONFIGMAP_FOLDERS=( [grafana-dashboards-cockpits]="Cockpits" [grafana-dashboards-operations]="Operations" [grafana-dashboards-infra]="Infrastructure" - [grafana-dashboards-cicd]="CI-CD" ) deploy_configmaps() { @@ -225,13 +223,11 @@ else for dashboard in "${SCRIPT_DIR}/cluster-overview.json" \ "${SCRIPT_DIR}/gpu-overview.json" \ - "${SCRIPT_DIR}/gitlab-services.json" \ "${SCRIPT_DIR}/foxhunt-overview.json" \ "${SCRIPT_DIR}/foxhunt-services.json" \ "${SCRIPT_DIR}/foxhunt-gpu-training.json" \ "${SCRIPT_DIR}/foxhunt-infrastructure.json" \ "${SCRIPT_DIR}/foxhunt-logs.json" \ - "${SCRIPT_DIR}/foxhunt-ci-pipelines.json" \ "${SCRIPT_DIR}/foxhunt-cockpit.json" \ "${SCRIPT_DIR}/foxhunt-trading-cockpit.json" \ "${SCRIPT_DIR}/foxhunt-training-cockpit.json" \ diff --git a/infra/live/production/cockpit/terragrunt.hcl b/infra/live/production/cockpit/terragrunt.hcl deleted file mode 100644 index c2ad92758..000000000 --- a/infra/live/production/cockpit/terragrunt.hcl +++ /dev/null @@ -1,9 +0,0 @@ -include "root" { - path = find_in_parent_folders("root.hcl") -} - -terraform { - source = "../../../modules/cockpit" -} - -inputs = {} diff --git a/infra/modules/cockpit/main.tf b/infra/modules/cockpit/main.tf deleted file mode 100644 index 4298899f1..000000000 --- a/infra/modules/cockpit/main.tf +++ /dev/null @@ -1,28 +0,0 @@ -# Custom metrics data source for K8s data plane -# retention_days: 31 = free tier (Scaleway data), higher = paid -resource "scaleway_cockpit_source" "k8s_metrics" { - project_id = var.project_id - name = "kapsule-data-plane" - type = "metrics" - retention_days = var.metrics_retention_days -} - -# Push token for Grafana Alloy + Prometheus remote_write -resource "scaleway_cockpit_token" "k8s_push" { - project_id = var.project_id - name = "kapsule-push-token" - - scopes { - query_metrics = true - write_metrics = true - query_logs = true - write_logs = true - } -} - -# Grafana user for dashboard access -resource "scaleway_cockpit_grafana_user" "admin" { - project_id = var.project_id - login = var.grafana_login - role = var.grafana_role -} diff --git a/infra/modules/cockpit/outputs.tf b/infra/modules/cockpit/outputs.tf deleted file mode 100644 index 5fa2f6c22..000000000 --- a/infra/modules/cockpit/outputs.tf +++ /dev/null @@ -1,21 +0,0 @@ -output "metrics_push_url" { - description = "Cockpit Mimir remote_write URL for Alloy/Prometheus" - value = scaleway_cockpit_source.k8s_metrics.push_url -} - -output "push_token" { - description = "Token for authenticating remote_write requests" - value = scaleway_cockpit_token.k8s_push.secret_key - sensitive = true -} - -output "grafana_url" { - description = "Cockpit Grafana dashboard URL" - value = scaleway_cockpit_grafana_user.admin.grafana_url -} - -output "grafana_password" { - description = "Generated password for the Grafana user" - value = scaleway_cockpit_grafana_user.admin.password - sensitive = true -} diff --git a/infra/modules/cockpit/variables.tf b/infra/modules/cockpit/variables.tf deleted file mode 100644 index a0dfc9798..000000000 --- a/infra/modules/cockpit/variables.tf +++ /dev/null @@ -1,22 +0,0 @@ -variable "project_id" { - description = "Scaleway project ID" - type = string -} - -variable "grafana_login" { - description = "Login for Cockpit Grafana admin user" - type = string - default = "foxhunt-admin" -} - -variable "grafana_role" { - description = "Role for the Cockpit Grafana user (editor or viewer)" - type = string - default = "editor" -} - -variable "metrics_retention_days" { - description = "Retention period for custom metrics in days (31 = free tier)" - type = number - default = 31 -} diff --git a/services/broker_gateway_service/grafana/dashboard.json b/services/broker_gateway_service/grafana/dashboard.json deleted file mode 100644 index 82968277b..000000000 --- a/services/broker_gateway_service/grafana/dashboard.json +++ /dev/null @@ -1,791 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 1, - "id": null, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "Order submission rate per second (1m average)", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Orders/sec", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 20, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "ops" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "legend": { - "calcs": [ - "last", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "rate(broker_gateway_orders_submitted_total[1m])", - "legendFormat": "{{symbol}} {{order_type}} {{side}}", - "range": true, - "refId": "A" - } - ], - "title": "Panel 1: Order Submission Rate (1m)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "Order routing latency percentiles (P50, P95, P99)", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Latency (ms)", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "line" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 50 - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "ms" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "P99" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "P95" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "orange", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "P50" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "green", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "legend": { - "calcs": [ - "last", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "histogram_quantile(0.50, sum by(le, order_type) (rate(broker_gateway_order_latency_seconds_bucket[5m]))) * 1000", - "legendFormat": "P50 - {{order_type}}", - "range": true, - "refId": "P50" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "histogram_quantile(0.95, sum by(le, order_type) (rate(broker_gateway_order_latency_seconds_bucket[5m]))) * 1000", - "legendFormat": "P95 - {{order_type}}", - "range": true, - "refId": "P95" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "histogram_quantile(0.99, sum by(le, order_type) (rate(broker_gateway_order_latency_seconds_bucket[5m]))) * 1000", - "legendFormat": "P99 - {{order_type}}", - "range": true, - "refId": "P99" - } - ], - "title": "Panel 2: Order Latency (P50, P95, P99)", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "FIX session connection status (green=connected, red=disconnected, yellow=reconnecting)", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "index": 0, - "text": "DISCONNECTED" - }, - "1": { - "color": "green", - "index": 1, - "text": "CONNECTED" - }, - "2": { - "color": "yellow", - "index": 2, - "text": "RECONNECTING" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "green", - "value": 2 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 0, - "y": 8 - }, - "id": 3, - "options": { - "orientation": "auto", - "reduceOptions": { - "values": false, - "calcs": [ - "lastNotNull" - ], - "fields": "" - }, - "showThresholdLabels": false, - "showThresholdMarkers": true - }, - "pluginVersion": "10.0.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "broker_gateway_fix_session_status", - "legendFormat": "{{session_id}}", - "range": true, - "refId": "A" - } - ], - "title": "Panel 3: FIX Session Status", - "type": "gauge" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "Position value trend by symbol over time", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": true, - "axisColorMode": "text", - "axisLabel": "Position Value (USD)", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 15, - "gradientMode": "opacity", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "smooth", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "currencyUSD" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 16, - "x": 8, - "y": 8 - }, - "id": 4, - "options": { - "legend": { - "calcs": [ - "last", - "max", - "min" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "broker_gateway_position_value_usd", - "legendFormat": "{{symbol}} - {{account_id}}", - "range": true, - "refId": "A" - } - ], - "title": "Panel 4: Position Value Trend", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "Error rate by type (stacked bar chart)", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "Errors/min", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 80, - "gradientMode": "none", - "hideFrom": { - "tooltip": false, - "viz": false, - "legend": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 5 - } - ] - }, - "unit": "ops" - }, - "overrides": [ - { - "matcher": { - "id": "byFrameRefID", - "options": "CRITICAL" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "dark-red", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byFrameRefID", - "options": "ERROR" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byFrameRefID", - "options": "WARNING" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "yellow", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 16 - }, - "id": 5, - "options": { - "legend": { - "calcs": [ - "sum" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "rate(broker_gateway_error_total{severity=\"CRITICAL\"}[1m])", - "legendFormat": "CRITICAL - {{error_type}}", - "range": true, - "refId": "CRITICAL" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "rate(broker_gateway_error_total{severity=\"ERROR\"}[1m])", - "legendFormat": "ERROR - {{error_type}}", - "range": true, - "refId": "ERROR" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "rate(broker_gateway_error_total{severity=\"WARNING\"}[1m])", - "legendFormat": "WARNING - {{error_type}}", - "range": true, - "refId": "WARNING" - } - ], - "title": "Panel 5: Error Rate by Type", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "description": "Top 10 slowest operations by average latency", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "custom": { - "align": "auto", - "cellOptions": { - "type": "auto" - }, - "inspect": false - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 50 - }, - { - "color": "red", - "value": 100 - } - ] - }, - "unit": "ms" - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Order Type" - }, - "properties": [ - { - "id": "custom.width", - "value": 150 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Avg Latency (ms)" - }, - "properties": [ - { - "id": "custom.width", - "value": 180 - }, - { - "id": "custom.cellOptions", - "value": { - "type": "color-background" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 16 - }, - "id": 6, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [ - { - "desc": true, - "displayName": "Avg Latency (ms)" - } - ] - }, - "pluginVersion": "10.0.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "editorMode": "code", - "expr": "topk(10, \n (sum by(order_type) (rate(broker_gateway_order_latency_seconds_sum[5m])) \n / \n sum by(order_type) (rate(broker_gateway_order_latency_seconds_count[5m]))) \n * 1000\n)", - "format": "table", - "instant": true, - "legendFormat": "__auto", - "range": false, - "refId": "A" - } - ], - "title": "Panel 6: Top 10 Slowest Operations", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": true - }, - "indexByName": { - "Time": 0, - "Value": 2, - "order_type": 1 - }, - "renameByName": { - "Value": "Avg Latency (ms)", - "order_type": "Order Type" - } - } - } - ], - "type": "table" - } - ], - "refresh": "10s", - "schemaVersion": 38, - "style": "dark", - "tags": [ - "broker_gateway", - "trading", - "fix", - "orders" - ], - "templating": { - "list": [] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Broker Gateway Service - Order Routing & FIX Protocol", - "uid": "broker_gateway_dashboard", - "version": 1, - "weekStart": "" -} diff --git a/services/broker_gateway_service/grafana/dashboards/broker_gateway_overview.json b/services/broker_gateway_service/grafana/dashboards/broker_gateway_overview.json deleted file mode 100644 index 579c8382a..000000000 --- a/services/broker_gateway_service/grafana/dashboards/broker_gateway_overview.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "dashboard": { - "title": "Broker Gateway Service - Overview", - "tags": ["foxhunt", "broker", "gateway"], - "timezone": "browser", - "panels": [ - { - "title": "Order Submission Rate", - "type": "graph", - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 }, - "targets": [ - { - "expr": "rate(broker_gateway_orders_submitted_total[5m])", - "legendFormat": "Orders/sec" - } - ] - }, - { - "title": "Order Fill Rate", - "type": "graph", - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 }, - "targets": [ - { - "expr": "rate(broker_gateway_orders_filled_total[5m])", - "legendFormat": "Fills/sec" - } - ] - }, - { - "title": "FIX Message Latency", - "type": "graph", - "gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 }, - "targets": [ - { - "expr": "histogram_quantile(0.99, rate(broker_gateway_fix_latency_bucket[5m]))", - "legendFormat": "P99" - }, - { - "expr": "histogram_quantile(0.95, rate(broker_gateway_fix_latency_bucket[5m]))", - "legendFormat": "P95" - }, - { - "expr": "histogram_quantile(0.50, rate(broker_gateway_fix_latency_bucket[5m]))", - "legendFormat": "P50" - } - ] - }, - { - "title": "Database Connection Pool", - "type": "graph", - "gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 }, - "targets": [ - { - "expr": "broker_gateway_db_pool_connections", - "legendFormat": "Active" - }, - { - "expr": "broker_gateway_db_pool_idle_connections", - "legendFormat": "Idle" - } - ] - } - ], - "refresh": "10s", - "schemaVersion": 16, - "version": 1 - } -} diff --git a/services/broker_gateway_service/grafana/provisioning/dashboards/dashboards.yml b/services/broker_gateway_service/grafana/provisioning/dashboards/dashboards.yml deleted file mode 100644 index e91509fbf..000000000 --- a/services/broker_gateway_service/grafana/provisioning/dashboards/dashboards.yml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: 1 - -providers: - - name: 'Broker Gateway Dashboards' - orgId: 1 - folder: 'Foxhunt' - type: file - disableDeletion: false - updateIntervalSeconds: 10 - allowUiUpdates: true - options: - path: /var/lib/grafana/dashboards diff --git a/services/broker_gateway_service/grafana/provisioning/datasources/prometheus.yml b/services/broker_gateway_service/grafana/provisioning/datasources/prometheus.yml deleted file mode 100644 index 1ba599817..000000000 --- a/services/broker_gateway_service/grafana/provisioning/datasources/prometheus.yml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: 1 - -datasources: - - name: Prometheus - type: prometheus - access: proxy - url: http://prometheus:9090 - isDefault: true - editable: false - jsonData: - timeInterval: "15s" - queryTimeout: "60s" - httpMethod: "POST"