From 3ec12bf51a5b6f79a45e656bba42399cd9a439fd Mon Sep 17 00:00:00 2001
From: Pierre-Yves Ritschard <pyr@milestonelab.com>
Date: Thu, 29 Sep 2011 08:54:22 +0200
Subject: [PATCH 2/2] Patch for KAFKA-140: Exposing Total Metrics

Add a convenience function getTotalMetric and use it
in exposed MBeans.
---
 .../main/scala/kafka/message/FileMessageSet.scala  |    3 +++
 .../scala/kafka/network/SocketServerStats.scala    |   12 ++++++++++++
 core/src/main/scala/kafka/utils/Utils.scala        |    5 +++++
 3 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/core/src/main/scala/kafka/message/FileMessageSet.scala b/core/src/main/scala/kafka/message/FileMessageSet.scala
index 69b1dfa..2025734 100644
--- a/core/src/main/scala/kafka/message/FileMessageSet.scala
+++ b/core/src/main/scala/kafka/message/FileMessageSet.scala
@@ -257,6 +257,7 @@ class FileMessageSet private[kafka](private[message] val channel: FileChannel,
 trait LogFlushStatsMBean {
   def getFlushesPerSecond: Double
   def getAvgFlushMs: Double
+  def getTotalFlushMs: Long
   def getMaxFlushMs: Double
   def getNumFlushes: Long
 }
@@ -271,6 +272,8 @@ class LogFlushStats extends LogFlushStatsMBean {
 
   def getAvgFlushMs: Double = flushRequestStats.getAvgMetric
 
+  def getTotalFlushMs: Long = flushRequestStats.getTotalMetric
+
   def getMaxFlushMs: Double = flushRequestStats.getMaxMetric
 
   def getNumFlushes: Long = flushRequestStats.getNumRequests
diff --git a/core/src/main/scala/kafka/network/SocketServerStats.scala b/core/src/main/scala/kafka/network/SocketServerStats.scala
index caa440d..0d6778e 100644
--- a/core/src/main/scala/kafka/network/SocketServerStats.scala
+++ b/core/src/main/scala/kafka/network/SocketServerStats.scala
@@ -33,6 +33,10 @@ trait SocketServerStatsMBean {
   def getBytesWrittenPerSecond: Double
   def getNumFetchRequests: Long
   def getNumProduceRequests: Long
+  def getTotalBytesRead: Long
+  def getTotalBytesWritten: Long
+  def getTotalFetchRequestMs: Long
+  def getTotalProduceRequestMs: Long
 }
 
 @threadsafe
@@ -77,4 +81,12 @@ class SocketServerStats(val monitorDurationNs: Long, val time: Time) extends Soc
   def getNumFetchRequests: Long = fetchTimeStats.getNumRequests
 
   def getNumProduceRequests: Long = produceTimeStats.getNumRequests
+
+  def getTotalBytesRead: Long = produceBytesStats.getTotalMetric
+
+  def getTotalBytesWritten: Long = fetchBytesStats.getTotalMetric
+
+  def getTotalFetchRequestMs: Long = fetchTimeStats.getTotalMetric
+
+  def getTotalProduceRequestMs: Long = produceTimeStats.getTotalMetric
 }
diff --git a/core/src/main/scala/kafka/utils/Utils.scala b/core/src/main/scala/kafka/utils/Utils.scala
index 0baf524..ebb14db 100644
--- a/core/src/main/scala/kafka/utils/Utils.scala
+++ b/core/src/main/scala/kafka/utils/Utils.scala
@@ -653,6 +653,11 @@ class SnapshotStats(private val monitorDurationNs: Long = 600L * 1000L * 1000L *
     }
   }
 
+  def getTotalMetric: Long = {
+    val stats = complete.get
+    stats.totalRequestMetric
+  }
+
   def getMaxMetric: Double = complete.get.maxRequestMetric
 
   class Stats {
-- 
1.7.4.1

