mirror of
https://github.com/valitydev/salt.git
synced 2024-11-08 09:23:56 +00:00
Merge pull request #7822 from mgwilliams/carbon-return
carbon-returner: make it more flexible
This commit is contained in:
commit
7790d914f5
@ -15,6 +15,7 @@ import socket
|
|||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
import struct
|
import struct
|
||||||
|
import collections
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -44,6 +45,20 @@ def _send_picklemetrics(metrics, carbon_sock):
|
|||||||
logging.debug('Sent {0} bytes to carbon'.format(sent_bytes))
|
logging.debug('Sent {0} bytes to carbon'.format(sent_bytes))
|
||||||
|
|
||||||
|
|
||||||
|
def _walk(path, value, metrics, timestamp):
|
||||||
|
if isinstance(value, collections.Mapping):
|
||||||
|
for key, val in value.items():
|
||||||
|
_walk('{0}.{1}'.format(path, key), val, metrics, timestamp)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
val = float(value)
|
||||||
|
metrics.append((path, val, timestamp))
|
||||||
|
except TypeError:
|
||||||
|
raise
|
||||||
|
log.info('Error in carbon returner, when trying to'
|
||||||
|
'convert metric:{0}, with val:{1}'.format(path, val))
|
||||||
|
|
||||||
|
|
||||||
def returner(ret):
|
def returner(ret):
|
||||||
'''
|
'''
|
||||||
Return data to a remote carbon server using the text metric protocol
|
Return data to a remote carbon server using the text metric protocol
|
||||||
@ -75,14 +90,8 @@ def returner(ret):
|
|||||||
if not metric_base.startswith('virt.'):
|
if not metric_base.startswith('virt.'):
|
||||||
metric_base += '.' + _formatHostname(ret['id'])
|
metric_base += '.' + _formatHostname(ret['id'])
|
||||||
metrics = []
|
metrics = []
|
||||||
for name, vals in saltdata.items():
|
|
||||||
for key, val in vals.items():
|
_walk(metric_base, saltdata, metrics, timestamp)
|
||||||
# XXX: force datatype, needs typechecks, etc
|
|
||||||
try:
|
|
||||||
val = float(val)
|
|
||||||
metrics.append((metric_base + '.' + _formatHostname(name) + '.' + key, val, timestamp))
|
|
||||||
except TypeError:
|
|
||||||
log.info('Error in carbon returner, when trying to convert metric:{0}, with val:{1}'.format(key, val))
|
|
||||||
|
|
||||||
def _send_textmetrics(metrics):
|
def _send_textmetrics(metrics):
|
||||||
''' Use text protorocol to send metric over socket '''
|
''' Use text protorocol to send metric over socket '''
|
||||||
@ -97,7 +106,7 @@ def returner(ret):
|
|||||||
if sent_bytes == 0:
|
if sent_bytes == 0:
|
||||||
log.error('Bytes sent 0, Connection reset?')
|
log.error('Bytes sent 0, Connection reset?')
|
||||||
return
|
return
|
||||||
logging.debug('Sent {0} bytes to carbon'.format(sent_bytes))
|
log.debug('Sent {0} bytes to carbon'.format(sent_bytes))
|
||||||
|
|
||||||
total_sent_bytes += sent_bytes
|
total_sent_bytes += sent_bytes
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user