-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaudit_trail_to_logs.go
71 lines (58 loc) · 1.97 KB
/
audit_trail_to_logs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package scwaudittrail
import (
"encoding/json"
"net/http"
audit_trail "github.com/scaleway/scaleway-sdk-go/api/audit_trail/v1alpha1"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/plog"
semconv "go.opentelemetry.io/collector/semconv/v1.27.0"
"go.uber.org/zap"
)
func auditTrailEventToLogs(logger *zap.Logger, event *audit_trail.Event) plog.Logs {
ld := plog.NewLogs()
rl := ld.ResourceLogs().AppendEmpty()
sl := rl.ScopeLogs().AppendEmpty()
lr := sl.LogRecords().AppendEmpty()
if event.Resource != nil {
resourceAttrs := rl.Resource().Attributes()
resourceAttrs.PutStr("audit_trail.resource.id", event.Resource.ID)
resourceAttrs.PutStr("audit_trail.resource.type", event.Resource.Type.String())
if event.Resource.Name != nil {
resourceAttrs.PutStr("audit_trail.resource.name", *event.Resource.Name)
}
}
lr.SetTimestamp(pcommon.NewTimestampFromTime(*event.RecordedAt))
lr.SetEventName(event.MethodName)
switch event.StatusCode {
case http.StatusOK:
lr.SetSeverityText("success")
lr.SetSeverityNumber(plog.SeverityNumberInfo)
default:
lr.SetSeverityText("failed")
lr.SetSeverityNumber(plog.SeverityNumberError)
}
body, err := eventToString(event)
if err != nil {
logger.Warn("unable to decode event")
} else {
lr.Body().SetStr(body)
}
attrs := lr.Attributes()
attrs.PutStr("audit_trail.event.id", event.ID)
attrs.PutStr("audit_trail.event.locality", event.Locality)
attrs.PutStr("audit_trail.event.source_ip", event.SourceIP.String())
attrs.PutInt("audit_trail.event.status_code", int64(event.StatusCode))
attrs.PutStr("audit_trail.event.request_id", event.RequestID)
attrs.PutStr(semconv.AttributeServiceName, event.ServiceName)
if event.UserAgent != nil {
attrs.PutStr("audit_trail.event.user_agent", *event.UserAgent)
}
return ld
}
func eventToString(event *audit_trail.Event) (string, error) {
eventJSON, err := json.Marshal(event)
if err != nil {
return "", err
}
return string(eventJSON), nil
}