Files
zurg/internal/app.go
Ben Sarmiento 755b50c82f Rename struct
2024-04-26 14:28:19 +02:00

101 lines
3.2 KiB
Go

package internal
import (
"fmt"
netHttp "net/http"
"os"
"time"
// _ "net/http/pprof" // Register pprof
"github.com/debridmediamanager/zurg/internal/config"
"github.com/debridmediamanager/zurg/internal/handlers"
"github.com/debridmediamanager/zurg/internal/torrent"
"github.com/debridmediamanager/zurg/internal/universal"
"github.com/debridmediamanager/zurg/internal/version"
"github.com/debridmediamanager/zurg/pkg/http"
"github.com/debridmediamanager/zurg/pkg/logutil"
"github.com/debridmediamanager/zurg/pkg/premium"
"github.com/debridmediamanager/zurg/pkg/realdebrid"
"github.com/debridmediamanager/zurg/pkg/utils"
"github.com/go-chi/chi/v5"
"github.com/panjf2000/ants/v2"
"go.uber.org/zap/zapcore"
)
func MainApp(configPath string) {
utils.EnsureDirExists("logs") // Ensure the logs directory exists
logPath := fmt.Sprintf("logs/zurg-%s.log", time.Now().Format(time.DateOnly))
log := logutil.NewLogger(logPath)
zurglog := log.Named("zurg") // logger for this main function
zurglog.Debugf("PID: %d", os.Getpid())
zurglog.Infof("Version: %s", version.GetVersion())
zurglog.Infof("GitCommit: %s", version.GetGitCommit())
zurglog.Infof("BuiltAt: %s", version.GetBuiltAt())
if log.Level() == zapcore.DebugLevel {
zurglog.Infof("Debug logging is enabled; if you are not debugging please set LOG_LEVEL=info in your environment")
}
config, configErr := config.LoadZurgConfig(configPath, log.Named("config"))
if configErr != nil {
zurglog.Errorf("Config failed to load: %v", configErr)
os.Exit(1)
}
apiClient := http.NewHTTPClient(
config.GetToken(),
config.GetRetriesUntilFailed()*10,
config.GetApiTimeoutSecs(),
false,
config,
log.Named("api_client"),
)
unrestrictClient := http.NewHTTPClient(
config.GetToken(),
config.GetRetriesUntilFailed(),
config.GetDownloadTimeoutSecs(),
false,
config,
log.Named("unrestrict_client"),
)
downloadClient := http.NewHTTPClient(config.GetToken(), config.GetRetriesUntilFailed(), config.GetDownloadTimeoutSecs(), true, config, log.Named("download_client"))
api := realdebrid.NewRealDebrid(apiClient, unrestrictClient, downloadClient, config, log.Named("realdebrid"))
premium.MonitorPremiumStatus(api, zurglog)
workerPool, err := ants.NewPool(config.GetNumOfWorkers())
if err != nil {
zurglog.Errorf("Failed to create worker pool: %v", err)
os.Exit(1)
}
defer workerPool.Release()
utils.EnsureDirExists("data") // Ensure the data directory exists
torrentMgr := torrent.NewTorrentManager(config, api, workerPool, log.Named("manager"))
downloader := universal.NewDownloader(downloadClient)
router := chi.NewRouter()
handlers.AttachHandlers(router, downloader, torrentMgr, config, api, workerPool, log.Named("router"))
// go func() {
// if err := netHttp.ListenAndServe(":6060", nil); err != nil && err != netHttp.ErrServerClosed {
// zurglog.Errorf("Failed to start pprof: %v", err)
// os.Exit(1)
// }
// }()
addr := fmt.Sprintf("%s:%s", config.GetHost(), config.GetPort())
zurglog.Infof("Starting server on %s", addr)
if err := netHttp.ListenAndServe(addr, router); err != nil && err != netHttp.ErrServerClosed {
zurglog.Errorf("Failed to start server: %v", err)
os.Exit(1)
}
}