Simplify everything

This commit is contained in:
2024-07-14 14:59:12 +02:00
parent 4fd836c0b6
commit 468de9e401
4 changed files with 84 additions and 159 deletions

View File

@@ -1,123 +1,49 @@
package main
import (
"encoding/json"
"io"
"log"
"time"
"net/http"
"os"
)
const WEBSOCKET_SERVER = "ws://youtube-download-ws-server.site.quack-lab.dev/ws"
const WEBSOCKET_SERVER_ALT = "ws://localhost:8080/ws"
func init() {
// log.SetFlags(log.Lmicroseconds | log.Lshortfile)
log.SetFlags(log.Lmicroseconds)
log.SetFlags(log.Lmicroseconds | log.Lshortfile)
logFile, err := os.Create("main.log")
if err != nil {
log.Printf("Error creating log file: %v", err)
os.Exit(1)
}
logger := io.MultiWriter(os.Stdout, logFile)
log.SetOutput(logger)
}
// func instrument() {
// numGoroutines := runtime.NumGoroutine()
// var m runtime.MemStats
// runtime.ReadMemStats(&m)
// // log.Printf("%+v", m)
// sys := float64(m.Sys)
// ramUsedMB := sys / 1024 / 1024
// kbPerGoroutine := sys / 1024 / float64(numGoroutines)
// var numGoroutinesPretty string
// switch {
// case numGoroutines >= 1_000_000:
// numGoroutinesPretty = fmt.Sprintf("%.2fM", float64(numGoroutines)/1_000_000)
// case numGoroutines >= 1_000:
// numGoroutinesPretty = fmt.Sprintf("%.2fk", float64(numGoroutines)/1_000)
// default:
// numGoroutinesPretty = fmt.Sprintf("%d", numGoroutines)
// }
// log.Printf("Number of active goroutines: %d (%s); RAM used: %.2f MB; KB per goroutine: %.2f", numGoroutines, numGoroutinesPretty, ramUsedMB, kbPerGoroutine)
// }
const DOWNLOAD_WORKERS = 10
func main() {
// go func() {
// for {
// instrument()
// time.Sleep(1 * time.Second)
// }
// }()
downloadQueue := make(chan *DownloadTask, 100)
for i := 0; i < DOWNLOAD_WORKERS; i++ {
worker := &DownloadWorker{id: i, input: downloadQueue}
go worker.Run()
}
// res, err := http.Get(FULL_URL)
// if err != nil {
// log.Fatal(err)
// }
// defer res.Body.Close()
// body, err := io.ReadAll(res.Body)
// if err != nil {
// log.Printf("Error reading response body: %+v\n", err)
// return
// }
// if res.StatusCode != http.StatusOK {
// log.Printf("Non-OK HTTP status: %d\nResponse body: %s\n", res.StatusCode, body)
// return
// }
http.HandleFunc("/download", func(responseWriter http.ResponseWriter, request *http.Request) {
defer request.Body.Close()
// var data APIResponse
// err = json.Unmarshal(body, &data)
// if err != nil {
// log.Printf("Error unmarshaling JSON: %+v\n", err)
// return
// }
// log.Printf("Data: %+v\n", data)
// listener := new(RealtimeListener)
// listener.Url = POCKETBASE_REALTIME
// listener.Collections = []string{COLLECTION_NAME}
// listener.initialize()
var ws WSConnection
read := make(chan string)
go func() {
for {
ws = WSConnection{
url: WEBSOCKET_SERVER_ALT,
}
ws.Open()
for {
msg, ok := <-ws.ReadChan
if !ok {
break
}
read <- msg
}
<-ws.Dead
log.Printf("Reconnecting in 5 seconds...")
time.Sleep(5 * time.Second)
req := DownloadRequest{}
err := json.NewDecoder(request.Body).Decode(&req)
if err != nil {
log.Printf("Error parsing JSON: %v", err)
http.Error(responseWriter, "Error parsing JSON", http.StatusBadRequest)
return
}
}()
sem := make(chan struct{}, 4)
for {
select {
case event := <-read:
eventCopy := event
status := make(chan error)
sem <- struct{}{}
log.Printf("New event: %+v; semaphore at: %d", eventCopy, len(sem))
go func() {
defer func() {
<-sem
log.Printf("Semaphore at: %d", len(sem))
}()
// Download(eventCopy, status)
DownloadURL(eventCopy, status)
// go DownloadNative(event, status)
for status := range status {
log.Printf("Status: %s\n", status)
}
}()
case <-time.After(1 * time.Minute):
// Perform some action or simply continue to avoid deadlock
log.Println("Consumer is alive, but has no new events.")
}
downloadQueue <- &DownloadTask{Url: req.Link}
})
log.Println("Server starting on :5000")
err := http.ListenAndServe(":5000", nil)
if err != nil {
log.Println("Error starting server:", err)
}
}