package io.lumify.tools.format;
import com.altamiracorp.bigtable.model.ModelSession;
import com.google.inject.Inject;
import io.lumify.core.cmdline.CommandLineBase;
import io.lumify.core.model.user.AuthorizationRepository;
import io.lumify.core.util.LumifyLogger;
import io.lumify.core.util.LumifyLoggerFactory;
import io.lumify.core.util.ModelUtil;
import org.apache.commons.cli.CommandLine;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.securegraph.GraphConfiguration;
import org.securegraph.elasticsearch.ElasticSearchSearchIndexBase;
import org.securegraph.elasticsearch.ElasticSearchSearchIndexConfiguration;
import java.util.Map;
public class FormatLumify extends CommandLineBase {
private static final LumifyLogger LOGGER = LumifyLoggerFactory.getLogger(FormatLumify.class);
private ModelSession modelSession;
private AuthorizationRepository authorizationRepository;
public static void main(String[] args) throws Exception {
int res = new FormatLumify().run(args);
if (res != 0) {
System.exit(res);
}
}
@Override
protected int run(CommandLine cmd) throws Exception {
ModelUtil.deleteTables(modelSession, getUser());
getWorkQueueRepository().format();
// TODO provide a way to delete the graph and it's search index
// graph.delete(getUser());
LOGGER.debug("BEGIN remove all authorizations");
for (String auth : authorizationRepository.getGraphAuthorizations()) {
LOGGER.debug("removing auth %s", auth);
authorizationRepository.removeAuthorizationFromGraph(auth);
}
LOGGER.debug("END remove all authorizations");
getGraph().shutdown();
deleteElasticSearchIndex(getConfiguration().toMap());
return 0;
}
public static void deleteElasticSearchIndex(Map configuration) {
// TODO refactor to pull graph. from some static reference
String indexName = (String) configuration.get("graph." + GraphConfiguration.SEARCH_INDEX_PROP_PREFIX + "." + ElasticSearchSearchIndexConfiguration.CONFIG_INDEX_NAME);
String[] esLocations = ((String) configuration.get("graph." + GraphConfiguration.SEARCH_INDEX_PROP_PREFIX + "." + ElasticSearchSearchIndexConfiguration.CONFIG_ES_LOCATIONS)).split(",");
LOGGER.debug("BEGIN deleting elastic search index: " + indexName);
TransportClient client = new TransportClient();
for (String esLocation : esLocations) {
String[] locationSocket = esLocation.split(":");
String host = locationSocket[0];
String port = locationSocket.length > 1 ? locationSocket[1] : "9300";
client.addTransportAddress(new InetSocketTransportAddress(host, Integer.parseInt(port)));
}
LOGGER.info("index %s exists?", indexName);
IndicesExistsRequest existsRequest = client.admin().indices().prepareExists(indexName).request();
if (client.admin().indices().exists(existsRequest).actionGet().isExists()) {
LOGGER.info("index %s exists... deleting!", indexName);
DeleteIndexResponse response = client.admin().indices().delete(new DeleteIndexRequest(indexName)).actionGet();
if (!response.isAcknowledged()) {
LOGGER.error("Failed to delete elastic search index named %s", indexName);
}
}
LOGGER.debug("END deleting elastic search index: " + indexName);
client.close();
}
@Inject
public void setModelSession(ModelSession modelSession) {
this.modelSession = modelSession;
}
@Inject
public void setAuthorizationRepository(AuthorizationRepository authorizationRepository) {
this.authorizationRepository = authorizationRepository;
}
}