logger/signoz.go

74 lines
1.6 KiB
Go

package logger
import (
"bytes"
"context"
"encoding/json"
"errors"
"net/http"
"time"
)
var (
cfgSignoz SignozConfiguration
)
// InitSignoz ...
func InitSignoz(config SignozConfiguration) {
cfgSignoz = config
}
// SendLogToSignoz ...
func SendLogToSignoz(ctx context.Context, payload SignozLogPayload) error {
if cfgSignoz.Logs.EndPoint == "" {
return errors.New("end point not found")
}
client := http.Client{}
b := generateBody(ctx, payload)
r, errRequest := http.NewRequest(http.MethodPost, cfgSignoz.Logs.EndPoint, bytes.NewBuffer(b))
if errRequest != nil {
return errRequest
}
r.Header.Set("Content-Type", "application/json")
resp, errRequest := client.Do(r)
if errRequest != nil {
return errRequest
}
defer resp.Body.Close()
return nil
}
func generateBody(ctx context.Context, info SignozLogPayload) []byte {
var (
timestamp = time.Now().Unix()
payload = logData{
SeverityNumber: info.SeverityLevel,
SeverityText: getSeverityLevelText(info.SeverityLevel),
Timestamp: timestamp,
Source: cfgSignoz.ServiceName,
Message: "",
}
)
body := map[string]interface{}{
"message": info.Message,
"level_number": info.SeverityLevel,
"level": getSeverityLevelText(info.SeverityLevel),
"request_id": "",
"data": info.Data,
}
rid := ctx.Value(CtxKeyRequestID)
if rid != nil {
body["request_id"] = rid.(string)
payload.TraceID = rid.(string)
payload.SpanID = rid.(string)
}
msg, _ := json.Marshal(body)
payload.Message = string(msg)
b, _ := json.Marshal(payload)
return b
}
func getSeverityLevelText(level int) string {
return MapStringSeverityLevel[level]
}