This commit is contained in:
@@ -2,6 +2,7 @@ package tasks
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"time"
|
||||
"vctp/db"
|
||||
|
||||
@@ -30,6 +31,39 @@ func (c *CronTracker) ClearAllInProgress(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// ClearStale resets in_progress for a specific job if it has been running longer than maxAge.
|
||||
func (c *CronTracker) ClearStale(ctx context.Context, job string, maxAge time.Duration) error {
|
||||
if err := c.ensureTable(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
driver := strings.ToLower(c.db.DB().DriverName())
|
||||
var query string
|
||||
switch driver {
|
||||
case "sqlite":
|
||||
query = `
|
||||
UPDATE cron_status
|
||||
SET in_progress = FALSE
|
||||
WHERE job_name = ?
|
||||
AND in_progress = TRUE
|
||||
AND started_at > 0
|
||||
AND (strftime('%s','now') - started_at) > ?
|
||||
`
|
||||
case "pgx", "postgres":
|
||||
query = `
|
||||
UPDATE cron_status
|
||||
SET in_progress = FALSE
|
||||
WHERE job_name = $1
|
||||
AND in_progress = TRUE
|
||||
AND started_at > 0
|
||||
AND (EXTRACT(EPOCH FROM now())::BIGINT - started_at) > $2
|
||||
`
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
_, err := c.db.DB().ExecContext(ctx, query, job, int64(maxAge.Seconds()))
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *CronTracker) ensureTable(ctx context.Context) error {
|
||||
conn := c.db.DB()
|
||||
driver := conn.DriverName()
|
||||
|
||||
Reference in New Issue
Block a user