[java-identity-provider] branch master updated: IDP-1451 Partially rewrite status jsp to use guages.
Rod Widdowson
rdw at steadingsoftware.com
Sun Jun 16 11:13:11 EDT 2019
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch master
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=3a12fe8d48e31ddc8045b129f84b9b27c9b7bc4f
The following commit(s) were added to refs/heads/master by this push:
new 3a12fe8 IDP-1451 Partially rewrite status jsp to use guages.
3a12fe8 is described below
commit 3a12fe8d48e31ddc8045b129f84b9b27c9b7bc4f
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sun Jun 16 16:11:10 2019 +0100
IDP-1451 Partially rewrite status jsp to use guages.
https://issues.shibboleth.net/jira/browse/IDP-1451
---
.../resources/system/flows/admin/status-flow.xml | 2 +
idp-war/src/main/webapp/WEB-INF/jsp/status.jsp | 133 ++++++++++-----------
2 files changed, 66 insertions(+), 69 deletions(-)
diff --git a/idp-conf/src/main/resources/system/flows/admin/status-flow.xml b/idp-conf/src/main/resources/system/flows/admin/status-flow.xml
index 0db50f4..ae1f600 100644
--- a/idp-conf/src/main/resources/system/flows/admin/status-flow.xml
+++ b/idp-conf/src/main/resources/system/flows/admin/status-flow.xml
@@ -30,6 +30,8 @@
<evaluate expression="WriteAuditLog" />
<evaluate expression="ServiceCollection" result="requestScope.services" />
<evaluate expression="environment" result="requestScope.environment" />
+ <evaluate expression="flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.metrics.AttributeResolverGaugeSet')" result="requestScope.attributeResolverGaugeSet" />
+ <evaluate expression="flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.metrics.MetadataGaugeSet')" result="requestScope.metadataResolverGaugeSet" />
<evaluate expression="opensamlProfileRequestContext" result="requestScope.profileRequestContext" />
<evaluate expression="T(net.shibboleth.utilities.java.support.codec.HTMLEncoder)" result="requestScope.encoder" />
<evaluate expression="flowRequestContext.getExternalContext().getNativeRequest()" result="requestScope.request" />
diff --git a/idp-war/src/main/webapp/WEB-INF/jsp/status.jsp b/idp-war/src/main/webapp/WEB-INF/jsp/status.jsp
index 5e41cde..a01484c 100644
--- a/idp-war/src/main/webapp/WEB-INF/jsp/status.jsp
+++ b/idp-war/src/main/webapp/WEB-INF/jsp/status.jsp
@@ -1,6 +1,9 @@
<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%@ page import="java.util.ArrayList" %>
+<%@ page import="java.util.Map" %>
+<%@ page import="java.util.Set" %>
+<%@ page import="java.util.Map.Entry" %>
<%@ page import="java.util.Collection" %>
<%@ page import="java.util.Collections" %>
<%@ page import="java.time.Instant" %>
@@ -11,6 +14,8 @@
<%@ page import="org.opensaml.saml.metadata.resolver.BatchMetadataResolver" %>
<%@ page import="org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver" %>
<%@ page import="net.shibboleth.idp.Version" %>
+<%@ page import="com.codahale.metrics.MetricSet" %>
+<%@ page import="com.codahale.metrics.Gauge" %>;
<%@ page import="net.shibboleth.idp.saml.metadata.RelyingPartyMetadataProvider" %>
<%@ page import="net.shibboleth.idp.attribute.resolver.AttributeResolver" %>
<%@ page import="net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl" %>
@@ -58,79 +63,69 @@ for (final ReloadableService service : (Collection<ReloadableService>) request.g
out.println();
if (((IdentifiedComponent) service).getId().contains("Metadata")) {
- final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent();
- if (null != component) {
- try {
- MetadataResolver rootResolver = component.getComponent();
- Collection<RefreshableMetadataResolver> resolvers = Collections.emptyList();
-
- // Step down into wrapping component.
- if (rootResolver instanceof RelyingPartyMetadataProvider) {
- rootResolver = ((RelyingPartyMetadataProvider) rootResolver).getEmbeddedResolver();
- }
-
- if (rootResolver instanceof ChainingMetadataResolver) {
- resolvers = new ArrayList<RefreshableMetadataResolver>();
- for (final MetadataResolver childResolver : ((ChainingMetadataResolver) rootResolver).getResolvers()) {
- if (childResolver instanceof RefreshableMetadataResolver) {
- resolvers.add((RefreshableMetadataResolver) childResolver);
- }
- }
- } else if (rootResolver instanceof RefreshableMetadataResolver) {
- resolvers = Collections.<RefreshableMetadataResolver>singletonList((RefreshableMetadataResolver) rootResolver);
- }
-
- for (final RefreshableMetadataResolver resolver : resolvers) {
- final Instant lastRefresh = resolver.getLastRefresh();
- final Instant lastUpdate = resolver.getLastUpdate();
- final Instant lastSuccessfulRefresh = resolver.getLastSuccessfulRefresh();
-
- Instant rootValidUntil = null;
- if (resolver instanceof BatchMetadataResolver) {
- rootValidUntil = ((BatchMetadataResolver)resolver).getRootValidUntil();
- }
- out.println("\tmetadata source: " + resolver.getId());
- if (lastRefresh != null) {
- out.println("\tlast refresh attempt: " + dateTimeFormatter.format(lastRefresh));
- }
- if (lastSuccessfulRefresh != null) {
- out.println("\tlast successful refresh: " + dateTimeFormatter.format(lastSuccessfulRefresh));
- }
- if (lastUpdate != null) {
- out.println("\tlast update: " + dateTimeFormatter.format(lastUpdate));
- }
- if (rootValidUntil != null) {
- out.println("\troot validUntil: " + dateTimeFormatter.format(rootValidUntil));
- }
- out.println();
- }
- } finally {
- component.unpinComponent();
+ final MetricSet metrics = (MetricSet) request.getAttribute("metadataResolverGaugeSet");
+ if (metrics == null || metrics.getMetrics().get("net.shibboleth.idp.metadata.refresh") == null) {
+ out.println("No Metadata Resolver Gauge Set Found");
+ continue;
+ }
+ final Gauge<Map<String,Instant>> refreshes = (Gauge<Map<String,Instant>>) metrics.getMetrics().get("net.shibboleth.idp.metadata.refresh");
+ final Gauge<Map<String,Instant>> updates = (Gauge<Map<String,Instant>>) metrics.getMetrics().get("net.shibboleth.idp.metadata.update");
+ final Gauge<Map<String,Instant>> successes = (Gauge<Map<String,Instant>>) metrics.getMetrics().get("net.shibboleth.idp.metadata.successfulRefresh");
+ final Gauge<Map<String,Instant>> rootValids = (Gauge<Map<String,Instant>>) metrics.getMetrics().get("net.shibboleth.idp.metadata.rootValidUntil");
+
+ Set<Entry<String, Instant>> entrySet = refreshes.getValue().entrySet();
+ if (entrySet.isEmpty()) {
+ out.println("\tNo Metadata Resolver has ever attempted a reload");
+ out.println();
+ continue;
+ }
+ for (final Entry<String, Instant> mr : entrySet) {
+ final String resolverId = mr.getKey();
+ final Instant lastRefresh = mr.getValue();
+ final Instant lastUpdate = updates == null ? null : updates.getValue().get(resolverId);
+ final Instant lastSuccessfulRefresh = successes == null ? null : successes.getValue().get(resolverId);
+ final Instant rootValidUntil = rootValids == null ? null : rootValids.getValue().get(resolverId);
+
+ out.println("\tmetadata source: " + resolverId);
+ if (lastRefresh != null) {
+ out.println("\tlast refresh attempt: " + dateTimeFormatter.format(lastRefresh));
}
- }
- } else if (((IdentifiedComponent) service).getId().contains("AttributeResolver")) {
- final ServiceableComponent<AttributeResolver> component = service.getServiceableComponent();
- if (null != component) {
- try {
- AttributeResolver resolver = component.getComponent();
- if (resolver instanceof AttributeResolverImpl) {
- final Collection<DataConnector> connectors = ((AttributeResolverImpl) resolver).getDataConnectors().values();
- for (final DataConnector connector: connectors) {
- final Instant lastFail = connector.getLastFail();
- if (null != lastFail) {
- out.println("\tDataConnector " + connector.getId() + ": last failed at " + dateTimeFormatter.format(lastFail));
- } else {
- out.println("\tDataConnector " + connector.getId() + ": has never failed");
- }
- out.println();
- }
- }
- } finally {
- component.unpinComponent();
+ if (lastSuccessfulRefresh != null) {
+ out.println("\tlast successful refresh: " + dateTimeFormatter.format(lastSuccessfulRefresh));
+ }
+ if (lastUpdate != null) {
+ out.println("\tlast update: " + dateTimeFormatter.format(lastUpdate));
}
- }
+ if (rootValidUntil != null) {
+ out.println("\troot validUntil: " + dateTimeFormatter.format(rootValidUntil));
+ }
+ out.println();
+ }
+ } else if (((IdentifiedComponent) service).getId().contains("AttributeResolver")) {
+ final MetricSet metrics = (MetricSet) request.getAttribute("attributeResolverGaugeSet");
+ if (metrics == null || metrics.getMetrics().get("net.shibboleth.idp.attribute.resolver.failure") == null) {
+ out.println("No Attribute Resolver Gauge Set Found");
+ continue;
+ }
+ final Gauge<Map<String,Instant>> gauge = (Gauge<Map<String,Instant>>) metrics.getMetrics().get("net.shibboleth.idp.attribute.resolver.failure");
+ Set<Entry<String, Instant>> entrySet = gauge.getValue().entrySet();
+ if (entrySet.isEmpty()) {
+ out.println("\tNo Data Connector has ever failed");
+ out.println();
+ continue;
+ }
+ for (final Entry<String, Instant> en : entrySet) {
+ final Instant lastFail = en.getValue();
+ final String connectorId = en.getKey();
+ if (null != lastFail) {
+ out.println("\tDataConnector " + connectorId + ": last failed at " + dateTimeFormatter.format(lastFail));
+ } else {
+ out.println("\tDataConnector " + connectorId + ": has never failed");
+ }
+ out.println();
+ }
}
}
%>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list