Compare commits

..

7 Commits

Author SHA1 Message Date
571ffca339 Remove ALLOWED_USERS.txt watcher 2025-06-22 20:43:51 +02:00
9b0d448698 Mutex around cleaners map 2025-06-22 20:42:18 +02:00
35958f2ade Install ltscleanerd to lts work dir 2025-06-22 20:26:28 +02:00
71fed69dd7 Change gebs path 2025-06-22 19:55:45 +02:00
339d8ed9a7 Fix path for gebs 2025-06-22 19:54:39 +02:00
0f317edb28 Change RELEASE port 2025-06-22 19:52:00 +02:00
d4906360e1 chmod +x 2025-06-22 19:48:20 +02:00
6 changed files with 10 additions and 58 deletions

2
.gitmodules vendored
View File

@ -1,3 +1,3 @@
[submodule "gebs"] [submodule "gebs"]
path = gebs path = gebs
url = http://git.kamkow1lair/kamkow1/gebs.git url = http://git.kamkow1lair.pl/kamkow1/gebs.git

View File

@ -3,7 +3,7 @@ BUILD_MODE ?= DEBUG
ifeq ($(BUILD_MODE),DEBUG) ifeq ($(BUILD_MODE),DEBUG)
LISTEN_ADDR = "localhost:9090" LISTEN_ADDR = "localhost:9090"
else ifeq ($(BUILD_MODE),RELEASE) else ifeq ($(BUILD_MODE),RELEASE)
LISTEN_ADDR = "0.0.0.0:80" LISTEN_ADDR = "0.0.0.0:4000"
else else
$(error Unknown build mode) $(error Unknown build mode)
endif endif

5
go.mod
View File

@ -1,8 +1,3 @@
module lts module lts
go 1.24.3 go 1.24.3
require (
github.com/fsnotify/fsnotify v1.9.0 // indirect
golang.org/x/sys v0.13.0 // indirect
)

4
go.sum
View File

@ -1,4 +0,0 @@
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

53
lts.go
View File

@ -18,8 +18,6 @@ import (
"sync" "sync"
"syscall" "syscall"
"time" "time"
"github.com/fsnotify/fsnotify"
) )
var LISTEN_ADDR string var LISTEN_ADDR string
@ -122,6 +120,7 @@ type Cleaner struct {
} }
var cleaners map[string]Cleaner = map[string]Cleaner{} var cleaners map[string]Cleaner = map[string]Cleaner{}
var cleanersMutex sync.Mutex
func handleUpload(w http.ResponseWriter, r *http.Request) { func handleUpload(w http.ResponseWriter, r *http.Request) {
limit := int64(10737418240) // 10GiB limit := int64(10737418240) // 10GiB
@ -188,10 +187,12 @@ func handleUpload(w http.ResponseWriter, r *http.Request) {
if err != nil { if err != nil {
log.Println("Could not start cleaner daemon: ", err) log.Println("Could not start cleaner daemon: ", err)
} }
cleanersMutex.Lock()
cleaners[bare_name] = Cleaner{ cleaners[bare_name] = Cleaner{
Timeout: Timeout{ H: hours, M: mins, S: secs }, Timeout: Timeout{ H: hours, M: mins, S: secs },
SpawnTime: time.Now().Unix(), SpawnTime: time.Now().Unix(),
} }
cleanersMutex.Unlock()
} }
func handleHome(w http.ResponseWriter, r *http.Request) { func handleHome(w http.ResponseWriter, r *http.Request) {
@ -231,11 +232,12 @@ func handleBrowse(w http.ResponseWriter, r *http.Request) {
info.ModTime().Day(), info.ModTime().Month().String(), info.ModTime().Year(), info.ModTime().Day(), info.ModTime().Month().String(), info.ModTime().Year(),
info.ModTime().Hour(), info.ModTime().Minute(), info.ModTime().Second(), info.ModTime().Hour(), info.ModTime().Minute(), info.ModTime().Second(),
) )
cleanersMutex.Lock()
cleaner, _ := cleaners[e.Name()] cleaner, _ := cleaners[e.Name()]
total := cleaner.Timeout.S + cleaner.Timeout.M*60 + cleaner.Timeout.H*60*60 total := cleaner.Timeout.S + cleaner.Timeout.M*60 + cleaner.Timeout.H*60*60
now := time.Now().Unix() now := time.Now().Unix()
fmt.Println(cleaner.SpawnTime + total - now)
timeleft_unix := time.Unix(cleaner.SpawnTime + total - now, 0) timeleft_unix := time.Unix(cleaner.SpawnTime + total - now, 0)
cleanersMutex.Unlock()
timeleft := fmt.Sprintf("time left %02d:%02d:%02d", timeleft := fmt.Sprintf("time left %02d:%02d:%02d",
timeleft_unix.Hour() - 1, timeleft_unix.Minute(), timeleft_unix.Second(), timeleft_unix.Hour() - 1, timeleft_unix.Minute(), timeleft_unix.Second(),
) )
@ -254,7 +256,7 @@ func handleBrowse(w http.ResponseWriter, r *http.Request) {
} }
} }
func reloadAllowedUsers() { func loadAllowedUsers() {
log.Println("loading ALLOWED_USERS.txt") log.Println("loading ALLOWED_USERS.txt")
allowedUsersTxt, err := ioutil.ReadFile("./ALLOWED_USERS.txt") allowedUsersTxt, err := ioutil.ReadFile("./ALLOWED_USERS.txt")
if err != nil { if err != nil {
@ -271,47 +273,8 @@ func reloadAllowedUsers() {
allowedUsersMutex.Unlock() allowedUsersMutex.Unlock()
} }
func watchAllowedUsers() chan bool {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal("Error creating new watcher: ", err)
}
defer watcher.Close()
done := make(chan bool)
go func() {
for {
select {
case event, ok := <-watcher.Events:
if !ok {
return
}
if event.Has(fsnotify.Chmod | fsnotify.Rename) {
reloadAllowedUsers()
}
case err, ok := <-watcher.Errors:
if !ok {
return
}
log.Println("Watcher error: ", err)
case <-done:
break
}
}
}()
err = watcher.Add("./ALLOWED_USERS.txt")
if err != nil {
log.Fatal("Error adding ALLOWED_USERS.txt to watcher: ", err)
}
return done
}
func main() { func main() {
reloadAllowedUsers() loadAllowedUsers()
doneWatching := watchAllowedUsers()
http.HandleFunc("/", handleHome) http.HandleFunc("/", handleHome)
http.HandleFunc("/browse", handleBrowse) http.HandleFunc("/browse", handleBrowse)
@ -331,6 +294,4 @@ func main() {
if err != nil { if err != nil {
log.Fatal("Error in serving: ", err) log.Fatal("Error in serving: ", err)
} }
doneWatching<-true
} }

2
scripts/update-release Normal file → Executable file
View File

@ -4,6 +4,6 @@ systemctl stop lts.service
make clean make clean
make -B BUILD_MODE=RELEASE make -B BUILD_MODE=RELEASE
cp ./lts /usr/local/bin/lts cp ./lts /usr/local/bin/lts
cp ./ltscleanerd /usr/local/bin/ltscleanerd cp ./ltscleanerd /var/lib/lts
systemctl start lts.service systemctl start lts.service
systemctl status lts.service systemctl status lts.service