Textual representations of event codes in flight recorder dump (#21489)

This commit is contained in:
Johan Andrén 2016-09-19 11:00:34 +02:00 committed by GitHub
parent c32ee33a11
commit 8e97ecee8f
3 changed files with 54 additions and 3 deletions

View file

@ -489,6 +489,7 @@ private[remote] class ArteryTransport(_system: ExtendedActorSystem, _provider: R
try {
if (settings.Advanced.DeleteAeronDirectory) {
IoUtil.delete(new File(driver.aeronDirectoryName), false)
topLevelFREvents.loFreq(Transport_MediaFileDeleted, NoMetaData)
}
} catch {
case NonFatal(e)
@ -766,7 +767,7 @@ private[remote] class ArteryTransport(_system: ExtendedActorSystem, _provider: R
if (areonErrorLog != null) areonErrorLog.close()
if (mediaDriver.get.isDefined) {
stopMediaDriver()
topLevelFREvents.loFreq(Transport_MediaFileDeleted, NoMetaData)
}
topLevelFREvents.loFreq(Transport_FlightRecorderClose, NoMetaData)

View file

@ -2,6 +2,8 @@ package akka.remote.artery
object FlightRecorderEvents {
// Note: Remember to update dictionary when adding new events!
val NoMetaData = Array.empty[Byte]
// Top level remoting events
@ -44,4 +46,45 @@ object FlightRecorderEvents {
val Compression_CompressedManifest = 91
val Compression_AllocatedManifestCompressionId = 92
// Used for presentation of the entries in the flight recorder
lazy val eventDictionary = Map(
Transport_MediaDriverStarted "Transport: Media driver started",
Transport_AeronStarted "Transport: Aeron started",
Transport_AeronErrorLogStarted "Transport: Aeron error log started",
Transport_TaskRunnerStarted "Transport: Task runner started",
Transport_UniqueAddressSet "Transport: Unique address set",
Transport_MaterializerStarted "Transport: Materializer started",
Transport_StartupFinished "Transport: Startup finished",
Transport_OnAvailableImage "Transport: onAvailableImage",
Transport_KillSwitchPulled "Transport: KillSwitch pulled",
Transport_Stopped "Transport: Stopped",
Transport_AeronErrorLogTaskStopped "Transport: Aeron errorLog task stopped",
Transport_MediaFileDeleted "Transport: Media file deleted",
Transport_FlightRecorderClose "Transport: Flight recorder closed",
Transport_SendQueueOverflow "Transport: Send queue overflow",
// Aeron Sink events
AeronSink_Started "AeronSink: Started",
AeronSink_TaskRunnerRemoved "AeronSink: Task runner removed",
AeronSink_PublicationClosed "AeronSink: Publication closed",
AeronSink_Stopped "AeronSink: Stopped",
AeronSink_EnvelopeGrabbed "AeronSink: Envelope grabbed",
AeronSink_EnvelopeOffered "AeronSink: Envelope offered",
AeronSink_GaveUpEnvelope "AeronSink: Gave up envelope",
AeronSink_DelegateToTaskRunner "AeronSink: Delegate to task runner",
AeronSink_ReturnFromTaskRunner "AeronSink: Return from task runner",
// Aeron Source events
AeronSource_Started "AeronSource: Started",
AeronSource_Stopped "AeronSource: Stopped",
AeronSource_Received "AeronSource: Received",
AeronSource_DelegateToTaskRunner "AeronSource: Delegate to task runner",
AeronSource_ReturnFromTaskRunner "AeronSource: Return from task runner",
// Compression events
Compression_CompressedActorRef "Compression: Compressed ActorRef",
Compression_AllocatedActorRefCompressionId "Compression: Allocated ActorRef compression id",
Compression_CompressedManifest "Compression: Compressed manifest",
Compression_AllocatedManifestCompressionId "Compression: Allocated manifest compression id"
).map { case (int, str) int.toLong str }
}

View file

@ -197,11 +197,18 @@ private[akka] final class FlightRecorderReader(fileChannel: FileChannel) {
}
case class RichEntry(timeStamp: Instant, dirty: Boolean, code: Long, metadata: Array[Byte]) {
override def toString: String = s"[$timeStamp] ${if (dirty) "#" else ""} \t $code | ${metadata.mkString(",")}"
override def toString: String = {
val textualCode = FlightRecorderEvents.eventDictionary.getOrElse(code, "").take(34)
val metadataString = new String(metadata, "UTF-8")
f"[$timeStamp] ${if (dirty) "#" else ""} $code%3s $textualCode%-34s | $metadataString"
}
}
case class CompactEntry(timeStamp: Instant, dirty: Boolean, code: Long, param: Long) {
override def toString: String = s"[$timeStamp] ${if (dirty) "#" else ""} \t $code | $param"
override def toString: String = {
val textualCode = FlightRecorderEvents.eventDictionary.getOrElse(code, "").take(34)
f"[$timeStamp] ${if (dirty) "#" else ""} $code%3s $textualCode%-34s | $param"
}
}
private val fileBuffer = new MappedResizeableBuffer(fileChannel, 0, TotalSize)