Add files via upload
This commit is contained in:
		
							
								
								
									
										447
									
								
								pihole_grafana.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										447
									
								
								pihole_grafana.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,447 @@
 | 
			
		||||
{
 | 
			
		||||
  "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": 5,
 | 
			
		||||
  "links": [],
 | 
			
		||||
  "panels": [
 | 
			
		||||
    {
 | 
			
		||||
      "collapsed": false,
 | 
			
		||||
      "datasource": null,
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 1,
 | 
			
		||||
        "w": 24,
 | 
			
		||||
        "x": 0,
 | 
			
		||||
        "y": 0
 | 
			
		||||
      },
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "panels": [],
 | 
			
		||||
      "title": "PiHole Stats",
 | 
			
		||||
      "type": "row"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "cacheTimeout": null,
 | 
			
		||||
      "datasource": "dev_pihole",
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 6,
 | 
			
		||||
        "w": 6,
 | 
			
		||||
        "x": 0,
 | 
			
		||||
        "y": 1
 | 
			
		||||
      },
 | 
			
		||||
      "hideTimeOverride": false,
 | 
			
		||||
      "id": 4,
 | 
			
		||||
      "links": [],
 | 
			
		||||
      "options": {
 | 
			
		||||
        "colorMode": "value",
 | 
			
		||||
        "fieldOptions": {
 | 
			
		||||
          "calcs": [
 | 
			
		||||
            "last"
 | 
			
		||||
          ],
 | 
			
		||||
          "defaults": {
 | 
			
		||||
            "mappings": [],
 | 
			
		||||
            "min": 0,
 | 
			
		||||
            "nullValueMode": "connected",
 | 
			
		||||
            "thresholds": {
 | 
			
		||||
              "mode": "absolute",
 | 
			
		||||
              "steps": [
 | 
			
		||||
                {
 | 
			
		||||
                  "color": "green",
 | 
			
		||||
                  "value": null
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "title": "DNS Queries",
 | 
			
		||||
            "unit": "none"
 | 
			
		||||
          },
 | 
			
		||||
          "overrides": [],
 | 
			
		||||
          "values": false
 | 
			
		||||
        },
 | 
			
		||||
        "graphMode": "area",
 | 
			
		||||
        "justifyMode": "auto",
 | 
			
		||||
        "orientation": "horizontal"
 | 
			
		||||
      },
 | 
			
		||||
      "pluginVersion": "6.6.2",
 | 
			
		||||
      "targets": [
 | 
			
		||||
        {
 | 
			
		||||
          "alias": "DNS Queries",
 | 
			
		||||
          "groupBy": [
 | 
			
		||||
            {
 | 
			
		||||
              "params": [
 | 
			
		||||
                "$__interval"
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "time"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "params": [
 | 
			
		||||
                "null"
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "fill"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "hide": false,
 | 
			
		||||
          "measurement": "piholestats.pihole",
 | 
			
		||||
          "orderByTime": "ASC",
 | 
			
		||||
          "policy": "default",
 | 
			
		||||
          "refId": "A",
 | 
			
		||||
          "resultFormat": "time_series",
 | 
			
		||||
          "select": [
 | 
			
		||||
            [
 | 
			
		||||
              {
 | 
			
		||||
                "params": [
 | 
			
		||||
                  "dns_queries_today"
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "field"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "params": [],
 | 
			
		||||
                "type": "distinct"
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          ],
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "key": "host",
 | 
			
		||||
              "operator": "=",
 | 
			
		||||
              "value": "pihole"
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "timeFrom": null,
 | 
			
		||||
      "timeShift": null,
 | 
			
		||||
      "title": "PiHole Stats",
 | 
			
		||||
      "type": "stat"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "cacheTimeout": null,
 | 
			
		||||
      "datasource": "dev_pihole",
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 6,
 | 
			
		||||
        "w": 6,
 | 
			
		||||
        "x": 6,
 | 
			
		||||
        "y": 1
 | 
			
		||||
      },
 | 
			
		||||
      "hideTimeOverride": false,
 | 
			
		||||
      "id": 5,
 | 
			
		||||
      "links": [],
 | 
			
		||||
      "options": {
 | 
			
		||||
        "colorMode": "value",
 | 
			
		||||
        "fieldOptions": {
 | 
			
		||||
          "calcs": [
 | 
			
		||||
            "last"
 | 
			
		||||
          ],
 | 
			
		||||
          "defaults": {
 | 
			
		||||
            "mappings": [],
 | 
			
		||||
            "nullValueMode": "connected",
 | 
			
		||||
            "thresholds": {
 | 
			
		||||
              "mode": "absolute",
 | 
			
		||||
              "steps": [
 | 
			
		||||
                {
 | 
			
		||||
                  "color": "green",
 | 
			
		||||
                  "value": null
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "color": "red",
 | 
			
		||||
                  "value": 80
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "title": "Ads Percentage",
 | 
			
		||||
            "unit": "%"
 | 
			
		||||
          },
 | 
			
		||||
          "overrides": [],
 | 
			
		||||
          "values": false
 | 
			
		||||
        },
 | 
			
		||||
        "graphMode": "area",
 | 
			
		||||
        "justifyMode": "auto",
 | 
			
		||||
        "orientation": "horizontal"
 | 
			
		||||
      },
 | 
			
		||||
      "pluginVersion": "6.6.2",
 | 
			
		||||
      "targets": [
 | 
			
		||||
        {
 | 
			
		||||
          "alias": "Ads Blocked",
 | 
			
		||||
          "groupBy": [
 | 
			
		||||
            {
 | 
			
		||||
              "params": [
 | 
			
		||||
                "$__interval"
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "time"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "params": [
 | 
			
		||||
                "null"
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "fill"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "hide": false,
 | 
			
		||||
          "measurement": "piholestats.pihole",
 | 
			
		||||
          "orderByTime": "ASC",
 | 
			
		||||
          "policy": "default",
 | 
			
		||||
          "refId": "A",
 | 
			
		||||
          "resultFormat": "time_series",
 | 
			
		||||
          "select": [
 | 
			
		||||
            [
 | 
			
		||||
              {
 | 
			
		||||
                "params": [
 | 
			
		||||
                  "ads_percentage_today"
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "field"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "params": [],
 | 
			
		||||
                "type": "distinct"
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          ],
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "key": "host",
 | 
			
		||||
              "operator": "=",
 | 
			
		||||
              "value": "pihole"
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "timeFrom": null,
 | 
			
		||||
      "timeShift": null,
 | 
			
		||||
      "title": "PiHole Stats",
 | 
			
		||||
      "type": "stat"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "cacheTimeout": null,
 | 
			
		||||
      "datasource": "dev_pihole",
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 6,
 | 
			
		||||
        "w": 6,
 | 
			
		||||
        "x": 12,
 | 
			
		||||
        "y": 1
 | 
			
		||||
      },
 | 
			
		||||
      "hideTimeOverride": false,
 | 
			
		||||
      "id": 6,
 | 
			
		||||
      "links": [],
 | 
			
		||||
      "options": {
 | 
			
		||||
        "colorMode": "value",
 | 
			
		||||
        "fieldOptions": {
 | 
			
		||||
          "calcs": [
 | 
			
		||||
            "last"
 | 
			
		||||
          ],
 | 
			
		||||
          "defaults": {
 | 
			
		||||
            "mappings": [],
 | 
			
		||||
            "min": 0,
 | 
			
		||||
            "nullValueMode": "connected",
 | 
			
		||||
            "thresholds": {
 | 
			
		||||
              "mode": "absolute",
 | 
			
		||||
              "steps": [
 | 
			
		||||
                {
 | 
			
		||||
                  "color": "green",
 | 
			
		||||
                  "value": null
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "color": "red",
 | 
			
		||||
                  "value": 80
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "title": "Ads Blocked",
 | 
			
		||||
            "unit": "none"
 | 
			
		||||
          },
 | 
			
		||||
          "overrides": [],
 | 
			
		||||
          "values": false
 | 
			
		||||
        },
 | 
			
		||||
        "graphMode": "area",
 | 
			
		||||
        "justifyMode": "auto",
 | 
			
		||||
        "orientation": "horizontal"
 | 
			
		||||
      },
 | 
			
		||||
      "pluginVersion": "6.6.2",
 | 
			
		||||
      "targets": [
 | 
			
		||||
        {
 | 
			
		||||
          "alias": "Ads Blocked",
 | 
			
		||||
          "groupBy": [
 | 
			
		||||
            {
 | 
			
		||||
              "params": [
 | 
			
		||||
                "$__interval"
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "time"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "params": [
 | 
			
		||||
                "null"
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "fill"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "hide": false,
 | 
			
		||||
          "measurement": "piholestats.pihole",
 | 
			
		||||
          "orderByTime": "ASC",
 | 
			
		||||
          "policy": "default",
 | 
			
		||||
          "refId": "A",
 | 
			
		||||
          "resultFormat": "time_series",
 | 
			
		||||
          "select": [
 | 
			
		||||
            [
 | 
			
		||||
              {
 | 
			
		||||
                "params": [
 | 
			
		||||
                  "ads_blocked_today"
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "field"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "params": [],
 | 
			
		||||
                "type": "distinct"
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          ],
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "key": "host",
 | 
			
		||||
              "operator": "=",
 | 
			
		||||
              "value": "pihole"
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "timeFrom": null,
 | 
			
		||||
      "timeShift": null,
 | 
			
		||||
      "title": "PiHole Stats",
 | 
			
		||||
      "type": "stat"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "cacheTimeout": null,
 | 
			
		||||
      "datasource": "dev_pihole",
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 6,
 | 
			
		||||
        "w": 6,
 | 
			
		||||
        "x": 18,
 | 
			
		||||
        "y": 1
 | 
			
		||||
      },
 | 
			
		||||
      "hideTimeOverride": false,
 | 
			
		||||
      "id": 7,
 | 
			
		||||
      "links": [],
 | 
			
		||||
      "options": {
 | 
			
		||||
        "colorMode": "value",
 | 
			
		||||
        "fieldOptions": {
 | 
			
		||||
          "calcs": [
 | 
			
		||||
            "last"
 | 
			
		||||
          ],
 | 
			
		||||
          "defaults": {
 | 
			
		||||
            "mappings": [],
 | 
			
		||||
            "min": 0,
 | 
			
		||||
            "nullValueMode": "connected",
 | 
			
		||||
            "thresholds": {
 | 
			
		||||
              "mode": "absolute",
 | 
			
		||||
              "steps": [
 | 
			
		||||
                {
 | 
			
		||||
                  "color": "green",
 | 
			
		||||
                  "value": null
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "color": "red",
 | 
			
		||||
                  "value": 80
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            "title": "Domains Blocked",
 | 
			
		||||
            "unit": "none"
 | 
			
		||||
          },
 | 
			
		||||
          "overrides": [],
 | 
			
		||||
          "values": false
 | 
			
		||||
        },
 | 
			
		||||
        "graphMode": "area",
 | 
			
		||||
        "justifyMode": "auto",
 | 
			
		||||
        "orientation": "horizontal"
 | 
			
		||||
      },
 | 
			
		||||
      "pluginVersion": "6.6.2",
 | 
			
		||||
      "targets": [
 | 
			
		||||
        {
 | 
			
		||||
          "alias": "Domains Blocked",
 | 
			
		||||
          "groupBy": [
 | 
			
		||||
            {
 | 
			
		||||
              "params": [
 | 
			
		||||
                "$__interval"
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "time"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "params": [
 | 
			
		||||
                "null"
 | 
			
		||||
              ],
 | 
			
		||||
              "type": "fill"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "hide": false,
 | 
			
		||||
          "measurement": "piholestats.pihole",
 | 
			
		||||
          "orderByTime": "ASC",
 | 
			
		||||
          "policy": "default",
 | 
			
		||||
          "refId": "A",
 | 
			
		||||
          "resultFormat": "time_series",
 | 
			
		||||
          "select": [
 | 
			
		||||
            [
 | 
			
		||||
              {
 | 
			
		||||
                "params": [
 | 
			
		||||
                  "domains_blocked"
 | 
			
		||||
                ],
 | 
			
		||||
                "type": "field"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "params": [],
 | 
			
		||||
                "type": "distinct"
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          ],
 | 
			
		||||
          "tags": [
 | 
			
		||||
            {
 | 
			
		||||
              "key": "host",
 | 
			
		||||
              "operator": "=",
 | 
			
		||||
              "value": "pihole"
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "timeFrom": null,
 | 
			
		||||
      "timeShift": null,
 | 
			
		||||
      "title": "PiHole Stats",
 | 
			
		||||
      "type": "stat"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "schemaVersion": 22,
 | 
			
		||||
  "style": "dark",
 | 
			
		||||
  "tags": [],
 | 
			
		||||
  "templating": {
 | 
			
		||||
    "list": []
 | 
			
		||||
  },
 | 
			
		||||
  "time": {
 | 
			
		||||
    "from": "now-6h",
 | 
			
		||||
    "to": "now"
 | 
			
		||||
  },
 | 
			
		||||
  "timepicker": {
 | 
			
		||||
    "refresh_intervals": [
 | 
			
		||||
      "5s",
 | 
			
		||||
      "10s",
 | 
			
		||||
      "30s",
 | 
			
		||||
      "1m",
 | 
			
		||||
      "5m",
 | 
			
		||||
      "15m",
 | 
			
		||||
      "30m",
 | 
			
		||||
      "1h",
 | 
			
		||||
      "2h",
 | 
			
		||||
      "1d"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "timezone": "",
 | 
			
		||||
  "title": "PiHole",
 | 
			
		||||
  "uid": "oP8IN5mRk",
 | 
			
		||||
  "version": 5
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								piholestats.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								piholestats.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
#! /usr/bin/python
 | 
			
		||||
 | 
			
		||||
# History:
 | 
			
		||||
# 2016: Script originally created by JON HAYWARD: https://fattylewis.com/Graphing-pi-hole-stats/
 | 
			
		||||
# 2016 (December) Adapted to work with InfluxDB by /u/tollsjo
 | 
			
		||||
# 2016 (December) Updated by Cludch https://github.com/sco01/piholestatus
 | 
			
		||||
# 2020 (March) Updated by http://cactusprojects.com/pihole-logging-to-influxdb-&-grafana-dash
 | 
			
		||||
 | 
			
		||||
import requests
 | 
			
		||||
import time
 | 
			
		||||
from influxdb import InfluxDBClient
 | 
			
		||||
 | 
			
		||||
HOSTNAME = "pihole" # Pi-hole hostname to report in InfluxDB for each measurement
 | 
			
		||||
PIHOLE_API = "http://xxx.xxx.xxx.xxx/admin/api.php" # IP of PiHole
 | 
			
		||||
INFLUXDB_SERVER = "xxx.xxx.xxx.xxx" # IP or hostname to InfluxDB server
 | 
			
		||||
INFLUXDB_PORT = 8086 # Port on InfluxDB server
 | 
			
		||||
INFLUXDB_USERNAME = ""
 | 
			
		||||
INFLUXDB_PASSWORD = ""
 | 
			
		||||
INFLUXDB_DATABASE = "dev_pihole"
 | 
			
		||||
DELAY = 10 # seconds
 | 
			
		||||
 | 
			
		||||
def send_msg(domains_blocked, dns_queries_today, ads_percentage_today, ads_blocked_today):
 | 
			
		||||
 | 
			
		||||
	json_body = [
 | 
			
		||||
	    {
 | 
			
		||||
	        "measurement": "piholestats." + HOSTNAME.replace(".", "_"),
 | 
			
		||||
	        "tags": {
 | 
			
		||||
	            "host": HOSTNAME
 | 
			
		||||
	        },
 | 
			
		||||
	        "fields": {
 | 
			
		||||
	            "domains_blocked": int(domains_blocked),
 | 
			
		||||
                    "dns_queries_today": int(dns_queries_today),
 | 
			
		||||
                    "ads_percentage_today": float(ads_percentage_today),
 | 
			
		||||
                    "ads_blocked_today": int(ads_blocked_today)
 | 
			
		||||
	        }
 | 
			
		||||
	    }
 | 
			
		||||
	]
 | 
			
		||||
 | 
			
		||||
	client = InfluxDBClient(INFLUXDB_SERVER, INFLUXDB_PORT, INFLUXDB_USERNAME, INFLUXDB_PASSWORD, INFLUXDB_DATABASE) # InfluxDB host, InfluxDB port, Username, Password, database
 | 
			
		||||
	# client.create_database(INFLUXDB_DATABASE) # Uncomment to create the database (expected to exist prior to feeding it data)
 | 
			
		||||
	client.write_points(json_body)
 | 
			
		||||
 | 
			
		||||
api = requests.get(PIHOLE_API) # URI to pihole server api
 | 
			
		||||
API_out = api.json()
 | 
			
		||||
 | 
			
		||||
#print (API_out) # Print out full data, there are other parameters not sent to InfluxDB
 | 
			
		||||
 | 
			
		||||
domains_blocked = (API_out['domains_being_blocked'])#.replace(',', '')
 | 
			
		||||
dns_queries_today = (API_out['dns_queries_today'])#.replace(',', '')
 | 
			
		||||
ads_percentage_today = (API_out['ads_percentage_today'])#
 | 
			
		||||
ads_blocked_today = (API_out['ads_blocked_today'])#.replace(',', '')
 | 
			
		||||
 | 
			
		||||
send_msg(domains_blocked, dns_queries_today, ads_percentage_today, ads_blocked_today)
 | 
			
		||||
		Reference in New Issue
	
	Block a user