Path: blob/main/components/usage/pkg/scheduler/reset_usage_job.go
2498 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package scheduler56import (7"context"8"fmt"9"time"1011"github.com/gitpod-io/gitpod/common-go/log"12v1 "github.com/gitpod-io/gitpod/usage-api/v1"13"github.com/robfig/cron"14)1516func NewResetUsageJob(schedule time.Duration, clientsConstructor ClientsConstructor) (JobSpec, error) {17job := &ResetUsageJobSpec{18clientsConstructor: clientsConstructor,19}2021parsed, err := cron.Parse(fmt.Sprintf("@every %s", schedule.String()))22if err != nil {23return JobSpec{}, fmt.Errorf("failed to parse period into schedule: %w", err)24}2526return JobSpec{27Job: job,28ID: "reset_usage",29Schedule: parsed,30InitialLockDuration: schedule,31}, nil3233}3435type ResetUsageJobSpec struct {36clientsConstructor ClientsConstructor37}3839func (j *ResetUsageJobSpec) Run() (err error) {40ctx := context.Background()4142log.Info("Running reset usage job.")43usageClient, _, err := j.clientsConstructor()44if err != nil {45return fmt.Errorf("Failed to construct reset usage job clients: %w", err)46}4748_, err = usageClient.ResetUsage(ctx, &v1.ResetUsageRequest{})49if err != nil {50return fmt.Errorf("failed to reset usage: %w", err)51}5253return nil54}555657