improve scheduler
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-01-19 14:04:01 +11:00
parent e186644db7
commit a9e522cc84
2 changed files with 18 additions and 5 deletions

View File

@@ -169,7 +169,11 @@ func MigrateSnapshotRegistry(ctx context.Context, database db.Database) (Snapsho
}
if snapshotTime.IsZero() {
suffix := strings.TrimPrefix(table, "inventory_hourly_")
if parsed, parseErr := time.Parse("2006010215", suffix); parseErr == nil {
if parsed, parseErr := time.Parse("200601021504", suffix); parseErr == nil {
// Name encoded with date+hour+minute (e.g., 15-minute cadence)
snapshotTime = parsed
} else if parsed, parseErr := time.Parse("2006010215", suffix); parseErr == nil {
// Legacy hour-only encoding
snapshotTime = parsed
} else if epoch, parseErr := strconv.ParseInt(suffix, 10, 64); parseErr == nil {
snapshotTime = time.Unix(epoch, 0)

17
main.go
View File

@@ -184,10 +184,7 @@ func main() {
cronAggregateFrequency = durationFromSeconds(s.Values.Settings.VcenterInventoryAggregateSeconds, 86400)
logger.Debug("Setting VM inventory daily aggregation cronjob frequency to", "frequency", cronAggregateFrequency)
startsAt3 := time.Now().Add(cronSnapshotFrequency)
if cronSnapshotFrequency == time.Hour {
startsAt3 = time.Now().Truncate(time.Hour).Add(time.Hour)
}
startsAt3 := alignStart(time.Now(), cronSnapshotFrequency)
job3, err := c.NewJob(
gocron.DurationJob(cronSnapshotFrequency),
gocron.NewTask(func() {
@@ -296,6 +293,18 @@ func main() {
os.Exit(0)
}
// alignStart snaps the first run to a sensible boundary (hour or 15-minute block) when possible.
func alignStart(now time.Time, freq time.Duration) time.Time {
if freq == time.Hour {
return now.Truncate(time.Hour).Add(time.Hour)
}
quarter := 15 * time.Minute
if freq%quarter == 0 {
return now.Truncate(quarter).Add(quarter)
}
return now.Add(freq)
}
func durationFromSeconds(value int, fallback int) time.Duration {
if value <= 0 {
return time.Second * time.Duration(fallback)