package gov.nysenate.openleg.script; import gov.nysenate.openleg.config.Environment; import gov.nysenate.openleg.processor.DataProcessor; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Options; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.stereotype.Component; @Component public class ProcessDataCLI extends BaseScript { private static final Logger logger = LoggerFactory.getLogger(ProcessDataCLI.class); @Autowired private Environment env; @Autowired private DataProcessor dataProcessor; public static void main(String[] args) throws Exception { SCRIPT_NAME = ProcessDataCLI.class.getName(); AnnotationConfigApplicationContext ctx = init(); ProcessDataCLI processDataCLI = ctx.getBean(ProcessDataCLI.class); CommandLine cmd = getCommandLine(processDataCLI.getOptions(), args); processDataCLI.execute(cmd); shutdown(ctx); } protected Options getOptions() { Options options = new Options(); options.addOption("c", "collate", false, "Collate files from the incoming data directories."); options.addOption("i", "ingest", false, "Process all pending files."); options.addOption(null, "batch-sobis", false, "Queue updates from SOBI files to minimize the number of writes."); options.addOption(null, "disable-indexing", false, "Disables updates to search indices during ingest if set."); options.addOption("h", "help", false, "Display help"); return options; } @Override protected void execute(CommandLine opts) throws Exception { if (opts.hasOption("help")) { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp(SCRIPT_NAME, "\nThis CLI is used for collating and processing incoming data. " + "By default, any incoming files will be collated and then ingested. (i.e. -ci) \n", getOptions(), "", true); return; } if (!env.isProcessingEnabled()) { logger.error("Data processing is disabled! Set 'data.process.enabled' to 'true' in your app.properties."); return; } boolean collate = opts.hasOption("collate"); boolean ingest = opts.hasOption("ingest"); if (opts.hasOption("disable-indexing")) { env.setElasticIndexing(false); } env.setSobiBatchEnabled(opts.hasOption("batch-sobis")); logger.info("Data processing settings: \n" + "Sobi Batch Processing: {}\n" + "Search indexing: {}\n", env.isSobiBatchEnabled(), env.isElasticIndexing()); if (!collate && !ingest) { dataProcessor.run(this.getClass().getName() + " script"); } else { if(collate) { dataProcessor.collate(); } if(ingest) { dataProcessor.ingest(); } } } }