scheduler

package
v0.0.0-...-19f3900 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 16, 2024 License: GPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const ContestNameMaxLen = 128

Variables

View Source
var ErrNoSuchContest = errors.New("no such contest")

Functions

This section is empty.

Types

type ContestData

type ContestData struct {
	Status     ContestStatus `gorm:"embedded;embeddedPrefix:status_"`
	LastIndex  int64
	FailedJobs int64
	Match      *MatchData `gorm:"-"`
}

func (ContestData) Clone

func (d ContestData) Clone() ContestData

type ContestFullData

type ContestFullData struct {
	Info ContestInfo
	Data ContestData
}

type ContestInfo

type ContestInfo struct {
	ID string `gorm:"primaryKey"`
	ContestSettings
	PosInQueue uint64
}

func (*ContestInfo) BuildSchedule

func (i *ContestInfo) BuildSchedule(d *ContestData) (Schedule, error)

func (ContestInfo) Clone

func (i ContestInfo) Clone() ContestInfo

func (*ContestInfo) NewData

func (i *ContestInfo) NewData() ContestData

type ContestKind

type ContestKind int
const (
	ContestUnknownKind ContestKind = iota
	ContestMatch
)

func (ContestKind) PrettyString

func (k ContestKind) PrettyString() string

type ContestSettings

type ContestSettings struct {
	Name           string
	FixedTime      *time.Duration
	TimeControl    *clock.Control `gorm:"serializer:chess"`
	OpeningBook    OpeningBook    `gorm:"embedded;embeddedPrefix:opening_"`
	ScoreThreshold int32
	TimeMargin     *time.Duration
	Kind           ContestKind
	Players        []roomapi.JobEngine `gorm:"serializer:json"`
	Match          *MatchSettings      `gorm:"-"`
}

func (ContestSettings) Clone

func (s ContestSettings) Clone() ContestSettings

func (*ContestSettings) Validate

func (s *ContestSettings) Validate() error

type ContestStatus

type ContestStatus struct {
	Kind   ContestStatusKind `gorm:"index"`
	Reason string
}

func NewStatusAborted

func NewStatusAborted(reason string) ContestStatus

func NewStatusFailed

func NewStatusFailed(reason string) ContestStatus

func NewStatusRunning

func NewStatusRunning() ContestStatus

func NewStatusSucceeded

func NewStatusSucceeded() ContestStatus

type ContestStatusKind

type ContestStatusKind int
const (
	ContestUnknownStatus ContestStatusKind = iota
	ContestRunning
	ContestSucceeded
	ContestAborted
	ContestFailed
)

func (ContestStatusKind) IsFinished

func (k ContestStatusKind) IsFinished() bool

func (ContestStatusKind) PrettyString

func (k ContestStatusKind) PrettyString() string

func (ContestStatusKind) String

func (k ContestStatusKind) String() string

type DB

type DB interface {
	ListActiveRooms(ctx context.Context) ([]roomkeeper.RoomFullData, error)
	ListRunningContestsFull(ctx context.Context) ([]ContestFullData, error)
	ListRunningJobs(ctx context.Context) ([]RunningJob, error)
	ListContests(ctx context.Context) ([]ContestFullData, error)
	CreateContest(ctx context.Context, info ContestInfo, data ContestData) error
	UpdateContest(ctx context.Context, contestID string, data ContestData) error
	GetContest(ctx context.Context, contestID string) (ContestInfo, ContestData, error)
	CreateRunningJob(ctx context.Context, job *RunningJob) error
	FinishRunningJob(ctx context.Context, data *ContestData, job *FinishedJob) error
	ListContestSucceededJobs(ctx context.Context, contestID string) ([]FinishedJob, error)
}

type FinishedJob

type FinishedJob struct {
	JobInfo
	Status     roomkeeper.JobStatus `gorm:"embedded;embeddedPrefix:status_"`
	GameResult chess.Status         `gorm:"serializer:chess"`
	Index      int64                `gorm:"index"`
	PGN        *string
}

func (FinishedJob) Clone

func (j FinishedJob) Clone() FinishedJob

type JobInfo

type JobInfo struct {
	Job       roomapi.Job `gorm:"embedded"`
	ContestID string      `gorm:"index"`
	WhiteID   int
	BlackID   int
}

func (JobInfo) Clone

func (i JobInfo) Clone() JobInfo

func (JobInfo) ScheduleKey

func (j JobInfo) ScheduleKey() ScheduleKey

type MatchData

type MatchData struct {
	FirstWin  int64 `gorm:"column:w1"`
	Draw      int64 `gorm:"column:draw"`
	SecondWin int64 `gorm:"column:w2"`
	Inverted  int64
}

func (MatchData) Clone

func (d MatchData) Clone() MatchData

func (MatchData) Played

func (d MatchData) Played() int64

func (MatchData) Status

func (d MatchData) Status() stat.Status

type MatchSettings

type MatchSettings struct {
	Games int64
}

func (MatchSettings) Clone

func (s MatchSettings) Clone() MatchSettings

type OpeningBook

type OpeningBook struct {
	Kind OpeningBookKind
	Data string
}

func (OpeningBook) Book

func (b OpeningBook) Book(rnd rand.Source) (opening.Book, error)

type OpeningBookKind

type OpeningBookKind string
const (
	OpeningsNone    OpeningBookKind = ""
	OpeningsPGNLine OpeningBookKind = "pgn_line"
	OpeningsFEN     OpeningBookKind = "fen"
	OpeningsBuiltin OpeningBookKind = "builtin"

	BuiltinBookGraham20141F = "graham_2014_1f"
	BuiltinBookGBSelect2020 = "gb_select_2020"
)

type Options

type Options struct {
	MaxRunningContests int   `toml:"max-running-contests"`
	MaxFailedJobs      int64 `toml:"max-failed-jobs"`
}

func (Options) Clone

func (o Options) Clone() Options

func (*Options) FillDefaults

func (o *Options) FillDefaults()

type RunningJob

type RunningJob struct {
	JobInfo
}

func (RunningJob) Clone

func (j RunningJob) Clone() RunningJob

type Schedule

type Schedule struct {
	// contains filtered or unexported fields
}

func NewSchedule

func NewSchedule() Schedule

func (*Schedule) Add

func (s *Schedule) Add(k ScheduleKey, delta int64) bool

func (Schedule) Clone

func (s Schedule) Clone() Schedule

func (*Schedule) Dec

func (s *Schedule) Dec(k ScheduleKey) bool

func (Schedule) Empty

func (s Schedule) Empty() bool

func (*Schedule) Inc

func (s *Schedule) Inc(k ScheduleKey)

func (*Schedule) Peek

func (s *Schedule) Peek() (ScheduleKey, bool)

type ScheduleKey

type ScheduleKey struct {
	WhiteID int
	BlackID int
}

type Scheduler

type Scheduler struct {
	// contains filtered or unexported fields
}

func New

func New(ctx context.Context, log *slog.Logger, db DB, o Options) (*Scheduler, error)

func (*Scheduler) AbortContest

func (s *Scheduler) AbortContest(contestID string, reason string)

func (*Scheduler) CreateContest

func (s *Scheduler) CreateContest(ctx context.Context, settings ContestSettings) (ContestInfo, error)

func (*Scheduler) GetContest

func (s *Scheduler) GetContest(ctx context.Context, contestID string) (ContestInfo, ContestData, error)

func (*Scheduler) IsJobAborted

func (s *Scheduler) IsJobAborted(jobID string) (string, bool)

func (*Scheduler) ListAllContests

func (s *Scheduler) ListAllContests(ctx context.Context) ([]ContestFullData, error)

func (*Scheduler) ListContestSucceededJobs

func (s *Scheduler) ListContestSucceededJobs(ctx context.Context, contestID string) ([]FinishedJob, error)

func (*Scheduler) ListRunningContests

func (s *Scheduler) ListRunningContests() []ContestFullData

func (*Scheduler) NextJob

func (s *Scheduler) NextJob(ctx context.Context) (*roomapi.Job, error)

func (*Scheduler) OnJobFinished

func (s *Scheduler) OnJobFinished(jobID string, status roomkeeper.JobStatus, game *battle.GameExt)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL