Title: [240674] trunk/Tools
Revision
240674
Author
[email protected]
Date
2019-01-29 12:55:22 -0800 (Tue, 29 Jan 2019)

Log Message

[ews-app] Handle incoming results data
https://bugs.webkit.org/show_bug.cgi?id=193973

Reviewed by Lucas Forschler.

* BuildSlaveSupport/ews-app/ews/views/results.py:

Modified Paths

Diff

Modified: trunk/Tools/BuildSlaveSupport/ews-app/ews/views/results.py (240673 => 240674)


--- trunk/Tools/BuildSlaveSupport/ews-app/ews/views/results.py	2019-01-29 20:53:17 UTC (rev 240673)
+++ trunk/Tools/BuildSlaveSupport/ews-app/ews/views/results.py	2019-01-29 20:55:22 UTC (rev 240674)
@@ -22,11 +22,65 @@
 
 from __future__ import unicode_literals
 
+import json
+import logging
+
 from django.http import HttpResponse
 from django.shortcuts import render
 from django.views import View
+from django.views.decorators.csrf import csrf_exempt
+from django.utils.decorators import method_decorator
 
+from ews.models.build import Build
+from ews.models.step import Step
 
+_log = logging.getLogger(__name__)
+
+
+@method_decorator(csrf_exempt, name='dispatch')
 class Results(View):
-    def post(self, request, patch_id):
-        return HttpResponse("Placeholder to handle post request for result for patch: {}.".format(patch_id))
+    def post(self, request):
+        data = ""
+
+        if data.get('type') == u'ews-build':
+            return self.build_event(data)
+
+        if data.get('type') == u'ews-step':
+            return self.step_event(data)
+
+        _log.error('Unexpected data type received: {}'.format(data.get('type')))
+        return HttpResponse('Unexpected data type received: {}'.format(data.get('type')))
+
+    def build_event(self, data):
+        if not self.is_valid_result(data):
+            return HttpResponse("Incomplete data.")
+
+        patch_id = data['patch_id']
+        if not patch_id or patch_id < 1:
+            return HttpResponse("Invalid patch id: {}.".format(patch_id))
+
+        Build.save_build(patch_id=int(patch_id), build_id=data['build_id'], builder_id=data['builder_id'], number=data['number'], result=data['result'],
+                   state_string=data['state_string'], started_at=data['started_at'], complete_at=data['complete_at'])
+        return HttpResponse("Saved data for patch: {}.\n".format(patch_id))
+
+    def step_event(self, data):
+        if not self.is_valid_result(data):
+            return HttpResponse("Incomplete data.")
+
+        Step.save_step(step_id=data['step_id'], build_id=data['build_id'], result=data['result'],
+                   state_string=data['state_string'], started_at=data['started_at'], complete_at=data['complete_at'])
+        return HttpResponse("Saved data for step: {}.\n".format(data['step_id']))
+
+    def is_valid_result(self, data):
+        if data['type'] not in [u'ews-build', u'ews-step']:
+            _log.error("Invalid data type: {}".format(data['type']))
+            return False
+
+        required_keys = {u'ews-build': ['patch_id', 'build_id', 'builder_id', 'number', 'result', 'state_string', 'started_at', 'complete_at'],
+                         u'ews-step': ['step_id', 'build_id', 'result', 'state_string', 'started_at', 'complete_at']}
+
+        for key in required_keys.get(data.get('type')):
+            if key not in data:
+                _log.warn('Data is missing {}'.format(key))
+                return False
+        return True

Modified: trunk/Tools/ChangeLog (240673 => 240674)


--- trunk/Tools/ChangeLog	2019-01-29 20:53:17 UTC (rev 240673)
+++ trunk/Tools/ChangeLog	2019-01-29 20:55:22 UTC (rev 240674)
@@ -1,5 +1,14 @@
 2019-01-29  Aakash Jain  <[email protected]>
 
+        [ews-app] Handle incoming results data
+        https://bugs.webkit.org/show_bug.cgi?id=193973
+
+        Reviewed by Lucas Forschler.
+
+        * BuildSlaveSupport/ews-app/ews/views/results.py:
+
+2019-01-29  Aakash Jain  <[email protected]>
+
         [ews-app] Make the results url generic
         https://bugs.webkit.org/show_bug.cgi?id=193928
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to