github.com/netdata/go.d.plugin@v0.58.1/modules/isc_dhcpd/isc_dhcpd.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package isc_dhcpd 4 5 import ( 6 _ "embed" 7 "time" 8 9 "github.com/netdata/go.d.plugin/agent/module" 10 ) 11 12 //go:embed "config_schema.json" 13 var configSchema string 14 15 func init() { 16 module.Register("isc_dhcpd", module.Creator{ 17 JobConfigSchema: configSchema, 18 Defaults: module.Defaults{ 19 UpdateEvery: 1, 20 }, 21 Create: func() module.Module { return New() }, 22 }) 23 } 24 25 type ( 26 Config struct { 27 LeasesPath string `yaml:"leases_path"` 28 Pools []PoolConfig `yaml:"pools"` 29 } 30 PoolConfig struct { 31 Name string `yaml:"name"` 32 Networks string `yaml:"networks"` 33 } 34 ) 35 36 type DHCPd struct { 37 module.Base 38 Config `yaml:",inline"` 39 40 charts *module.Charts 41 pools []ipPool 42 leasesModTime time.Time 43 collected map[string]int64 44 } 45 46 func New() *DHCPd { 47 return &DHCPd{ 48 Config: Config{ 49 LeasesPath: "/var/lib/dhcp/dhcpd.leases", 50 }, 51 52 collected: make(map[string]int64), 53 } 54 } 55 56 func (DHCPd) Cleanup() {} 57 58 func (d *DHCPd) Init() bool { 59 err := d.validateConfig() 60 if err != nil { 61 d.Errorf("config validation: %v", err) 62 return false 63 } 64 65 pools, err := d.initPools() 66 if err != nil { 67 d.Errorf("ip pools init: %v", err) 68 return false 69 } 70 d.pools = pools 71 72 charts, err := d.initCharts(pools) 73 if err != nil { 74 d.Errorf("charts init: %v", err) 75 return false 76 } 77 d.charts = charts 78 79 d.Debugf("monitoring leases file: %v", d.Config.LeasesPath) 80 d.Debugf("monitoring ip pools: %v", d.Config.Pools) 81 return true 82 } 83 84 func (d *DHCPd) Check() bool { 85 return len(d.Collect()) > 0 86 } 87 88 func (d *DHCPd) Charts() *module.Charts { 89 return d.charts 90 } 91 92 func (d *DHCPd) Collect() map[string]int64 { 93 mx, err := d.collect() 94 if err != nil { 95 d.Error(err) 96 } 97 98 if len(mx) == 0 { 99 return nil 100 } 101 102 return mx 103 }