MySQLService: better error handling
Ilya committed
Mar 10, 2017 at 15:12 UTC
5bb65adeaf3ccfbaeb35f60fb09b14f7c18ce0b4
1 file changed
+8
-1
python.d/python_modules/base.py
+8
-1
@@ -1050,7 +1050,7 @@ class MySQLService(SimpleService):
1050
try:
1051
cursor.execute(query)
1052
except (MySQLdb.ProgrammingError, MySQLdb.OperationalError) as error:
1053
- if exc_info()[0] == MySQLdb.OperationalError and 'denied' not in str(error):
1053
+ if self.__is_error_critical(err_class=exc_info()[0], err_text=str(error)):
1054
raise RuntimeError
1055
self.error('Removed query: %s[%s]. Error: %s'
1056
% (name, query, error))
@@ -1065,3 +1065,10 @@ class MySQLService(SimpleService):
1065
return None
1066
else:
1067
return raw_data or None
1068
+
1069
+ @staticmethod
1070
+ def __is_error_critical(err_class, err_text):
1071
+ def in_not_in(value):
1072
+ return value[1:] in err_text if value[0] == '+' else value[1:] not in err_text
1073
+
1074
+ return err_class == MySQLdb.OperationalError and all([in_not_in('-denied'), in_not_in('-Unknown column')])