syncthing/static/index.html

281 lines
9.7 KiB
HTML
Raw Normal View History

2014-06-12 01:40:54 +02:00
<!DOCTYPE html>
<!--
Copyright (C) 2014 Jakob Borg and other contributors. All rights reserved.
Use of this source code is governed by an MIT-style license that can be
found in the LICENSE file.
-->
2014-06-28 09:46:03 +02:00
<html lang="en">
2014-06-12 01:40:54 +02:00
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
2015-01-22 13:15:29 +01:00
<link rel="shortcut icon" href="static/assets/img/favicon.png">
2014-06-12 01:40:54 +02:00
<title>Syncthing Usage Reports</title>
2014-06-28 09:46:03 +02:00
<link href="static/bootstrap/css/bootstrap.min.css" rel="stylesheet">
2015-07-15 13:23:13 +02:00
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="static/bootstrap/js/bootstrap.min.js"></script>
2014-06-12 01:40:54 +02:00
<style type="text/css">
body {
margin: 40px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
2016-05-30 09:52:38 +02:00
tr.main td {
font-weight: bold;
}
tr.child td.first {
padding-left: 2em;
}
2014-06-12 01:40:54 +02:00
</style>
2015-05-21 10:11:00 +02:00
<script type="text/javascript"
src="https://www.google.com/jsapi?autoload={
'modules':[{
'name':'visualization',
'version':'1',
'packages':['corechart']
}]
}"></script>
<script type="text/javascript">
2015-07-15 13:23:13 +02:00
google.setOnLoadCallback(drawVersionChart);
google.setOnLoadCallback(drawMovementChart);
2015-05-21 10:11:00 +02:00
2015-07-15 13:23:13 +02:00
function drawVersionChart() {
2015-05-21 10:11:00 +02:00
var jsonData = $.ajax({url: "summary.json", dataType:"json", async: false}).responseText;
var rows = JSON.parse(jsonData);
var data = new google.visualization.DataTable();
data.addColumn('date', 'Day');
for (var i = 1; i < rows[0].length; i++){
data.addColumn('number', rows[0][i]);
}
for (var i = 1; i < rows.length; i++){
rows[i][0] = new Date(rows[i][0]);
data.addRow(rows[i]);
};
var options = {
legend: { position: 'bottom', alignment: 'center' },
isStacked: true,
colors: ['rgb(102,194,165)','rgb(252,141,98)','rgb(141,160,203)','rgb(231,138,195)','rgb(166,216,84)','rgb(255,217,47)'],
2015-06-01 13:11:53 +02:00
chartArea: {left: 80, top: 20, width: '1020', height: '300'},
2015-05-21 10:11:00 +02:00
};
2015-07-15 13:23:13 +02:00
var chart = new google.visualization.AreaChart(document.getElementById('versionChart'));
chart.draw(data, options);
}
function drawMovementChart() {
var jsonData = $.ajax({url: "movement.json", dataType:"json", async: false}).responseText;
var rows = JSON.parse(jsonData);
var data = new google.visualization.DataTable();
data.addColumn('date', 'Day');
for (var i = 1; i < rows[0].length; i++){
data.addColumn('number', rows[0][i]);
}
2015-07-15 13:45:33 +02:00
2015-07-15 13:23:13 +02:00
for (var i = 1; i < rows.length; i++){
rows[i][0] = new Date(rows[i][0]);
if (rows[i][1] > 500) {
rows[i][1] = null;
}
if (rows[i][2] < -500) {
rows[i][2] = null;
}
data.addRow(rows[i]);
};
var options = {
legend: { position: 'bottom', alignment: 'center' },
colors: ['rgb(102,194,165)','rgb(252,141,98)','rgb(141,160,203)','rgb(231,138,195)','rgb(166,216,84)','rgb(255,217,47)'],
chartArea: {left: 80, top: 20, width: '1020', height: '300'},
};
var chart = new google.visualization.AreaChart(document.getElementById('movementChart'));
2015-05-21 10:11:00 +02:00
chart.draw(data, options);
}
</script>
2014-06-12 01:40:54 +02:00
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
2014-06-12 02:13:30 +02:00
<h1>Syncthing Usage Data</h1>
2015-05-21 10:11:00 +02:00
2015-09-30 08:29:41 +02:00
<h4 id="active-users">Active Users per Day and Version</h4>
2015-05-21 10:11:00 +02:00
<p>
This is the total number of unique users with reporting enabled, per day. Area color represents the major version.
</p>
2015-07-15 13:23:13 +02:00
<div class="img-thumbnail" id="versionChart" style="width: 1130px; height: 400px; padding: 10px;"></div>
2015-09-30 08:29:41 +02:00
<h4 id="joining-leaving">Users Joining and Leaving per Day</h4>
2015-07-15 13:23:13 +02:00
<p>
2015-07-15 13:45:33 +02:00
This is the total number of unique users joining and leaving per day. A user is counted as "joined" on first the day their unique ID is seen, and as "left" on the last day the unique ID was seen before a two weeks or longer absence. "Bounced" refers to users who joined and left on the same day.
2015-07-15 13:23:13 +02:00
</p>
<div class="img-thumbnail" id="movementChart" style="width: 1130px; height: 400px; padding: 10px;"></div>
<p class="text-muted">
Reappearance of users cause the "left" data to shrink retroactively.
</p>
2015-05-21 10:11:00 +02:00
2015-09-30 08:29:41 +02:00
<h4 id="metrics">Usage Metrics</h4>
2014-06-12 02:13:30 +02:00
<p>
2015-02-15 12:00:15 +01:00
This is the aggregated usage report data for the last 24 hours. Data based on <b>{{.nodes}}</b> devices that have reported in.
2014-06-12 02:13:30 +02:00
</p>
<table class="table table-striped">
<thead>
<tr>
2014-06-16 16:47:54 +02:00
<th></th><th class="text-right">5%</th><th class="text-right">50%</th><th class="text-right">95%</th><th class="text-right">100%</th>
2014-06-12 02:13:30 +02:00
</tr>
</thead>
<tbody>
2014-06-28 11:24:25 +02:00
{{range .categories}}
2014-06-28 09:46:03 +02:00
<tr>
2014-06-28 11:24:25 +02:00
<td>{{.Descr}}</td>
<td class="text-right">{{index .Values 0 | number .Binary | commatize " "}}{{.Unit}}</td>
<td class="text-right">{{index .Values 1 | number .Binary | commatize " "}}{{.Unit}}</td>
<td class="text-right">{{index .Values 2 | number .Binary | commatize " "}}{{.Unit}}</td>
<td class="text-right">{{index .Values 3 | number .Binary | commatize " "}}{{.Unit}}</td>
2014-06-12 02:13:30 +02:00
</tr>
2014-06-28 09:46:03 +02:00
{{end}}
2014-06-12 02:13:30 +02:00
</tbody>
</table>
</div>
</div>
<div class="row">
2015-05-20 22:27:14 +02:00
2016-05-30 09:52:38 +02:00
<div class="col-md-6">
2014-06-12 02:13:30 +02:00
<table class="table table-striped">
<thead>
<tr>
2015-02-15 12:00:15 +01:00
<th>Version</th><th class="text-right">Devices</th><th class="text-right">Share</th>
2014-06-12 02:13:30 +02:00
</tr>
</thead>
<tbody>
2014-06-28 09:46:03 +02:00
{{range .versions}}
2016-05-30 09:52:38 +02:00
{{if gt .Percentage 0.5}}
<tr class="main">
<td>{{.Key}}</td>
<td class="text-right">{{.Count}}</td>
<td class="text-right">{{.Percentage | printf "%.01f"}}%</td>
</tr>
{{range .Items}}
<tr class="child">
<td class="first">{{.Key}}</td>
<td class="text-right">{{.Count}}</td>
<td class="text-right">{{.Percentage | printf "%.01f"}}%</td>
</tr>
{{end}}
{{end}}
2014-06-28 09:46:03 +02:00
{{end}}
2014-06-12 02:13:30 +02:00
</tbody>
</table>
</div>
2015-05-20 22:27:14 +02:00
2016-05-30 09:52:38 +02:00
<div class="col-md-6">
2014-06-12 02:13:30 +02:00
<table class="table table-striped">
<thead>
<tr>
2015-02-15 12:00:15 +01:00
<th>Platform</th><th class="text-right">Devices</th><th class="text-right">Share</th>
2014-06-12 02:13:30 +02:00
</tr>
</thead>
<tbody>
2014-06-28 09:46:03 +02:00
{{range .platforms}}
2016-05-30 09:52:38 +02:00
<tr class="main">
<td>{{.Key}}</td>
<td class="text-right">{{.Count}}</td>
<td class="text-right">{{.Percentage | printf "%.01f"}}%</td>
</tr>
{{range .Items}}
<tr class="child">
<td class="first">{{.Key}}</td>
<td class="text-right">{{.Count}}</td>
<td class="text-right">{{.Percentage | printf "%.01f"}}%</td>
</tr>
{{end}}
2014-06-28 09:46:03 +02:00
{{end}}
2014-06-20 23:24:27 +02:00
</tbody>
</table>
</div>
2015-05-20 22:27:14 +02:00
</div>
<div class="row">
<div class="col-md-6">
<table class="table table-striped">
<thead>
<tr>
<th>Compiler</th><th class="text-right">Devices</th><th class="text-right">Share</th>
</tr>
</thead>
<tbody>
{{range .compilers}}
2016-06-07 08:12:32 +02:00
<tr class="main">
<td>{{.Key}}</td>
<td class="text-right">{{.Count}}</td>
<td class="text-right">{{.Percentage | printf "%.01f"}}%</td>
</tr>
{{range .Items}}
<tr class="child">
<td class="first">{{.Key}}</td>
<td class="text-right">{{.Count}}</td>
<td class="text-right">{{.Percentage | printf "%.01f"}}%</td>
</tr>
{{end}}
2015-05-20 22:27:14 +02:00
{{end}}
</tbody>
</table>
</div>
<div class="col-md-6">
<table class="table table-striped">
<thead>
<tr>
<th>Builder</th><th class="text-right">Devices</th><th class="text-right">Share</th>
</tr>
</thead>
<tbody>
{{range .builders}}
<tr>
<td>{{.Key}}</td>
<td class="text-right">{{.Count}}</td>
<td class="text-right">{{.Percentage | printf "%.01f"}}%</td>
</tr>
{{end}}
</tbody>
</table>
</div>
2014-06-12 01:40:54 +02:00
</div>
2015-09-11 10:56:32 +02:00
<div class="row">
<div class="col-md-12">
2015-09-30 08:29:41 +02:00
<h4 id="features">Feature Usage</h4>
2015-09-11 10:56:32 +02:00
<p>
The following lists feature usage, as a percentage of the v0.12+ population (<b>{{.v2nodes}}</b> devices).
</p>
<table class="table table-striped">
<thead><tr><th>Feature</th><th colspan="2" class="text-center">Usage</th></tr></thead>
<tbody>
{{range .features}}
<tr>
<td style="width: 30%">{{.Key}}</td>
2016-06-09 11:55:05 +02:00
<td style="width: 10%" class="text-right">{{if ge .Pct 10.0}}{{.Pct | printf "%.0f"}}{{else if ge .Pct 1.0}}{{.Pct | printf "%.01f"}}{{else}}{{.Pct | printf "%.02f"}}{{end}}%</td>
2015-09-11 10:56:32 +02:00
<td style="width: 60%">
2016-06-09 11:55:05 +02:00
<div class="progress-bar" role="progressbar" aria-valuenow="{{.Pct | printf "%.02f"}}" aria-valuemin="0" aria-valuemax="100" style="width: {{.Pct | printf "%.02f"}}%; height:20px"></div>
2015-09-11 10:56:32 +02:00
</td>
</tr>
{{end}}
</tbody>
</table>
</div>
</div>
2014-06-12 01:40:54 +02:00
</div>
</body>
</html>