Skip to content

Commit 54bc3e0

Browse files
committed
[usage] Setup usage reset job
1 parent 1d4de96 commit 54bc3e0

File tree

3 files changed

+52
-8
lines changed

3 files changed

+52
-8
lines changed
Lines changed: 25 additions & 0 deletions
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+
}

components/usage/pkg/server/server.go

Lines changed: 23 additions & 6 deletions
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()

install/installer/pkg/components/usage/configmap.go

Lines changed: 4 additions & 2 deletions
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

0 commit comments

Comments
 (0)