diff --git a/handlers/handlers.go b/handlers/handlers.go index 47d87f8c2f6373d503f6801a9c80214e4710eea4..ecb24ac0ae97749333c0db987d87efbf333573b0 100644 --- a/handlers/handlers.go +++ b/handlers/handlers.go @@ -109,14 +109,42 @@ func ReadershipHandler(w http.ResponseWriter, r *http.Request) { } func StatusHandler(w http.ResponseWriter, r *http.Request) { - status := models.ServiceStatus{ - GutendexAPI: services.CheckServiceAvailability("http://129.241.150.113:8000/books/"), - LanguageAPI: services.CheckServiceAvailability("http://129.241.150.113:3000/language2countries/"), - CountriesAPI: services.CheckServiceAvailability("http://129.241.150.113:8080/v3.1/"), - Version: "v1", - Uptime: services.GetUptime(), // Implement GetUptime in services package + // Initialize a variable to track the start time of the service if not already done + // This should ideally be done at the application start, not here + // Assuming services.ServiceStartTime is the time when your service started + + // Define the URLs for the services to check + gutendexURL := "http://129.241.150.113:8000/books/" + languageURL := "http://129.241.150.113:3000/language2countries/" + countriesURL := "http://129.241.150.113:8080/v3.1/" + + // Use the CheckServiceAvailability function to get the status codes + gutendexStatus := services.CheckServiceAvailability(gutendexURL) + languageStatus := services.CheckServiceAvailability(languageURL) + countriesStatus := services.CheckServiceAvailability(countriesURL) + + // Calculate uptime + uptime := int64(time.Since(services.ServiceStartTime).Seconds()) + + // Create a response struct + statusResponse := struct { + GutendexAPI int `json:"gutendexapi"` + LanguageAPI int `json:"languageapi"` + CountriesAPI int `json:"countriesapi"` + Version string `json:"version"` + Uptime int64 `json:"uptime"` + }{ + GutendexAPI: gutendexStatus, + LanguageAPI: languageStatus, + CountriesAPI: countriesStatus, + Version: "v1", + Uptime: uptime, } + // Set the header and encode the response as JSON w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(status) + if err := json.NewEncoder(w).Encode(statusResponse); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } }