aboutsummaryrefslogtreecommitdiff
path: root/weed/server/volume_server_ui/templates.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server/volume_server_ui/templates.go')
-rw-r--r--weed/server/volume_server_ui/templates.go135
1 files changed, 135 insertions, 0 deletions
diff --git a/weed/server/volume_server_ui/templates.go b/weed/server/volume_server_ui/templates.go
new file mode 100644
index 000000000..c3db6e92a
--- /dev/null
+++ b/weed/server/volume_server_ui/templates.go
@@ -0,0 +1,135 @@
+package master_ui
+
+import (
+ "html/template"
+ "strconv"
+ "strings"
+)
+
+func join(data []int64) string {
+ var ret []string
+ for _, d := range data {
+ ret = append(ret, strconv.Itoa(int(d)))
+ }
+ return strings.Join(ret, ",")
+}
+
+var funcMap = template.FuncMap{
+ "join": join,
+}
+
+var StatusTpl = template.Must(template.New("status").Funcs(funcMap).Parse(`<!DOCTYPE html>
+<html>
+ <head>
+ <title>SeaweedFS {{ .Version }}</title>
+ <link rel="icon" href="http://7viirv.com1.z0.glb.clouddn.com/seaweed_favicon.png" sizes="32x32" />
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+ <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
+ <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-sparklines/2.1.2/jquery.sparkline.min.js"></script>
+ <script type="text/javascript">
+ $(function() {
+ var periods = ['second', 'minute', 'hour', 'day'];
+ for (i = 0; i < periods.length; i++) {
+ var period = periods[i];
+ $('.inlinesparkline-'+period).sparkline('html', {
+ type: 'line',
+ barColor: 'red',
+ tooltipSuffix:' request per '+period,
+ });
+ }
+ });
+ </script>
+ <style>
+ #jqstooltip{
+ height: 28px !important;
+ width: 150px !important;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="container">
+ <div class="page-header">
+ <h1>
+ <img src="http://7viirv.com1.z0.glb.clouddn.com/seaweed50x50.png"></img>
+ SeaweedFS <small>{{ .Version }}</small>
+ </h1>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-6">
+ <h2>Disk Stats</h2>
+ <table class="table table-condensed table-striped">
+ {{ range .DiskStatuses }}
+ <tr>
+ <th>{{ .Dir }}</th>
+ <td>{{ .Free }} Bytes Free</td>
+ </tr>
+ {{ end }}
+ </table>
+ </div>
+
+ <div class="col-sm-6">
+ <h2>System Stats</h2>
+ <table class="table table-condensed table-striped">
+ <tr>
+ <th>Master</th>
+ <td><a href="http://{{.Master}}/ui/index.html">{{.Master}}</a></td>
+ </tr>
+ <tr>
+ <th>Weekly # ReadRequests</th>
+ <td><span class="inlinesparkline-day">{{ .Counters.ReadRequests.WeekCounter.ToList | join }}</span></td>
+ </tr>
+ <tr>
+ <th>Daily # ReadRequests</th>
+ <td><span class="inlinesparkline-hour">{{ .Counters.ReadRequests.DayCounter.ToList | join }}</span></td>
+ </tr>
+ <tr>
+ <th>Hourly # ReadRequests</th>
+ <td><span class="inlinesparkline-minute">{{ .Counters.ReadRequests.HourCounter.ToList | join }}</span></td>
+ </tr>
+ <tr>
+ <th>Last Minute # ReadRequests</th>
+ <td><span class="inlinesparkline-second">{{ .Counters.ReadRequests.MinuteCounter.ToList | join }}</span></td>
+ </tr>
+ {{ range $key, $val := .Stats }}
+ <tr>
+ <th>{{ $key }}</th>
+ <td>{{ $val }}</td>
+ </tr>
+ {{ end }}
+ </table>
+ </div>
+ </div>
+
+ <div class="row">
+ <h2>Volumes</h2>
+ <table class="table table-striped">
+ <thead>
+ <tr>
+ <th>Id</th>
+ <th>Collection</th>
+ <th>Size</th>
+ <th>Files</th>
+ <th>Trash</th>
+ <th>TTL</th>
+ </tr>
+ </thead>
+ <tbody>
+ {{ range .Volumes }}
+ <tr>
+ <td><code>{{ .Id }}</code></td>
+ <td>{{ .Collection }}</td>
+ <td>{{ .Size }} Bytes</td>
+ <td>{{ .FileCount }}</td>
+ <td>{{ .DeleteCount }} / {{.DeletedByteCount}} Bytes</td>
+ <td>{{ .Ttl }}</td>
+ </tr>
+ {{ end }}
+ </tbody>
+ </table>
+ </div>
+
+ </div>
+ </body>
+</html>
+`))