diff --git a/internal/client/client.go b/internal/client/client.go index f3ccb79..47e7149 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -11,7 +11,7 @@ import ( "time" ) -func lineProtocol(request types.Request, config config.Config) string { +func lineProtocolPrefix(request types.Request, config config.Config) string { var builder strings.Builder builder.WriteString(config.Client.Measurement) builder.WriteString(",host=") @@ -24,40 +24,47 @@ func lineProtocol(request types.Request, config config.Config) string { builder.WriteString(request.Location) builder.WriteString(" ") - for key, value := range request.Data { - builder.WriteString(key) - builder.WriteString("=") - builder.WriteString(value) - builder.WriteString(" ") - } - - builder.WriteString(strconv.FormatInt(time.Now().UnixNano(), 10)) - return builder.String() } func GetHandler(config config.Config) types.Callback { return func(request types.Request) error { - line := lineProtocol(request, config) + prefix := lineProtocolPrefix(request, config) + timeString := strconv.FormatInt(time.Now().UnixNano(), 10) url := config.Client.Address + "/write?db=" + config.Client.DB client := &http.Client{} - req, err := http.NewRequest("POST", url, strings.NewReader(line)) - if len(config.Client.Username) != 0 && len(config.Client.Password) != 0 { - req.SetBasicAuth(config.Client.Username, config.Client.Password) - } + var builder strings.Builder - resp, err := client.Do(req) - if err != nil { - log.Println(err) - return err - } - if resp.StatusCode != 204 { - err = fmt.Errorf("influxdb responded with %d", resp.StatusCode) - log.Println(err) - return err + for key, value := range request.Data { + builder.Reset() + builder.WriteString(prefix) + + builder.WriteString(key) + builder.WriteString("=") + builder.WriteString(value) + builder.WriteString(" ") + + builder.WriteString(timeString) + + req, err := http.NewRequest("POST", url, strings.NewReader(builder.String())) + + if len(config.Client.Username) != 0 && len(config.Client.Password) != 0 { + req.SetBasicAuth(config.Client.Username, config.Client.Password) + } + + resp, err := client.Do(req) + if err != nil { + log.Println(err) + return err + } + if resp.StatusCode != 204 { + err = fmt.Errorf("influxdb responded with %d", resp.StatusCode) + log.Println(err) + return err + } } return nil