Skip to content

Commit 921bd2c

Browse files
committed
feat: change to spec instead of status
1 parent cf661e6 commit 921bd2c

File tree

4 files changed

+53
-63
lines changed

4 files changed

+53
-63
lines changed

api/crds/manifests/usage.openmcp.cloud_mcpusages.yaml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,8 @@ spec:
4040
type: object
4141
spec:
4242
description: MCPUsageSpec defines the desired state of MCPUsage.
43-
type: object
44-
status:
45-
description: MCPUsageStatus defines the observed state of MCPUsage.
4643
properties:
4744
charging_target:
48-
description: |-
49-
INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
50-
Important: Run "make" to regenerate code after modifying this file
5145
type: string
5246
daily_usage:
5347
items:
@@ -86,6 +80,9 @@ spec:
8680
- project
8781
- workspace
8882
type: object
83+
status:
84+
description: MCPUsageStatus defines the observed state of MCPUsage.
85+
type: object
8986
type: object
9087
served: true
9188
storage: true

api/usage/v1/mcpusage_types.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,23 @@ import (
2727
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
2828

2929
// MCPUsageSpec defines the desired state of MCPUsage.
30-
type MCPUsageSpec struct{}
30+
type MCPUsageSpec struct {
31+
ChargingTarget string `json:"charging_target"`
32+
Project string `json:"project"`
33+
Workspace string `json:"workspace"`
34+
MCP string `json:"mcp"`
35+
Usage []DailyUsage `json:"daily_usage"`
36+
LastUsageCaptured metav1.Time `json:"last_usage_captured,omitempty"`
37+
MCPCreatedAt metav1.Time `json:"mcp_created_at,omitempty"`
38+
MCPDeletedAt metav1.Time `json:"mcp_deleted_at,omitempty"`
39+
40+
Message string `json:"message,omitempty"`
41+
}
3142

3243
// MCPUsageStatus defines the observed state of MCPUsage.
3344
type MCPUsageStatus struct {
3445
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
3546
// Important: Run "make" to regenerate code after modifying this file
36-
ChargingTarget string `json:"charging_target"`
37-
Project string `json:"project"`
38-
Workspace string `json:"workspace"`
39-
MCP string `json:"mcp"`
40-
Usage []DailyUsage `json:"daily_usage"`
41-
42-
LastUsageCaptured metav1.Time `json:"last_usage_captured,omitempty"`
43-
MCPCreatedAt metav1.Time `json:"mcp_created_at,omitempty"`
44-
MCPDeletedAt metav1.Time `json:"mcp_deleted_at,omitempty"`
45-
46-
Message string `json:"message,omitempty"`
4747
}
4848

4949
type DailyUsage struct {

api/usage/v1/zz_generated.deepcopy.go

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/usage/tracking.go

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -55,40 +55,33 @@ func (u *UsageTracker) CreateOrUpdateEvent(ctx context.Context, project string,
5555
if k8serrors.IsNotFound(err) { // element does not exist, we need to create it
5656
log.Debug("no mcp usage element found. Creating a new one", "objectKey", objectKey)
5757

58+
now := metav1.NewTime(time.Now().UTC())
5859
mcpUsage = v1.MCPUsage{
5960
ObjectMeta: metav1.ObjectMeta{
6061
Name: objectKey.Name,
6162
Namespace: objectKey.Namespace,
6263
},
63-
Spec: v1.MCPUsageSpec{},
64+
Spec: v1.MCPUsageSpec{
65+
Project: project,
66+
Workspace: workspace,
67+
MCP: mcp_name,
68+
Usage: []v1.DailyUsage{},
69+
LastUsageCaptured: now,
70+
MCPCreatedAt: now,
71+
},
6472
}
6573

6674
err = u.client.Create(ctx, &mcpUsage)
6775
if err != nil {
6876
return fmt.Errorf("error when creating MCPUsage resource: %w", err)
6977
}
70-
71-
now := metav1.NewTime(time.Now().UTC())
72-
mcpUsage.Status = v1.MCPUsageStatus{
73-
Project: project,
74-
Workspace: workspace,
75-
MCP: mcp_name,
76-
Usage: []v1.DailyUsage{},
77-
LastUsageCaptured: now,
78-
MCPCreatedAt: now,
79-
}
80-
81-
err = u.client.Status().Update(ctx, &mcpUsage)
82-
if err != nil {
83-
return fmt.Errorf("error when updating status for MCPUsage resource: %w", err)
84-
}
8578
} else {
8679
// check if mcpUsage element wants to be deleted
87-
if !mcpUsage.Status.MCPDeletedAt.IsZero() {
80+
if !mcpUsage.Spec.MCPDeletedAt.IsZero() {
8881
log.Debug("mcp was deleted in the past, update last usage captured and proceed")
8982
// MCP was deleted, now created with the same name, update lastUsageCapture
90-
mcpUsage.Status.LastUsageCaptured = metav1.NewTime(time.Now().UTC())
91-
err = u.client.Status().Update(ctx, &mcpUsage)
83+
mcpUsage.Spec.LastUsageCaptured = metav1.NewTime(time.Now().UTC())
84+
err = u.client.Update(ctx, &mcpUsage)
9285
if err != nil {
9386
return fmt.Errorf("error when updating status for MCPUsage resource: %w", err)
9487
}
@@ -110,22 +103,22 @@ func (u *UsageTracker) CreateOrUpdateEvent(ctx context.Context, project string,
110103
}
111104

112105
func (u *UsageTracker) UpdateChargingTarget(ctx context.Context, mcpUsage *v1.MCPUsage) error {
113-
var project, workspace, mcp_name = mcpUsage.Status.Project, mcpUsage.Status.Workspace, mcpUsage.Status.MCP
106+
var project, workspace, mcp_name = mcpUsage.Spec.Project, mcpUsage.Spec.Workspace, mcpUsage.Spec.MCP
114107
log := u.initLogger("update-charging-target", project, workspace, mcp_name)
115108

116109
chargingTarget, err := helper.ResolveChargingTarget(ctx, u.client, project, workspace, mcp_name)
117110
if err != nil {
118111
log.Error(err, fmt.Sprintf("error when resolving charging target %s %s %s", project, workspace, mcp_name))
119-
mcpUsage.Status.Message = fmt.Sprintf("error when resolving charging target: %v", err.Error())
112+
mcpUsage.Spec.Message = "error when resolving charging target"
120113
chargingTarget = "missing"
121114
}
122115
if chargingTarget == "" {
123116
chargingTarget = "missing"
124-
mcpUsage.Status.Message = "no charging target specified"
117+
mcpUsage.Spec.Message = "no charging target specified"
125118
}
126-
mcpUsage.Status.ChargingTarget = chargingTarget
119+
mcpUsage.Spec.ChargingTarget = chargingTarget
127120

128-
err = u.client.Status().Update(ctx, mcpUsage)
121+
err = u.client.Update(ctx, mcpUsage)
129122
if err != nil {
130123
return fmt.Errorf("error at updating MCPUsage status resource for %s %s %s: %w", project, workspace, mcp_name, err)
131124
}
@@ -142,11 +135,11 @@ func (u *UsageTracker) DeletionEvent(ctx context.Context, project string, worksp
142135
Name: objectKey.Name,
143136
Namespace: objectKey.Namespace,
144137
},
145-
Status: v1.MCPUsageStatus{
138+
Spec: v1.MCPUsageSpec{
146139
MCPDeletedAt: metav1.NewTime(time.Now().UTC()),
147140
},
148141
}
149-
err := u.client.Status().Patch(ctx, &mcpUsage, client.Merge)
142+
err := u.client.Patch(ctx, &mcpUsage, client.Merge)
150143
if k8serrors.IsNotFound(err) {
151144
return nil
152145
}
@@ -169,24 +162,24 @@ func (u *UsageTracker) ScheduledEvent(ctx context.Context) error {
169162

170163
var errs error
171164
for _, mcpUsage := range mcpUsages.Items {
172-
if !mcpUsage.Status.MCPDeletedAt.IsZero() {
165+
if !mcpUsage.Spec.MCPDeletedAt.IsZero() {
173166
// mcp does not exist anymore
174167
continue
175168
}
176169

177-
var project, workspace, mcp_name = mcpUsage.Status.Project, mcpUsage.Status.Workspace, mcpUsage.Status.MCP
170+
var project, workspace, mcp_name = mcpUsage.Spec.Project, mcpUsage.Spec.Workspace, mcpUsage.Spec.MCP
178171
log = log.WithValues(
179172
"project", project,
180173
"workspace", workspace,
181174
"mcp", mcp_name,
182175
)
183176

184-
usages := calculateUsage(now, mcpUsage.Status.LastUsageCaptured.Time)
185-
usages = MergeDailyUsages(usages, mcpUsage.Status.Usage)
177+
usages := calculateUsage(now, mcpUsage.Spec.LastUsageCaptured.Time)
178+
usages = MergeDailyUsages(usages, mcpUsage.Spec.Usage)
186179

187-
mcpUsage.Status.Usage = usages
188-
mcpUsage.Status.LastUsageCaptured = metav1.NewTime(now)
189-
err = u.client.Status().Update(ctx, &mcpUsage)
180+
mcpUsage.Spec.Usage = usages
181+
mcpUsage.Spec.LastUsageCaptured = metav1.NewTime(now)
182+
err = u.client.Update(ctx, &mcpUsage)
190183
errs = errors.Join(errs, err)
191184
}
192185

0 commit comments

Comments
 (0)