mirror of https://github.com/statping/statping
				
				
				
			
		
			
				
	
	
		
			245 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			HTML
		
	
	
			
		
		
	
	
			245 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			HTML
		
	
	
<!doctype html>
 | 
						|
<html lang="en">
 | 
						|
<head>
 | 
						|
    <meta charset="utf-8">
 | 
						|
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1.0, user-scalable=0">
 | 
						|
    <link rel="stylesheet" href="/css/bootstrap.min.css">
 | 
						|
    <link rel="stylesheet" href="/css/base.css">
 | 
						|
    <script src="/js/Chart.bundle.min.js"></script>
 | 
						|
 | 
						|
    <title>Statup | Services</title>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
 | 
						|
<div class="container col-md-7 col-sm-12 mt-md-5 bg-light">
 | 
						|
 | 
						|
{{if Auth}}
 | 
						|
    {{template "nav"}}
 | 
						|
{{end}}
 | 
						|
 | 
						|
            <div class="col-12 mb-4">
 | 
						|
 | 
						|
            {{if .Online }}
 | 
						|
                <span class="mt-3 mb-3 text-white d-md-none btn bg-success d-block d-md-none">ONLINE</span>
 | 
						|
            {{ else }}
 | 
						|
                <span class="mt-3 mb-3 text-white d-md-none btn bg-danger d-block d-md-none">OFFLINE</span>
 | 
						|
            {{end}}
 | 
						|
 | 
						|
                        <h4 class="mt-2">{{ .Name }}
 | 
						|
                        {{if .Online }}
 | 
						|
                            <span class="badge bg-success float-right d-none d-md-block">ONLINE</span>
 | 
						|
                        {{ else }}
 | 
						|
                            <span class="badge bg-danger float-right d-none d-md-block">OFFLINE</span>
 | 
						|
                        {{end}}</h4>
 | 
						|
 | 
						|
                        <div class="row stats_area mt-5 mb-5">
 | 
						|
 | 
						|
                            <div class="col-4">
 | 
						|
                                <span class="lg_number">{{.Online24}}%</span>
 | 
						|
                                Online last 24 Hours
 | 
						|
                            </div>
 | 
						|
 | 
						|
                            <div class="col-4">
 | 
						|
                                <span class="lg_number">{{.AvgTime}}ms</span>
 | 
						|
                                Average Response
 | 
						|
                            </div>
 | 
						|
 | 
						|
                            <div class="col-4">
 | 
						|
                                <span class="lg_number">{{.AvgUptime}}%</span>
 | 
						|
                                Total Uptime
 | 
						|
                            </div>
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <canvas id="service" width="400" height="120"></canvas>
 | 
						|
 | 
						|
            {{ if .LimitedFailures }}
 | 
						|
                <div class="list-group mt-5">
 | 
						|
                {{ range .LimitedFailures }}
 | 
						|
                    <a href="#" class="list-group-item list-group-item-action flex-column align-items-start">
 | 
						|
                        <div class="d-flex w-100 justify-content-between">
 | 
						|
                            <h5 class="mb-1">{{.ParseError}}</h5>
 | 
						|
                            <small>Reported {{.Ago}}</small>
 | 
						|
                        </div>
 | 
						|
                        <p class="mb-1">{{.Issue}}</p>
 | 
						|
                    </a>
 | 
						|
                {{ end }}
 | 
						|
                </div>
 | 
						|
            {{ end }}
 | 
						|
 | 
						|
            </div>
 | 
						|
 | 
						|
 | 
						|
{{if Auth}}
 | 
						|
 | 
						|
        <div class="col-12 mt-4">
 | 
						|
 | 
						|
            <h3>Edit Service</h3>
 | 
						|
 | 
						|
            <form action="/service/{{.Id}}" method="POST">
 | 
						|
                <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="{{.Name}}" placeholder="Name">
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                <div class="form-group row">
 | 
						|
                    <label for="service_type" class="col-sm-4 col-form-label">Service Check Type</label>
 | 
						|
                    <div class="col-sm-8">
 | 
						|
                        <select name="check_type" class="form-control" id="service_type" value="{{.Type}}">
 | 
						|
                            <option value="http" selected>HTTP Service</option>
 | 
						|
                            <option value="tcp">TCP Service</option>
 | 
						|
                        </select>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                <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="{{.Domain}}" placeholder="https://google.com">
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                <div class="form-group row">
 | 
						|
                    <label for="service_check_type" class="col-sm-4 col-form-label">Service Check Type</label>
 | 
						|
                    <div class="col-sm-8">
 | 
						|
                        <select name="method" class="form-control" id="service_check_type" value="{{.Method}}">
 | 
						|
                            <option value="GET" selected>GET</option>
 | 
						|
                            <option value="POST">POST</option>
 | 
						|
                        </select>
 | 
						|
                    </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">{{.Expected}}</textarea>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                <div class="form-group row">
 | 
						|
                    <label for="service_response_code" class="col-sm-4 col-form-label">Expected Status Code</label>
 | 
						|
                    <div class="col-sm-8">
 | 
						|
                        <input type="number" name="expected_status" class="form-control" value="{{.ExpectedStatus}}" id="service_response_code" value="200">
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                <div class="form-group row">
 | 
						|
                    <label for="service_port" class="col-sm-4 col-form-label">TCP Port</label>
 | 
						|
                    <div class="col-sm-8">
 | 
						|
                        <input type="number" name="port" class="form-control" value="{{.Port}}" id="service_port" placeholder="8080">
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                <div class="form-group row">
 | 
						|
                    <label for="service_interval" class="col-sm-4 col-form-label">Check Interval (Seconds)</label>
 | 
						|
                    <div class="col-sm-8">
 | 
						|
                        <input type="number" name="interval" class="form-control" value="{{.Interval}}" id="service_interval" placeholder="10">
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                <div class="form-group row">
 | 
						|
                    <div class="col-6">
 | 
						|
                        <button type="submit" class="btn btn-success btn-block">Update Service</button>
 | 
						|
                    </div>
 | 
						|
                    <div class="col-6">
 | 
						|
                        <a href="/service/{{ .Id }}/delete_failures" class="btn btn-danger btn-block">Delete All Failures</a>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
            </form>
 | 
						|
 | 
						|
        </div>
 | 
						|
 | 
						|
<div class="col-12 mt-4">
 | 
						|
    <h3>Last Response</h3>
 | 
						|
 | 
						|
    <textarea rows="8" class="form-control" readonly>{{ .LastResponse }}</textarea>
 | 
						|
 | 
						|
    <div class="form-group row mt-2">
 | 
						|
        <label for="last_status_code" class="col-sm-3 col-form-label">Status Code</label>
 | 
						|
        <div class="col-sm-2">
 | 
						|
            <input type="text" id="last_status_code" class="form-control" value="{{ .LastStatusCode }}" readonly>
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
<div class="col-12 mt-4">
 | 
						|
    <h3>Service Checkins</h3>
 | 
						|
{{ range .Checkins }}
 | 
						|
    <h5>Check #{{.Id}} <span class="badge online_badge float-right">Checked in {{.Ago}}</span></h5>
 | 
						|
    <input type="text" class="form-control" value="https://domainhere.com/api/checkin/{{.Api}}">
 | 
						|
{{ end }}
 | 
						|
 | 
						|
    <form action="/service/{{.Id}}/checkin" method="POST">
 | 
						|
        <div class="form-group row">
 | 
						|
            <label for="service_name" class="col-sm-4 col-form-label">Check Interval (in seconds)</label>
 | 
						|
            <div class="col-md-6 col-sm-12">
 | 
						|
                <input type="number" name="name" class="form-control" id="checkin_interval" value="30" placeholder="Name">
 | 
						|
            </div>
 | 
						|
            <div class="col-md-2">
 | 
						|
                <button type="submit" class="btn btn-success d-none d-md-block float-right">Save Checkin</button>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
        <div class="form-group row">
 | 
						|
            <div class="col-sm-10">
 | 
						|
                <button type="submit" class="btn btn-success d-block d-md-none btn-block">Save Checkin</button>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
    </form>
 | 
						|
</div>
 | 
						|
 | 
						|
{{end}}
 | 
						|
 | 
						|
 | 
						|
</div>
 | 
						|
 | 
						|
    </div>
 | 
						|
 | 
						|
{{template "footer"}}
 | 
						|
 | 
						|
<script>
 | 
						|
    var ctx = document.getElementById("service").getContext('2d');
 | 
						|
 | 
						|
    var chartdata = new Chart(ctx, {
 | 
						|
        type: 'line',
 | 
						|
        data: {
 | 
						|
            datasets: [{
 | 
						|
                label: 'Response Time (Milliseconds)',
 | 
						|
                data: {{js .GraphData}},
 | 
						|
                backgroundColor: [
 | 
						|
                    'rgba(47, 206, 30, 0.92)'
 | 
						|
                ],
 | 
						|
                borderColor: [
 | 
						|
                    'rgb(47, 171, 34)'
 | 
						|
                ],
 | 
						|
                borderWidth: 1
 | 
						|
            }]
 | 
						|
        },
 | 
						|
        options: {
 | 
						|
            legend: {
 | 
						|
                display: false
 | 
						|
            },
 | 
						|
            scales: {
 | 
						|
                yAxes: [{
 | 
						|
                    ticks: {
 | 
						|
                        beginAtZero: true
 | 
						|
                    },
 | 
						|
                    gridLines: {
 | 
						|
                        display:false
 | 
						|
                    }
 | 
						|
                }],
 | 
						|
                xAxes: [{
 | 
						|
                    type: 'time',
 | 
						|
                    distribution: 'series',
 | 
						|
                    gridLines: {
 | 
						|
                        display:false
 | 
						|
                    }
 | 
						|
                }]
 | 
						|
            },
 | 
						|
            elements: {
 | 
						|
                point: {
 | 
						|
                    radius: 0
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    });
 | 
						|
</script>
 | 
						|
 | 
						|
<script src="/js/jquery-3.3.1.slim.min.js"></script>
 | 
						|
    <script src="/js/bootstrap.min.js"></script>
 | 
						|
</body>
 | 
						|
</html> |