summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorHorus_Arch2015-02-26 02:40:52 +0100
committerHorus_Arch2015-02-26 02:40:52 +0100
commit64ae2edb5a97f05f5592f58422adbc6ac089f9e8 (patch)
treeb375a73ec6bd0698d27cd01ef4307e62e9c1fa6d /app
parent49ffcba2c3c4a19d147dd792d7f6c99b7545a491 (diff)
downloadstatuspage-64ae2edb5a97f05f5592f58422adbc6ac089f9e8.tar.gz
Clean up. More backend code. Better UX and design.
Diffstat (limited to 'app')
-rw-r--r--app/fetch.go25
-rw-r--r--app/fetch_test.go4
-rw-r--r--app/handler.go73
-rw-r--r--app/handler_test.go15
-rw-r--r--app/main.go2
-rw-r--r--app/struct.go14
-rw-r--r--app/utilities.go1
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"