in stack/tools/src/main/java/org/apache/usergrid/tools/AppDeleter.java [311:473]
private void handleApp(UUID appId, String orgAppName, boolean deletedApp,
EntityManager em, boolean performDelete, String bucketName,
boolean logEachItem) {
logger.info(logLineSeparator);
logger.info("APPLICATION: {}({}){}", orgAppName, appId.toString(), deletedApp ? " - DELETED" : "");
logger.info(logLineSeparator);
if (performDelete) {
try {
String clientId = managementService.getClientIdForApplication(appId);
String oldClientSecret = managementService.getClientSecretForApplication(appId);
logger.info(logLineSeparator);
logger.info("OLD APP CLIENT ID: {}", clientId);
logger.info("OLD APP CLIENT SECRET: {}", oldClientSecret);
String newClientSecret = managementService.newClientSecretForApplication(appId);
logger.info("NEW APP CLIENT SECRET: {}", newClientSecret);
logger.info(logLineSeparator);
} catch (Exception e) {
logger.error("FAILED TO CHANGE CREDENTIALS FOR APP " + orgAppName + ": " + e.getMessage(), e);
}
}
logger.info(logLineSeparator);
logger.info("FINDING APP DICTIONARIES");
logger.info(logLineSeparator);
// check for entity dictionaries
try {
EntityManager rootEm = emf.getEntityManager( emf.getManagementAppId() );
Application application = em.getApplication();
//logger.info("APP: {}", application.toString());
for ( String dictionary : rootEm.getDictionaries( application ) ) {
try {
//logger.info("DICTIONARY NAME: {}", dictionary);
Map<Object, Object> dictMap = rootEm.getDictionaryAsMap(application, dictionary, false);
for (Object key : dictMap.keySet()) {
appDictionaryEntriesFound.incrementAndGet();
if (logEachItem) {
logger.info("APP DICTIONARY {} ENTRY: ({})", dictionary, key.toString());
}
}
}
catch (Exception e) {
// ignore
}
}
}
catch (Exception e) {
logger.error("APP DICTIONARY CHECK FOR APP " + orgAppName + " FAILED: " + e.getMessage(), e);
}
logger.info(logLineSeparator);
logger.info("APP DICTIONARIES {} DONE! App Dictionary Entries found: {}", performDelete ? "DELETE" : "LIST", appDictionaryEntriesFound.get());
logger.info(logLineSeparator);
logger.info(logLineSeparator);
logger.info("FINDING ENTITIES");
logger.info(logLineSeparator);
entitiesFound.set(0);
Observable<String> collectionsObservable = Observable.create( new CollectionsObservable( em ) );
collectionsObservable.flatMap( collection -> {
return Observable.create( new EntityObservable( em, collection ) )
.doOnNext( new EntityDeleteAction(em, performDelete, logEachItem) ).subscribeOn(deleteScheduler);
} ).doOnCompleted( new EntityDeleteWrapUpAction(performDelete) ).toBlocking().lastOrDefault(null);
logger.info(logLineSeparator);
logger.info("FINDING ASSETS");
logger.info(logLineSeparator);
assetsFound.set(0);
ObjectListing listing = null;
try {
listing = s3Client.listObjects(bucketName, appId.toString() + "/");
}
catch (Exception e) {
logger.error("FAILED TO RETRIEVE ASSETS: ", e);
}
if (listing != null) {
for (S3ObjectSummary summary : listing.getObjectSummaries()) {
String assetKey = summary.getKey();
assetsFound.getAndIncrement();
if (logEachItem) {
logger.info("ASSET: {}", assetKey);
}
if (performDelete) {
try {
s3Client.deleteObject(bucketName, assetKey);
}
catch (Exception e) {
logger.error("FAILED TO DELETE ASSET: " + assetKey, e);
}
}
}
}
logger.info(logLineSeparator);
logger.info("Asset {} DONE! Assets: {}", performDelete ? "DELETE" : "LIST", assetsFound.get());
logger.info(logLineSeparator);
// Elasticsearch docs
logger.info(logLineSeparator);
logger.info("FINDING ES DOCS");
logger.info(logLineSeparator);
esDocsFound.set(0);
ApplicationScope applicationScope = new ApplicationScopeImpl(new SimpleId(appId, "application"));
// IndexLocationStrategy strategy = ilsf.getIndexLocationStrategy(applicationScope);
QueryBuilder qb = QueryBuilders.matchQuery("applicationId", "appId(" + appId.toString() + ",application)");
SearchResponse scrollResponse = esProvider.getClient()
.prepareSearch(ALL_INDEXES)
.setScroll(SCROLL_TIMEOUT)
.setSearchType(SearchType.SCAN)
.setQuery(qb)
.setSize(SCROLL_SIZE)
.setNoFields()
.execute().actionGet();
//logger.info(scrollResponse.toString());
while (true) {
BulkRequestBuilder bulkRequest = null;
if (performDelete) {
bulkRequest = esProvider.getClient().prepareBulk();
}
boolean docsToDelete = false;
for (SearchHit hit : scrollResponse.getHits().getHits()) {
esDocsFound.getAndIncrement();
if (logEachItem) {
logger.info("ES DOC: {}", hit.getId());
}
if (performDelete) {
docsToDelete = true;
bulkRequest.add(esProvider.getClient()
.prepareDelete(hit.getIndex(), hit.getType(), hit.getId()));
}
}
if (docsToDelete) {
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
if (bulkResponse.hasFailures()) {
throw new RuntimeException(bulkResponse.buildFailureMessage());
}
}
scrollResponse = esProvider.getClient().prepareSearchScroll(scrollResponse.getScrollId())
.setScroll(SCROLL_TIMEOUT).execute().actionGet();
//logger.info(scrollResponse.toString());
if (scrollResponse.getHits().getHits().length == 0) {
break;
}
}
logger.info(logLineSeparator);
logger.info("ES Doc {} DONE! ES Docs: {}", performDelete ? "DELETE" : "LIST", esDocsFound.get());
logger.info(logLineSeparator);
}