51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
package influx
|
|
|
|
import (
|
|
"context"
|
|
"crypto/tls"
|
|
"fmt"
|
|
"log/slog"
|
|
"strings"
|
|
|
|
"github.com/influxdata/influxdb-client-go/v2"
|
|
|
|
"github.com/aceberg/WatchYourLAN/internal/check"
|
|
"github.com/aceberg/WatchYourLAN/internal/models"
|
|
)
|
|
|
|
// Add - write data to InfluxDB2
|
|
func Add(appConfig models.Conf, oneHist models.Host) {
|
|
var ctx context.Context
|
|
|
|
client := influxdb2.NewClientWithOptions(appConfig.InfluxAddr, appConfig.InfluxToken,
|
|
influxdb2.DefaultOptions().
|
|
SetUseGZip(true).
|
|
SetTLSConfig(&tls.Config{
|
|
InsecureSkipVerify: appConfig.InfluxSkipTLS,
|
|
}))
|
|
|
|
ctx = context.Background()
|
|
ping, err := client.Ping(ctx)
|
|
if ping {
|
|
writeAPI := client.WriteAPIBlocking(appConfig.InfluxOrg, appConfig.InfluxBucket)
|
|
|
|
// Escape special characters in strings
|
|
oneHist.Name = strings.ReplaceAll(oneHist.Name, " ", "\\ ")
|
|
oneHist.Name = strings.ReplaceAll(oneHist.Name, ",", "\\,")
|
|
oneHist.Name = strings.ReplaceAll(oneHist.Name, "=", "\\=")
|
|
if oneHist.Name == "" {
|
|
oneHist.Name = "unknown"
|
|
}
|
|
|
|
line := fmt.Sprintf("WatchYourLAN,IP=%s,iface=%s,name=%s,mac=%s,known=%d state=%d", oneHist.IP, oneHist.Iface, oneHist.Name, oneHist.Mac, oneHist.Known, oneHist.Now)
|
|
// slog.Debug("Writing to InfluxDB", "line", line)
|
|
|
|
err = writeAPI.WriteRecord(context.Background(), line)
|
|
check.IfError(err)
|
|
} else {
|
|
slog.Error("Can't connect to InfluxDB server")
|
|
check.IfError(err)
|
|
}
|
|
|
|
client.Close()
|
|
}
|