summaryrefslogtreecommitdiff
path: root/ambari-metrics/ambari-metrics-host-monitoring
diff options
context:
space:
mode:
authorSiddharth Wagle <swagle@hortonworks.com>2015-03-27 17:11:08 -0700
committerSiddharth Wagle <swagle@hortonworks.com>2015-03-27 17:11:08 -0700
commit5d06a31309bb6ced2aef16116860e4aba9c0b571 (patch)
treedbc9649edaa7ff87917f208c48ddf5a6f984f7f1 /ambari-metrics/ambari-metrics-host-monitoring
parenta982836df6fad9a8d648c6bcc5b1852b2be4d7de (diff)
AMBARI-10263. Collect disk io counters using Metric Monitor service. (swagle)
Diffstat (limited to 'ambari-metrics/ambari-metrics-host-monitoring')
-rw-r--r--ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py19
-rw-r--r--ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/metric_collector.py2
-rw-r--r--ambari-metrics/ambari-metrics-host-monitoring/src/test/python/core/TestHostInfo.py22
3 files changed, 43 insertions, 0 deletions
diff --git a/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py b/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py
index 6dd84661cd..057b5b6388 100644
--- a/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py
+++ b/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/host_info.py
@@ -247,6 +247,25 @@ class HostInfo():
pass
pass
+ def get_disk_io_counters(self):
+ # read_count: number of reads
+ # write_count: number of writes
+ # read_bytes: number of bytes read
+ # write_bytes: number of bytes written
+ # read_time: time spent reading from disk (in milliseconds)
+ # write_time: time spent writing to disk (in milliseconds)
+
+ io_counters = psutil.disk_io_counters()
+
+ return {
+ 'read_count' : io_counters.read_count if hasattr(io_counters, 'read_count') else 0,
+ 'write_count' : io_counters.write_count if hasattr(io_counters, 'write_count') else 0,
+ 'read_bytes' : io_counters.read_bytes if hasattr(io_counters, 'read_bytes') else 0,
+ 'write_bytes' : io_counters.write_bytes if hasattr(io_counters, 'write_bytes') else 0,
+ 'read_time' : io_counters.read_time if hasattr(io_counters, 'read_time') else 0,
+ 'write_time' : io_counters.write_time if hasattr(io_counters, 'write_time') else 0
+ }
+
def get_hostname(self):
global cached_hostname
if cached_hostname is not None:
diff --git a/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/metric_collector.py b/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/metric_collector.py
index a830a1f3b5..c28fd03880 100644
--- a/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/metric_collector.py
+++ b/ambari-metrics/ambari-metrics-host-monitoring/src/main/python/core/metric_collector.py
@@ -58,6 +58,7 @@ class MetricsCollector():
elif 'disk' in event.get_group_name():
metrics = self.host_info.get_combined_disk_usage()
+ metrics.update(self.host_info.get_disk_io_counters())
elif 'network' in event.get_group_name():
metrics = self.host_info.get_network_info()
@@ -75,6 +76,7 @@ class MetricsCollector():
metrics.update(self.host_info.get_network_info())
metrics.update(self.host_info.get_mem_info())
metrics.update(self.host_info.get_process_info())
+ metrics.update(self.host_info.get_disk_io_counters())
else:
logger.warn('Unknown metric group.')
diff --git a/ambari-metrics/ambari-metrics-host-monitoring/src/test/python/core/TestHostInfo.py b/ambari-metrics/ambari-metrics-host-monitoring/src/test/python/core/TestHostInfo.py
index 102ea44cea..bdedc2e6eb 100644
--- a/ambari-metrics/ambari-metrics-host-monitoring/src/test/python/core/TestHostInfo.py
+++ b/ambari-metrics/ambari-metrics-host-monitoring/src/test/python/core/TestHostInfo.py
@@ -23,6 +23,7 @@ from host_info import HostInfo
import platform
from unittest import TestCase
from mock.mock import patch, MagicMock
+import collections
logger = logging.getLogger()
@@ -129,3 +130,24 @@ class TestHostInfo(TestCase):
self.assertEqual(cdu['disk_used'], "0.00")
self.assertEqual(cdu['disk_free'], "0.00")
self.assertEqual(cdu['disk_percent'], "0.00")
+
+ @patch("psutil.disk_io_counters")
+ def testDiskIOCounters(self, io_mock):
+
+ Counters = collections.namedtuple('sdiskio', ['read_count', 'write_count',
+ 'read_bytes', 'write_bytes',
+ 'read_time', 'write_time'])
+ io_mock.return_value = Counters(0, 1, 2, 3, 4, 5)
+
+ hostinfo = HostInfo(MagicMock())
+
+ disk_counters = hostinfo.get_disk_io_counters()
+
+ self.assertEqual(disk_counters['read_count'], 0)
+ self.assertEqual(disk_counters['write_count'], 1)
+ self.assertEqual(disk_counters['read_bytes'], 2)
+ self.assertEqual(disk_counters['write_bytes'], 3)
+ self.assertEqual(disk_counters['read_time'], 4)
+ self.assertEqual(disk_counters['write_time'], 5)
+
+