mirror of
https://github.com/nxshock/gron.git
synced 2025-07-01 00:13:36 +05:00
New updates
* Rework job status * Group WebUI files * New WebUI details page
This commit is contained in:
parent
236507c5c0
commit
1c00dfabc9
9 changed files with 391 additions and 241 deletions
78
webui/details.htm
Normal file
78
webui/details.htm
Normal file
|
@ -0,0 +1,78 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>gron</title>
|
||||
<link rel="stylesheet" href="/style.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<a class="dropdown dropbtn" href="/" class="dropbtn">← Back</a>
|
||||
<h1>{{.Name}}</h1>
|
||||
<table class="stats">
|
||||
<tr>
|
||||
<td>Description</td>
|
||||
<td>{{.JobConfig.Description}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cron</td>
|
||||
<td><pre>{{.JobConfig.Cron}}</pre></td>
|
||||
</td>
|
||||
<tr>
|
||||
<td>Command</td>
|
||||
<td><pre>{{.JobConfig.Command}}</pre></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Status</td>
|
||||
<td>{{if eq .Status 0}}⯀ inactive{{end}}{{if eq .Status 1}}<span class="green">⯈ running</span>{{end}}{{if eq .Status 2}}<span class="red">⯁ error</span>{{end}}{{if eq .Status 3}}<span class="orange">⟳ restarting</span>{{end}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h2>Stats</h2>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Start time</td>
|
||||
<td>{{.LastStartTime}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Finish time</td>
|
||||
<td>{{.LastEndTime}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Duration</td>
|
||||
<td>{{.LastExecutionDuration}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Last error</td>
|
||||
<td><pre class="red">{{.LastError}}</pre></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Next launch</td>
|
||||
<td>{{.NextLaunch}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<h2>On error action</h2>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Restart rule</td>
|
||||
<td>{{if eq .JobConfig.RestartRule 0}}no restart{{end}}{{if eq .JobConfig.RestartRule 1}}restart on error{{end}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Number of restart attempts</td>
|
||||
<td>{{.JobConfig.NumberOfRestartAttemts}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Restart delay</td>
|
||||
<td>{{if eq .JobConfig.RestartSec 0}}none{{else}}{{.JobConfig.RestartSec}} sec{{end}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</main>
|
||||
</body>
|
||||
|
||||
</html>
|
BIN
webui/font.ttf
Normal file
BIN
webui/font.ttf
Normal file
Binary file not shown.
57
webui/index.htm
Normal file
57
webui/index.htm
Normal file
|
@ -0,0 +1,57 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>gron</title>
|
||||
<link rel="stylesheet" href="/style.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main>
|
||||
<div class="dropdown">
|
||||
<button class="dropbtn">☰ Menu</button>
|
||||
<div class="dropdown-content">
|
||||
<a href="/reloadJobs">⟳ Reload jobs</a>
|
||||
<a>
|
||||
<hr>
|
||||
</a>
|
||||
<a href="/shutdown">⏻ Shutdown</a>
|
||||
</div>
|
||||
</div>
|
||||
<h1>Job list</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Description</th>
|
||||
<th>Cron</th>
|
||||
<th>Status</th>
|
||||
<th>Start time</th>
|
||||
<th>Finish time</th>
|
||||
<th>Duration</th>
|
||||
<th>Next launch</th>
|
||||
<th>Details</th>
|
||||
</tr>
|
||||
{{range .}}
|
||||
<tr>
|
||||
<td class="no-padding">
|
||||
<form action="/start" method="get" id="form-{{.Name}}"></form>
|
||||
<button{{if gt .CurrentRunningCount 0}} class="runningbg" {{else}}{{if .LastError}} class="errorbg" {{end}}{{end}} type="submit" form="form-{{.Name}}" name="jobName" value="{{.Name}}" {{if gt .CurrentRunningCount 0}} disabled{{end}}>{{.Name}}</button>
|
||||
</td>
|
||||
<td class="smaller">{{.JobConfig.Description}}</td>
|
||||
<td class="nowrap" align="right">
|
||||
<pre>{{.JobConfig.Cron}}</pre>
|
||||
</td>
|
||||
<td class="nowrap">{{if eq .Status 0}}⯀ inactive{{end}}{{if eq .Status 1}}<span class="green">⯈ running</span>{{end}}{{if eq .Status 2}}<span class="red">⯁ error</span>{{end}}{{if eq .Status 3}}<span class="orange">⟳ restarting</span>{{end}}</td>
|
||||
<td>{{.LastStartTime}}</td>
|
||||
<td>{{.LastEndTime}}</td>
|
||||
<td align="right">{{.LastExecutionDuration}}</td>
|
||||
<td>{{.NextLaunch}}</td>
|
||||
<td class="centered"><a href="/details?jobName={{.Name}}">open</a></td>
|
||||
</tr>{{end}}
|
||||
</table>
|
||||
</main>
|
||||
</body>
|
||||
|
||||
</html>
|
203
webui/style.css
Normal file
203
webui/style.css
Normal file
|
@ -0,0 +1,203 @@
|
|||
/* Based on base16 architecture for building themes
|
||||
https://github.com/chriskempson/base16 */
|
||||
|
||||
:root {
|
||||
/* Default Background */
|
||||
--base00: #282c34;
|
||||
/* Lighter Background */
|
||||
--base01: #353b45;
|
||||
/* Selection Background */
|
||||
--base02: #3e4451;
|
||||
/* Comments, Invisibles, Line Highlighting */
|
||||
--base03: #545862;
|
||||
/* Dark Foreground (Used for status bars) */
|
||||
--base04: #565c64;
|
||||
/* Default Foreground, Caret, Delimiters, Operators */
|
||||
--base05: #abb2bf;
|
||||
/* Light Foreground (Not often used) */
|
||||
--base06: #b6bdca;
|
||||
/* Light Background (Not often used) */
|
||||
--base07: #c8ccd4;
|
||||
/* Red */
|
||||
--base08: #e06c75;
|
||||
/* Orange */
|
||||
--base09: #d19a66;
|
||||
/* Yellow */
|
||||
--base0A: #e5c07b;
|
||||
/* Green */
|
||||
--base0B: #98c379;
|
||||
/* Aqua */
|
||||
--base0C: #56b6c2;
|
||||
/* Blue */
|
||||
--base0D: #61afef;
|
||||
/* Purple */
|
||||
--base0E: #c678dd;
|
||||
/* Dark red */
|
||||
--base0F: #be5046;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Roboto;
|
||||
src: url('/font.ttf');
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: Roboto;
|
||||
font-size: 14px;
|
||||
color: var(--base05);
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
height: 100%
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: var(--base00);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: nowrap;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0.5em;
|
||||
font-size: 150%;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0.5em;
|
||||
font-size: 125%;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
color: var(--base0D);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
main {
|
||||
flex-grow: 1;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: var(--base01);
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
border: 1px solid var(--base01);
|
||||
padding: 0.25em;
|
||||
}
|
||||
|
||||
table button {
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
background-color: var(--base01);
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
padding: 0.25em;
|
||||
}
|
||||
|
||||
form {
|
||||
display: none;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: "Consolas";
|
||||
}
|
||||
|
||||
.no-padding {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.centered {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.smaller {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
.nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.errorbg {
|
||||
background-color: var(--base08);
|
||||
}
|
||||
|
||||
.runningbg {
|
||||
background-color: var(--base0B);
|
||||
}
|
||||
|
||||
.dropbtn {
|
||||
background-color: var(--base01);
|
||||
color: var(--base05);
|
||||
padding: 0.5em;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.dropdown {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
background-color: var(--base01);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.dropdown-content a {
|
||||
color: var(--base05);
|
||||
padding: 0.5em;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.dropdown:hover .dropdown-content {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.green {
|
||||
color: var(--base0B);
|
||||
}
|
||||
|
||||
.orange {
|
||||
color: var(--base09);
|
||||
}
|
||||
|
||||
.red {
|
||||
color: var(--base08);
|
||||
}
|
||||
|
||||
table.stats td {
|
||||
border-top: 1px solid var(--base01);
|
||||
border-bottom: 1px solid var(--base01);
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
table.stats td:first-child {
|
||||
font-weight: bold;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue