feat: publish standalone worker
Separate worker packaging and service lifecycle from the control plane.
Этот коммит содержится в:
69
config/credis/redis.go
Обычный файл
69
config/credis/redis.go
Обычный файл
@@ -0,0 +1,69 @@
|
||||
// Package credis provides functionality.
|
||||
package credis
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
"github.com/gorilla/sessions"
|
||||
"github.com/rbcervilla/redisstore/v8"
|
||||
|
||||
_ "rsgit.ru/rsmon/rsmon/config/env" // Import to ensure .env is loaded before reading env vars
|
||||
)
|
||||
|
||||
// Redis provides functionality.
|
||||
var Redis *redis.Client
|
||||
|
||||
// Store provides functionality.
|
||||
var Store *redisstore.RedisStore
|
||||
|
||||
func envOrDefault(key, defaultVal string) string {
|
||||
if v := os.Getenv(key); v != "" {
|
||||
return v
|
||||
}
|
||||
return defaultVal
|
||||
}
|
||||
|
||||
// Init provides functionality.
|
||||
func Init() {
|
||||
host := envOrDefault("REDIS_HOST", "localhost")
|
||||
portStr := envOrDefault("REDIS_PORT", "6379")
|
||||
password := os.Getenv("REDIS_PASSWORD")
|
||||
dbStr := envOrDefault("REDIS_DATABASE", "0")
|
||||
|
||||
port, _ := strconv.Atoi(portStr)
|
||||
database, _ := strconv.Atoi(dbStr)
|
||||
|
||||
options := redis.Options{
|
||||
Addr: host + ":" + strconv.Itoa(port),
|
||||
DB: database,
|
||||
}
|
||||
if password != "" {
|
||||
options.Password = password
|
||||
}
|
||||
Redis = redis.NewClient(&options)
|
||||
|
||||
isTest := os.Getenv("RSMON_ENV") == "test" || os.Getenv("GO_ENV") == "test" || os.Getenv("CI") == "true"
|
||||
|
||||
var err error
|
||||
Store, err = redisstore.NewRedisStore(context.Background(), Redis)
|
||||
if err != nil {
|
||||
if isTest {
|
||||
log.Println("Warning: Redis not available in test mode, sessions will not work")
|
||||
Store = nil
|
||||
return
|
||||
}
|
||||
log.Fatal("failed to create redis store: ", err)
|
||||
}
|
||||
|
||||
Store.KeyPrefix("session_")
|
||||
Store.Options(sessions.Options{
|
||||
Path: "/",
|
||||
MaxAge: 86400 * 60,
|
||||
})
|
||||
|
||||
log.Printf("Redis connected: %s:%d db=%d", host, port, database)
|
||||
}
|
||||
Ссылка в новой задаче
Block a user