github.com/netdata/go.d.plugin@v0.58.1/modules/isc_dhcpd/init.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package isc_dhcpd
     4  
     5  import (
     6  	"errors"
     7  	"fmt"
     8  
     9  	"github.com/netdata/go.d.plugin/agent/module"
    10  	"github.com/netdata/go.d.plugin/pkg/iprange"
    11  )
    12  
    13  type ipPool struct {
    14  	name      string
    15  	addresses iprange.Pool
    16  }
    17  
    18  func (d DHCPd) validateConfig() error {
    19  	if d.Config.LeasesPath == "" {
    20  		return errors.New("'lease_path' parameter not set")
    21  	}
    22  	if len(d.Config.Pools) == 0 {
    23  		return errors.New("'pools' parameter not set")
    24  	}
    25  	for i, cfg := range d.Config.Pools {
    26  		if cfg.Name == "" {
    27  			return fmt.Errorf("'pools[%d]->pool.name' parameter not set", i+1)
    28  		}
    29  		if cfg.Networks == "" {
    30  			return fmt.Errorf("'pools[%d]->pool.networks' parameter not set", i+1)
    31  		}
    32  	}
    33  	return nil
    34  }
    35  
    36  func (d DHCPd) initPools() ([]ipPool, error) {
    37  	var pools []ipPool
    38  	for i, cfg := range d.Pools {
    39  		rs, err := iprange.ParseRanges(cfg.Networks)
    40  		if err != nil {
    41  			return nil, fmt.Errorf("parse pools[%d]->pool.networks '%s' ('%s'): %v", i+1, cfg.Name, cfg.Networks, err)
    42  		}
    43  		if len(rs) != 0 {
    44  			pools = append(pools, ipPool{
    45  				name:      cfg.Name,
    46  				addresses: rs,
    47  			})
    48  		}
    49  	}
    50  	return pools, nil
    51  }
    52  
    53  func (d DHCPd) initCharts(pools []ipPool) (*module.Charts, error) {
    54  	charts := &module.Charts{}
    55  
    56  	if err := charts.Add(activeLeasesTotalChart.Copy()); err != nil {
    57  		return nil, err
    58  	}
    59  
    60  	chart := poolActiveLeasesChart.Copy()
    61  	if err := charts.Add(chart); err != nil {
    62  		return nil, err
    63  	}
    64  	for _, pool := range pools {
    65  		dim := &module.Dim{
    66  			ID:   "pool_" + pool.name + "_active_leases",
    67  			Name: pool.name,
    68  		}
    69  		if err := chart.AddDim(dim); err != nil {
    70  			return nil, err
    71  		}
    72  	}
    73  
    74  	chart = poolUtilizationChart.Copy()
    75  	if err := charts.Add(chart); err != nil {
    76  		return nil, err
    77  	}
    78  	for _, pool := range pools {
    79  		dim := &module.Dim{
    80  			ID:   "pool_" + pool.name + "_utilization",
    81  			Name: pool.name,
    82  			Div:  precision,
    83  		}
    84  		if err := chart.AddDim(dim); err != nil {
    85  			return nil, err
    86  		}
    87  	}
    88  
    89  	return charts, nil
    90  }