1
0
Fork 0
telegraf/migrations/inputs_sflow/migration.go
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

68 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)
}