...
1 package activityhistory
2
3 import (
4 "context"
5 "strings"
6 "time"
7
8 "edge-infra.dev/pkg/edge/api/graph/model"
9 "edge-infra.dev/pkg/edge/api/services"
10 "edge-infra.dev/pkg/edge/bsl"
11 "edge-infra.dev/pkg/lib/fog"
12 )
13
14 const (
15 UnknownEntry = "UNKNOWN"
16 )
17
18 func New(rootOrg string, tenantSvc services.TenantService) *Activity {
19 return &Activity{rootOrg: rootOrg, tenantSvc: tenantSvc, logger: fog.New()}
20 }
21
22 func (a *Activity) init() *Activity {
23 switch {
24 case a.userCtx == nil:
25 a.user = UnknownEntry
26 a.bannerEdgeID = nil
27 a.clusterEdgeID = nil
28 default:
29 a.user = a.userCtx.Username
30 switch {
31 case a.userCtx.TenantID != "":
32 a.tenantEdgeID = a.userCtx.TenantID
33 default:
34 tenantName := bsl.GetTenant(a.rootOrg, a.userCtx.Organization)
35 tenant, err := a.tenantSvc.GetByName(context.Background(), tenantName)
36 if err != nil {
37 a.logger.Error(err, "an error occurred fetching tenant edge id", "tenant_name", tenantName)
38 } else {
39 a.tenantEdgeID = tenant.TenantEdgeID
40 }
41 }
42 if a.userCtx.BannerID != "" {
43 a.bannerEdgeID = &a.userCtx.BannerID
44 }
45 if a.userCtx.ClusterEdgeID != "" {
46 a.clusterEdgeID = &a.userCtx.ClusterEdgeID
47 }
48 }
49 if a.timestamp == "" {
50 a.timestamp = time.Now().UTC().String()
51 }
52 return a
53 }
54
55 func (a *Activity) Map(opts ...Option) *model.Action {
56 for _, opt := range opts {
57 opt(a)
58 }
59 a.init()
60 return &model.Action{
61 Action: a.action,
62 Time: a.timestamp,
63 Status: model.ActionStatus(strings.ToUpper(a.status)),
64 TenantEdgeID: a.tenantEdgeID,
65 BannerEdgeID: a.bannerEdgeID,
66 ClusterEdgeID: a.clusterEdgeID,
67 Username: a.user,
68 Input: a.input,
69 BatchID: a.batchID,
70 Error: a.err,
71 }
72 }
73
View as plain text