From 07abec1108c69cf1f85ae039066e90f14eaca78a Mon Sep 17 00:00:00 2001 From: "Tyler St. Onge" Date: Fri, 25 Sep 2020 17:39:10 -0400 Subject: added subscription model for reporter actors --- .../scala/com/tylerstonge/honeypot/Supervisor.scala | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/main/scala/com/tylerstonge/honeypot/Supervisor.scala') diff --git a/src/main/scala/com/tylerstonge/honeypot/Supervisor.scala b/src/main/scala/com/tylerstonge/honeypot/Supervisor.scala index 25f1154..a6551e7 100644 --- a/src/main/scala/com/tylerstonge/honeypot/Supervisor.scala +++ b/src/main/scala/com/tylerstonge/honeypot/Supervisor.scala @@ -5,7 +5,8 @@ import java.nio.file.Paths import akka.actor.{Actor, Props} import akka.event.{Logging, LoggingAdapter} import com.tylerstonge.honeypot.ftp.FtpListener -import com.tylerstonge.honeypot.messages.MStartComponent +import com.tylerstonge.honeypot.messages.{MStartComponent, MStartReporter} +import com.tylerstonge.honeypot.reporter.LogReporter import org.typelevel.jawn.ast.{JArray, JParser} @@ -15,6 +16,9 @@ class Supervisor extends Actor { override def preStart: Unit = { val cfg = JParser.parseFromFile(Paths.get("config.json").toFile).get + cfg.get("reporters").asInstanceOf[JArray].vs.foreach(r => { + self ! MStartReporter(r.get("name").asString, r.get("type").asString) + }) cfg.get("components").asInstanceOf[JArray].vs.foreach(c => { self ! MStartComponent(c.get("name").asString, c.get("type").asString, c.get("port").asInt) }) @@ -26,6 +30,7 @@ class Supervisor extends Actor { override def receive: Receive = { case msg: MStartComponent => startComponent(msg) + case msg: MStartReporter => startReporter(msg) case _ => log.debug("supervisor received unhandled message") } @@ -33,7 +38,15 @@ class Supervisor extends Actor { log.info("starting component :: {}", msg.name) msg.ctype match { case "ftp" => context.actorOf(FtpListener.props(msg.port), name = msg.name) - case _ => log.error("unknown component type: ", msg.ctype, msg.name); + case _ => log.error("unknown component type: {}", msg.ctype); + } + } + + private def startReporter(msg: MStartReporter): Unit = { + log.info("starting reporter :: {}", msg.name) + msg.rtype match { + case "console-logger" => context.actorOf(Props[LogReporter], name = msg.name) + case _ => log.error("unknown reporter type: {}", msg.rtype); } } } \ No newline at end of file -- cgit v1.1