add switch_legacy plugin skelton
This commit is contained in:
parent
57de67e5e2
commit
369617f4d6
|
@ -36,6 +36,7 @@ import (
|
||||||
_ "flashcat.cloud/categraf/inputs/prometheus"
|
_ "flashcat.cloud/categraf/inputs/prometheus"
|
||||||
_ "flashcat.cloud/categraf/inputs/rabbitmq"
|
_ "flashcat.cloud/categraf/inputs/rabbitmq"
|
||||||
_ "flashcat.cloud/categraf/inputs/redis"
|
_ "flashcat.cloud/categraf/inputs/redis"
|
||||||
|
_ "flashcat.cloud/categraf/inputs/switch_legacy"
|
||||||
_ "flashcat.cloud/categraf/inputs/system"
|
_ "flashcat.cloud/categraf/inputs/system"
|
||||||
_ "flashcat.cloud/categraf/inputs/tomcat"
|
_ "flashcat.cloud/categraf/inputs/tomcat"
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# # collect interval
|
||||||
|
# interval = "300s"
|
||||||
|
|
||||||
|
switch_id_label = "ident"
|
||||||
|
|
||||||
|
[mappings]
|
||||||
|
"192.168.88.160" = "switch001.bj"
|
||||||
|
"192.168.88.161" = "switch002.bj"
|
||||||
|
|
||||||
|
[[instances]]
|
||||||
|
# # interval = global.interval * interval_times
|
||||||
|
# interval_times = 1
|
||||||
|
|
||||||
|
# use global unique string to specify instance
|
||||||
|
# labels = { region="beijing" }
|
||||||
|
|
||||||
|
ips = [
|
||||||
|
# "172.16.2.1",
|
||||||
|
# "172.16.4/24",
|
||||||
|
"192.168.56.102-192.168.56.120"
|
||||||
|
]
|
||||||
|
|
||||||
|
community = "public"
|
||||||
|
|
||||||
|
# true: use gosnmp, false: use snmpwalk
|
||||||
|
use_gosnmp = true
|
||||||
|
|
||||||
|
# whether use index tag
|
||||||
|
index_tag = false
|
||||||
|
|
||||||
|
# ping timeout, unix: ms
|
||||||
|
ping_timeout_ms = 300
|
||||||
|
|
||||||
|
# ping retry count
|
||||||
|
ping_retries = 4
|
|
@ -0,0 +1,100 @@
|
||||||
|
package switch_legacy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
|
|
||||||
|
"flashcat.cloud/categraf/config"
|
||||||
|
"flashcat.cloud/categraf/inputs"
|
||||||
|
"flashcat.cloud/categraf/types"
|
||||||
|
"github.com/toolkits/pkg/container/list"
|
||||||
|
)
|
||||||
|
|
||||||
|
const inputName = "switch_legacy"
|
||||||
|
|
||||||
|
type Switch struct {
|
||||||
|
config.Interval
|
||||||
|
counter uint64
|
||||||
|
waitgrp sync.WaitGroup
|
||||||
|
Instances []*Instance `toml:"instances"`
|
||||||
|
SwitchIdLabel string `toml:"switch_id_label"`
|
||||||
|
Mappings map[string]string `toml:"mappings"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
inputs.Add(inputName, func() inputs.Input {
|
||||||
|
return &Switch{}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Switch) Prefix() string {
|
||||||
|
return inputName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Switch) Init() error {
|
||||||
|
if len(s.Instances) == 0 {
|
||||||
|
return types.ErrInstancesEmpty
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < len(s.Instances); i++ {
|
||||||
|
if err := s.Instances[i].Init(); err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
s.Instances[i].parent = s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range s.Mappings {
|
||||||
|
fmt.Println(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Switch) Drop() {}
|
||||||
|
|
||||||
|
func (s *Switch) Gather(slist *list.SafeList) {
|
||||||
|
atomic.AddUint64(&s.counter, 1)
|
||||||
|
|
||||||
|
for i := range s.Instances {
|
||||||
|
ins := s.Instances[i]
|
||||||
|
|
||||||
|
s.waitgrp.Add(1)
|
||||||
|
go func(slist *list.SafeList, ins *Instance) {
|
||||||
|
defer s.waitgrp.Done()
|
||||||
|
|
||||||
|
if ins.IntervalTimes > 0 {
|
||||||
|
counter := atomic.LoadUint64(&s.counter)
|
||||||
|
if counter%uint64(ins.IntervalTimes) != 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ins.gatherOnce(slist)
|
||||||
|
}(slist, ins)
|
||||||
|
}
|
||||||
|
|
||||||
|
s.waitgrp.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
|
type Instance struct {
|
||||||
|
Labels map[string]string `toml:"labels"`
|
||||||
|
IntervalTimes int64 `toml:"interval_times"`
|
||||||
|
IPs []string `toml:"ips"`
|
||||||
|
Community string `toml:"community"`
|
||||||
|
UseGosnmp bool `toml:"use_gosnmp"`
|
||||||
|
IndexTag bool `toml:"index_tag"`
|
||||||
|
PingTimeoutMs int64 `toml:"ping_timeout_ms"`
|
||||||
|
PingRetries int `toml:"ping_retries"`
|
||||||
|
|
||||||
|
parent *Switch
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ins *Instance) Init() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ins *Instance) gatherOnce(slist *list.SafeList) error {
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue