Add utils
This commit is contained in:
@@ -100,7 +100,7 @@ func MainApp(configPath string) {
|
|||||||
downloader := universal.NewDownloader(downloadClient)
|
downloader := universal.NewDownloader(downloadClient)
|
||||||
|
|
||||||
router := chi.NewRouter()
|
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() {
|
// go func() {
|
||||||
// if err := netHttp.ListenAndServe(":6060", nil); err != nil && err != netHttp.ErrServerClosed {
|
// 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>
|
<td>%s</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Number of Workers</td>
|
<td>Workers</td>
|
||||||
<td>%d</td>
|
<td>%d running / %d free / %d total</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Refresh Every...</td>
|
<td>Refresh Every...</td>
|
||||||
@@ -220,7 +220,7 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Network Buffer Size</td>
|
<td>Network Buffer Size</td>
|
||||||
<td>%d</td>
|
<td>%d bytes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Serve From Rclone</td>
|
<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>On Library Update</td>
|
||||||
<td>%s</td>
|
<td>%s</td>
|
||||||
</tr>
|
</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>
|
</table>
|
||||||
`
|
`
|
||||||
out = fmt.Sprintf(out,
|
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),
|
strings.Replace(response.Config.Token, response.Config.Token[len(response.Config.Token)-48:], "*****", 1),
|
||||||
response.Config.GetHost(),
|
response.Config.GetHost(),
|
||||||
response.Config.GetPort(),
|
response.Config.GetPort(),
|
||||||
response.Config.GetNumOfWorkers(),
|
zr.workerPool.Running(),
|
||||||
|
zr.workerPool.Free(),
|
||||||
|
zr.workerPool.Cap(),
|
||||||
response.Config.GetRefreshEverySecs(),
|
response.Config.GetRefreshEverySecs(),
|
||||||
response.Config.EnableRetainRDTorrentName(),
|
response.Config.EnableRetainRDTorrentName(),
|
||||||
response.Config.EnableRetainFolderNameExtension(),
|
response.Config.EnableRetainFolderNameExtension(),
|
||||||
@@ -294,6 +305,29 @@ func (zr *Handlers) handleHome(resp http.ResponseWriter, req *http.Request) {
|
|||||||
fmt.Fprint(resp, out)
|
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 {
|
func bToMb(b uint64) uint64 {
|
||||||
return b / 1024 / 1024
|
return b / 1024 / 1024
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/debridmediamanager/zurg/pkg/logutil"
|
"github.com/debridmediamanager/zurg/pkg/logutil"
|
||||||
"github.com/debridmediamanager/zurg/pkg/realdebrid"
|
"github.com/debridmediamanager/zurg/pkg/realdebrid"
|
||||||
"github.com/go-chi/chi/v5"
|
"github.com/go-chi/chi/v5"
|
||||||
|
"github.com/panjf2000/ants/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Handlers struct {
|
type Handlers struct {
|
||||||
@@ -23,6 +24,9 @@ type Handlers struct {
|
|||||||
torMgr *torrent.TorrentManager
|
torMgr *torrent.TorrentManager
|
||||||
cfg config.ConfigInterface
|
cfg config.ConfigInterface
|
||||||
api *realdebrid.RealDebrid
|
api *realdebrid.RealDebrid
|
||||||
|
workerPool *ants.Pool
|
||||||
|
refreshPool *ants.Pool
|
||||||
|
repairPool *ants.Pool
|
||||||
log *logutil.Logger
|
log *logutil.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,12 +36,15 @@ func init() {
|
|||||||
chi.RegisterMethod("MOVE")
|
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{
|
hs := &Handlers{
|
||||||
downloader: downloader,
|
downloader: downloader,
|
||||||
torMgr: torMgr,
|
torMgr: torMgr,
|
||||||
cfg: cfg,
|
cfg: cfg,
|
||||||
api: api,
|
api: api,
|
||||||
|
workerPool: workerPool,
|
||||||
|
refreshPool: refreshPool,
|
||||||
|
repairPool: repairPool,
|
||||||
log: log,
|
log: log,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,6 +54,9 @@ func AttachHandlers(router *chi.Mux, downloader *universal.Downloader, torMgr *t
|
|||||||
router.Use(hs.options)
|
router.Use(hs.options)
|
||||||
|
|
||||||
router.Get("/", hs.handleHome)
|
router.Get("/", hs.handleHome)
|
||||||
|
router.Get("/reboot/worker", hs.handleRebootWorkerPool)
|
||||||
|
router.Get("/reboot/refresh", hs.handleRebootRefreshPool)
|
||||||
|
router.Get("/reboot/repair", hs.handleRebootRepairPool)
|
||||||
// version
|
// version
|
||||||
router.Get(fmt.Sprintf("/{mountType}/%s", version.FILE), hs.handleVersionFile)
|
router.Get(fmt.Sprintf("/{mountType}/%s", version.FILE), hs.handleVersionFile)
|
||||||
router.Head(fmt.Sprintf("/{mountType}/%s", version.FILE), hs.handleCheckVersionFile)
|
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.mountDownloads()
|
||||||
t.refreshTorrents()
|
t.refreshTorrents()
|
||||||
t.SetNewLatestState(t.getCurrentState())
|
t.SetNewLatestState(t.getCurrentState())
|
||||||
t.startRefreshJob()
|
t.StartRefreshJob()
|
||||||
t.startRepairJob()
|
t.StartRepairJob()
|
||||||
|
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,8 +119,8 @@ func (t *TorrentManager) refreshTorrents() []string {
|
|||||||
return updatedPaths
|
return updatedPaths
|
||||||
}
|
}
|
||||||
|
|
||||||
// startRefreshJob periodically refreshes the torrents
|
// StartRefreshJob periodically refreshes the torrents
|
||||||
func (t *TorrentManager) startRefreshJob() {
|
func (t *TorrentManager) StartRefreshJob() {
|
||||||
_ = t.refreshPool.Submit(func() {
|
_ = t.refreshPool.Submit(func() {
|
||||||
t.log.Info("Starting periodic refresh job")
|
t.log.Info("Starting periodic refresh job")
|
||||||
for {
|
for {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ const (
|
|||||||
EXPIRED_LINK_TOLERANCE_HOURS = 24
|
EXPIRED_LINK_TOLERANCE_HOURS = 24
|
||||||
)
|
)
|
||||||
|
|
||||||
func (t *TorrentManager) startRepairJob() {
|
func (t *TorrentManager) StartRepairJob() {
|
||||||
if !t.Config.EnableRepair() {
|
if !t.Config.EnableRepair() {
|
||||||
t.log.Debug("Repair is disabled, skipping repair job")
|
t.log.Debug("Repair is disabled, skipping repair job")
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user