1
0
Fork 0
telegraf/plugins/inputs/intel_baseband/utils.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

81 lines
1.9 KiB
Go

//go:build linux && amd64
package intel_baseband
import (
"errors"
"fmt"
"io/fs"
"os"
"path"
"strconv"
"strings"
)
type fileType int
const (
log fileType = iota
socket
)
func validatePath(pathToRead string, ft fileType) (string, error) {
if pathToRead == "" {
return "", errors.New("required path not specified")
}
cleanPath := path.Clean(pathToRead)
if (ft == log && path.Ext(cleanPath) != logFileExtension) || (ft == socket && path.Ext(cleanPath) != socketExtension) {
return "", fmt.Errorf("wrong file extension: %q", cleanPath)
}
if !path.IsAbs(cleanPath) {
return "", fmt.Errorf("path is not absolute %q", cleanPath)
}
return cleanPath, nil
}
func checkFile(pathToFile string, fileType fileType) error {
pathInfo, err := os.Lstat(pathToFile)
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
return fmt.Errorf("provided path does not exist: %q", pathToFile)
}
if errors.Is(err, fs.ErrPermission) {
return fmt.Errorf("user doesn't have enough privileges to file %q", pathToFile)
}
return fmt.Errorf("couldn't get system information of file %q: %w", pathToFile, err)
}
mode := pathInfo.Mode()
switch fileType {
case socket:
if mode&os.ModeSocket != os.ModeSocket {
return fmt.Errorf("provided path does not point to a socket file: %q", pathToFile)
}
case log:
if !(mode.IsRegular()) {
return fmt.Errorf("provided path does not point to a log file: %q", pathToFile)
}
}
return nil
}
// Replace metric name to snake case
// Example: Code Blocks -> code_blocks
func metricNameToTagName(metricName string) string {
cleanedStr := strings.Replace(strings.Replace(strings.Replace(metricName, "(", "", -1), ")", "", -1), " ", "_", -1)
return strings.ToLower(cleanedStr)
}
func logMetricDataToValue(data string) (int, error) {
value, err := strconv.Atoi(data)
if err != nil {
return 0, err
}
if value < 0 {
return 0, errors.New("metric can't be negative")
}
return value, nil
}