Skip to content

Commit 7532f3c

Browse files
easyCZroboquat
authored andcommitted
[usage] Setup usage reset job
1 parent 72771c0 commit 7532f3c

File tree

4 files changed

+53
-8
lines changed

4 files changed

+53
-8
lines changed

Diff for: components/usage/pkg/scheduler/reset_usage_job.go

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the GNU Affero General Public License (AGPL).
3+
// See License-AGPL.txt in the project root for license information.
4+
5+
package scheduler
6+
7+
import (
8+
"time"
9+
10+
"github.com/gitpod-io/gitpod/common-go/log"
11+
)
12+
13+
func NewResetUsageJobSpec(schedule time.Duration) (JobSpec, error) {
14+
spec := &ResetUsageJobSpec{}
15+
return NewPeriodicJobSpec(schedule, "reset_usage", WithoutConcurrentRun(spec))
16+
}
17+
18+
type ResetUsageJobSpec struct {
19+
}
20+
21+
func (j *ResetUsageJobSpec) Run() (err error) {
22+
log.Info("Running reset usage job.")
23+
24+
return nil
25+
}

Diff for: components/usage/pkg/server/server.go

+23-6
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@ import (
2727
)
2828

2929
type Config struct {
30-
// ControllerSchedule determines how frequently to run the Usage/Billing controller.
31-
// When ControllerSchedule is empty, the background controller is disabled.
32-
ControllerSchedule string `json:"controllerSchedule,omitempty"`
30+
// LedgerSchedule determines how frequently to run the Usage/Billing controller.
31+
// When LedgerSchedule is empty, the background controller is disabled.
32+
LedgerSchedule string `json:"controllerSchedule,omitempty"`
33+
34+
// ResetUsageSchedule determines how frequently to run the Usage Reset job.
35+
// When empty, the job is disabled.
36+
ResetUsageSchedule string `json:"resetUsageSchedule,omitempty"`
3337

3438
CreditsPerMinuteByWorkspaceClass map[string]float64 `json:"creditsPerMinuteByWorkspaceClass,omitempty"`
3539

@@ -117,10 +121,9 @@ func Start(cfg Config, version string) error {
117121
}
118122

119123
var schedulerJobSpecs []scheduler.JobSpec
120-
121-
if cfg.ControllerSchedule != "" {
124+
if cfg.LedgerSchedule != "" {
122125
// we do not run the controller if there is no schedule defined.
123-
schedule, err := time.ParseDuration(cfg.ControllerSchedule)
126+
schedule, err := time.ParseDuration(cfg.LedgerSchedule)
124127
if err != nil {
125128
return fmt.Errorf("failed to parse schedule duration: %w", err)
126129
}
@@ -138,6 +141,20 @@ func Start(cfg Config, version string) error {
138141
log.Info("No controller schedule specified, controller will be disabled.")
139142
}
140143

144+
if cfg.ResetUsageSchedule != "" {
145+
schedule, err := time.ParseDuration(cfg.ResetUsageSchedule)
146+
if err != nil {
147+
return fmt.Errorf("failed to parse reset usage schedule as duration: %w", err)
148+
}
149+
150+
spec, err := scheduler.NewResetUsageJobSpec(schedule)
151+
if err != nil {
152+
return fmt.Errorf("failed to setup reset usage job: %w", err)
153+
}
154+
155+
schedulerJobSpecs = append(schedulerJobSpecs, spec)
156+
}
157+
141158
sched := scheduler.New(schedulerJobSpecs...)
142159
sched.Start()
143160
defer sched.Stop()

Diff for: install/installer/pkg/components/usage/configmap.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package usage
55

66
import (
77
"fmt"
8+
"time"
89

910
"github.com/gitpod-io/gitpod/common-go/baseserver"
1011
"github.com/gitpod-io/gitpod/usage/pkg/db"
@@ -19,7 +20,8 @@ import (
1920

2021
func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
2122
cfg := server.Config{
22-
ControllerSchedule: "", // By default controller is disabled
23+
LedgerSchedule: "", // By default controller is disabled
24+
ResetUsageSchedule: time.Duration(5 * time.Minute).String(),
2325
Server: &baseserver.Configuration{
2426
Services: baseserver.ServicesConfiguration{
2527
GRPC: &baseserver.ServerConfiguration{
@@ -53,7 +55,7 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
5355

5456
if expUsageConfig != nil {
5557
if expUsageConfig.Schedule != "" {
56-
cfg.ControllerSchedule = expUsageConfig.Schedule
58+
cfg.LedgerSchedule = expUsageConfig.Schedule
5759
}
5860
if expUsageConfig.DefaultSpendingLimit != nil {
5961
cfg.DefaultSpendingLimit = *expUsageConfig.DefaultSpendingLimit

Diff for: install/installer/pkg/components/usage/configmap_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func TestConfigMap_ContainsSchedule(t *testing.T) {
2323
require.JSONEq(t,
2424
`{
2525
"controllerSchedule": "2m",
26+
"resetUsageSchedule": "5m0s",
2627
"stripeCredentialsFile": "stripe-secret/apikeys",
2728
"defaultSpendingLimit": {
2829
"forUsers": 1000000000,

0 commit comments

Comments
 (0)