package activityhistory import ( "context" "strings" "time" "edge-infra.dev/pkg/edge/api/graph/model" "edge-infra.dev/pkg/edge/api/services" "edge-infra.dev/pkg/edge/bsl" "edge-infra.dev/pkg/lib/fog" ) const ( UnknownEntry = "UNKNOWN" ) func New(rootOrg string, tenantSvc services.TenantService) *Activity { return &Activity{rootOrg: rootOrg, tenantSvc: tenantSvc, logger: fog.New()} } func (a *Activity) init() *Activity { switch { case a.userCtx == nil: a.user = UnknownEntry a.bannerEdgeID = nil a.clusterEdgeID = nil default: a.user = a.userCtx.Username switch { case a.userCtx.TenantID != "": a.tenantEdgeID = a.userCtx.TenantID default: tenantName := bsl.GetTenant(a.rootOrg, a.userCtx.Organization) tenant, err := a.tenantSvc.GetByName(context.Background(), tenantName) if err != nil { a.logger.Error(err, "an error occurred fetching tenant edge id", "tenant_name", tenantName) } else { a.tenantEdgeID = tenant.TenantEdgeID } } if a.userCtx.BannerID != "" { a.bannerEdgeID = &a.userCtx.BannerID } if a.userCtx.ClusterEdgeID != "" { a.clusterEdgeID = &a.userCtx.ClusterEdgeID } } if a.timestamp == "" { a.timestamp = time.Now().UTC().String() } return a } func (a *Activity) Map(opts ...Option) *model.Action { for _, opt := range opts { opt(a) } a.init() return &model.Action{ Action: a.action, Time: a.timestamp, Status: model.ActionStatus(strings.ToUpper(a.status)), TenantEdgeID: a.tenantEdgeID, BannerEdgeID: a.bannerEdgeID, ClusterEdgeID: a.clusterEdgeID, Username: a.user, Input: a.input, BatchID: a.batchID, Error: a.err, } }