mirror of https://github.com/statping/statping
new
parent
9c2cc65c7c
commit
3cd46fa6c4
|
@ -3,3 +3,4 @@ rice-box.go
|
||||||
config.yml
|
config.yml
|
||||||
statup.db
|
statup.db
|
||||||
plugins/*.so
|
plugins/*.so
|
||||||
|
data
|
18
Dockerfile
18
Dockerfile
|
@ -1,13 +1,17 @@
|
||||||
FROM alpine
|
FROM golang:alpine
|
||||||
|
|
||||||
#RUN apk add --no-cache libc6-compat
|
RUN apk update && apk add git g++
|
||||||
|
|
||||||
ENV VERSION="v0.14"
|
WORKDIR $GOPATH/src/github.com/hunterlong/statup/
|
||||||
RUN wget -q https://github.com/hunterlong/statup/releases/download/$VERSION/statup-linux-static
|
|
||||||
RUN chmod +x statup-linux-static && mv statup-linux-static /usr/local/bin/statup
|
COPY . $GOPATH/src/github.com/hunterlong/statup/
|
||||||
|
RUN go get github.com/GeertJohan/go.rice/rice
|
||||||
|
RUN go get -d -v
|
||||||
|
RUN rice embed-go
|
||||||
|
RUN go install
|
||||||
|
WORKDIR /app
|
||||||
|
VOLUME /app
|
||||||
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
VOLUME /app
|
|
||||||
|
|
||||||
ENTRYPOINT statup
|
ENTRYPOINT statup
|
7
core.go
7
core.go
|
@ -17,6 +17,13 @@ type Core struct {
|
||||||
PluginFields []PluginSelect
|
PluginFields []PluginSelect
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Core) Update() (*Core, error) {
|
||||||
|
res := dbSession.Collection("core").Find().Limit(1)
|
||||||
|
res.Update(c)
|
||||||
|
core = c
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
|
|
||||||
func SelectCore() (*Core, error) {
|
func SelectCore() (*Core, error) {
|
||||||
var core Core
|
var core Core
|
||||||
err := dbSession.Collection("core").Find().One(&core)
|
err := dbSession.Collection("core").Find().One(&core)
|
||||||
|
|
|
@ -34,6 +34,13 @@ func (s *Service) SelectAllFailures() ([]*Failure, error) {
|
||||||
return fails, err
|
return fails, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Service) LimitedFailures() ([]*Failure, error) {
|
||||||
|
var fails []*Failure
|
||||||
|
col := dbSession.Collection("failures").Find("session", s.Id).Limit(10)
|
||||||
|
err := col.All(&fails)
|
||||||
|
return fails, err
|
||||||
|
}
|
||||||
|
|
||||||
func CountFailures() (uint64, error) {
|
func CountFailures() (uint64, error) {
|
||||||
col := dbSession.Collection("failures").Find()
|
col := dbSession.Collection("failures").Find()
|
||||||
amount, err := col.Count()
|
amount, err := col.Count()
|
||||||
|
|
|
@ -33,6 +33,23 @@
|
||||||
<div class="tab-content" id="v-pills-tabContent">
|
<div class="tab-content" id="v-pills-tabContent">
|
||||||
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
|
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
|
||||||
<h3>Settings</h3>
|
<h3>Settings</h3>
|
||||||
|
|
||||||
|
<form method="POST" action="/settings">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="formGroupExampleInput">Project Name</label>
|
||||||
|
<input type="text" name="project" class="form-control" value="{{ .Name }}" id="formGroupExampleInput" placeholder="Great Uptime">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="formGroupExampleInput">Project Description</label>
|
||||||
|
<input type="text" name="description" class="form-control" value="{{ .Description }}" id="formGroupExampleInput" placeholder="Great Uptime">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary btn-block">Save Settings</button>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane fade" id="v-pills-browse" role="tabpanel" aria-labelledby="v-pills-browse-tab">
|
<div class="tab-pane fade" id="v-pills-browse" role="tabpanel" aria-labelledby="v-pills-browse-tab">
|
||||||
|
|
18
web.go
18
web.go
|
@ -38,7 +38,8 @@ func Router() *mux.Router {
|
||||||
r.Handle("/service/{id}/badge.svg", http.HandlerFunc(ServicesBadgeHandler))
|
r.Handle("/service/{id}/badge.svg", http.HandlerFunc(ServicesBadgeHandler))
|
||||||
r.Handle("/users", http.HandlerFunc(UsersHandler)).Methods("GET")
|
r.Handle("/users", http.HandlerFunc(UsersHandler)).Methods("GET")
|
||||||
r.Handle("/users", http.HandlerFunc(CreateUserHandler)).Methods("POST")
|
r.Handle("/users", http.HandlerFunc(CreateUserHandler)).Methods("POST")
|
||||||
r.Handle("/settings", http.HandlerFunc(PluginsHandler))
|
r.Handle("/settings", http.HandlerFunc(PluginsHandler)).Methods("GET")
|
||||||
|
r.Handle("/settings", http.HandlerFunc(SaveSettingsHandler)).Methods("POST")
|
||||||
r.Handle("/plugins/download/{name}", http.HandlerFunc(PluginsDownloadHandler))
|
r.Handle("/plugins/download/{name}", http.HandlerFunc(PluginsDownloadHandler))
|
||||||
r.Handle("/plugins/{name}/save", http.HandlerFunc(PluginSavedHandler)).Methods("POST")
|
r.Handle("/plugins/{name}/save", http.HandlerFunc(PluginSavedHandler)).Methods("POST")
|
||||||
r.Handle("/help", http.HandlerFunc(HelpHandler))
|
r.Handle("/help", http.HandlerFunc(HelpHandler))
|
||||||
|
@ -225,6 +226,21 @@ func IsAuthenticated(r *http.Request) bool {
|
||||||
return session.Values["authenticated"].(bool)
|
return session.Values["authenticated"].(bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SaveSettingsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
auth := IsAuthenticated(r)
|
||||||
|
if !auth {
|
||||||
|
http.Redirect(w, r, "/", http.StatusSeeOther)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r.ParseForm()
|
||||||
|
name := r.PostForm.Get("name")
|
||||||
|
description := r.PostForm.Get("description")
|
||||||
|
core.Name = name
|
||||||
|
core.Description = description
|
||||||
|
core.Update()
|
||||||
|
http.Redirect(w, r, "/settings", http.StatusSeeOther)
|
||||||
|
}
|
||||||
|
|
||||||
func PluginsHandler(w http.ResponseWriter, r *http.Request) {
|
func PluginsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
auth := IsAuthenticated(r)
|
auth := IsAuthenticated(r)
|
||||||
if !auth {
|
if !auth {
|
||||||
|
|
Loading…
Reference in New Issue