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}}
