69 lines
1.5 KiB
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
|
|
}
|