Merge remote-tracking branch 'origin/master'
This commit is contained in:
69
svc/translation_scheduler.go
Normal file
69
svc/translation_scheduler.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bssapp-backend/routes"
|
||||
"database/sql"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func startTranslationSyncScheduler(pgDB *sql.DB, mssqlDB *sql.DB) {
|
||||
enabled := strings.TrimSpace(strings.ToLower(os.Getenv("TRANSLATION_SYNC_ENABLED")))
|
||||
if enabled == "0" || enabled == "false" || enabled == "off" {
|
||||
log.Println("🛑 Translation sync scheduler disabled")
|
||||
return
|
||||
}
|
||||
|
||||
hour := 4
|
||||
if raw := strings.TrimSpace(os.Getenv("TRANSLATION_SYNC_HOUR")); raw != "" {
|
||||
if parsed, err := strconv.Atoi(raw); err == nil && parsed >= 0 && parsed <= 23 {
|
||||
hour = parsed
|
||||
}
|
||||
}
|
||||
|
||||
limit := 30000
|
||||
if raw := strings.TrimSpace(os.Getenv("TRANSLATION_SYNC_LIMIT")); raw != "" {
|
||||
if parsed, err := strconv.Atoi(raw); err == nil && parsed > 0 {
|
||||
limit = parsed
|
||||
}
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
next := nextRunAt(time.Now(), hour)
|
||||
wait := time.Until(next)
|
||||
log.Printf("🕓 Translation sync next run at %s (in %s)", next.Format(time.RFC3339), wait.Round(time.Second))
|
||||
time.Sleep(wait)
|
||||
|
||||
result, err := routes.PerformTranslationSync(pgDB, mssqlDB, routes.TranslationSyncOptions{
|
||||
AutoTranslate: true,
|
||||
Languages: []string{"en", "de", "it", "es", "ru", "ar"},
|
||||
Limit: limit,
|
||||
OnlyNew: true,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("❌ Translation sync failed: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
log.Printf(
|
||||
"✅ Translation sync done: seeds=%d affected=%d auto_translated=%d langs=%v",
|
||||
result.SeedCount,
|
||||
result.AffectedCount,
|
||||
result.AutoTranslated,
|
||||
result.TargetLangs,
|
||||
)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func nextRunAt(now time.Time, hour int) time.Time {
|
||||
next := time.Date(now.Year(), now.Month(), now.Day(), hour, 0, 0, 0, now.Location())
|
||||
if !next.After(now) {
|
||||
next = next.Add(24 * time.Hour)
|
||||
}
|
||||
return next
|
||||
}
|
||||
Reference in New Issue
Block a user