From 35a29874471adcb8283f415243d730c37ceb6ab3 Mon Sep 17 00:00:00 2001 From: "Christian P. MOMON" Date: Sat, 21 Nov 2020 07:35:59 +0100 Subject: [PATCH] Added organization stats page. --- .../htmlize/FederationStatsPage.java | 2 +- .../statoolinfos/htmlize/Htmlizer.java | 26 +++- .../htmlize/OrganizationPage.java | 2 + .../htmlize/OrganizationStatsPage.java | 138 ++++++++++++++++++ .../statoolinfos/htmlize/ServicePage.java | 2 + .../statoolinfos/htmlize/organization.xhtml | 1 + .../htmlize/organizationStats.xhtml | 41 ++++++ .../statoolinfos/htmlize/service.xhtml | 1 + .../devinsy/statoolinfos/stats/StatAgent.java | 4 +- 9 files changed, 213 insertions(+), 4 deletions(-) create mode 100644 src/fr/devinsy/statoolinfos/htmlize/OrganizationStatsPage.java create mode 100644 src/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml diff --git a/src/fr/devinsy/statoolinfos/htmlize/FederationStatsPage.java b/src/fr/devinsy/statoolinfos/htmlize/FederationStatsPage.java index 77a320e..428d6ca 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/FederationStatsPage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/FederationStatsPage.java @@ -73,7 +73,7 @@ public class FederationStatsPage // { - RegistrationStats stats = StatAgent.statRegistrationTypes(federation); + RegistrationStats stats = StatAgent.statRegistrationTypes(federation.getAllServices()); BarChart bar = Htmlizer.toBarChart(stats); data.setContent("registrationTypeChart", BarChartView.build(bar)); diff --git a/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java b/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java index f9470dd..d36f7cb 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java +++ b/src/fr/devinsy/statoolinfos/htmlize/Htmlizer.java @@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory; import fr.devinsy.statoolinfos.HtmlizerContext; import fr.devinsy.statoolinfos.core.Category; import fr.devinsy.statoolinfos.core.Configuration; +import fr.devinsy.statoolinfos.core.Organization; import fr.devinsy.statoolinfos.core.Organizations; import fr.devinsy.statoolinfos.core.Services; import fr.devinsy.statoolinfos.core.StatoolInfosException; @@ -270,9 +271,10 @@ public class Htmlizer AboutPage.build(); EditoPage.build(); - FederationStatsPage.build(); FederationPage.build(); + FederationStatsPage.build(); OrganizationPage.buildAll(); + OrganizationStatsPage.buildAll(); ServicePage.buildAll(); ServicesPage.build(); PropertyFileCheckPage.buildAll(); @@ -342,6 +344,28 @@ public class Htmlizer 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. * diff --git a/src/fr/devinsy/statoolinfos/htmlize/OrganizationPage.java b/src/fr/devinsy/statoolinfos/htmlize/OrganizationPage.java index 1c6a9ea..e5aaa85 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/OrganizationPage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/OrganizationPage.java @@ -120,6 +120,8 @@ public class OrganizationPage data.setAttribute("rawLink", "href", organization.getTechnicalName() + ".properties"); data.setAttribute("rawCheckLink", "href", organization.getTechnicalName() + "-check.xhtml"); + data.setAttribute("statsLink", "href", organization.getTechnicalName() + "-stats.xhtml"); + if (StringUtils.isNotBlank(organization.getLegalWebsite())) { data.setEscapedAttribute("legalLink", "href", organization.getLegalWebsite()); diff --git a/src/fr/devinsy/statoolinfos/htmlize/OrganizationStatsPage.java b/src/fr/devinsy/statoolinfos/htmlize/OrganizationStatsPage.java new file mode 100644 index 0000000..bf79b5d --- /dev/null +++ b/src/fr/devinsy/statoolinfos/htmlize/OrganizationStatsPage.java @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2020 Christian Pierre MOMON + * + * 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 . + */ +package fr.devinsy.statoolinfos.htmlize; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import fr.devinsy.statoolinfos.HtmlizerContext; +import fr.devinsy.statoolinfos.core.Federation; +import fr.devinsy.statoolinfos.core.Organization; +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.services.RegistrationStats; +import fr.devinsy.xidyn.XidynException; +import fr.devinsy.xidyn.data.TagDataManager; +import fr.devinsy.xidyn.presenters.PresenterUtils; + +/** + * The Class SocialNetworksPage. + */ +public class OrganizationStatsPage +{ + private static Logger logger = LoggerFactory.getLogger(OrganizationStatsPage.class); + + /** + * Builds the. + * + * @throws StatoolInfosException + * the statool infos exception + * @throws IOException + * Signals that an I/O exception has occurred. + */ + public static void buildAll() throws StatoolInfosException, IOException + { + Federation federation = HtmlizerContext.instance().getFederation(); + + for (Organization organization : federation.getOrganizations()) + { + htmlize(organization); + } + } + + /** + * Builds the. + * + * @throws StatoolInfosException + * the statool infos exception + * @throws IOException + * Signals that an I/O exception has occurred. + */ + public static void htmlize(final Organization organization) throws StatoolInfosException, IOException + { + try + { + logger.debug("Building organization stats page {}…"); + + File htmlizeDirectory = HtmlizerContext.instance().getHtmlizeDirectory(); + + TagDataManager data = new TagDataManager(); + + data.setContent("turnoutChart", Htmlizer.htmlizeOrganizationTurnoutChart(organization)); + data.setContent("hostServerTypeChart", Htmlizer.htmlizeHostServerTypeChart(organization.getServices())); + data.setContent("hostProviderTypeChart", Htmlizer.htmlizeHostProviderTypeChart(organization.getServices())); + + // + { + RegistrationStats stats = StatAgent.statRegistrationTypes(organization.getServices()); + + BarChart bar = Htmlizer.toBarChart(stats); + data.setContent("registrationTypeChart", BarChartView.build(bar)); + + PieChart pie = new PieChart("Sans"); + pie.setLegendVisible(false); + 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)); + } + + // + String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml", data).toString(); + + // + BreadcrumbTrail trail = new BreadcrumbTrail(); + trail.add(organization.getName(), organization.getTechnicalName() + ".xhtml"); + String page = WebCharterView.build(content, trail); + + FileUtils.write(new File(htmlizeDirectory, organization.getTechnicalName() + "-stats.xhtml"), page, StandardCharsets.UTF_8); + } + catch (XidynException exception) + { + throw new StatoolInfosException("Error building organization stats page: " + exception.getMessage(), exception); + } + } +} diff --git a/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java b/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java index 6242e94..00563fe 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java +++ b/src/fr/devinsy/statoolinfos/htmlize/ServicePage.java @@ -127,6 +127,8 @@ public class ServicePage data.setAttribute("rawLink", "href", organization.getTechnicalName() + "-" + service.getTechnicalName() + ".properties"); data.setAttribute("rawCheckLink", "href", organization.getTechnicalName() + "-" + service.getTechnicalName() + "-check.xhtml"); + data.setAttribute("statsLink", "href", organization.getTechnicalName() + "-" + service.getTechnicalName() + ".xhtml"); + if (StringUtils.isNotBlank(service.getLegalWebsite())) { data.setEscapedAttribute("legalLink", "href", service.getLegalWebsite()); diff --git a/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml b/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml index 72d2736..b27150b 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/organization.xhtml @@ -32,6 +32,7 @@ +
Nombre de services : n/a
diff --git a/src/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml b/src/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml new file mode 100644 index 0000000..493f174 --- /dev/null +++ b/src/fr/devinsy/statoolinfos/htmlize/organizationStats.xhtml @@ -0,0 +1,41 @@ + + + + + StatoolInfos + + + + + + + +
+ +

Statistiques

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/src/fr/devinsy/statoolinfos/htmlize/service.xhtml b/src/fr/devinsy/statoolinfos/htmlize/service.xhtml index a752d9a..4386d61 100644 --- a/src/fr/devinsy/statoolinfos/htmlize/service.xhtml +++ b/src/fr/devinsy/statoolinfos/htmlize/service.xhtml @@ -40,6 +40,7 @@ +