pekko/akka-remote/src/main/scala/akka/remote/RemotingLifecycle.scala

80 lines
2.8 KiB
Scala
Raw Normal View History

/**
* Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.remote
import akka.event.{ LoggingAdapter, Logging }
import akka.actor.{ ActorSystem, Address }
import scala.beans.BeanProperty
import java.util.{ Set JSet }
import scala.collection.JavaConverters.setAsJavaSetConverter
2012-12-07 16:03:04 +01:00
sealed trait RemotingLifecycleEvent extends Serializable {
def logLevel: Logging.LogLevel
}
2012-12-07 16:03:04 +01:00
sealed trait AssociationEvent extends RemotingLifecycleEvent {
def localAddress: Address
def remoteAddress: Address
def inbound: Boolean
protected def eventName: String
final def getRemoteAddress: Address = remoteAddress
final def getLocalAddress: Address = localAddress
final def isInbound: Boolean = inbound
override def toString: String = s"$eventName [$localAddress]${if (inbound) " <- " else " -> "}[$remoteAddress]"
}
2012-12-07 16:03:04 +01:00
final case class AssociatedEvent(
localAddress: Address,
remoteAddress: Address,
2012-11-22 13:33:48 +01:00
inbound: Boolean)
extends AssociationEvent {
protected override val eventName: String = "Associated"
override def logLevel: Logging.LogLevel = Logging.DebugLevel
2012-11-22 13:33:48 +01:00
}
2012-12-07 16:03:04 +01:00
final case class DisassociatedEvent(
localAddress: Address,
remoteAddress: Address,
2012-11-22 13:33:48 +01:00
inbound: Boolean)
extends AssociationEvent {
protected override val eventName: String = "Disassociated"
override def logLevel: Logging.LogLevel = Logging.DebugLevel
}
2012-12-07 16:03:04 +01:00
final case class AssociationErrorEvent(
2012-11-22 13:33:48 +01:00
cause: Throwable,
localAddress: Address,
remoteAddress: Address,
inbound: Boolean) extends AssociationEvent {
protected override val eventName: String = "AssociationError"
override def logLevel: Logging.LogLevel = Logging.ErrorLevel
override def toString: String = s"${super.toString}: Error[${Logging.stackTraceFor(cause)}]"
2012-11-22 13:33:48 +01:00
def getCause: Throwable = cause
}
2012-12-07 16:03:04 +01:00
final case class RemotingListenEvent(listenAddresses: Set[Address]) extends RemotingLifecycleEvent {
def getListenAddresses: JSet[Address] = listenAddresses.asJava
override def logLevel: Logging.LogLevel = Logging.InfoLevel
override def toString: String = "Remoting now listens on addresses: " + listenAddresses.mkString("[", ", ", "]")
}
case object RemotingShutdownEvent extends RemotingLifecycleEvent {
override def logLevel: Logging.LogLevel = Logging.InfoLevel
override val toString: String = "Remoting shut down"
}
final case class RemotingErrorEvent(cause: Throwable) extends RemotingLifecycleEvent {
def getCause: Throwable = cause
override def logLevel: Logging.LogLevel = Logging.ErrorLevel
override def toString: String = s"Remoting error: [${Logging.stackTraceFor(cause)}]"
}
class EventPublisher(system: ActorSystem, log: LoggingAdapter, logEvents: Boolean) {
def notifyListeners(message: RemotingLifecycleEvent): Unit = {
system.eventStream.publish(message)
if (logEvents) log.log(message.logLevel, "{}", message)
}
}