Details
-
Improvement
-
Resolution: Fixed
-
Major
-
7.4
-
None
Description
Idea from Thomas.
I've implemented it on xwiki.org.
Code for ActiveInstalls.XWikiVersionsCycle:
{{velocity}}
{{chart type="pie" source="xdom" params="document:ActiveInstalls.XWikiVersionsCycleData;range:B2-B.;series:columns;pie_label_format:{0} - {2} ({1})"/}}
{{/velocity}}
Code for ActiveInstalls.XWikiVersionsCycleData:
{{include reference="ActiveInstalls.QueryVariables"/}}
{{velocity}}
#set ($query = "
{
""query"": {
""query_string"": {
""lowercase_expanded_terms"": false,
""query"": ""_timestamp:[now-1d TO *] $snapshotQueryFragment AND distributionId:\""$distributionId\""""
}
},
""aggs"": {
""versions"": {
""terms"": {
""field"": ""distributionVersion"",
""size"": 100
},
""aggs"": {
""instanceId_count"": {
""cardinality"": {
""field"": ""instanceId""
}
}
}
}
}
}
")
#set ($result = $services.activeinstalls.searchInstalls("install2", $query, {"search_type": "count"}))
#set ($headingLine = "|=XWiki Version|=Active Installs Count")
#if (!$result)
#set ($errorText = $!services.activeinstalls.lastError)
{{error}}{{{$errorText}}}{{/error}}
## Still generate an empty table so that the chart macro using it doesn't fail!
$headingLine
#else
## Generate table with data
#set ($jsonItems = $result.getAsJsonObject('aggregations').getAsJsonObject('versions').getAsJsonArray('buckets'))
$headingLine
#set ($count = {})
#foreach ($jsonItem in $jsonItems)
#set ($version = $jsonItem.getAsJsonPrimitive('key').getAsString())
#if ($request.all == 'true' || (!$version.contains('milestone') && !$version.contains('rc')))
## Extract first digit before '.'
#set ($branch = $stringtool.substringBefore($version, '.'))
#set ($branchCount = $count.get($branch))
#if ("$!branchCount" == '')
#set ($branchCount = 0)
#end
#set ($value = $jsonItem.getAsJsonObject('instanceId_count').getAsJsonPrimitive('value').getAsLong())
#set ($branchCount = $mathtool.add($branchCount, $value))
#set ($discard = $count.put($branch, $branchCount))
#end
#end
#foreach ($branchEntry in $count.entrySet())
|${branchEntry.key}.x|$branchEntry.value
#end
#end
{{/velocity}}