summaryrefslogtreecommitdiff
path: root/src/main/scala/com/tylerstonge/honeypot/Supervisor.scala
blob: 25f1154d93d118ef7e23c2857e46bb43b9d0c66f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.tylerstonge.honeypot

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 org.typelevel.jawn.ast.{JArray, JParser}


class Supervisor extends Actor {

  val log: LoggingAdapter = Logging(context.system, this)

  override def preStart: Unit = {
    val cfg = JParser.parseFromFile(Paths.get("config.json").toFile).get
    cfg.get("components").asInstanceOf[JArray].vs.foreach(c => {
      self ! MStartComponent(c.get("name").asString, c.get("type").asString, c.get("port").asInt)
    })
  }

  override def postStop {
    log.debug("supervisor is shutting down")
  }

  override def receive: Receive = {
    case msg: MStartComponent => startComponent(msg)
    case _ => log.debug("supervisor received unhandled message")
  }

  private def startComponent(msg: MStartComponent) {
    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);
    }
  }
}