Skip to content

Commit b966efd

Browse files
committed
[usage] Add usageAttributionID to WorksapceInstance model (in go)
1 parent 6afe081 commit b966efd

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

components/usage/pkg/db/dbtest/workspace_instance.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,15 @@ func NewWorkspaceInstance(t *testing.T, instance db.WorkspaceInstance) db.Worksp
5959
status = instance.Status
6060
}
6161

62+
attributionID := db.NewAttributionID("user", uuid.New().String())
63+
if instance.UsageAttributionID != "" {
64+
attributionID = instance.UsageAttributionID
65+
}
66+
6267
return db.WorkspaceInstance{
6368
ID: id,
6469
WorkspaceID: workspaceID,
70+
UsageAttributionID: attributionID,
6571
Configuration: nil,
6672
Region: "",
6773
ImageBuildInfo: sql.NullString{},

components/usage/pkg/db/workspace_instance.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/google/uuid"
1212
"gorm.io/datatypes"
1313
"gorm.io/gorm"
14+
"strings"
1415
"time"
1516
)
1617

@@ -23,6 +24,7 @@ type WorkspaceInstance struct {
2324
IdeURL string `gorm:"column:ideUrl;type:varchar;size:255;" json:"ideUrl"`
2425
WorkspaceBaseImage string `gorm:"column:workspaceBaseImage;type:varchar;size:255;" json:"workspaceBaseImage"`
2526
WorkspaceImage string `gorm:"column:workspaceImage;type:varchar;size:255;" json:"workspaceImage"`
27+
UsageAttributionID AttributionID `gorm:"column:usageAttributionId;type:varchar;size:60;" json:"usageAttributionId"`
2628

2729
CreationTime VarcharTime `gorm:"column:creationTime;type:varchar;size:255;" json:"creationTime"`
2830
StartedTime VarcharTime `gorm:"column:startedTime;type:varchar;size:255;" json:"startedTime"`
@@ -87,3 +89,20 @@ func ListWorkspaceInstancesInRange(ctx context.Context, conn *gorm.DB, from, to
8789

8890
return instances, nil
8991
}
92+
93+
func NewAttributionID(entity, identifier string) AttributionID {
94+
return AttributionID(fmt.Sprintf("%s:%s", entity, identifier))
95+
}
96+
97+
// AttributionID consists of an entity, and an identifier in the form:
98+
// <entity>:<identifier>, e.g. team:a7dcf253-f05e-4dcf-9a47-cf8fccc74717
99+
type AttributionID string
100+
101+
func (a AttributionID) Values() (entity string, identifier string) {
102+
tokens := strings.Split(string(a), ":")
103+
if len(tokens) != 2 {
104+
return "", ""
105+
}
106+
107+
return tokens[0], tokens[1]
108+
}

0 commit comments

Comments
 (0)