Filippo Giunchedi has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/382728 )
Change subject: Collect APC info
......................................................................
Collect APC info
Bug: T177196
Change-Id: Iedc940d14ac8dfb20b19a36d81bcd23b4db84038
---
M hhvm_exporter/exporter.py
M test/test_collector.py
2 files changed, 76 insertions(+), 1 deletion(-)
Approvals:
Giuseppe Lavagetto: Looks good to me, but someone else must approve
Elukey: Looks good to me, but someone else must approve
jenkins-bot: Verified
Filippo Giunchedi: Looks good to me, approved
diff --git a/hhvm_exporter/exporter.py b/hhvm_exporter/exporter.py
index 498c385..16dc1ac 100644
--- a/hhvm_exporter/exporter.py
+++ b/hhvm_exporter/exporter.py
@@ -16,6 +16,7 @@
import argparse
import datetime
import logging
+import re
import sys
import time
@@ -36,10 +37,22 @@
self.url = admin_url
def _fetch_json(self, url):
+ response = self._fetch_url(url)
+ if response is not None:
+ return response.json()
+ return response
+
+ def _fetch_text(self, url):
+ response = self._fetch_url(url)
+ if response is not None:
+ return response.text
+ return response
+
+ def _fetch_url(self, url):
try:
response = requests.get(url, timeout=2)
response.raise_for_status()
- return response.json()
+ return response
except (requests.ConnectionError,
requests.Timeout,
requests.HTTPError,
@@ -60,6 +73,10 @@
for metric in self._collect_status(status_data):
yield metric
+ apc_info = self._fetch_text(self.url + '/dump-apc-info')
+ for metric in self._collect_apc(apc_info):
+ yield metric
+
up = GaugeMetricFamily('hhvm_up', 'HHVM admin interface is up')
if not all([status_data, memory_data, health_data]):
up.add_metric([], 0)
@@ -68,6 +85,54 @@
yield up
+ def _collect_apc(self, data):
+ if data is None:
+ raise StopIteration()
+
+ metrics = {
+ 'value_size': GaugeMetricFamily('hhvm_apc_value_bytes',
+ 'Memory usage from all live
values'),
+ 'key_size': GaugeMetricFamily('hhvm_apc_key_bytes',
+ 'Memory usage from all keys'),
+ 'mapped_to_file_data_size': GaugeMetricFamily(
+ 'hhvm_apc_mmap_bytes',
+ 'Bytes stored in the paged out memory
file'),
+ 'in_memory_primed_data_size': GaugeMetricFamily(
+ 'hhvm_apc_memory_primed_bytes',
+ 'Bytes that were primed and went into
memory'),
+
+ 'entries_count': GaugeMetricFamily('hhvm_apc_key_count',
+ 'Number of keys (entries)'),
+ 'primed_entries_count':
GaugeMetricFamily('hhvm_apc_key_primed_count',
+ 'Number of primed keys'),
+ 'in_memory_primed_entries_count': GaugeMetricFamily(
+
'hhvm_apc_key_primed_memory_count',
+ 'Number of primed keys live (in
memory)'),
+ 'pending_deletes_via_treadmill_size': GaugeMetricFamily(
+
'hhvm_apc_pending_delete_bytes',
+ 'Bytes pending deletion via
treadmill'),
+ }
+
+ for line in data.splitlines():
+ if ':' not in line:
+ continue
+ key, value = re.split(': *', line, 1)
+ metric_name = key.lower().replace(' ', '_')
+
+ metric_family = metrics.get(metric_name)
+ if metric_name is None:
+ log.warn('Unknown metric %r from line %r', metric_name, line)
+ continue
+
+ try:
+ value = float(value)
+ except ValueError:
+ value = float('nan')
+ metric_family.add_metric([], value)
+
+ for metric in metrics.values():
+ yield metric
+
def _collect_health(self, data):
if data is None:
raise StopIteration()
diff --git a/test/test_collector.py b/test/test_collector.py
index 3b15352..555d505 100644
--- a/test/test_collector.py
+++ b/test/test_collector.py
@@ -44,5 +44,15 @@
self.assertMetricEqual(
[x.name for x in self.c._collect_health({})], expected_names)
+ def testCollectAPC(self):
+ expected_names = [
+ 'hhvm_apc_value_bytes', 'hhvm_apc_key_bytes',
+ 'hhvm_apc_mmap_bytes', 'hhvm_apc_memory_primed_bytes',
+ 'hhvm_apc_key_count', 'hhvm_apc_key_primed_count',
+ 'hhvm_apc_key_primed_memory_count',
+ 'hhvm_apc_pending_delete_bytes']
+ self.assertMetricEqual(
+ [x.name for x in self.c._collect_apc('')], expected_names)
+
def assertMetricEqual(self, actual, expected):
return self.assertListEqual(sorted(actual), sorted(expected))
--
To view, visit https://gerrit.wikimedia.org/r/382728
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Iedc940d14ac8dfb20b19a36d81bcd23b4db84038
Gerrit-PatchSet: 1
Gerrit-Project: operations/software/hhvm_exporter
Gerrit-Branch: master
Gerrit-Owner: Filippo Giunchedi <[email protected]>
Gerrit-Reviewer: Elukey <[email protected]>
Gerrit-Reviewer: Filippo Giunchedi <[email protected]>
Gerrit-Reviewer: Giuseppe Lavagetto <[email protected]>
Gerrit-Reviewer: Muehlenhoff <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits