diff options
| author | Horus_Arch | 2015-02-26 02:40:52 +0100 |
|---|---|---|
| committer | Horus_Arch | 2015-02-26 02:40:52 +0100 |
| commit | 64ae2edb5a97f05f5592f58422adbc6ac089f9e8 (patch) | |
| tree | b375a73ec6bd0698d27cd01ef4307e62e9c1fa6d /app | |
| parent | 49ffcba2c3c4a19d147dd792d7f6c99b7545a491 (diff) | |
| download | statuspage-64ae2edb5a97f05f5592f58422adbc6ac089f9e8.tar.gz | |
Clean up. More backend code. Better UX and design.
Diffstat (limited to 'app')
| -rw-r--r-- | app/fetch.go | 25 | ||||
| -rw-r--r-- | app/fetch_test.go | 4 | ||||
| -rw-r--r-- | app/handler.go | 73 | ||||
| -rw-r--r-- | app/handler_test.go | 15 | ||||
| -rw-r--r-- | app/main.go | 2 | ||||
| -rw-r--r-- | app/struct.go | 14 | ||||
| -rw-r--r-- | app/utilities.go | 1 |
7 files changed, 102 insertions, 32 deletions
diff --git a/app/fetch.go b/app/fetch.go index 3969314..18721fc 100644 --- a/app/fetch.go +++ b/app/fetch.go @@ -7,14 +7,14 @@ import ( func healthCheck() { h := []Host{} Db.Find(&h) - h = CheckPage(h) + h = CheckPages(h) CacheHosts(cache_prefix+"database", h) for k, _ := range h { Db.Debug().Save(&h[k]) } } -func CheckPage(h []Host) []Host { +func CheckPages(h []Host) []Host { for k, v := range h { if !h[k].Monitored { @@ -38,3 +38,24 @@ func CheckPage(h []Host) []Host { return h } + +func CheckAllPages(h []Host) []Host { + for k, v := range h { + if resp, _, err := HttpGet(v.Url); err != nil { + h[k].Status = "Error" + h[k].StatusCode = 0 + h[k].Success = false + h[k].Monitored = false + h[k].Reason = fmt.Sprintf("%v", err) + h[k].Class = "danger" + } else { + h[k].Status = resp.Status + h[k].StatusCode = int64(resp.StatusCode) + h[k].Success = true + h[k].Reason = "" + h[k].Class = "success" + } + } + + return h +} diff --git a/app/fetch_test.go b/app/fetch_test.go index b71a3fe..9baf9c8 100644 --- a/app/fetch_test.go +++ b/app/fetch_test.go @@ -26,7 +26,7 @@ func TestCheckPage(t *testing.T) { Monitored: true, } h = append(h, host) - test := CheckPage(h) + test := CheckPages(h) if test == nil { t.Fatal("Expected slice to be not nil.") } @@ -50,7 +50,7 @@ func TestCheckPage(t *testing.T) { Monitored: true, } h2 = append(h2, host2) - test2 := CheckPage(h2) + test2 := CheckPages(h2) if test2[0].StatusCode != 200 { t.Errorf("Expected StatusCode 200 instead of %v.\n", test2[0].StatusCode) t.Logf("Failed test for %v .\n", test2[0].Url) diff --git a/app/handler.go b/app/handler.go index cdf8421..97c3558 100644 --- a/app/handler.go +++ b/app/handler.go @@ -38,13 +38,6 @@ func IndexHandler(w http.ResponseWriter, r *http.Request) { } } -func SessionHandler(w http.ResponseWriter, r *http.Request) { - session, _ := store.Get(r, "session-name") - session.Values["foo"] = "bar" - session.Values[42] = 43 - session.Save(r, w) -} - func RegisterHandler(w http.ResponseWriter, r *http.Request) { log.Println("Processing registration!") fmt.Fprintf(w, "Processing registration! \n") @@ -60,7 +53,7 @@ func PrintNewJobHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") - m := FlashMessages{} + m := Messages{} m.Success = session.Flashes("success") m.Error = session.Flashes("error") session.Save(r, w) @@ -115,12 +108,18 @@ func AddNewJobHandler(w http.ResponseWriter, r *http.Request) { host.Host = u.Host log.Printf("%v", host) - Db.Debug().Save(&host) + query := Db.Debug().Save(&host) + if query.Error != nil { + log.Println(err) + session.AddFlash("Befehl konnte auf Grund eines Problems nicht ausgeführt werden.", "error") + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) + } go func() { h := []Host{} h = append(h, host) - h = CheckPage(h) + h = CheckPages(h) for k, _ := range h { Db.Debug().Save(&h[k]) } @@ -168,6 +167,13 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) { } session.Values["login"] = true session.Save(r, w) + var redirectTarget string + if session.Values["history"] != "" { + redirectTarget = fmt.Sprintf("%v", session.Values["history"]) + session.Values["history"] = "" + session.Save(r, w) + http.Redirect(w, r, redirectTarget, 301) + } http.Redirect(w, r, "/admin", 301) } @@ -182,7 +188,7 @@ func PrintLoginHandler(w http.ResponseWriter, r *http.Request) { } else { log.Println("Nicht eingeloggt.") } - m := FlashMessages{} + m := Messages{} m.Success = session.Flashes("success") m.Error = session.Flashes("error") session.Save(r, w) @@ -198,34 +204,65 @@ func LogoutHandler(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "_SID") session.Values["login"] = false session.Save(r, w) - http.Redirect(w, r, "/", 301) + http.Redirect(w, r, "/login", 301) } func AdminHandler(w http.ResponseWriter, r *http.Request) { session, err := store.Get(r, "_SID") + //session.Values["login"] = true // löschen! + //session.Save(r, w) // löschen! if err != nil { log.Println(err) } if session.Values["login"] != true { // http.Redirect(w, r, "/login", 401) - PrintLoginHandler(w, r) + // w.WriteHeader(403) + // PrintLoginHandler(w, r) + session.Values["history"] = "/admin" + session.Save(r, w) + http.Redirect(w, r, "/login", 302) return } hosts := []Host{} Db.Find(&hosts) - a := Admin{} - a.Success = session.Flashes("success") - a.Error = session.Flashes("error") - a.Hosts = hosts + m := Messages{} + m.Success = session.Flashes("success") + m.Error = session.Flashes("error") + m.Hosts = hosts session.Save(r, w) index := mainTempl.Lookup("admin.html") - err = index.ExecuteTemplate(w, "admin.html", a) + err = index.ExecuteTemplate(w, "admin.html", m) if err != nil { log.Println(err) http.Error(w, err.Error(), http.StatusInternalServerError) return } } + +func RefreshAllHandler(w http.ResponseWriter, r *http.Request) { + session, err := store.Get(r, "_SID") + if err != nil { + log.Println(err) + } + if session.Values["login"] != true { + session.Values["history"] = "/admin" + session.Save(r, w) + http.Redirect(w, r, "/login", 302) + return + } + go func() { + h := []Host{} + Db.Find(&h) + h = CheckAllPages(h) + CacheHosts(cache_prefix+"database", h) + for k, _ := range h { + Db.Debug().Save(&h[k]) + } + }() + session.AddFlash("Processing all hosts. This might take a while.", "success") + session.Save(r, w) + http.Redirect(w, r, "/admin", 302) +} diff --git a/app/handler_test.go b/app/handler_test.go index 67692b0..53d8775 100644 --- a/app/handler_test.go +++ b/app/handler_test.go @@ -33,3 +33,18 @@ func BenchmarkIndexHandler(b *testing.B) { IndexHandler(response, request) } } + +func TestAdminHandler(t *testing.T) { + request, err := http.NewRequest("GET", "/admin", nil) + if err != nil { + t.Log("Error creating new http request. ", err) + } + response := httptest.NewRecorder() + + AdminHandler(response, request) + + if response.Code != 302 { + t.Log(response.Code) + t.Fatal("Expected 403 as status code.") + } +} diff --git a/app/main.go b/app/main.go index 4c3f9f7..6190b1a 100644 --- a/app/main.go +++ b/app/main.go @@ -47,12 +47,12 @@ func main() { r.HandleFunc("/login", LoginHandler).Methods("POST") r.HandleFunc("/login", PrintLoginHandler).Methods("GET") r.HandleFunc("/logout", LogoutHandler) - r.HandleFunc("/session", SessionHandler) r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./../static")))) r.HandleFunc("/register", RegisterHandler).Methods("POST") r.HandleFunc("/register", PrintRegisterHandler).Methods("GET") r.HandleFunc("/new", AddNewJobHandler).Methods("POST") r.HandleFunc("/new", PrintNewJobHandler).Methods("GET") + r.HandleFunc("/refresh", RefreshAllHandler).Methods("POST") r.HandleFunc("/jobs", ShowJobHandler) r.HandleFunc("/admin", AdminHandler) diff --git a/app/struct.go b/app/struct.go index 172a54d..49a201d 100644 --- a/app/struct.go +++ b/app/struct.go @@ -39,13 +39,9 @@ type User struct { UpdatedAt time.Time } -type FlashMessages struct { - Success []interface{} - Error []interface{} -} - -type Admin struct { - Success []interface{} - Error []interface{} - Hosts []Host +type Messages struct { + Success []interface{} + Error []interface{} + Hosts []Host + moreScripts []string } diff --git a/app/utilities.go b/app/utilities.go index b34efd8..65a6716 100644 --- a/app/utilities.go +++ b/app/utilities.go @@ -8,6 +8,7 @@ import ( "fmt" "github.com/garyburd/redigo/redis" "golang.org/x/crypto/bcrypt" + // "html/template" "io" "io/ioutil" "log" |
