mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 02:32:57 +00:00
dev day #90 🥳
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user