Milimetric has submitted this change and it was merged.

Change subject: Write different EventError code for validation errors
......................................................................


Write different EventError code for validation errors

Now that errors are encapsulated in the EventError schema, we can
differentiate between validation and other types of processor errors.
This will help eventlogging maintainers tell if an event is not
being produced propertly because of a validation error, or because
of something more annoying, like data truncation.

This will require the a schema change to EventError to add
'validation' as a possible enum value for error code.

Change-Id: Ia55906db7b6214e6d4b6c20477deb2979524cbe5
---
M server/bin/eventlogging-processor
M server/eventlogging/schema.py
M server/tests/fixtures.py
3 files changed, 26 insertions(+), 12 deletions(-)

Approvals:
  Milimetric: Looks good to me, approved



diff --git a/server/bin/eventlogging-processor 
b/server/bin/eventlogging-processor
index 7148a00..bb4e006 100755
--- a/server/bin/eventlogging-processor
+++ b/server/bin/eventlogging-processor
@@ -40,6 +40,7 @@
                           get_reader, get_writer, validate, setup_logging,
                           uri_force_raw, uri_append_query_items)
 
+from jsonschema import ValidationError
 
 setup_logging()
 
@@ -88,6 +89,14 @@
 if args.sid:
     args.input = uri_append_query_items(args.input, {'identity': args.sid})
 
+
+def write_event_error(writer, raw_event, error_message, error_code):
+    try:
+        event_error = create_event_error(raw_event, error_message, error_code)
+    except Exception as e:
+        logging.error('Unable to create EventError object: %s' % e.message)
+    writer.send(event_error)
+
 for raw_event in get_reader(args.input):
     try:
         event = parser.parse(raw_event)
@@ -95,16 +104,20 @@
         event.pop('isTruncated', None)
         validate(event)
         event['uuid'] = capsule_uuid(event)
-    except Exception as e:
-        logging.error('Unable to decode: %s (%s)', raw_event, e.message)
+
+    except ValidationError as e:
+        logging.error('Unable to validate: %s (%s)', raw_event, e.message)
         if writer_invalid:
-            try:
-                writer_invalid.send(create_event_error(
-                    raw_event, e.message, 'processor'
-                ))
-            except Exception as error_e:
-                logging.error(
-                    'Unable to create error event: %s' % error_e.message
-                )
+            write_event_error(
+                writer_invalid, raw_event, e.message, 'validation'
+            )
+
+    except Exception as e:
+        logging.error('Unable to process: %s (%s)', raw_event, e.message)
+        if writer_invalid:
+            write_event_error(
+                writer_invalid, raw_event, e.message, 'processor'
+            )
+
     else:
         writer.send(event)
diff --git a/server/eventlogging/schema.py b/server/eventlogging/schema.py
index ffab243..688b58b 100644
--- a/server/eventlogging/schema.py
+++ b/server/eventlogging/schema.py
@@ -45,7 +45,7 @@
 CAPSULE_SCID = ('EventCapsule', 10981547)
 
 # TODO:
-ERROR_SCID = ('EventError', 12402950)
+ERROR_SCID = ('EventError', 12407995)
 
 
 def get_schema(scid, encapsulate=False):
diff --git a/server/tests/fixtures.py b/server/tests/fixtures.py
index 4f511ff..ac6df58 100644
--- a/server/tests/fixtures.py
+++ b/server/tests/fixtures.py
@@ -78,7 +78,8 @@
                 "required": True,
                 "enum": [
                     "processor",
-                    "consumer"
+                    "consumer",
+                    "validation"
                 ],
             }
         }

-- 
To view, visit https://gerrit.wikimedia.org/r/216895
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ia55906db7b6214e6d4b6c20477deb2979524cbe5
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/EventLogging
Gerrit-Branch: master
Gerrit-Owner: Ottomata <[email protected]>
Gerrit-Reviewer: Joal <[email protected]>
Gerrit-Reviewer: Milimetric <[email protected]>
Gerrit-Reviewer: Ori.livneh <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to