a lot of changes
diff --git a/wally/sensors/grafana.py b/wally/sensors/grafana.py
deleted file mode 100644
index 9823fac..0000000
--- a/wally/sensors/grafana.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import json
-
-
-query = """
-select value from "{series}"
-where $timeFilter and
-host='{host}' and device='{device}'
-order asc
-"""
-
-
-def make_dashboard_file(config):
- series = ['writes_completed', 'sectors_written']
- dashboards = []
-
- for serie in series:
- dashboard = dict(title=serie, type='graph',
- span=12, fill=1, linewidth=2,
- tooltip={'shared': True})
-
- targets = []
-
- for ip, devs in config.items():
- for device in devs:
- params = {
- 'series': serie,
- 'host': ip,
- 'device': device
- }
-
- target = dict(
- target="disk io",
- query=query.replace("\n", " ").format(**params).strip(),
- interval="",
- alias="{0} io {1}".format(ip, device),
- rawQuery=True
- )
- targets.append(target)
-
- dashboard['targets'] = targets
- dashboards.append(dashboard)
-
- fc = open("grafana_template.js").read()
- return fc % (json.dumps(dashboards),)
-
-
-print make_dashboard_file({'192.168.0.104': ['sda1', 'rbd1']})
diff --git a/wally/sensors/main.py b/wally/sensors/main.py
index 55a9584..2d0bc81 100644
--- a/wally/sensors/main.py
+++ b/wally/sensors/main.py
@@ -56,6 +56,7 @@
prev = {}
next_data_record_time = time.time()
+ first_round = True
while True:
real_time = int(time.time())
@@ -84,8 +85,12 @@
if source_id is not None:
curr['source_id'] = source_id
- print report_time, int((report_time - time.time()) * 10) * 0.1
- sender.send(curr)
+ # on first round not all fields was ready
+ # this leads to setting wrong headers list
+ if not first_round:
+ sender.send(curr)
+ else:
+ first_round = False
next_data_record_time = report_time + opts.timeout + 0.5
time.sleep(next_data_record_time - time.time())
diff --git a/wally/sensors/protocol.py b/wally/sensors/protocol.py
index fad7e00..67aef2a 100644
--- a/wally/sensors/protocol.py
+++ b/wally/sensors/protocol.py
@@ -62,6 +62,8 @@
result = (self.HEADERS + source_id +
self.END_OF_SOURCE_ID +
+ socket.gethostname() +
+ self.END_OF_SOURCE_ID +
flen + forder + self.END_OF_HEADERS)
if self.headers_send_cycles_left > 0:
@@ -85,13 +87,14 @@
def __init__(self):
self.fields = {}
self.formats = {}
+ self.hostnames = {}
def unpack(self, data):
code = data[0]
- source_id, _, packed_data = data[1:].partition(
- StructSerializerSend.END_OF_SOURCE_ID)
if code == StructSerializerSend.HEADERS:
+ source_id, hostname, packed_data = data[1:].split(
+ StructSerializerSend.END_OF_SOURCE_ID, 2)
# fields order provided
flen_sz = struct.calcsize("!H")
flen = struct.unpack("!H", packed_data[:flen_sz])[0]
@@ -111,11 +114,14 @@
else:
self.fields[source_id] = ['time'] + forder
self.formats[source_id] = "!I" + "I" * flen
+ self.hostnames[source_id] = hostname
if len(rest) != 0:
return self.unpack(rest)
return None
else:
+ source_id, packed_data = data[1:].split(
+ StructSerializerSend.END_OF_SOURCE_ID, 1)
assert code == StructSerializerSend.DATA,\
"Unknown code {0!r}".format(code)
@@ -133,6 +139,7 @@
vals = struct.unpack(s_format, packed_data)
res = dict(zip(fields, vals))
res['source_id'] = source_id
+ res['hostname'] = self.hostnames[source_id]
return res
diff --git a/wally/sensors/receiver.py b/wally/sensors/receiver.py
deleted file mode 100644
index ff0f223..0000000
--- a/wally/sensors/receiver.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from .api import start_monitoring, Empty
-# from influx_exporter import connect, add_data
-
-uri = "udp://192.168.0.104:12001"
-# infldb_url = "influxdb://perf:perf@192.168.152.42:8086/perf"
-# conn = connect(infldb_url)
-
-monitor_config = {'127.0.0.1':
- {"block-io": {'allowed_prefixes': ['sda1', 'rbd1']},
- "net-io": {"allowed_prefixes": ["virbr2"]}}}
-
-with start_monitoring(uri, monitor_config) as queue:
- while True:
- try:
- (ip, port), data = queue.get(True, 1)
- print (ip, port), data
- # add_data(conn, ip, [data])
- except Empty:
- pass
diff --git a/wally/sensors/sensors/io_sensors.py b/wally/sensors/sensors/io_sensors.py
index c9ff340..e4049a9 100644
--- a/wally/sensors/sensors/io_sensors.py
+++ b/wally/sensors/sensors/io_sensors.py
@@ -38,6 +38,8 @@
dev_ok = is_dev_accepted(dev_name,
disallowed_prefixes,
allowed_prefixes)
+ if dev_name[-1].isdigit():
+ dev_ok = False
if dev_ok:
for pos, name, accum_val in io_values_pos:
diff --git a/wally/sensors/sensors/net_sensors.py b/wally/sensors/sensors/net_sensors.py
index 4a4e477..2723499 100644
--- a/wally/sensors/sensors/net_sensors.py
+++ b/wally/sensors/sensors/net_sensors.py
@@ -25,7 +25,7 @@
@provides("net-io")
-def net_stat(disallowed_prefixes=('docker',), allowed_prefixes=None):
+def net_stat(disallowed_prefixes=('docker', 'lo'), allowed_prefixes=('eth',)):
results = {}
for line in open('/proc/net/dev').readlines()[2:]:
@@ -36,6 +36,10 @@
dev_ok = is_dev_accepted(dev_name,
disallowed_prefixes,
allowed_prefixes)
+
+ if '.' in dev_name and dev_name.split('.')[-1].isdigit():
+ dev_ok = False
+
if dev_ok:
for pos, name, accum_val in net_values_pos:
sensor_name = "{0}.{1}".format(dev_name, name)
diff --git a/wally/sensors/sensors/psram_sensors.py b/wally/sensors/sensors/psram_sensors.py
index 7e4f8b9..faac87d 100644
--- a/wally/sensors/sensors/psram_sensors.py
+++ b/wally/sensors/sensors/psram_sensors.py
@@ -46,7 +46,6 @@
def psram_stat(disallowed_prefixes=None, allowed_prefixes=None):
results = {}
pid_list = get_pid_list(disallowed_prefixes, allowed_prefixes)
- print pid_list
for pid in pid_list:
try:
dev_name = get_pid_name(pid)
diff --git a/wally/sensors/sensors/syscpu_sensors.py b/wally/sensors/sensors/syscpu_sensors.py
index 3324f67..3f6cf44 100644
--- a/wally/sensors/sensors/syscpu_sensors.py
+++ b/wally/sensors/sensors/syscpu_sensors.py
@@ -1,5 +1,5 @@
+from .utils import SensorInfo
from ..discover import provides
-from .utils import SensorInfo, is_dev_accepted
# 0 - cpu name
# 1 - user: normal processes executing in user mode
@@ -17,32 +17,27 @@
(4, 'idle_time', True),
]
-# extended values, on 1 pos in line
-cpu_extvalues = ['procs_blocked']
-
@provides("system-cpu")
-def syscpu_stat(disallowed_prefixes=('intr', 'ctxt', 'btime', 'processes',
- 'procs_running', 'softirq'),
- allowed_prefixes=None):
+def syscpu_stat(disallowed_prefixes=None, allowed_prefixes=None):
results = {}
+ # calculate core count
+ core_count = 0
+
for line in open('/proc/stat'):
vals = line.split()
dev_name = vals[0]
- dev_ok = is_dev_accepted(dev_name,
- disallowed_prefixes,
- allowed_prefixes)
+ if dev_name == 'cpu':
+ for pos, name, accum_val in io_values_pos:
+ sensor_name = "{0}.{1}".format(dev_name, name)
+ results[sensor_name] = SensorInfo(int(vals[pos]),
+ accum_val)
+ elif dev_name == 'procs_blocked':
+ val = int(vals[1]) // core_count
+ results["cpu.procs_blocked"] = SensorInfo(val, False)
+ elif dev_name.startswith('cpu'):
+ core_count += 1
- if dev_ok:
- if dev_name in cpu_extvalues:
- # for single values
- sensor_name = "cpu.{0}".format(dev_name)
- results[sensor_name] = SensorInfo(int(vals[1]), False)
- else:
- for pos, name, accum_val in io_values_pos:
- sensor_name = "{0}.{1}".format(dev_name, name)
- results[sensor_name] = SensorInfo(int(vals[pos]), accum_val)
return results
-
diff --git a/wally/sensors/sensors/sysram_sensors.py b/wally/sensors/sensors/sysram_sensors.py
index 8df7acc..2eacf44 100644
--- a/wally/sensors/sensors/sysram_sensors.py
+++ b/wally/sensors/sensors/sysram_sensors.py
@@ -39,5 +39,3 @@
usage = used / results['ram.MemTotal'].value
results["ram.usage_percent"] = SensorInfo(usage, False)
return results
-
-print sysram_stat()