...

Source file src/edge-infra.dev/pkg/edge/api/middleware/activityhistory/history.go

Documentation: edge-infra.dev/pkg/edge/api/middleware/activityhistory

     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