You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by gr...@apache.org on 2015/04/22 22:05:20 UTC
[1/3] incubator-usergrid git commit: First cut of metrics for SSO.
Repository: incubator-usergrid
Updated Branches:
refs/heads/master 0d1965d18 -> e7a543b4b
First cut of metrics for SSO.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/4e42353c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/4e42353c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/4e42353c
Branch: refs/heads/master
Commit: 4e42353c334665798978d8142fb0b4813e72901b
Parents: 2e90f39
Author: Dave Johnson <dm...@apigee.com>
Authored: Tue Apr 21 16:31:50 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Tue Apr 21 16:31:50 2015 -0400
----------------------------------------------------------------------
.../apache/usergrid/metrics/MetricsFactory.java | 30 +++++----
.../rest/management/ManagementResource.java | 64 +++++++++++++++++---
2 files changed, 71 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4e42353c/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java b/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
index e9888e9..9b98799 100644
--- a/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
@@ -48,25 +48,29 @@ public class MetricsFactory {
@PostConstruct
void init() {
+
registry = new MetricRegistry();
String badHost = "badhost";
- String metricsHost = properties.getProperty("usergrid.metrics.graphite.host", badHost);
- Graphite graphite = new Graphite(new InetSocketAddress(metricsHost, 2003));
- graphiteReporter = GraphiteReporter.forRegistry(registry)
- .prefixedWith("notifications")
- .convertRatesTo(TimeUnit.SECONDS)
- .convertDurationsTo(TimeUnit.MILLISECONDS)
- .filter(MetricFilter.ALL)
- .build(graphite);
- if(metricsHost!=badHost) {
- graphiteReporter.start(30, TimeUnit.SECONDS);
- }else {
- LOG.warn("MetricsService:Logger not started.");
+ String metricsHost = properties.getProperty( "usergrid.metrics.graphite.host", badHost );
+ Graphite graphite = new Graphite( new InetSocketAddress( metricsHost, 2003 ) );
+
+ graphiteReporter = GraphiteReporter.forRegistry( registry )
+ .prefixedWith( "notifications" )
+ .convertRatesTo( TimeUnit.SECONDS )
+ .convertDurationsTo( TimeUnit.MILLISECONDS )
+ .filter( MetricFilter.ALL )
+ .build( graphite );
+
+ if (metricsHost != badHost) {
+ graphiteReporter.start( 30, TimeUnit.SECONDS );
+ LOG.info("MetricsService: Reporter started.");
+ } else {
+ LOG.warn( "MetricsService: Reporter not started." );
graphiteReporter.stop();
}
hashMap = new ConcurrentHashMap<String, Metric>();
- jmxReporter = JmxReporter.forRegistry(registry).build();
+ jmxReporter = JmxReporter.forRegistry( registry ).build();
jmxReporter.start();
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4e42353c/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
index 2bbcfd9..2e5f5e4 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
@@ -18,9 +18,7 @@ package org.apache.usergrid.rest.management;
import java.net.URLEncoder;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
@@ -28,6 +26,8 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Timer;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
@@ -37,6 +37,7 @@ import org.apache.usergrid.exception.NotImplementedException;
import org.apache.usergrid.management.ApplicationCreator;
import org.apache.usergrid.management.OrganizationInfo;
import org.apache.usergrid.management.OrganizationOwnerInfo;
+import org.apache.usergrid.metrics.MetricsFactory;
import org.apache.usergrid.persistence.entities.User;
import org.apache.usergrid.persistence.exceptions.EntityNotFoundException;
import org.codehaus.jackson.JsonNode;
@@ -92,7 +93,9 @@ public class ManagementResource extends AbstractContextResource {
/*-
* New endpoints:
- *
+ *
+ * /management/externaltoken?ext_access_token=<token-from-central-usergrid>&ttl=<time-to-live>
+ *
* /management/organizations/<organization-name>/applications
* /management/organizations/<organization-name>/users
* /management/organizations/<organization-name>/keys
@@ -105,10 +108,18 @@ public class ManagementResource extends AbstractContextResource {
@Autowired
private ApplicationCreator applicationCreator;
- public static final String USERGRID_CENTRAL_URL = "usergrid.central.url";
+ @Autowired
+ MetricsFactory metricsFactory;
- public static final String USERGRID_SYSADMIN_LOGIN_NAME = "usergrid.sysadmin.login.name";
+ // names for metrics to be collected
+ private static final String SSO_TOKENS_REJECTED = "sso_tokens_rejected";
+ private static final String SSO_TOKENS_VALIDATED = "sso_tokens_validated";
+ private static final String SSO_CREATED_LOCAL_ADMINS = "sso_created_local_admins";
+ private static final String SSO_PROCESSING_TIME = "sso_processing_time";
+ // usergrid configuration property names needed
+ public static final String USERGRID_CENTRAL_URL = "usergrid.central.url";
+ public static final String USERGRID_SYSADMIN_LOGIN_NAME = "usergrid.sysadmin.login.name";
public static final String USERGRID_SYSADMIN_LOGIN_ALLOWED = "usergrid.sysadmin.login.allowed";
@@ -492,7 +503,7 @@ public class ManagementResource extends AbstractContextResource {
}
String extAccessToken = json.get("ext_access_token").toString();
- Object ttlObj = json.get("ttl");
+ Object ttlObj = json.get( "ttl" );
if ( ttlObj == null ) {
throw new IllegalArgumentException("ttl must be specified");
}
@@ -551,6 +562,11 @@ public class ManagementResource extends AbstractContextResource {
}
AccessInfo accessInfo = null;
+ Timer processingTimer = metricsFactory.getTimer(
+ ManagementResource.class, SSO_PROCESSING_TIME );
+
+ Timer.Context timerContext = processingTimer.time();
+
try {
// look up user via UG Central's /management/me endpoint.
@@ -573,7 +589,12 @@ public class ManagementResource extends AbstractContextResource {
String dummyPassword = RandomStringUtils.randomAlphanumeric( 40 );
JsonNode orgsNode = userNode.get( "organizations" );
- final Iterator<String> fieldNames = orgsNode.getFieldNames();
+ Iterator<String> fieldNames = orgsNode.getFieldNames();
+ if ( !fieldNames.hasNext() ) {
+ // no organizations for user exist in response from central Usergrid SSO
+ // so create user's personal organization and use username as organization name
+ fieldNames = Collections.singletonList( username ).iterator();
+ }
// create user and any organizations that user is supposed to have
@@ -593,6 +614,10 @@ public class ManagementResource extends AbstractContextResource {
userId = ownerOrgInfo.getOwner().getUuid();
userInfo = ownerOrgInfo.getOwner();
+ Counter createdAdminsCounter = metricsFactory.getCounter(
+ ManagementResource.class, SSO_CREATED_LOCAL_ADMINS );
+ createdAdminsCounter.inc();
+
} else {
// already created user, so just create an org
@@ -614,11 +639,18 @@ public class ManagementResource extends AbstractContextResource {
.withAccessToken( extAccessToken );
} catch (Exception e) {
+ timerContext.stop();
+ timerContext.close();
logger.debug("Error validating external token", e);
throw e;
}
- return Response.status( SC_OK ).type( jsonMediaType( callback ) ).entity( accessInfo ).build();
+ final Response response = Response.status( SC_OK ).type( jsonMediaType( callback ) ).entity( accessInfo ).build();
+
+ timerContext.stop();
+ timerContext.close();
+
+ return response;
}
@@ -631,6 +663,13 @@ public class ManagementResource extends AbstractContextResource {
*/
private JsonNode getMeFromUgCentral( String extAccessToken ) throws EntityNotFoundException {
+ // prepare to count tokens validated and rejected
+
+ Counter tokensRejectedCounter = metricsFactory.getCounter(
+ ManagementResource.class, SSO_TOKENS_REJECTED );
+ Counter tokensValidatedCounter = metricsFactory.getCounter(
+ ManagementResource.class, SSO_TOKENS_VALIDATED );
+
// create URL of central Usergrid's /management/me endpoint
String externalUrl = properties.getProperty( USERGRID_CENTRAL_URL ).trim();
@@ -643,18 +682,23 @@ public class ManagementResource extends AbstractContextResource {
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put( JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
- Client client = Client.create(clientConfig);
+ Client client = Client.create( clientConfig );
+
final JsonNode accessInfoNode;
try {
accessInfoNode = client.resource( me )
.type( MediaType.APPLICATION_JSON_TYPE)
.get(JsonNode.class);
+ tokensValidatedCounter.inc();
+
} catch ( Exception e ) {
// user not found 404
+ tokensRejectedCounter.inc();
String msg = "Cannot find Admin User associated with " + extAccessToken;
throw new EntityNotFoundException( msg, e );
}
+
return accessInfoNode;
}
[2/3] incubator-usergrid git commit: Remove redundant timer.close()
calls. Also, change behavior of GraphiteReporter: during tests,
it uses a higher frequency for polling.
Posted by gr...@apache.org.
Remove redundant timer.close() calls. Also, change behavior of GraphiteReporter: during tests, it uses a higher frequency for polling.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/77819b34
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/77819b34
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/77819b34
Branch: refs/heads/master
Commit: 77819b343dc18f74068d29a3613753549dbb2ab4
Parents: 4e42353
Author: Dave Johnson <dm...@apigee.com>
Authored: Wed Apr 22 15:12:18 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Wed Apr 22 15:12:18 2015 -0400
----------------------------------------------------------------------
.../java/org/apache/usergrid/metrics/MetricsFactory.java | 11 +++++++++--
.../usergrid/rest/management/ManagementResource.java | 2 --
2 files changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/77819b34/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java b/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
index 9b98799..db836e5 100644
--- a/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/metrics/MetricsFactory.java
@@ -61,8 +61,15 @@ public class MetricsFactory {
.filter( MetricFilter.ALL )
.build( graphite );
- if (metricsHost != badHost) {
- graphiteReporter.start( 30, TimeUnit.SECONDS );
+ if ( !metricsHost.equalsIgnoreCase( badHost )) {
+
+ if ( "true".equalsIgnoreCase( properties.getProperty( "usergrid.test" ) ) ) {
+ // run at higher frequency for testing, we can't wait 30 seconds to start
+ graphiteReporter.start( 200, TimeUnit.MILLISECONDS );
+
+ } else {
+ graphiteReporter.start( 30, TimeUnit.SECONDS );
+ }
LOG.info("MetricsService: Reporter started.");
} else {
LOG.warn( "MetricsService: Reporter not started." );
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/77819b34/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
index 2e5f5e4..0e1469c 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
@@ -640,7 +640,6 @@ public class ManagementResource extends AbstractContextResource {
} catch (Exception e) {
timerContext.stop();
- timerContext.close();
logger.debug("Error validating external token", e);
throw e;
}
@@ -648,7 +647,6 @@ public class ManagementResource extends AbstractContextResource {
final Response response = Response.status( SC_OK ).type( jsonMediaType( callback ) ).entity( accessInfo ).build();
timerContext.stop();
- timerContext.close();
return response;
}
[3/3] incubator-usergrid git commit: Merge branch 'master' into
USERGRID-576-ssometrics
Posted by gr...@apache.org.
Merge branch 'master' into USERGRID-576-ssometrics
Conflicts:
stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/e7a543b4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/e7a543b4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/e7a543b4
Branch: refs/heads/master
Commit: e7a543b4bbd22bc2a8b440359270adf1e83efb1f
Parents: 77819b3 0d1965d
Author: Dave Johnson <dm...@apigee.com>
Authored: Wed Apr 22 15:19:05 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Wed Apr 22 15:19:05 2015 -0400
----------------------------------------------------------------------
stack/pom.xml | 24 --------
.../rest/management/ManagementResource.java | 60 +++++++++-----------
2 files changed, 27 insertions(+), 57 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/e7a543b4/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
index 0e1469c,d2ba606..7c8cf43
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/ManagementResource.java
@@@ -17,17 -17,6 +17,8 @@@
package org.apache.usergrid.rest.management;
- import java.net.URLEncoder;
- import java.util.*;
-
- import javax.ws.rs.*;
- import javax.ws.rs.core.Context;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.core.Response;
- import javax.ws.rs.core.UriInfo;
-
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Timer;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
@@@ -58,6 -37,7 +39,8 @@@ import org.apache.usergrid.management.U
import org.apache.usergrid.management.exceptions.DisabledAdminUserException;
import org.apache.usergrid.management.exceptions.UnactivatedAdminUserException;
import org.apache.usergrid.management.exceptions.UnconfirmedAdminUserException;
++import org.apache.usergrid.metrics.MetricsFactory;
+ import org.apache.usergrid.persistence.exceptions.EntityNotFoundException;
import org.apache.usergrid.rest.AbstractContextResource;
import org.apache.usergrid.rest.exceptions.RedirectionException;
import org.apache.usergrid.rest.management.organizations.OrganizationsResource;
@@@ -590,7 -565,7 +583,8 @@@ public class ManagementResource extend
JsonNode orgsNode = userNode.get( "organizations" );
Iterator<String> fieldNames = orgsNode.getFieldNames();
- if (!fieldNames.hasNext()) {
++
+ if ( !fieldNames.hasNext() ) {
// no organizations for user exist in response from central Usergrid SSO
// so create user's personal organization and use username as organization name
fieldNames = Collections.singletonList( username ).iterator();