Files
trip-planner/cmd/cron/main.go

69 lines
1.5 KiB
Go

package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"github.com/go-redis/redis/v8"
"trip-planner/internal/cache"
"trip-planner/internal/metrics"
"trip-planner/internal/yandex"
)
func main() {
redisClient := initRedis()
m := metrics.New()
apiKey := os.Getenv("YANDEX_API_KEY")
if apiKey == "" {
log.Fatal("YANDEX_API_KEY environment variable is not set")
}
yandexClient := yandex.NewClient(apiKey, yandex.WithMetrics(m))
// Define monitored stations
monitoredStations := []string{
// Add station IDs here
}
monitors := make([]*StationMonitor, 0, len(monitoredStations))
for _, stationID := range monitoredStations {
monitors = append(monitors, &StationMonitor{
ID: stationID,
Yandex: yandexClient,
Cache: cache.NewCacheStore(redisClient, m),
})
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Set up signal handling for graceful shutdown
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
log.Println("Cron service starting, checking station statuses...")
// Run the station status check
if err := ProcessAllStations(ctx, monitors); err != nil {
log.Printf("ERROR: failed to process stations: %v", err)
}
// Wait for signal to exit
<-sigChan
log.Println("Cron service shutting down...")
}
// initRedis initializes a Redis client connection.
func initRedis() *redis.Client {
rdb := redis.NewClient(&redis.Options{
Addr: os.Getenv("REDIS_ADDR"),
Password: "",
DB: 0,
})
return rdb
}