UI updates - delete assets

pull/44/merge v0.35
Hunter Long 2018-07-22 15:17:38 -07:00
parent 43d750a7ed
commit db7be1a11d
18 changed files with 86 additions and 33 deletions

View File

@ -18,7 +18,7 @@ services:
env:
global:
- VERSION=0.34
- VERSION=0.35
- DB_HOST=localhost
- DB_USER=travis
- DB_PASS=

View File

@ -1,6 +1,6 @@
FROM alpine:latest
ENV VERSION=v0.34
ENV VERSION=v0.35
RUN apk --no-cache add libstdc++ ca-certificates
RUN wget -q https://github.com/hunterlong/statup/releases/download/$VERSION/statup-linux-alpine.tar.gz && \

View File

@ -115,3 +115,12 @@ func CreateAllAssets() {
}
utils.Log(1, "Statup assets have been inserted")
}
func DeleteAllAssets() {
err := os.RemoveAll("assets")
if err != nil {
utils.Log(1, fmt.Sprintf("There was an issue deleting Statup Assets, %v", err))
return
}
utils.Log(1, "Statup assets have been deleted")
}

View File

@ -9,8 +9,12 @@ import (
"time"
)
var (
r *mux.Router
)
func Router() *mux.Router {
r := mux.NewRouter()
r = mux.NewRouter()
r.Handle("/", http.HandlerFunc(IndexHandler))
LocalizedAssets(r)
r.Handle("/charts.js", http.HandlerFunc(RenderServiceChartsHandler))
@ -38,6 +42,7 @@ func Router() *mux.Router {
r.Handle("/settings", http.HandlerFunc(SaveSettingsHandler)).Methods("POST")
r.Handle("/settings/css", http.HandlerFunc(SaveSASSHandler)).Methods("POST")
r.Handle("/settings/build", http.HandlerFunc(SaveAssetsHandler)).Methods("GET")
r.Handle("/settings/delete_assets", http.HandlerFunc(DeleteAssetsHandler)).Methods("GET")
r.Handle("/settings/notifier/{id}", http.HandlerFunc(SaveNotificationHandler)).Methods("POST")
r.Handle("/plugins/download/{name}", http.HandlerFunc(PluginsDownloadHandler))
r.Handle("/plugins/{name}/save", http.HandlerFunc(PluginSavedHandler)).Methods("POST")

View File

@ -73,6 +73,17 @@ func SaveAssetsHandler(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/settings", http.StatusSeeOther)
}
func DeleteAssetsHandler(w http.ResponseWriter, req *http.Request) {
if !IsAuthenticated(req) {
http.Redirect(w, req, "/", http.StatusSeeOther)
return
}
core.DeleteAllAssets()
core.UsingAssets = false
LocalizedAssets(r)
http.Redirect(w, req, "/settings", http.StatusSeeOther)
}
func SaveNotificationHandler(w http.ResponseWriter, r *http.Request) {
var err error
if !IsAuthenticated(r) {

View File

@ -48,6 +48,9 @@ func TestRunAll(t *testing.T) {
t.Run(dbt+" load database config", func(t *testing.T) {
RunMySQLMakeConfig(t, dbt)
})
t.Run(dbt+" run database migrations", func(t *testing.T) {
RunDatabaseMigrations(t, dbt)
})
t.Run(dbt+" Sample Data", func(t *testing.T) {
RunInsertMysqlSample(t)
})
@ -221,6 +224,11 @@ func RunMySQLMakeConfig(t *testing.T, db string) {
assert.Nil(t, err)
}
func RunDatabaseMigrations(t *testing.T, db string) {
err := core.RunDatabaseUpgrades()
assert.Nil(t, err)
}
func RunInsertMysqlSample(t *testing.T) {
err := core.LoadSampleData()
assert.Nil(t, err)

View File

@ -55,10 +55,12 @@ HTML, BODY {
color: #a5a5a5; }
.lower_canvas {
height: 55px;
height: 3.4rem;
width: 100%;
background-color: #48d338;
padding: 17px 10px; }
padding: 15px 10px;
margin-left: 0 !important;
margin-right: 0 !important; }
.lower_canvas SPAN {
font-size: 1rem;

File diff suppressed because one or more lines are too long

View File

@ -32,6 +32,15 @@ $('select#service_type').on('change', function() {
});
$('select#service_check_type').on('change', function() {
var selected = $('#service_check_type option:selected').val();
if (selected == "POST") {
$("#post_data").parent().parent().removeClass("d-none");
} else {
$("#post_data").parent().parent().addClass("d-none");
}
});
$(function() {
var pathname = window.location.pathname;

View File

@ -64,10 +64,12 @@ HTML,BODY {
}
.lower_canvas {
height: 55px;
height: 3.4rem;
width: 100%;
background-color: #48d338;
padding: 17px 10px;
padding: 15px 10px;
margin-left: 0 !important;
margin-right: 0 !important;
}
.lower_canvas SPAN {

View File

@ -43,7 +43,7 @@ CREATE TABLE hits (
id SERIAL PRIMARY KEY,
service INTEGER NOT NULL REFERENCES services(id) ON DELETE CASCADE ON UPDATE CASCADE,
latency float,
created_at TIMESTAMP WITHOUT TIME zone
created_at TIMESTAMP
);
CREATE TABLE failures (
@ -51,7 +51,7 @@ CREATE TABLE failures (
issue text,
method text,
service INTEGER NOT NULL REFERENCES services(id) ON DELETE CASCADE ON UPDATE CASCADE,
created_at TIMESTAMP WITHOUT TIME zone
created_at TIMESTAMP
);
CREATE TABLE checkins (

View File

@ -90,10 +90,12 @@
<canvas id="service_{{ $s.Id }}"></canvas>
</div>
{{ end }}
<div class="lower_canvas full-col-12 text-white{{if not $s.Online}} bg-danger{{end}}">
<div class="col-12">
<span class="col-10 d-none d-md-inline">{{.SmallText}}</span>
<a href="/service/{{ $s.Id }}" class="btn {{if $s.Online}}btn-success{{else}}btn-danger{{end}} btn-sm float-right col-sm-4 col-md-2 dyn-dark">View Service</a>
<div class="row lower_canvas full-col-12 text-white{{if not $s.Online}} bg-danger{{end}}">
<div class="col-10 text-truncate">
<span class="d-none d-md-inline">{{.SmallText}}</span>
</div>
<div class="col-sm-12 col-md-2">
<a href="/service/{{ $s.Id }}" class="btn {{if $s.Online}}btn-success{{else}}btn-danger{{end}} btn-sm float-right dyn-dark btn-block">View Service</a>
</div>
</div>
</div>

View File

@ -17,6 +17,10 @@
<div class="container col-md-7 col-sm-12 mt-md-5 bg-light">
<div class="col-4 offset-4">
<img width="100%" src="https://assets.statup.io/statup-words.png">
</div>
<div class="col-8 offset-2 mt-3">
{{ if .Error }}
@ -27,15 +31,15 @@
<form action="/dashboard" method="POST">
<div class="form-group row">
<label for="inputEmail3" class="col-sm-2 col-form-label">Username</label>
<label for="username" class="col-sm-2 col-form-label">Username</label>
<div class="col-sm-10">
<input type="text" name="username" class="form-control" id="inputEmail3" placeholder="Username">
<input type="text" name="username" class="form-control" id="username" placeholder="Username" autocapitalize="false" spellcheck="false">
</div>
</div>
<div class="form-group row">
<label for="inputPassword3" class="col-sm-2 col-form-label">Password</label>
<label for="password" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" name="password" class="form-control" id="inputPassword3" placeholder="Password">
<input type="password" name="password" class="form-control" id="password" placeholder="Password">
</div>
</div>
<div class="form-group row">

View File

@ -86,7 +86,7 @@
<div class="form-group row">
<label for="service_name" class="col-sm-4 col-form-label">Service Name</label>
<div class="col-sm-8">
<input type="text" name="name" class="form-control" id="service_name" value="{{$s.Name}}" placeholder="Name" required>
<input type="text" name="name" class="form-control" id="service_name" value="{{$s.Name}}" placeholder="Name" required spellcheck="false">
</div>
</div>
<div class="form-group row">
@ -101,7 +101,7 @@
<div class="form-group row">
<label for="service_url" class="col-sm-4 col-form-label">Application Endpoint (URL)</label>
<div class="col-sm-8">
<input type="text" name="domain" class="form-control" id="service_url" value="{{$s.Domain}}" placeholder="https://google.com" required>
<input type="text" name="domain" class="form-control" id="service_url" value="{{$s.Domain}}" placeholder="https://google.com" required autocapitalize="false" spellcheck="false">
</div>
</div>
<div class="form-group row{{if eq $s.Type "tcp"}} d-none{{end}}">
@ -116,13 +116,13 @@
<div class="form-group row{{if eq $s.Type "tcp"}} d-none{{end}}">
<label for="post_data" class="col-sm-4 col-form-label">Optional Post Data (JSON)</label>
<div class="col-sm-8">
<textarea name="post_data" class="form-control" id="post_data" rows="3">{{$s.PostData}}</textarea>
<textarea name="post_data" class="form-control" id="post_data" rows="3" autocapitalize="false" spellcheck="false">{{$s.PostData}}</textarea>
</div>
</div>
<div class="form-group row{{if eq $s.Type "tcp"}} d-none{{end}}">
<label for="service_response" class="col-sm-4 col-form-label">Expected Response (Regex)</label>
<div class="col-sm-8">
<textarea name="expected" class="form-control" id="service_response" rows="3">{{$s.Expected}}</textarea>
<textarea name="expected" class="form-control" id="service_response" rows="3" autocapitalize="false" spellcheck="false">{{$s.Expected}}</textarea>
</div>
</div>
<div class="form-group row{{if eq $s.Type "tcp"}} d-none{{end}}">
@ -146,7 +146,7 @@
<div class="form-group row">
<label for="service_timeout" class="col-sm-4 col-form-label">Timeout in Seconds</label>
<div class="col-sm-8">
<input type="number" name="timeout" class="form-control" value="{{$s.Timeout}}" id="service_timeout" placeholder="30">
<input type="number" name="timeout" class="form-control" value="{{$s.Timeout}}" id="service_timeout" min="1" placeholder="30">
</div>
</div>
<div class="form-group row">
@ -165,7 +165,7 @@
<h3>Last Response</h3>
<textarea rows="8" class="form-control" readonly>{{ $s.LastResponse }}</textarea>
<div class="form-group row mt-2">
<label for="last_status_code" class="col-sm-3 col-form-label">Status Code</label>
<label for="last_status_code" class="col-sm-3 col-form-label">HTTP Status Code</label>
<div class="col-sm-2">
<input type="text" id="last_status_code" class="form-control" value="{{ $s.LastStatusCode }}" readonly>
</div>

View File

@ -54,7 +54,7 @@
<div class="form-group row">
<label for="service_name" class="col-sm-4 col-form-label">Service Name</label>
<div class="col-sm-8">
<input type="text" name="name" class="form-control" id="service_name" placeholder="Name" required>
<input type="text" name="name" class="form-control" id="service_name" placeholder="Name" required spellcheck="false">
</div>
</div>
<div class="form-group row">
@ -69,7 +69,7 @@
<div class="form-group row">
<label for="service_url" class="col-sm-4 col-form-label">Application Endpoint (URL)</label>
<div class="col-sm-8">
<input type="text" name="domain" class="form-control" id="service_url" placeholder="https://google.com" required>
<input type="text" name="domain" class="form-control" id="service_url" placeholder="https://google.com" required autocapitalize="false" spellcheck="false">
</div>
</div>
<div class="form-group row">
@ -81,16 +81,16 @@
</select>
</div>
</div>
<div class="form-group row">
<div class="form-group row d-none">
<label for="post_data" class="col-sm-4 col-form-label">Post Data (JSON)</label>
<div class="col-sm-8">
<textarea name="post_data" class="form-control" id="post_data" rows="3"></textarea>
<textarea name="post_data" class="form-control" id="post_data" rows="3" autocapitalize="false" spellcheck="false"></textarea>
</div>
</div>
<div class="form-group row">
<label for="service_response" class="col-sm-4 col-form-label">Expected Response (Regex)</label>
<div class="col-sm-8">
<textarea name="expected" class="form-control" id="service_response" rows="3"></textarea>
<textarea name="expected" class="form-control" id="service_response" rows="3" autocapitalize="false" spellcheck="false"></textarea>
<small id="emailHelp" class="form-text text-muted">You can insert <a target="_blank" href="https://regex101.com/r/I5bbj9/1">Regex</a> to validate the response</small>
</div>
</div>
@ -115,7 +115,7 @@
<div class="form-group row">
<label for="service_timeout" class="col-sm-4 col-form-label">Timeout in Seconds</label>
<div class="col-sm-8">
<input type="number" name="timeout" class="form-control" id="service_timeout" placeholder="30">
<input type="number" name="timeout" class="form-control" id="service_timeout" min="1" placeholder="30">
</div>
</div>
<div class="form-group row">

View File

@ -121,6 +121,7 @@
</div>
</div>
<button type="submit" class="btn btn-primary btn-block mt-2">Save Style</button>
<a href="/settings/delete_assets" class="btn btn-danger btn-block">Delete Assets</a>
</form>
{{end}}
</div>

View File

@ -39,7 +39,7 @@
<div class="form-group row">
<label for="email" class="col-sm-4 col-form-label">Email Address</label>
<div class="col-sm-8">
<input type="email" name="email" class="form-control" id="email" value="{{.Email}}" placeholder="user@domain.com" required>
<input type="email" name="email" class="form-control" id="email" value="{{.Email}}" placeholder="user@domain.com" required autocapitalize="false" spellcheck="false">
</div>
</div>
<div class="form-group row">

View File

@ -51,7 +51,7 @@
<div class="form-group row">
<label for="username" class="col-sm-4 col-form-label">Username</label>
<div class="col-sm-4">
<input type="text" name="username" class="form-control" id="username" placeholder="Username" required>
<input type="text" name="username" class="form-control" id="username" placeholder="Username" required autocapitalize="false" spellcheck="false">
</div>
<div class="col-sm-4">
<span class="switch">
@ -63,7 +63,7 @@
<div class="form-group row">
<label for="email" class="col-sm-4 col-form-label">Email Address</label>
<div class="col-sm-8">
<input type="email" name="email" class="form-control" id="email" placeholder="user@domain.com" required>
<input type="email" name="email" class="form-control" id="email" placeholder="user@domain.com" required autocapitalize="false" spellcheck="false">
</div>
</div>
<div class="form-group row">