From fcb7196d1cdec0e5157315b51e203d7937601901 Mon Sep 17 00:00:00 2001 From: headlessdev Date: Sun, 27 Apr 2025 15:28:00 +0200 Subject: [PATCH] Enhance application monitoring by integrating custom uptime check URL support. Updated database queries and application model to include UptimeCheckURL, allowing for more flexible monitoring options. --- agent/internal/app/monitor.go | 11 +++++++++-- agent/internal/database/database.go | 4 ++-- agent/internal/models/models.go | 9 +++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/agent/internal/app/monitor.go b/agent/internal/app/monitor.go index c4f89a2..4303971 100644 --- a/agent/internal/app/monitor.go +++ b/agent/internal/app/monitor.go @@ -28,7 +28,14 @@ func MonitorApplications(db *sql.DB, client *http.Client, apps []models.Applicat logPrefix := fmt.Sprintf("[App %s (%s)]", app.Name, app.PublicURL) fmt.Printf("%s Checking...\n", logPrefix) - parsedURL, parseErr := url.Parse(app.PublicURL) + // Determine which URL to use for monitoring + checkURL := app.PublicURL + if app.UptimeCheckURL != "" { + checkURL = app.UptimeCheckURL + fmt.Printf("%s Using custom uptime check URL: %s\n", logPrefix, checkURL) + } + + parsedURL, parseErr := url.Parse(checkURL) if parseErr != nil { fmt.Printf("%s Invalid URL: %v\n", logPrefix, parseErr) continue @@ -40,7 +47,7 @@ func MonitorApplications(db *sql.DB, client *http.Client, apps []models.Applicat ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - req, err := http.NewRequestWithContext(ctx, "GET", app.PublicURL, nil) + req, err := http.NewRequestWithContext(ctx, "GET", checkURL, nil) if err != nil { fmt.Printf("%s Request creation failed: %v\n", logPrefix, err) continue diff --git a/agent/internal/database/database.go b/agent/internal/database/database.go index 91c804f..8483f20 100644 --- a/agent/internal/database/database.go +++ b/agent/internal/database/database.go @@ -36,7 +36,7 @@ func InitDB() (*sql.DB, error) { // GetApplications fetches all applications with public URLs func GetApplications(db *sql.DB) ([]models.Application, error) { rows, err := db.Query( - `SELECT id, name, "publicURL", online FROM application WHERE "publicURL" IS NOT NULL`, + `SELECT id, name, "publicURL", online, "uptimeCheckURL" FROM application WHERE "publicURL" IS NOT NULL`, ) if err != nil { return nil, fmt.Errorf("error fetching applications: %v", err) @@ -46,7 +46,7 @@ func GetApplications(db *sql.DB) ([]models.Application, error) { var apps []models.Application for rows.Next() { var app models.Application - if err := rows.Scan(&app.ID, &app.Name, &app.PublicURL, &app.Online); err != nil { + if err := rows.Scan(&app.ID, &app.Name, &app.PublicURL, &app.Online, &app.UptimeCheckURL); err != nil { fmt.Printf("Error scanning row: %v\n", err) continue } diff --git a/agent/internal/models/models.go b/agent/internal/models/models.go index d04fa16..4411255 100644 --- a/agent/internal/models/models.go +++ b/agent/internal/models/models.go @@ -5,10 +5,11 @@ import ( ) type Application struct { - ID int - Name string - PublicURL string - Online bool + ID int + Name string + PublicURL string + Online bool + UptimeCheckURL string } type Server struct {