package com.dingzhuo.compute.engine;
|
|
import akka.actor.ActorSystem;
|
import akka.cluster.sharding.ClusterSharding;
|
import akka.cluster.sharding.ClusterShardingSettings;
|
import com.dingzhuo.compute.engine.actor.alarm.AlarmTimerActor;
|
import com.dingzhuo.compute.engine.actor.alarm.LoadAlarmActor;
|
import com.dingzhuo.compute.engine.actor.alarm.PeriodAlarmActor;
|
import com.dingzhuo.compute.engine.actor.alarm.RealtimeAlarmActor;
|
import com.dingzhuo.compute.engine.actor.device.DeviceStatusActor;
|
import com.dingzhuo.compute.engine.actor.device.DeviceStatusTimerActor;
|
import com.dingzhuo.compute.engine.actor.device.LoadDeviceStatusActor;
|
import com.dingzhuo.compute.engine.actor.indexcalc.CalculationIndexActor;
|
import com.dingzhuo.compute.engine.actor.indexcalc.LoadIndexActor;
|
import com.dingzhuo.compute.engine.actor.indexcalc.SavePeriodActor;
|
import com.dingzhuo.compute.engine.actor.indexcalc.TimerActor;
|
import com.dingzhuo.compute.engine.actor.monitor.RecastDataActor;
|
import com.dingzhuo.compute.engine.config.CalcMessageExtractor;
|
import com.dingzhuo.compute.engine.config.EngineArgOption;
|
import com.dingzhuo.compute.engine.utils.SpringAkkaExtension;
|
import org.kohsuke.args4j.CmdLineException;
|
import org.kohsuke.args4j.CmdLineParser;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.boot.CommandLineRunner;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* @author fanxinfu
|
*/
|
@Component
|
public class ComputeEngineRunner implements CommandLineRunner {
|
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
private final ActorSystem actorSystem;
|
private final SpringAkkaExtension akkaExt;
|
|
public ComputeEngineRunner(
|
ActorSystem actorSystem, SpringAkkaExtension springAkkaExtension) {
|
this.actorSystem = actorSystem;
|
this.akkaExt = springAkkaExtension;
|
}
|
|
@Override
|
public void run(String... args) {
|
EngineArgOption argOption = new EngineArgOption();
|
CmdLineParser cmdLineParser = new CmdLineParser(argOption);
|
if (args.length == 0) {
|
showHelp(cmdLineParser);
|
return;
|
}
|
|
try {
|
cmdLineParser.parseArgument(args);
|
} catch (CmdLineException e) {
|
logger.error(e.getLocalizedMessage());
|
}
|
|
if (argOption.isCalc()) {
|
actorSystem
|
.actorOf(akkaExt.props(CalculationIndexActor.ACTOR_NAME),
|
CalculationIndexActor.ACTOR_NAME);
|
actorSystem.actorOf(akkaExt.props(TimerActor.ACTOR_NAME), TimerActor.ACTOR_NAME);
|
actorSystem.actorOf(akkaExt.props(LoadIndexActor.ACTOR_NAME), LoadIndexActor.ACTOR_NAME);
|
actorSystem.actorOf(akkaExt.props(SavePeriodActor.ACTOR_NAME), SavePeriodActor.ACTOR_NAME);
|
}
|
|
if (argOption.isAlarm()) {
|
actorSystem.actorOf(akkaExt.props(LoadAlarmActor.ACTOR_NAME), LoadAlarmActor.ACTOR_NAME);
|
actorSystem
|
.actorOf(akkaExt.props(RealtimeAlarmActor.ACTOR_NAME), RealtimeAlarmActor.ACTOR_NAME);
|
actorSystem.actorOf(akkaExt.props(PeriodAlarmActor.ACTOR_NAME), PeriodAlarmActor.ACTOR_NAME);
|
actorSystem.actorOf(akkaExt.props(AlarmTimerActor.ACTOR_NAME), AlarmTimerActor.ACTOR_NAME);
|
}
|
|
if (argOption.isDevice()) {
|
actorSystem.actorOf(akkaExt.props(LoadDeviceStatusActor.ACTOR_NAME),
|
LoadDeviceStatusActor.ACTOR_NAME);
|
actorSystem.actorOf(akkaExt.props(DeviceStatusTimerActor.ACTOR_NAME),
|
DeviceStatusTimerActor.ACTOR_NAME);
|
actorSystem
|
.actorOf(akkaExt.props(DeviceStatusActor.ACTOR_NAME), DeviceStatusActor.ACTOR_NAME);
|
}
|
|
if (argOption.isRecast()) {
|
actorSystem.actorOf(akkaExt.props(RecastDataActor.ACTOR_NAME), RecastDataActor.ACTOR_NAME);
|
}
|
}
|
|
private void showHelp(CmdLineParser cmdLineParser) {
|
System.out.println("参数说明:");
|
cmdLineParser.printUsage(System.out);
|
}
|
}
|