netdata/netdata

View on GitHub
src/go/collectors/go.d.plugin/modules/dnsmasq_dhcp/charts.go

Summary

Maintainability
A
1 hr
Test Coverage
// SPDX-License-Identifier: GPL-3.0-or-later

package dnsmasq_dhcp

import (
    "fmt"
    "strings"

    "github.com/netdata/netdata/go/go.d.plugin/agent/module"
)

const (
    prioDHCPRangeUtilization = module.Priority + iota
    prioDHCPRangeAllocatesLeases
    prioDHCPRanges
    prioDHCPHosts
)

var charts = module.Charts{
    {
        ID:       "dhcp_ranges",
        Title:    "Number of DHCP Ranges",
        Units:    "ranges",
        Fam:      "dhcp ranges",
        Ctx:      "dnsmasq_dhcp.dhcp_ranges",
        Type:     module.Stacked,
        Priority: prioDHCPRanges,
        Dims: module.Dims{
            {ID: "ipv4_dhcp_ranges", Name: "ipv4"},
            {ID: "ipv6_dhcp_ranges", Name: "ipv6"},
        },
    },
    {
        ID:       "dhcp_hosts",
        Title:    "Number of DHCP Hosts",
        Units:    "hosts",
        Fam:      "dhcp hosts",
        Ctx:      "dnsmasq_dhcp.dhcp_host",
        Type:     module.Stacked,
        Priority: prioDHCPHosts,
        Dims: module.Dims{
            {ID: "ipv4_dhcp_hosts", Name: "ipv4"},
            {ID: "ipv6_dhcp_hosts", Name: "ipv6"},
        },
    },
}

var (
    chartsTmpl = module.Charts{
        chartTmplDHCPRangeUtilization.Copy(),
        chartTmplDHCPRangeAllocatedLeases.Copy(),
    }
)

var (
    chartTmplDHCPRangeUtilization = module.Chart{
        ID:       "dhcp_range_%s_utilization",
        Title:    "DHCP Range utilization",
        Units:    "percentage",
        Fam:      "dhcp range utilization",
        Ctx:      "dnsmasq_dhcp.dhcp_range_utilization",
        Type:     module.Area,
        Priority: prioDHCPRangeUtilization,
        Dims: module.Dims{
            {ID: "dhcp_range_%s_utilization", Name: "used"},
        },
    }
    chartTmplDHCPRangeAllocatedLeases = module.Chart{
        ID:       "dhcp_range_%s_allocated_leases",
        Title:    "DHCP Range Allocated Leases",
        Units:    "leases",
        Fam:      "dhcp range leases",
        Ctx:      "dnsmasq_dhcp.dhcp_range_allocated_leases",
        Priority: prioDHCPRangeAllocatesLeases,
        Dims: module.Dims{
            {ID: "dhcp_range_%s_allocated_leases", Name: "leases"},
        },
    }
)

func newDHCPRangeCharts(dhcpRange string) *module.Charts {
    charts := chartsTmpl.Copy()

    for _, c := range *charts {
        c.ID = fmt.Sprintf(c.ID, dhcpRange)
        c.Labels = []module.Label{
            {Key: "dhcp_range", Value: dhcpRange},
        }
        for _, d := range c.Dims {
            d.ID = fmt.Sprintf(d.ID, dhcpRange)
        }
    }
    return charts
}

func (d *DnsmasqDHCP) addDHCPRangeCharts(dhcpRange string) {
    charts := newDHCPRangeCharts(dhcpRange)
    if err := d.Charts().Add(*charts...); err != nil {
        d.Warning(err)
    }
}

func (d *DnsmasqDHCP) removeDHCPRangeCharts(dhcpRange string) {
    p := "dhcp_range_" + dhcpRange
    for _, c := range *d.Charts() {
        if strings.HasSuffix(c.ID, p) {
            c.MarkRemove()
            c.MarkNotCreated()
        }
    }
}