More better rate limiting

This commit is contained in:
2024-10-13 22:53:43 +02:00
parent ca3c3423b1
commit 48179c3a67
2 changed files with 16 additions and 6 deletions

View File

@@ -2,6 +2,7 @@ package main
import ( import (
"context" "context"
"fmt"
"log" "log"
"sync" "sync"
@@ -12,7 +13,7 @@ import (
const OUTPUT_DIR = "C:/Users/Administrator/ytdlpVideos" const OUTPUT_DIR = "C:/Users/Administrator/ytdlpVideos"
type DownloadWorker struct { type DownloadWorker struct {
id int id int
input chan *DownloadTask input chan *DownloadTask
} }
@@ -23,7 +24,7 @@ var dl = ytdlp.New().
// FormatSort("bestvideo[ext=mp4]+bestaudio[ext=m4a]"). // FormatSort("bestvideo[ext=mp4]+bestaudio[ext=m4a]").
FormatSort("res,ext:mp4:m4a"). FormatSort("res,ext:mp4:m4a").
Output("C:/Users/Administrator/ytdlpVideos/%(uploader)s/%(title)s.%(ext)s"). Output("C:/Users/Administrator/ytdlpVideos/%(uploader)s/%(title)s.%(ext)s").
LimitRate("10M"). LimitRate(fmt.Sprintf("%dM", 100/DOWNLOAD_WORKERS)).
// HTTPChunkSize("20M"). // HTTPChunkSize("20M").
MarkWatched(). MarkWatched().
SponsorblockMark("all"). SponsorblockMark("all").
@@ -56,13 +57,13 @@ func (w *DownloadWorker) Run() {
if err != nil { if err != nil {
log.Printf("Failed alerting with %+v", err) log.Printf("Failed alerting with %+v", err)
} }
_, err = dl.Run(context.TODO(), task.Url) _, err = dl.Run(context.TODO(), task.Url)
if err != nil { if err != nil {
log.Printf("DownloadWorker %d: Failed downloading %s with %+v", w.id, task.Url, err) log.Printf("DownloadWorker %d: Failed downloading %s with %+v", w.id, task.Url, err)
continue continue
} }
log.Printf("DownloadWorker %d: Downloaded %s", w.id, task.Url) log.Printf("DownloadWorker %d: Downloaded %s", w.id, task.Url)
ongoingDownloadsMutex.Lock() ongoingDownloadsMutex.Lock()
delete(ongoingDownloads, task.Url) delete(ongoingDownloads, task.Url)

View File

@@ -2,12 +2,15 @@ package main
import ( import (
"encoding/json" "encoding/json"
"fmt"
"io" "io"
"log" "log"
"net/http" "net/http"
"os" "os"
) )
var Error *log.Logger
var Warning *log.Logger
func init() { func init() {
log.SetFlags(log.Lmicroseconds | log.Lshortfile) log.SetFlags(log.Lmicroseconds | log.Lshortfile)
logFile, err := os.Create("main.log") logFile, err := os.Create("main.log")
@@ -17,10 +20,16 @@ func init() {
} }
logger := io.MultiWriter(os.Stdout, logFile) logger := io.MultiWriter(os.Stdout, logFile)
log.SetOutput(logger) log.SetOutput(logger)
Error = log.New(io.MultiWriter(logFile, os.Stderr, os.Stdout),
fmt.Sprintf("%sERROR:%s ", "\033[0;101m", "\033[0m"),
log.Lmicroseconds|log.Lshortfile)
Warning = log.New(io.MultiWriter(logFile, os.Stdout),
fmt.Sprintf("%sWarning:%s ", "\033[0;93m", "\033[0m"),
log.Lmicroseconds|log.Lshortfile)
} }
const DOWNLOAD_WORKERS = 10 const DOWNLOAD_WORKERS = 4
var downloadQueue = make(chan *DownloadTask, 100) var downloadQueue = make(chan *DownloadTask, 100)
func enableCORS(next http.Handler) http.Handler { func enableCORS(next http.Handler) http.Handler {