github.com/netdata/go.d.plugin@v0.58.1/modules/pihole/charts.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package pihole
     4  
     5  import (
     6  	"github.com/netdata/go.d.plugin/agent/module"
     7  )
     8  
     9  const (
    10  	prioDNSQueriesTotal = module.Priority + iota
    11  	prioDNSQueries
    12  	prioDNSQueriesPerc
    13  	prioUniqueClients
    14  	prioDomainsOnBlocklist
    15  	prioBlocklistLastUpdate
    16  	prioUnwantedDomainsBlockingStatus
    17  
    18  	prioDNSQueriesTypes
    19  	prioDNSQueriesForwardedDestination
    20  )
    21  
    22  var baseCharts = module.Charts{
    23  	chartDNSQueriesTotal.Copy(),
    24  	chartDNSQueries.Copy(),
    25  	chartDNSQueriesPerc.Copy(),
    26  	chartUniqueClients.Copy(),
    27  	chartDomainsOnBlocklist.Copy(),
    28  	chartBlocklistLastUpdate.Copy(),
    29  	chartUnwantedDomainsBlockingStatus.Copy(),
    30  }
    31  
    32  var (
    33  	chartDNSQueriesTotal = module.Chart{
    34  		ID:       "dns_queries_total",
    35  		Title:    "DNS Queries Total (Cached, Blocked and Forwarded)",
    36  		Units:    "queries",
    37  		Fam:      "queries",
    38  		Ctx:      "pihole.dns_queries_total",
    39  		Priority: prioDNSQueriesTotal,
    40  		Dims: module.Dims{
    41  			{ID: "dns_queries_today", Name: "queries"},
    42  		},
    43  	}
    44  	chartDNSQueries = module.Chart{
    45  		ID:       "dns_queries",
    46  		Title:    "DNS Queries",
    47  		Units:    "queries",
    48  		Fam:      "queries",
    49  		Ctx:      "pihole.dns_queries",
    50  		Type:     module.Stacked,
    51  		Priority: prioDNSQueries,
    52  		Dims: module.Dims{
    53  			{ID: "queries_cached", Name: "cached"},
    54  			{ID: "ads_blocked_today", Name: "blocked"},
    55  			{ID: "queries_forwarded", Name: "forwarded"},
    56  		},
    57  	}
    58  	chartDNSQueriesPerc = module.Chart{
    59  		ID:       "dns_queries_percentage",
    60  		Title:    "DNS Queries Percentage",
    61  		Units:    "percentage",
    62  		Fam:      "queries",
    63  		Ctx:      "pihole.dns_queries_percentage",
    64  		Type:     module.Stacked,
    65  		Priority: prioDNSQueriesPerc,
    66  		Dims: module.Dims{
    67  			{ID: "queries_cached_perc", Name: "cached", Div: precision},
    68  			{ID: "ads_blocked_today_perc", Name: "blocked", Div: precision},
    69  			{ID: "queries_forwarded_perc", Name: "forwarded", Div: precision},
    70  		},
    71  	}
    72  	chartUniqueClients = module.Chart{
    73  		ID:       "unique_clients",
    74  		Title:    "Unique Clients",
    75  		Units:    "clients",
    76  		Fam:      "clients",
    77  		Ctx:      "pihole.unique_clients",
    78  		Priority: prioUniqueClients,
    79  		Dims: module.Dims{
    80  			{ID: "unique_clients", Name: "unique"},
    81  		},
    82  	}
    83  	chartDomainsOnBlocklist = module.Chart{
    84  		ID:       "domains_on_blocklist",
    85  		Title:    "Domains On Blocklist",
    86  		Units:    "domains",
    87  		Fam:      "blocklist",
    88  		Ctx:      "pihole.domains_on_blocklist",
    89  		Priority: prioDomainsOnBlocklist,
    90  		Dims: module.Dims{
    91  			{ID: "domains_being_blocked", Name: "blocklist"},
    92  		},
    93  	}
    94  	chartBlocklistLastUpdate = module.Chart{
    95  		ID:       "blocklist_last_update",
    96  		Title:    "Blocklist Last Update",
    97  		Units:    "seconds",
    98  		Fam:      "blocklist",
    99  		Ctx:      "pihole.blocklist_last_update",
   100  		Priority: prioBlocklistLastUpdate,
   101  		Dims: module.Dims{
   102  			{ID: "blocklist_last_update", Name: "ago"},
   103  		},
   104  	}
   105  	chartUnwantedDomainsBlockingStatus = module.Chart{
   106  		ID:       "unwanted_domains_blocking_status",
   107  		Title:    "Unwanted Domains Blocking Status",
   108  		Units:    "status",
   109  		Fam:      "status",
   110  		Ctx:      "pihole.unwanted_domains_blocking_status",
   111  		Priority: prioUnwantedDomainsBlockingStatus,
   112  		Dims: module.Dims{
   113  			{ID: "blocking_status_enabled", Name: "enabled"},
   114  			{ID: "blocking_status_disabled", Name: "disabled"},
   115  		},
   116  	}
   117  )
   118  
   119  var (
   120  	chartDNSQueriesTypes = module.Chart{
   121  		ID:       "dns_queries_types",
   122  		Title:    "DNS Queries Per Type",
   123  		Units:    "percentage",
   124  		Fam:      "doQuery types",
   125  		Ctx:      "pihole.dns_queries_types",
   126  		Type:     module.Stacked,
   127  		Priority: prioDNSQueriesTypes,
   128  		Dims: module.Dims{
   129  			{ID: "A", Div: 100},
   130  			{ID: "AAAA", Div: 100},
   131  			{ID: "ANY", Div: 100},
   132  			{ID: "PTR", Div: 100},
   133  			{ID: "SOA", Div: 100},
   134  			{ID: "SRV", Div: 100},
   135  			{ID: "TXT", Div: 100},
   136  		},
   137  	}
   138  	chartDNSQueriesForwardedDestination = module.Chart{
   139  		ID:       "dns_queries_forwarded_destination",
   140  		Title:    "DNS Queries Per Destination",
   141  		Units:    "percentage",
   142  		Fam:      "queries answered by",
   143  		Ctx:      "pihole.dns_queries_forwarded_destination",
   144  		Type:     module.Stacked,
   145  		Priority: prioDNSQueriesForwardedDestination,
   146  		Dims: module.Dims{
   147  			{ID: "destination_cached", Name: "cached", Div: 100},
   148  			{ID: "destination_blocked", Name: "blocked", Div: 100},
   149  			{ID: "destination_other", Name: "other", Div: 100},
   150  		},
   151  	}
   152  )
   153  
   154  func (p *Pihole) addChartDNSQueriesType() {
   155  	chart := chartDNSQueriesTypes.Copy()
   156  	if err := p.Charts().Add(chart); err != nil {
   157  		p.Warning(err)
   158  	}
   159  }
   160  
   161  func (p *Pihole) addChartDNSQueriesForwardedDestinations() {
   162  	chart := chartDNSQueriesForwardedDestination.Copy()
   163  	if err := p.Charts().Add(chart); err != nil {
   164  		p.Warning(err)
   165  	}
   166  }