shinken-monitoring / mod-livestatus

Shinken module for presenting data with a MK/Livestatus comptabile interface

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Livestatus crash with non-ascii characters

FloooW opened this issue · comments

When the livestatus module is attempting to output non-ascii characters, it crashes. Such caracters can be found in macros.

[1470141883] ERROR: [broker-1] Unexpected error: 'ascii' codec can't encode character u'\xfc' in position 11: ordinal not in range(128) ; traceback: Traceback (most recent call last):
File "/var/lib/shinken/modules/livestatus/livestatus_client_thread.py", line 254, in run
self.handle_request(request_bytes)
File "/var/lib/shinken/modules/livestatus/livestatus_client_thread.py", line 237, in handle_request
self.send_response(response)
File "/var/lib/shinken/modules/livestatus/livestatus_client_thread.py", line 208, in send_response
for data in response:
File "/var/lib/shinken/modules/livestatus/livestatus_response.py", line 66, in iter
for v2 in value:
File "/var/lib/shinken/modules/livestatus/livestatus_response.py", line 278, in make_live_data_generator
for value in self.make_live_data_generator2(result, columns, aliases):
File "/var/lib/shinken/modules/livestatus/livestatus_response.py", line 261, in make_live_data_generator2
l.append(row_item_handler(self, value))
File "/var/lib/shinken/modules/livestatus/livestatus_response.py", line 160, in _format_csv_value
return self.separators.list.join(str(x) for x in value)
File "/var/lib/shinken/modules/livestatus/livestatus_response.py", line 160, in
return self.separators.list.join(str(x) for x in value)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 11: ordinal not in range(128)

[1470141938] INFO: [broker-1] [Livestatus Broker] So I quit
[1470141938] INFO: [broker-1] [Livestatus Broker] So I quit

In this case, the issue was caused by the character ü.

Adding the following lines after the imports to the file "/var/lib/shinken/modules/livestatus/livestatus_response.py" fixed the issue.

import sys  # import sys package, if not already imported
reload(sys)
sys.setdefaultencoding('utf-8')