use of me.retrodaredevil.solarthing.analytics.AnalyticsManager in project solarthing by wildmountainfarms.
the class PVOutputUploadMain method startPVOutputUpload.
// TODO Make this an action for the automation program
@SuppressWarnings({ "SameReturnValue", "deprecation" })
public static int startPVOutputUpload(PVOutputUploadProgramOptions options, CommandOptions commandOptions, File dataDirectory) {
LOGGER.info(SolarThingConstants.SUMMARY_MARKER, "Starting PV Output upload program");
ZoneId zoneId = options.getZoneId();
// Use US local since I (retrodaredevil) am the one debugging
LOGGER.info(SolarThingConstants.SUMMARY_MARKER, "Using time zone: {}", zoneId.getDisplayName(TextStyle.FULL, Locale.US));
LOGGER.info("Using default instance options: " + options.getDefaultInstanceOptions());
DatabaseConfig databaseConfig = ConfigUtil.getDatabaseConfig(options.getDatabase());
DatabaseType databaseType = databaseConfig.getType();
if (databaseType != CouchDbDatabaseSettings.TYPE) {
LOGGER.error(SolarThingConstants.SUMMARY_MARKER, "(Fatal)Only CouchDb can be used for this program type right now!");
return SolarThingConstants.EXIT_CODE_INVALID_CONFIG;
}
CouchDbDatabaseSettings couchDbDatabaseSettings = (CouchDbDatabaseSettings) databaseConfig.getSettings();
SolarThingDatabase database = CouchDbSolarThingDatabase.create(CouchDbUtil.createInstance(couchDbDatabaseSettings.getCouchProperties(), couchDbDatabaseSettings.getOkHttpProperties()));
OkHttpClient client = PVOutputOkHttpUtil.configure(new OkHttpClient.Builder(), options.getApiKey(), options.getSystemId()).addInterceptor(new HttpLoggingInterceptor(LOGGER::debug).setLevel(HttpLoggingInterceptor.Level.BASIC)).build();
Retrofit retrofit = PVOutputRetrofitUtil.defaultBuilder().client(client).build();
PVOutputService service = retrofit.create(PVOutputService.class);
PVOutputHandler handler = new PVOutputHandler(zoneId, options.getRequiredIdentifierMap(), options.getVoltageIdentifierFragmentMatcher(), options.getTemperatureIdentifierFragmentMatcher());
String fromDateString = commandOptions.getPVOutputFromDate();
String toDateString = commandOptions.getPVOutputToDate();
if (fromDateString != null && toDateString != null) {
System.out.println("Starting range upload");
final SimpleDate fromDate;
final SimpleDate toDate;
try {
// TODO Don't use SimpleDateFormat anymore and remove supress warnings for deprecation
fromDate = SimpleDate.fromDate(DATE_FORMAT.parse(fromDateString));
toDate = SimpleDate.fromDate(DATE_FORMAT.parse(toDateString));
} catch (ParseException e) {
e.printStackTrace();
System.err.println("Unable to parser either from date or to date. Use the yyyy-MM-dd format");
return SolarThingConstants.EXIT_CODE_INVALID_OPTIONS;
}
return startRangeUpload(fromDate, toDate, options, database, handler, service, options.getZoneId());
} else if ((fromDateString == null) != (toDateString == null)) {
LOGGER.error(SolarThingConstants.SUMMARY_MARKER, "(Fatal)You need to define both from and to, or define neither to do the normal PVOutput program!");
return SolarThingConstants.EXIT_CODE_INVALID_OPTIONS;
}
AnalyticsManager analyticsManager = new AnalyticsManager(options.isAnalyticsEnabled(), dataDirectory);
analyticsManager.sendStartUp(ProgramType.PVOUTPUT_UPLOAD);
return startRealTimeProgram(options, database, handler, service, options.getZoneId());
}
use of me.retrodaredevil.solarthing.analytics.AnalyticsManager in project solarthing by wildmountainfarms.
the class RequestMain method startRequestProgram.
public static int startRequestProgram(RequestProgramOptions options, File dataDirectory) throws Exception {
LOGGER.info(SolarThingConstants.SUMMARY_MARKER, "Beginning request program");
AnalyticsManager analyticsManager = new AnalyticsManager(options.isAnalyticsEnabled(), dataDirectory);
analyticsManager.sendStartUp(ProgramType.REQUEST);
return startRequestProgram(options, analyticsManager, options.getDataRequesterList(), options.getPeriod(), options.getMinimumWait());
}
use of me.retrodaredevil.solarthing.analytics.AnalyticsManager in project solarthing by wildmountainfarms.
the class OutbackMateMain method connectMate.
@SuppressWarnings("SameReturnValue")
public static int connectMate(MateProgramOptions options, File dataDirectory) throws Exception {
LOGGER.info(SolarThingConstants.SUMMARY_MARKER, "Beginning mate program");
AnalyticsManager analyticsManager = new AnalyticsManager(options.isAnalyticsEnabled(), dataDirectory);
analyticsManager.sendStartUp(ProgramType.MATE);
LOGGER.debug("IO Bundle File: " + options.getIOBundleFile());
IOConfig ioConfig = ConfigUtil.parseIOConfig(options.getIOBundleFile(), OutbackConstants.MATE_CONFIG);
try (ReloadableIOBundle ioBundle = new ReloadableIOBundle(ioConfig::createIOBundle)) {
EnvironmentUpdater[] environmentUpdaterReference = new EnvironmentUpdater[1];
PacketHandlerInit.Result handlersResult = PacketHandlerInit.initHandlers(options, () -> environmentUpdaterReference[0], Collections.singleton(new MateAnalyticsHandler(analyticsManager)));
PacketListReceiverHandlerBundle bundle = handlersResult.getBundle();
List<PacketListReceiver> packetListReceiverList = new ArrayList<>(Arrays.asList(OutbackDuplicatePacketRemover.INSTANCE, new FXEventUpdaterListReceiver(bundle.getEventHandler().getPacketListReceiverAccepter(), options.getFXWarningIgnoreMap()), new MXEventUpdaterListReceiver(bundle.getEventHandler().getPacketListReceiverAccepter()), new FXStatusListUpdater(new DailyIdentifier(options.getZoneId()))));
List<EnvironmentUpdater> environmentUpdaters = new ArrayList<>();
for (DataRequester dataRequester : options.getDataRequesterList()) {
DataRequesterResult result = dataRequester.create(new RequestObject(bundle.getEventHandler().getPacketListReceiverAccepter()));
packetListReceiverList.add(result.getStatusPacketListReceiver());
environmentUpdaters.add(result.getEnvironmentUpdater());
}
final List<CommandProvider<MateCommand>> commandProviders;
if (options.hasCommands()) {
packetListReceiverList.add(new AvailableCommandsListUpdater(options.getCommandInfoList(), false));
Queue<SourcedCommand<MateCommand>> queue = new LinkedList<>();
// if there are no commands, this should remain empty
commandProviders = new ArrayList<>();
final CommandProvider<MateCommand> commandProvider = () -> {
handlersResult.getUpdateCommandActions().run();
return queue.poll();
};
commandProviders.add(commandProvider);
environmentUpdaters.add((source, injectEnvironmentBuilder) -> {
injectEnvironmentBuilder.add(new MateCommandEnvironment(queue));
});
} else {
commandProviders = Collections.emptyList();
}
environmentUpdaterReference[0] = new EnvironmentUpdaterMultiplexer(environmentUpdaters);
packetListReceiverList.add(new DataIdentifiablePacketListChecker());
packetListReceiverList.add(new DaySummaryLogListReceiver());
packetListReceiverList.addAll(bundle.createDefaultPacketListReceivers());
return SolarMain.initReader(requireNonNull(ioBundle.getInputStream()), ioBundle::reload, new MatePacketCreator49(MateProgramOptions.getIgnoreCheckSum(options)), new TimedPacketReceiver(Duration.ofMillis(250), new PacketListReceiverMultiplexer(packetListReceiverList), new MateCommandSender(// if commands aren't allowed, commandProviders will be empty, so this will do nothing
new CommandProviderMultiplexer<>(commandProviders), ioBundle.getOutputStream(), ALLOWED_COMMANDS, new OnMateCommandSent(new PacketListReceiverMultiplexer(bundle.getEventHandler().getPacketListReceiverAccepter(), bundle.getEventHandler().getPacketListReceiverPacker(), bundle.getEventHandler().getPacketListReceiverHandler())))));
}
}
use of me.retrodaredevil.solarthing.analytics.AnalyticsManager in project solarthing by wildmountainfarms.
the class RoverMain method connectRover.
public static int connectRover(RoverProgramOptions options, File dataDirectory) throws Exception {
LOGGER.info(SolarThingConstants.SUMMARY_MARKER, "Beginning rover program");
AnalyticsManager analyticsManager = new AnalyticsManager(options.isAnalyticsEnabled(), dataDirectory);
analyticsManager.sendStartUp(ProgramType.ROVER);
List<DataRequester> dataRequesterList = new ArrayList<>(options.getDataRequesterList());
return doRover(options, analyticsManager, dataRequesterList);
}
Aggregations