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 }