69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
|
package inputs_sflow
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/influxdata/toml"
|
||
|
"github.com/influxdata/toml/ast"
|
||
|
|
||
|
"github.com/influxdata/telegraf/migrations"
|
||
|
"github.com/influxdata/telegraf/migrations/common"
|
||
|
)
|
||
|
|
||
|
const msg = `
|
||
|
Replacement 'inputs.netflow' will output a different metric format.
|
||
|
Please adapt your queries!
|
||
|
`
|
||
|
|
||
|
// Define "old" data structure
|
||
|
type sflow struct {
|
||
|
ServiceAddress string `toml:"service_address"`
|
||
|
ReadBufferSize string `toml:"read_buffer_size"`
|
||
|
common.InputOptions
|
||
|
}
|
||
|
|
||
|
// Migration function
|
||
|
func migrate(tbl *ast.Table) ([]byte, string, error) {
|
||
|
// Decode the old data structure
|
||
|
var old sflow
|
||
|
if err := toml.UnmarshalTable(tbl, &old); err != nil {
|
||
|
return nil, "", err
|
||
|
}
|
||
|
|
||
|
// Fill common options
|
||
|
plugin := make(map[string]interface{})
|
||
|
old.InputOptions.Migrate()
|
||
|
general, err := toml.Marshal(old.InputOptions)
|
||
|
if err != nil {
|
||
|
return nil, "", fmt.Errorf("marshalling general options failed: %w", err)
|
||
|
}
|
||
|
if err := toml.Unmarshal(general, &plugin); err != nil {
|
||
|
return nil, "", fmt.Errorf("re-unmarshalling general options failed: %w", err)
|
||
|
}
|
||
|
|
||
|
// Use a map for the new plugin and fill in the data
|
||
|
plugin["service_address"] = old.ServiceAddress
|
||
|
if old.ReadBufferSize != "" {
|
||
|
plugin["read_buffer_size"] = old.ReadBufferSize
|
||
|
}
|
||
|
|
||
|
// Create the corresponding metric configurations
|
||
|
cfg := migrations.CreateTOMLStruct("inputs", "netflow")
|
||
|
cfg.Add("inputs", "netflow", plugin)
|
||
|
|
||
|
// Marshal the new configuration
|
||
|
buf, err := toml.Marshal(cfg)
|
||
|
if err != nil {
|
||
|
return nil, "", err
|
||
|
}
|
||
|
buf = append(buf, []byte("\n")...)
|
||
|
|
||
|
// Create the new content to output
|
||
|
return buf, msg, nil
|
||
|
}
|
||
|
|
||
|
// Register the migration function for the plugin type
|
||
|
func init() {
|
||
|
migrations.AddPluginMigration("inputs.sflow", migrate)
|
||
|
}
|