mirror of
https://github.com/crocofied/CoreControl.git
synced 2025-12-17 15:36:50 +00:00
Add dynamic notification message template retrieval
This commit is contained in:
parent
6e1f4eeddd
commit
e96ee56aa1
@ -188,13 +188,17 @@ func getApplications(db *sql.DB) []Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func checkAndUpdateStatus(db *sql.DB, client *http.Client, apps []Application) {
|
func checkAndUpdateStatus(db *sql.DB, client *http.Client, apps []Application) {
|
||||||
|
var notificationTemplate string
|
||||||
|
err := db.QueryRow("SELECT notification_text FROM settings LIMIT 1").Scan(¬ificationTemplate)
|
||||||
|
if err != nil {
|
||||||
|
notificationTemplate = "The application '!name' (!url) went !status!"
|
||||||
|
}
|
||||||
|
|
||||||
for _, app := range apps {
|
for _, app := range apps {
|
||||||
// — HTTP check with proper nil‑guard —
|
|
||||||
httpCtx, httpCancel := context.WithTimeout(context.Background(), 4*time.Second)
|
httpCtx, httpCancel := context.WithTimeout(context.Background(), 4*time.Second)
|
||||||
req, err := http.NewRequestWithContext(httpCtx, "GET", app.PublicURL, nil)
|
req, err := http.NewRequestWithContext(httpCtx, "GET", app.PublicURL, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
httpCancel()
|
httpCancel()
|
||||||
fmt.Printf("Error creating request: %v\n", err)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,18 +212,20 @@ func checkAndUpdateStatus(db *sql.DB, client *http.Client, apps []Application) {
|
|||||||
resp.Body.Close()
|
resp.Body.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// — Notify on change —
|
|
||||||
if isOnline != app.Online {
|
if isOnline != app.Online {
|
||||||
status := "offline"
|
status := "offline"
|
||||||
if isOnline {
|
if isOnline {
|
||||||
status = "online"
|
status = "online"
|
||||||
}
|
}
|
||||||
sendNotifications(
|
|
||||||
fmt.Sprintf("The application '%s' (%s) went %s!", app.Name, app.PublicURL, status),
|
message := notificationTemplate
|
||||||
)
|
message = strings.ReplaceAll(message, "!name", app.Name)
|
||||||
|
message = strings.ReplaceAll(message, "!url", app.PublicURL)
|
||||||
|
message = strings.ReplaceAll(message, "!status", status)
|
||||||
|
|
||||||
|
sendNotifications(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
// — Update DB with its own context —
|
|
||||||
dbCtx, dbCancel := context.WithTimeout(context.Background(), 5*time.Second)
|
dbCtx, dbCancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
_, err = db.ExecContext(dbCtx,
|
_, err = db.ExecContext(dbCtx,
|
||||||
`UPDATE application SET online = $1 WHERE id = $2`,
|
`UPDATE application SET online = $1 WHERE id = $2`,
|
||||||
@ -227,7 +233,7 @@ func checkAndUpdateStatus(db *sql.DB, client *http.Client, apps []Application) {
|
|||||||
)
|
)
|
||||||
dbCancel()
|
dbCancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Update failed for app %d: %v\n", app.ID, err)
|
fmt.Printf("Error updating application %d: %v\n", app.ID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dbCtx2, dbCancel2 := context.WithTimeout(context.Background(), 5*time.Second)
|
dbCtx2, dbCancel2 := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
@ -237,7 +243,7 @@ func checkAndUpdateStatus(db *sql.DB, client *http.Client, apps []Application) {
|
|||||||
)
|
)
|
||||||
dbCancel2()
|
dbCancel2()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Insert into uptime_history failed for app %d: %v\n", app.ID, err)
|
fmt.Printf("Error uptime_history %d: %v\n", app.ID, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user