diff --git a/cmd/service-splitarea/main.go b/cmd/service-splitarea/main.go index aeb6ff4..c79f716 100644 --- a/cmd/service-splitarea/main.go +++ b/cmd/service-splitarea/main.go @@ -20,7 +20,7 @@ import ( "weatherstation/internal/database" ) -// Service that, at each hour, processes previous hour's :30 radar tile for z/y/x, +// Service that, at hh:45 each hour, processes current hour's :30 radar tile for z/y/x, // splits a user region into 0.1° grid, averages dBZ (linear domain), fetches Open‑Meteo // hourly variables at grid centers, and writes a CSV. @@ -177,7 +177,7 @@ func fetchMeteo(ctx context.Context, client *http.Client, lon, lat float64, utcH return &mv, nil } -// job executes the split+augment for a specific local time (CST) and fixed minute=30 of previous hour. +// job executes the split+augment for a specific local time (CST) and fixed minute=30 of the same hour. func job(ctx context.Context, z, y, x int, bounds string, tzOffset int, outDir string, runAt time.Time) error { loc, _ := time.LoadLocation("Asia/Shanghai") if loc == nil { @@ -185,8 +185,8 @@ func job(ctx context.Context, z, y, x int, bounds string, tzOffset int, outDir s } runAt = runAt.In(loc) - // Previous hour's :30 - targetLocal := runAt.Truncate(time.Hour).Add(-1 * time.Hour).Add(30 * time.Minute) + // Current hour's :30 + targetLocal := runAt.Truncate(time.Hour).Add(30 * time.Minute) // Fetch tile rec, err := getRadarTileAt(ctx, z, y, x, targetLocal) @@ -398,14 +398,17 @@ func main() { return } - // Hourly scheduler: run at each hour boundary for previous hour :30 + // Scheduler: run hourly at hh:45 for current hour's :30 radar tile loc, _ := time.LoadLocation("Asia/Shanghai") if loc == nil { loc = time.FixedZone("CST", 8*3600) } for { now := time.Now().In(loc) - runAt := now.Truncate(time.Hour).Add(time.Hour) // next hour + runAt := now.Truncate(time.Hour).Add(45 * time.Minute) + if now.After(runAt) { + runAt = runAt.Add(time.Hour) + } time.Sleep(time.Until(runAt)) // execute if err := job(ctx, *z, *y, *x, *b, *tzOffset, *outDir, runAt); err != nil {