package mil.nga.giat.geowave.datastore.hbase.cli; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; import com.beust.jcommander.Parameters; import mil.nga.giat.geowave.core.cli.annotations.GeowaveOperation; import mil.nga.giat.geowave.core.cli.api.Command; import mil.nga.giat.geowave.core.cli.api.DefaultOperation; import mil.nga.giat.geowave.core.cli.api.OperationParams; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.store.CloseableIterator; import mil.nga.giat.geowave.core.store.adapter.statistics.DataStatistics; import mil.nga.giat.geowave.core.store.adapter.statistics.DataStatisticsStore; import mil.nga.giat.geowave.core.store.operations.remote.options.DataStorePluginOptions; import mil.nga.giat.geowave.core.store.operations.remote.options.StoreLoader; @GeowaveOperation(name = "combinestats", parentOperation = HBaseSection.class) @Parameters(commandDescription = "Combine all statistics in HBase namespace") public class CombineStatisticsCommand extends DefaultOperation implements Command { @Parameter(description = "<storename> <adapter id>") private List<String> parameters = new ArrayList<String>(); private DataStorePluginOptions inputStoreOptions = null; /** * Prep the driver & run the operation. */ @Override public void execute( OperationParams params ) { // Ensure we have all the required arguments if (parameters.size() != 2) { throw new ParameterException( "Requires arguments: <storename> <adapter id>"); } String inputStoreName = parameters.get(0); String adapterId = parameters.get(1); // Attempt to load input store. if (inputStoreOptions == null) { StoreLoader inputStoreLoader = new StoreLoader( inputStoreName); if (!inputStoreLoader.loadFromConfig(getGeoWaveConfigFile(params))) { throw new ParameterException( "Cannot find store name: " + inputStoreLoader.getStoreName()); } inputStoreOptions = inputStoreLoader.getDataStorePlugin(); } // Get all statistics, remove all statistics, then re-add DataStatisticsStore store = inputStoreOptions.createDataStatisticsStore(); CloseableIterator<DataStatistics<?>> stats = store.getDataStatistics(new ByteArrayId( adapterId)); // Clear all existing stats store.removeAllStatistics(new ByteArrayId( adapterId)); // Re-insert while (stats.hasNext()) { store.incorporateStatistics(stats.next()); } } public List<String> getParameters() { return parameters; } public void setParameters( String storeName, String adapterId ) { parameters = Arrays.asList( storeName, adapterId); } public DataStorePluginOptions getInputStoreOptions() { return inputStoreOptions; } public void setInputStoreOptions( DataStorePluginOptions inputStoreOptions ) { this.inputStoreOptions = inputStoreOptions; } }