dev day #90 🥳

This commit is contained in:
Tomas Dvorak
2025-11-12 20:31:37 +01:00
parent 8762bde4bf
commit f3db65d350
103 changed files with 4053 additions and 2189 deletions
+102 -51
View File
@@ -35,11 +35,11 @@ func StartErrorReviewAutoRegister(db *gorm.DB) {
go func() {
defer func() { _ = recover() }()
time.Sleep(2 * time.Second)
for i := 0; i < 3; i++ {
for i := 0; i < 60; i++ {
if tryAutoRegister(db) {
return
}
time.Sleep(time.Duration(2+i) * time.Second)
time.Sleep(10 * time.Second)
}
}()
}
@@ -65,14 +65,14 @@ func tryAutoRegister(db *gorm.DB) bool {
if errorLocal {
adminURL = "http://127.0.0.1:8083/api/v1/admin"
} else {
adminURL = "https://error.tdvorak.dev/api/v1/admin"
adminURL = "https://errors.tdvorak.dev/api/v1/admin"
}
}
// Prefer env token only
token := strings.TrimSpace(os.Getenv("ERROR_REVIEW_ADMIN_TOKEN"))
if token == "" {
return false
}
// Prefer env token only
token := strings.TrimSpace(os.Getenv("ERROR_REVIEW_ADMIN_TOKEN"))
if token == "" {
return false
}
// Only register after setup is complete (club name present)
if strings.TrimSpace(s.ClubName) == "" {
return false
@@ -100,6 +100,13 @@ func tryAutoRegister(db *gorm.DB) bool {
// Ensure API suffix present
if !strings.Contains(base, "/api/") { base = strings.TrimRight(base, "/") + "/api/v1" }
monURL := base + "/health"
if u, err := url.Parse(monURL); err == nil {
h := u.Hostname()
if h == "127.0.0.1" || h == "localhost" {
u.Host = strings.Replace(u.Host, h, "host.docker.internal", 1)
monURL = u.String()
}
}
disp := "Fotbal Club"
if strings.TrimSpace(s.ClubName) != "" { disp = strings.TrimSpace(s.ClubName) }
host := ""
@@ -117,49 +124,93 @@ func tryAutoRegister(db *gorm.DB) bool {
ExpectStatusMax: 399,
}
client := &http.Client{Timeout: 5 * time.Second}
req, _ := http.NewRequest(http.MethodGet, adminURL+"/monitors", nil)
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("X-Admin-Token", token)
res, err := client.Do(req)
if err != nil {
return false
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
return false
}
var list erListResp
if err := json.NewDecoder(res.Body).Decode(&list); err != nil {
return false
}
var existing *erMonitor
for i := range list.Items {
if strings.TrimSpace(list.Items[i].URL) == monURL {
existing = &list.Items[i]
break
}
}
b, _ := json.Marshal(mon)
if existing == nil {
req2, _ := http.NewRequest(http.MethodPost, adminURL+"/monitors", bytes.NewReader(b))
req2.Header.Set("Authorization", "Bearer "+token)
req2.Header.Set("Content-Type", "application/json")
req2.Header.Set("X-Admin-Token", token)
res2, err2 := client.Do(req2)
if err2 != nil {
return false
}
defer res2.Body.Close()
if res2.StatusCode == http.StatusCreated || res2.StatusCode == http.StatusOK {
return true
}
return false
}
req3, _ := http.NewRequest(http.MethodPut, adminURL+"/monitors/"+itoa(existing.ID), bytes.NewReader(b))
req3.Header.Set("Authorization", "Bearer "+token)
req3.Header.Set("Content-Type", "application/json")
req3.Header.Set("X-Admin-Token", token)
res3, err3 := client.Do(req3)
effectiveAdmin := strings.TrimRight(adminURL, "/")
req, _ := http.NewRequest(http.MethodGet, effectiveAdmin+"/monitors", nil)
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("X-Admin-Token", token)
res, err := client.Do(req)
if err != nil || res.StatusCode != http.StatusOK {
if res != nil { res.Body.Close() }
if u, e := url.Parse(effectiveAdmin); e == nil {
h := u.Hostname()
if h == "127.0.0.1" || h == "localhost" {
u.Host = strings.Replace(u.Host, h, "host.docker.internal", 1)
effectiveAdmin = strings.TrimRight(u.String(), "/")
req2, _ := http.NewRequest(http.MethodGet, effectiveAdmin+"/monitors", nil)
req2.Header.Set("Authorization", "Bearer "+token)
req2.Header.Set("X-Admin-Token", token)
res2, err2 := client.Do(req2)
if err2 != nil || res2.StatusCode != http.StatusOK {
if res2 != nil { res2.Body.Close() }
return false
}
defer res2.Body.Close()
var list erListResp
if err := json.NewDecoder(res2.Body).Decode(&list); err != nil { return false }
var existing *erMonitor
for i := range list.Items {
if strings.TrimSpace(list.Items[i].URL) == monURL {
existing = &list.Items[i]
break
}
}
b, _ := json.Marshal(mon)
if existing == nil {
req3, _ := http.NewRequest(http.MethodPost, effectiveAdmin+"/monitors", bytes.NewReader(b))
req3.Header.Set("Authorization", "Bearer "+token)
req3.Header.Set("Content-Type", "application/json")
req3.Header.Set("X-Admin-Token", token)
res3, err3 := client.Do(req3)
if err3 != nil { return false }
defer res3.Body.Close()
if res3.StatusCode == http.StatusCreated || res3.StatusCode == http.StatusOK { return true }
return false
}
req4, _ := http.NewRequest(http.MethodPut, effectiveAdmin+"/monitors/"+itoa(existing.ID), bytes.NewReader(b))
req4.Header.Set("Authorization", "Bearer "+token)
req4.Header.Set("Content-Type", "application/json")
req4.Header.Set("X-Admin-Token", token)
res4, err4 := client.Do(req4)
if err4 != nil { return false }
defer res4.Body.Close()
if res4.StatusCode == http.StatusOK { return true }
return false
}
}
return false
}
var list erListResp
if err := json.NewDecoder(res.Body).Decode(&list); err != nil {
return false
}
var existing *erMonitor
for i := range list.Items {
if strings.TrimSpace(list.Items[i].URL) == monURL {
existing = &list.Items[i]
break
}
}
b, _ := json.Marshal(mon)
if existing == nil {
req2, _ := http.NewRequest(http.MethodPost, effectiveAdmin+"/monitors", bytes.NewReader(b))
req2.Header.Set("Authorization", "Bearer "+token)
req2.Header.Set("Content-Type", "application/json")
req2.Header.Set("X-Admin-Token", token)
res2, err2 := client.Do(req2)
if err2 != nil {
return false
}
defer res2.Body.Close()
if res2.StatusCode == http.StatusCreated || res2.StatusCode == http.StatusOK {
return true
}
return false
}
req3, _ := http.NewRequest(http.MethodPut, effectiveAdmin+"/monitors/"+itoa(existing.ID), bytes.NewReader(b))
req3.Header.Set("Authorization", "Bearer "+token)
req3.Header.Set("Content-Type", "application/json")
req3.Header.Set("X-Admin-Token", token)
res3, err3 := client.Do(req3)
if err3 != nil {
return false
}