pull/904/merge
Andrew Gerhold 2024-06-13 09:40:48 +00:00 committed by GitHub
commit 79602055e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 4 deletions

View File

@ -3,13 +3,14 @@ package handlers
import (
"encoding/json"
"fmt"
"github.com/statping/statping/types/errors"
"html/template"
"net/http"
"path"
"time"
"github.com/statping/statping/source"
"github.com/statping/statping/types/errors"
"github.com/statping/statping/types/services"
"github.com/statping/statping/utils"
)
@ -202,6 +203,23 @@ func returnJson(d interface{}, w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(d)
}
func returnLastResponse(s *services.Service, w http.ResponseWriter, r *http.Request) {
// Go does not currently
// support sending user-defined 1xx informational headers,
// with the exception of 100-continue response header that the
// Server sends automatically when the Request.Body is read.
// https://golang.org/src/net/http/server.go?s=3003:5866#L150
if s.LastStatusCode >= 100 {
w.WriteHeader(s.LastStatusCode)
w.Write([]byte(s.DownText))
return
}
w.WriteHeader(http.StatusTeapot)
w.Write([]byte("☄ Last Status Code Not Set!"))
}
// error404Handler is a HTTP handler for 404 error pages
func error404Handler(w http.ResponseWriter, r *http.Request) {
if usingSSL {

View File

@ -1,13 +1,14 @@
package handlers
import (
"net/http"
"net/http/pprof"
"github.com/gorilla/mux"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/statping/statping/source"
"github.com/statping/statping/types/core"
"github.com/statping/statping/utils"
"net/http"
"net/http/pprof"
_ "github.com/statping/statping/types/metrics"
)
@ -127,6 +128,7 @@ func Router() *mux.Router {
api.Handle("/api/services/{id}/failures", authenticated(servicesDeleteFailuresHandler, false)).Methods("DELETE")
api.Handle("/api/services/{id}/hits", scoped(apiServiceHitsHandler)).Methods("GET")
api.Handle("/api/services/{id}/hits", authenticated(apiServiceHitsDeleteHandler, false)).Methods("DELETE")
api.Handle("/api/services/{id}/lastresponse", authenticated(apiServiceLastResponseHandler, false)).Methods("GET")
// API SERVICE CHART DATA Routes
api.Handle("/api/services/{id}/hits_data", http.HandlerFunc(apiServiceDataHandler)).Methods("GET")

View File

@ -1,6 +1,8 @@
package handlers
import (
"net/http"
"github.com/gorilla/mux"
"github.com/statping/statping/database"
"github.com/statping/statping/types/errors"
@ -8,7 +10,6 @@ import (
"github.com/statping/statping/types/hits"
"github.com/statping/statping/types/services"
"github.com/statping/statping/utils"
"net/http"
)
type serviceOrder struct {
@ -317,3 +318,14 @@ func apiServiceHitsHandler(r *http.Request) interface{} {
query.Find(&hts)
return hts
}
func apiServiceLastResponseHandler(w http.ResponseWriter, r *http.Request) {
service, err := findService(r)
if err != nil {
sendErrorJson(err, w, r)
return
}
returnLastResponse(service, w, r)
}