Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
114
plugins/aggregators/starlark/starlark.go
Normal file
114
plugins/aggregators/starlark/starlark.go
Normal file
|
@ -0,0 +1,114 @@
|
|||
//go:generate ../../../tools/readme_config_includer/generator
|
||||
package starlark
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
|
||||
"go.starlark.net/starlark"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/plugins/aggregators"
|
||||
common "github.com/influxdata/telegraf/plugins/common/starlark"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
var sampleConfig string
|
||||
|
||||
type Starlark struct {
|
||||
common.Common
|
||||
}
|
||||
|
||||
func (*Starlark) SampleConfig() string {
|
||||
return sampleConfig
|
||||
}
|
||||
|
||||
func (s *Starlark) Init() error {
|
||||
// Execute source
|
||||
err := s.Common.Init()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// The source should define an add function.
|
||||
err = s.AddFunction("add", &common.Metric{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// The source should define a push function.
|
||||
err = s.AddFunction("push")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// The source should define a reset function.
|
||||
err = s.AddFunction("reset")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Starlark) Add(metric telegraf.Metric) {
|
||||
parameters, found := s.GetParameters("add")
|
||||
if !found {
|
||||
s.Log.Errorf("The parameters of the add function could not be found")
|
||||
return
|
||||
}
|
||||
parameters[0].(*common.Metric).Wrap(metric)
|
||||
|
||||
_, err := s.Call("add")
|
||||
if err != nil {
|
||||
s.LogError(err)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Starlark) Push(acc telegraf.Accumulator) {
|
||||
rv, err := s.Call("push")
|
||||
if err != nil {
|
||||
s.LogError(err)
|
||||
acc.AddError(err)
|
||||
return
|
||||
}
|
||||
|
||||
switch rv := rv.(type) {
|
||||
case *starlark.List:
|
||||
iter := rv.Iterate()
|
||||
defer iter.Done()
|
||||
var v starlark.Value
|
||||
for iter.Next(&v) {
|
||||
switch v := v.(type) {
|
||||
case *common.Metric:
|
||||
m := v.Unwrap()
|
||||
acc.AddMetric(m)
|
||||
default:
|
||||
s.Log.Errorf("Invalid type returned in list: %s", v.Type())
|
||||
}
|
||||
}
|
||||
case *common.Metric:
|
||||
m := rv.Unwrap()
|
||||
acc.AddMetric(m)
|
||||
case starlark.NoneType:
|
||||
default:
|
||||
s.Log.Errorf("Invalid type returned: %T", rv)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Starlark) Reset() {
|
||||
_, err := s.Call("reset")
|
||||
if err != nil {
|
||||
s.LogError(err)
|
||||
}
|
||||
}
|
||||
|
||||
// init initializes starlark aggregator plugin
|
||||
func init() {
|
||||
aggregators.Add("starlark", func() telegraf.Aggregator {
|
||||
return &Starlark{
|
||||
Common: common.Common{
|
||||
StarlarkLoadFunc: common.LoadFunc,
|
||||
},
|
||||
}
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue