diff --git a/audit.go b/audit.go index 7a68a39..a003b0a 100644 --- a/audit.go +++ b/audit.go @@ -17,17 +17,55 @@ package main import ( + "encoding/json" "fmt" "net/http" + "time" ) func doAudit(host string, filter string) bool { + db := connectDB() + defer db.Close() + switch filter { case "dead": _, err := http.Get("https://" + host) if err != nil { return true } + case "empty": + resp, err := http.Get("https://" + host + "/api/v1/server/stats") + if err != nil { + panic(err) + } + + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return false + } + + var generic map[string]any + err = json.NewDecoder(resp.Body).Decode(&generic) + if err != nil { + panic(err) + } + + videos := generic["totalLocalVideos"].(float64) + if videos != 0 { + return false + } + + instance, err := getInstance(db, host) + if err != nil { + panic(err) + } + + currentTime := time.Now() + last3Month := currentTime.AddDate(0,-3,0) + if instance.CreatedAt < last3Month.Format("2006-01-02T15:04:05Z") { + return true + } } return false diff --git a/db.go b/db.go index e897088..d27b594 100644 --- a/db.go +++ b/db.go @@ -228,6 +228,12 @@ func getDuplicateIds(db *sql.DB) ([]string, error) { return ids, nil } +func getInstance(db *sql.DB, url string) (Instance, error) { + var instance Instance + err := db.QueryRow("SELECT url, data, created_at, rejected, reject_reason FROM instances WHERE url = ?", url).Scan(&instance.Url, &instance.Data, &instance.CreatedAt, &instance.Rejected, &instance.RejectReason) + return instance, err +} + func removeInstance(db *sql.DB, id string) { db.Exec("DELETE FROM instances WHERE id = ?", id) } diff --git a/docker/Makefile b/docker/Makefile index a731014..f245cd4 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -17,5 +17,5 @@ reject: ### audit: Audit hosts. Arguments: filter, start (skip instances) .PHONY: audit audit: - docker compose -f docker-compose.yml exec -it peertube-instance-index-filter peertube-instance-index-filter -command audit -filter $(filter) -start $(start) + docker compose -f docker-compose.yml exec -it peertube-instance-index-filter peertube-instance-index-filter -command audit -filter $(filter) -last-id $(start) diff --git a/templates/index.tmpl b/templates/index.tmpl index acd6aaf..4e71263 100644 --- a/templates/index.tmpl +++ b/templates/index.tmpl @@ -11,7 +11,11 @@

This filter is middleware to collect removed instances and list global index without them

Source code is available on g.arns.lt/zordsdavini/peertube-instance-index-filter

-

Contact on Fediverse: @zordsdavini@s.arns.lt

+

+ Contact on Fediverse: + @zordsdavini@s.arns.lt
+ +

@@ -48,6 +52,10 @@

License

-

GPLv3

+

+ + GNU GPL v3.0 + +