summaryrefslogtreecommitdiff
path: root/src/main/scala/com/tylerstonge/honeypot/Supervisor.scala
diff options
context:
space:
mode:
authorTyler St. Onge <tylertstonge@gmail.com>2020-09-25 17:39:10 -0400
committerTyler St. Onge <tylertstonge@gmail.com>2020-09-25 17:39:10 -0400
commit07abec1108c69cf1f85ae039066e90f14eaca78a (patch)
tree72a92c52a6d434e9845c5357cf02ada339e90551 /src/main/scala/com/tylerstonge/honeypot/Supervisor.scala
parent7aca24d0086080eb5babdf499c1c484d1b2a4ca1 (diff)
added subscription model for reporter actors
Diffstat (limited to 'src/main/scala/com/tylerstonge/honeypot/Supervisor.scala')
-rw-r--r--src/main/scala/com/tylerstonge/honeypot/Supervisor.scala17
1 files changed, 15 insertions, 2 deletions
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