[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