The scheduler monitors running jobs to make sure they are not hung. If the status of a running job does not change after a duration (the interruptThreshold in the scheduler), the scheduler kills the job. This change passes the scheduler's interruptThreshold to the job when it calls Run() on the job.
81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
||
// SPDX-License-Identifier: BUSL-1.1
|
||
|
||
package census
|
||
|
||
import (
|
||
"context"
|
||
"time"
|
||
|
||
"github.com/hashicorp/boundary/internal/db"
|
||
"github.com/hashicorp/boundary/internal/errors"
|
||
"github.com/hashicorp/boundary/internal/scheduler"
|
||
)
|
||
|
||
var (
|
||
NewCensusJobFn = newCensusJob
|
||
RunFn = runInternal
|
||
)
|
||
|
||
type censusJob struct {
|
||
r db.Reader
|
||
w db.Writer
|
||
lurEnabled bool
|
||
emitEvents bool
|
||
sessionsAgent any
|
||
activeUsersAgent any
|
||
eventCtx context.Context
|
||
}
|
||
|
||
func newCensusJob(ctx context.Context, lurEnabled bool, r db.Reader, w db.Writer) (*censusJob, error) {
|
||
const op = "censusJob.newCensusJob"
|
||
switch {
|
||
case r == nil:
|
||
return nil, errors.New(ctx, errors.InvalidParameter, op, "missing db.Reader")
|
||
case w == nil:
|
||
return nil, errors.New(ctx, errors.InvalidParameter, op, "missing db.Writer")
|
||
}
|
||
|
||
return &censusJob{
|
||
r: r,
|
||
w: w,
|
||
lurEnabled: lurEnabled,
|
||
emitEvents: false,
|
||
sessionsAgent: nil,
|
||
activeUsersAgent: nil,
|
||
eventCtx: ctx,
|
||
}, nil
|
||
}
|
||
|
||
// Status reports the job’s current status.
|
||
func (c *censusJob) Status() scheduler.JobStatus {
|
||
return scheduler.JobStatus{}
|
||
}
|
||
|
||
// Run performs the required work depending on the implementation.
|
||
// The context is used to notify the job that it should exit early.
|
||
func (c *censusJob) Run(ctx context.Context, _ time.Duration) error {
|
||
err := RunFn(ctx, c)
|
||
return err
|
||
}
|
||
|
||
func runInternal(ctx context.Context, c *censusJob) error {
|
||
return nil
|
||
}
|
||
|
||
// NextRunIn returns the duration until the next job run should be scheduled.
|
||
// Census will run every hour to ensure any interrupted jobs will be re-attempted
|
||
func (c *censusJob) NextRunIn(_ context.Context) (time.Duration, error) {
|
||
return time.Hour, nil
|
||
}
|
||
|
||
// Name is the unique name of the job.
|
||
func (c *censusJob) Name() string {
|
||
return "job_run_census"
|
||
}
|
||
|
||
// Description is the human-readable description of the job.
|
||
func (c *censusJob) Description() string {
|
||
return "Gathers and exports session usage metrics"
|
||
}
|