diff --git a/slapos/promise/plugin/check_surykatka_json.py b/slapos/promise/plugin/check_surykatka_json.py
index 3ea47e7cc59bf5e970cc29769c634d6e13207b86..aa874211600cce2a678bdf1855eddd099db9893f 100644
--- a/slapos/promise/plugin/check_surykatka_json.py
+++ b/slapos/promise/plugin/check_surykatka_json.py
@@ -27,10 +27,10 @@ class RunPromise(GenericPromise):
     self.error_list = []
     self.info_list = []
 
-  def appendError(self, message):
+  def appendErrorMessage(self, message):
     self.error_list.append(message)
 
-  def appendInfo(self, message):
+  def appendInfoMessage(self, message):
     self.info_list.append(message)
 
   def emitLog(self):
@@ -44,19 +44,19 @@ class RunPromise(GenericPromise):
   def senseBotStatus(self):
     key = 'bot_status'
 
-    def logError(msg, *args):
-      self.appendError(key + ': ' + msg % args)
+    def appendError(msg, *args):
+      self.appendErrorMessage(key + ': ERROR ' + msg % args)
 
     if key not in self.surykatka_json:
-      logError("%r not in %r", key, self.json_file)
+      appendError("%r not in %r", key, self.json_file)
       return
     bot_status_list = self.surykatka_json[key]
     if len(bot_status_list) == 0:
-      logError("%r empty in %r", key, self.json_file)
+      appendError("%r empty in %r", key, self.json_file)
       return
     bot_status = bot_status_list[0]
     if bot_status.get('text') != 'loop':
-      logError("No type loop detected in %r", self.json_file)
+      appendError("No type loop detected in %r", self.json_file)
       return
     timetuple = email.utils.parsedate(bot_status['date'])
     last_bot_datetime = datetime.datetime.fromtimestamp(time.mktime(timetuple))
@@ -64,23 +64,24 @@ class RunPromise(GenericPromise):
     delta = self.utcnow - last_bot_datetime
     # sanity check
     if delta < datetime.timedelta(minutes=0):
-      logError('Last bot datetime %s is in future, UTC now %s',
-               last_bot_datetime_string, self.utcnow_string)
+      appendError('Last bot datetime %s is in future, UTC now %s',
+                  last_bot_datetime_string, self.utcnow_string)
       return
     if delta > datetime.timedelta(minutes=15):
-      logError('Last bot datetime %s is more than 15 minutes old, UTC now %s',
-               last_bot_datetime_string, self.utcnow_string)
+      appendError(
+        'Last bot datetime %s is more than 15 minutes old, UTC now %s',
+        last_bot_datetime_string, self.utcnow_string)
       return
 
-    self.appendInfo(
-      '%s: Last bot status from %s ok, UTC now is %s' %
+    self.appendInfoMessage(
+      '%s: OK Last bot status from %s, UTC now is %s' %
       (key, last_bot_datetime_string, self.utcnow_string))
 
   def senseSslCertificate(self):
     key = 'ssl_certificate'
 
     def appendError(msg, *args):
-      self.appendError(key + ': ' + msg % args)
+      self.appendErrorMessage(key + ': ERROR ' + msg % args)
 
     url = self.getConfig('url')
     parsed_url = urlparse(url)
@@ -128,8 +129,8 @@ class RunPromise(GenericPromise):
           self.utcnow_string)
         return
       else:
-        self.appendInfo(
-          '%s: Certificate for %s will expire on %s, which is more than %s '
+        self.appendInfoMessage(
+          '%s: OK Certificate for %s will expire on %s, which is more than %s '
           'days, UTC now is %s' %
           (key, url, entry['not_after'], certificate_expiration_days,
            self.utcnow_string))
@@ -139,11 +140,11 @@ class RunPromise(GenericPromise):
     key = 'http_query'
     error_list = []
 
-    def logError(msg, *args):
-      self.appendError(key + ': ' + msg % args)
+    def appendError(msg, *args):
+      self.appendErrorMessage(key + ': ERROR ' + msg % args)
 
     if key not in self.surykatka_json:
-      logError("%r not in %r", key, self.json_file)
+      appendError("%r not in %r", key, self.json_file)
       return
 
     url = self.getConfig('url')
@@ -152,7 +153,7 @@ class RunPromise(GenericPromise):
 
     entry_list = [q for q in self.surykatka_json[key] if q['url'] == url]
     if len(entry_list) == 0:
-      logError('No data for %s', url)
+      appendError('No data for %s', url)
       return
     error_list = []
     for entry in entry_list:
@@ -175,15 +176,15 @@ class RunPromise(GenericPromise):
           'expected IPs %s differes from got %s' % (
             ' '.join(ip_list), ' '.join(db_ip_list)))
     if len(error_list):
-      logError('Problem with %s : ' % (url,) + ', '.join(error_list))
+      appendError('%s : ' % (url,) + ', '.join(error_list))
       return
     if len(ip_list) > 0:
-      self.appendInfo(
-        '%s: %s replied correctly with status code %s on ip list %s' %
+      self.appendInfoMessage(
+        '%s: OK %s replied correctly with status code %s on ip list %s' %
         (key, url, status_code, ' '.join(ip_list)))
     else:
-      self.appendInfo(
-        '%s: %s replied correctly with status code %s' %
+      self.appendInfoMessage(
+        '%s: OK %s replied correctly with status code %s' %
         (key, url, status_code))
 
   def sense(self):
@@ -202,13 +203,14 @@ class RunPromise(GenericPromise):
 
     self.json_file = self.getConfig('json-file', '')
     if not os.path.exists(self.json_file):
-      self.appendError('File %r does not exists' % self.json_file)
+      self.appendErrorMessage('ERROR File %r does not exists' % self.json_file)
     else:
       with open(self.json_file) as fh:
         try:
           self.surykatka_json = json.load(fh)
         except Exception:
-          self.appendError("Problem loading JSON from %r" % self.json_file)
+          self.appendErrorMessage(
+            "ERROR loading JSON from %r" % self.json_file)
         else:
           report = self.getConfig('report')
           if report == 'bot_status':
@@ -217,7 +219,8 @@ class RunPromise(GenericPromise):
             self.senseHttpQuery()
             self.senseSslCertificate()
           else:
-            self.appendError("Report %r is not supported" % report)
+            self.appendErrorMessage(
+              "ERROR Report %r is not supported" % report)
     self.emitLog()
 
   def anomaly(self):
diff --git a/slapos/test/promise/plugin/test_check_surykatka_json.py b/slapos/test/promise/plugin/test_check_surykatka_json.py
index 6f3cca6c9ef42015a0aea2b25c58ebaeabd32955..8fd9ed2c97b7a0b090816a98090944fa3418d9ba 100644
--- a/slapos/test/promise/plugin/test_check_surykatka_json.py
+++ b/slapos/test/promise/plugin/test_check_surykatka_json.py
@@ -51,7 +51,7 @@ class TestCheckSurykatkaJSON(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "File '' does not exists")
+      "ERROR File '' does not exists")
 
   def test_not_existing_file(self):
     self.writeSurykatkaPromise({'json-file': self.json_file})
@@ -60,7 +60,7 @@ class TestCheckSurykatkaJSON(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "File '%s' does not exists" % (self.json_file,))
+      "ERROR File '%s' does not exists" % (self.json_file,))
 
   def test_empty_file(self):
     self.writeSurykatkaPromise({'json-file': self.json_file})
@@ -70,7 +70,7 @@ class TestCheckSurykatkaJSON(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "Problem loading JSON from '%s'" % (self.json_file,))
+      "ERROR loading JSON from '%s'" % (self.json_file,))
 
 
 class TestCheckSurykatkaJSONUnknownReport(CheckSurykatkaJSONMixin):
@@ -89,7 +89,7 @@ class TestCheckSurykatkaJSONUnknownReport(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "Report 'NOT_EXISTING_ENTRY' is not supported")
+      "ERROR Report 'NOT_EXISTING_ENTRY' is not supported")
 
 
 class TestCheckSurykatkaJSONBotStatus(CheckSurykatkaJSONMixin):
@@ -114,8 +114,8 @@ class TestCheckSurykatkaJSONBotStatus(CheckSurykatkaJSONMixin):
     self.launcher.run()
     self.assertPassedMessage(
       self.getPromiseResult(self.promise_name),
-      "bot_status: Last bot status from Fri, 13 Dec 2222 08:10:11 -0000 "
-      "ok, UTC now is Wed, 13 Dec 2222 09:11:12 -0000"
+      "bot_status: OK Last bot status from Fri, 13 Dec 2222 08:10:11 -0000, "
+      "UTC now is Wed, 13 Dec 2222 09:11:12 -0000"
     )
 
   def test_bot_status_future(self):
@@ -140,7 +140,7 @@ class TestCheckSurykatkaJSONBotStatus(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "bot_status: Last bot datetime Sat, 13 Dec 2223 08:10:11 -0000 is "
+      "bot_status: ERROR Last bot datetime Sat, 13 Dec 2223 08:10:11 -0000 is "
       "in future, UTC now Wed, 13 Dec 2222 09:11:12 -0000"
     )
 
@@ -166,7 +166,7 @@ class TestCheckSurykatkaJSONBotStatus(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "bot_status: Last bot datetime Sat, 13 Dec 2223 08:10:11 -0000 is "
+      "bot_status: ERROR Last bot datetime Sat, 13 Dec 2223 08:10:11 -0000 is "
       "more than 15 minutes old, UTC now Wed, 13 Dec 2223 09:26:12 -0000"
     )
 
@@ -185,7 +185,7 @@ class TestCheckSurykatkaJSONBotStatus(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "bot_status: 'bot_status' not in '%s'" % (self.json_file,))
+      "bot_status: ERROR 'bot_status' not in '%s'" % (self.json_file,))
 
   def test_empty_bot_status(self):
     self.writeSurykatkaPromise(
@@ -203,7 +203,7 @@ class TestCheckSurykatkaJSONBotStatus(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "bot_status: 'bot_status' empty in '%s'" % (self.json_file,))
+      "bot_status: ERROR 'bot_status' empty in '%s'" % (self.json_file,))
 
 
 class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
@@ -259,9 +259,9 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
     self.launcher.run()
     self.assertPassedMessage(
       self.getPromiseResult(self.promise_name),
-      "http_query: https://www.erp5.com/ replied correctly with "
+      "http_query: OK https://www.erp5.com/ replied correctly with "
       "status code 302 on ip list 127.0.0.1 127.0.0.2 ssl_certificate: "
-      "Certificate for https://www.erp5.com/ will expire on Mon, 13 Jul "
+      "OK Certificate for https://www.erp5.com/ will expire on Mon, 13 Jul "
       "2020 12:00:00 -0000, which is more than 15 days, UTC now is "
       "Fri, 27 Dec 2019 15:11:12 -0000"
     )
@@ -306,7 +306,7 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
     self.launcher.run()
     self.assertPassedMessage(
       self.getPromiseResult(self.promise_name),
-      "http_query: http://www.erp5.com/ replied correctly with "
+      "http_query: OK http://www.erp5.com/ replied correctly with "
       "status code 302 on ip list 127.0.0.1 127.0.0.2"
     )
 
@@ -361,9 +361,9 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
     self.launcher.run()
     self.assertPassedMessage(
       self.getPromiseResult(self.promise_name),
-      "http_query: https://www.erp5.com/ replied correctly with status "
-      "code 302 ssl_certificate: Certificate for https://www.erp5.com/ will "
-      "expire on Mon, 13 Jul 2020 12:00:00 -0000, which is more than 15 "
+      "http_query: OK https://www.erp5.com/ replied correctly with status "
+      "code 302 ssl_certificate: OK Certificate for https://www.erp5.com/ "
+      "will expire on Mon, 13 Jul 2020 12:00:00 -0000, which is more than 15 "
       "days, UTC now is Fri, 27 Dec 2019 15:11:12 -0000"
     )
 
@@ -402,8 +402,8 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "http_query: No data for https://www.erp5.com/ ssl_certificate: "
-      "Certificate for https://www.erp5.com/ will expire on Mon, 13 Jul "
+      "http_query: ERROR No data for https://www.erp5.com/ ssl_certificate: "
+      "OK Certificate for https://www.erp5.com/ will expire on Mon, 13 Jul "
       "2020 12:00:00 -0000, which is more than 15 days, UTC now is "
       "Fri, 27 Dec 2019 15:11:12 -0000"
     )
@@ -449,8 +449,8 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "ssl_certificate: No data for https://www.erp5.com/ http_query: "
-      "https://www.erp5.com/ replied correctly with "
+      "ssl_certificate: ERROR No data for https://www.erp5.com/ http_query: "
+      "OK https://www.erp5.com/ replied correctly with "
       "status code 302 on ip list 127.0.0.1 127.0.0.2"
     )
 
@@ -493,9 +493,10 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "ssl_certificate: No data for https://www.erp5.com/ . If the error "
-      "persist, please update surykatka. http_query: https://www.erp5.com/ "
-      "replied correctly with status code 302 on ip list 127.0.0.1 127.0.0.2"
+      "ssl_certificate: ERROR No data for https://www.erp5.com/ . If the "
+      "error persist, please update surykatka. http_query: OK "
+      "https://www.erp5.com/ replied correctly with status code 302 on ip "
+      "list 127.0.0.1 127.0.0.2"
     )
 
   def test_bad_code(self):
@@ -550,8 +551,8 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "http_query: Problem with https://www.erp5.com/ : IP 127.0.0.1 got "
-      "status code 302 instead of 301 ssl_certificate: Certificate for "
+      "http_query: ERROR https://www.erp5.com/ : IP 127.0.0.1 got "
+      "status code 302 instead of 301 ssl_certificate: OK Certificate for "
       "https://www.erp5.com/ will expire on Mon, 13 Jul 2020 12:00:00 "
       "-0000, which is more than 15 days, UTC now is Fri, 27 Dec 2019 "
       "15:11:12 -0000"
@@ -597,8 +598,8 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "http_query: Problem with https://www.erp5.com/ : IP 127.0.0.1 got "
-      "status code %s instead of 301 ssl_certificate: Certificate for "
+      "http_query: ERROR https://www.erp5.com/ : IP 127.0.0.1 got "
+      "status code %s instead of 301 ssl_certificate: OK Certificate for "
       "https://www.erp5.com/ will expire on Mon, 13 Jul 2020 12:00:00 "
       "-0000, which is more than 15 days, UTC now is Fri, 27 Dec 2019 "
       "15:11:12 -0000" % explanation
@@ -669,9 +670,9 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "http_query: Problem with https://www.erp5.com/ : expected IPs "
+      "http_query: ERROR https://www.erp5.com/ : expected IPs "
       "127.0.0.1 127.0.0.2 differes from got 127.0.0.1 127.0.0.4 "
-      "ssl_certificate: Certificate for https://www.erp5.com/ will expire "
+      "ssl_certificate: OK Certificate for https://www.erp5.com/ will expire "
       "on Mon, 13 Jul 2020 12:00:00 -0000, which is more than 15 days, "
       "UTC now is Fri, 27 Dec 2019 15:11:12 -0000"
     )
@@ -729,9 +730,9 @@ class TestCheckSurykatkaJSONHttpQuery(CheckSurykatkaJSONMixin):
       self.launcher.run()
     self.assertFailedMessage(
       self.getPromiseResult(self.promise_name),
-      "http_query: Problem with https://www.erp5.com/ : IP 127.0.0.1 got "
+      "http_query: ERROR https://www.erp5.com/ : IP 127.0.0.1 got "
       "status code 302 instead of 301, expected IPs 127.0.0.1 127.0.0.2 "
-      "differes from got 127.0.0.1 127.0.0.4 ssl_certificate: Certificate "
+      "differes from got 127.0.0.1 127.0.0.4 ssl_certificate: OK Certificate "
       "for https://www.erp5.com/ will expire on Mon, 13 Jul 2020 12:00:00 "
       "-0000, which is more than 15 days, UTC now is Fri, 27 Dec 2019 "
       "15:11:12 -0000"