Refactored chart htmlizing.

This commit is contained in:
Christian P. MOMON 2021-05-22 20:20:59 +02:00
parent e8b479f386
commit 0c51e9d257
3 changed files with 32 additions and 994 deletions

View file

@ -29,11 +29,6 @@ import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.HtmlizerContext; import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.core.Federation; import fr.devinsy.statoolinfos.core.Federation;
import fr.devinsy.statoolinfos.core.StatoolInfosException; import fr.devinsy.statoolinfos.core.StatoolInfosException;
import fr.devinsy.statoolinfos.htmlize.charts.BarChart;
import fr.devinsy.statoolinfos.htmlize.charts.BarChartView;
import fr.devinsy.statoolinfos.htmlize.charts.ChartColor;
import fr.devinsy.statoolinfos.htmlize.charts.DoughnutChartView;
import fr.devinsy.statoolinfos.htmlize.charts.PieChart;
import fr.devinsy.statoolinfos.stats.StatAgent; import fr.devinsy.statoolinfos.stats.StatAgent;
import fr.devinsy.statoolinfos.stats.services.RegistrationStats; import fr.devinsy.statoolinfos.stats.services.RegistrationStats;
import fr.devinsy.xidyn.XidynException; import fr.devinsy.xidyn.XidynException;
@ -67,57 +62,36 @@ public class FederationStatsPage
TagDataManager data = new TagDataManager(); TagDataManager data = new TagDataManager();
data.setContent("turnoutChart", Htmlizer.htmlizeOrganizationTurnoutChart(federation.getOrganizations())); data.setContent("turnoutChart", ChartHtmlizer.htmlizeOrganizationTurnoutChart(federation.getOrganizations()));
data.setContent("organizationCountryChart", Htmlizer.htmlizeOrganizationCountryChart(federation.getOrganizations())); data.setContent("organizationCountryChart", ChartHtmlizer.htmlizeOrganizationCountryChart(federation.getOrganizations()));
data.setContent("organizationCountChart", Htmlizer.htmlizeOrganizationCountChart(federation)); data.setContent("organizationCountChart", ChartHtmlizer.htmlizeOrganizationCountChart(federation));
data.setContent("organizationInOutChart", Htmlizer.htmlizeOrganizationInOutChart(federation)); data.setContent("organizationInOutChart", ChartHtmlizer.htmlizeOrganizationInOutChart(federation));
data.setContent("hostServerTypeChart", Htmlizer.htmlizeHostServerTypeChart(federation.getAllServices())); data.setContent("hostServerTypeChart", ChartHtmlizer.htmlizeHostServerTypeChart(federation.getAllServices()));
data.setContent("hostProviderTypeChart", Htmlizer.htmlizeHostProviderTypeChart(federation.getAllServices())); data.setContent("hostProviderTypeChart", ChartHtmlizer.htmlizeHostProviderTypeChart(federation.getAllServices()));
data.setContent("serviceInstallTypeChart", Htmlizer.htmlizeServiceInstallTypeChart(federation.getAllServices())); data.setContent("serviceInstallTypeChart", ChartHtmlizer.htmlizeServiceInstallTypeChart(federation.getAllServices()));
data.setContent("serviceCountryChart", Htmlizer.htmlizeServiceCountryChart(federation.getAllServices())); data.setContent("serviceCountryChart", ChartHtmlizer.htmlizeServiceCountryChart(federation.getAllServices()));
// //
{ {
RegistrationStats stats = StatAgent.statRegistrationTypes(federation.getAllServices()); RegistrationStats stats = StatAgent.statRegistrationTypes(federation.getAllServices());
BarChart bar = Htmlizer.toBarChart(stats); data.setContent("registrationTypeChart", ChartHtmlizer.htmlizeRegistrationBarChart(stats));
data.setContent("registrationTypeChart", BarChartView.build(bar)); data.setContent("registrationNoneTypeChart", ChartHtmlizer.htmlizeRegistrationNonePieChart(stats));
data.setContent("registrationFreeTypeChart", ChartHtmlizer.htmlizeRegistrationFreePieChart(stats));
PieChart pie = new PieChart("Sans"); data.setContent("registrationMemberTypeChart", ChartHtmlizer.htmlizeRegistrationMemberPieChart(stats));
pie.setLegendVisible(false); data.setContent("registrationClientTypeChart", ChartHtmlizer.htmlizeRegistrationClientPieChart(stats));
pie.add("Sans", stats.getNoneCount(), ChartColor.GREEN);
pie.add("Autre", stats.getCount() - stats.getNoneCount(), ChartColor.BLUE);
data.setContent("registrationNoneTypeChart", DoughnutChartView.build(pie));
pie = new PieChart("Libre");
pie.setLegendVisible(false);
pie.add("Sans", stats.getFreeCount(), ChartColor.YELLOW);
pie.add("Libre", stats.getCount() - stats.getFreeCount(), ChartColor.BLUE);
data.setContent("registrationFreeTypeChart", DoughnutChartView.build(pie));
pie = new PieChart("Membre");
pie.setLegendVisible(false);
pie.add("Sans", stats.getMemberCount(), ChartColor.ORANGE);
pie.add("Membre", stats.getCount() - stats.getMemberCount(), ChartColor.BLUE);
data.setContent("registrationMemberTypeChart", DoughnutChartView.build(pie));
pie = new PieChart("Client");
pie.setLegendVisible(false);
pie.add("Sans", stats.getClientCount(), ChartColor.RED);
pie.add("Client", stats.getCount() - stats.getClientCount(), ChartColor.BLUE);
data.setContent("registrationClientTypeChart", DoughnutChartView.build(pie));
} }
data.setContent("serviceCountYearChart", Htmlizer.htmlizeServiceCountYearChart(federation)); data.setContent("serviceCountYearChart", ChartHtmlizer.htmlizeServiceCountYearChart(federation));
data.setContent("serviceDateStatusChart", Htmlizer.htmlizeServiceDateStatusChart(federation.getAllServices())); data.setContent("serviceDateStatusChart", ChartHtmlizer.htmlizeServiceDateStatusChart(federation.getAllServices()));
data.setContent("softwareDistributionChart", Htmlizer.htmlizeSoftwareDistributionChart()); data.setContent("softwareDistributionChart", ChartHtmlizer.htmlizeSoftwareDistributionChart());
data.setContent("softwareDistributionPieChart", Htmlizer.htmlizeSoftwareDistributionPieChart(federation.getAllServices())); data.setContent("softwareDistributionPieChart", ChartHtmlizer.htmlizeSoftwareDistributionPieChart(federation.getAllServices()));
data.setContent("categoryDistributionChart", Htmlizer.htmlizeCategoryDistributionChart()); data.setContent("categoryDistributionChart", ChartHtmlizer.htmlizeCategoryDistributionChart());
data.setContent("categoryDistributionPieChart", Htmlizer.htmlizeCatergoryDistributionPieChart(federation.getAllServices())); data.setContent("categoryDistributionPieChart", ChartHtmlizer.htmlizeCatergoryDistributionPieChart(federation.getAllServices()));
data.setContent("hostNameChart", Htmlizer.htmlizeHostNamePieChart(federation.getAllServices())); data.setContent("hostNameChart", ChartHtmlizer.htmlizeHostNamePieChart(federation.getAllServices()));
// //
String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/federationStats.xhtml", data).toString(); String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/federationStats.xhtml", data).toString();

View file

@ -20,8 +20,6 @@ package fr.devinsy.statoolinfos.htmlize;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDate;
import java.time.YearMonth;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -29,42 +27,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.HtmlizerContext; import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.core.Categories;
import fr.devinsy.statoolinfos.core.Category; import fr.devinsy.statoolinfos.core.Category;
import fr.devinsy.statoolinfos.core.Configuration; import fr.devinsy.statoolinfos.core.Configuration;
import fr.devinsy.statoolinfos.core.Federation;
import fr.devinsy.statoolinfos.core.Organization;
import fr.devinsy.statoolinfos.core.Organizations;
import fr.devinsy.statoolinfos.core.Service;
import fr.devinsy.statoolinfos.core.Services;
import fr.devinsy.statoolinfos.core.StatoolInfosException; import fr.devinsy.statoolinfos.core.StatoolInfosException;
import fr.devinsy.statoolinfos.core.StatoolInfosUtils; import fr.devinsy.statoolinfos.core.StatoolInfosUtils;
import fr.devinsy.statoolinfos.htmlize.charts.BarChart;
import fr.devinsy.statoolinfos.htmlize.charts.BarChartView;
import fr.devinsy.statoolinfos.htmlize.charts.ChartColor;
import fr.devinsy.statoolinfos.htmlize.charts.ChartColors;
import fr.devinsy.statoolinfos.htmlize.charts.DoughnutChartView;
import fr.devinsy.statoolinfos.htmlize.charts.PieChart;
import fr.devinsy.statoolinfos.htmlize.charts.PieChart.Position;
import fr.devinsy.statoolinfos.htmlize.charts.PieChartView;
import fr.devinsy.statoolinfos.metrics.StringCounter;
import fr.devinsy.statoolinfos.metrics.StringCounterList;
import fr.devinsy.statoolinfos.metrics.StringCounters;
import fr.devinsy.statoolinfos.properties.PathProperty;
import fr.devinsy.statoolinfos.properties.PathPropertyList;
import fr.devinsy.statoolinfos.stats.StatAgent;
import fr.devinsy.statoolinfos.stats.categories.CategoryStat;
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.services.HostProviderTypeStats;
import fr.devinsy.statoolinfos.stats.services.HostServerTypeStats;
import fr.devinsy.statoolinfos.stats.services.RegistrationStats;
import fr.devinsy.statoolinfos.stats.services.ServiceInstallTypeStats;
import fr.devinsy.statoolinfos.stats.softwares.SoftwareStat;
import fr.devinsy.statoolinfos.stats.softwares.SoftwareStats;
import fr.devinsy.statoolinfos.util.URLUtils; import fr.devinsy.statoolinfos.util.URLUtils;
import fr.devinsy.strings.StringList;
/** /**
* The Class Htmlizer. * The Class Htmlizer.
@ -209,881 +176,4 @@ public class Htmlizer
SoftwarePage.buildAll(); SoftwarePage.buildAll();
SocialNetworksPage.buildAll(); SocialNetworksPage.buildAll();
} }
/**
* Htmlize category distribution chart.
*
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeCategoryDistributionChart() throws StatoolInfosException
{
String result;
BarChart chart;
chart = new BarChart("Distribution des catégories les plus proposées");
chart.addDataset("Catégories");
Federation federation = HtmlizerContext.instance().getFederation();
Categories categories = HtmlizerContext.instance().getCategories();
CategoryStats stats = StatAgent.statAllCategories(federation, categories);
stats.sortByServiceCount().reverse();
for (CategoryStat stat : stats)
{
if (stat.getServiceCount() > 0)
{
chart.add(stat.getCategory().getName(), stat.getServiceCount(), ChartColor.PURPLE);
}
}
result = BarChartView.build(chart);
//
return result;
}
/**
* Htmlize catergory distribution pie chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeCatergoryDistributionPieChart(final Services services) throws StatoolInfosException
{
String result;
Federation federation = HtmlizerContext.instance().getFederation();
Categories categories = HtmlizerContext.instance().getCategories();
CategoryStats stats = StatAgent.statAllCategories(federation, categories);
stats.sortByServiceCount().reverse();
ChartColors colors = ChartColor.valueList();
colors.remove(ChartColor.BLUE);
PieChart pie = new PieChart("Répartition des services par catégorie");
int index = 0;
while ((index < stats.size() && (index < 10)))
{
ChartColor color = colors.get(index);
CategoryStat stat = stats.get(index);
pie.add(StringUtils.abbreviate(stat.getCategory().getName(), 30), stat.getServiceCount(), color);
index += 1;
}
int others = 0;
while (index < stats.size())
{
CategoryStat stat = stats.get(index);
others += stat.getServiceCount();
index += 1;
}
pie.add("Autres catégories", others, ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = DoughnutChartView.build(pie);
//
return result;
}
/**
* Htmlize host name pie chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeHostNamePieChart(final Services services) throws StatoolInfosException
{
String result;
ChartColors colors = ChartColor.valueList();
colors.remove(ChartColor.BLUE);
StringCounters counters = new StringCounters();
long unknowns = 0;
for (Service service : services)
{
if (service.getHostProviderType() == null)
{
unknowns += 1;
}
else
{
switch (service.getHostProviderType())
{
case HOME:
counters.inc("Auto-hébergé");
break;
case HOSTEDBAY:
case HOSTEDSERVER:
case OUTSOURCED:
counters.inc(service.getHostName());
break;
case UNKNOWN:
unknowns += 1;
default:
}
}
}
StringCounterList list = counters.toList().sortByCounter().reverse();
PieChart pie = new PieChart("Hébergeurs des services");
pie.setLegendPosition(Position.RIGHT);
int index = 0;
while ((index < list.size() && (index < 9)))
{
ChartColor color = colors.get(index);
StringCounter counter = list.get(index);
pie.add(counter.getString(), counter.getCounter(), color);
index += 1;
}
int others = 0;
while (index < list.size())
{
StringCounter counter = list.get(index);
others += counter.getCounter();
index += 1;
}
pie.add("Autres", others, ChartColor.GREY);
pie.add("Inconnus", unknowns, ChartColor.BLUE);
result = DoughnutChartView.build(pie);
//
return result;
}
/**
* Htmlize host provider type chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
*/
public static String htmlizeHostProviderTypeChart(final Services services) throws StatoolInfosException
{
String result;
HostProviderTypeStats stats = StatAgent.statHostProviderType(services);
PieChart pie = new PieChart("Types d'hébergement");
pie.add("Home", stats.getHomeCount(), ChartColor.GREEN);
pie.add("Baie", stats.getHostedBayCount(), ChartColor.YELLOW);
pie.add("Serveur", stats.getHostedServerCount(), ChartColor.ORANGE);
pie.add("Externalisé", stats.getOutsourcedCount(), ChartColor.RED);
pie.add("Inconnu", stats.getUnknownCount(), ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = DoughnutChartView.build(pie);
//
return result;
}
/**
* Htmlize host server type chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
*/
public static String htmlizeHostServerTypeChart(final Services services) throws StatoolInfosException
{
String result;
HostServerTypeStats stats = StatAgent.statHostServerType(services);
PieChart pie = new PieChart("Types de serveur");
pie.add("Nano", stats.getNanoCount(), ChartColor.PURPLE);
pie.add("Physique", stats.getPhysicalCount(), ChartColor.GREEN);
pie.add("Virtuel", stats.getVirtualCount(), ChartColor.YELLOW);
pie.add("Mutualisé", stats.getSharedCount(), ChartColor.ORANGE);
pie.add("Cloud", stats.getCloudCount(), ChartColor.RED);
pie.add("Inconnu", stats.getUnknownCount(), ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = DoughnutChartView.build(pie);
//
return result;
}
/**
* Htmlize organization count chart.
*
* @param federation
* the federation
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeOrganizationCountChart(final Federation federation) throws StatoolInfosException
{
String result;
BarChart chart;
chart = new BarChart("Nombre de membres");
chart.addDataset("Membres");
PathPropertyList values = federation.getByYearPrefix("metrics.members.count").sortByPath();
for (PathProperty property : values)
{
chart.add(property.getLeaf(), Double.parseDouble(property.getValue()), ChartColor.GREEN);
}
result = BarChartView.build(chart);
//
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");
StringList countries = new StringList(stats.keySet()).sort();
countries.remove(CountryStats.UNKNOWN_LABEL);
ChartColors colors = new ChartColors();
colors.add(ChartColor.GREEN);
colors.add(ChartColor.ORANGE);
colors.add(ChartColor.RED);
colors.add(ChartColor.PURPLE);
colors.add(ChartColor.TURQUOISE);
colors.add(ChartColor.YELLOW);
int index = 0;
for (String country : countries)
{
pie.add(country, stats.get(country), colors.get(index));
index += 1;
}
pie.add("Inconnu", stats.getUnknown(), ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = PieChartView.build(pie);
//
return result;
}
/**
* Htmlize organization in out chart.
*
* @param federation
* the federation
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeOrganizationInOutChart(final Federation federation) throws StatoolInfosException
{
String result;
BarChart chart = new BarChart("Entrées/Sorties");
// chart.setStacked(true);
chart.addDataset("Entrées");
PathPropertyList values = federation.getByYearPrefix("metrics.members.in").sortByPath();
for (PathProperty property : values)
{
chart.getLabels().add(property.getLeaf());
chart.add(0, Double.parseDouble(property.getValue()), ChartColor.GREEN);
}
chart.addDataset("Sorties");
values = federation.getByYearPrefix("metrics.members.out").sortByPath();
for (PathProperty property : values)
{
chart.add(1, Double.parseDouble(property.getValue()), ChartColor.RED);
}
result = BarChartView.build(chart);
//
return result;
}
/**
* Htmlize organization turnout chart.
*
* @param organization
* the organization
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeOrganizationTurnoutChart(final Organization organization) throws StatoolInfosException
{
String result;
Organizations organizations = new Organizations();
organizations.add(organization);
result = htmlizeOrganizationTurnoutChart(organizations);
//
return result;
}
/**
* Htmlize organization turnout chart.
*
* @param organizations
* the organizations
* @return the string
* @throws StatoolInfosException
*/
public static String htmlizeOrganizationTurnoutChart(final Organizations organizations) throws StatoolInfosException
{
String result;
OrganizationTurnoutStats stats = StatAgent.statsOrganizationTurnout(organizations);
PieChart pie = new PieChart("Participation");
pie.add("1 fichier", stats.getWithSelfFileCount(), ChartColor.ORANGE);
pie.add("n fichiers", stats.getWithServiceFileCount(), ChartColor.YELLOW);
pie.add("Métriques", stats.getWithServiceMetricCount(), ChartColor.GREEN);
pie.add("Passive", stats.getPassiveCount(), ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = PieChartView.build(pie);
//
return result;
}
/**
* Htmlize service count month chart.
*
* @param federation
* the federation
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceCountMonthChart(final Federation federation) throws StatoolInfosException
{
String result;
result = htmlizeServiceCountMonthChart(federation.getAllServices(),
YearMonth.from(StatoolInfosUtils.parseDate(federation.getStartDate())));
//
return result;
}
/**
* Htmlize service count chart.
*
* @param organization
* the organization
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceCountMonthChart(final Organization organization) throws StatoolInfosException
{
String result;
LocalDate startDate = StatoolInfosUtils.parseDate(organization.getFederation().getStartDate());
if (startDate == null)
{
result = null;
}
else
{
result = htmlizeServiceCountMonthChart(organization.getServices(), YearMonth.from(startDate));
}
//
return result;
}
/**
* Htmlize service count chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceCountMonthChart(final Services services) throws StatoolInfosException
{
String result;
YearMonth first = null;
for (Service service : services)
{
LocalDate date = StatoolInfosUtils.parseDate(service.getStartDate());
if (date != null)
{
YearMonth current = YearMonth.from(date);
if ((first == null) || (first.isBefore(current)))
{
first = current;
}
}
}
result = htmlizeServiceCountMonthChart(services, first);
//
return result;
}
/**
* Htmlize service count month chart.
*
* @param services
* the services
* @param first
* the first
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceCountMonthChart(final Services services, final YearMonth first) throws StatoolInfosException
{
String result;
BarChart chart;
chart = new BarChart("Nombre de services (mois)");
chart.addDataset("Services");
YearMonth now = YearMonth.now();
YearMonth current = first;
while (current.compareTo(now) <= 0)
{
long count = 0;
for (Service service : services)
{
LocalDate startDate = StatoolInfosUtils.parseDate(service.getStartDate());
LocalDate endDate = StatoolInfosUtils.parseDate(service.getEndDate());
if (startDate != null)
{
YearMonth start = YearMonth.from(startDate);
YearMonth end;
if (endDate == null)
{
end = now;
}
else
{
end = YearMonth.from(endDate);
}
if ((current.compareTo(start) >= 0) && (current.compareTo(end) <= 0))
{
count += 1;
}
}
}
chart.add(current.toString(), count, ChartColor.VIOLET);
current = current.plusMonths(1);
}
result = BarChartView.build(chart);
//
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");
StringList countries = new StringList(stats.keySet()).sort();
countries.remove(CountryStats.UNKNOWN_LABEL);
ChartColors colors = new ChartColors();
colors.add(ChartColor.GREEN);
colors.add(ChartColor.ORANGE);
colors.add(ChartColor.RED);
colors.add(ChartColor.PURPLE);
colors.add(ChartColor.TURQUOISE);
colors.add(ChartColor.YELLOW);
int index = 0;
for (String country : countries)
{
pie.add(country, stats.get(country), colors.get(index));
index += 1;
}
pie.add("Inconnu", stats.getUnknown(), ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = PieChartView.build(pie);
//
return result;
}
public static String htmlizeServiceCountYearChart(final Federation federation) throws StatoolInfosException
{
String result;
result = htmlizeServiceCountYearChart(federation.getAllServices(),
StatoolInfosUtils.parseDate(federation.getStartDate()).getYear());
//
return result;
}
/**
* Htmlize service count year chart.
*
* @param organization
* the organization
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceCountYearChart(final Organization organization) throws StatoolInfosException
{
String result;
LocalDate startDate = StatoolInfosUtils.parseDate(organization.getFederation().getStartDate());
if (startDate == null)
{
result = null;
}
else
{
result = htmlizeServiceCountYearChart(organization.getServices(), startDate.getYear());
}
//
return result;
}
/**
* Htmlize service count year chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceCountYearChart(final Services services) throws StatoolInfosException
{
String result;
Integer first = null;
for (Service service : services)
{
LocalDate date = StatoolInfosUtils.parseDate(service.getStartDate());
if (date != null)
{
int current = date.getYear();
if ((first == null) || (first < current))
{
first = current;
}
}
}
result = htmlizeServiceCountYearChart(services, first);
//
return result;
}
/**
* Htmlize service count chart.
*
* @param services
* the services
* @param first
* the first
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceCountYearChart(final Services services, final int first) throws StatoolInfosException
{
String result;
BarChart chart;
chart = new BarChart("Nombre de services");
chart.addDataset("Services");
int now = LocalDate.now().getYear();
int current = first;
while (current <= now)
{
long count = 0;
for (Service service : services)
{
LocalDate startDate = StatoolInfosUtils.parseDate(service.getStartDate());
LocalDate endDate = StatoolInfosUtils.parseDate(service.getEndDate());
if (startDate != null)
{
int start = startDate.getYear();
int end;
if (endDate == null)
{
end = now;
}
else
{
end = endDate.getYear();
}
if ((current >= start) && (current <= end))
{
count += 1;
}
}
}
chart.add(String.valueOf(current), count, ChartColor.VIOLET);
current += 1;
}
result = BarChartView.build(chart);
//
return result;
}
/**
* Htmlize service date status chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceDateStatusChart(final Services services) throws StatoolInfosException
{
String result;
PieChart pie = new PieChart("Services avec ou sans date");
long filled = 0;
long unfilled = 0;
for (Service service : services)
{
if (StatoolInfosUtils.parseDate(service.getStartDate()) == null)
{
unfilled += 1;
}
else
{
filled += 1;
}
}
pie.add("Avec", filled, ChartColor.VIOLET);
pie.add("Sans", unfilled, ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = PieChartView.build(pie);
//
return result;
}
/**
* Htmlize service install type chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeServiceInstallTypeChart(final Services services) throws StatoolInfosException
{
String result;
ServiceInstallTypeStats stats = StatAgent.statServiceInstallType(services);
PieChart pie = new PieChart("Types d'installation du service");
pie.add("Distribution", stats.getDistributionCount(), ChartColor.PURPLE);
pie.add("Fournisseur", stats.getProviderCount(), ChartColor.GREEN);
pie.add("Paquet", stats.getPackageCount(), ChartColor.YELLOW);
pie.add("Outillage", stats.getToolingCount(), ChartColor.ORANGE);
pie.add("Dépôt cloné", stats.getClonerepoCount(), ChartColor.RED);
pie.add("Archive", stats.getArchiveCount(), ChartColor.VIOLET);
pie.add("Sources", stats.getSourcesCount(), ChartColor.GREY);
pie.add("Containeur", stats.getContainerCount(), ChartColor.TURQUOISE);
pie.add("Inconnu", stats.getUnknownCount(), ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = DoughnutChartView.build(pie);
//
return result;
}
/**
* Htmlize software distribution chart.
*
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeSoftwareDistributionChart() throws StatoolInfosException
{
String result;
BarChart chart = new BarChart("Distribution des logiciels proposés par au moins deux services");
chart.addDataset("Logiciel");
Federation federation = HtmlizerContext.instance().getFederation();
Categories categories = HtmlizerContext.instance().getCategories();
SoftwareStats stats = StatAgent.statAllSoftwares(federation, categories);
stats.sortByServiceCount().reverse();
for (SoftwareStat stat : stats)
{
if (stat.getServiceCount() > 1)
{
chart.add(stat.getName(), stat.getServiceCount(), ChartColor.PURPLE);
}
}
result = BarChartView.build(chart);
//
return result;
}
/**
* Htmlize software used chart.
*
* @param services
* the services
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlizeSoftwareDistributionPieChart(final Services services) throws StatoolInfosException
{
String result;
Federation federation = HtmlizerContext.instance().getFederation();
Categories categories = HtmlizerContext.instance().getCategories();
SoftwareStats stats = StatAgent.statAllSoftwares(federation, categories);
stats.sortByServiceCount().reverse();
ChartColors colors = ChartColor.valueList();
colors.remove(ChartColor.BLUE);
PieChart pie = new PieChart("Répartition des services par logiciel");
int index = 0;
while ((index < stats.size() && (index < 10)))
{
ChartColor color = colors.get(index);
SoftwareStat stat = stats.get(index);
pie.add(stat.getName(), stat.getServiceCount(), color);
index += 1;
}
int others = 0;
while (index < stats.size())
{
SoftwareStat stat = stats.get(index);
others += stat.getServiceCount();
index += 1;
}
pie.add("Autres", others, ChartColor.BLUE);
pie.setLegendPosition(Position.RIGHT);
result = DoughnutChartView.build(pie);
//
return result;
}
/**
* To bar chart.
*
* @param stats
* the stats
* @return the bar chart
*/
public static BarChart toBarChart(final RegistrationStats stats)
{
BarChart result;
result = new BarChart("Types d'inscription");
result.addDataset("Nombre");
result.add("Sans", stats.getNoneCount(), ChartColor.GREEN);
result.add("Libre", stats.getFreeCount(), ChartColor.YELLOW);
result.add("Membre", stats.getMemberCount(), ChartColor.ORANGE);
result.add("Client", stats.getClientCount(), ChartColor.RED);
result.add("Inconnu", stats.getUnknownCount(), ChartColor.BLUE);
//
return result;
}
} }

View file

@ -30,11 +30,6 @@ import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.core.Federation; import fr.devinsy.statoolinfos.core.Federation;
import fr.devinsy.statoolinfos.core.Organization; import fr.devinsy.statoolinfos.core.Organization;
import fr.devinsy.statoolinfos.core.StatoolInfosException; import fr.devinsy.statoolinfos.core.StatoolInfosException;
import fr.devinsy.statoolinfos.htmlize.charts.BarChart;
import fr.devinsy.statoolinfos.htmlize.charts.BarChartView;
import fr.devinsy.statoolinfos.htmlize.charts.ChartColor;
import fr.devinsy.statoolinfos.htmlize.charts.DoughnutChartView;
import fr.devinsy.statoolinfos.htmlize.charts.PieChart;
import fr.devinsy.statoolinfos.stats.StatAgent; import fr.devinsy.statoolinfos.stats.StatAgent;
import fr.devinsy.statoolinfos.stats.services.RegistrationStats; import fr.devinsy.statoolinfos.stats.services.RegistrationStats;
import fr.devinsy.xidyn.XidynException; import fr.devinsy.xidyn.XidynException;
@ -84,46 +79,25 @@ public class OrganizationStatsPage
TagDataManager data = new TagDataManager(); TagDataManager data = new TagDataManager();
data.setContent("serviceCountYearChart", Htmlizer.htmlizeServiceCountYearChart(organization)); data.setContent("serviceCountYearChart", ChartHtmlizer.htmlizeServiceCountYearChart(organization));
data.setContent("serviceDateStatusChart", Htmlizer.htmlizeServiceDateStatusChart(organization.getServices())); data.setContent("serviceDateStatusChart", ChartHtmlizer.htmlizeServiceDateStatusChart(organization.getServices()));
data.setContent("turnoutChart", Htmlizer.htmlizeOrganizationTurnoutChart(organization)); data.setContent("turnoutChart", ChartHtmlizer.htmlizeOrganizationTurnoutChart(organization));
data.setContent("hostServerTypeChart", Htmlizer.htmlizeHostServerTypeChart(organization.getServices())); data.setContent("hostServerTypeChart", ChartHtmlizer.htmlizeHostServerTypeChart(organization.getServices()));
data.setContent("hostProviderTypeChart", Htmlizer.htmlizeHostProviderTypeChart(organization.getServices())); data.setContent("hostProviderTypeChart", ChartHtmlizer.htmlizeHostProviderTypeChart(organization.getServices()));
data.setContent("serviceInstallTypeChart", Htmlizer.htmlizeServiceInstallTypeChart(organization.getServices())); data.setContent("serviceInstallTypeChart", ChartHtmlizer.htmlizeServiceInstallTypeChart(organization.getServices()));
data.setContent("serviceCountryChart", Htmlizer.htmlizeServiceCountryChart(organization.getServices())); data.setContent("serviceCountryChart", ChartHtmlizer.htmlizeServiceCountryChart(organization.getServices()));
// //
{ {
RegistrationStats stats = StatAgent.statRegistrationTypes(organization.getServices()); RegistrationStats stats = StatAgent.statRegistrationTypes(organization.getServices());
BarChart bar = Htmlizer.toBarChart(stats); data.setContent("registrationTypeChart", ChartHtmlizer.htmlizeRegistrationBarChart(stats));
data.setContent("registrationTypeChart", BarChartView.build(bar)); data.setContent("registrationNoneTypeChart", ChartHtmlizer.htmlizeRegistrationNonePieChart(stats));
data.setContent("registrationFreeTypeChart", ChartHtmlizer.htmlizeRegistrationFreePieChart(stats));
PieChart pie = new PieChart("Sans"); data.setContent("registrationMemberTypeChart", ChartHtmlizer.htmlizeRegistrationMemberPieChart(stats));
pie.setLegendVisible(false); data.setContent("registrationClientTypeChart", ChartHtmlizer.htmlizeRegistrationClientPieChart(stats));
pie.add("Sans", stats.getNoneCount(), ChartColor.GREEN);
pie.add("Autre", stats.getCount() - stats.getNoneCount(), ChartColor.BLUE);
data.setContent("registrationNoneTypeChart", DoughnutChartView.build(pie));
pie = new PieChart("Libre");
pie.setLegendVisible(false);
pie.add("Sans", stats.getFreeCount(), ChartColor.YELLOW);
pie.add("Libre", stats.getCount() - stats.getFreeCount(), ChartColor.BLUE);
data.setContent("registrationFreeTypeChart", DoughnutChartView.build(pie));
pie = new PieChart("Membre");
pie.setLegendVisible(false);
pie.add("Sans", stats.getMemberCount(), ChartColor.ORANGE);
pie.add("Membre", stats.getCount() - stats.getMemberCount(), ChartColor.BLUE);
data.setContent("registrationMemberTypeChart", DoughnutChartView.build(pie));
pie = new PieChart("Client");
pie.setLegendVisible(false);
pie.add("Sans", stats.getClientCount(), ChartColor.RED);
pie.add("Client", stats.getCount() - stats.getClientCount(), ChartColor.BLUE);
data.setContent("registrationClientTypeChart", DoughnutChartView.build(pie));
} }
// //