Skip to content

Commit 8e2052b

Browse files
committed
refactor: update ResolveChargingTarget to also return charging target type
1 parent 8d0259b commit 8e2052b

File tree

5 files changed

+43
-26
lines changed

5 files changed

+43
-26
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ spec:
5555
properties:
5656
charging_target:
5757
type: string
58+
charging_target_type:
59+
type: string
5860
daily_usage:
5961
items:
6062
properties:
@@ -87,6 +89,7 @@ spec:
8789
type: string
8890
required:
8991
- charging_target
92+
- charging_target_type
9093
- mcp
9194
- project
9295
- workspace

api/usage/v1/mcpusage_types.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ import (
2828

2929
// MCPUsageSpec defines the desired state of MCPUsage.
3030
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,omitempty"`
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"`
31+
ChargingTarget string `json:"charging_target"`
32+
ChargingTargetType string `json:"charging_target_type"`
33+
Project string `json:"project"`
34+
Workspace string `json:"workspace"`
35+
MCP string `json:"mcp"`
36+
Usage []DailyUsage `json:"daily_usage,omitempty"`
37+
LastUsageCaptured metav1.Time `json:"last_usage_captured,omitempty"`
38+
MCPCreatedAt metav1.Time `json:"mcp_created_at,omitempty"`
39+
MCPDeletedAt metav1.Time `json:"mcp_deleted_at,omitempty"`
3940

4041
Message string `json:"message,omitempty"`
4142
}

internal/helper/chargingtarget.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ import (
1212
)
1313

1414
const labelChargingTarget = "openmcp.cloud.sap/charging-target"
15+
const labelChargingTargetType = "openmcp.cloud.sap/charging-target-type"
1516

16-
func ResolveChargingTarget(ctx context.Context, client k8s.Client, projectName string, workspaceName string, mcpName string) (string, error) {
17+
func ResolveChargingTarget(ctx context.Context, client k8s.Client, projectName string, workspaceName string, mcpName string) (string, string, error) {
1718
var project pwcorev1alpha1.Project
1819
var workspace pwcorev1alpha1.Workspace
1920
var mcp mcpcorev1alpha1.ManagedControlPlane
@@ -22,52 +23,57 @@ func ResolveChargingTarget(ctx context.Context, client k8s.Client, projectName s
2223
Name: projectName,
2324
}, &project)
2425
if errors.IsNotFound(err) {
25-
return "", fmt.Errorf("cant find project %v: %w", projectName, err)
26+
return "", "", fmt.Errorf("cant find project %v: %w", projectName, err)
2627
} else if err != nil {
27-
return "", fmt.Errorf("error when getting project %v: %w", projectName, err)
28+
return "", "", fmt.Errorf("error when getting project %v: %w", projectName, err)
2829
}
2930

3031
err = client.Get(ctx, k8s.ObjectKey{
3132
Name: workspaceName,
3233
Namespace: fmt.Sprintf("project-%s", projectName),
3334
}, &workspace)
3435
if errors.IsNotFound(err) {
35-
return "", fmt.Errorf("cant find workspace %v: %w", workspaceName, err)
36+
return "", "", fmt.Errorf("cant find workspace %v: %w", workspaceName, err)
3637
} else if err != nil {
37-
return "", fmt.Errorf("error when getting workspace %v: %w", workspaceName, err)
38+
return "", "", fmt.Errorf("error when getting workspace %v: %w", workspaceName, err)
3839
}
3940

4041
err = client.Get(ctx, k8s.ObjectKey{
4142
Name: mcpName,
4243
Namespace: fmt.Sprintf("project-%s--ws-%s", projectName, workspaceName),
4344
}, &mcp)
4445
if errors.IsNotFound(err) {
45-
return "", fmt.Errorf("cant find mcp %v: %w", mcpName, err)
46+
return "", "", fmt.Errorf("cant find mcp %v: %w", mcpName, err)
4647
} else if err != nil {
47-
return "", fmt.Errorf("error when getting mcp %v: %w", mcpName, err)
48+
return "", "", fmt.Errorf("error when getting mcp %v: %w", mcpName, err)
4849
}
4950

5051
foundOne := false
5152
chargingTarget, ok := project.GetLabels()[labelChargingTarget]
53+
chargingTargetType := project.GetLabels()[labelChargingTargetType]
5254
if ok {
5355
foundOne = true
5456
}
5557

5658
wsChargingTarget, ok := workspace.GetLabels()[labelChargingTarget]
59+
wsChargingTargetType := workspace.GetLabels()[labelChargingTargetType]
5760
if ok {
5861
foundOne = true
5962
chargingTarget = wsChargingTarget
63+
chargingTargetType = wsChargingTargetType
6064
}
6165

6266
mcpChargingTarget, ok := mcp.GetLabels()[labelChargingTarget]
67+
mcpChargingTargetType := mcp.GetLabels()[labelChargingTargetType]
6368
if ok {
6469
foundOne = true
6570
chargingTarget = mcpChargingTarget
71+
chargingTargetType = mcpChargingTargetType
6672
}
6773

6874
if !foundOne {
69-
return "", fmt.Errorf("can't find any charging target for project(%s) workspace(%s) mcp(%s)", projectName, workspaceName, mcpName)
75+
return "", "", fmt.Errorf("can't find any charging target for project(%s) workspace(%s) mcp(%s)", projectName, workspaceName, mcpName)
7076
}
7177

72-
return chargingTarget, nil
78+
return chargingTarget, chargingTargetType, nil
7379
}

internal/helper/chargingtarget_test.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ const (
1818
WorkspaceName = "workspace"
1919
MCPName = "test-mcp"
2020

21-
ChargingTargetLabelKey = "openmcp.cloud.sap/charging-target"
22-
ChargingTarget = "12345678"
21+
ChargingTarget = "12345678"
22+
ChargingTargetType = "btp"
2323
)
2424

2525
var (
@@ -51,7 +51,8 @@ var _ = Describe("Charging Target Resolver", Ordered, func() {
5151
ObjectMeta: metav1.ObjectMeta{
5252
Name: ProjectName,
5353
Labels: map[string]string{
54-
ChargingTargetLabelKey: ChargingTarget,
54+
labelChargingTarget: ChargingTarget,
55+
labelChargingTargetType: ChargingTargetType,
5556
},
5657
},
5758
}
@@ -74,10 +75,11 @@ var _ = Describe("Charging Target Resolver", Ordered, func() {
7475

7576
It("Should resolve the charging target", func() {
7677
ctx := context.Background()
77-
resolvedChargingTarget, err := ResolveChargingTarget(ctx, k8sClient, ProjectName, WorkspaceName, MCPName)
78+
resolvedChargingTarget, resolvedChargingTargetType, err := ResolveChargingTarget(ctx, k8sClient, ProjectName, WorkspaceName, MCPName)
7879
Expect(err).ShouldNot(HaveOccurred())
7980

8081
Expect(resolvedChargingTarget).Should(Equal(ChargingTarget))
82+
Expect(resolvedChargingTargetType).Should(Equal(ChargingTargetType))
8183
})
8284

8385
It("Should resolve the workspace charging target, if set", func() {
@@ -92,14 +94,16 @@ var _ = Describe("Charging Target Resolver", Ordered, func() {
9294
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(&workspace), &workspace)).Should(Succeed())
9395

9496
workspace.SetLabels(map[string]string{
95-
ChargingTargetLabelKey: "9876543",
97+
labelChargingTarget: "9876543",
98+
labelChargingTargetType: "btp",
9699
})
97100
Expect(k8sClient.Update(ctx, &workspace)).Should(Succeed())
98101

99-
resolvedChargingTarget, err := ResolveChargingTarget(ctx, k8sClient, ProjectName, WorkspaceName, MCPName)
102+
resolvedChargingTarget, resolvedChargingTargetType, err := ResolveChargingTarget(ctx, k8sClient, ProjectName, WorkspaceName, MCPName)
100103
Expect(err).ShouldNot(HaveOccurred())
101104

102105
Expect(resolvedChargingTarget).Should(Equal("9876543"))
106+
Expect(resolvedChargingTargetType).Should(Equal("btp"))
103107
})
104108

105109
It("Should resolve the mcp charging target, if set", func() {
@@ -114,13 +118,15 @@ var _ = Describe("Charging Target Resolver", Ordered, func() {
114118
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(&mcp), &mcp)).Should(Succeed())
115119

116120
mcp.SetLabels(map[string]string{
117-
ChargingTargetLabelKey: "14689283",
121+
labelChargingTarget: "14689283",
122+
labelChargingTargetType: "btp",
118123
})
119124
Expect(k8sClient.Update(ctx, &mcp)).Should(Succeed())
120125

121-
resolvedChargingTarget, err := ResolveChargingTarget(ctx, k8sClient, ProjectName, WorkspaceName, MCPName)
126+
resolvedChargingTarget, resolvedChargingTargetType, err := ResolveChargingTarget(ctx, k8sClient, ProjectName, WorkspaceName, MCPName)
122127
Expect(err).ShouldNot(HaveOccurred())
123128

124129
Expect(resolvedChargingTarget).Should(Equal("14689283"))
130+
Expect(resolvedChargingTargetType).Should(Equal("btp"))
125131
})
126132
})

internal/usage/tracking.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ func (u *UsageTracker) UpdateChargingTarget(ctx context.Context, project string,
132132
return fmt.Errorf("error at getting MCPUsage resource for %v: %w", mcp_name, err)
133133
}
134134

135-
chargingTarget, err := helper.ResolveChargingTarget(ctx, u.client, project, workspace, mcp_name)
135+
chargingTarget, chargingTargetType, err := helper.ResolveChargingTarget(ctx, u.client, project, workspace, mcp_name)
136136
if err != nil {
137137
log.Error(err, fmt.Sprintf("error when resolving charging target %s %s %s", project, workspace, mcp_name))
138138
mcpUsage.Spec.Message = "error when resolving charging target"
@@ -143,6 +143,7 @@ func (u *UsageTracker) UpdateChargingTarget(ctx context.Context, project string,
143143
mcpUsage.Spec.Message = "no charging target specified"
144144
}
145145
mcpUsage.Spec.ChargingTarget = chargingTarget
146+
mcpUsage.Spec.ChargingTargetType = chargingTargetType
146147

147148
err = u.client.Update(ctx, &mcpUsage)
148149
if err != nil {

0 commit comments

Comments
 (0)