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

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package pihole
     4  
     5  type piholeMetrics struct {
     6  	summary    *summaryRawMetrics   // ?summary
     7  	queryTypes *queryTypesMetrics   // ?getQueryTypes
     8  	forwarders *forwardDestinations // ?getForwardedDestinations
     9  }
    10  
    11  func (p piholeMetrics) hasSummary() bool {
    12  	return p.summary != nil
    13  }
    14  func (p piholeMetrics) hasQueryTypes() bool {
    15  	return p.queryTypes != nil
    16  }
    17  func (p piholeMetrics) hasForwarders() bool {
    18  	return p.forwarders != nil && len(p.forwarders.Destinations) > 0
    19  }
    20  
    21  type piholeAPIVersion struct {
    22  	Version int
    23  }
    24  
    25  type summaryRawMetrics struct {
    26  	DomainsBeingBlocked int64   `json:"domains_being_blocked"`
    27  	DNSQueriesToday     int64   `json:"dns_queries_today"`
    28  	AdsBlockedToday     int64   `json:"ads_blocked_today"`
    29  	AdsPercentageToday  float64 `json:"ads_percentage_today"`
    30  	UniqueDomains       int64   `json:"unique_domains"`
    31  	QueriesForwarded    int64   `json:"queries_forwarded"`
    32  	QueriesCached       int64   `json:"queries_cached"`
    33  	ClientsEverSeen     int64   `json:"clients_ever_seen"`
    34  	UniqueClients       int64   `json:"unique_clients"`
    35  	DNSQueriesAllTypes  int64   `json:"dns_queries_all_types"`
    36  	ReplyNODATA         int64   `json:"reply_NODATA"`
    37  	ReplyNXDOMAIN       int64   `json:"reply_NXDOMAIN"`
    38  	ReplyCNAME          int64   `json:"reply_CNAME"`
    39  	ReplyIP             int64   `json:"reply_IP"`
    40  	PrivacyLevel        int64   `json:"privacy_level"`
    41  	Status              string  `json:"status"`
    42  	GravityLastUpdated  struct {
    43  		// gravity.list has been removed (https://github.com/pi-hole/pi-hole/pull/2871#issuecomment-520251509)
    44  		FileExists bool `json:"file_exists"`
    45  		Absolute   *int64
    46  	} `json:"gravity_last_updated"`
    47  }
    48  
    49  type queryTypesMetrics struct {
    50  	Types struct {
    51  		A    float64 `json:"A (IPv4)"`
    52  		AAAA float64 `json:"AAAA (IPv6)"`
    53  		ANY  float64
    54  		SRV  float64
    55  		SOA  float64
    56  		PTR  float64
    57  		TXT  float64
    58  	} `json:"querytypes"`
    59  }
    60  
    61  // https://github.com/pi-hole/FTL/blob/6f69dd5b4ca60f925d68bfff3869350e934a7240/src/api/api.c#L474
    62  type forwardDestinations struct {
    63  	Destinations map[string]float64 `json:"forward_destinations"`
    64  }
    65  
    66  //type (
    67  //	item map[string]int64
    68  //
    69  //	topClients struct {
    70  //		Sources item `json:"top_sources"`
    71  //	}
    72  //	topItems struct {
    73  //		TopQueries item `json:"top_queries"`
    74  //		TopAds     item `json:"top_ads"`
    75  //	}
    76  //)
    77  //
    78  //func (i *item) UnmarshalJSON(data []byte) error {
    79  //	if isEmptyArray(data) {
    80  //		return nil
    81  //	}
    82  //	type plain *item
    83  //	return json.Unmarshal(data, (plain)(i))
    84  //}