Server changes/Sonarr
This commit is contained in:
@@ -4,6 +4,7 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
@@ -20,7 +21,9 @@ import (
|
||||
"github.com/ponzischeme89/memby/server/internal/config"
|
||||
"github.com/ponzischeme89/memby/server/internal/emby"
|
||||
"github.com/ponzischeme89/memby/server/internal/library"
|
||||
"github.com/ponzischeme89/memby/server/internal/logging"
|
||||
"github.com/ponzischeme89/memby/server/internal/recommend"
|
||||
"github.com/ponzischeme89/memby/server/internal/sonarr"
|
||||
"github.com/ponzischeme89/memby/server/internal/store"
|
||||
)
|
||||
|
||||
@@ -37,7 +40,8 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
log := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}))
|
||||
logLevel := logging.ParseLevel(os.Getenv("MEMBY_LOG_LEVEL"))
|
||||
log := logging.New(os.Stdout, logLevel)
|
||||
|
||||
if err := run(log); err != nil {
|
||||
log.Error("fatal", "error", err)
|
||||
@@ -82,6 +86,34 @@ func run(log *slog.Logger) error {
|
||||
}
|
||||
|
||||
embyClient := emby.New(cfg.EmbyURL, cfg.EmbyPublicURL, cfg.ClientName, cfg.UpstreamTimeout)
|
||||
retiredSessions, err := st.TrimSessionsToLimit(ctx, cfg.MaxClientsPerUser)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, sess := range retiredSessions {
|
||||
_ = ca.Delete(ctx, cache.SessionKey(hex.EncodeToString(sess.TokenHash)))
|
||||
if err := embyClient.Logout(ctx, emby.Credentials{
|
||||
UserID: sess.EmbyUserID, Token: sess.EmbyToken,
|
||||
DeviceID: sess.DeviceID, DeviceName: sess.DeviceName,
|
||||
}); err != nil {
|
||||
log.Warn("could not retire excess emby session",
|
||||
"username", sess.Username,
|
||||
"device", sess.DeviceName,
|
||||
"error", err,
|
||||
)
|
||||
}
|
||||
}
|
||||
if len(retiredSessions) > 0 {
|
||||
log.Info("enforced per-user device allowance",
|
||||
"retired_sessions", len(retiredSessions),
|
||||
"max_clients_per_user", cfg.MaxClientsPerUser,
|
||||
)
|
||||
}
|
||||
var sonarrClient *sonarr.Client
|
||||
if cfg.SonarrURL != "" {
|
||||
sonarrClient = sonarr.New(cfg.SonarrURL, cfg.SonarrAPIKey, cfg.UpstreamTimeout)
|
||||
log.Info("sonarr integration enabled", "url", cfg.SonarrURL)
|
||||
}
|
||||
|
||||
recommender := recommend.NewEngine(embyClient, log)
|
||||
// Candidates come from the imported library when one exists, which keeps the
|
||||
@@ -99,6 +131,7 @@ func run(log *slog.Logger) error {
|
||||
Store: st,
|
||||
Cache: ca,
|
||||
Recommender: recommender,
|
||||
Sonarr: sonarrClient,
|
||||
Syncer: syncer,
|
||||
Log: log,
|
||||
})
|
||||
@@ -135,7 +168,11 @@ func run(log *slog.Logger) error {
|
||||
|
||||
errCh := make(chan error, 1)
|
||||
go func() {
|
||||
log.Info("listening", "addr", cfg.ListenAddr, "emby", cfg.EmbyURL)
|
||||
log.Info("server ready",
|
||||
"listen", cfg.ListenAddr,
|
||||
"emby", cfg.EmbyURL,
|
||||
"sync_every", cfg.SyncInterval,
|
||||
)
|
||||
if err := httpServer.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||
errCh <- err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user