1
0

Pi-hole-grafana-dashboard.json 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960
  1. {
  2. "__inputs": [
  3. {
  4. "name": "DS_INFLUXDB",
  5. "label": "InfluxDB",
  6. "description": "",
  7. "type": "datasource",
  8. "pluginId": "influxdb",
  9. "pluginName": "InfluxDB"
  10. }
  11. ],
  12. "__elements": {},
  13. "__requires": [
  14. {
  15. "type": "grafana",
  16. "id": "grafana",
  17. "name": "Grafana",
  18. "version": "9.1.4"
  19. },
  20. {
  21. "type": "datasource",
  22. "id": "influxdb",
  23. "name": "InfluxDB",
  24. "version": "1.0.0"
  25. },
  26. {
  27. "type": "panel",
  28. "id": "stat",
  29. "name": "Stat",
  30. "version": ""
  31. },
  32. {
  33. "type": "panel",
  34. "id": "timeseries",
  35. "name": "Time series",
  36. "version": ""
  37. }
  38. ],
  39. "annotations": {
  40. "list": [
  41. {
  42. "builtIn": 1,
  43. "datasource": {
  44. "type": "grafana",
  45. "uid": "-- Grafana --"
  46. },
  47. "enable": true,
  48. "hide": true,
  49. "iconColor": "rgba(0, 211, 255, 1)",
  50. "name": "Annotations & Alerts",
  51. "target": {
  52. "limit": 100,
  53. "matchAny": false,
  54. "tags": [],
  55. "type": "dashboard"
  56. },
  57. "type": "dashboard"
  58. }
  59. ]
  60. },
  61. "editable": true,
  62. "fiscalYearStartMonth": 0,
  63. "graphTooltip": 0,
  64. "id": null,
  65. "links": [],
  66. "liveNow": false,
  67. "panels": [
  68. {
  69. "datasource": {
  70. "type": "influxdb",
  71. "uid": "${DS_INFLUXDB}"
  72. },
  73. "fieldConfig": {
  74. "defaults": {
  75. "color": {
  76. "fixedColor": "green",
  77. "mode": "fixed"
  78. },
  79. "mappings": [],
  80. "thresholds": {
  81. "mode": "absolute",
  82. "steps": [
  83. {
  84. "color": "green",
  85. "value": null
  86. },
  87. {
  88. "color": "red",
  89. "value": 80
  90. }
  91. ]
  92. },
  93. "unit": "locale"
  94. },
  95. "overrides": []
  96. },
  97. "gridPos": {
  98. "h": 6,
  99. "w": 4,
  100. "x": 0,
  101. "y": 0
  102. },
  103. "id": 2,
  104. "interval": "10m",
  105. "options": {
  106. "colorMode": "value",
  107. "graphMode": "area",
  108. "justifyMode": "auto",
  109. "orientation": "auto",
  110. "reduceOptions": {
  111. "calcs": [
  112. "sum"
  113. ],
  114. "fields": "",
  115. "values": false
  116. },
  117. "textMode": "auto"
  118. },
  119. "pluginVersion": "9.1.4",
  120. "targets": [
  121. {
  122. "datasource": {
  123. "type": "influxdb",
  124. "uid": "${DS_INFLUXDB}"
  125. },
  126. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"queries\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"queries\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: sum, createEmpty: false)\r\n |> yield(name: \"sum\")",
  127. "refId": "A"
  128. }
  129. ],
  130. "title": "Total Queries",
  131. "transparent": true,
  132. "type": "stat"
  133. },
  134. {
  135. "datasource": {
  136. "type": "influxdb",
  137. "uid": "${DS_INFLUXDB}"
  138. },
  139. "fieldConfig": {
  140. "defaults": {
  141. "color": {
  142. "fixedColor": "purple",
  143. "mode": "fixed"
  144. },
  145. "mappings": [],
  146. "thresholds": {
  147. "mode": "absolute",
  148. "steps": [
  149. {
  150. "color": "green",
  151. "value": null
  152. },
  153. {
  154. "color": "red",
  155. "value": 80
  156. }
  157. ]
  158. },
  159. "unit": "locale"
  160. },
  161. "overrides": []
  162. },
  163. "gridPos": {
  164. "h": 6,
  165. "w": 4,
  166. "x": 4,
  167. "y": 0
  168. },
  169. "id": 10,
  170. "interval": "10m",
  171. "options": {
  172. "colorMode": "value",
  173. "graphMode": "area",
  174. "justifyMode": "auto",
  175. "orientation": "auto",
  176. "reduceOptions": {
  177. "calcs": [
  178. "sum"
  179. ],
  180. "fields": "",
  181. "values": false
  182. },
  183. "textMode": "auto"
  184. },
  185. "pluginVersion": "9.1.4",
  186. "targets": [
  187. {
  188. "datasource": {
  189. "type": "influxdb",
  190. "uid": "${DS_INFLUXDB}"
  191. },
  192. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"domains\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"cached\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: sum, createEmpty: false)\r\n |> yield(name: \"sum\")",
  193. "refId": "A"
  194. }
  195. ],
  196. "title": "Queries Cached",
  197. "transparent": true,
  198. "type": "stat"
  199. },
  200. {
  201. "datasource": {
  202. "type": "influxdb",
  203. "uid": "${DS_INFLUXDB}"
  204. },
  205. "fieldConfig": {
  206. "defaults": {
  207. "color": {
  208. "fixedColor": "blue",
  209. "mode": "fixed"
  210. },
  211. "mappings": [],
  212. "thresholds": {
  213. "mode": "absolute",
  214. "steps": [
  215. {
  216. "color": "green",
  217. "value": null
  218. },
  219. {
  220. "color": "red",
  221. "value": 80
  222. }
  223. ]
  224. },
  225. "unit": "locale"
  226. },
  227. "overrides": []
  228. },
  229. "gridPos": {
  230. "h": 6,
  231. "w": 4,
  232. "x": 8,
  233. "y": 0
  234. },
  235. "id": 3,
  236. "interval": "10m",
  237. "options": {
  238. "colorMode": "value",
  239. "graphMode": "area",
  240. "justifyMode": "auto",
  241. "orientation": "auto",
  242. "reduceOptions": {
  243. "calcs": [
  244. "sum"
  245. ],
  246. "fields": "",
  247. "values": false
  248. },
  249. "textMode": "auto"
  250. },
  251. "pluginVersion": "9.1.4",
  252. "targets": [
  253. {
  254. "datasource": {
  255. "type": "influxdb",
  256. "uid": "${DS_INFLUXDB}"
  257. },
  258. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"queries\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"blocked\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: sum, createEmpty: false)\r\n |> yield(name: \"sum\")",
  259. "refId": "A"
  260. }
  261. ],
  262. "title": "Queries Blocked",
  263. "transparent": true,
  264. "type": "stat"
  265. },
  266. {
  267. "datasource": {
  268. "type": "influxdb",
  269. "uid": "${DS_INFLUXDB}"
  270. },
  271. "fieldConfig": {
  272. "defaults": {
  273. "color": {
  274. "fixedColor": "yellow",
  275. "mode": "fixed"
  276. },
  277. "decimals": 1,
  278. "mappings": [],
  279. "thresholds": {
  280. "mode": "absolute",
  281. "steps": [
  282. {
  283. "color": "green",
  284. "value": null
  285. },
  286. {
  287. "color": "red",
  288. "value": 80
  289. }
  290. ]
  291. },
  292. "unit": "percent"
  293. },
  294. "overrides": []
  295. },
  296. "gridPos": {
  297. "h": 6,
  298. "w": 4,
  299. "x": 12,
  300. "y": 0
  301. },
  302. "id": 4,
  303. "interval": "10m",
  304. "options": {
  305. "colorMode": "value",
  306. "graphMode": "area",
  307. "justifyMode": "auto",
  308. "orientation": "auto",
  309. "reduceOptions": {
  310. "calcs": [
  311. "mean"
  312. ],
  313. "fields": "",
  314. "values": false
  315. },
  316. "textMode": "auto"
  317. },
  318. "pluginVersion": "9.1.4",
  319. "targets": [
  320. {
  321. "datasource": {
  322. "type": "influxdb",
  323. "uid": "${DS_INFLUXDB}"
  324. },
  325. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"queries\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"ads_percentage\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")",
  326. "refId": "A"
  327. }
  328. ],
  329. "title": "Percentage Blocked",
  330. "transparent": true,
  331. "type": "stat"
  332. },
  333. {
  334. "datasource": {
  335. "type": "influxdb",
  336. "uid": "${DS_INFLUXDB}"
  337. },
  338. "description": "",
  339. "fieldConfig": {
  340. "defaults": {
  341. "color": {
  342. "fixedColor": "red",
  343. "mode": "fixed"
  344. },
  345. "decimals": 0,
  346. "mappings": [],
  347. "thresholds": {
  348. "mode": "absolute",
  349. "steps": [
  350. {
  351. "color": "green",
  352. "value": null
  353. }
  354. ]
  355. },
  356. "unit": "locale"
  357. },
  358. "overrides": []
  359. },
  360. "gridPos": {
  361. "h": 6,
  362. "w": 4,
  363. "x": 16,
  364. "y": 0
  365. },
  366. "id": 5,
  367. "interval": "10m",
  368. "options": {
  369. "colorMode": "value",
  370. "graphMode": "area",
  371. "justifyMode": "auto",
  372. "orientation": "auto",
  373. "reduceOptions": {
  374. "calcs": [
  375. "lastNotNull"
  376. ],
  377. "fields": "",
  378. "values": false
  379. },
  380. "textMode": "auto"
  381. },
  382. "pluginVersion": "9.1.4",
  383. "targets": [
  384. {
  385. "datasource": {
  386. "type": "influxdb",
  387. "uid": "${DS_INFLUXDB}"
  388. },
  389. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"domains\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"domain_count\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\r\n |> yield(name: \"last\")",
  390. "refId": "A"
  391. }
  392. ],
  393. "title": "Domains on Adlists",
  394. "transparent": true,
  395. "type": "stat"
  396. },
  397. {
  398. "datasource": {
  399. "type": "influxdb",
  400. "uid": "${DS_INFLUXDB}"
  401. },
  402. "fieldConfig": {
  403. "defaults": {
  404. "color": {
  405. "mode": "thresholds"
  406. },
  407. "mappings": [],
  408. "thresholds": {
  409. "mode": "absolute",
  410. "steps": [
  411. {
  412. "color": "green",
  413. "value": null
  414. },
  415. {
  416. "color": "red",
  417. "value": 80
  418. }
  419. ]
  420. },
  421. "unit": "locale"
  422. },
  423. "overrides": []
  424. },
  425. "gridPos": {
  426. "h": 6,
  427. "w": 4,
  428. "x": 20,
  429. "y": 0
  430. },
  431. "id": 11,
  432. "interval": "10m",
  433. "options": {
  434. "colorMode": "value",
  435. "graphMode": "area",
  436. "justifyMode": "auto",
  437. "orientation": "auto",
  438. "reduceOptions": {
  439. "calcs": [
  440. "max"
  441. ],
  442. "fields": "",
  443. "values": false
  444. },
  445. "textMode": "auto"
  446. },
  447. "pluginVersion": "9.1.4",
  448. "targets": [
  449. {
  450. "datasource": {
  451. "type": "influxdb",
  452. "uid": "${DS_INFLUXDB}"
  453. },
  454. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"clients\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"queries\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\r\n |> group(columns: [\"client\"])\r\n |> distinct(column: \"client\")\r\n |> keep(columns: [\"_value\", \"_time\"])\r\n |> count()\r\n |> yield(name: \"max\")",
  455. "refId": "A"
  456. }
  457. ],
  458. "title": "Total Clients",
  459. "transformations": [],
  460. "transparent": true,
  461. "type": "stat"
  462. },
  463. {
  464. "datasource": {
  465. "type": "influxdb",
  466. "uid": "${DS_INFLUXDB}"
  467. },
  468. "description": "",
  469. "fieldConfig": {
  470. "defaults": {
  471. "color": {
  472. "mode": "palette-classic"
  473. },
  474. "custom": {
  475. "axisCenteredZero": false,
  476. "axisColorMode": "text",
  477. "axisLabel": "",
  478. "axisPlacement": "auto",
  479. "barAlignment": 0,
  480. "drawStyle": "line",
  481. "fillOpacity": 5,
  482. "gradientMode": "none",
  483. "hideFrom": {
  484. "legend": false,
  485. "tooltip": false,
  486. "viz": false
  487. },
  488. "lineInterpolation": "smooth",
  489. "lineWidth": 1,
  490. "pointSize": 5,
  491. "scaleDistribution": {
  492. "type": "linear"
  493. },
  494. "showPoints": "auto",
  495. "spanNulls": false,
  496. "stacking": {
  497. "group": "A",
  498. "mode": "none"
  499. },
  500. "thresholdsStyle": {
  501. "mode": "off"
  502. }
  503. },
  504. "decimals": 0,
  505. "mappings": [],
  506. "thresholds": {
  507. "mode": "absolute",
  508. "steps": [
  509. {
  510. "color": "green",
  511. "value": null
  512. },
  513. {
  514. "color": "red",
  515. "value": 80
  516. }
  517. ]
  518. },
  519. "unit": "short"
  520. },
  521. "overrides": []
  522. },
  523. "gridPos": {
  524. "h": 8,
  525. "w": 12,
  526. "x": 0,
  527. "y": 6
  528. },
  529. "id": 12,
  530. "options": {
  531. "legend": {
  532. "calcs": [],
  533. "displayMode": "list",
  534. "placement": "bottom",
  535. "showLegend": true
  536. },
  537. "tooltip": {
  538. "mode": "multi",
  539. "sort": "none"
  540. }
  541. },
  542. "targets": [
  543. {
  544. "datasource": {
  545. "type": "influxdb",
  546. "uid": "${DS_INFLUXDB}"
  547. },
  548. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"clients\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"queries\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")",
  549. "refId": "A"
  550. }
  551. ],
  552. "title": "Queries per Client",
  553. "transformations": [
  554. {
  555. "id": "renameByRegex",
  556. "options": {
  557. "regex": ".+client=\"(.+?)\".+",
  558. "renamePattern": "$1"
  559. }
  560. }
  561. ],
  562. "transparent": true,
  563. "type": "timeseries"
  564. },
  565. {
  566. "datasource": {
  567. "type": "influxdb",
  568. "uid": "${DS_INFLUXDB}"
  569. },
  570. "description": "",
  571. "fieldConfig": {
  572. "defaults": {
  573. "color": {
  574. "mode": "palette-classic"
  575. },
  576. "custom": {
  577. "axisCenteredZero": false,
  578. "axisColorMode": "text",
  579. "axisLabel": "",
  580. "axisPlacement": "auto",
  581. "barAlignment": 0,
  582. "drawStyle": "line",
  583. "fillOpacity": 5,
  584. "gradientMode": "none",
  585. "hideFrom": {
  586. "legend": false,
  587. "tooltip": false,
  588. "viz": false
  589. },
  590. "lineInterpolation": "smooth",
  591. "lineWidth": 1,
  592. "pointSize": 5,
  593. "scaleDistribution": {
  594. "type": "linear"
  595. },
  596. "showPoints": "auto",
  597. "spanNulls": false,
  598. "stacking": {
  599. "group": "A",
  600. "mode": "none"
  601. },
  602. "thresholdsStyle": {
  603. "mode": "off"
  604. }
  605. },
  606. "decimals": 0,
  607. "mappings": [],
  608. "thresholds": {
  609. "mode": "absolute",
  610. "steps": [
  611. {
  612. "color": "green",
  613. "value": null
  614. },
  615. {
  616. "color": "red",
  617. "value": 80
  618. }
  619. ]
  620. },
  621. "unit": "short"
  622. },
  623. "overrides": []
  624. },
  625. "gridPos": {
  626. "h": 8,
  627. "w": 12,
  628. "x": 12,
  629. "y": 6
  630. },
  631. "id": 13,
  632. "options": {
  633. "legend": {
  634. "calcs": [],
  635. "displayMode": "list",
  636. "placement": "bottom",
  637. "showLegend": true
  638. },
  639. "tooltip": {
  640. "mode": "multi",
  641. "sort": "none"
  642. }
  643. },
  644. "targets": [
  645. {
  646. "datasource": {
  647. "type": "influxdb",
  648. "uid": "${DS_INFLUXDB}"
  649. },
  650. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"clients\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"blocked\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")",
  651. "refId": "A"
  652. }
  653. ],
  654. "title": "Blocked queries per Client",
  655. "transformations": [
  656. {
  657. "id": "renameByRegex",
  658. "options": {
  659. "regex": ".+client=\"(.+?)\".+",
  660. "renamePattern": "$1"
  661. }
  662. }
  663. ],
  664. "transparent": true,
  665. "type": "timeseries"
  666. },
  667. {
  668. "datasource": {
  669. "type": "influxdb",
  670. "uid": "${DS_INFLUXDB}"
  671. },
  672. "fieldConfig": {
  673. "defaults": {
  674. "color": {
  675. "mode": "palette-classic"
  676. },
  677. "custom": {
  678. "axisCenteredZero": false,
  679. "axisColorMode": "text",
  680. "axisLabel": "",
  681. "axisPlacement": "auto",
  682. "barAlignment": 0,
  683. "drawStyle": "line",
  684. "fillOpacity": 63,
  685. "gradientMode": "none",
  686. "hideFrom": {
  687. "legend": false,
  688. "tooltip": false,
  689. "viz": false
  690. },
  691. "lineInterpolation": "linear",
  692. "lineWidth": 1,
  693. "pointSize": 5,
  694. "scaleDistribution": {
  695. "type": "linear"
  696. },
  697. "showPoints": "auto",
  698. "spanNulls": false,
  699. "stacking": {
  700. "group": "A",
  701. "mode": "percent"
  702. },
  703. "thresholdsStyle": {
  704. "mode": "off"
  705. }
  706. },
  707. "decimals": 0,
  708. "mappings": [],
  709. "thresholds": {
  710. "mode": "absolute",
  711. "steps": [
  712. {
  713. "color": "green",
  714. "value": null
  715. },
  716. {
  717. "color": "red",
  718. "value": 80
  719. }
  720. ]
  721. },
  722. "unit": "short"
  723. },
  724. "overrides": []
  725. },
  726. "gridPos": {
  727. "h": 7,
  728. "w": 12,
  729. "x": 0,
  730. "y": 14
  731. },
  732. "id": 7,
  733. "options": {
  734. "legend": {
  735. "calcs": [],
  736. "displayMode": "list",
  737. "placement": "bottom",
  738. "showLegend": true
  739. },
  740. "tooltip": {
  741. "mode": "multi",
  742. "sort": "none"
  743. }
  744. },
  745. "targets": [
  746. {
  747. "datasource": {
  748. "type": "influxdb",
  749. "uid": "${DS_INFLUXDB}"
  750. },
  751. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"query_types\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\r\n |> yield(name: \"last\")",
  752. "refId": "A"
  753. }
  754. ],
  755. "title": "Query Types",
  756. "transformations": [
  757. {
  758. "id": "renameByRegex",
  759. "options": {
  760. "regex": ".+query_type=\"(.*)\".+",
  761. "renamePattern": "$1"
  762. }
  763. }
  764. ],
  765. "transparent": true,
  766. "type": "timeseries"
  767. },
  768. {
  769. "datasource": {
  770. "type": "influxdb",
  771. "uid": "${DS_INFLUXDB}"
  772. },
  773. "fieldConfig": {
  774. "defaults": {
  775. "color": {
  776. "mode": "palette-classic"
  777. },
  778. "custom": {
  779. "axisCenteredZero": false,
  780. "axisColorMode": "text",
  781. "axisLabel": "",
  782. "axisPlacement": "auto",
  783. "barAlignment": 0,
  784. "drawStyle": "line",
  785. "fillOpacity": 6,
  786. "gradientMode": "none",
  787. "hideFrom": {
  788. "legend": false,
  789. "tooltip": false,
  790. "viz": false
  791. },
  792. "lineInterpolation": "linear",
  793. "lineWidth": 1,
  794. "pointSize": 5,
  795. "scaleDistribution": {
  796. "type": "linear"
  797. },
  798. "showPoints": "auto",
  799. "spanNulls": false,
  800. "stacking": {
  801. "group": "A",
  802. "mode": "normal"
  803. },
  804. "thresholdsStyle": {
  805. "mode": "off"
  806. }
  807. },
  808. "decimals": 0,
  809. "mappings": [],
  810. "thresholds": {
  811. "mode": "absolute",
  812. "steps": [
  813. {
  814. "color": "green",
  815. "value": null
  816. },
  817. {
  818. "color": "red",
  819. "value": 80
  820. }
  821. ]
  822. },
  823. "unit": "short"
  824. },
  825. "overrides": []
  826. },
  827. "gridPos": {
  828. "h": 7,
  829. "w": 12,
  830. "x": 12,
  831. "y": 14
  832. },
  833. "id": 9,
  834. "options": {
  835. "legend": {
  836. "calcs": [],
  837. "displayMode": "list",
  838. "placement": "bottom",
  839. "showLegend": true
  840. },
  841. "tooltip": {
  842. "mode": "multi",
  843. "sort": "none"
  844. }
  845. },
  846. "targets": [
  847. {
  848. "datasource": {
  849. "type": "influxdb",
  850. "uid": "${DS_INFLUXDB}"
  851. },
  852. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"forward_destinations\")\r\n |> filter(fn: (r) => r[\"destination\"] != \"\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n |> yield(name: \"mean\")",
  853. "refId": "A"
  854. }
  855. ],
  856. "title": "Upstream Queries",
  857. "transformations": [
  858. {
  859. "id": "renameByRegex",
  860. "options": {
  861. "regex": ".+destination=\"(.+?)#?\\d*\".+",
  862. "renamePattern": "$1"
  863. }
  864. }
  865. ],
  866. "transparent": true,
  867. "type": "timeseries"
  868. },
  869. {
  870. "datasource": {
  871. "type": "influxdb",
  872. "uid": "${DS_INFLUXDB}"
  873. },
  874. "description": "",
  875. "fieldConfig": {
  876. "defaults": {
  877. "color": {
  878. "fixedColor": "red",
  879. "mode": "fixed"
  880. },
  881. "decimals": 0,
  882. "mappings": [],
  883. "thresholds": {
  884. "mode": "absolute",
  885. "steps": [
  886. {
  887. "color": "green",
  888. "value": null
  889. }
  890. ]
  891. },
  892. "unit": "dateTimeAsLocalNoDateIfToday"
  893. },
  894. "overrides": []
  895. },
  896. "gridPos": {
  897. "h": 6,
  898. "w": 8,
  899. "x": 0,
  900. "y": 21
  901. },
  902. "id": 8,
  903. "interval": "10m",
  904. "options": {
  905. "colorMode": "value",
  906. "graphMode": "none",
  907. "justifyMode": "auto",
  908. "orientation": "auto",
  909. "reduceOptions": {
  910. "calcs": [
  911. "lastNotNull"
  912. ],
  913. "fields": "",
  914. "values": false
  915. },
  916. "textMode": "auto"
  917. },
  918. "pluginVersion": "9.1.4",
  919. "targets": [
  920. {
  921. "datasource": {
  922. "type": "influxdb",
  923. "uid": "${DS_INFLUXDB}"
  924. },
  925. "query": "from(bucket: \"pihole\")\r\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n |> filter(fn: (r) => r[\"_measurement\"] == \"other\")\r\n |> filter(fn: (r) => r[\"_field\"] == \"gravity_last_update\")\r\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\r\n |> map(fn: (r) => ({r with _value: r._value * 1000}))\r\n |> yield(name: \"last\")",
  926. "refId": "A"
  927. }
  928. ],
  929. "title": "Adlists last Updated",
  930. "transparent": true,
  931. "type": "stat"
  932. }
  933. ],
  934. "schemaVersion": 37,
  935. "style": "dark",
  936. "tags": [],
  937. "templating": {
  938. "list": []
  939. },
  940. "time": {
  941. "from": "now-24h",
  942. "to": "now"
  943. },
  944. "timepicker": {
  945. "refresh_intervals": [
  946. "1m",
  947. "5m",
  948. "15m",
  949. "30m",
  950. "1h",
  951. "2h",
  952. "1d"
  953. ]
  954. },
  955. "timezone": "",
  956. "title": "Pi-hole",
  957. "uid": "4Ku5WznVk",
  958. "version": 10,
  959. "weekStart": ""
  960. }