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 >