Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/usage/pkg/scheduler/reset_usage_job.go
2498 views
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
"context"
9
"fmt"
10
"time"
11
12
"github.com/gitpod-io/gitpod/common-go/log"
13
v1 "github.com/gitpod-io/gitpod/usage-api/v1"
14
"github.com/robfig/cron"
15
)
16
17
func NewResetUsageJob(schedule time.Duration, clientsConstructor ClientsConstructor) (JobSpec, error) {
18
job := &ResetUsageJobSpec{
19
clientsConstructor: clientsConstructor,
20
}
21
22
parsed, err := cron.Parse(fmt.Sprintf("@every %s", schedule.String()))
23
if err != nil {
24
return JobSpec{}, fmt.Errorf("failed to parse period into schedule: %w", err)
25
}
26
27
return JobSpec{
28
Job: job,
29
ID: "reset_usage",
30
Schedule: parsed,
31
InitialLockDuration: schedule,
32
}, nil
33
34
}
35
36
type ResetUsageJobSpec struct {
37
clientsConstructor ClientsConstructor
38
}
39
40
func (j *ResetUsageJobSpec) Run() (err error) {
41
ctx := context.Background()
42
43
log.Info("Running reset usage job.")
44
usageClient, _, err := j.clientsConstructor()
45
if err != nil {
46
return fmt.Errorf("Failed to construct reset usage job clients: %w", err)
47
}
48
49
_, err = usageClient.ResetUsage(ctx, &v1.ResetUsageRequest{})
50
if err != nil {
51
return fmt.Errorf("failed to reset usage: %w", err)
52
}
53
54
return nil
55
}
56
57