Files
bssapp/svc/pricing_parameter_sync_scheduler.go
2026-06-02 16:15:07 +03:00

61 lines
1.4 KiB
Go

package main
import (
"bssapp-backend/queries"
"context"
"database/sql"
"log"
"os"
"strconv"
"strings"
"time"
)
func startPricingParameterSyncScheduler(pgDB *sql.DB, mssqlDB *sql.DB) {
enabled := strings.TrimSpace(strings.ToLower(os.Getenv("PRICING_PARAMETER_SYNC_ENABLED")))
if enabled == "0" || enabled == "false" || enabled == "off" {
log.Println("Pricing parameter sync scheduler disabled")
return
}
intervalMin := 30
if raw := strings.TrimSpace(os.Getenv("PRICING_PARAMETER_SYNC_INTERVAL_MIN")); raw != "" {
if parsed, err := strconv.Atoi(raw); err == nil && parsed >= 5 {
intervalMin = parsed
}
}
runOnce := func(reason string) {
if pgDB == nil || mssqlDB == nil {
return
}
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Minute)
defer cancel()
res, err := queries.SyncPricingParametersFromMSSQL(ctx, mssqlDB, pgDB)
if err != nil {
log.Printf("Pricing parameter sync failed (%s): %v", reason, err)
return
}
log.Printf(
"Pricing parameter sync ok (%s): total=%d upserted=%d deactivated=%d",
reason,
res.Total,
res.Upserted,
res.Deactivated,
)
}
go func() {
// Give the startup brand sync a short head start so brand_group_sec is
// attached during the first parameter cache fill.
time.Sleep(2 * time.Second)
runOnce("startup")
ticker := time.NewTicker(time.Duration(intervalMin) * time.Minute)
defer ticker.Stop()
for range ticker.C {
runOnce("scheduled")
}
}()
}