mirror of
https://github.com/TwiN/gatus.git
synced 2024-12-22 14:41:01 +01:00
Add request handlers and move monitoring to watchdog package
This commit is contained in:
parent
1c05871975
commit
d57da0a1dd
@ -10,13 +10,23 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type HealthStatus struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message,omitempty"`
|
||||
}
|
||||
|
||||
type ServerMessage struct {
|
||||
Error bool `json:"error"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
HttpStatus int
|
||||
Hostname string
|
||||
Ip string
|
||||
Duration time.Duration
|
||||
Errors []error
|
||||
ConditionResult []*ConditionResult
|
||||
HttpStatus int `json:"status"`
|
||||
Hostname string `json:"hostname"`
|
||||
Ip string `json:"ip"`
|
||||
Duration string `json:"duration"`
|
||||
Errors []error `json:"errors"`
|
||||
ConditionResult []*ConditionResult `json:"condition-results"`
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
@ -52,7 +62,7 @@ func (service *Service) getStatus(result *Result) {
|
||||
result.Errors = append(result.Errors, err)
|
||||
return
|
||||
}
|
||||
result.Duration = time.Now().Sub(startTime)
|
||||
result.Duration = time.Now().Sub(startTime).String()
|
||||
result.HttpStatus = response.StatusCode
|
||||
}
|
||||
|
||||
|
43
main.go
43
main.go
@ -1,15 +1,42 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/TwinProduction/gatus/config"
|
||||
"encoding/json"
|
||||
"github.com/TwinProduction/gatus/core"
|
||||
"github.com/TwinProduction/gatus/watchdog"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func main() {
|
||||
for _, service := range config.Get().Services {
|
||||
result := service.EvaluateConditions()
|
||||
for _, conditionResult := range result.ConditionResult {
|
||||
fmt.Printf("%v\n", *conditionResult)
|
||||
}
|
||||
}
|
||||
go watchdog.Monitor()
|
||||
http.HandleFunc("/api/v1/results", serviceResultsHandler)
|
||||
http.HandleFunc("/health", healthHandler)
|
||||
http.HandleFunc("/", indexHandler)
|
||||
log.Println("[main][main] Listening on port 80")
|
||||
log.Fatal(http.ListenAndServe(":80", nil))
|
||||
}
|
||||
|
||||
func serviceResultsHandler(writer http.ResponseWriter, request *http.Request) {
|
||||
serviceResults := watchdog.GetServiceResults()
|
||||
writer.WriteHeader(http.StatusOK)
|
||||
_, _ = writer.Write(structToJsonBytes(serviceResults))
|
||||
}
|
||||
|
||||
func indexHandler(writer http.ResponseWriter, request *http.Request) {
|
||||
writer.WriteHeader(http.StatusNotImplemented)
|
||||
_, _ = writer.Write(structToJsonBytes(&core.ServerMessage{Error: true, Message: "Not implemented yet"}))
|
||||
}
|
||||
|
||||
func healthHandler(writer http.ResponseWriter, request *http.Request) {
|
||||
writer.WriteHeader(http.StatusOK)
|
||||
_, _ = writer.Write(structToJsonBytes(&core.HealthStatus{Status: "UP"}))
|
||||
}
|
||||
|
||||
func structToJsonBytes(obj interface{}) []byte {
|
||||
bytes, err := json.Marshal(obj)
|
||||
if err != nil {
|
||||
log.Printf("[main][structToJsonBytes] Unable to marshall object to JSON: %s", err.Error())
|
||||
}
|
||||
return bytes
|
||||
}
|
||||
|
@ -1 +1,34 @@
|
||||
package watchdog
|
||||
|
||||
import (
|
||||
"github.com/TwinProduction/gatus/config"
|
||||
"github.com/TwinProduction/gatus/core"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
serviceResults = make(map[string][]*core.Result)
|
||||
rwLock sync.RWMutex
|
||||
)
|
||||
|
||||
func GetServiceResults() *map[string][]*core.Result {
|
||||
return &serviceResults
|
||||
}
|
||||
|
||||
func Monitor() {
|
||||
for {
|
||||
for _, service := range config.Get().Services {
|
||||
go func(service *core.Service) {
|
||||
result := service.EvaluateConditions()
|
||||
rwLock.Lock()
|
||||
defer rwLock.Unlock()
|
||||
serviceResults[service.Name] = append(serviceResults[service.Name], result)
|
||||
if len(serviceResults[service.Name]) > 15 {
|
||||
serviceResults[service.Name] = serviceResults[service.Name][15:]
|
||||
}
|
||||
}(service)
|
||||
}
|
||||
time.Sleep(10 * time.Second)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user