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
136
plugins/inputs/dpdk/dpdk_utils.go
Normal file
136
plugins/inputs/dpdk/dpdk_utils.go
Normal file
|
@ -0,0 +1,136 @@
|
|||
//go:build linux
|
||||
|
||||
package dpdk
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/influxdata/telegraf/filter"
|
||||
)
|
||||
|
||||
func commandWithParams(command, params string) string {
|
||||
if params != "" {
|
||||
return command + "," + params
|
||||
}
|
||||
return command
|
||||
}
|
||||
|
||||
func stripParams(command string) string {
|
||||
index := strings.IndexRune(command, ',')
|
||||
if index == -1 {
|
||||
return command
|
||||
}
|
||||
return command[:index]
|
||||
}
|
||||
|
||||
// Since DPDK is an open-source project, developers can use their own format of params
|
||||
// so it could "/command,1,3,5,123" or "/command,userId=1, count=1234".
|
||||
// To avoid issues with different formats of params, all params are returned as single string
|
||||
func getParams(command string) string {
|
||||
index := strings.IndexRune(command, ',')
|
||||
if index == -1 {
|
||||
return ""
|
||||
}
|
||||
return command[index+1:]
|
||||
}
|
||||
|
||||
// Checks if the provided filePath contains in-memory socket
|
||||
func isInMemorySocketPath(filePath, socketPath string) bool {
|
||||
if filePath == socketPath {
|
||||
return true
|
||||
}
|
||||
|
||||
socketPathPrefix := socketPath + ":"
|
||||
if strings.HasPrefix(filePath, socketPathPrefix) {
|
||||
suffix := filePath[len(socketPathPrefix):]
|
||||
if number, err := strconv.Atoi(suffix); err == nil {
|
||||
if number > 0 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// Checks if provided path points to socket
|
||||
func isSocket(path string) error {
|
||||
pathInfo, err := os.Lstat(path)
|
||||
if os.IsNotExist(err) {
|
||||
return fmt.Errorf("provided path does not exist: %q", path)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot get system information of %q file: %w", path, err)
|
||||
}
|
||||
|
||||
if pathInfo.Mode()&os.ModeSocket != os.ModeSocket {
|
||||
return fmt.Errorf("provided path does not point to a socket file: %q", path)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Converts JSON array containing devices identifiers from DPDK response to string slice
|
||||
func jsonToArray(input []byte, command string) ([]string, error) {
|
||||
if len(input) == 0 {
|
||||
return nil, errors.New("got empty object instead of json")
|
||||
}
|
||||
|
||||
var rawMessage map[string]json.RawMessage
|
||||
err := json.Unmarshal(input, &rawMessage)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var intArray []int64
|
||||
err = json.Unmarshal(rawMessage[command], &intArray)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to unmarshal json response: %w", err)
|
||||
}
|
||||
|
||||
stringArray := make([]string, 0, len(intArray))
|
||||
for _, value := range intArray {
|
||||
stringArray = append(stringArray, strconv.FormatInt(value, 10))
|
||||
}
|
||||
|
||||
return stringArray, nil
|
||||
}
|
||||
|
||||
func removeSubset(elements []string, excludedFilter filter.Filter) []string {
|
||||
if excludedFilter == nil {
|
||||
return elements
|
||||
}
|
||||
|
||||
var result []string
|
||||
for _, element := range elements {
|
||||
if !excludedFilter.Match(element) {
|
||||
result = append(result, element)
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func uniqueValues(values []string) []string {
|
||||
in := make(map[string]bool)
|
||||
result := make([]string, 0, len(values))
|
||||
|
||||
for _, value := range values {
|
||||
if !in[value] {
|
||||
in[value] = true
|
||||
result = append(result, value)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func isEmpty(value interface{}) bool {
|
||||
return value == nil || (reflect.ValueOf(value).Kind() == reflect.Ptr && reflect.ValueOf(value).IsNil())
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue