Added red uptime button for federation, organizations and services.

This commit is contained in:
Christian P. MOMON 2021-06-11 03:00:04 +02:00
parent fe72332ff3
commit 54a4cea231
9 changed files with 260 additions and 2 deletions

View file

@ -24,6 +24,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.checker.PropertyChecks; import fr.devinsy.statoolinfos.checker.PropertyChecks;
import fr.devinsy.statoolinfos.core.Federation; import fr.devinsy.statoolinfos.core.Federation;
import fr.devinsy.statoolinfos.core.StatoolInfosException; import fr.devinsy.statoolinfos.core.StatoolInfosException;
@ -79,6 +80,15 @@ public class FederationHeaderView
data.setAttribute("crawlLink", "href", federation.getTechnicalName() + "-crawl.xhtml"); data.setAttribute("crawlLink", "href", federation.getTechnicalName() + "-crawl.xhtml");
data.setAttribute("uptimeLink", "href", federation.getLocalFileBaseName() + "-uptimes.xhtml"); data.setAttribute("uptimeLink", "href", federation.getLocalFileBaseName() + "-uptimes.xhtml");
if (HtmlizerContext.instance().getUptimeJournal().hasRecentError(federation.getServicesAll()))
{
data.setAttribute("uptimeLinkImg", "src", "circle-icons/countdown-ko-mono.svg");
}
else
{
data.setAttribute("uptimeLinkImg", "src", "circle-icons/countdown-ok-mono.svg");
}
if (federation.getCrawlJournal().getErrors().isEmpty()) if (federation.getCrawlJournal().getErrors().isEmpty())
{ {
data.setAttribute("crawlLinkImg", "src", "circle-icons/download-mono.svg"); data.setAttribute("crawlLinkImg", "src", "circle-icons/download-mono.svg");

View file

@ -22,6 +22,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.checker.PropertyChecks; import fr.devinsy.statoolinfos.checker.PropertyChecks;
import fr.devinsy.statoolinfos.core.Organization; import fr.devinsy.statoolinfos.core.Organization;
import fr.devinsy.statoolinfos.core.StatoolInfosException; import fr.devinsy.statoolinfos.core.StatoolInfosException;
@ -103,8 +104,6 @@ public class OrganizationHeaderView
data.setAttribute("metricsLink", "href", organization.getTechnicalName() + "-metrics-summary-months-last.xhtml"); data.setAttribute("metricsLink", "href", organization.getTechnicalName() + "-metrics-summary-months-last.xhtml");
data.setAttribute("crawlLink", "href", organization.getTechnicalName() + "-crawl.xhtml"); data.setAttribute("crawlLink", "href", organization.getTechnicalName() + "-crawl.xhtml");
data.setAttribute("uptimeLink", "href", organization.getLocalFileBaseName() + "-uptimes.xhtml");
if (organization.getCrawlJournal().getErrors().isEmpty()) if (organization.getCrawlJournal().getErrors().isEmpty())
{ {
data.setAttribute("crawlLinkImg", "src", "circle-icons/download-mono.svg"); data.setAttribute("crawlLinkImg", "src", "circle-icons/download-mono.svg");
@ -114,6 +113,16 @@ public class OrganizationHeaderView
data.setAttribute("crawlLinkImg", "src", "circle-icons/download.svg"); data.setAttribute("crawlLinkImg", "src", "circle-icons/download.svg");
} }
data.setAttribute("uptimeLink", "href", organization.getLocalFileBaseName() + "-uptimes.xhtml");
if (HtmlizerContext.instance().getUptimeJournal().hasRecentError(organization.getServices()))
{
data.setAttribute("uptimeLinkImg", "src", "circle-icons/countdown-ko-mono.svg");
}
else
{
data.setAttribute("uptimeLinkImg", "src", "circle-icons/countdown-ok-mono.svg");
}
{ {
PropertyChecks checks = organization.getInputChecksAll(); PropertyChecks checks = organization.getInputChecksAll();

View file

@ -22,8 +22,10 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.checker.PropertyChecks; import fr.devinsy.statoolinfos.checker.PropertyChecks;
import fr.devinsy.statoolinfos.core.Service; 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.xidyn.XidynException; import fr.devinsy.xidyn.XidynException;
import fr.devinsy.xidyn.data.DisplayMode; import fr.devinsy.xidyn.data.DisplayMode;
@ -180,7 +182,18 @@ public class ServiceHeaderView
{ {
data.setAttribute("crawlLinkImg", "src", "circle-icons/download.svg"); data.setAttribute("crawlLinkImg", "src", "circle-icons/download.svg");
} }
data.setAttribute("uptimeLink", "href", service.getLocalFileBaseName() + "-uptimes.xhtml"); data.setAttribute("uptimeLink", "href", service.getLocalFileBaseName() + "-uptimes.xhtml");
Services services = new Services();
services.add(service);
if (HtmlizerContext.instance().getUptimeJournal().hasRecentError(services))
{
data.setAttribute("uptimeLinkImg", "src", "circle-icons/countdown-ko-mono.svg");
}
else
{
data.setAttribute("uptimeLinkImg", "src", "circle-icons/countdown-ok-mono.svg");
}
{ {
PropertyChecks checks = service.getInputChecksAll(); PropertyChecks checks = service.getInputChecksAll();

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
xml:space="preserve"
width="85.333336"
height="85.333336"
viewBox="0 0 85.333336 85.333336"
sodipodi:docname="countdown-ko-mono.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath18"><path
d="M 0,64 H 64 V 0 H 0 Z"
id="path16"
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1552"
inkscape:window-height="958"
id="namedview4"
showgrid="false"
inkscape:zoom="6.8298015"
inkscape:cx="65.842204"
inkscape:cy="42.666668"
inkscape:window-x="111"
inkscape:window-y="93"
inkscape:window-maximized="0"
inkscape:current-layer="g10" /><g
id="g10"
inkscape:groupmode="layer"
inkscape:label="Elegant_circle-icons_3"
transform="matrix(1.3333333,0,0,-1.3333333,0,85.333333)"><g
id="g184"><g
id="g177"><g
id="g20-3"
transform="translate(64,32)"><path
inkscape:connector-curvature="0"
d="m 0,0 c 0,-17.673 -14.327,-32 -32,-32 -17.673,0 -32,14.327 -32,32 0,17.673 14.327,32 32,32 C -14.327,32 0,17.673 0,0"
style="fill:#c75c5c;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22-6" /></g><g
id="g24"
transform="translate(50.424,33.5)"><path
d="m 0,0 c -0.728,9.004 -7.92,16.196 -16.924,16.924 v 2 C -6.818,18.187 1.263,10.106 2,0 Z m -16.924,-21.924 v 2 C -7.92,-19.196 -0.728,-12.004 0,-3 H 2 C 1.263,-13.106 -6.818,-21.187 -16.924,-21.924 m 0,18.817 9.06,-9.707 c -2.427,-2.266 -5.571,-3.773 -9.06,-4.11 z m -3,20.031 C -28.928,16.196 -36.12,9.004 -36.848,0 h -2 c 0.737,10.106 8.818,18.187 18.924,18.924 z m 0,-16.924 h -13.924 c 0.71,7.351 6.573,13.214 13.924,13.924 z m 0,-16.924 c -7.351,0.71 -13.214,6.573 -13.924,13.924 h 13.924 z m 0,-5 C -30.03,-21.187 -38.111,-13.106 -38.848,-3 h 2 c 0.728,-9.004 7.92,-16.196 16.924,-16.924 z m 1.5,43.924 c -12.958,0 -23.5,-10.542 -23.5,-23.5 0,-12.958 10.542,-23.5 23.5,-23.5 12.958,0 23.5,10.542 23.5,23.5 0,12.958 -10.542,23.5 -23.5,23.5"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26"
inkscape:connector-curvature="0" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View file

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
xml:space="preserve"
width="85.333336"
height="85.333336"
viewBox="0 0 85.333336 85.333336"
sodipodi:docname="countdown.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath18"><path
d="M 0,64 H 64 V 0 H 0 Z"
id="path16"
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="640"
inkscape:window-height="480"
id="namedview4"
showgrid="false"
inkscape:zoom="2.7656249"
inkscape:cx="42.666668"
inkscape:cy="42.666668"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="g10" /><g
id="g10"
inkscape:groupmode="layer"
inkscape:label="Elegant_circle-icons_3"
transform="matrix(1.3333333,0,0,-1.3333333,0,85.333333)"><g
id="g12"><g
id="g14"
clip-path="url(#clipPath18)"><g
id="g20"
transform="translate(64,32)"><path
d="m 0,0 c 0,-17.673 -14.327,-32 -32,-32 -17.673,0 -32,14.327 -32,32 0,17.673 14.327,32 32,32 C -14.327,32 0,17.673 0,0"
style="fill:#4f5d73;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22"
inkscape:connector-curvature="0" /></g><g
id="g24"
transform="translate(50.424,33.5)"><path
d="m 0,0 c -0.728,9.004 -7.92,16.196 -16.924,16.924 v 2 C -6.818,18.187 1.263,10.106 2,0 Z m -16.924,-21.924 v 2 C -7.92,-19.196 -0.728,-12.004 0,-3 H 2 C 1.263,-13.106 -6.818,-21.187 -16.924,-21.924 m 0,18.817 9.06,-9.707 c -2.427,-2.266 -5.571,-3.773 -9.06,-4.11 z m -3,20.031 C -28.928,16.196 -36.12,9.004 -36.848,0 h -2 c 0.737,10.106 8.818,18.187 18.924,18.924 z m 0,-16.924 h -13.924 c 0.71,7.351 6.573,13.214 13.924,13.924 z m 0,-16.924 c -7.351,0.71 -13.214,6.573 -13.924,13.924 h 13.924 z m 0,-5 C -30.03,-21.187 -38.111,-13.106 -38.848,-3 h 2 c 0.728,-9.004 7.92,-16.196 16.924,-16.924 z m 1.5,43.924 c -12.958,0 -23.5,-10.542 -23.5,-23.5 0,-12.958 10.542,-23.5 23.5,-23.5 12.958,0 23.5,10.542 23.5,23.5 0,12.958 -10.542,23.5 -23.5,23.5"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26"
inkscape:connector-curvature="0" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View file

@ -13,6 +13,19 @@
<body> <body>
<div style="width:1150px; margin: 0 auto 0 auto;"> <div style="width:1150px; margin: 0 auto 0 auto;">
<h2>Disponibilités</h2> <h2>Disponibilités</h2>
<div class="legend right" style="float: right; margin-top: -150px;">
<div class="row">
<div class="column left">
<img src="status-ok.png" title="" style="height: 16px; width: 10px;" />Journée sans erreur<br/>
<img src="status-warning.png" title="" style="height: 16px; width: 10px;" />Erreur rétablie<br/>
<img src="status-alert.png" title="" style="height: 16px; width: 10px;" />Erreur en cours<br/>
<img src="status-error.png" title="" style="height: 16px; width: 10px;" />Erreurs continues<br/>
<img src="status-void.png" title="" style="height: 16px; width: 10px;" />Absence de données<br/>
</div>
</div>
</div>
<table class="center_table table_classic left uptimeTable"> <table class="center_table table_classic left uptimeTable">
<tr id="lineHeader"> <tr id="lineHeader">
<th id="lineName" style="padding-top: 0; padding-bottom: 0;">Service</th> <th id="lineName" style="padding-top: 0; padding-bottom: 0;">Service</th>

View file

@ -22,10 +22,14 @@ import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.core.Service;
import fr.devinsy.statoolinfos.core.Services;
/** /**
* The Class UptimeJournal. * The Class UptimeJournal.
*/ */
@ -290,6 +294,49 @@ public class UptimeJournal
return result; return result;
} }
/**
* Checks for last in error.
*
* @param services
* the services
* @return true, if successful
*/
public boolean hasRecentError(final Services services)
{
boolean result;
if (services == null)
{
result = false;
}
else
{
boolean ended = false;
Iterator<Service> iterator = services.iterator();
result = false;
while (!ended)
{
if (iterator.hasNext())
{
Service current = iterator.next();
if (getUptimes(current.getWebsiteURL()).last().getStatus() == UptimeStatus.ERROR)
{
ended = true;
result = true;
}
}
else
{
ended = true;
result = false;
}
}
}
//
return result;
}
/** /**
* Purge. * Purge.
* *
@ -318,4 +365,15 @@ public class UptimeJournal
// //
return result; return result;
} }
/**
* Sort all.
*/
public void sortAll()
{
for (Uptimes uptimes : this.map.values())
{
uptimes.sortByDateTime();
}
}
} }

View file

@ -137,6 +137,8 @@ public class UptimeJournalFile
} }
} }
result.sortAll();
// //
return result; return result;
} }

View file

@ -89,6 +89,28 @@ public class Uptimes extends ArrayList<Uptime>
return result; return result;
} }
/**
* Last.
*
* @return the uptime
*/
public Uptime last()
{
Uptime result;
if (isEmpty())
{
result = null;
}
else
{
result = get(size() - 1);
}
//
return result;
}
/** /**
* Purge. * Purge.
* *