/* * Copyright 2015-2016 OpenCB * * 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. */ package org.opencb.opencga.app.cli.admin; import org.opencb.commons.datastore.core.DataStoreServerAddress; import org.opencb.commons.datastore.mongodb.MongoDataStoreManager; import org.opencb.opencga.analysis.demo.AnalysisDemo; import org.opencb.opencga.catalog.managers.CatalogManager; import org.opencb.opencga.catalog.exceptions.CatalogException; import org.opencb.opencga.catalog.monitor.MonitorService; import org.opencb.opencga.catalog.utils.CatalogDemo; import org.opencb.opencga.storage.core.exceptions.StorageEngineException; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by imedina on 02/03/15. */ public class CatalogCommandExecutor extends AdminCommandExecutor { private AdminCliOptionsParser.CatalogCommandOptions catalogCommandOptions; public CatalogCommandExecutor(AdminCliOptionsParser.CatalogCommandOptions catalogCommandOptions) { super(catalogCommandOptions.commonOptions); this.catalogCommandOptions = catalogCommandOptions; } @Override public void execute() throws Exception { logger.debug("Executing variant command line"); String subCommandString = catalogCommandOptions.getParsedSubCommand(); switch (subCommandString) { case "demo": demo(); break; case "install": install(); break; case "delete": delete(); break; case "index": index(); break; case "daemon": daemons(); break; default: logger.error("Subcommand not valid"); break; } } private void demo() throws CatalogException, StorageEngineException, IOException, URISyntaxException { if (catalogCommandOptions.demoCatalogCommandOptions.prefix != null) { configuration.setDatabasePrefix(catalogCommandOptions.demoCatalogCommandOptions.prefix); } else { configuration.setDatabasePrefix("demo"); } configuration.setOpenRegister(true); configuration.getAdmin().setPassword("demo"); CatalogDemo.createDemoDatabase(configuration, catalogCommandOptions.demoCatalogCommandOptions.force); CatalogManager catalogManager = new CatalogManager(configuration); sessionId = catalogManager.login("user1", "user1_pass", "localhost").first().getId(); AnalysisDemo.insertPedigreeFile(catalogManager, 6L, Paths.get(this.appHome).resolve("examples/20130606_g1k.ped"), sessionId); } private void install() throws CatalogException { if (catalogCommandOptions.installCatalogCommandOptions.databaseUser != null) { configuration.getCatalog().getDatabase().setUser(catalogCommandOptions.installCatalogCommandOptions.databaseUser); } if (catalogCommandOptions.installCatalogCommandOptions.databasePassword != null) { configuration.getCatalog().getDatabase().setPassword(catalogCommandOptions.installCatalogCommandOptions.databasePassword); } if (catalogCommandOptions.installCatalogCommandOptions.prefix != null) { configuration.setDatabasePrefix(catalogCommandOptions.installCatalogCommandOptions.prefix); } if (catalogCommandOptions.installCatalogCommandOptions.databaseHost != null) { configuration.getCatalog().getDatabase().setHosts(Collections.singletonList(catalogCommandOptions.installCatalogCommandOptions .databaseHost)); } if (catalogCommandOptions.commonOptions.adminPassword != null) { configuration.getAdmin().setPassword(catalogCommandOptions.commonOptions.adminPassword); } if (configuration.getAdmin().getPassword() == null || configuration.getAdmin().getPassword().isEmpty()) { throw new CatalogException("No admin password found. Please, insert your password."); } CatalogManager catalogManager = new CatalogManager(configuration); logger.info("\nInstalling database {} in {}\n", catalogManager.getCatalogDatabase(), configuration.getCatalog().getDatabase() .getHosts()); catalogManager.installCatalogDB(); } /** * Checks if the database exists. * * @return true if exists. */ private boolean checkDatabaseExists(String database) { List<DataStoreServerAddress> dataStoreServerAddresses = new ArrayList<>(); for (String host : configuration.getCatalog().getDatabase().getHosts()) { if (host.contains(":")) { String[] split = host.split(":"); Integer port = Integer.valueOf(split[1]); dataStoreServerAddresses.add(new DataStoreServerAddress(split[0], port)); } else { dataStoreServerAddresses.add(new DataStoreServerAddress(host, 27017)); } } MongoDataStoreManager mongoDataStoreManager = new MongoDataStoreManager(dataStoreServerAddresses); // return mongoDataStoreManager.exists(catalogConfiguration.getDatabase().getDatabase()); // return mongoDataStoreManager.exists(catalogConfiguration.getDatabase().getDatabase()); return mongoDataStoreManager.exists(database); } private void delete() throws CatalogException { if (catalogCommandOptions.deleteCatalogCommandOptions.databaseUser != null) { configuration.getCatalog().getDatabase().setUser(catalogCommandOptions.deleteCatalogCommandOptions.databaseUser); } if (catalogCommandOptions.deleteCatalogCommandOptions.databasePassword != null) { configuration.getCatalog().getDatabase().setPassword(catalogCommandOptions.deleteCatalogCommandOptions.databasePassword); } if (catalogCommandOptions.deleteCatalogCommandOptions.prefix != null) { configuration.setDatabasePrefix(catalogCommandOptions.deleteCatalogCommandOptions.prefix); } if (catalogCommandOptions.deleteCatalogCommandOptions.databaseHost != null) { configuration.getCatalog().getDatabase() .setHosts(Collections.singletonList(catalogCommandOptions.deleteCatalogCommandOptions.databaseHost)); } if (catalogCommandOptions.commonOptions.adminPassword != null) { configuration.getAdmin().setPassword(catalogCommandOptions.commonOptions.adminPassword); } if (configuration.getAdmin().getPassword() == null || configuration.getAdmin().getPassword().isEmpty()) { throw new CatalogException("No admin password found. Please, insert your password."); } CatalogManager catalogManager = new CatalogManager(configuration); if (!checkDatabaseExists(catalogManager.getCatalogDatabase())) { throw new CatalogException("The database " + catalogManager.getCatalogDatabase() + " does not exist."); } // System.out.println("\nDeleting " + catalogConfiguration.getDatabase().getDatabase() + " from " // + catalogConfiguration.getDatabase().getHosts() + "\n"); logger.info("\nDeleting database {} from {}\n", catalogManager.getCatalogDatabase(), configuration.getCatalog().getDatabase() .getHosts()); catalogManager.deleteCatalogDB(false); } private void index() throws CatalogException { if (catalogCommandOptions.indexCatalogCommandOptions.databaseUser != null) { configuration.getCatalog().getDatabase().setUser(catalogCommandOptions.indexCatalogCommandOptions.databaseUser); } if (catalogCommandOptions.indexCatalogCommandOptions.databasePassword != null) { configuration.getCatalog().getDatabase().setPassword(catalogCommandOptions.indexCatalogCommandOptions.databasePassword); } if (catalogCommandOptions.indexCatalogCommandOptions.prefix != null) { configuration.setDatabasePrefix(catalogCommandOptions.indexCatalogCommandOptions.prefix); } if (catalogCommandOptions.indexCatalogCommandOptions.databaseHost != null) { configuration.getCatalog().getDatabase() .setHosts(Collections.singletonList(catalogCommandOptions.indexCatalogCommandOptions.databaseHost)); } if (catalogCommandOptions.commonOptions.adminPassword != null) { configuration.getAdmin().setPassword(catalogCommandOptions.commonOptions.adminPassword); } if (configuration.getAdmin().getPassword() == null || configuration.getAdmin().getPassword().isEmpty()) { throw new CatalogException("No admin password found. Please, insert your password."); } CatalogManager catalogManager = new CatalogManager(configuration); if (!checkDatabaseExists(catalogManager.getCatalogDatabase())) { throw new CatalogException("The database " + catalogManager.getCatalogDatabase() + " does not exist."); } // System.out.println("\nChecking and installing non-existent indexes in" + catalogConfiguration.getDatabase().getDatabase() + " in " // + catalogConfiguration.getDatabase().getHosts() + "\n"); logger.info("\nChecking and installing non-existent indexes in {} in {}\n", catalogManager.getCatalogDatabase(), configuration.getCatalog().getDatabase().getHosts()); catalogManager.getUserManager().validatePassword("admin", configuration.getAdmin().getPassword(), true); catalogManager.installIndexes(); } private void daemons() throws Exception { if (catalogCommandOptions.daemonCatalogCommandOptions.start) { // Server crated and started MonitorService monitorService = new MonitorService(catalogCommandOptions.daemonCatalogCommandOptions.commonOptions.adminPassword, configuration, appHome); monitorService.start(); monitorService.blockUntilShutdown(); logger.info("Shutting down OpenCGA Storage REST server"); } if (catalogCommandOptions.daemonCatalogCommandOptions.stop) { Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://localhost:" + configuration.getMonitor().getPort()) .path("opencga") .path("monitor") .path("admin") .path("stop"); Response response = target.request().get(); logger.info(response.toString()); } } }