You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/07/22 14:08:51 UTC
[01/23] incubator-usergrid git commit: Remove unnecessary code,
use user->org mapping to work around issues with
getOrganizationsForAdminUser().
Repository: incubator-usergrid
Updated Branches:
refs/heads/two-dot-o 3b289aa2a -> 764a7c85e
Remove unnecessary code, use user->org mapping to work around issues with getOrganizationsForAdminUser().
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/4bd1115c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/4bd1115c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/4bd1115c
Branch: refs/heads/two-dot-o
Commit: 4bd1115c443b3b215e882edec34e99b65735a69e
Parents: 107a465
Author: Dave Johnson <dm...@apigee.com>
Authored: Thu Jun 25 13:34:52 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Thu Jun 25 13:34:52 2015 -0400
----------------------------------------------------------------------
.../org/apache/usergrid/tools/ExportAdmins.java | 268 ++++++++++---------
.../org/apache/usergrid/tools/ImportAdmins.java | 239 ++++++++---------
stack/tools/src/main/resources/log4j.properties | 6 +-
3 files changed, 252 insertions(+), 261 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4bd1115c/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
index e781a1c..f5d1b1d 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
@@ -18,11 +18,14 @@
package org.apache.usergrid.tools;
+import au.com.bytecode.opencsv.CSVWriter;
import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
+import org.apache.usergrid.management.UserInfo;
import org.apache.usergrid.persistence.*;
import org.apache.usergrid.persistence.Results.Level;
import org.apache.usergrid.persistence.cassandra.CassandraService;
@@ -31,10 +34,12 @@ import org.codehaus.jackson.JsonGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.FileWriter;
import java.util.*;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static org.apache.usergrid.persistence.cassandra.CassandraService.MANAGEMENT_APPLICATION_ID;
/**
@@ -48,20 +53,34 @@ public class ExportAdmins extends ExportingToolBase {
public static final String ADMIN_USERS_PREFIX = "admin-users";
public static final String ADMIN_USER_METADATA_PREFIX = "admin-user-metadata";
private static final String READ_THREAD_COUNT = "readThreads";
+ private Map<String, List<Org>> orgMap = new HashMap<String, List<Org>>(80000);
private int readThreadCount;
-
-
+
+ AtomicInteger count = new AtomicInteger( 0 );
+
+
/**
* Represents an AdminUser that has been read and is ready for export.
*/
class AdminUserWriteTask {
Entity adminUser;
- Map<String, List<UUID>> collectionsByName;
- Map<String, List<ConnectionRef>> connectionsByType;
Map<String, Map<Object, Object>> dictionariesByName;
BiMap<UUID, String> orgNamesByUuid;
}
+
+ /**
+ * Represents an organization associated with a user.
+ */
+ private class Org {
+ UUID orgId;
+ String orgName;
+ public Org( UUID orgId, String orgName ) {
+ this.orgId = orgId;
+ this.orgName = orgName;
+ }
+ }
+
/**
* Export admin users using multiple threads.
@@ -93,6 +112,8 @@ public class ExportAdmins extends ExportingToolBase {
readThreadCount = 20;
}
+ buildOrgMap();
+
// start write queue worker
BlockingQueue<AdminUserWriteTask> writeQueue = new LinkedBlockingQueue<AdminUserWriteTask>();
@@ -124,7 +145,7 @@ public class ExportAdmins extends ExportingToolBase {
while (ids.size() > 0) {
for (UUID uuid : ids.getIds()) {
readQueue.add( uuid );
- logger.debug( "Added uuid to readQueue: " + uuid );
+ //logger.debug( "Added uuid to readQueue: " + uuid );
}
if (ids.getCursor() == null) {
break;
@@ -139,9 +160,15 @@ public class ExportAdmins extends ExportingToolBase {
}
logger.debug( "Waiting for write thread to complete" );
- writeThread.join();
+
+ boolean done = false;
+ while ( !done ) {
+ writeThread.join( 10000, 0 );
+ done = !writeThread.isAlive();
+ logger.info( "Wrote {} users", count.get() );
+ }
}
-
+
@Override
@SuppressWarnings("static-access")
@@ -157,6 +184,76 @@ public class ExportAdmins extends ExportingToolBase {
}
+ /**
+ * Shouldn't have to do this but getOrganizationsForAdminUser() is not 100% reliable in some Usergrid installations.
+ */
+ private void buildOrgMap() throws Exception {
+
+ logger.info("Building org map");
+
+ ExecutorService execService = Executors.newFixedThreadPool( this.readThreadCount );
+
+ EntityManager em = emf.getEntityManager( MANAGEMENT_APPLICATION_ID );
+ String queryString = "select *";
+ Query query = Query.fromQL( queryString );
+ query.withLimit( 1000 );
+ Results organizations = null;
+ int count = 0;
+ do {
+ organizations = em.searchCollection( em.getApplicationRef(), "groups", query );
+ for ( Entity organization : organizations.getEntities() ) {
+ execService.submit( new OrgMapWorker( organization ) );
+ }
+ count++;
+ if ( count % 1000 == 0 ) {
+ logger.info("Processed {} orgs for org map", count);
+ }
+ query.setCursor( organizations.getCursor() );
+ }
+ while ( organizations != null && organizations.hasCursor() );
+
+ execService.shutdown();
+ while ( !execService.awaitTermination( 10, TimeUnit.SECONDS ) ) {
+ logger.info("Processed {} orgs for map", orgMap.size() );
+ }
+ }
+
+
+ public class OrgMapWorker implements Runnable {
+ private final Entity orgEntity;
+
+ public OrgMapWorker( Entity orgEntity ) {
+ this.orgEntity = orgEntity;
+ }
+
+ @Override
+ public void run() {
+ try {
+ final String orgName = orgEntity.getProperty( "path" ).toString();
+ final UUID orgId = orgEntity.getUuid();
+ for (UserInfo user : managementService.getAdminUsersForOrganization( orgEntity.getUuid() )) {
+ try {
+ Entity admin = managementService.getAdminUserEntityByUuid( user.getUuid() );
+ List<Org> orgs = orgMap.get( admin.getProperty( "username" ) );
+ if (orgs == null) {
+ orgs = new ArrayList<Org>();
+ orgMap.put( admin.getProperty( "username" ).toString().toLowerCase(), orgs );
+ }
+ orgs.add( new Org( orgId, orgName ) );
+
+ //logger.debug("Added org {} for user {}", orgName, admin.getProperty( "username" ));
+
+ } catch (Exception e) {
+ logger.warn( "Cannot get orgs for userId {}", user.getUuid() );
+ }
+ }
+ } catch ( Exception e ) {
+ logger.error("Error getting users for org {}:{}", orgEntity.getName(), orgEntity.getUuid());
+ }
+ }
+ }
+
+
public class AdminUserReader implements Runnable {
private boolean done = true;
@@ -189,7 +286,7 @@ public class ExportAdmins extends ExportingToolBase {
UUID uuid = null;
try {
uuid = readQueue.poll( 30, TimeUnit.SECONDS );
- logger.debug("Got item from entityId queue: " + uuid );
+ //logger.debug("Got item from entityId queue: " + uuid );
if ( uuid == null && done ) {
break;
@@ -200,10 +297,8 @@ public class ExportAdmins extends ExportingToolBase {
AdminUserWriteTask task = new AdminUserWriteTask();
task.adminUser = entity;
- addCollectionsToTask( task, entity );
addDictionariesToTask( task, entity );
- addConnectionsToTask( task, entity );
- addOrganizationsToTask( task, entity );
+ addOrganizationsToTask( task );
writeQueue.add( task );
@@ -214,41 +309,14 @@ public class ExportAdmins extends ExportingToolBase {
}
- private void addCollectionsToTask(AdminUserWriteTask task, Entity entity) throws Exception {
-
- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
- Set<String> collections = em.getCollections( entity );
- if ((collections == null) || collections.isEmpty()) {
- return;
- }
-
- task.collectionsByName = new HashMap<String, List<UUID>>();
-
- for (String collectionName : collections) {
-
- List<UUID> uuids = task.collectionsByName.get( collectionName );
- if ( uuids == null ) {
- uuids = new ArrayList<UUID>();
- task.collectionsByName.put( collectionName, uuids );
- }
-
- Results collectionMembers = em.getCollection( entity, collectionName, null, 100000, Level.IDS, false );
-
- List<UUID> entityIds = collectionMembers.getIds();
-
- if ((entityIds != null) && !entityIds.isEmpty()) {
- for (UUID childEntityUUID : entityIds) {
- uuids.add( childEntityUUID );
- }
- }
- }
- }
-
-
private void addDictionariesToTask(AdminUserWriteTask task, Entity entity) throws Exception {
EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
Set<String> dictionaries = em.getDictionaries( entity );
+
+ if ( dictionaries.isEmpty() ) {
+ logger.error("User {}:{} has no dictionaries", task.adminUser.getName(), task.adminUser.getUuid() );
+ }
task.dictionariesByName = new HashMap<String, Map<Object, Object>>();
@@ -258,32 +326,26 @@ public class ExportAdmins extends ExportingToolBase {
}
}
+ private void addOrganizationsToTask(AdminUserWriteTask task) throws Exception {
- private void addConnectionsToTask(AdminUserWriteTask task, Entity entity) throws Exception {
- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
-
- task.connectionsByType = new HashMap<String, List<ConnectionRef>>();
-
- Set<String> connectionTypes = em.getConnectionTypes( entity );
- for (String connectionType : connectionTypes) {
+ task.orgNamesByUuid = managementService.getOrganizationsForAdminUser( task.adminUser.getUuid() );
- List<ConnectionRef> connRefs = task.connectionsByType.get( connectionType );
- if ( connRefs == null ) {
- connRefs = new ArrayList<ConnectionRef>();
- }
-
- Results results = em.getConnectedEntities( entity.getUuid(), connectionType, null, Level.IDS );
- List<ConnectionRef> connections = results.getConnections();
-
- for (ConnectionRef connectionRef : connections) {
- connRefs.add( connectionRef );
+ List<Org> orgs = orgMap.get( task.adminUser.getProperty( "username" ).toString().toLowerCase() );
+
+ if ( orgs != null && task.orgNamesByUuid.size() < orgs.size() ) {
+ BiMap<UUID, String> bimap = HashBiMap.create();
+ for (Org org : orgs) {
+ bimap.put( org.orgId, org.orgName );
}
+ task.orgNamesByUuid = bimap;
+ }
+
+ if ( task.orgNamesByUuid.isEmpty() ) {
+ logger.error("{}:{}:{} has no orgs", new Object[] {
+ task.adminUser.getProperty("username"),
+ task.adminUser.getProperty("email"),
+ task.adminUser.getUuid() } );
}
- }
-
-
- private void addOrganizationsToTask(AdminUserWriteTask task, Entity entity) throws Exception {
- task.orgNamesByUuid = managementService.getOrganizationsForAdminUser( entity.getUuid() );
}
public void setDone(boolean done) {
@@ -325,8 +387,6 @@ public class ExportAdmins extends ExportingToolBase {
getJsonGenerator( createOutputFile( ADMIN_USER_METADATA_PREFIX, em.getApplication().getName() ) );
metadataFile.writeStartObject();
- int count = 0;
-
while ( true ) {
try {
@@ -340,18 +400,20 @@ public class ExportAdmins extends ExportingToolBase {
echo( task.adminUser );
// write metadata to metadata file
- saveCollections( metadataFile, task );
- saveConnections( metadataFile, task );
- saveOrganizations( metadataFile, task );
- saveDictionaries( metadataFile, task );
+ metadataFile.writeFieldName( task.adminUser.getUuid().toString() );
+ metadataFile.writeStartObject();
- logger.debug("Exported user {}", task.adminUser.getProperty( "email" ));
-
- count++;
- if ( count % 1000 == 0 ) {
- logger.info("Exported {} admin users", count);
- }
+ saveOrganizations( metadataFile, task );
+ saveDictionaries( metadataFile, task );
+
+ metadataFile.writeEndObject();
+
+ logger.debug( "Exported user {}:{}:{}", new Object[] {
+ task.adminUser.getProperty("username"),
+ task.adminUser.getProperty("email"),
+ task.adminUser.getUuid() } );
+ count.addAndGet( 1 );
} catch (InterruptedException e) {
throw new Exception("Interrupted", e);
@@ -364,32 +426,7 @@ public class ExportAdmins extends ExportingToolBase {
usersFile.writeEndArray();
usersFile.close();
- logger.info("Exported TOTAL {} admin users", count);
- }
-
-
- private void saveCollections( JsonGenerator jg, AdminUserWriteTask task ) throws Exception {
-
- jg.writeFieldName( task.adminUser.getUuid().toString() );
- jg.writeStartObject();
-
- for (String collectionName : task.collectionsByName.keySet() ) {
-
- jg.writeFieldName( collectionName );
- jg.writeStartArray();
-
- List<UUID> entityIds = task.collectionsByName.get( collectionName );
-
- if ((entityIds != null) && !entityIds.isEmpty()) {
- for (UUID childEntityUUID : entityIds) {
- jg.writeObject( childEntityUUID.toString() );
- }
- }
-
- jg.writeEndArray();
- }
-
- jg.writeEndObject();
+ logger.info( "Exported TOTAL {} admin users", count );
}
@@ -421,27 +458,6 @@ public class ExportAdmins extends ExportingToolBase {
}
- private void saveConnections( JsonGenerator jg, AdminUserWriteTask task ) throws Exception {
-
- jg.writeFieldName( "connections" );
- jg.writeStartObject();
-
- for (String connectionType : task.connectionsByType.keySet() ) {
-
- jg.writeFieldName( connectionType );
- jg.writeStartArray();
-
- List<ConnectionRef> connections = task.connectionsByType.get( connectionType );
- for (ConnectionRef connectionRef : connections) {
- jg.writeObject( connectionRef.getConnectedEntity().getUuid() );
- }
-
- jg.writeEndArray();
- }
- jg.writeEndObject();
- }
-
-
private void saveOrganizations( JsonGenerator jg, AdminUserWriteTask task ) throws Exception {
final BiMap<UUID, String> orgs = task.orgNamesByUuid;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4bd1115c/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
index d05c9a8..857e97e 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
@@ -40,6 +40,7 @@ import java.util.*;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
import static org.apache.usergrid.persistence.Schema.PROPERTY_TYPE;
import static org.apache.usergrid.persistence.Schema.PROPERTY_UUID;
@@ -47,9 +48,11 @@ import static org.apache.usergrid.persistence.cassandra.CassandraService.MANAGEM
/**
- * TODO: REFACTOR EVERYTHING TO USE JSON NODES
- * Example on how to run:
- * java -jar usergrid-tools.jar ImportAdmins -host cassandraHost -v -inputDir exportFilesDirectory
+ * Usage example:
+ *
+ * java -Xmx8000m -Dlog4j.configuration=file:/home/dmjohnson/import-admins/log4j.properties -classpath . \
+ * -jar usergrid-tools-1.0.2.jar ImportAdmins -writeThreads 100 -auditThreads 100 -host cca03eadn \
+ * -inputDir=/home/dmjohnson/export-admins/exported > import3.log 2>&1 &
*/
public class ImportAdmins extends ToolBase {
@@ -73,6 +76,9 @@ public class ImportAdmins extends ToolBase {
JsonFactory jsonFactory = new JsonFactory();
+ AtomicInteger userCount = new AtomicInteger( 0 );
+ AtomicInteger metadataCount = new AtomicInteger( 0 );
+
@Override
@SuppressWarnings("static-access")
@@ -102,8 +108,8 @@ public class ImportAdmins extends ToolBase {
options.addOption(hostOption);
options.addOption(writeThreads);
options.addOption(auditThreads);
- options.addOption(inputDir);
- options.addOption(verbose);
+ options.addOption( inputDir );
+ options.addOption( verbose );
return options;
}
@@ -126,16 +132,12 @@ public class ImportAdmins extends ToolBase {
}
if (line.hasOption(WRITE_THREAD_COUNT)) {
- writeThreadCount = Integer.parseInt(line.getOptionValue(WRITE_THREAD_COUNT));
+ writeThreadCount = Integer.parseInt( line.getOptionValue(WRITE_THREAD_COUNT));
}
importAdminUsers(writeThreadCount, auditThreadCount);
- importMetadata(writeThreadCount);
-
- // forces the counters to flush
-// logger.info( "Sleeping 35 seconds for batcher" );
-// Thread.sleep( 35000 );
+ importMetadata( writeThreadCount );
}
@@ -190,10 +192,11 @@ public class ImportAdmins extends ToolBase {
@SuppressWarnings("unchecked")
Map<String, Object> entityProps = jp.readValueAs(HashMap.class);
- if (loopCounter % 100 == 1)
- logger.info("Publishing to queue... counter=" + loopCounter);
+ if (loopCounter % 1000 == 0) {
+ logger.debug( "Publishing to queue... counter=" + loopCounter );
+ }
- workQueue.add(entityProps);
+ workQueue.add( entityProps );
}
waitForQueueAndMeasure(workQueue, adminWriteThreads, "Admin Write");
@@ -209,15 +212,15 @@ public class ImportAdmins extends ToolBase {
final Map<Stoppable, Thread> threadMap,
final String identifier) throws InterruptedException {
double rateAverageSum = 0;
- int iterationCounter = 0;
+ int iterations = 0;
while (!workQueue.isEmpty()) {
- iterationCounter += 1;
+ iterations += 1;
int sizeLast = workQueue.size();
long lastTime = System.currentTimeMillis();
logger.info("Queue {} is not empty, remaining size={}, waiting...", identifier, sizeLast);
- Thread.sleep(5000);
+ Thread.sleep(10000);
long timeNow = System.currentTimeMillis();
int sizeNow = workQueue.size();
@@ -229,12 +232,11 @@ public class ImportAdmins extends ToolBase {
double rateLast = (double) processed / (timeDelta / 1000);
rateAverageSum += rateLast;
- long timeRemaining = (long) ( sizeLast / (rateAverageSum / iterationCounter) );
+ long timeRemaining = (long) ( sizeLast / (rateAverageSum / iterations) );
- logger.info(
- String.format("++PROGRESS (%s): sizeLast=%s nowSize=%s processed=%s rateLast=%s/s rateAvg=%s/s timeRemaining=%s(s)",
- identifier, sizeLast, sizeNow, processed, rateLast, (rateAverageSum / iterationCounter), timeRemaining)
- );
+ logger.info("++PROGRESS ({}): sizeLast={} nowSize={} processed={} rateLast={}/s rateAvg={}/s timeRemaining={}s",
+ new Object[] {
+ identifier, sizeLast, sizeNow, processed, rateLast, (rateAverageSum / iterations), timeRemaining } );
}
for (Stoppable worker : threadMap.keySet()) {
@@ -249,6 +251,7 @@ public class ImportAdmins extends ToolBase {
workerThread.start();
adminAuditThreads.put(worker, workerThread);
}
+ logger.info("Started {} admin auditors", workerCount);
}
@@ -263,6 +266,8 @@ public class ImportAdmins extends ToolBase {
workerThread.start();
adminWriteThreads.put(worker, workerThread);
}
+
+ logger.info("Started {} admin workers", workerCount);
}
@@ -284,8 +289,8 @@ public class ImportAdmins extends ToolBase {
private JsonParser getJsonParserForFile(File organizationFile) throws Exception {
- JsonParser jp = jsonFactory.createJsonParser(organizationFile);
- jp.setCodec(new ObjectMapper());
+ JsonParser jp = jsonFactory.createJsonParser( organizationFile );
+ jp.setCodec( new ObjectMapper() );
return jp;
}
@@ -312,10 +317,12 @@ public class ImportAdmins extends ToolBase {
for (int x = 0; x < writeThreadCount; x++) {
ImportMetadataWorker worker = new ImportMetadataWorker(workQueue);
- Thread workerThread = new Thread(worker, "ImportMetadataTask-" + x);
+ Thread workerThread = new Thread(worker, "ImportMetadataTask-" + x );
workerThread.start();
metadataWorkerThreadMap.put(worker, workerThread);
}
+
+ logger.info( "Started {} metadata workers", writeThreadCount );
}
@@ -362,7 +369,6 @@ public class ImportAdmins extends ToolBase {
Map<String, Object> metadata = (Map<String, Object>) jp.readValueAs(Map.class);
workQueue.put(new ImportMetadataTask(entityRef, metadata));
-// importEntityMetadata(em, entityRef, metadata);
}
}
@@ -380,82 +386,11 @@ public class ImportAdmins extends ToolBase {
private void importEntityMetadata(
EntityManager em, EntityRef entityRef, Map<String, Object> metadata) throws Exception {
- Map<String, Object> connectionsMap = (Map<String, Object>) metadata.get("connections");
-
- if (connectionsMap != null && !connectionsMap.isEmpty()) {
- for (String type : connectionsMap.keySet()) {
- try {
- UUID uuid = UUID.fromString((String) connectionsMap.get(type));
- EntityRef connectedEntityRef = em.getRef(uuid);
- em.createConnection(entityRef, type, connectedEntityRef);
-
- logger.debug("Creating connection from {} type {} target {}",
- new Object[]{entityRef, type, connectedEntityRef});
-
- } catch (Exception e) {
- if (logger.isDebugEnabled()) {
- logger.error("Error importing connection of type "
- + type + " for user " + entityRef.getUuid(), e);
- } else {
- logger.error("Error importing connection of type "
- + type + " for user " + entityRef.getUuid());
- }
- }
- }
- }
-
- Map<String, Object> dictionariesMap = (Map<String, Object>) metadata.get("dictionaries");
-
- if (dictionariesMap != null && !dictionariesMap.isEmpty()) {
- for (String name : dictionariesMap.keySet()) {
- try {
- Map<String, Object> dictionary = (Map<String, Object>) dictionariesMap.get(name);
- em.addMapToDictionary(entityRef, name, dictionary);
-
- logger.debug("Creating dictionary for {} name {} map {}",
- new Object[]{entityRef, name, dictionary});
-
- } catch (Exception e) {
- if (logger.isDebugEnabled()) {
- logger.error("Error importing dictionary name "
- + name + " for user " + entityRef.getUuid(), e);
- } else {
- logger.error("Error importing dictionary name "
- + name + " for user " + entityRef.getUuid());
- }
- }
- }
- }
-
- List<String> collectionsList = (List<String>) metadata.get("collections");
- if (collectionsList != null && !collectionsList.isEmpty()) {
- for (String name : collectionsList) {
- try {
- UUID uuid = UUID.fromString((String) connectionsMap.get(name));
- EntityRef collectedEntityRef = em.getRef(uuid);
- em.addToCollection(entityRef, name, collectedEntityRef);
-
- logger.debug("Add to collection of {} name {} entity {}",
- new Object[]{entityRef, name, collectedEntityRef});
-
- } catch (Exception e) {
- if (logger.isDebugEnabled()) {
- logger.error("Error adding to collection "
- + name + " for user " + entityRef.getUuid(), e);
- } else {
- logger.error("Error adding to collection "
- + name + " for user " + entityRef.getUuid());
- }
- }
- }
- }
-
-
List<Object> organizationsList = (List<Object>) metadata.get("organizations");
if (organizationsList != null && !organizationsList.isEmpty()) {
User user = em.get(entityRef, User.class);
-
+
if (user == null) {
logger.error("User with uuid={} not found, not adding to organizations");
@@ -476,19 +411,55 @@ public class ImportAdmins extends ToolBase {
managementService.createOrganization(orgUuid, orgName, userInfo, false);
orgInfo = managementService.getOrganizationByUuid(orgUuid);
- logger.debug("Created new org {} for user {}",
- new Object[]{orgInfo.getName(), user.getEmail()});
+ logger.debug( "Created new org {} for user {}",
+ new Object[]{orgInfo.getName(), user.getEmail()} );
} catch (DuplicateUniquePropertyExistsException dpee) {
- logger.error("Org {} already exists", orgName);
+ logger.debug( "Org {} already exists", orgName );
+ }
+ } else {
+ try {
+ managementService.addAdminUserToOrganization( userInfo, orgInfo, false );
+ logger.debug( "Added user {} to org {}", new Object[]{user.getEmail(), orgName} );
+
+ } catch ( Exception e ) {
+ logger.error( "Error Adding user {} to org {}", new Object[]{user.getEmail(), orgName} );
}
+ }
+ }
+ }
+
+ } else {
+ logger.warn("User {} has no organizations", entityRef.getUuid() );
+ }
+
+ Map<String, Object> dictionariesMap = (Map<String, Object>) metadata.get("dictionaries");
+
+ if (dictionariesMap != null && !dictionariesMap.isEmpty()) {
+ for (String name : dictionariesMap.keySet()) {
+ try {
+ Map<String, Object> dictionary = (Map<String, Object>) dictionariesMap.get(name);
+ em.addMapToDictionary( entityRef, name, dictionary);
+
+ logger.debug( "Creating dictionary for {} name {}",
+ new Object[]{entityRef, name} );
+
+ } catch (Exception e) {
+ if (logger.isDebugEnabled()) {
+ logger.error("Error importing dictionary name "
+ + name + " for user " + entityRef.getUuid(), e);
} else {
- managementService.addAdminUserToOrganization(userInfo, orgInfo, false);
- logger.debug("Added user {} to org {}", new Object[]{user.getEmail(), orgName});
+ logger.error("Error importing dictionary name "
+ + name + " for user " + entityRef.getUuid());
}
}
}
+
+ } else {
+ logger.warn("User {} has no dictionaries", entityRef.getUuid() );
}
+
+
}
@@ -552,8 +523,7 @@ public class ImportAdmins extends ToolBase {
String type = getType(entityProps);
if (em.get(uuid) == null) {
- logger.error("Holy hell, we wrote an entity and it's missing. " +
- "Entity Id was {} and type is {}", uuid, type);
+ logger.error( "FATAL ERROR: wrote an entity {}:{} and it's missing", uuid, type );
System.exit(1);
}
@@ -563,8 +533,12 @@ public class ImportAdmins extends ToolBase {
long duration = stopTime - startTime;
durationSum += duration;
- logger.debug(String.format("Audited [%s]th admin", count));
- logger.info(String.format("Average Audit Rate: %s(ms)", durationSum / count));
+
+ //logger.debug( "Audited {}th admin", count );
+
+ if ( count % 100 == 0 ) {
+ logger.info( "Audited {}. Average Audit Rate: {}(ms)", count, durationSum / count );
+ }
} catch (InterruptedException e) {
e.printStackTrace();
@@ -572,8 +546,6 @@ public class ImportAdmins extends ToolBase {
e.printStackTrace();
}
}
-
- logger.warn("Done!");
}
}
@@ -619,24 +591,28 @@ public class ImportAdmins extends ToolBase {
Thread.sleep(1000);
continue;
}
-
- count++;
+
long startTime = System.currentTimeMillis();
+
importEntityMetadata(em, task.entityRef, task.metadata);
+
+ metadataCount.addAndGet( 1 );
long stopTime = System.currentTimeMillis();
-
long duration = stopTime - startTime;
durationSum += duration;
- logger.debug(String.format("Imported [%s]th metadata", count));
- logger.info(String.format("Average metadata Imported Rate: %s(ms)", durationSum / count));
+ count++;
+
+ //logger.debug( "Imported {}th metadata", count );
+
+ if ( count % 30 == 0 ) {
+ logger.info( "Imported {} metadata of total {}. Average metadata Imported Rate: {}(ms)",
+ new Object[] { count, metadataCount.get(), durationSum / count });
+ }
} catch (Exception e) {
- e.printStackTrace();
- logger.debug("EXCEPTION", e);
+ logger.debug("Error reading writing metadata", e);
}
}
-
- logger.warn("Done!");
}
}
@@ -650,7 +626,6 @@ public class ImportAdmins extends ToolBase {
public ImportAdminWorker(final BlockingQueue<Map<String, Object>> workQueue,
final BlockingQueue<Map<String, Object>> auditQueue) {
- logger.info("New Worker!");
this.workQueue = workQueue;
this.auditQueue = auditQueue;
}
@@ -684,27 +659,29 @@ public class ImportAdmins extends ToolBase {
UUID uuid = getId(entityProps);
String type = getType(entityProps);
-
try {
long startTime = System.currentTimeMillis();
+
em.create(uuid, type, entityProps);
+
+ logger.debug( "Imported admin user {} / {}",
+ new Object[] { uuid, entityProps.get( "username" ) } );
+
+ userCount.addAndGet( 1 );
auditQueue.put(entityProps);
long stopTime = System.currentTimeMillis();
-
long duration = stopTime - startTime;
durationSum += duration;
-
+
count++;
- logger.debug(String.format("Imported [%s]th admin user %s / %s", count, uuid, entityProps.get("username")));
- logger.info(String.format("Average Creation Rate: %s(ms)", durationSum / count));
-
- if (count % 100 == 0) {
- logger.info("Imported {} admin users", count);
+ if (count % 30 == 0) {
+ logger.info( "Imported {} admin users of total {}. Average Creation Rate: {}ms",
+ new Object[] { count, userCount.get(), durationSum / count });
}
+
} catch (DuplicateUniquePropertyExistsException de) {
- logger.warn("Unable to create entity. It appears to be a duplicate: " +
- "id={}, type={}, name={}, username={}",
- new Object[]{uuid, type, entityProps.get("name"), entityProps.get("username")});
+ logger.warn("Unable to create admin user {}:{}, duplicate property {}",
+ new Object[]{ uuid, entityProps.get("username"), de.getPropertyName() });
if (logger.isDebugEnabled()) {
logger.debug("Exception", de);
}
@@ -716,8 +693,6 @@ public class ImportAdmins extends ToolBase {
}
}
-
- logger.warn("Done!");
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4bd1115c/stack/tools/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/resources/log4j.properties b/stack/tools/src/main/resources/log4j.properties
index 73ade48..6cf0a92 100644
--- a/stack/tools/src/main/resources/log4j.properties
+++ b/stack/tools/src/main/resources/log4j.properties
@@ -18,7 +18,7 @@
# and the pattern to %c instead of %l. (%l is slower.)
# output messages into a rolling log file as well as stdout
-log4j.rootLogger=INFO,stdout
+log4j.rootLogger=WARN,stdout
# stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
@@ -26,9 +26,9 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p (%t) [%c] - %m%n
-log4j.logger.org.apache.usergrid.tools=DEBUG
-log4j.logger.org.apache.usergrid.management.cassandra=DEBUB
+log4j.logger.org.apache.usergrid.tools=INFO
+log4j.logger.org.apache.usergrid.management.cassandra=WARN
log4j.logger.org.apache.usergrid.persistence.cassandra.DB=WARN
log4j.logger.org.apache.usergrid.persistence.cassandra.BATCH=WARN
log4j.logger.org.apache.usergrid.persistence.cassandra.EntityManagerFactoryImpl=WARN
[07/23] incubator-usergrid git commit: Incrementing snapshot version
to 1.0.3-SNAPSHOT.
Posted by sn...@apache.org.
Incrementing snapshot version to 1.0.3-SNAPSHOT.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/f5cc9703
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/f5cc9703
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/f5cc9703
Branch: refs/heads/two-dot-o
Commit: f5cc97038247e431f6451125329c64e5bb58f6c1
Parents: d52427b
Author: Dave Johnson <dm...@apigee.com>
Authored: Fri Jun 26 14:32:35 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Fri Jun 26 14:32:35 2015 -0400
----------------------------------------------------------------------
.usergridversion | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f5cc9703/.usergridversion
----------------------------------------------------------------------
diff --git a/.usergridversion b/.usergridversion
index 276823b..99eda91 100644
--- a/.usergridversion
+++ b/.usergridversion
@@ -1 +1 @@
-1.0.2-SNAPSHOT
+1.0.3-SNAPSHOT
[18/23] incubator-usergrid git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/incubator-usergrid
Posted by sn...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/b9af09eb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/b9af09eb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/b9af09eb
Branch: refs/heads/two-dot-o
Commit: b9af09ebf90b0b687df1817695babfeaa43385b5
Parents: 7a95109 ab149ae
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Jul 6 19:20:44 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Jul 6 19:20:44 2015 -0400
----------------------------------------------------------------------
CHANGELOG | 3 +
LICENSE | 10 +
stack/LICENSE-2.0.txt | 202 -------------------
.../applications/assets/AssetResourceIT.java | 2 +-
.../src/test/resources/cat-larger-than-6mb.jpg | Bin 9799257 -> 0 bytes
.../src/test/resources/ship-larger-than-6mb.gif | Bin 0 -> 7407487 bytes
6 files changed, 14 insertions(+), 203 deletions(-)
----------------------------------------------------------------------
[23/23] incubator-usergrid git commit: Merge branch 'master' into
two-dot-o
Posted by sn...@apache.org.
Merge branch 'master' into two-dot-o
Conflicts:
CHANGELOG
stack/rest/pom.xml
stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
stack/tools/src/main/resources/log4j.properties
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/764a7c85
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/764a7c85
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/764a7c85
Branch: refs/heads/two-dot-o
Commit: 764a7c85ebf4eeaa720209f46fe02fb96a47c760
Parents: 3b289aa e1b352e
Author: Dave Johnson <sn...@apache.org>
Authored: Wed Jul 22 08:08:36 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Wed Jul 22 08:08:36 2015 -0400
----------------------------------------------------------------------
CHANGELOG | 3 -
LICENSE | 49 +--
NOTICE | 3 +-
.../css/arsmarquette/ARSMaquettePro-Light.otf | Bin 184600 -> 0 bytes
.../css/arsmarquette/ARSMaquettePro-Medium.otf | Bin 188020 -> 0 bytes
.../css/arsmarquette/ARSMaquettePro-Regular.otf | Bin 188096 -> 0 bytes
portal/css/main.css | 15 -
portal/css/main.min.css | 2 +-
release/release-candidate.sh | 10 -
stack/LICENSE-2.0.txt | 202 ------------
.../applications/assets/AssetResourceIT.java | 2 +-
.../src/test/resources/cat-larger-than-6mb.jpg | Bin 9799257 -> 0 bytes
.../src/test/resources/ship-larger-than-6mb.gif | Bin 0 -> 7407487 bytes
.../org/apache/usergrid/tools/ExportAdmins.java | 323 ++++++++++---------
.../org/apache/usergrid/tools/ImportAdmins.java | 298 ++++++++---------
.../org/apache/usergrid/tools/UserManager.java | 22 ++
stack/tools/src/main/resources/log4j.properties | 6 +-
17 files changed, 378 insertions(+), 557 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/764a7c85/CHANGELOG
----------------------------------------------------------------------
diff --cc CHANGELOG
index 70ea277,5e692fc..47a080a
--- a/CHANGELOG
+++ b/CHANGELOG
@@@ -1,6 -1,15 +1,3 @@@
-Usergrid 1.0.2
---------------------------------------------------------------------------------
-
-Usergrid 1.0.2
---------------------------------------------------------------------------------
-
-Usergrid 1.0.2
---------------------------------------------------------------------------------
-
--Usergrid 1.0.2
----------------------------------------------------------------------------------
--
Usergrid 1.0.2
--------------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/764a7c85/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
----------------------------------------------------------------------
diff --cc stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
index 0fb5149,b048327..b318065
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
@@@ -334,15 -313,13 +334,15 @@@ public class AssetResourceIT extends Ab
try {
- UserRepo.INSTANCE.load( resource(), access_token );
+ //UserRepo.INSTANCE.load( resource(), access_token );
- byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/cat-larger-than-6mb.jpg" ) );
+ byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/ship-larger-than-6mb.gif" ) );
FormDataMultiPart form = new FormDataMultiPart().field( "file", data, MediaType.MULTIPART_FORM_DATA_TYPE );
+ String orgAppPath = clientSetup.getOrganizationName() + "/" + clientSetup.getAppName();
+
// send data
- JsonNode node = resource().path( "/test-organization/test-app/bars" ).queryParam( "access_token", access_token )
+ JsonNode node = resource().path( orgAppPath + "/bars" ).queryParam( "access_token", access_token )
.accept( MediaType.APPLICATION_JSON ).type( MediaType.MULTIPART_FORM_DATA )
.post( JsonNode.class, form );
//logNode( node );
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/764a7c85/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
----------------------------------------------------------------------
diff --cc stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
index 75064a2,2c14da1..e175d01
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
@@@ -14,40 -14,51 +14,47 @@@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.usergrid.tools;
-
import com.google.common.collect.BiMap;
+ import com.google.common.collect.HashBiMap;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
+import org.apache.usergrid.corepersistence.util.CpNamingUtils;
- import org.apache.usergrid.persistence.ConnectionRef;
+ import org.apache.usergrid.management.UserInfo;
import org.apache.usergrid.persistence.Entity;
import org.apache.usergrid.persistence.EntityManager;
-import org.apache.usergrid.persistence.Query;
import org.apache.usergrid.persistence.Results;
--import org.apache.usergrid.persistence.Results.Level;
--import org.apache.usergrid.persistence.cassandra.CassandraService;
+import org.apache.usergrid.persistence.index.query.Query;
import org.apache.usergrid.utils.StringUtils;
import org.codehaus.jackson.JsonGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.UUID;
- import java.util.concurrent.BlockingQueue;
- import java.util.concurrent.LinkedBlockingQueue;
- import java.util.concurrent.TimeUnit;
+ import java.util.*;
+ import java.util.concurrent.*;
+ import java.util.concurrent.atomic.AtomicInteger;
-import static org.apache.usergrid.persistence.cassandra.CassandraService.MANAGEMENT_APPLICATION_ID;
-
/**
- * Export Admin Users and metadata including organizations.
+ * Export Admin Users and metadata including organizations and passwords.
+ *
+ * Usage Example:
- *
++ *
+ * java -Xmx8000m -Dlog4j.configuration=file:/home/me/log4j.properties -classpath . \
+ * -jar usergrid-tools-1.0.2.jar ImportAdmins -writeThreads 100 -auditThreads 100 \
+ * -host casshost -inputDir=/home/me/export-data
- *
++ *
+ * If you want to provide any property overrides, put properties file named usergrid-custom-tools.properties
+ * in the same directory where you run the above command. For example, you might want to set the Cassandra
+ * client threads and export from a specific set of keyspaces:
- *
+ *
- * java -jar usergrid-tools.jar ExportAdmins
+ * cassandra.connections=110
+ * cassandra.system.keyspace=My_Usergrid
+ * cassandra.application.keyspace=My_Usergrid_Applications
+ * cassandra.lock.keyspace=My_Usergrid_Locks
*/
public class ExportAdmins extends ExportingToolBase {
@@@ -55,9 -66,12 +62,12 @@@
public static final String ADMIN_USERS_PREFIX = "admin-users";
public static final String ADMIN_USER_METADATA_PREFIX = "admin-user-metadata";
private static final String READ_THREAD_COUNT = "readThreads";
+ private Map<String, List<Org>> orgMap = new HashMap<String, List<Org>>(80000);
private int readThreadCount;
-
+
+ AtomicInteger count = new AtomicInteger( 0 );
-
-
++
+
/**
* Represents an AdminUser that has been read and is ready for export.
*/
@@@ -69,8 -81,21 +77,21 @@@
BiMap<UUID, String> orgNamesByUuid;
}
-
+
/**
+ * Represents an organization associated with a user.
+ */
+ private class Org {
+ UUID orgId;
+ String orgName;
+ public Org( UUID orgId, String orgName ) {
+ this.orgId = orgId;
+ this.orgName = orgName;
+ }
+ }
+
+
+ /**
* Export admin users using multiple threads.
* <p/>
* How it works:
@@@ -100,6 -125,8 +121,8 @@@
readThreadCount = 20;
}
+ buildOrgMap();
-
++
// start write queue worker
BlockingQueue<AdminUserWriteTask> writeQueue = new LinkedBlockingQueue<AdminUserWriteTask>();
@@@ -124,8 -151,8 +147,8 @@@
Query query = new Query();
query.setLimit( MAX_ENTITY_FETCH );
-- query.setResultsLevel( Level.IDS );
-- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
++ query.setResultsLevel( Query.Level.IDS );
++ EntityManager em = emf.getEntityManager( CpNamingUtils.MANAGEMENT_APPLICATION_ID );
Results ids = em.searchCollection( em.getApplicationRef(), "users", query );
while (ids.size() > 0) {
@@@ -140,15 -167,16 +163,16 @@@
ids = em.searchCollection( em.getApplicationRef(), "users", query );
}
- adminUserWriter.setDone( true );
- for (AdminUserReader aur : readers) {
- aur.setDone( true );
- }
-
logger.debug( "Waiting for write thread to complete" );
- writeThread.join();
-
++
+ boolean done = false;
+ while ( !done ) {
+ writeThread.join( 10000, 0 );
+ done = !writeThread.isAlive();
+ logger.info( "Wrote {} users", count.get() );
+ }
}
-
+
@Override
@SuppressWarnings("static-access")
@@@ -164,9 -192,77 +188,77 @@@
}
- public class AdminUserReader implements Runnable {
+ /**
+ * Shouldn't have to do this but getOrganizationsForAdminUser() is not 100% reliable in some Usergrid installations.
+ */
+ private void buildOrgMap() throws Exception {
+
+ logger.info( "Building org map" );
+
+ ExecutorService execService = Executors.newFixedThreadPool( this.readThreadCount );
+
- EntityManager em = emf.getEntityManager( MANAGEMENT_APPLICATION_ID );
++ EntityManager em = emf.getEntityManager( CpNamingUtils.MANAGEMENT_APPLICATION_ID );
+ String queryString = "select *";
+ Query query = Query.fromQL( queryString );
+ query.withLimit( 1000 );
+ Results organizations = null;
+ int count = 0;
+ do {
+ organizations = em.searchCollection( em.getApplicationRef(), "groups", query );
+ for ( Entity organization : organizations.getEntities() ) {
+ execService.submit( new OrgMapWorker( organization ) );
+ }
+ count++;
+ if ( count % 1000 == 0 ) {
+ logger.info("Processed {} orgs for org map", count);
+ }
+ query.setCursor( organizations.getCursor() );
+ }
+ while ( organizations != null && organizations.hasCursor() );
+
+ execService.shutdown();
+ while ( !execService.awaitTermination( 10, TimeUnit.SECONDS ) ) {
+ logger.info("Processed {} orgs for map", orgMap.size() );
+ }
+ }
+
- private boolean done = true;
+ public class OrgMapWorker implements Runnable {
+ private final Entity orgEntity;
-
++
+ public OrgMapWorker( Entity orgEntity ) {
+ this.orgEntity = orgEntity;
+ }
-
++
+ @Override
+ public void run() {
+ try {
+ final String orgName = orgEntity.getProperty( "path" ).toString();
+ final UUID orgId = orgEntity.getUuid();
+ for (UserInfo user : managementService.getAdminUsersForOrganization( orgEntity.getUuid() )) {
+ try {
+ Entity admin = managementService.getAdminUserEntityByUuid( user.getUuid() );
+ List<Org> orgs = orgMap.get( admin.getProperty( "username" ) );
+ if (orgs == null) {
+ orgs = new ArrayList<Org>();
+ orgMap.put( admin.getProperty( "username" ).toString().toLowerCase(), orgs );
+ }
+ orgs.add( new Org( orgId, orgName ) );
+
+ //logger.debug("Added org {} for user {}", orgName, admin.getProperty( "username" ));
+
+ } catch (Exception e) {
+ logger.warn( "Cannot get orgs for userId {}", user.getUuid() );
+ }
+ }
+ } catch ( Exception e ) {
+ logger.error("Error getting users for org {}:{}", orgEntity.getName(), orgEntity.getUuid());
+ }
+ }
+ }
+
+
+ public class AdminUserReader implements Runnable {
private final BlockingQueue<UUID> readQueue;
private final BlockingQueue<AdminUserWriteTask> writeQueue;
@@@ -189,7 -285,7 +281,7 @@@
private void readAndQueueAdminUsers() throws Exception {
-- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
++ EntityManager em = emf.getEntityManager( CpNamingUtils.MANAGEMENT_APPLICATION_ID );
while ( true ) {
@@@ -221,11 -313,15 +309,15 @@@
}
- private void addCollectionsToTask(AdminUserWriteTask task, Entity entity) throws Exception {
+ private void addDictionariesToTask(AdminUserWriteTask task, Entity entity) throws Exception {
- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
-
++ EntityManager em = emf.getEntityManager( CpNamingUtils.MANAGEMENT_APPLICATION_ID );
++
+ task.dictionariesByName = new HashMap<String, Map<Object, Object>>();
+
+ Set<String> dictionaries = em.getDictionaries( entity );
-
+
- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
- Set<String> collections = em.getCollections( entity );
- if ((collections == null) || collections.isEmpty()) {
+ if ( dictionaries.isEmpty() ) {
+ logger.error("User {}:{} has no dictionaries", task.adminUser.getName(), task.adminUser.getUuid() );
return;
}
@@@ -251,50 -344,26 +340,26 @@@
}
}
+ private void addOrganizationsToTask(AdminUserWriteTask task) throws Exception {
- private void addDictionariesToTask(AdminUserWriteTask task, Entity entity) throws Exception {
- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
-
- Set<String> dictionaries = em.getDictionaries( entity );
-
- task.dictionariesByName = new HashMap<String, Map<Object, Object>>();
-
- for (String dictionary : dictionaries) {
- Map<Object, Object> dict = em.getDictionaryAsMap( entity, dictionary );
- task.dictionariesByName.put( dictionary, dict );
- }
- }
-
-
- private void addConnectionsToTask(AdminUserWriteTask task, Entity entity) throws Exception {
- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
-
- task.connectionsByType = new HashMap<String, List<ConnectionRef>>();
-
- Set<String> connectionTypes = em.getConnectionTypes( entity );
- for (String connectionType : connectionTypes) {
-
- List<ConnectionRef> connRefs = task.connectionsByType.get( connectionType );
- if ( connRefs == null ) {
- connRefs = new ArrayList<ConnectionRef>();
- }
+ task.orgNamesByUuid = managementService.getOrganizationsForAdminUser( task.adminUser.getUuid() );
- Results results = em.getConnectedEntities( entity.getUuid(), connectionType, null, Level.IDS );
- List<ConnectionRef> connections = results.getConnections();
+ List<Org> orgs = orgMap.get( task.adminUser.getProperty( "username" ).toString().toLowerCase() );
-
+
- for (ConnectionRef connectionRef : connections) {
- connRefs.add( connectionRef );
+ if ( orgs != null && task.orgNamesByUuid.size() < orgs.size() ) {
+ BiMap<UUID, String> bimap = HashBiMap.create();
+ for (Org org : orgs) {
+ bimap.put( org.orgId, org.orgName );
}
+ task.orgNamesByUuid = bimap;
}
- }
-
-
- private void addOrganizationsToTask(AdminUserWriteTask task, Entity entity) throws Exception {
- task.orgNamesByUuid = managementService.getOrganizationsForAdminUser( entity.getUuid() );
- }
-
+
- public void setDone(boolean done) {
- this.done = done;
+ if ( task.orgNamesByUuid.isEmpty() ) {
+ logger.error("{}:{}:{} has no orgs", new Object[] {
- task.adminUser.getProperty("username"),
- task.adminUser.getProperty("email"),
++ task.adminUser.getProperty("username"),
++ task.adminUser.getProperty("email"),
+ task.adminUser.getUuid() } );
+ }
}
}
@@@ -320,7 -387,7 +383,7 @@@
private void writeEntities() throws Exception {
-- EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
++ EntityManager em = emf.getEntityManager( CpNamingUtils.MANAGEMENT_APPLICATION_ID );
// write one JSON file for management application users
JsonGenerator usersFile =
@@@ -347,18 -412,20 +408,20 @@@
echo( task.adminUser );
// write metadata to metadata file
- saveCollections( metadataFile, task );
- saveConnections( metadataFile, task );
+ metadataFile.writeFieldName( task.adminUser.getUuid().toString() );
+ metadataFile.writeStartObject();
+
saveOrganizations( metadataFile, task );
- saveDictionaries( metadataFile, task );
+ saveDictionaries( metadataFile, task );
-
+
- logger.debug("Exported user {}", task.adminUser.getProperty( "email" ));
+ metadataFile.writeEndObject();
-
+
- count++;
- if ( count % 1000 == 0 ) {
- logger.info("Exported {} admin users", count);
- }
+ logger.debug( "Exported user {}:{}:{}", new Object[] {
+ task.adminUser.getProperty("username"),
+ task.adminUser.getProperty("email"),
+ task.adminUser.getUuid() } );
+ count.addAndGet( 1 );
} catch (InterruptedException e) {
throw new Exception("Interrupted", e);
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/764a7c85/stack/tools/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --cc stack/tools/src/main/resources/log4j.properties
index c288fec,6cf0a92..00834cf
--- a/stack/tools/src/main/resources/log4j.properties
+++ b/stack/tools/src/main/resources/log4j.properties
@@@ -26,25 -26,9 +26,25 @@@ log4j.appender.stdout=org.apache.log4j.
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p (%t) [%c] - %m%n
- <<<<<<< HEAD
+log4j.category.org.apache.usergrid.tools=TRACE
+log4j.category.org.apache.usergrid=ERROR
+
+log4j.logger.org.apache.usergrid.persistence.cassandra.DB=WARN, stdout
+log4j.logger.org.apache.usergrid.persistence.cassandra.BATCH=WARN, stdout
+log4j.logger.org.apache.usergrid.persistence.cassandra.EntityManagerFactoryImpl=WARN, stdout
+log4j.logger.org.apache.usergrid.persistence.cassandra.DaoUtils=WARN, stdout
+log4j.logger.org.apache.usergrid.persistence.cassandra.EntityManagerImpl=WARN, stdout
+log4j.logger.org.apache.usergrid.persistence.cassandra.ConnectionRefImpl=WARN, stdout
+log4j.logger.me.prettyprint.cassandra.hector.TimingLogger=WARN, stdout
+log4j.logger.org.apache.usergrid.rest.security.AllowAjaxFilter=WARN, stdout
+log4j.logger.me.prettyprint.hector.api.beans.AbstractComposite=ERROR, stdout
+#log4j.logger.org.apache.usergrid.locking.singlenode.SingleNodeLockManagerImpl=DEBUG, stdout
+#log4j.logger.org.apache.usergrid.persistence.hector.CountingMutator=INFO, stdout
- =======
- log4j.logger.org.apache.usergrid.tools=DEBUG
++
+log4j.logger.org.apache.usergrid.management.cassandra=DEBUB
+ log4j.logger.org.apache.usergrid.tools=INFO
+ log4j.logger.org.apache.usergrid.management.cassandra=WARN
log4j.logger.org.apache.usergrid.persistence.cassandra.DB=WARN
log4j.logger.org.apache.usergrid.persistence.cassandra.BATCH=WARN
log4j.logger.org.apache.usergrid.persistence.cassandra.EntityManagerFactoryImpl=WARN
[03/23] incubator-usergrid git commit: Add line about jQuery
Sparklines.
Posted by sn...@apache.org.
Add line about jQuery Sparklines.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/6746b59e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/6746b59e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/6746b59e
Branch: refs/heads/two-dot-o
Commit: 6746b59eb8d3e8bf5ee143a66defd3f80849a8a7
Parents: 5bdea9c
Author: Dave Johnson <dm...@apigee.com>
Authored: Fri Jun 26 12:46:32 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Fri Jun 26 12:46:32 2015 -0400
----------------------------------------------------------------------
LICENSE | 41 ++++++++++++++++++++++-------------------
1 file changed, 22 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/6746b59e/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
index dd22519..7eab63d 100644
--- a/LICENSE
+++ b/LICENSE
@@ -270,45 +270,48 @@ For the SSKeychain component:
Other components:
-----------------
-This product bundles SBJson, which is available under a "3-clause BSD" license.
-For details, see sdks/ios/UGAPI/SBJson/ .
-
-This product bundles SSKeychain, which is available under a "MIT/X11" license.
-For details, see sdks/ios/UGAPI/SSKeychain/.
+This product bundles angular.js
+Copyright(c) Google, Inc. Released under the MIT license.
This product bundles angular-scenario.js, part of jQuery JavaScript Library
which Includes Sizzle.js Copyright (c) jQuery Foundation, Inc. and others.
Released under the MIT license.
-This product bundles angular.js
-Copyright(c) Google, Inc. Released under the MIT license.
-
This product bundles Bootstrap Copyright (c) Twitter, Inc
Licensed under the MIT license.
-This product bundles jquery-ui
+The product bundles Intro.js (MIT licensed)
+Copyright (c) usabli.ca - A weekend project by Afshin Mehrabani (@afshinmeh)
+
+This product bundles jQuery
Licensed under MIT license.
-This product bundles jquery
+This product bundles jQuery-UI
Licensed under MIT license.
-This product bundles mocha.
+This product bundles jQuery Sparklines (New BSD License)
+Copyright (c) Splunk Inc.
+
+This product bundles Mocha.
All rights reserved. Licensed under MIT.
Copyright (c) TJ Holowaychuk <tj...@vision-media.ca>
-This product bundles SSToolkit.
-Copyright (c) Sam Soffes. All rights reserved.
-These files can be located within the /sdks/ios package.
-
-The product bundles Intro.js (MIT licensed)
-Copyright (c) usabli.ca - A weekend project by Afshin Mehrabani (@afshinmeh)
+This product bundles NewtonSoft.Json under MIT license
This product bundles NPM MD5 (BSD-3 licensed)
Copyright (c) Paul Vorbach and Copyright (C), Jeff Mott.
-This product bundles NewtonSoft.Json under MIT license
-
This product bundles NSubsttute under BSD license
+This product bundles SBJson, which is available under a "3-clause BSD" license.
+For details, see sdks/ios/UGAPI/SBJson/ .
+
This product bundles Sphinx under BSD license
+This product bundles SSKeychain, which is available under a "MIT/X11" license.
+For details, see sdks/ios/UGAPI/SSKeychain/.
+
+This product bundles SSToolkit.
+Copyright (c) Sam Soffes. All rights reserved.
+These files can be located within the /sdks/ios package.
+
[06/23] incubator-usergrid git commit: Preparing for 1.0.2 RC3
Posted by sn...@apache.org.
Preparing for 1.0.2 RC3
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/ef545b0d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/ef545b0d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/ef545b0d
Branch: refs/heads/two-dot-o
Commit: ef545b0d1c8ad4a24e3a67c4bd26e69bfa299474
Parents: 32f2882
Author: Dave Johnson <sn...@apache.org>
Authored: Fri Jun 26 14:29:46 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Fri Jun 26 14:29:46 2015 -0400
----------------------------------------------------------------------
.usergridversion | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ef545b0d/.usergridversion
----------------------------------------------------------------------
diff --git a/.usergridversion b/.usergridversion
index 99eda91..276823b 100644
--- a/.usergridversion
+++ b/.usergridversion
@@ -1 +1 @@
-1.0.3-SNAPSHOT
+1.0.2-SNAPSHOT
[20/23] incubator-usergrid git commit: Log total counts
Posted by sn...@apache.org.
Log total counts
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/75ad454c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/75ad454c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/75ad454c
Branch: refs/heads/two-dot-o
Commit: 75ad454cf23bff8dd5ad8dc84563cc1a5520db7f
Parents: b9af09e
Author: Dave Johnson <sn...@apache.org>
Authored: Thu Jul 9 15:19:34 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Thu Jul 9 15:19:34 2015 -0400
----------------------------------------------------------------------
.../java/org/apache/usergrid/tools/ImportAdmins.java | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/75ad454c/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
index 4bcdc0b..0b69a98 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
@@ -625,13 +625,13 @@ public class ImportAdmins extends ToolBase {
long stopTime = System.currentTimeMillis();
long duration = stopTime - startTime;
durationSum += duration;
+ metadataCount.getAndIncrement();
count++;
-
- //logger.debug( "Imported {}th metadata", count );
if ( count % 30 == 0 ) {
- logger.info( "Imported {} metadata of total {}. Average metadata Imported Rate: {}(ms)",
- new Object[] { count, metadataCount.get(), durationSum / count });
+ logger.info( "Imported {} metadata of total {} expected. " +
+ "Average metadata Imported Rate: {}(ms)",
+ new Object[] { metadataCount.get(), userCount.get(), durationSum / count });
}
} catch (Exception e) {
@@ -694,7 +694,7 @@ public class ImportAdmins extends ToolBase {
logger.debug( "Imported admin user {} / {}",
new Object[] { uuid, entityProps.get( "username" ) } );
- userCount.addAndGet( 1 );
+ userCount.getAndIncrement();
auditQueue.put(entityProps);
long stopTime = System.currentTimeMillis();
long duration = stopTime - startTime;
@@ -702,7 +702,8 @@ public class ImportAdmins extends ToolBase {
count++;
if (count % 30 == 0) {
- logger.info( "Imported {} admin users of total {}. Average Creation Rate: {}ms",
+ logger.info( "This worked has imported {} users of total {} imported so far. " +
+ "Average Creation Rate: {}ms",
new Object[] { count, userCount.get(), durationSum / count });
}
[11/23] incubator-usergrid git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/incubator-usergrid
Posted by sn...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/67d3322d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/67d3322d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/67d3322d
Branch: refs/heads/two-dot-o
Commit: 67d3322d3fbde7cb5d648b724e8acc6f217a5733
Parents: 655392e 77925e7
Author: Dave Johnson <sn...@apache.org>
Authored: Wed Jul 1 08:31:28 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Wed Jul 1 08:31:28 2015 -0400
----------------------------------------------------------------------
.usergridversion | 2 +-
CHANGELOG | 3 +++
stack/rest/pom.xml | 11 ++++++++++-
3 files changed, 14 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
[15/23] incubator-usergrid git commit: Incrementing snapshot version
to 1.0.3-SNAPSHOT.
Posted by sn...@apache.org.
Incrementing snapshot version to 1.0.3-SNAPSHOT.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/ab149aea
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/ab149aea
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/ab149aea
Branch: refs/heads/two-dot-o
Commit: ab149aea1e3c2b1c505f2c1acf41b99684a992dc
Parents: 5167328
Author: Dave Johnson <sn...@gmail.com>
Authored: Mon Jul 6 09:03:52 2015 -0400
Committer: Dave Johnson <sn...@gmail.com>
Committed: Mon Jul 6 09:03:52 2015 -0400
----------------------------------------------------------------------
.usergridversion | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab149aea/.usergridversion
----------------------------------------------------------------------
diff --git a/.usergridversion b/.usergridversion
index 276823b..99eda91 100644
--- a/.usergridversion
+++ b/.usergridversion
@@ -1 +1 @@
-1.0.2-SNAPSHOT
+1.0.3-SNAPSHOT
[17/23] incubator-usergrid git commit: Print out additional user
information: orgs and dictionaries.
Posted by sn...@apache.org.
Print out additional user information: orgs and dictionaries.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/7a951094
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/7a951094
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/7a951094
Branch: refs/heads/two-dot-o
Commit: 7a951094afdcea4180f7a6e4a96677ef2cf11689
Parents: 59ea6e5
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Jul 6 19:20:15 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Jul 6 19:20:15 2015 -0400
----------------------------------------------------------------------
.../org/apache/usergrid/tools/UserManager.java | 22 ++++++++++++++++++++
1 file changed, 22 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/7a951094/stack/tools/src/main/java/org/apache/usergrid/tools/UserManager.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/UserManager.java b/stack/tools/src/main/java/org/apache/usergrid/tools/UserManager.java
index 0194037..3b5383d 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/UserManager.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/UserManager.java
@@ -17,10 +17,19 @@
package org.apache.usergrid.tools;
+import com.google.common.collect.BiMap;
import org.apache.usergrid.management.UserInfo;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
+import org.apache.usergrid.persistence.EntityManager;
+import org.apache.usergrid.persistence.cassandra.CassandraService;
+import org.apache.usergrid.persistence.entities.User;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
import static org.apache.usergrid.utils.JsonUtils.mapToFormattedJsonString;
@@ -48,8 +57,21 @@ public class UserManager extends ToolBase {
return;
}
+ logger.info("--- User information:");
logger.info( mapToFormattedJsonString( userInfo ) );
+ logger.info("--- User organizations:");
+ final BiMap<UUID, String> orgs = managementService.getOrganizationsForAdminUser( userInfo.getUuid() );
+ logger.info( mapToFormattedJsonString( orgs ) );
+
+ logger.info("--- User dictionaries:");
+ EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
+ User user = em.get( userInfo.getUuid(), User.class );
+ Set<String> dictionaries = em.getDictionaries( user );
+ for (String dictionary : dictionaries) {
+ Map<Object, Object> dict = em.getDictionaryAsMap( user, dictionary );
+ logger.info( dictionary + " : " + mapToFormattedJsonString( dict ) );
+ }
if ( line.hasOption( "p" ) ) {
String password = line.getOptionValue( "p" );
[21/23] incubator-usergrid git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/incubator-usergrid
Posted by sn...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/9c459f4e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/9c459f4e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/9c459f4e
Branch: refs/heads/two-dot-o
Commit: 9c459f4e82daf29e908ccb38a8e0b09eff3be2f0
Parents: 75ad454 648b599
Author: Dave Johnson <sn...@apache.org>
Authored: Wed Jul 15 13:56:50 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Wed Jul 15 13:56:50 2015 -0400
----------------------------------------------------------------------
----------------------------------------------------------------------
[13/23] incubator-usergrid git commit: Preparing for another release
candidate.
Posted by sn...@apache.org.
Preparing for another release candidate.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/26d02d3a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/26d02d3a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/26d02d3a
Branch: refs/heads/two-dot-o
Commit: 26d02d3af9b9e165bd5571297f14d9a09a2e36cf
Parents: 70c8afb
Author: Dave Johnson <sn...@gmail.com>
Authored: Fri Jul 3 09:33:00 2015 -0400
Committer: Dave Johnson <sn...@gmail.com>
Committed: Fri Jul 3 09:33:00 2015 -0400
----------------------------------------------------------------------
.usergridversion | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/26d02d3a/.usergridversion
----------------------------------------------------------------------
diff --git a/.usergridversion b/.usergridversion
index 99eda91..276823b 100644
--- a/.usergridversion
+++ b/.usergridversion
@@ -1 +1 @@
-1.0.3-SNAPSHOT
+1.0.2-SNAPSHOT
[14/23] incubator-usergrid git commit: Updating CHANGELOG for 1.0.2
release.
Posted by sn...@apache.org.
Updating CHANGELOG for 1.0.2 release.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/5167328e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/5167328e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/5167328e
Branch: refs/heads/two-dot-o
Commit: 5167328e85ec24902b578ac82a41f4526d01d47d
Parents: 26d02d3
Author: Dave Johnson <sn...@gmail.com>
Authored: Mon Jul 6 09:03:52 2015 -0400
Committer: Dave Johnson <sn...@gmail.com>
Committed: Mon Jul 6 09:03:52 2015 -0400
----------------------------------------------------------------------
CHANGELOG | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5167328e/CHANGELOG
----------------------------------------------------------------------
diff --git a/CHANGELOG b/CHANGELOG
index 5ad0b68..5e692fc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -7,6 +7,9 @@ Usergrid 1.0.2
Usergrid 1.0.2
--------------------------------------------------------------------------------
+Usergrid 1.0.2
+--------------------------------------------------------------------------------
+
Usergrid 1.0.2
--------------------------------------------------------------------------------
[19/23] incubator-usergrid git commit: 1. only export credentials
dictionary because it is all we need for admins,
2. use em.get() instead of em.getRef() because it is more reliably.
Posted by sn...@apache.org.
1. only export credentials dictionary because it is all we need for admins, 2. use em.get() instead of em.getRef() because it is more reliably.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/648b5997
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/648b5997
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/648b5997
Branch: refs/heads/two-dot-o
Commit: 648b5997ec5d9be5e3b916418ae54f24c4fe0f69
Parents: b9af09e
Author: Dave Johnson <sn...@apache.org>
Authored: Wed Jul 8 08:01:44 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Wed Jul 8 08:01:44 2015 -0400
----------------------------------------------------------------------
.../org/apache/usergrid/tools/ExportAdmins.java | 37 ++++++++------------
.../org/apache/usergrid/tools/ImportAdmins.java | 5 +--
2 files changed, 17 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/648b5997/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
index d726ad3..2c14da1 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
@@ -315,42 +315,33 @@ public class ExportAdmins extends ExportingToolBase {
private void addDictionariesToTask(AdminUserWriteTask task, Entity entity) throws Exception {
EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
+
+ task.dictionariesByName = new HashMap<String, Map<Object, Object>>();
Set<String> dictionaries = em.getDictionaries( entity );
if ( dictionaries.isEmpty() ) {
logger.error("User {}:{} has no dictionaries", task.adminUser.getName(), task.adminUser.getUuid() );
+ return;
}
- task.dictionariesByName = new HashMap<String, Map<Object, Object>>();
+ Map<Object, Object> credentialsDictionary = em.getDictionaryAsMap( entity, "credentials" );
- for (String dictionary : dictionaries) {
- Map<Object, Object> dict = em.getDictionaryAsMap( entity, dictionary );
- if ( dict.isEmpty() ) {
- continue;
- }
- task.dictionariesByName.put( dictionary, dict );
- }
-
- if ( task.dictionariesByName.isEmpty() ) {
- logger.error( "User {}:{} has no dictionaries",
- new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
-
- } else if ( task.dictionariesByName.get("credentials") == null ) {
- logger.error( "User {}:{} has no credentials dictionary",
- new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
-
- } else {
- if ( task.dictionariesByName.get("credentials").get("password") == null ) {
+ if ( credentialsDictionary != null && !credentialsDictionary.isEmpty() ) {
+ task.dictionariesByName.put( "credentials", credentialsDictionary );
+
+ if (credentialsDictionary.get( "password" ) == null) {
logger.error( "User {}:{} has no password in credential dictionary",
- new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid()} );
}
- if ( task.dictionariesByName.get("credentials").get("secret") == null ) {
+ if (credentialsDictionary.get( "secret" ) == null) {
logger.error( "User {}:{} has no secret in credential dictionary",
- new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid()} );
}
+ } else {
+ logger.error( "User {}:{} has no or empty credentials dictionary",
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid()} );
}
-
}
private void addOrganizationsToTask(AdminUserWriteTask task) throws Exception {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/648b5997/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
index 4bcdc0b..d565f71 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
@@ -382,7 +382,7 @@ public class ImportAdmins extends ToolBase {
String entityOwnerId = jp.getCurrentName();
try {
- EntityRef entityRef = em.getRef( UUID.fromString( entityOwnerId ) );
+ EntityRef entityRef = em.get( UUID.fromString( entityOwnerId ) );
Map<String, Object> metadata = (Map<String, Object>) jp.readValueAs( Map.class );
workQueue.put( new ImportMetadataTask( entityRef, metadata ) );
@@ -414,7 +414,8 @@ public class ImportAdmins extends ToolBase {
User user = em.get(entityRef, User.class);
if (user == null) {
- logger.error("User with uuid={} not found, not adding to organizations");
+ logger.error("User not found, not adding to organizations: "
+ + (entityRef == null ? null : entityRef.getUuid()));
} else {
[09/23] incubator-usergrid git commit: Introduce a version number in
the WAR file name for USERGRID-758
Posted by sn...@apache.org.
Introduce a version number in the WAR file name for USERGRID-758
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/77925e76
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/77925e76
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/77925e76
Branch: refs/heads/two-dot-o
Commit: 77925e76bc38ba42aff786d55575fccad3526160
Parents: f5cc970
Author: Dave Johnson <sn...@gmail.com>
Authored: Mon Jun 29 09:54:52 2015 -0400
Committer: Dave Johnson <sn...@gmail.com>
Committed: Mon Jun 29 09:54:52 2015 -0400
----------------------------------------------------------------------
stack/rest/pom.xml | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/77925e76/stack/rest/pom.xml
----------------------------------------------------------------------
diff --git a/stack/rest/pom.xml b/stack/rest/pom.xml
index 6d404cf..224f8b6 100644
--- a/stack/rest/pom.xml
+++ b/stack/rest/pom.xml
@@ -285,7 +285,16 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
- <version>2.3</version>
+ <version>2.5</version>
+ <configuration>
+ <archive>
+ <manifestEntries>
+ <Usergrid-Version>$
+ {project.version}
+ </Usergrid-Version>
+ </manifestEntries>
+ </archive>
+ </configuration>
</plugin>
<plugin>
[22/23] incubator-usergrid git commit: Better checks for missing
creds.
Posted by sn...@apache.org.
Better checks for missing creds.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/e1b352ef
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/e1b352ef
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/e1b352ef
Branch: refs/heads/two-dot-o
Commit: e1b352ef96da0ff687be87092c35eb3067592ee4
Parents: 9c459f4
Author: Dave Johnson <sn...@apache.org>
Authored: Wed Jul 15 13:57:40 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Wed Jul 15 13:57:40 2015 -0400
----------------------------------------------------------------------
.../org/apache/usergrid/tools/ExportAdmins.java | 37 ++++++++------------
.../org/apache/usergrid/tools/ImportAdmins.java | 5 +--
2 files changed, 17 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/e1b352ef/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
index d726ad3..2c14da1 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
@@ -315,42 +315,33 @@ public class ExportAdmins extends ExportingToolBase {
private void addDictionariesToTask(AdminUserWriteTask task, Entity entity) throws Exception {
EntityManager em = emf.getEntityManager( CassandraService.MANAGEMENT_APPLICATION_ID );
+
+ task.dictionariesByName = new HashMap<String, Map<Object, Object>>();
Set<String> dictionaries = em.getDictionaries( entity );
if ( dictionaries.isEmpty() ) {
logger.error("User {}:{} has no dictionaries", task.adminUser.getName(), task.adminUser.getUuid() );
+ return;
}
- task.dictionariesByName = new HashMap<String, Map<Object, Object>>();
+ Map<Object, Object> credentialsDictionary = em.getDictionaryAsMap( entity, "credentials" );
- for (String dictionary : dictionaries) {
- Map<Object, Object> dict = em.getDictionaryAsMap( entity, dictionary );
- if ( dict.isEmpty() ) {
- continue;
- }
- task.dictionariesByName.put( dictionary, dict );
- }
-
- if ( task.dictionariesByName.isEmpty() ) {
- logger.error( "User {}:{} has no dictionaries",
- new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
-
- } else if ( task.dictionariesByName.get("credentials") == null ) {
- logger.error( "User {}:{} has no credentials dictionary",
- new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
-
- } else {
- if ( task.dictionariesByName.get("credentials").get("password") == null ) {
+ if ( credentialsDictionary != null && !credentialsDictionary.isEmpty() ) {
+ task.dictionariesByName.put( "credentials", credentialsDictionary );
+
+ if (credentialsDictionary.get( "password" ) == null) {
logger.error( "User {}:{} has no password in credential dictionary",
- new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid()} );
}
- if ( task.dictionariesByName.get("credentials").get("secret") == null ) {
+ if (credentialsDictionary.get( "secret" ) == null) {
logger.error( "User {}:{} has no secret in credential dictionary",
- new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid()} );
}
+ } else {
+ logger.error( "User {}:{} has no or empty credentials dictionary",
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid()} );
}
-
}
private void addOrganizationsToTask(AdminUserWriteTask task) throws Exception {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/e1b352ef/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
index 0b69a98..0b693c8 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
@@ -382,7 +382,7 @@ public class ImportAdmins extends ToolBase {
String entityOwnerId = jp.getCurrentName();
try {
- EntityRef entityRef = em.getRef( UUID.fromString( entityOwnerId ) );
+ EntityRef entityRef = em.get( UUID.fromString( entityOwnerId ) );
Map<String, Object> metadata = (Map<String, Object>) jp.readValueAs( Map.class );
workQueue.put( new ImportMetadataTask( entityRef, metadata ) );
@@ -414,7 +414,8 @@ public class ImportAdmins extends ToolBase {
User user = em.get(entityRef, User.class);
if (user == null) {
- logger.error("User with uuid={} not found, not adding to organizations");
+ logger.error("User not found, not adding to organizations: "
+ + (entityRef == null ? null : entityRef.getUuid()));
} else {
[10/23] incubator-usergrid git commit: Don't need to update change
log or base Usergrid version number on creation of each release candidate.
Posted by sn...@apache.org.
Don't need to update change log or base Usergrid version number on creation of each release candidate.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/655392e8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/655392e8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/655392e8
Branch: refs/heads/two-dot-o
Commit: 655392e84b3b3ad35b6c47700dc24996cda3dfd6
Parents: ef545b0
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Jun 29 10:18:30 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Jun 29 10:18:30 2015 -0400
----------------------------------------------------------------------
release/release-candidate.sh | 10 ----------
1 file changed, 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/655392e8/release/release-candidate.sh
----------------------------------------------------------------------
diff --git a/release/release-candidate.sh b/release/release-candidate.sh
index 9b42bdf..0e46f88 100755
--- a/release/release-candidate.sh
+++ b/release/release-candidate.sh
@@ -164,19 +164,9 @@ fi
# This should be a clean repo we are working against. Run clean just to ensure it is.
git clean -fdxq
-echo "Generating changelog"
-${base_dir}/release/changelog.rb $current_version
-git add CHANGELOG
-git commit -m "Updating CHANGELOG for ${current_version} release."
-
echo "Creating ${current_version_tag} branch"
git branch $current_version_tag $(git rev-parse HEAD)
-echo "Committing updated .usergridversion on master"
-echo $new_snapshot_version > .usergridversion
-git add .usergridversion
-git commit -m "Incrementing snapshot version to ${new_snapshot_version}."
-
# Build the source distribution from the new branch
echo "Checking out ${current_version_tag} branch and updating .usergridversion"
git checkout $current_version_tag
[16/23] incubator-usergrid git commit: Login to ensure that export
and import wait until all data is exported or imported before existing.
Posted by sn...@apache.org.
Login to ensure that export and import wait until all data is exported or imported before existing.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/59ea6e54
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/59ea6e54
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/59ea6e54
Branch: refs/heads/two-dot-o
Commit: 59ea6e54fd48d069843cc8ceccd48cf93b0cb2a3
Parents: 67d3322
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Jul 6 19:19:31 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Jul 6 19:19:31 2015 -0400
----------------------------------------------------------------------
.../org/apache/usergrid/tools/ExportAdmins.java | 48 +++++++++++---------
.../org/apache/usergrid/tools/ImportAdmins.java | 44 ++++++++++++------
2 files changed, 56 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/59ea6e54/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
index d3d6371..d726ad3 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
@@ -167,11 +167,6 @@ public class ExportAdmins extends ExportingToolBase {
ids = em.searchCollection( em.getApplicationRef(), "users", query );
}
- adminUserWriter.setDone( true );
- for (AdminUserReader aur : readers) {
- aur.setDone( true );
- }
-
logger.debug( "Waiting for write thread to complete" );
boolean done = false;
@@ -202,7 +197,7 @@ public class ExportAdmins extends ExportingToolBase {
*/
private void buildOrgMap() throws Exception {
- logger.info("Building org map");
+ logger.info( "Building org map" );
ExecutorService execService = Executors.newFixedThreadPool( this.readThreadCount );
@@ -269,8 +264,6 @@ public class ExportAdmins extends ExportingToolBase {
public class AdminUserReader implements Runnable {
- private boolean done = true;
-
private final BlockingQueue<UUID> readQueue;
private final BlockingQueue<AdminUserWriteTask> writeQueue;
@@ -299,9 +292,7 @@ public class ExportAdmins extends ExportingToolBase {
UUID uuid = null;
try {
uuid = readQueue.poll( 30, TimeUnit.SECONDS );
- //logger.debug("Got item from entityId queue: " + uuid );
-
- if ( uuid == null && done ) {
+ if ( uuid == null ) {
break;
}
@@ -335,8 +326,31 @@ public class ExportAdmins extends ExportingToolBase {
for (String dictionary : dictionaries) {
Map<Object, Object> dict = em.getDictionaryAsMap( entity, dictionary );
+ if ( dict.isEmpty() ) {
+ continue;
+ }
task.dictionariesByName.put( dictionary, dict );
}
+
+ if ( task.dictionariesByName.isEmpty() ) {
+ logger.error( "User {}:{} has no dictionaries",
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
+
+ } else if ( task.dictionariesByName.get("credentials") == null ) {
+ logger.error( "User {}:{} has no credentials dictionary",
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
+
+ } else {
+ if ( task.dictionariesByName.get("credentials").get("password") == null ) {
+ logger.error( "User {}:{} has no password in credential dictionary",
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
+ }
+ if ( task.dictionariesByName.get("credentials").get("secret") == null ) {
+ logger.error( "User {}:{} has no secret in credential dictionary",
+ new Object[]{task.adminUser.getName(), task.adminUser.getUuid() } );
+ }
+ }
+
}
private void addOrganizationsToTask(AdminUserWriteTask task) throws Exception {
@@ -360,16 +374,10 @@ public class ExportAdmins extends ExportingToolBase {
task.adminUser.getUuid() } );
}
}
-
- public void setDone(boolean done) {
- this.done = done;
- }
}
class AdminUserWriter implements Runnable {
- private boolean done = false;
-
private final BlockingQueue<AdminUserWriteTask> taskQueue;
public AdminUserWriter( BlockingQueue<AdminUserWriteTask> taskQueue ) {
@@ -404,7 +412,7 @@ public class ExportAdmins extends ExportingToolBase {
try {
AdminUserWriteTask task = taskQueue.poll( 30, TimeUnit.SECONDS );
- if ( task == null && done ) {
+ if ( task == null ) {
break;
}
@@ -494,10 +502,6 @@ public class ExportAdmins extends ExportingToolBase {
jg.writeEndArray();
}
-
- public void setDone(boolean done) {
- this.done = done;
- }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/59ea6e54/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
index 39384e6..4bcdc0b 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
@@ -90,6 +90,11 @@ public class ImportAdmins extends ToolBase {
AtomicInteger userCount = new AtomicInteger( 0 );
AtomicInteger metadataCount = new AtomicInteger( 0 );
+ AtomicInteger writeEmptyCount = new AtomicInteger( 0 );
+ AtomicInteger auditEmptyCount = new AtomicInteger( 0 );
+ AtomicInteger metadataEmptyCount = new AtomicInteger( 0 );
+
+
@Override
@SuppressWarnings("static-access")
@@ -146,7 +151,7 @@ public class ImportAdmins extends ToolBase {
writeThreadCount = Integer.parseInt( line.getOptionValue(WRITE_THREAD_COUNT));
}
- importAdminUsers(writeThreadCount, auditThreadCount);
+ importAdminUsers( writeThreadCount, auditThreadCount );
importMetadata( writeThreadCount );
}
@@ -159,7 +164,7 @@ public class ImportAdmins extends ToolBase {
String[] fileNames = importDir.list(new PrefixFileFilter(ExportAdmins.ADMIN_USERS_PREFIX + "."));
- logger.info("Applications to read: " + fileNames.length);
+ logger.info( "Applications to read: " + fileNames.length );
for (String fileName : fileNames) {
try {
@@ -210,8 +215,8 @@ public class ImportAdmins extends ToolBase {
workQueue.add( entityProps );
}
- waitForQueueAndMeasure(workQueue, adminWriteThreads, "Admin Write");
- waitForQueueAndMeasure(auditQueue, adminAuditThreads, "Admin Audit");
+ waitForQueueAndMeasure(workQueue, writeEmptyCount, adminWriteThreads, "Admin Write");
+ waitForQueueAndMeasure(auditQueue, auditEmptyCount, adminAuditThreads, "Admin Audit");
logger.info("----- End: Imported {} admin users from file {}",
count, adminUsersFile.getAbsolutePath());
@@ -220,12 +225,13 @@ public class ImportAdmins extends ToolBase {
}
private static void waitForQueueAndMeasure(final BlockingQueue workQueue,
+ final AtomicInteger emptyCounter,
final Map<Stoppable, Thread> threadMap,
final String identifier) throws InterruptedException {
double rateAverageSum = 0;
int iterations = 0;
- while (!workQueue.isEmpty()) {
+ while ( emptyCounter.get() < threadMap.size() ) {
iterations += 1;
int sizeLast = workQueue.size();
@@ -312,8 +318,8 @@ public class ImportAdmins extends ToolBase {
private void importMetadata(int writeThreadCount) throws Exception {
String[] fileNames = importDir.list(
- new PrefixFileFilter(ExportAdmins.ADMIN_USER_METADATA_PREFIX + "."));
- logger.info("Metadata files to read: " + fileNames.length);
+ new PrefixFileFilter( ExportAdmins.ADMIN_USER_METADATA_PREFIX + "." ) );
+ logger.info( "Metadata files to read: " + fileNames.length );
for (String fileName : fileNames) {
try {
@@ -373,17 +379,22 @@ public class ImportAdmins extends ToolBase {
if (jsonToken.equals(JsonToken.FIELD_NAME) && depth == 2) {
jp.nextToken();
-
String entityOwnerId = jp.getCurrentName();
- EntityRef entityRef = em.getRef(UUID.fromString(entityOwnerId));
- Map<String, Object> metadata = (Map<String, Object>) jp.readValueAs(Map.class);
-
- workQueue.put(new ImportMetadataTask(entityRef, metadata));
+ try {
+ EntityRef entityRef = em.getRef( UUID.fromString( entityOwnerId ) );
+ Map<String, Object> metadata = (Map<String, Object>) jp.readValueAs( Map.class );
+
+ workQueue.put( new ImportMetadataTask( entityRef, metadata ) );
+ logger.debug( "Put user {} in metadata queue", entityRef.getUuid() );
+
+ } catch ( Exception e ) {
+ logger.debug( "Error with user {}, not putting in metadata queue", entityOwnerId );
+ }
}
}
- waitForQueueAndMeasure(workQueue, metadataWorkerThreadMap, "Metadata Load");
+ waitForQueueAndMeasure(workQueue, metadataEmptyCount, metadataWorkerThreadMap, "Metadata Load");
logger.info("----- End of metadata -----");
jp.close();
@@ -523,9 +534,11 @@ public class ImportAdmins extends ToolBase {
if (entityProps == null) {
logger.warn("Reading from AUDIT queue was null!");
+ auditEmptyCount.getAndIncrement();
Thread.sleep(1000);
continue;
}
+ auditEmptyCount.set(0);
count++;
long startTime = System.currentTimeMillis();
@@ -599,15 +612,16 @@ public class ImportAdmins extends ToolBase {
if (task == null) {
logger.warn("Reading from metadata queue was null!");
+ metadataEmptyCount.getAndIncrement();
Thread.sleep(1000);
continue;
}
+ metadataEmptyCount.set(0);
long startTime = System.currentTimeMillis();
importEntityMetadata(em, task.entityRef, task.metadata);
- metadataCount.addAndGet( 1 );
long stopTime = System.currentTimeMillis();
long duration = stopTime - startTime;
durationSum += duration;
@@ -662,9 +676,11 @@ public class ImportAdmins extends ToolBase {
if (entityProps == null) {
logger.warn("Reading from admin import queue was null!");
+ writeEmptyCount.getAndIncrement();
Thread.sleep( 1000 );
continue;
}
+ writeEmptyCount.set(0);
// Import/create the entity
UUID uuid = getId(entityProps);
[08/23] incubator-usergrid git commit: Updating CHANGELOG for 1.0.2
release.
Posted by sn...@apache.org.
Updating CHANGELOG for 1.0.2 release.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/d52427b2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/d52427b2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/d52427b2
Branch: refs/heads/two-dot-o
Commit: d52427b279306e19c163e89e9d5025760fc0b50a
Parents: ef545b0
Author: Dave Johnson <dm...@apigee.com>
Authored: Fri Jun 26 14:32:35 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Fri Jun 26 14:32:35 2015 -0400
----------------------------------------------------------------------
CHANGELOG | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d52427b2/CHANGELOG
----------------------------------------------------------------------
diff --git a/CHANGELOG b/CHANGELOG
index 11f113a..5ad0b68 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,9 @@ Usergrid 1.0.2
Usergrid 1.0.2
--------------------------------------------------------------------------------
+Usergrid 1.0.2
+--------------------------------------------------------------------------------
+
Usergrid 1.0.2
--------------------------------------------------------------------------------
[04/23] incubator-usergrid git commit: Add year.
Posted by sn...@apache.org.
Add year.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/ff63e091
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/ff63e091
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/ff63e091
Branch: refs/heads/two-dot-o
Commit: ff63e09121d0de9745d020925d7c8b4b934e8ec4
Parents: 6746b59
Author: Dave Johnson <dm...@apigee.com>
Authored: Fri Jun 26 12:46:43 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Fri Jun 26 12:46:43 2015 -0400
----------------------------------------------------------------------
NOTICE | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ff63e091/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
index ef5af71..b080415 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,6 +1,5 @@
Apache Usergrid (incubating)
-Copyright (c) The Apache Software Foundation.
+Copyright 2015 The Apache Software Foundation.
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
-
[12/23] incubator-usergrid git commit: Add missing license
information and switch out cat photo for battleship photo obtained from
Wikipedia.
Posted by sn...@apache.org.
Add missing license information and switch out cat photo for battleship photo obtained from Wikipedia.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/70c8afb4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/70c8afb4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/70c8afb4
Branch: refs/heads/two-dot-o
Commit: 70c8afb42b6cc4e5d75849e1dfe771853f7d6f4b
Parents: 77925e7
Author: Dave Johnson <sn...@gmail.com>
Authored: Fri Jul 3 09:30:54 2015 -0400
Committer: Dave Johnson <sn...@gmail.com>
Committed: Fri Jul 3 09:30:54 2015 -0400
----------------------------------------------------------------------
LICENSE | 10 +
stack/LICENSE-2.0.txt | 202 -------------------
.../applications/assets/AssetResourceIT.java | 2 +-
.../src/test/resources/cat-larger-than-6mb.jpg | Bin 9799257 -> 0 bytes
.../src/test/resources/ship-larger-than-6mb.gif | Bin 0 -> 7407487 bytes
5 files changed, 11 insertions(+), 203 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/70c8afb4/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
index 7eab63d..a4b9abe 100644
--- a/LICENSE
+++ b/LICENSE
@@ -315,3 +315,13 @@ This product bundles SSToolkit.
Copyright (c) Sam Soffes. All rights reserved.
These files can be located within the /sdks/ios package.
+This product bundles Entypo, CC by SA license
+
+This product bundles date.min.js, MIT license
+
+This product bundles jquery.ui.timepicker.min.js, MIT license
+
+This product bundles blanket_mocha.min.js, MIT license
+
+This product bundles FontAwesome, SIL Open Font License
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/70c8afb4/stack/LICENSE-2.0.txt
----------------------------------------------------------------------
diff --git a/stack/LICENSE-2.0.txt b/stack/LICENSE-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/stack/LICENSE-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/70c8afb4/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
index 10e9703..b048327 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/assets/AssetResourceIT.java
@@ -315,7 +315,7 @@ public class AssetResourceIT extends AbstractRestIT {
UserRepo.INSTANCE.load( resource(), access_token );
- byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/cat-larger-than-6mb.jpg" ) );
+ byte[] data = IOUtils.toByteArray( this.getClass().getResourceAsStream( "/ship-larger-than-6mb.gif" ) );
FormDataMultiPart form = new FormDataMultiPart().field( "file", data, MediaType.MULTIPART_FORM_DATA_TYPE );
// send data
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/70c8afb4/stack/rest/src/test/resources/cat-larger-than-6mb.jpg
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/resources/cat-larger-than-6mb.jpg b/stack/rest/src/test/resources/cat-larger-than-6mb.jpg
deleted file mode 100644
index d45435a..0000000
Binary files a/stack/rest/src/test/resources/cat-larger-than-6mb.jpg and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/70c8afb4/stack/rest/src/test/resources/ship-larger-than-6mb.gif
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/resources/ship-larger-than-6mb.gif b/stack/rest/src/test/resources/ship-larger-than-6mb.gif
new file mode 100644
index 0000000..c3cb1fd
Binary files /dev/null and b/stack/rest/src/test/resources/ship-larger-than-6mb.gif differ
[05/23] incubator-usergrid git commit: Delete the ARSMaquettePro font.
Posted by sn...@apache.org.
Delete the ARSMaquettePro font.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/32f2882e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/32f2882e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/32f2882e
Branch: refs/heads/two-dot-o
Commit: 32f2882e0f2efd47ede6befd4fbaefa047989a03
Parents: ff63e09
Author: Dave Johnson <dm...@apigee.com>
Authored: Fri Jun 26 12:47:22 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Fri Jun 26 12:47:22 2015 -0400
----------------------------------------------------------------------
portal/css/arsmarquette/ARSMaquettePro-Light.otf | Bin 184600 -> 0 bytes
portal/css/arsmarquette/ARSMaquettePro-Medium.otf | Bin 188020 -> 0 bytes
.../css/arsmarquette/ARSMaquettePro-Regular.otf | Bin 188096 -> 0 bytes
portal/css/main.css | 15 ---------------
portal/css/main.min.css | 2 +-
5 files changed, 1 insertion(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32f2882e/portal/css/arsmarquette/ARSMaquettePro-Light.otf
----------------------------------------------------------------------
diff --git a/portal/css/arsmarquette/ARSMaquettePro-Light.otf b/portal/css/arsmarquette/ARSMaquettePro-Light.otf
deleted file mode 100644
index afd066d..0000000
Binary files a/portal/css/arsmarquette/ARSMaquettePro-Light.otf and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32f2882e/portal/css/arsmarquette/ARSMaquettePro-Medium.otf
----------------------------------------------------------------------
diff --git a/portal/css/arsmarquette/ARSMaquettePro-Medium.otf b/portal/css/arsmarquette/ARSMaquettePro-Medium.otf
deleted file mode 100644
index 052dad8..0000000
Binary files a/portal/css/arsmarquette/ARSMaquettePro-Medium.otf and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32f2882e/portal/css/arsmarquette/ARSMaquettePro-Regular.otf
----------------------------------------------------------------------
diff --git a/portal/css/arsmarquette/ARSMaquettePro-Regular.otf b/portal/css/arsmarquette/ARSMaquettePro-Regular.otf
deleted file mode 100644
index c738638..0000000
Binary files a/portal/css/arsmarquette/ARSMaquettePro-Regular.otf and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32f2882e/portal/css/main.css
----------------------------------------------------------------------
diff --git a/portal/css/main.css b/portal/css/main.css
index 5984dd1..cc4d078 100644
--- a/portal/css/main.css
+++ b/portal/css/main.css
@@ -49,21 +49,6 @@ a {
font-style: normal;
}
-@font-face {
- font-family: 'marquette-medium';
- src: url('arsmarquette/ARSMaquettePro-Medium.otf'), url('arsmarquette/ARSMaquettePro-Medium.otf') format('opentype');
-}
-
-@font-face {
- font-family: 'marquette-regular';
- src: url('arsmarquette/ARSMaquettePro-Regular.otf'), url('arsmarquette/ARSMaquettePro-Regular.otf') format('opentype');
-}
-
-@font-face {
- font-family: 'marquette-light';
- src: url('arsmarquette/ARSMaquettePro-Light.otf'), url('arsmarquette/ARSMaquettePro-Light.otf') format('opentype');
-}
-
.bold {
font-family: 'marquette-medium';
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32f2882e/portal/css/main.min.css
----------------------------------------------------------------------
diff --git a/portal/css/main.min.css b/portal/css/main.min.css
index 2d37389..60a4a7c 100644
--- a/portal/css/main.min.css
+++ b/portal/css/main.min.css
@@ -1 +1 @@
-.ng-cloak,.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none}html{min-height:100%;position:relative;margin:0 auto;background:#fff;min-width:1100px}body{padding:0;background-color:#fff;font-family:marquette-light,'Helvetica Neue',Helvetica,Arial,sans-serif;height:100%;max-height:100%;overflow-x:hidden}a{cursor:pointer}@font-face{font-family:entypo;src:url(entypo/entypo.eot);src:url(entypo/entypo.eot?#iefix) format('embedded-opentype'),url(entypo/entypo.woff) format('woff'),url(entypo/entypo.ttf) format('truetype'),url(entypo/entypo.svg#entypo) format('svg');font-weight:400;font-style:normal}@font-face{font-family:marquette-medium;src:url(arsmarquette/ARSMaquettePro-Medium.otf),url(arsmarquette/ARSMaquettePro-Medium.otf) format('opentype')}@font-face{font-family:marquette-regular;src:url(arsmarquette/ARSMaquettePro-Regular.otf),url(arsmarquette/ARSMaquettePro-Regular.otf) format('opentype')}@font-face{font-family:marquette-light;src:url(arsmarquette/ARSMaquet
tePro-Light.otf),url(arsmarquette/ARSMaquettePro-Light.otf) format('opentype')}.bold{font-family:marquette-medium}.main-content{background-color:#fff;margin:0 0 0 200px}.side-menu{position:absolute;top:60px;left:0;bottom:0;width:200px;float:left;background-color:#eee}footer{padding-top:20px;clear:both}.zero-out{padding:0;text-shadow:none;background-color:transparent;background-image:none;border:0;box-shadow:none;outline:0}.modal-body{overflow-y:visible}.demo-holder{margin:0 -20px 0 -20px;position:relative}.alert-holder{position:fixed;right:0;margin:20px 20px 0 0;z-index:10500;width:302px}.alert,.alert.alert-demo{padding:9px 35px 5px 14px;margin-bottom:3px;text-shadow:0 1px 0 rgba(255,255,255,.5);background-color:#eee;border:1px solid #eee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;transition:all 1s ease;height:0;overflow:hidden;line-height:0;float:right}.alert.alert-demo{float:none}.alert{width:0}.alert.ale
rt-success{background-color:rgba(155,198,144,.31);color:#1f6719;border-left:2px solid #1f6719}.alert.alert-warning{background-color:rgba(239,172,37,.2);color:#efac25;border-left:2px solid #efac25}.alert.alert-info{background-color:rgba(27,151,209,.2);color:#1b97d1;border-left:2px solid #1b97d1}.alert.alert-error{background-color:rgba(255,3,3,.2);color:#ff0303;border-left:2px solid #ff0303}.alert.alert-animate.alert-demo{height:20px;line-height:normal;opacity:1;width:100%;-moz-box-shadow:inset 0 2px 13px #b8b8b8;-webkit-box-shadow:inset 0 2px 13px #b8b8b8;box-shadow:inset 0 2px 13px #b8b8b8}.alert.alert-animate{height:auto;line-height:normal;opacity:.9;width:300px}@-webkit-keyframes alert-out{from{opacity:1}to{-webkit-transform:translateY(500px);opacity:0}}@keyframes alert-out{from{opacity:1}to{transform:translateY(500px);opacity:0}}.fade-out{-webkit-animation-name:alert-out;-webkit-animation-duration:1s;-webkit-animation-timing-function:step-stop;-webkit-animation-direction:normal;-
webkit-animation-iteration-count:1;animation-name:alert-out;animation-duration:1s;animation-timing-function:step-stop;animation-direction:normal;animation-iteration-count:1;opacity:.9}.margin-35{margin-top:35px}.modal-footer{background-color:transparent}.baloon{margin:20px;padding:20px 30px;position:fixed;bottom:0;top:auto;border-style:solid;border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.8)}.baloon:after{content:"";position:absolute;width:10px;height:10px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.7071067811865473, M12=-0.7071067811865477, M21=0.7071067811865477, M22=0.7071067811865473, SizingMethod='auto expand')"}.north.baloon:after{top:-6px;left:30px;border-top-style:solid;border-left-style:solid;box-shadow:-2px -2px 3px -1px rgba(0,0,0,.5)}.south.baloon:after{bottom:-6px;left:30px;border-bottom-style:solid;border-right-style:solid;box-shadow:2px 2px 3px -1px rgba(0,0,0,.5)}.
left.baloon:after{top:10px;left:-6px;border-bottom-style:solid;border-left-style:solid;box-shadow:-2px 2px 3px -1px rgba(0,0,0,.5)}.right.baloon:after{bottom:10px;right:-6px;border-top-style:solid;border-right-style:solid;box-shadow:2px -2px 3px -1px rgba(0,0,0,.5)}.baloon,.baloon:after{font-family:sans-serif;font-weight:700;border-color:#f7f7f7;border-width:1px;background-color:#3ac62f;color:#fff}#globalNav{float:right;margin:15px 8px 0 9px;list-style:none;width:114px}#globalNav ul{list-style:none}#globalNavDetail>div{display:none;color:graytext;background-image:none;background-repeat:no-repeat;background-position:0 0;min-height:64px}#globalNavDetail #globalNavDetailApiPlatform{background-image:url(../img/appswitcher/apiPlatform_lg.png)}#globalNavDetail #globalNavDetailAppServices{background-image:url(../img/appswitcher/appServices_lg.png)}#globalNavDetail #globalNavDetailApigeeHome{margin-top:-10px;background-image:url(../img/appswitcher/home_lg.png)}#globalNavDetail #globalNavDet
ailApiConsoles{background-image:url(../img/appswitcher/console_lg.png)}#globalNavDetail #globalNavDetailApigeeHome .globalNavDetailApigeeLogo{margin-top:10px;background-image:url(../img/appswitcher/logo_color.png);width:116px;height:40px}#globalNavDetail>div .globalNavDetailSubtitle{font-size:10px;text-transform:uppercase}#globalNavDetail>div .globalNavDetailTitle{margin-top:5px;font-size:20px}#globalNavDetail>div .globalNavDetailDescription{margin-top:10px;line-height:17px;font-style:oblique}.navbar.navbar-static-top .dropdownContainingSubmenu .dropdown-menu a{color:#494949;padding:13px 10px}.navbar.navbar-static-top .dropdownContainingSubmenu .dropdown-menu .active a{color:#fff;background-color:#bb2d16}.navbar.navbar-static-top .dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:400;line-height:18px;color:#333;white-space:nowrap}#globalNav .dropdown-toggle{border-radius:3px;padding:3px 6px;margin:0}.dropdown-toggle{background-color:#bb2d16;padding:3px}.demo-hold
er .alert.alert-demo{background-color:rgba(196,196,196,.1);color:#777;padding:12px 35px 7px 14px}.demo-holder-content{position:absolute;right:50px}.demo-text{position:absolute;right:223px;left:0;padding:0 0 0 10px}.b{display:block}.toggle,.toggle-form{position:absolute;top:10px;right:173px;width:50px;height:23px;border-radius:100px;background-color:#ddd;overflow:hidden;box-shadow:inset 0 0 2px 1px rgba(0,0,0,.05)}.form-horizontal.configs .control-label{width:250px;padding:0 10px 0 0}.toggle-form{position:relative;right:auto;top:auto;display:inline-block}.toggle-form-label{display:inline-block}input[type=checkbox].check{position:absolute;display:block;cursor:pointer;top:0;left:0;width:100%;height:100%;opacity:0;z-index:6}.check:checked~.track{box-shadow:inset 0 0 0 20px #00adee}.toggle-form .check:checked~.track{box-shadow:inset 0 0 0 20px #82ce85}.check:checked~.switch{right:2px;left:27px;transition:.4s ease;transition-property:left,right;transition-delay:.05s,0s}.switch{position:ab
solute;left:2px;top:2px;bottom:2px;right:27px;background-color:#fff;border-radius:36px;z-index:1;transition:.4s ease;transition-property:left,right;transition-delay:0s,.05s;box-shadow:0 1px 2px rgba(0,0,0,.2)}.track{position:absolute;left:0;top:0;right:0;bottom:0;transition:.4s ease;box-shadow:inset 0 0 0 2px rgba(0,0,0,.05);border-radius:40px}.add-app .pictogram,top-selector .pictogram{margin:0 3px 0 0}i.pictogram{font-family:entypo;display:inline-block;width:23px;margin:0 5px 0 0;font-size:2.5em;height:17px;line-height:.35;overflow:hidden;vertical-align:middle;padding:5px 0 0;font-style:normal;font-weight:100;-webkit-font-smoothing:antialiased}i.pictogram.sub{margin:0 0 0 10px;font-size:2.1em}i.pictogram.title{margin:0;font-size:2.1em}i.pictogram.chart{margin:0 0 0 3px;font-size:2.1em;line-height:.4em;height:.5em;width:100%}i.pictogram.apichart{margin:0 0 0 11px;font-size:2.1em;line-height:.4em;height:.5em;width:100%}[class*=" ma-icon-"],[class^=ma-icon-]{display:inline-block;widt
h:23px;height:20px;margin:1px 3px 0 0;line-height:20px;vertical-align:text-top;background-image:url(../img/nav-sprites.png);background-position:14px 14px;background-repeat:no-repeat}[class*=" sdk-icon-"],[class^=sdk-icon-]{display:inline-block;width:32px;height:29px;margin:-3px 3px 0 0;line-height:32px;vertical-align:text-top;background-image:url(../img/sdk-sprites.png);background-position:14px 14px;background-repeat:no-repeat;cursor:pointer;overflow:hidden}[class*=" sdk-icon-large-"],[class^=sdk-icon-large-]{display:inline-block;width:86px;height:86px;margin:-3px 3px 0 0;line-height:32px;vertical-align:text-top;background-image:url(../img/sdk-sprites-large.png);background-position:14px 14px;background-repeat:no-repeat;border:1px solid #aaa;-moz-box-shadow:3px 3px 0 -1px #ccc;-webkit-box-shadow:3px 3px 0 -1px #ccc;box-shadow:3px 3px 0 -1px #ccc}.sdk-icon-ios{background-position:-6px -4px}.sdk-icon-android{background-position:-59px -3px}.sdk-icon-js{background-position:-109px -4px}.s
dk-icon-node{background-position:-154px -3px}.sdk-icon-ruby{background-position:-204px -3px}.sdk-icon-net{background-position:-256px -4px}.sdk-icon-large-ios{background-position:-6px -3px}.sdk-icon-large-android{background-position:-113px 0}.sdk-icon-large-js{background-position:-219px 0}.sdk-icon-large-node{background-position:-323px -3px}.sdk-icon-large-ruby{background-position:-431px 0}.sdk-icon-large-net{background-position:-537px -3px}body>header>.navbar{background-color:#00adee}body>header .navbar:first-child>a{height:22px;line-height:22px;padding:10px 20px 20px 13px}.navbar.navbar-static-top a{text-shadow:none;color:#fff}.navbar-text{color:#fff;margin:4px}.navbar-text .dropdown-menu a{color:#343434}.navbar-text.pull-left{margin-left:90px}.top-nav,ul.app-nav li,ul.org-nav li{background-color:#fff}.top-nav .btn-group{margin:9px 0 5px 5px}.nav .app-selector .caret,.nav .app-selector:active .caret,.nav .app-selector:focus .caret,.nav .app-selector:hover .caret,.nav .org-selector
.caret,.nav .org-selector:active .caret,.nav .org-selector:focus .caret,.nav .org-selector:hover .caret{border-top-color:#5f5f5f;border-bottom-color:transparent;margin-top:8px;position:absolute;right:10px}.org-options{margin:5px 2px -8px -5px;border-top:3px solid #e6e6e6;overflow:hidden}.navbar.secondary{margin:0 -20px 0 -21px;border-bottom:3px solid #e6e6e6}.navbar.secondary>.container-fluid{margin:0 -20px 0 -18px}.navbar.secondary .nav,.navbar.secondary>.container-fluid .nav-collapse.collapse.span9,.top-nav{margin:0}.top-nav>li,.top-nav>li>div{width:100%}.span9.button-area{margin-left:0}.navbar .nav a.btn-create i{margin:1px 0 0}.navbar .nav a.btn-create,.navbar .nav a.btn-create:hover{text-align:left;font-weight:400;color:#00adee;padding:0 0 0 10px;margin:4px 0 0 3px;display:block;width:140px;height:30px;line-height:30px;background-color:#f3f3f3}.navbar .nav a.btn-create:hover{color:#00adee}.navbar .nav a.btn-create:active{box-shadow:none}.sdks>ul>li.title label{color:#5f5f5f;fon
t-size:15px;display:inline-block;padding:16px 0 0;line-height:6px;cursor:default}.sdks>ul>li.title a{color:#5f5f5f;font-size:15px;display:inline-block;padding:16px 0 0;line-height:6px}.sdks>ul{list-style:none;margin:0;height:32px;overflow:hidden}.sdks>ul>li{display:inline;margin:0 10px 0 0;line-height:11px}.navbar.secondary,.navbar.secondary .btn-group>.btn,.navbar.secondary .btn-group>.dropdown-menu,.side-menu .btn-group>.btn,.side-menu .dropdown-menu{text-transform:uppercase;font-family:marquette-regular,'Helvetica Neue',Helvetica,Arial,sans-serif;color:#5f5f5f;font-size:14px;-webkit-font-smoothing:antialiased}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{text-decoration:none;color:#fff;background-color:#5f5f5f;background-image:-moz-linear-gradient(top,#5f5f5f,#787878);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5f5f5f),to(#
787878));background-image:-webkit-linear-gradient(top,#5f5f5f,#787878);background-image:-o-linear-gradient(top,#5f5f5f,#787878);background-image:linear-gradient(to bottom,#5f5f5f,#787878);background-repeat:repeat-x}.btn-group.open .btn.dropdown-toggle.top-selector,.top-selector,.top-selector:active,.top-selector:focus,.top-selector:hover{color:#5f5f5f;padding:0;text-shadow:none;background-color:transparent;background-image:none;border:0;box-shadow:none;outline:0;width:100%;text-align:left}.dialog-body{padding:20px}h1.title{font-size:1.3em;font-family:marquette-medium,"Helvetica Neue",sans-serif;color:#686868;line-height:17px;display:inline-block;padding:0 10px 0 0}h2.title{text-transform:uppercase;font-size:1.2em;border-top:2px solid #eee;color:#828282}h2.title.chart{margin:10px 0 20px 10px;z-index:101;position:absolute;top:0;left:0;right:0}h3.title{text-transform:uppercase;font-size:1.1em}.sidebar-nav .nav-list{padding:0}.nav-list .nav-header,.sidebar-nav .nav-list>li>a{margin-righ
t:0}.sidebar-nav .nav-list.trans{max-height:100000px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;transition:all .5s ease;display:block;opacity:0}.sidebar-nav .nav-list li a{padding:10px 0 10px 25px;color:#5f5f5f;text-shadow:none;background-color:#eee;font-size:14px;text-transform:uppercase;position:relative}.sidebar-nav .nav-list li a.org-overview{background-color:#fff;font-family:marquette-light,'Helvetica Neue',Helvetica,Arial,sans-serif}.sidebar-nav .nav-list li a.org-overview:hover{color:#5f5f5f}.sidebar-nav .nav-list:first-child>li{margin:0;height:39px;overflow:hidden}.sidebar-nav .nav-list:first-child>li.active{height:auto;overflow:visible}.sidebar-nav .nav-list:first-child>li>ul>li>a{color:#5f5f5f}.sidebar-nav .nav-list:first-child>li.active>a,.sidebar-nav .nav-list:first-child>li>a:focus,.sidebar-nav .nav-list:first-child>li>a:hover{color:#fff;text-shadow:none;background-color:#00adee;margin:0 0 0 -15px}.sidebar-nav .nav-list:first-child li.active>ul>li>a{ba
ckground-color:#fff}.sidebar-nav .nav-list li.option>ul{overflow:hidden;opacity:0;height:auto;display:block;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;transition:all .5s ease;max-height:100000px}.sidebar-nav .nav-list li.option.active>ul{opacity:1}.sidebar-nav .nav-list li.active>ul>li a{border-bottom:1px solid #eee;color:#747474;text-transform:none;font-weight:300;padding:10px 0 10px 22px}.sidebar-nav .nav-list li.active>ul>li.active>a,.sidebar-nav .nav-list li.active>ul>li>a:focus,.sidebar-nav .nav-list li.active>ul>li>a:hover{color:#00adee;background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAKCAYAAAB4zEQNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1NkEzQ0Y1MUI0MjIxMUUyODZGN0I5RUE1NjAwQ0I0MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1NkEzQ0Y1MkI0MjIxMUUyODZGN0I5RUE1NjAwQ0I0MCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU2QTNDRjRGQjQyMjExRTI4NkY3QjlFQTU2MDBDQjQwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU2QTNDRjUwQjQyMjExRTI4NkY3QjlFQTU2MDBDQjQwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+poqUzgAAAG1JREFUeNpilC5YwIADqLNgEWQG4kYg9mNCk1AE4sNAXA3iIEuGAPF5ILaECYAkeYB4DhCvBmJ+ZGNAkt+B+CkQ/0W3nAkqWA/EblBFKJIwsA+IDYF4BzZJEHgNxJ5AXAbEv1hwBEA3EK8BCDAAwgoRW2zTv6EAAAAASUVORK5CYII=) no-repeat;background-po
sition:206px 16px;font-family:marquette-medium,'Helvetica Neue',Helvetica,Arial,sans-serif;border-bottom:1px solid #eee;text-shadow:none;-webkit-font-smoothing:antialiased}.sidebar-nav .nav-list li.option ul{list-style:none}.new-tag{border-radius:3px;display:inline-block;font-family:marquette-medium;font-size:.6em;background-color:rgba(26,26,26,.5);color:#fff;padding:3px;height:8px;line-height:8px;position:absolute;right:5px;top:13px}.sidebar-nav .nav-list li:active a{background-color:rgba(255,255,255,.5)}.app-creds dt{font-family:marquette-medium}.intro-container{position:relative;height:auto;-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;transition:all .5s ease-out;overflow:hidden}.sdk-intro{position:absolute;border:1px solid #aaa;background-color:#f4f4f4;-moz-box-shadow:inset 0 0 10px #ccc;-webkit-box-shadow:inset 0 0 10px #ccc;box-shadow:inset 0 4px 10px #ccc;opacity:.4;top:0;left:6px;right:1px;bottom:0;height:auto;overflow:hidden}.sdk-intro-content{positio
n:absolute;padding:10px 40px 10px 10px;top:0;left:6px;right:-20px;bottom:0;height:auto;overflow:auto}.sdk-intro-content .btn.normal{margin:19px 10px 0 0}.keys-creds h2{margin-bottom:-2px}.user-list{padding:0;margin:0;list-style:none;min-height:450px;float:left;width:100%}.user-list li{padding:10px;border-bottom:1px solid #c5c5c5;cursor:pointer}.user-list li .label{margin:0 0 0 22px}.user-list li input{margin:0 10px 0 0}.user-list li.selected{background-color:#eee}#user-panel{margin-top:20px}.user-col{border-right:1px solid #c5c5c5;-moz-box-shadow:inset -27px 1px 6px -27px #b8b8b8;-webkit-box-shadow:inset -27px 1px 6px -27px #b8b8b8;box-shadow:inset -27px 1px 6px -27px #b8b8b8}.user-profile-picture{width:40px;height:40px}.content-page>.well{padding:10px;height:40px}.table-header td{font-weight:800;color:#000}.user-header-title{font-size:13px;font-family:marquette-regular,'Helvetica Neue',Helvetica,Arial,sans-serif}.tabbable>.tab-content{overflow:visible}.button-strip{float:right;marg
in-bottom:10px}a.notifications-links{color:#1b97d1}.notifications-header{height:50px;background-color:#eee;padding:10px;border-bottom:1px solid #aaa;position:relative;overflow:hidden}.groups-row td.details,.notifications-row td.details,.roles-row td.details,.users-row td.details{line-height:25px!important;border-right:1px solid #e5e5e5}.nav-tabs>li{cursor:pointer}.login-content{position:absolute;top:91px;bottom:0;left:0;right:0;background-color:#fff;padding:9% 0 0 32%}.login-content form{margin:0}.login-content form h1{padding:10px 0 5px 20px}.login-holder{width:450px;border:1px solid #e5e5e5}.login-holder .form-actions{padding-left:30px;margin-bottom:0}.login-holder .form-actions .submit{padding:0 30px 0 0}.login-content .extra-actions{margin-top:10px;padding-left:30px;margin-bottom:0}.login-content .extra-actions .submit{padding:0 30px 0 0}.login-content .extra-actions .submit a{margin-left:3px;margin-right:3px}.signUp-content{position:absolute;top:91px;bottom:0;left:0;right:0;bac
kground-color:#fff;padding:9% 0 0 32%}.signUp-content form{margin:0}.signUp-content form h1{padding:10px 0 5px 20px}.signUp-holder{width:450px;border:1px solid #e5e5e5}.signUp-holder .form-actions{margin-bottom:0}.signUp-holder .form-actions .submit{padding:0 30px 0 0}.table.collection-list{border:1px solid #eee}.formatted-json,.formatted-json ul{list-style:none}.formatted-json .key{font-family:marquette-medium}.formatted-json li{border-bottom:1px solid #eee;margin:3px 0}iframe[seamless]{background-color:transparent;border:0 none transparent;padding:0;overflow:visible;overflow-x:hidden;width:100%}.gravatar20{padding:7px 0 0 10px!important;margin:0;width:30px}#shell-panel *{font-family:monospace}#shell-panel .boxContent{font-family:monospace;font-size:14px;min-height:400px}#shell-panel input{font-family:monospace;overflow:auto;width:90%;margin-top:10px}#shell-panel hr{margin:2px;border-color:#e1e1e1}form input.has-error{-webkit-animation:pulse-red 1s alternate infinite;-moz-animation
:pulse-red 1s alternate infinite;border:1px solid rgba(255,3,3,.6)}.validator-error-message{color:#ff0303}@-webkit-keyframes pulse-red{0%{box-shadow:inset 0 0 5px 2px rgba(255,3,3,.1),0 0 5px 2px rgba(255,3,3,.3)}100%{box-shadow:inset 0 0 5px 2px rgba(255,3,3,.3),0 0 5px 2px rgba(255,3,3,.1)}}@-moz-keyframes pulse-red{0%{box-shadow:inset 0 0 5px 2px rgba(255,3,3,.1),0 0 5px 2px rgba(255,3,3,.3)}100%{box-shadow:inset 0 0 5px 2px rgba(255,3,3,.3),0 0 5px 2px rgba(255,3,3,.1)}}.modal-instructions{padding-top:5px;padding-bottom:5px}.dropdown-menu{width:100%}.modal{width:560px!important}.dropdown-backdrop{position:static}.title.with-icons a{display:inline-block;text-transform:lowercase;font-size:.8em;margin:0 5px 0 0}.span9.tab-content{margin:0}.span9.tab-content .content-page{padding:0 0 0 30px}.button-toolbar,.menu-toolbar{padding:10px 0;margin:0;width:100%}.menu-toolbar{padding:0 0 20px}.menu-toolbar>ul.inline{border-bottom:1px solid #c5c5c5;margin:0}.btn-group .filter-selector,.btn-g
roup .filter-selector:active,.btn-group .filter-selector:focus,.btn-group .filter-selector:hover,.btn-group .filter-title,.btn-group .filter-title:active,.btn-group .filter-title:focus,.btn-group.open .btn.dropdown-toggle.filter-selector,.btn-group.open .btn.dropdown-toggle.filter-title,.btn-group>.filter-selector.btn:first-child,.btn-group>.filter-title.btn:first-child,.btn.btn-primary,.btn.normal,.modal-footer .btn{color:#fff;padding:3px 9px;text-shadow:none;background-color:#494949;background-image:none;border:1px solid #c5c5c5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;box-shadow:none}ul.inline>li.tab{margin:0;padding:0}li.tab .btn.btn-primary{background-color:#eee;border:0;color:#494949;box-shadow:none;margin:0 -1px -1px -1px;padding:3px 19px 3px 16px;border-bottom:1px solid #c5c5c5}ul.inline>li.tab.selected{margin:0 0 -1px 0;border-bottom:1px solid #fff}li.tab.selected .btn.
btn-primary.toolbar{color:#494949;border-left:1px solid #c5c5c5;border-right:1px solid #c5c5c5;border-top:1px solid #c5c5c5;border-bottom:0;background-color:#fff}li.tab.selected .btn-content{text-decoration:none;color:#494949}.btn-group.compare .filter-selector.btn:first-child,.btn.btn-primary.toolbar{color:#494949;background-color:#f1f1f1}li.selected .btn.btn-primary.toolbar{color:#fff;border:1px solid #00adee;background-color:#00adee}.btn.cancel,.btn.cancel:hover,.btn.normal.white,.btn.normal.white:hover{background-color:#fff;color:#5f5f5f}.btn-group .filter-selector:active,.btn-group .filter-title:hover,.btn-group.selected .filter-selector,.btn-group.selected>.filter-selector.btn:first-child,.btn.btn-primary:active,.btn.btn-primary:hover,.btn.normal:hover,.modal-footer .btn:active,.modal-footer .btn:hover{color:#fff;border:1px solid #00adee;background-color:#00adee}.btn-group .filter-selector .caret{margin:8px 0 0 10px;border-top:4px solid #fff;border-right:4px solid transparent;
border-left:4px solid transparent}.btn-group.header-button{margin:4px 0 0;text-transform:none}.page-filters{padding:0;margin:10px 0}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;z-index:102}.modal{position:fixed;top:10%;left:50%;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.3);*border:1px solid #999;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,.3);box-shadow:0 3px 7px rgba(0,0,0,.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:0}.modal.fade{z-index:-200}.modal.fade.in{z-index:1050}.auto-update-container{padding:10px 0 0}.auto-updates{margin:0 10px 0 0}.super-help{font-size:9pt;vertical-align:super}.help_tooltip{font-size:9pt;text-transform:none}.helpButton{font-family:Helvetica,Arial,sans-serif;font-size:13px;font-weight:300;padding:5px 8px;text-align:ce
nter;vertical-align:middle;color:#fff;border:1px solid #fff;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:#00adee;width:110px;outline:0}.helpButton:hover{cursor:pointer;background-color:#fff;color:#333;-webkit-transition:background-color .1s;-moz-transition:background-color .1s;-o-transition:background-color .1s;transition:background-color .1s}.helpButtonClicked{background-color:#fff;color:#333;outline:0}.introjs-overlay{background:0 0;filter:none;-ms-filter:"alpha(Opacity=20)";filter:alpha(opacity=20);background-color:#fff;opacity:.2}.introjs-helperLayer{border-radius:0;box-shadow:none;border:1px solid rgba(0,0,0,.25)}.introjs-helperNumberLayer{top:-12px;left:-12px;font-family:"Open Sans",Arial,sans-serif;font-weight:400;border:0;filter:none;filter:none;box-shadow:none}.introjs-arrow{border:10px solid #fff}.introjs-arrow.top{top:-20px;border-bottom-color:#6dbce3}.introjs-arrow.right{right:-20px;top:20px;border-left-color:#6dbce3}.introjs-arrow.
bottom{bottom:-20px;border-top-color:#6dbce3}.introjs-arrow.left{left:-20px;top:20px;border-right-color:#6dbce3}.introjs-arrow:before{border:10px solid #fff;content:'';position:absolute}.introjs-arrow.top:before{top:-8px;left:-10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:#F0F8FC;border-left-color:transparent}.introjs-arrow.right:before{right:-7px;top:-10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:#F0F8FC}.introjs-arrow.bottom:before{bottom:-9px;left:-10px;border-top-color:#F0F8FC;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.introjs-arrow.left:before{left:-7px;top:-10px;border-top-color:transparent;border-right-color:#F0F8FC;border-bottom-color:transparent;border-left-color:transparent}.introjs-tooltip{background-color:#F0F8FC;border-radius:0;border:1px solid #6dbce3;box-shadow:0 1px 7px rgba(0,0,0,.3)}.introjs-button{text-shado
w:none;font:12px/normal sans-serif;color:#1f77a3;background-color:#F0F8FC;background-image:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #d4d4d4}.introjs-button:hover{font-family:"Open Sans",Arial,sans-serif}.introjs-button:active,.introjs-button:focus{text-decoration:none;outline:0}.introjs-skipbutton{color:#1f77a3;text-decoration:none;font-family:"Open Sans",Arial,sans-serif;margin-right:32px;border:1px solid #6dbce3}.introjs-nextbutton{text-decoration:none;font-family:"Open Sans",Arial,sans-serif;width:40px;margin-left:3px}.introjs-prevbutton{text-decoration:none;font-family:"Open Sans",Arial,sans-serif;width:40px}.introjs-nextbutton,.introjs-nextbutton:active,.introjs-nextbutton:focus,.introjs-nextbutton:hover{background-image:url(../img/introjs_arrow_step_next.png);background-position:45px 5px;background-repeat:no-repeat;text-align:left;border:1px solid #6dbce3}.introjs-prevbutton,.introjs-prevbutton:active,.introjs-prevbutton:focus,.i
ntrojs-prevbutton:hover{background-image:url(../img/introjs_arrow_step_prev.png);background-position:2px 5px;background-repeat:no-repeat;text-align:right;border:1px solid #6dbce3}.introjs-nextbutton.introjs-disabled,.introjs-nextbutton.introjs-disabled:active,.introjs-nextbutton.introjs-disabled:focus,.introjs-nextbutton.introjs-disabled:hover{background-image:url(../img/introjs_arrow_step_next_disabled.png);background-position:48px 5px;background-repeat:no-repeat;text-align:left;border:1px solid #d4d4d4}.introjs-prevbutton.introjs-disabled,.introjs-prevbutton.introjs-disabled:active,.introjs-prevbutton.introjs-disabled:focus,.introjs-prevbutton.introjs-disabled:hover{background-image:url(../img/introjs_arrow_step_prev_disabled.png);background-position:2px 5px;background-repeat:no-repeat;text-align:right;border:1px solid #d4d4d4}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:gray;background-color:#F0F8FC}.introjs-tooltiptext{font-size:13px;line-height:19px}.
introjstooltipheader{font-size:13px;line-height:19px;font-family:marquette-medium,'Helvetica Neue',Helvetica,Arial,sans-serif}.introjs-tooltip{min-width:210px;max-width:450px}
\ No newline at end of file
+.ng-cloak,.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none}html{min-height:100%;position:relative;margin:0 auto;background:#fff;min-width:1100px}body{padding:0;background-color:#fff;font-family:marquette-light,'Helvetica Neue',Helvetica,Arial,sans-serif;height:100%;max-height:100%;overflow-x:hidden}a{cursor:pointer}@font-face{font-family:entypo;src:url(entypo/entypo.eot);src:url(entypo/entypo.eot?#iefix) format('embedded-opentype'),url(entypo/entypo.woff) format('woff'),url(entypo/entypo.ttf) format('truetype'),url(entypo/entypo.svg#entypo) format('svg');font-weight:400;font-style:normal}.bold{font-family:marquette-medium}.main-content{background-color:#fff;margin:0 0 0 200px}.side-menu{position:absolute;top:60px;left:0;bottom:0;width:200px;float:left;background-color:#eee}footer{padding-top:20px;clear:both}.zero-out{padding:0;text-shadow:none;background-color:transparent;background-image:none;border:0;box-shadow:none;outline:0}.modal-body{overflow-y:visi
ble}.demo-holder{margin:0 -20px 0 -20px;position:relative}.alert-holder{position:fixed;right:0;margin:20px 20px 0 0;z-index:10500;width:302px}.alert,.alert.alert-demo{padding:9px 35px 5px 14px;margin-bottom:3px;text-shadow:0 1px 0 rgba(255,255,255,.5);background-color:#eee;border:1px solid #eee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;transition:all 1s ease;height:0;overflow:hidden;line-height:0;float:right}.alert.alert-demo{float:none}.alert{width:0}.alert.alert-success{background-color:rgba(155,198,144,.31);color:#1f6719;border-left:2px solid #1f6719}.alert.alert-warning{background-color:rgba(239,172,37,.2);color:#efac25;border-left:2px solid #efac25}.alert.alert-info{background-color:rgba(27,151,209,.2);color:#1b97d1;border-left:2px solid #1b97d1}.alert.alert-error{background-color:rgba(255,3,3,.2);color:#ff0303;border-left:2px solid #ff0303}.alert.alert-animate.alert-demo{height:20px;line-height:norma
l;opacity:1;width:100%;-moz-box-shadow:inset 0 2px 13px #b8b8b8;-webkit-box-shadow:inset 0 2px 13px #b8b8b8;box-shadow:inset 0 2px 13px #b8b8b8}.alert.alert-animate{height:auto;line-height:normal;opacity:.9;width:300px}@-webkit-keyframes alert-out{from{opacity:1}to{-webkit-transform:translateY(500px);opacity:0}}@keyframes alert-out{from{opacity:1}to{transform:translateY(500px);opacity:0}}.fade-out{-webkit-animation-name:alert-out;-webkit-animation-duration:1s;-webkit-animation-timing-function:step-stop;-webkit-animation-direction:normal;-webkit-animation-iteration-count:1;animation-name:alert-out;animation-duration:1s;animation-timing-function:step-stop;animation-direction:normal;animation-iteration-count:1;opacity:.9}.margin-35{margin-top:35px}.modal-footer{background-color:transparent}.baloon{margin:20px;padding:20px 30px;position:fixed;bottom:0;top:auto;border-style:solid;border-radius:2px;box-shadow:0 0 4px rgba(0,0,0,.8)}.baloon:after{content:"";position:absolute;width:10px;hei
ght:10px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.7071067811865473, M12=-0.7071067811865477, M21=0.7071067811865477, M22=0.7071067811865473, SizingMethod='auto expand')"}.north.baloon:after{top:-6px;left:30px;border-top-style:solid;border-left-style:solid;box-shadow:-2px -2px 3px -1px rgba(0,0,0,.5)}.south.baloon:after{bottom:-6px;left:30px;border-bottom-style:solid;border-right-style:solid;box-shadow:2px 2px 3px -1px rgba(0,0,0,.5)}.left.baloon:after{top:10px;left:-6px;border-bottom-style:solid;border-left-style:solid;box-shadow:-2px 2px 3px -1px rgba(0,0,0,.5)}.right.baloon:after{bottom:10px;right:-6px;border-top-style:solid;border-right-style:solid;box-shadow:2px -2px 3px -1px rgba(0,0,0,.5)}.baloon,.baloon:after{font-family:sans-serif;font-weight:700;border-color:#f7f7f7;border-width:1px;background-color:#3ac62f;color:#fff}#globalNav{float:right;margin:15px 8px 0 9px;list-st
yle:none;width:114px}#globalNav ul{list-style:none}#globalNavDetail>div{display:none;color:graytext;background-image:none;background-repeat:no-repeat;background-position:0 0;min-height:64px}#globalNavDetail #globalNavDetailApiPlatform{background-image:url(../img/appswitcher/apiPlatform_lg.png)}#globalNavDetail #globalNavDetailAppServices{background-image:url(../img/appswitcher/appServices_lg.png)}#globalNavDetail #globalNavDetailApigeeHome{margin-top:-10px;background-image:url(../img/appswitcher/home_lg.png)}#globalNavDetail #globalNavDetailApiConsoles{background-image:url(../img/appswitcher/console_lg.png)}#globalNavDetail #globalNavDetailApigeeHome .globalNavDetailApigeeLogo{margin-top:10px;background-image:url(../img/appswitcher/logo_color.png);width:116px;height:40px}#globalNavDetail>div .globalNavDetailSubtitle{font-size:10px;text-transform:uppercase}#globalNavDetail>div .globalNavDetailTitle{margin-top:5px;font-size:20px}#globalNavDetail>div .globalNavDetailDescription{margin-
top:10px;line-height:17px;font-style:oblique}.navbar.navbar-static-top .dropdownContainingSubmenu .dropdown-menu a{color:#494949;padding:13px 10px}.navbar.navbar-static-top .dropdownContainingSubmenu .dropdown-menu .active a{color:#fff;background-color:#bb2d16}.navbar.navbar-static-top .dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:400;line-height:18px;color:#333;white-space:nowrap}#globalNav .dropdown-toggle{border-radius:3px;padding:3px 6px;margin:0}.dropdown-toggle{background-color:#bb2d16;padding:3px}.demo-holder .alert.alert-demo{background-color:rgba(196,196,196,.1);color:#777;padding:12px 35px 7px 14px}.demo-holder-content{position:absolute;right:50px}.demo-text{position:absolute;right:223px;left:0;padding:0 0 0 10px}.b{display:block}.toggle,.toggle-form{position:absolute;top:10px;right:173px;width:50px;height:23px;border-radius:100px;background-color:#ddd;overflow:hidden;box-shadow:inset 0 0 2px 1px rgba(0,0,0,.05)}.form-horizontal.configs .control-la
bel{width:250px;padding:0 10px 0 0}.toggle-form{position:relative;right:auto;top:auto;display:inline-block}.toggle-form-label{display:inline-block}input[type=checkbox].check{position:absolute;display:block;cursor:pointer;top:0;left:0;width:100%;height:100%;opacity:0;z-index:6}.check:checked~.track{box-shadow:inset 0 0 0 20px #00adee}.toggle-form .check:checked~.track{box-shadow:inset 0 0 0 20px #82ce85}.check:checked~.switch{right:2px;left:27px;transition:.4s ease;transition-property:left,right;transition-delay:.05s,0s}.switch{position:absolute;left:2px;top:2px;bottom:2px;right:27px;background-color:#fff;border-radius:36px;z-index:1;transition:.4s ease;transition-property:left,right;transition-delay:0s,.05s;box-shadow:0 1px 2px rgba(0,0,0,.2)}.track{position:absolute;left:0;top:0;right:0;bottom:0;transition:.4s ease;box-shadow:inset 0 0 0 2px rgba(0,0,0,.05);border-radius:40px}.add-app .pictogram,top-selector .pictogram{margin:0 3px 0 0}i.pictogram{font-family:entypo;display:inline-
block;width:23px;margin:0 5px 0 0;font-size:2.5em;height:17px;line-height:.35;overflow:hidden;vertical-align:middle;padding:5px 0 0;font-style:normal;font-weight:100;-webkit-font-smoothing:antialiased}i.pictogram.sub{margin:0 0 0 10px;font-size:2.1em}i.pictogram.title{margin:0;font-size:2.1em}i.pictogram.chart{margin:0 0 0 3px;font-size:2.1em;line-height:.4em;height:.5em;width:100%}i.pictogram.apichart{margin:0 0 0 11px;font-size:2.1em;line-height:.4em;height:.5em;width:100%}[class*=" ma-icon-"],[class^=ma-icon-]{display:inline-block;width:23px;height:20px;margin:1px 3px 0 0;line-height:20px;vertical-align:text-top;background-image:url(../img/nav-sprites.png);background-position:14px 14px;background-repeat:no-repeat}[class*=" sdk-icon-"],[class^=sdk-icon-]{display:inline-block;width:25px;height:29px;margin:-3px 3px 0 0;line-height:32px;vertical-align:text-top;background-image:url(../img/sdk-sprites.png);background-position:14px 14px;background-repeat:no-repeat;cursor:pointer;overflo
w:hidden}[class*=" sdk-icon-large-"],[class^=sdk-icon-large-]{display:inline-block;width:86px;height:86px;margin:-3px 3px 0 0;line-height:32px;vertical-align:text-top;background-image:url(../img/sdk-sprites-large.png);background-position:14px 14px;background-repeat:no-repeat;border:1px solid #aaa;-moz-box-shadow:3px 3px 0 -1px #ccc;-webkit-box-shadow:3px 3px 0 -1px #ccc;box-shadow:3px 3px 0 -1px #ccc}.sdk-icon-ios{background-position:-10px -4px}.sdk-icon-android{background-position:-48px -3px}.sdk-icon-js{background-position:-86px -4px}.sdk-icon-node{background-position:-120px -3px}.sdk-icon-ruby{background-position:-163px -3px}.sdk-icon-net{background-position:-199px -4px}.sdk-icon-perl{background-position:-231px -4px}.sdk-icon-large-ios{background-position:-6px -3px}.sdk-icon-large-android{background-position:-113px 0}.sdk-icon-large-js{background-position:-219px 0}.sdk-icon-large-node{background-position:-323px -3px}.sdk-icon-large-ruby{background-position:-431px 0}.sdk-icon-larg
e-net{background-position:-537px -3px}.sdk-icon-large-perl{background-position:-630px -3px}body>header>.navbar{background-color:#00adee}body>header .navbar:first-child>a{height:22px;line-height:22px;padding:10px 20px 20px 13px}.navbar.navbar-static-top a{text-shadow:none;color:#fff}.navbar-text{color:#fff;margin:4px}.navbar-text .dropdown-menu a{color:#343434}.navbar-text.pull-left{margin-left:90px}.top-nav,ul.app-nav li,ul.org-nav li{background-color:#fff}.top-nav .btn-group{margin:9px 0 5px 5px}.nav .app-selector .caret,.nav .app-selector:active .caret,.nav .app-selector:focus .caret,.nav .app-selector:hover .caret,.nav .org-selector .caret,.nav .org-selector:active .caret,.nav .org-selector:focus .caret,.nav .org-selector:hover .caret{border-top-color:#5f5f5f;border-bottom-color:transparent;margin-top:8px;position:absolute;right:10px}.org-options{margin:5px 2px -8px -5px;border-top:3px solid #e6e6e6;overflow:hidden}.navbar.secondary{margin:0 -20px 0 -21px;border-bottom:3px solid
#e6e6e6}.navbar.secondary>.container-fluid{margin:0 -20px 0 -18px}.navbar.secondary .nav,.navbar.secondary>.container-fluid .nav-collapse.collapse.span9,.top-nav{margin:0}.top-nav>li,.top-nav>li>div{width:100%}.span9.button-area{margin-left:0}.navbar .nav a.btn-create i{margin:1px 0 0}.navbar .nav a.btn-create,.navbar .nav a.btn-create:hover{text-align:left;font-weight:400;color:#00adee;padding:0 0 0 10px;margin:4px 0 0 3px;display:block;width:140px;height:30px;line-height:30px;background-color:#f3f3f3}.navbar .nav a.btn-create:hover{color:#00adee}.navbar .nav a.btn-create:active{box-shadow:none}.sdks>ul>li.title label{color:#5f5f5f;font-size:15px;display:inline-block;padding:16px 0 0;line-height:6px;cursor:default}.sdks>ul>li.title a{color:#5f5f5f;font-size:15px;display:inline-block;padding:16px 0 0;line-height:6px}.sdks>ul{list-style:none;margin:0;height:32px;overflow:hidden}.sdks>ul>li{display:inline;margin:0 10px 0 0;line-height:11px}.navbar.secondary,.navbar.secondary .btn-grou
p>.btn,.navbar.secondary .btn-group>.dropdown-menu,.side-menu .btn-group>.btn,.side-menu .dropdown-menu{text-transform:uppercase;font-family:marquette-regular,'Helvetica Neue',Helvetica,Arial,sans-serif;color:#5f5f5f;font-size:14px;-webkit-font-smoothing:antialiased}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover,.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{text-decoration:none;color:#fff;background-color:#5f5f5f;background-image:-moz-linear-gradient(top,#5f5f5f,#787878);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5f5f5f),to(#787878));background-image:-webkit-linear-gradient(top,#5f5f5f,#787878);background-image:-o-linear-gradient(top,#5f5f5f,#787878);background-image:linear-gradient(to bottom,#5f5f5f,#787878);background-repeat:repeat-x}.btn-group.open .btn.dropdown-toggle.top-selector,.top-selector,.top-selector:active,.top-selector:focus,.top-selector:hover{color:#5f5f5f
;padding:0;text-shadow:none;background-color:transparent;background-image:none;border:0;box-shadow:none;outline:0;width:100%;text-align:left}.dialog-body{padding:20px}h1.title{font-size:1.3em;font-family:marquette-medium,"Helvetica Neue",sans-serif;color:#686868;line-height:17px;display:inline-block;padding:0 10px 0 0}h2.title{text-transform:uppercase;font-size:1.2em;border-top:2px solid #eee;color:#828282}h2.title.chart{margin:10px 0 20px 10px;z-index:101;position:absolute;top:0;left:0;right:0}h3.title{text-transform:uppercase;font-size:1.1em}.sidebar-nav .nav-list{padding:0}.nav-list .nav-header,.sidebar-nav .nav-list>li>a{margin-right:0}.sidebar-nav .nav-list.trans{max-height:100000px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;transition:all .5s ease;display:block;opacity:0}.sidebar-nav .nav-list li a{padding:10px 0 10px 25px;color:#5f5f5f;text-shadow:none;background-color:#eee;font-size:14px;text-transform:uppercase;position:relative}.sidebar-nav .nav-list li a
.org-overview{background-color:#fff;font-family:marquette-light,'Helvetica Neue',Helvetica,Arial,sans-serif}.sidebar-nav .nav-list li a.org-overview:hover{color:#5f5f5f}.sidebar-nav .nav-list:first-child>li{margin:0;height:39px;overflow:hidden}.sidebar-nav .nav-list:first-child>li.active{height:auto;overflow:visible}.sidebar-nav .nav-list:first-child>li>ul>li>a{color:#5f5f5f}.sidebar-nav .nav-list:first-child>li.active>a,.sidebar-nav .nav-list:first-child>li>a:focus,.sidebar-nav .nav-list:first-child>li>a:hover{color:#fff;text-shadow:none;background-color:#00adee;margin:0 0 0 -15px}.sidebar-nav .nav-list:first-child li.active>ul>li>a{background-color:#fff}.sidebar-nav .nav-list li.option>ul{overflow:hidden;opacity:0;height:auto;display:block;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;transition:all .5s ease;max-height:100000px}.sidebar-nav .nav-list li.option.active>ul{opacity:1}.sidebar-nav .nav-list li.active>ul>li a{border-bottom:1px solid #eee;color:#747474;tex
t-transform:none;font-weight:300;padding:10px 0 10px 22px}.sidebar-nav .nav-list li.active>ul>li.active>a,.sidebar-nav .nav-list li.active>ul>li>a:focus,.sidebar-nav .nav-list li.active>ul>li>a:hover{color:#00adee;background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAKCAYAAAB4zEQNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9za
CIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1NkEzQ0Y1MUI0MjIxMUUyODZGN0I5RUE1NjAwQ0I0MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1NkEzQ0Y1MkI0MjIxMUUyODZGN0I5RUE1NjAwQ0I0MCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU2QTNDRjRGQjQyMjExRTI4NkY3QjlFQTU2MDBDQjQwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU2QTNDRjUwQjQyMjExRTI4NkY3QjlFQTU2MDBDQjQwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+poqUzgAAAG1JREFUeNpilC5YwIADqLNgEWQG4kYg9mNCk1AE4sNAXA3iIEuGAPF5ILaECYAkeYB4DhCvBmJ+ZGNAkt+B+CkQ/0W3nAkqWA/EblBFKJIwsA+IDYF4BzZJEHgNxJ5AXAbEv1hwBEA3EK8BCDAAwgoRW2zTv6EAAAAASUVORK5CYII=) no-repeat;background-position:206px 16px;font-family:marquette-medium,'Helvetica Neue',Helvetica,Arial,sans-serif;border-bottom:1px solid #eee;text-shadow:none;-webkit-font-smoothing:antialiased}.sidebar-nav .nav-list li.option ul{list-style:none}.new-tag{border-radius:3px;display:inline-block;font-family:marquette-medium;font-size:.6em;background-color:rgba(26,26,26,.5);co
lor:#fff;padding:3px;height:8px;line-height:8px;position:absolute;right:5px;top:13px}.sidebar-nav .nav-list li:active a{background-color:rgba(255,255,255,.5)}.app-creds dt{font-family:marquette-medium}.intro-container{position:relative;height:auto;-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;transition:all .5s ease-out;overflow:hidden}.sdk-intro{position:absolute;border:1px solid #aaa;background-color:#f4f4f4;-moz-box-shadow:inset 0 0 10px #ccc;-webkit-box-shadow:inset 0 0 10px #ccc;box-shadow:inset 0 4px 10px #ccc;opacity:.4;top:0;left:6px;right:1px;bottom:0;height:auto;overflow:hidden}.sdk-intro-content{position:absolute;padding:10px 40px 10px 10px;top:0;left:6px;right:-20px;bottom:0;height:auto;overflow:auto}.sdk-intro-content .btn.normal{margin:19px 10px 0 0}.keys-creds h2{margin-bottom:-2px}.user-list{padding:0;margin:0;list-style:none;min-height:450px;float:left;width:100%}.user-list li{padding:10px;border-bottom:1px solid #c5c5c5;cursor:pointer}.user-l
ist li .label{margin:0 0 0 22px}.user-list li input{margin:0 10px 0 0}.user-list li.selected{background-color:#eee}#user-panel{margin-top:20px}.user-col{border-right:1px solid #c5c5c5;-moz-box-shadow:inset -27px 1px 6px -27px #b8b8b8;-webkit-box-shadow:inset -27px 1px 6px -27px #b8b8b8;box-shadow:inset -27px 1px 6px -27px #b8b8b8}.user-profile-picture{width:40px;height:40px}.content-page>.well{padding:10px;height:40px}.table-header td{font-weight:800;color:#000}.user-header-title{font-size:13px;font-family:marquette-regular,'Helvetica Neue',Helvetica,Arial,sans-serif}.tabbable>.tab-content{overflow:visible}.button-strip{float:right;margin-bottom:10px}a.notifications-links{color:#1b97d1}.notifications-header{height:50px;background-color:#eee;padding:10px;border-bottom:1px solid #aaa;position:relative;overflow:hidden}.groups-row td.details,.notifications-row td.details,.roles-row td.details,.users-row td.details{line-height:25px!important;border-right:1px solid #e5e5e5}.nav-tabs>li{cu
rsor:pointer}.login-content{position:absolute;top:91px;bottom:0;left:0;right:0;background-color:#fff;padding:9% 0 0 32%}.login-content form{margin:0}.login-content form h1{padding:10px 0 5px 20px}.login-holder{width:450px;border:1px solid #e5e5e5}.login-holder .form-actions{padding-left:30px;margin-bottom:0}.login-holder .form-actions .submit{padding:0 30px 0 0}.login-content .extra-actions{margin-top:10px;padding-left:30px;margin-bottom:0}.login-content .extra-actions .submit{padding:0 30px 0 0}.login-content .extra-actions .submit a{margin-left:3px;margin-right:3px}.signUp-content{position:absolute;top:91px;bottom:0;left:0;right:0;background-color:#fff;padding:9% 0 0 32%}.signUp-content form{margin:0}.signUp-content form h1{padding:10px 0 5px 20px}.signUp-holder{width:450px;border:1px solid #e5e5e5}.signUp-holder .form-actions{margin-bottom:0}.signUp-holder .form-actions .submit{padding:0 30px 0 0}.table.collection-list{border:1px solid #eee}.formatted-json,.formatted-json ul{list
-style:none}.formatted-json .key{font-family:marquette-medium}.formatted-json li{border-bottom:1px solid #eee;margin:3px 0}iframe[seamless]{background-color:transparent;border:0 none transparent;padding:0;overflow:visible;overflow-x:hidden;width:100%}.gravatar20{padding:7px 0 0 10px!important;margin:0;width:30px}#shell-panel *{font-family:monospace}#shell-panel .boxContent{font-family:monospace;font-size:14px;min-height:400px}#shell-panel input{font-family:monospace;overflow:auto;width:90%;margin-top:10px}#shell-panel hr{margin:2px;border-color:#e1e1e1}form input.has-error{-webkit-animation:pulse-red 1s alternate infinite;-moz-animation:pulse-red 1s alternate infinite;border:1px solid rgba(255,3,3,.6)}.validator-error-message{color:#ff0303}@-webkit-keyframes pulse-red{0%{box-shadow:inset 0 0 5px 2px rgba(255,3,3,.1),0 0 5px 2px rgba(255,3,3,.3)}100%{box-shadow:inset 0 0 5px 2px rgba(255,3,3,.3),0 0 5px 2px rgba(255,3,3,.1)}}@-moz-keyframes pulse-red{0%{box-shadow:inset 0 0 5px 2px r
gba(255,3,3,.1),0 0 5px 2px rgba(255,3,3,.3)}100%{box-shadow:inset 0 0 5px 2px rgba(255,3,3,.3),0 0 5px 2px rgba(255,3,3,.1)}}.modal-instructions{padding-top:5px;padding-bottom:5px}.dropdown-menu{width:100%}.modal{width:560px!important}.dropdown-backdrop{position:static}.title.with-icons a{display:inline-block;text-transform:lowercase;font-size:.8em;margin:0 5px 0 0}.span9.tab-content{margin:0}.span9.tab-content .content-page{padding:0 0 0 30px}.button-toolbar,.menu-toolbar{padding:10px 0;margin:0;width:100%}.menu-toolbar{padding:0 0 20px}.menu-toolbar>ul.inline{border-bottom:1px solid #c5c5c5;margin:0}.btn-group .filter-selector,.btn-group .filter-selector:active,.btn-group .filter-selector:focus,.btn-group .filter-selector:hover,.btn-group .filter-title,.btn-group .filter-title:active,.btn-group .filter-title:focus,.btn-group.open .btn.dropdown-toggle.filter-selector,.btn-group.open .btn.dropdown-toggle.filter-title,.btn-group>.filter-selector.btn:first-child,.btn-group>.filter-ti
tle.btn:first-child,.btn.btn-primary,.btn.normal,.modal-footer .btn{color:#fff;padding:3px 9px;text-shadow:none;background-color:#494949;background-image:none;border:1px solid #c5c5c5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;box-shadow:none}ul.inline>li.tab{margin:0;padding:0}li.tab .btn.btn-primary{background-color:#eee;border:0;color:#494949;box-shadow:none;margin:0 -1px -1px -1px;padding:3px 19px 3px 16px;border-bottom:1px solid #c5c5c5}ul.inline>li.tab.selected{margin:0 0 -1px 0;border-bottom:1px solid #fff}li.tab.selected .btn.btn-primary.toolbar{color:#494949;border-left:1px solid #c5c5c5;border-right:1px solid #c5c5c5;border-top:1px solid #c5c5c5;border-bottom:0;background-color:#fff}li.tab.selected .btn-content{text-decoration:none;color:#494949}.btn-group.compare .filter-selector.btn:first-child,.btn.btn-primary.toolbar{color:#494949;background-color:#f1f1f1}li.selected
.btn.btn-primary.toolbar{color:#fff;border:1px solid #00adee;background-color:#00adee}.btn.cancel,.btn.cancel:hover,.btn.normal.white,.btn.normal.white:hover{background-color:#fff;color:#5f5f5f}.btn-group .filter-selector:active,.btn-group .filter-title:hover,.btn-group.selected .filter-selector,.btn-group.selected>.filter-selector.btn:first-child,.btn.btn-primary:active,.btn.btn-primary:hover,.btn.normal:hover,.modal-footer .btn:active,.modal-footer .btn:hover{color:#fff;border:1px solid #00adee;background-color:#00adee}.btn-group .filter-selector .caret{margin:8px 0 0 10px;border-top:4px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent}.btn-group.header-button{margin:4px 0 0;text-transform:none}.page-filters{padding:0;margin:10px 0}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;z-index:102}.modal{position:fixed;top:10%;left:50%;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.3)
;*border:1px solid #999;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,.3);box-shadow:0 3px 7px rgba(0,0,0,.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:0}.modal.fade{z-index:-200}.modal.fade.in{z-index:1050}.auto-update-container{padding:10px 0 0}.auto-updates{margin:0 10px 0 0}.super-help{font-size:9pt;vertical-align:super}.help_tooltip{font-size:9pt;text-transform:none}.helpButton{font-family:Helvetica,Arial,sans-serif;font-size:13px;font-weight:300;padding:5px 8px;text-align:center;vertical-align:middle;color:#fff;border:1px solid #fff;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:#00adee;width:110px;outline:0}.helpButton:hover{cursor:pointer;background-color:#fff;color:#333;-webkit-transition:background-color .1s;-moz-transition:background-color .1s;-o-transition:background-color .1s;t
ransition:background-color .1s}.helpButtonClicked{background-color:#fff;color:#333;outline:0}.introjs-overlay{background:0 0;filter:none;-ms-filter:"alpha(Opacity=20)";filter:alpha(opacity=20);background-color:#fff;opacity:.2}.introjs-helperLayer{border-radius:0;box-shadow:none;border:1px solid rgba(0,0,0,.25)}.introjs-helperNumberLayer{top:-12px;left:-12px;font-family:"Open Sans",Arial,sans-serif;font-weight:400;border:0;filter:none;filter:none;box-shadow:none}.introjs-arrow{border:10px solid #fff}.introjs-arrow.top{top:-20px;border-bottom-color:#6dbce3}.introjs-arrow.right{right:-20px;top:20px;border-left-color:#6dbce3}.introjs-arrow.bottom{bottom:-20px;border-top-color:#6dbce3}.introjs-arrow.left{left:-20px;top:20px;border-right-color:#6dbce3}.introjs-arrow:before{border:10px solid #fff;content:'';position:absolute}.introjs-arrow.top:before{top:-8px;left:-10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:#F0F8FC;border-left-color:transparent}.in
trojs-arrow.right:before{right:-7px;top:-10px;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:#F0F8FC}.introjs-arrow.bottom:before{bottom:-9px;left:-10px;border-top-color:#F0F8FC;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.introjs-arrow.left:before{left:-7px;top:-10px;border-top-color:transparent;border-right-color:#F0F8FC;border-bottom-color:transparent;border-left-color:transparent}.introjs-tooltip{background-color:#F0F8FC;border-radius:0;border:1px solid #6dbce3;box-shadow:0 1px 7px rgba(0,0,0,.3)}.introjs-button{text-shadow:none;font:12px/normal sans-serif;color:#1f77a3;background-color:#F0F8FC;background-image:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:1px solid #d4d4d4}.introjs-button:hover{font-family:"Open Sans",Arial,sans-serif}.introjs-button:active,.introjs-button:focus{text-decoration:none;outline:0}.introjs-skipbutton{color:
#1f77a3;text-decoration:none;font-family:"Open Sans",Arial,sans-serif;margin-right:32px;border:1px solid #6dbce3}.introjs-nextbutton{text-decoration:none;font-family:"Open Sans",Arial,sans-serif;width:40px;margin-left:3px}.introjs-prevbutton{text-decoration:none;font-family:"Open Sans",Arial,sans-serif;width:40px}.introjs-nextbutton,.introjs-nextbutton:active,.introjs-nextbutton:focus,.introjs-nextbutton:hover{background-image:url(../img/introjs_arrow_step_next.png);background-position:45px 5px;background-repeat:no-repeat;text-align:left;border:1px solid #6dbce3}.introjs-prevbutton,.introjs-prevbutton:active,.introjs-prevbutton:focus,.introjs-prevbutton:hover{background-image:url(../img/introjs_arrow_step_prev.png);background-position:2px 5px;background-repeat:no-repeat;text-align:right;border:1px solid #6dbce3}.introjs-nextbutton.introjs-disabled,.introjs-nextbutton.introjs-disabled:active,.introjs-nextbutton.introjs-disabled:focus,.introjs-nextbutton.introjs-disabled:hover{backgro
und-image:url(../img/introjs_arrow_step_next_disabled.png);background-position:48px 5px;background-repeat:no-repeat;text-align:left;border:1px solid #d4d4d4}.introjs-prevbutton.introjs-disabled,.introjs-prevbutton.introjs-disabled:active,.introjs-prevbutton.introjs-disabled:focus,.introjs-prevbutton.introjs-disabled:hover{background-image:url(../img/introjs_arrow_step_prev_disabled.png);background-position:2px 5px;background-repeat:no-repeat;text-align:right;border:1px solid #d4d4d4}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:gray;background-color:#F0F8FC}.introjs-tooltiptext{font-size:13px;line-height:19px}.introjstooltipheader{font-size:13px;line-height:19px;font-family:marquette-medium,'Helvetica Neue',Helvetica,Arial,sans-serif}.introjs-tooltip{min-width:210px;max-width:450px}
\ No newline at end of file
[02/23] incubator-usergrid git commit: Minor tweaks to comments.
Posted by sn...@apache.org.
Minor tweaks to comments.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/5bdea9c0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/5bdea9c0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/5bdea9c0
Branch: refs/heads/two-dot-o
Commit: 5bdea9c0d2ba7642dd94205779abb9ac8650e1b8
Parents: 4bd1115
Author: Dave Johnson <dm...@apigee.com>
Authored: Thu Jun 25 16:16:01 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Thu Jun 25 16:16:01 2015 -0400
----------------------------------------------------------------------
.../org/apache/usergrid/tools/ExportAdmins.java | 25 +++++++++++++++-----
.../org/apache/usergrid/tools/ImportAdmins.java | 21 ++++++++++++----
2 files changed, 35 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5bdea9c0/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
index f5d1b1d..d3d6371 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ExportAdmins.java
@@ -14,11 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.usergrid.tools;
-import au.com.bytecode.opencsv.CSVWriter;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import org.apache.commons.cli.CommandLine;
@@ -26,7 +24,10 @@ import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.usergrid.management.UserInfo;
-import org.apache.usergrid.persistence.*;
+import org.apache.usergrid.persistence.Entity;
+import org.apache.usergrid.persistence.EntityManager;
+import org.apache.usergrid.persistence.Query;
+import org.apache.usergrid.persistence.Results;
import org.apache.usergrid.persistence.Results.Level;
import org.apache.usergrid.persistence.cassandra.CassandraService;
import org.apache.usergrid.utils.StringUtils;
@@ -34,7 +35,6 @@ import org.codehaus.jackson.JsonGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.FileWriter;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
@@ -43,9 +43,22 @@ import static org.apache.usergrid.persistence.cassandra.CassandraService.MANAGEM
/**
- * Export Admin Users and metadata including organizations.
+ * Export Admin Users and metadata including organizations and passwords.
*
- * java -jar usergrid-tools.jar ExportAdmins
+ * Usage Example:
+ *
+ * java -Xmx8000m -Dlog4j.configuration=file:/home/me/log4j.properties -classpath . \
+ * -jar usergrid-tools-1.0.2.jar ImportAdmins -writeThreads 100 -auditThreads 100 \
+ * -host casshost -inputDir=/home/me/export-data
+ *
+ * If you want to provide any property overrides, put properties file named usergrid-custom-tools.properties
+ * in the same directory where you run the above command. For example, you might want to set the Cassandra
+ * client threads and export from a specific set of keyspaces:
+ *
+ * cassandra.connections=110
+ * cassandra.system.keyspace=My_Usergrid
+ * cassandra.application.keyspace=My_Usergrid_Applications
+ * cassandra.lock.keyspace=My_Usergrid_Locks
*/
public class ExportAdmins extends ExportingToolBase {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5bdea9c0/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
index 857e97e..39384e6 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/ImportAdmins.java
@@ -48,11 +48,22 @@ import static org.apache.usergrid.persistence.cassandra.CassandraService.MANAGEM
/**
- * Usage example:
+ * Import Admin Users and metadata including organizations and passwords.
*
- * java -Xmx8000m -Dlog4j.configuration=file:/home/dmjohnson/import-admins/log4j.properties -classpath . \
- * -jar usergrid-tools-1.0.2.jar ImportAdmins -writeThreads 100 -auditThreads 100 -host cca03eadn \
- * -inputDir=/home/dmjohnson/export-admins/exported > import3.log 2>&1 &
+ * Usage Example:
+ *
+ * java -Xmx8000m -Dlog4j.configuration=file:/home/me/log4j.properties -classpath . \
+ * -jar usergrid-tools-1.0.2.jar ImportAdmins -writeThreads 100 -auditThreads 100 \
+ * -host casshost -inputDir=/home/me/import-data
+ *
+ * If you want to provide any property overrides, put properties file named usergrid-custom-tools.properties
+ * in the same directory where you run the above command. For example, you might want to set the Cassandra
+ * client threads and import to a specific set of keyspaces:
+ *
+ * cassandra.connections=110
+ * cassandra.system.keyspace=My_Other_Usergrid
+ * cassandra.application.keyspace=My_Other_Usergrid_Applications
+ * cassandra.lock.keyspace=My_Other_Usergrid_Locks
*/
public class ImportAdmins extends ToolBase {
@@ -651,7 +662,7 @@ public class ImportAdmins extends ToolBase {
if (entityProps == null) {
logger.warn("Reading from admin import queue was null!");
- Thread.sleep(1000);
+ Thread.sleep( 1000 );
continue;
}