repeater

package
v1.9.14 Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2024 License: MIT Imports: 10 Imported by: 0

README

Повторитель задач.

Компонент для периодического повторения каких либо задач, является заменой крону. Реализует интерфейс Repeater, который доступен в контейнере объектов.

type Repeater interface {
  runner.Process
  
  AddProcess(name string, delay time.Duration, process ProcessFunc, opts ...ProcessOption) Repeater
  AddTask(task Task, opts ...ProcessOption) Repeater
  Use(middlewares ...MiddlewareFunc) Repeater
  Remove(taskName string)
}

Задачи для периодического повторения, можно добавить двумя способами:

  • через метод AddProcess, метод принимает следующие параметры:
    • name - имя задачи;
    • delay - периодичность повторения задачи, например значение 1s обозначает, что задача будет повториться каждую секунду;
    • process - метод следующей сигнатуры func(ctx context.Context) error, который будет вызываться повторителем задач.
  • через метод AddTasks, метод принимает объект, который реализует интерфейс Task.
type Task interface {
	Process(ctx context.Context) error
	Name() string
	Delay() time.Duration
}

Пакет предоставляется метод NewTask(name string, delay time.Duration, processFunc ProcessFunc), сигнатура которого идентичная методу AddProcess, этот метод возвращает стандартную реализацию интерфейса Task.

Так же, компонент сам следит за закрытием контекста из компонента Отслеживание сигнала на закрытие приложения и останавливает повторитель задач при закрытии контекста.

Объект конфигурации.
type Config struct {
	Delay time.Duration
}

Описание полей:

Поле Описание Значение по умолчанию
Delay Периодичность запуска цикла, перебора задач и их запуска, этот параметр может быть передан одним из 3-х методов:
- флаг командной строки --repeater.delay
- переменная окружения REPEATER_DELAY
- значение в конфиг файле repeater.delay
1s
Middleware.

Пакет предоставляет несколько готовых middleware, которые находятся в подпакете middleware:

  • Logger - логирует информацию о времени старта задачи, состоянии с которым завершилась задача и время работы задачи;
  • Locker - добавляет функционал для запуска только 1-ого экземпляра задач, актуально если необходимо, чтобы задачи выполнялись в единственном экземпляре;
  • Recoverer - отлавливает ошибку уровня "паника", выводит её в лог и не дает "упасть" приложению.

Documentation

Index

Constants

View Source
const (
	DelayFieldName = "repeater.delay"

	DelayDefault = time.Second
)

Variables

View Source
var Component = &app.Component{
	Dependencies: app.Components{
		logger.Component,
		configurator.Component,
		reConfiguration.Component,
		runner.Component,
	},
	Constructor: app.Constructor(func(container container.Container) error {
		return container.Provides(
			NewConfig,
			newWithConfigurator,
			func(repeater *repeater) Repeater { return repeater },
		)
	}),
	BindFlags: app.BindFlags(func(flagSet *pflag.FlagSet, container container.Container) error {
		return container.Invoke(func(config *Config) {
			flagSet.DurationVar(&config.Delay, DelayFieldName, DelayDefault, "timeout between task cycles")
		})
	}),
	Run: app.Run(func(container container.Container) error {
		return container.Invoke(func(
			repeater *repeater,
			reConfiguration reConfiguration.ReConfiguration,
			informer logger.Informer,
			runner runner.Runner,
		) error {
			reConfiguration.Registration(repeater)
			informer.Info("repeater: registration in the reConfigurator")

			return runner.AddProcesses(repeater)
		})
	}),
}

Functions

func SkipFirstRun

func SkipFirstRun(process *process) *process

Types

type Config

type Config struct {
	Delay time.Duration
}

func Configuration

func Configuration(config *Config, configurator configurator.Configurator) *Config

func NewConfig

func NewConfig() *Config

type Middleware

type Middleware interface {
	Middleware(next Task) Task
}

type MiddlewareFunc

type MiddlewareFunc func(next Task) Task

func (MiddlewareFunc) Middleware

func (middleware MiddlewareFunc) Middleware(next Task) Task

type Process

type Process interface {
	Process(ctx context.Context) error
}

type ProcessFunc

type ProcessFunc func(ctx context.Context) error

func (ProcessFunc) Process

func (process ProcessFunc) Process(ctx context.Context) error

type ProcessOption

type ProcessOption func(process *process) *process

type Repeater

type Repeater interface {
	runner.Process

	AddProcess(name string, delay time.Duration, process ProcessFunc, opts ...ProcessOption) Repeater
	AddTask(task Task, opts ...ProcessOption) Repeater
	Use(middlewares ...MiddlewareFunc) Repeater
	Remove(taskName string)
}

type Task

type Task interface {
	Process

	Name() string
	Delay() time.Duration
}

func NewTask

func NewTask(name string, delay time.Duration, processFunc ProcessFunc) Task

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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