summaryrefslogtreecommitdiffstats
path: root/collectors/python.d.plugin/python_modules/bases/collection.py
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/python.d.plugin/python_modules/bases/collection.py')
-rw-r--r--collectors/python.d.plugin/python_modules/bases/collection.py37
1 files changed, 35 insertions, 2 deletions
diff --git a/collectors/python.d.plugin/python_modules/bases/collection.py b/collectors/python.d.plugin/python_modules/bases/collection.py
index 4c25aafd5..93bf8cf05 100644
--- a/collectors/python.d.plugin/python_modules/bases/collection.py
+++ b/collectors/python.d.plugin/python_modules/bases/collection.py
@@ -5,6 +5,8 @@
import os
+from threading import Lock
+
PATH = os.getenv('PATH', '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin').split(':')
CHART_BEGIN = 'BEGIN {0} {1}\n'
@@ -12,6 +14,8 @@ CHART_CREATE = "CHART {0} '{1}' '{2}' '{3}' '{4}' '{5}' {6} {7} {8}\n"
DIMENSION_CREATE = "DIMENSION '{0}' '{1}' {2} {3} {4} '{5}'\n"
DIMENSION_SET = "SET '{0}' = {1}\n"
+print_lock = Lock()
+
def setdefault_values(config, base_dict):
for key, value in base_dict.items():
@@ -23,10 +27,11 @@ def run_and_exit(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
exit(1)
+
return wrapper
-def on_try_except_finally(on_except=(None, ), on_finally=(None, )):
+def on_try_except_finally(on_except=(None,), on_finally=(None,)):
except_func = on_except[0]
finally_func = on_finally[0]
@@ -40,7 +45,9 @@ def on_try_except_finally(on_except=(None, ), on_finally=(None, )):
finally:
if finally_func:
finally_func(*on_finally[1:])
+
return wrapper
+
return decorator
@@ -49,6 +56,7 @@ def static_vars(**kwargs):
for k in kwargs:
setattr(func, k, kwargs[k])
return func
+
return decorate
@@ -58,7 +66,9 @@ def safe_print(*msg):
:param msg:
:return:
"""
+ print_lock.acquire()
print(''.join(msg))
+ print_lock.release()
def find_binary(binary):
@@ -67,7 +77,7 @@ def find_binary(binary):
:return:
"""
for directory in PATH:
- binary_name = '/'.join([directory, binary])
+ binary_name = os.path.join(directory, binary)
if os.path.isfile(binary_name) and os.access(binary_name, os.X_OK):
return binary_name
return None
@@ -82,3 +92,26 @@ def read_last_line(f):
break
result = opened.readline()
return result.decode()
+
+
+def unicode_str(arg):
+ """Return the argument as a unicode string.
+
+ The `unicode` function has been removed from Python3 and `str` takes its
+ place. This function is a helper which will try using Python 2's `unicode`
+ and if it doesn't exist, assume we're using Python 3 and use `str`.
+
+ :param arg:
+ :return: <str>
+ """
+ # TODO: fix
+ try:
+ # https://github.com/netdata/netdata/issues/7613
+ if isinstance(arg, unicode):
+ return arg
+ return unicode(arg, errors='ignore')
+ # https://github.com/netdata/netdata/issues/7642
+ except TypeError:
+ return unicode(arg)
+ except NameError:
+ return str(arg)