Files

36 lines
1.1 KiB
Go

package application
import (
"context"
"errors"
"time"
"git.cin.su/m/Assistant/contracts/work"
"git.cin.su/m/Assistant/modules/work/ports"
)
var (
ErrCanaryDisabled = errors.New("agent canary is disabled")
ErrCanaryNotAllowed = errors.New("agent implementation is not canary-allowed")
ErrCanaryLimitReached = errors.New("agent canary dispatch limit reached")
)
type CanaryConfig struct {
Enabled bool
ImplementationID string
MaxDispatches int
}
func ExecuteCanaryDryRun(ctx context.Context, store ports.ExecutionStore, config CanaryConfig, usedDispatches int, intent work.AgentDispatchIntent, workerID string, token work.AgentFencingToken, now time.Time, ttl time.Duration) (work.DryRunDispatch, error) {
if !config.Enabled {
return work.DryRunDispatch{}, ErrCanaryDisabled
}
if config.ImplementationID == "" || intent.ImplementationID != config.ImplementationID {
return work.DryRunDispatch{}, ErrCanaryNotAllowed
}
if config.MaxDispatches <= 0 || usedDispatches >= config.MaxDispatches {
return work.DryRunDispatch{}, ErrCanaryLimitReached
}
return ExecuteDryRunDispatch(ctx, store, intent, workerID, token, now, ttl)
}