From 573cfa1436dd35a942cc3c386f142b91828ea4eb Mon Sep 17 00:00:00 2001 From: Ben Sarmiento Date: Sun, 28 Jan 2024 20:20:33 +0100 Subject: [PATCH] Add utils --- internal/app.go | 2 +- internal/handlers/home.go | 42 +++++++++++++++++++++++++++++++++---- internal/handlers/router.go | 32 ++++++++++++++++++---------- internal/torrent/manager.go | 4 ++-- internal/torrent/refresh.go | 4 ++-- internal/torrent/repair.go | 2 +- 6 files changed, 65 insertions(+), 21 deletions(-) diff --git a/internal/app.go b/internal/app.go index f15aa77..b2e0596 100644 --- a/internal/app.go +++ b/internal/app.go @@ -100,7 +100,7 @@ func MainApp(configPath string) { downloader := universal.NewDownloader(downloadClient) router := chi.NewRouter() - handlers.AttachHandlers(router, downloader, torrentMgr, config, rd, log.Named("router")) + handlers.AttachHandlers(router, downloader, torrentMgr, config, rd, workerPool, refreshPool, repairPool, log.Named("router")) // go func() { // if err := netHttp.ListenAndServe(":6060", nil); err != nil && err != netHttp.ErrServerClosed { diff --git a/internal/handlers/home.go b/internal/handlers/home.go index fbe04c2..38bcb26 100644 --- a/internal/handlers/home.go +++ b/internal/handlers/home.go @@ -175,8 +175,8 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) { %s - Number of Workers - %d + Workers + %d running / %d free / %d total Refresh Every... @@ -220,7 +220,7 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) { Network Buffer Size - %d + %d bytes Serve From Rclone @@ -238,6 +238,15 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) { On Library Update %s + + Utilities + + + + + + + ` out = fmt.Sprintf(out, @@ -273,7 +282,9 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) { strings.Replace(response.Config.Token, response.Config.Token[len(response.Config.Token)-48:], "*****", 1), response.Config.GetHost(), response.Config.GetPort(), - response.Config.GetNumOfWorkers(), + zr.workerPool.Running(), + zr.workerPool.Free(), + zr.workerPool.Cap(), response.Config.GetRefreshEverySecs(), response.Config.EnableRetainRDTorrentName(), response.Config.EnableRetainFolderNameExtension(), @@ -294,6 +305,29 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) { fmt.Fprint(resp, out) } +func (zr *Handlers) handleRebootWorkerPool(resp http.ResponseWriter, req *http.Request) { + // zr.workerPool.Release() + zr.workerPool.Reboot() + zr.log.Infof("Rebooted worker pool") + fmt.Fprint(resp, "Rebooted worker pool, please close this window") +} + +func (zr *Handlers) handleRebootRefreshPool(resp http.ResponseWriter, req *http.Request) { + zr.refreshPool.Release() + // zr.refreshPool.Reboot() + // zr.torMgr.StartRefreshJob() + zr.log.Infof("Rebooted refresh pool") + fmt.Fprint(resp, "Rebooted refresh pool, please close this window") +} + +func (zr *Handlers) handleRebootRepairPool(resp http.ResponseWriter, req *http.Request) { + zr.repairPool.Release() + // zr.repairPool.Reboot() + // zr.torMgr.StartRepairJob() + zr.log.Infof("Rebooted repair pool") + fmt.Fprint(resp, "Rebooted repair pool, please close this window") +} + func bToMb(b uint64) uint64 { return b / 1024 / 1024 } diff --git a/internal/handlers/router.go b/internal/handlers/router.go index 66f82d4..7b2148b 100644 --- a/internal/handlers/router.go +++ b/internal/handlers/router.go @@ -16,14 +16,18 @@ import ( "github.com/debridmediamanager/zurg/pkg/logutil" "github.com/debridmediamanager/zurg/pkg/realdebrid" "github.com/go-chi/chi/v5" + "github.com/panjf2000/ants/v2" ) type Handlers struct { - downloader *universal.Downloader - torMgr *torrent.TorrentManager - cfg config.ConfigInterface - api *realdebrid.RealDebrid - log *logutil.Logger + downloader *universal.Downloader + torMgr *torrent.TorrentManager + cfg config.ConfigInterface + api *realdebrid.RealDebrid + workerPool *ants.Pool + refreshPool *ants.Pool + repairPool *ants.Pool + log *logutil.Logger } func init() { @@ -32,13 +36,16 @@ func init() { chi.RegisterMethod("MOVE") } -func AttachHandlers(router *chi.Mux, downloader *universal.Downloader, torMgr *torrent.TorrentManager, cfg config.ConfigInterface, api *realdebrid.RealDebrid, log *logutil.Logger) { +func AttachHandlers(router *chi.Mux, downloader *universal.Downloader, torMgr *torrent.TorrentManager, cfg config.ConfigInterface, api *realdebrid.RealDebrid, workerPool, refreshPool, repairPool *ants.Pool, log *logutil.Logger) { hs := &Handlers{ - downloader: downloader, - torMgr: torMgr, - cfg: cfg, - api: api, - log: log, + downloader: downloader, + torMgr: torMgr, + cfg: cfg, + api: api, + workerPool: workerPool, + refreshPool: refreshPool, + repairPool: repairPool, + log: log, } if cfg.GetUsername() != "" { @@ -47,6 +54,9 @@ func AttachHandlers(router *chi.Mux, downloader *universal.Downloader, torMgr *t router.Use(hs.options) router.Get("/", hs.handleHome) + router.Get("/reboot/worker", hs.handleRebootWorkerPool) + router.Get("/reboot/refresh", hs.handleRebootRefreshPool) + router.Get("/reboot/repair", hs.handleRebootRepairPool) // version router.Get(fmt.Sprintf("/{mountType}/%s", version.FILE), hs.handleVersionFile) router.Head(fmt.Sprintf("/{mountType}/%s", version.FILE), hs.handleCheckVersionFile) diff --git a/internal/torrent/manager.go b/internal/torrent/manager.go index be04d14..51e7c38 100644 --- a/internal/torrent/manager.go +++ b/internal/torrent/manager.go @@ -66,8 +66,8 @@ func NewTorrentManager(cfg config.ConfigInterface, api *realdebrid.RealDebrid, w t.mountDownloads() t.refreshTorrents() t.SetNewLatestState(t.getCurrentState()) - t.startRefreshJob() - t.startRepairJob() + t.StartRefreshJob() + t.StartRepairJob() return t } diff --git a/internal/torrent/refresh.go b/internal/torrent/refresh.go index 547226c..719d36b 100644 --- a/internal/torrent/refresh.go +++ b/internal/torrent/refresh.go @@ -119,8 +119,8 @@ func (t *TorrentManager) refreshTorrents() []string { return updatedPaths } -// startRefreshJob periodically refreshes the torrents -func (t *TorrentManager) startRefreshJob() { +// StartRefreshJob periodically refreshes the torrents +func (t *TorrentManager) StartRefreshJob() { _ = t.refreshPool.Submit(func() { t.log.Info("Starting periodic refresh job") for { diff --git a/internal/torrent/repair.go b/internal/torrent/repair.go index fc16570..3955516 100644 --- a/internal/torrent/repair.go +++ b/internal/torrent/repair.go @@ -17,7 +17,7 @@ const ( EXPIRED_LINK_TOLERANCE_HOURS = 24 ) -func (t *TorrentManager) startRepairJob() { +func (t *TorrentManager) StartRepairJob() { if !t.Config.EnableRepair() { t.log.Debug("Repair is disabled, skipping repair job") return