<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #35239 Docs PR: #39770 ## Remote trigger approach When FLEET_VULNERABILITIES_DISABLE_SCHEDULE=true, the main Fleet server registers a RemoteTriggerSchedule instead of the real vulnerability schedule. When a user runs fleetctl trigger --name=vulnerabilities: 1. Main server: RemoteTriggerSchedule.Trigger() inserts a cron_stats record with status=queued. 2. Worker server: The vulnerability schedule runs with WithTriggerPollInterval(60s), which starts a poll goroutine that checks the DB every 60s for queued records. 3. Pickup: When the poll goroutine finds a queued record, it sends the stats ID on the trigger channel (non-blocking). 4. Execution: The trigger handler acquires the lock, claims the record via ClaimCronStats (updating status to pending and instance to the actual worker ID), runs all jobs, and marks it completed. Key details: - The trigger channel carries an int: 0 for in-process triggers, >0 for DB-polled stats IDs. This lets runWithStats reuse the existing record instead of inserting a new one. - Both Schedule.Trigger() and RemoteTriggerSchedule.Trigger() treat pending and queued as conflicts to prevent duplicate runs. - Queued records expire after 2 hours via CleanupCronStats, same as pending records. - The poll goroutine only signals; it doesn't modify DB state. The handler claims when ready. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added support for remote trigger execution in vulnerability scheduling workflows. * Implemented periodic polling mechanism to detect and process externally triggered vulnerability scans. * **Bug Fixes** * Enhanced trigger status tracking to properly handle queued scan jobs. * **Improvements** * Strengthened scheduling system with improved timeout and cancellation management capabilities. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
16 lines
427 B
Go
16 lines
427 B
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/fleetdm/fleet/v4/server/fleet"
|
|
)
|
|
|
|
// TriggerCronSchedule attempts to trigger an ad-hoc run of the named cron schedule.
|
|
func (svc *Service) TriggerCronSchedule(ctx context.Context, name string) error {
|
|
if err := svc.authz.Authorize(ctx, &fleet.CronSchedules{}, fleet.ActionWrite); err != nil {
|
|
return err
|
|
}
|
|
return svc.cronSchedulesService.TriggerCronSchedule(ctx, name)
|
|
}
|