diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/common/Report.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/common/Report.scala index 5e8dc6c2a2..880711b8f2 100644 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/common/Report.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/common/Report.scala @@ -5,6 +5,7 @@ import java.io.PrintWriter import java.io.FileWriter import akka.event.EventHandler import java.util.Date +import java.lang.management.ManagementFactory class Report( resultRepository: BenchResultRepository, @@ -41,6 +42,11 @@ class Report( comparePercentilesAndMeanChart(stats).foreach(url ⇒ sb.append(img(url))) } + sb.append("
\n") + sb.append("
\n")
+    sb.append(systemInformation)
+    sb.append("\n
\n") + val timestamp = fileTimestampFormat.format(new Date(current.timestamp)) val reportName = current.name + "--" + timestamp + ".html" resultRepository.saveHtmlReport(sb.toString, reportName) @@ -140,6 +146,51 @@ class Report( } + def systemInformation: String = { + val runtime = ManagementFactory.getRuntimeMXBean + val os = ManagementFactory.getOperatingSystemMXBean + val threads = ManagementFactory.getThreadMXBean + val mem = ManagementFactory.getMemoryMXBean + val heap = mem.getHeapMemoryUsage + + val sb = new StringBuilder + + sb.append("Benchmark properties: ") + import scala.collection.JavaConversions._ + val propNames: Seq[String] = System.getProperties.propertyNames.toSeq.map(_.toString) + for (name ← propNames if name.startsWith("benchmark.")) { + sb.append(name).append("=").append(System.getProperty(name)).append(" ") + } + sb.append("\n") + + sb.append("Operating system: ").append(os.getName).append(", ").append(os.getArch).append(", ").append(os.getVersion) + sb.append("\n") + sb.append("JVM: ").append(runtime.getVmName).append(" ").append(runtime.getVmVendor). + append(" ").append(runtime.getVmVersion) + sb.append("\n") + val args = runtime.getInputArguments.filterNot(_.contains("classpath")).mkString(" ") + sb.append("Args: ").append(args) + sb.append("\n") + sb.append("Processors: ").append(os.getAvailableProcessors) + sb.append("\n") + sb.append("Load average: ").append(os.getSystemLoadAverage) + sb.append("\n") + sb.append("Thread count: ").append(threads.getThreadCount).append(" (").append(threads.getPeakThreadCount).append(")") + sb.append("\n") + sb.append("Heap: ").append(formatDouble(heap.getUsed.toDouble / 1024 / 1024)). + append(" (").append(formatDouble(heap.getInit.toDouble / 1024 / 1024)). + append(" - "). + append(formatDouble(heap.getMax.toDouble / 1024 / 1024)). + append(")").append(" MB") + sb.append("\n") + + sb.toString + } + + def formatDouble(value: Double): String = { + new java.math.BigDecimal(value).setScale(2, java.math.RoundingMode.HALF_EVEN).toString + } + def header(title: String) = """| |