mirror of
https://github.com/trafficlunar/api.git
synced 2026-06-27 22:24:08 +00:00
feat: add /status route
This commit is contained in:
parent
7a8a229f0e
commit
aaa8640aaf
7 changed files with 122 additions and 3 deletions
72
internal/service/status.go
Normal file
72
internal/service/status.go
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"backend/internal/model"
|
||||
"bufio"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func GetStatuses() model.StatusData {
|
||||
data := model.StatusData{
|
||||
Success: false,
|
||||
Website: 0,
|
||||
Api: 0,
|
||||
Files: 0,
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("GET", os.Getenv("UPTIME_KUMA_URL"), nil)
|
||||
if err != nil {
|
||||
slog.Error("Error creating request for Uptime Kuma", slog.Any("error", err))
|
||||
return data
|
||||
}
|
||||
req.SetBasicAuth("", os.Getenv("UPTIME_KUMA_API_KEY"))
|
||||
|
||||
client := &http.Client{}
|
||||
res, err := client.Do(req)
|
||||
if err != nil {
|
||||
slog.Error("Error sending request for Uptime Kuma", slog.Any("error", err))
|
||||
return data
|
||||
}
|
||||
defer res.Body.Close()
|
||||
|
||||
regex := regexp.MustCompile(`monitor_name="([^"]+)"[^}]*} (\d+)`)
|
||||
statusMap := map[string]*uint8{
|
||||
"website": &data.Website,
|
||||
"api": &data.Api,
|
||||
"files": &data.Files,
|
||||
}
|
||||
|
||||
scanner := bufio.NewScanner(res.Body)
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
|
||||
if strings.HasPrefix(line, "monitor_status{") {
|
||||
matches := regex.FindStringSubmatch(line)
|
||||
monitorName := matches[1]
|
||||
status := matches[2]
|
||||
|
||||
statusCode, err := strconv.Atoi(status)
|
||||
if err != nil {
|
||||
slog.Error("Error parsing bool for Uptime Kuma", slog.Any("error", err))
|
||||
statusCode = 0
|
||||
}
|
||||
|
||||
if field, exists := statusMap[monitorName]; exists {
|
||||
*field = uint8(statusCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
slog.Error("Error reading metrics for Uptime Kuma", slog.Any("error", err))
|
||||
return data
|
||||
}
|
||||
|
||||
data.Success = true
|
||||
return data
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue