diff --git a/testserver/docker_grafana/tasks/main.yml b/testserver/docker_grafana/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..819188dcdde045e927e5efc3a5cd96401717f7d1 --- /dev/null +++ b/testserver/docker_grafana/tasks/main.yml @@ -0,0 +1,52 @@ + + +- include_tasks: ../functions/get_secret.yml + with_items: + - { path: "{{ basedir }}/grafana_admin_pass", length: 12 } + - { path: "/srv/mqtt/influxdb_token", length: -1 } + +- name: create folder struct for grafana + file: + path: "{{ item }}" + state: "directory" + with_items: + - "{{ basedir }}" + - "{{ basedir }}/data/" + - "{{ basedir }}/provisioning/" + - "{{ basedir }}/provisioning/dashboards/" + - "{{ basedir }}/provisioning/dashboards/pixelflut/" + - "{{ basedir }}/provisioning/datasources/" + +- name: create config filess + template: + src: "{{ item }}" + dest: "{{ basedir }}/{{ item }}" + with_items: + - docker-compose.yml + - grafana.ini + +- name: create dashboards + template: + src: "provisioning/dashboards/{{ item }}" + dest: "{{ basedir }}/provisioning/dashboards/{{ item }}" + with_items: + - dashboards.yml + +- name: create dashboards for pixelflut + template: + src: "provisioning/dashboards/pixelflut/{{ item }}" + dest: "{{ basedir }}/provisioning/dashboards/pixelflut/{{ item }}" + with_items: + - breakwater.json + +- name: create datasources + template: + src: "provisioning/datasources/{{ item }}" + dest: "{{ basedir }}/provisioning/datasources/{{ item }}" + with_items: + - datasources.yml + +- name: start grafana docker + community.docker.docker_compose_v2: + project_src: "{{ basedir }}" + state: present diff --git a/testserver/docker_grafana/templates/docker-compose.yml b/testserver/docker_grafana/templates/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..a79f6d21ed4fe70a7ff990b2e7b3f1474cdb6435 --- /dev/null +++ b/testserver/docker_grafana/templates/docker-compose.yml @@ -0,0 +1,25 @@ +services: + + app: + + image: grafana/grafana:latest + restart: always + volumes: + - "{{ basedir }}/grafana.ini:/etc/grafana/grafana.ini" + - "{{ basedir }}/provisioning/:/etc/grafana/provisioning/" + - "{{ basedir }}/data/:/var/lib/grafana" + environment: + GF_SERVER_ROOT_URL: "https://{{ domain }}" + GF_SECURITY_ADMIN_PASSWORD: "{{ grafana_admin_pass }}" + labels: + - traefik.enable=true + - traefik.http.routers.{{ servicename }}.rule=Host(`{{ domain }}`) + - traefik.http.routers.{{ servicename }}.entrypoints=websecure + - traefik.http.services.{{ servicename }}.loadbalancer.server.port=3000 + networks: + - default + - web + +networks: + web: + external: true diff --git a/testserver/docker_grafana/templates/grafana.ini b/testserver/docker_grafana/templates/grafana.ini new file mode 100644 index 0000000000000000000000000000000000000000..03f42535b405c59ff21f4a0010fd553bc031f5fd --- /dev/null +++ b/testserver/docker_grafana/templates/grafana.ini @@ -0,0 +1,144 @@ +##################### Grafana Configuration ################################## +# +# Everything has defaults so you only need to uncomment things you want to +# change + +# possible values : production, development +app_mode = production + +# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty +instance_name = {{ inventory_hostname }} + +# +#################################### Server #################################### +[server] +# Protocol (http, https, socket) +;protocol = http + +# The ip address to bind to, empty will bind to all interfaces +;http_addr = + +# The http port to use +;http_port = 3000 + +# The public facing domain name used to access grafana from a browser +;domain = localhost + +# Redirect to correct domain if host header does not match domain +# Prevents DNS rebinding attacks +;enforce_domain = false + +# The full public facing url you use in browser, used for redirects and emails +# If you use reverse proxy and sub path specify full url (with sub path) +;root_url = http://localhost:3000 + +# Log web requests +;router_logging = false + +# the path relative working path +;static_root_path = public + +# enable gzip +;enable_gzip = false + +# https certs & key file +;cert_file = +;cert_key = + +# Unix socket path +;socket = + + +#################################### Security #################################### +[security] +# default admin user, created on startup +;admin_user = admin + +# default admin password, can be changed before first start of grafana, or in profile settings +;admin_password = admin + +# used for signing +;secret_key = SW2YcwTIb9zpOOhoPsMm + +# Auto-login remember days +;login_remember_days = 7 +;cookie_username = grafana_user +;cookie_remember_name = grafana_remember + +# Set to true if you host Grafana behind HTTPS. Default is false. +cookie_secure = true + +# Sets the SameSite cookie attribute and prevents the browser from sending this +# cookie along with cross-site requests. The main goal is mitigate the risk of +# cross-origin information leakage. It also provides some protection against cross-site +# request forgery attacks (CSRF), read more here. Valid values are lax, strict and none. +# Default is lax. +cookie_samesite = none + +# disable gravatar profile images +;disable_gravatar = false + +# data source proxy whitelist (ip_or_domain:port separated by spaces) +;data_source_proxy_whitelist = + +# Allow Embedding +allow_embedding = true + +[snapshots] +# snapshot sharing options +;external_enabled = true +;external_snapshot_url = https://snapshots-origin.raintank.io +;external_snapshot_name = Publish to snapshot.raintank.io + +# remove expired snapshot +;snapshot_remove_expired = true + +# remove snapshots after 90 days +;snapshot_TTL_days = 90 + +#################################### Users #################################### +[users] +# disable user signup / registration +allow_sign_up = false + +# Allow non admin users to create organizations +allow_org_create = false + +# Set to true to automatically assign new users to the default organization (id 1) +auto_assign_org = true + +# Default role new users will be automatically assigned (if disabled above is set to true) +auto_assign_org_role = Viewer + +# Background text for the user field on the login page +login_hint = Fallback account + +# Default UI theme ("dark" or "light") +default_theme = dark + +[auth] +# Set to true to disable (hide) the login form, useful if you use OAuth, defaults to false +;disable_login_form = false +disable_login_form = false + +# Auto Login via OAuth +# oauth_auto_login = true + +# Set to true to disable the signout link in the side menu. useful if you use auth.proxy, defaults to false +;disable_signout_menu = false + +#################################### Anonymous Auth ########################## +[auth.anonymous] +# enable anonymous access +enabled = true + +# specify organization name that should be used for unauthenticated users +org_name = Main Org. + +#################################### Alerting ############################ +[alerting] +# Disable alerting engine & UI features +enabled = false +# Makes it possible to turn off alert rule execution but alerting UI is visible +execute_alerts = false + diff --git a/testserver/docker_grafana/templates/provisioning/dashboards/dashboards.yml b/testserver/docker_grafana/templates/provisioning/dashboards/dashboards.yml new file mode 100644 index 0000000000000000000000000000000000000000..45bfb06d0dd4bcfe6e17b08a33a5d1cc1477c6ac --- /dev/null +++ b/testserver/docker_grafana/templates/provisioning/dashboards/dashboards.yml @@ -0,0 +1,25 @@ +apiVersion: 1 + +providers: + # <string> an unique provider name +- name: 'Pixelflut' + # <int> org id. will default to orgId 1 if not specified + # orgId: 1 + # <string, required> name of the dashboard folder. Required + folder: 'Pixelflut' + # <string> folder UID. will be automatically generated if not specified + # folderUid: '' + # <string, required> provider type. Required + type: file + # <bool> disable dashboard deletion + # disableDeletion: false + # <bool> enable dashboard editing + editable: true + # <int> how often Grafana will scan for changed dashboards + updateIntervalSeconds: 10 + # <bool> allow updating provisioned dashboards from the UI + allowUiUpdates: true + options: + # <string, required> path to dashboard files on disk. Required + path: /etc/grafana/provisioning/dashboards/pixelflut + diff --git a/testserver/docker_grafana/templates/provisioning/dashboards/pixelflut/breakwater.json b/testserver/docker_grafana/templates/provisioning/dashboards/pixelflut/breakwater.json new file mode 100644 index 0000000000000000000000000000000000000000..5eebc771ff054207d86b699f7dc08ea4a5bab2c9 --- /dev/null +++ b/testserver/docker_grafana/templates/provisioning/dashboards/pixelflut/breakwater.json @@ -0,0 +1,1055 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 6, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 0 + }, + "id": 6, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "breakwater_ips", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Connected IPs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 0 + }, + "id": 7, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "sum(breakwater_connections) or vector(0)", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Connections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 25 + } + ] + }, + "unit": "FPS" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 0 + }, + "id": 15, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "breakwater_fps", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "FPS", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binbps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 12, + "y": 0 + }, + "id": 19, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "sum(rate(breakwater_bytes[1m])) * 8 or vector(0)", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Throughput", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 15, + "y": 0 + }, + "id": 9, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "sum(breakwater_bytes) or vector(0)", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Traffic", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 18, + "y": 0 + }, + "id": 16, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "sum(rate(breakwater_pixels[1m])) * 8 or vector(0)", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Pixels / s", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 21, + "y": 0 + }, + "id": 17, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "sum(breakwater_pixels) or vector(0)", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Pixels", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "IPv4" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "All" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 5 + }, + "id": 13, + "options": { + "legend": { + "calcs": [ + "last", + "max" + ], + "displayMode": "table", + "placement": "right" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "breakwater_ips", + "interval": "", + "legendFormat": "All", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "breakwater_legacy_ips", + "hide": false, + "interval": "", + "legendFormat": "IPv4", + "refId": "B" + } + ], + "title": "Connected IPs", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": 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": 80 + } + ] + }, + "unit": "bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 5 + }, + "id": 14, + "interval": "1m", + "options": { + "legend": { + "calcs": [ + "last", + "max" + ], + "displayMode": "table", + "placement": "right", + "sortBy": "Last", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "rate(breakwater_bytes[$__interval]) * 8", + "interval": "", + "legendFormat": "pixelflut.warpzone.lan", + "refId": "A" + } + ], + "title": "Traffic / IP", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 13 + }, + "id": 11, + "options": { + "legend": { + "calcs": [ + "last", + "max" + ], + "displayMode": "table", + "placement": "right", + "sortBy": "Last", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "breakwater_connections", + "interval": "", + "legendFormat": "pixelflut.warpzone.lan", + "refId": "A" + } + ], + "title": "Connections / IP", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": 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": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 13 + }, + "id": 18, + "interval": "1m", + "options": { + "legend": { + "calcs": [ + "last", + "max" + ], + "displayMode": "table", + "placement": "right", + "sortBy": "Last", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "rate(breakwater_pixels[$__interval]) * 8", + "interval": "", + "legendFormat": "pixelflut.warpzone.lan", + "refId": "A" + } + ], + "title": "Pixels / s / IP", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "thresholds" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 25 + } + ] + }, + "unit": "FPS" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "30 FPS" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 21 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.4.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "breakwater_fps{}", + "interval": "", + "legendFormat": "Measured", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P0FAC05DE14135586" + }, + "exemplar": true, + "expr": "30", + "hide": false, + "interval": "", + "legendFormat": "30 FPS", + "refId": "B" + } + ], + "title": "FPS", + "type": "timeseries" + } + ], + "refresh": false, + "schemaVersion": 35, + "style": "dark", + "tags": [ + "pixelflut", + "breakwater" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Pixelflut overview", + "uid": "bfgb09843", + "weekStart": "" +} diff --git a/testserver/docker_grafana/templates/provisioning/datasources/datasources.yml b/testserver/docker_grafana/templates/provisioning/datasources/datasources.yml new file mode 100644 index 0000000000000000000000000000000000000000..8e9cb3f4717e00fa8cd63179a593193f462cdb66 --- /dev/null +++ b/testserver/docker_grafana/templates/provisioning/datasources/datasources.yml @@ -0,0 +1,47 @@ + +apiVersion: 1 + +datasources: + + - name: MQTT_Flux + type: influxdb + access: proxy + url: http://{{ int_ip4 }}:{{ mqtt_influxdb_port }} + jsonData: + version: Flux + organization: mqtt + defaultBucket: mqtt + tlsSkipVerify: true + secureJsonData: + token: {{ influxdb_token }} + + - name: MQTT_InfluxQL + type: influxdb + access: proxy + url: http://{{ int_ip4 }}:{{ mqtt_influxdb_port }} + # This database should be mapped to a bucket + database: mqtt + jsonData: + httpMode: GET + httpHeaderName1: 'Authorization' + secureJsonData: + httpHeaderValue1: 'Token {{ influxdb_token }}' + +{% if inventory_hostname == 'hix' %} + + - name: Prometheus + type: prometheus + access: proxy + url: http://{{ int_ip4 }}:9090 + +{% endif %} + +{% if inventory_hostname == 'ogg' %} + + - name: Pixelflut + type: prometheus + access: proxy + url: http://pixelflut.warpzone.lan:9090 + uuid: P0FAC05DE14135586 + +{% endif %}