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 : 40 px ;
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 : 2 em ;
}
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 >