diff --git a/handlers/status.go b/handlers/status.go new file mode 100644 index 0000000000000000000000000000000000000000..71a9909e655554034515a66e95063abde39c2710 --- /dev/null +++ b/handlers/status.go @@ -0,0 +1,51 @@ +package handlers + +import ( + "CountryAPI/utils" + "encoding/json" + "log" + "net/http" + "sync" + "time" +) + +func HandleStatus(rw http.ResponseWriter, r *http.Request) { + var wg sync.WaitGroup + var countriesNowStatus, restCountriesStatus int + + urls := map[string]*int{ + "http://129.241.150.113:3500/api/v0.1/countries/": &countriesNowStatus, + "http://129.241.150.113:8080/v3.1/all": &restCountriesStatus, + } + client := &http.Client{} + + for url, status := range urls { + wg.Add(1) + go func(url string, status *int) { + defer wg.Done() + + r, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + log.Printf("Error creating request", url, err) + + } + resp, err := client.Do(r) + if err != nil { + log.Printf("Error creating response", url, err) + + } + *status = resp.StatusCode + }(url, status) + } + + wg.Wait() + + endpoint := map[string]interface{}{ + "countriesnowapi": countriesNowStatus, + "restcountriesapi": restCountriesStatus, + "version": "v1", + "uptime": int64(time.Since(utils.StartTime).Seconds()), //using time since to check the uptime in s + } + + json.NewEncoder(rw).Encode(endpoint) +}