Added country chart about organizations and services.

This commit is contained in:
Christian P. MOMON 2021-01-15 05:49:47 +01:00
parent b479308383
commit 54b6275b9d
9 changed files with 224 additions and 2 deletions

View file

@ -92,6 +92,21 @@ public class Organization extends PathPropertyList
return result; return result;
} }
/**
* Gets the country code.
*
* @return the country code
*/
public String getCountryCode()
{
String result;
result = get("organization.country.code");
//
return result;
}
/** /**
* Gets the crawled date. * Gets the crawled date.
* *

View file

@ -149,6 +149,21 @@ public class Service extends PathPropertyList
return result; return result;
} }
/**
* Gets the country code.
*
* @return the country code
*/
public String getCountryCode()
{
String result;
result = get("organization.country.code");
//
return result;
}
public LocalDateTime getCrawledDate() public LocalDateTime getCrawledDate()
{ {
LocalDateTime result; LocalDateTime result;

View file

@ -41,7 +41,7 @@ import fr.devinsy.xidyn.data.TagDataManager;
import fr.devinsy.xidyn.presenters.PresenterUtils; import fr.devinsy.xidyn.presenters.PresenterUtils;
/** /**
* The Class SocialNetworksPage. * The Class FederationStatsPage.
*/ */
public class FederationStatsPage public class FederationStatsPage
{ {
@ -68,9 +68,12 @@ public class FederationStatsPage
TagDataManager data = new TagDataManager(); TagDataManager data = new TagDataManager();
data.setContent("turnoutChart", Htmlizer.htmlizeOrganizationTurnoutChart(federation.getOrganizations())); data.setContent("turnoutChart", Htmlizer.htmlizeOrganizationTurnoutChart(federation.getOrganizations()));
data.setContent("organizationCountryChart", Htmlizer.htmlizeOrganizationCountryChart(federation.getOrganizations()));
data.setContent("hostServerTypeChart", Htmlizer.htmlizeHostServerTypeChart(federation.getAllServices())); data.setContent("hostServerTypeChart", Htmlizer.htmlizeHostServerTypeChart(federation.getAllServices()));
data.setContent("hostProviderTypeChart", Htmlizer.htmlizeHostProviderTypeChart(federation.getAllServices())); data.setContent("hostProviderTypeChart", Htmlizer.htmlizeHostProviderTypeChart(federation.getAllServices()));
data.setContent("serviceInstallTypeChart", Htmlizer.htmlizeServiceInstallTypeChart(federation.getAllServices())); data.setContent("serviceInstallTypeChart", Htmlizer.htmlizeServiceInstallTypeChart(federation.getAllServices()));
data.setContent("serviceCountryChart", Htmlizer.htmlizeServiceCountryChart(federation.getAllServices()));
// //
{ {

View file

@ -41,6 +41,7 @@ import fr.devinsy.statoolinfos.htmlize.charts.PieChart;
import fr.devinsy.statoolinfos.htmlize.charts.PieChart.Position; import fr.devinsy.statoolinfos.htmlize.charts.PieChart.Position;
import fr.devinsy.statoolinfos.htmlize.charts.PieChartView; import fr.devinsy.statoolinfos.htmlize.charts.PieChartView;
import fr.devinsy.statoolinfos.stats.StatAgent; import fr.devinsy.statoolinfos.stats.StatAgent;
import fr.devinsy.statoolinfos.stats.country.CountryStats;
import fr.devinsy.statoolinfos.stats.organizations.OrganizationTurnoutStats; import fr.devinsy.statoolinfos.stats.organizations.OrganizationTurnoutStats;
import fr.devinsy.statoolinfos.stats.services.HostProviderTypeStats; import fr.devinsy.statoolinfos.stats.services.HostProviderTypeStats;
import fr.devinsy.statoolinfos.stats.services.HostServerTypeStats; import fr.devinsy.statoolinfos.stats.services.HostServerTypeStats;
@ -247,6 +248,31 @@ public class Htmlizer
return result; return result;
} }
/**
* @param organizations
* @return
* @throws StatoolInfosException
*/
public static String htmlizeOrganizationCountryChart(final Organizations organizations) throws StatoolInfosException
{
String result;
CountryStats stats = StatAgent.statsCountry(organizations);
PieChart pie = new PieChart("Pays des membres");
int index = 0;
for (String country : stats.keySet())
{
pie.add(country, stats.get(country), ChartColor.values()[index]);
}
pie.setLegendPosition(Position.RIGHT);
result = PieChartView.build(pie);
//
return result;
}
/** /**
* Htmlize organization turnout chart. * Htmlize organization turnout chart.
* *
@ -296,6 +322,35 @@ public class Htmlizer
return result; return result;
} }
/**
* Htmlize service country chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceCountryChart(final Services services) throws StatoolInfosException
{
String result;
CountryStats stats = StatAgent.statsCountry(services);
PieChart pie = new PieChart("Pays des services");
int index = 0;
for (String country : stats.keySet())
{
pie.add(country, stats.get(country), ChartColor.values()[index]);
}
pie.setLegendPosition(Position.RIGHT);
result = PieChartView.build(pie);
//
return result;
}
/** /**
* Htmlize service install type chart. * Htmlize service install type chart.
* *

View file

@ -89,6 +89,7 @@ public class OrganizationStatsPage
data.setContent("hostServerTypeChart", Htmlizer.htmlizeHostServerTypeChart(organization.getServices())); data.setContent("hostServerTypeChart", Htmlizer.htmlizeHostServerTypeChart(organization.getServices()));
data.setContent("hostProviderTypeChart", Htmlizer.htmlizeHostProviderTypeChart(organization.getServices())); data.setContent("hostProviderTypeChart", Htmlizer.htmlizeHostProviderTypeChart(organization.getServices()));
data.setContent("serviceInstallTypeChart", Htmlizer.htmlizeServiceInstallTypeChart(organization.getServices())); data.setContent("serviceInstallTypeChart", Htmlizer.htmlizeServiceInstallTypeChart(organization.getServices()));
data.setContent("serviceCountryChart", Htmlizer.htmlizeServiceCountryChart(organization.getServices()));
// //
{ {

View file

@ -17,11 +17,13 @@
<div> <div>
<div> <div>
<div id="turnoutChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="turnoutChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
<div id="organizationCountryChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
</div> </div>
<div> <div>
<div id="hostServerTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="hostServerTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
<div id="hostProviderTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="hostProviderTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
<div id="serviceInstallTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="serviceInstallTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
<div id="serviceCountryChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
</div> </div>
<div class="row"> <div class="row">
<div id="registrationTypeChart" class="column chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="registrationTypeChart" class="column chartborder" style="width: 250px; height: 200px; display: inline-block;"/>

View file

@ -22,6 +22,7 @@
<div id="hostServerTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="hostServerTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
<div id="hostProviderTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="hostProviderTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
<div id="serviceInstallTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="serviceInstallTypeChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
<div id="serviceCountryChart" class="chartborder" style="width: 250px; height: 200px; display: inline-block;"/>
</div> </div>
<div class="row"> <div class="row">
<div id="registrationTypeChart" class="column chartborder" style="width: 250px; height: 200px; display: inline-block;"/> <div id="registrationTypeChart" class="column chartborder" style="width: 250px; height: 200px; display: inline-block;"/>

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2020 Christian Pierre MOMON <christian@momon.org> * Copyright (C) 2020-2021 Christian Pierre MOMON <christian@momon.org>
* *
* This file is part of StatoolInfos, simple service statistics tool. * This file is part of StatoolInfos, simple service statistics tool.
* *
@ -40,6 +40,7 @@ import fr.devinsy.statoolinfos.crawl.CrawlCache;
import fr.devinsy.statoolinfos.properties.PathPropertyList; import fr.devinsy.statoolinfos.properties.PathPropertyList;
import fr.devinsy.statoolinfos.stats.categories.CategoryStat; import fr.devinsy.statoolinfos.stats.categories.CategoryStat;
import fr.devinsy.statoolinfos.stats.categories.CategoryStats; import fr.devinsy.statoolinfos.stats.categories.CategoryStats;
import fr.devinsy.statoolinfos.stats.country.CountryStats;
import fr.devinsy.statoolinfos.stats.organizations.OrganizationTurnoutStats; import fr.devinsy.statoolinfos.stats.organizations.OrganizationTurnoutStats;
import fr.devinsy.statoolinfos.stats.properties.PropertyStats; import fr.devinsy.statoolinfos.stats.properties.PropertyStats;
import fr.devinsy.statoolinfos.stats.propertyfiles.PropertiesFileStats; import fr.devinsy.statoolinfos.stats.propertyfiles.PropertiesFileStats;
@ -330,6 +331,52 @@ public class StatAgent
return result; return result;
} }
/**
* Stats country.
*
* @param organizations
* the organizations
* @return the country stats
*/
public static CountryStats statsCountry(final Organizations organizations)
{
CountryStats result;
result = new CountryStats();
//
for (Organization organization : organizations)
{
result.inc(organization.getCountryCode());
}
//
return result;
}
/**
* Stats country.
*
* @param services
* the services
* @return the country stats
*/
public static CountryStats statsCountry(final Services services)
{
CountryStats result;
result = new CountryStats();
//
for (Service service : services)
{
result.inc(service.getCountryCode());
}
//
return result;
}
/** /**
* Stat service install type. * Stat service install type.
* *

View file

@ -0,0 +1,83 @@
/*
* Copyright (C) 2021 Christian Pierre MOMON <christian@momon.org>
*
* This file is part of StatoolInfos, simple service statistics tool.
*
* StatoolInfos is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* StatoolInfos is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with StatoolInfos. If not, see <http://www.gnu.org/licenses/>.
*/
package fr.devinsy.statoolinfos.stats.country;
import java.util.HashMap;
import org.apache.commons.lang3.StringUtils;
/**
* The Class CountryStats.
*/
public class CountryStats extends HashMap<String, Integer>
{
private static final long serialVersionUID = -8177123413128556290L;
/**
* Instantiates a new country stats.
*/
public CountryStats()
{
super();
}
/**
* Gets the total count.
*
* @return the total count
*/
public long getTotalCount()
{
long result;
result = 0;
for (long value : this.values())
{
result += value;
}
//
return result;
}
/**
* Inc.
*
* @param country
* the country
*/
public void inc(final String country)
{
if (StringUtils.isBlank(country))
{
inc("Inconnu");
}
else
{
Integer currentValue = get(country);
if (currentValue == null)
{
currentValue = 0;
}
currentValue += 1;
put(country, currentValue);
}
}
}