Title: [90665] trunk/Tools
Revision
90665
Author
[email protected]
Date
2011-07-08 14:18:13 -0700 (Fri, 08 Jul 2011)

Log Message

TestResultsServer should keep old test results
https://bugs.webkit.org/show_bug.cgi?id=64199

Reviewed by Ojan Vafai.

Having historical data will help us do failure archeology.

* TestResultServer/handlers/testfilehandler.py:
* TestResultServer/model/testfile.py:
* TestResultServer/templates/showfilelist.jsonp: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Tools/ChangeLog (90664 => 90665)


--- trunk/Tools/ChangeLog	2011-07-08 20:58:44 UTC (rev 90664)
+++ trunk/Tools/ChangeLog	2011-07-08 21:18:13 UTC (rev 90665)
@@ -1,3 +1,16 @@
+2011-07-08  Adam Barth  <[email protected]>
+
+        TestResultsServer should keep old test results
+        https://bugs.webkit.org/show_bug.cgi?id=64199
+
+        Reviewed by Ojan Vafai.
+
+        Having historical data will help us do failure archeology.
+
+        * TestResultServer/handlers/testfilehandler.py:
+        * TestResultServer/model/testfile.py:
+        * TestResultServer/templates/showfilelist.jsonp: Added.
+
 2011-07-08  Adam Roben  <[email protected]>
 
         Remove commit-log-editor's dependency on Module::Load::Conditional

Modified: trunk/Tools/TestResultServer/handlers/testfilehandler.py (90664 => 90665)


--- trunk/Tools/TestResultServer/handlers/testfilehandler.py	2011-07-08 20:58:44 UTC (rev 90664)
+++ trunk/Tools/TestResultServer/handlers/testfilehandler.py	2011-07-08 21:18:13 UTC (rev 90665)
@@ -33,6 +33,7 @@
 from google.appengine.api import users
 from google.appengine.ext import webapp
 from google.appengine.ext.webapp import template
+from google.appengine.ext import db
 
 from model.jsonresults import JsonResults
 from model.testfile import TestFile
@@ -49,6 +50,12 @@
 PARAM_CALLBACK = "callback"
 
 
+def _replace_jsonp_callback(json, callback_name):
+    if callback_name and re.search(r"^[A-Za-z0-9_]+$", callback_name):
+        json = re.sub(r"^[A-Za-z0-9_]+[(]", callback_name + "(", json)
+    return json
+
+
 class DeleteFile(webapp.RequestHandler):
     """Delete test file for a given builder and name from datastore."""
 
@@ -73,7 +80,7 @@
 class GetFile(webapp.RequestHandler):
     """Get file content or list of files for given builder and name."""
 
-    def _get_file_list(self, master, builder, test_type, name):
+    def _get_file_list(self, master, builder, test_type, name, callback_name=None):
         """Get and display a list of files that matches builder and file name.
 
         Args:
@@ -98,6 +105,10 @@
             "name": name,
             "files": files,
         }
+        if callback_name:
+            json = template.render("templates/showfilelist.jsonp", template_values)
+            self._serve_json(_replace_jsonp_callback(json, callback_name))
+            return
         self.response.out.write(template.render("templates/showfilelist.html",
                                                 template_values))
 
@@ -119,6 +130,16 @@
 
         return files[0].data
 
+    def _get_file_content_from_key(self, key):
+        file = db.get(key)
+
+        if not file:
+            logging.info("File not found, key %s.", key)
+            return None
+
+        file.load_data()
+        return file.data
+
     def _get_test_list_json(self, master, builder, test_type):
         """Return json file with test name list only, do not include test
            results and other non-test-data .
@@ -134,7 +155,15 @@
 
         return JsonResults.get_test_list(builder, json)
 
+    def _serve_json(self, json):
+        if json:
+            self.response.headers["Content-Type"] = "application/json"
+            self.response.out.write(json)
+        else:
+            self.error(404)
+
     def get(self):
+        key = self.request.get(PARAM_KEY)
         master = self.request.get(PARAM_MASTER)
         builder = self.request.get(PARAM_BUILDER)
         test_type = self.request.get(PARAM_TEST_TYPE)
@@ -147,25 +176,22 @@
             "Getting files, master %s, builder: %s, test_type: %s, name: %s.",
             master, builder, test_type, name)
 
-        # If parameter "dir" is specified or there is no builder or filename
-        # specified in the request, return list of files, otherwise, return
-        # file content.
-        if dir or not builder or not name:
-            return self._get_file_list(master, builder, test_type, name)
+        if not key:
+            # If parameter "dir" is specified or there is no builder or filename
+            # specified in the request, return list of files, otherwise, return
+            # file content.
+            if dir or not builder or not name:
+                return self._get_file_list(master, builder, test_type, name, callback_name)
 
-        if name == "results.json" and test_list_json:
+        if key:
+            json = self._get_file_content_from_key(key)
+        elif name == "results.json" and test_list_json:
             json = self._get_test_list_json(master, builder, test_type)
         else:
             json = self._get_file_content(master, builder, test_type, name)
 
-        if callback_name and re.search(r"^[A-Za-z0-9_]+$", callback_name):
-            json = re.sub(r"^[A-Za-z0-9_]+[(]", callback_name + "(", json)
+        self._serve_json(_replace_jsonp_callback(json, callback_name))
 
-        if json:
-            self.response.headers["Content-Type"] = "application/json"
-            self.response.out.write(json)
-        else:
-            self.error(404)
 
 class Upload(webapp.RequestHandler):
     """Upload test results file to datastore."""
@@ -207,7 +233,7 @@
                 # Merge incremental json results.
                 update_succeeded = JsonResults.update(master, builder, test_type, file.value)
             else:
-                update_succeeded = TestFile.update(
+                update_succeeded = TestFile.add_file(
                     master, builder, test_type, file.filename, file.value)
 
             if not update_succeeded:

Modified: trunk/Tools/TestResultServer/model/testfile.py (90664 => 90665)


--- trunk/Tools/TestResultServer/model/testfile.py	2011-07-08 20:58:44 UTC (rev 90664)
+++ trunk/Tools/TestResultServer/model/testfile.py	2011-07-08 21:18:13 UTC (rev 90665)
@@ -97,22 +97,6 @@
 
         return file
 
-    @classmethod
-    def update(cls, master, builder, test_type, name, data):
-        files = cls.get_files(master, builder, test_type, name)
-        if not files:
-            return cls.add_file(master, builder, test_type, name, data)
-
-        file = files[0]
-        if not file.save(data):
-            return None
-
-        logging.info(
-            "File replaced, master: %s, builder: %s, test_type: %s, name: %s, data key: %s.",
-            master, builder, test_type, file.name, str(file.data_keys))
-
-        return file
-
     def save(self, data):
         if not self.save_data(data):
             return False

Added: trunk/Tools/TestResultServer/templates/showfilelist.jsonp (0 => 90665)


--- trunk/Tools/TestResultServer/templates/showfilelist.jsonp	                        (rev 0)
+++ trunk/Tools/TestResultServer/templates/showfilelist.jsonp	2011-07-08 21:18:13 UTC (rev 90665)
@@ -0,0 +1,3 @@
+CALLBACK([{% for file in files %}
+  { "key": "{{ file.key }}" },{% endfor %}
+]);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to