summaryrefslogtreecommitdiffstats
path: root/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py')
-rw-r--r--collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py23
1 files changed, 18 insertions, 5 deletions
diff --git a/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py b/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py
index c8b2724da..27519b76a 100644
--- a/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py
+++ b/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py
@@ -16,6 +16,11 @@ else:
from bases.FrameworkServices.SimpleService import SimpleService
+DEFAULT_CONNECT_TIMEOUT = 2.0
+DEFAULT_READ_TIMEOUT = 2.0
+DEFAULT_WRITE_TIMEOUT = 2.0
+
+
class SocketService(SimpleService):
def __init__(self, configuration=None, name=None):
self._sock = None
@@ -31,6 +36,9 @@ class SocketService(SimpleService):
self.__socket_config = None
self.__empty_request = "".encode()
SimpleService.__init__(self, configuration=configuration, name=name)
+ self.connect_timeout = configuration.get('connect_timeout', DEFAULT_CONNECT_TIMEOUT)
+ self.read_timeout = configuration.get('read_timeout', DEFAULT_READ_TIMEOUT)
+ self.write_timeout = configuration.get('write_timeout', DEFAULT_WRITE_TIMEOUT)
def _socket_error(self, message=None):
if self.unix_socket is not None:
@@ -86,6 +94,8 @@ class SocketService(SimpleService):
try:
self.debug('connecting socket to "{address}", port {port}'.format(address=sa[0], port=sa[1]))
+ self._sock.settimeout(self.connect_timeout)
+ self.debug('set socket connect timeout to: {0}'.format(self._sock.gettimeout()))
self._sock.connect(sa)
except (socket.error, ssl.SSLError) as error:
self.error('Failed to connect to "{address}", port {port}, error: {error}'.format(address=sa[0],
@@ -111,6 +121,8 @@ class SocketService(SimpleService):
try:
self.debug('attempting DGRAM unix socket "{0}"'.format(self.unix_socket))
self._sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
+ self._sock.settimeout(self.connect_timeout)
+ self.debug('set socket connect timeout to: {0}'.format(self._sock.gettimeout()))
self._sock.connect(self.unix_socket)
self.debug('connected DGRAM unix socket "{0}"'.format(self.unix_socket))
return True
@@ -121,6 +133,8 @@ class SocketService(SimpleService):
try:
self.debug('attempting STREAM unix socket "{0}"'.format(self.unix_socket))
self._sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ self._sock.settimeout(self.connect_timeout)
+ self.debug('set socket connect timeout to: {0}'.format(self._sock.gettimeout()))
self._sock.connect(self.unix_socket)
self.debug('connected STREAM unix socket "{0}"'.format(self.unix_socket))
return True
@@ -156,11 +170,6 @@ class SocketService(SimpleService):
self._sock = None
self.__socket_config = None
- if self._sock is not None:
- self._sock.setblocking(0)
- self._sock.settimeout(5)
- self.debug('set socket timeout to: {0}'.format(self._sock.gettimeout()))
-
def _disconnect(self):
"""
Close socket connection
@@ -183,6 +192,8 @@ class SocketService(SimpleService):
# Send request if it is needed
if self.request != self.__empty_request:
try:
+ self.debug('set socket write timeout to: {0}'.format(self._sock.gettimeout()))
+ self._sock.settimeout(self.write_timeout)
self.debug('sending request: {0}'.format(request or self.request))
self._sock.send(request or self.request)
except Exception as error:
@@ -203,6 +214,8 @@ class SocketService(SimpleService):
while True:
self.debug('receiving response')
try:
+ self.debug('set socket read timeout to: {0}'.format(self._sock.gettimeout()))
+ self._sock.settimeout(self.read_timeout)
buf = self._sock.recv(4096)
except Exception as error:
self._socket_error('failed to receive response: {0}'.format(error))