Add utils
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -175,8 +175,8 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) {
|
||||
<td>%s</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Number of Workers</td>
|
||||
<td>%d</td>
|
||||
<td>Workers</td>
|
||||
<td>%d running / %d free / %d total</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Refresh Every...</td>
|
||||
@@ -220,7 +220,7 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) {
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Network Buffer Size</td>
|
||||
<td>%d</td>
|
||||
<td>%d bytes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Serve From Rclone</td>
|
||||
@@ -238,6 +238,15 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) {
|
||||
<td>On Library Update</td>
|
||||
<td>%s</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Utilities</td>
|
||||
<td colspan="2">
|
||||
<button type="button" onclick="window.open('/logs/upload')">Upload logs</button>
|
||||
<button type="button" onclick="window.open('/reboot/worker')">Reboot worker pool</button>
|
||||
<button type="button" onclick="window.open('/reboot/refresh')">Reboot refresh pool</button>
|
||||
<button type="button" onclick="window.open('/reboot/repair')">Reboot repair pool</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
`
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user