Changeset 90665 in webkit


Ignore:
Timestamp:
Jul 8, 2011 2:18:13 PM (13 years ago)
Author:
abarth@webkit.org
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.
Location:
trunk/Tools
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r90664 r90665  
     12011-07-08  Adam Barth  <abarth@webkit.org>
     2
     3        TestResultsServer should keep old test results
     4        https://bugs.webkit.org/show_bug.cgi?id=64199
     5
     6        Reviewed by Ojan Vafai.
     7
     8        Having historical data will help us do failure archeology.
     9
     10        * TestResultServer/handlers/testfilehandler.py:
     11        * TestResultServer/model/testfile.py:
     12        * TestResultServer/templates/showfilelist.jsonp: Added.
     13
    1142011-07-08  Adam Roben  <aroben@apple.com>
    215
  • trunk/Tools/TestResultServer/handlers/testfilehandler.py

    r90418 r90665  
    3434from google.appengine.ext import webapp
    3535from google.appengine.ext.webapp import template
     36from google.appengine.ext import db
    3637
    3738from model.jsonresults import JsonResults
     
    5051
    5152
     53def _replace_jsonp_callback(json, callback_name):
     54    if callback_name and re.search(r"^[A-Za-z0-9_]+$", callback_name):
     55        json = re.sub(r"^[A-Za-z0-9_]+[(]", callback_name + "(", json)
     56    return json
     57
     58
    5259class DeleteFile(webapp.RequestHandler):
    5360    """Delete test file for a given builder and name from datastore."""
     
    7481    """Get file content or list of files for given builder and name."""
    7582
    76     def _get_file_list(self, master, builder, test_type, name):
     83    def _get_file_list(self, master, builder, test_type, name, callback_name=None):
    7784        """Get and display a list of files that matches builder and file name.
    7885
     
    99106            "files": files,
    100107        }
     108        if callback_name:
     109            json = template.render("templates/showfilelist.jsonp", template_values)
     110            self._serve_json(_replace_jsonp_callback(json, callback_name))
     111            return
    101112        self.response.out.write(template.render("templates/showfilelist.html",
    102113                                                template_values))
     
    120131        return files[0].data
    121132
     133    def _get_file_content_from_key(self, key):
     134        file = db.get(key)
     135
     136        if not file:
     137            logging.info("File not found, key %s.", key)
     138            return None
     139
     140        file.load_data()
     141        return file.data
     142
    122143    def _get_test_list_json(self, master, builder, test_type):
    123144        """Return json file with test name list only, do not include test
     
    135156        return JsonResults.get_test_list(builder, json)
    136157
     158    def _serve_json(self, json):
     159        if json:
     160            self.response.headers["Content-Type"] = "application/json"
     161            self.response.out.write(json)
     162        else:
     163            self.error(404)
     164
    137165    def get(self):
     166        key = self.request.get(PARAM_KEY)
    138167        master = self.request.get(PARAM_MASTER)
    139168        builder = self.request.get(PARAM_BUILDER)
     
    148177            master, builder, test_type, name)
    149178
    150         # If parameter "dir" is specified or there is no builder or filename
    151         # specified in the request, return list of files, otherwise, return
    152         # file content.
    153         if dir or not builder or not name:
    154             return self._get_file_list(master, builder, test_type, name)
    155 
    156         if name == "results.json" and test_list_json:
     179        if not key:
     180            # If parameter "dir" is specified or there is no builder or filename
     181            # specified in the request, return list of files, otherwise, return
     182            # file content.
     183            if dir or not builder or not name:
     184                return self._get_file_list(master, builder, test_type, name, callback_name)
     185
     186        if key:
     187            json = self._get_file_content_from_key(key)
     188        elif name == "results.json" and test_list_json:
    157189            json = self._get_test_list_json(master, builder, test_type)
    158190        else:
    159191            json = self._get_file_content(master, builder, test_type, name)
    160192
    161         if callback_name and re.search(r"^[A-Za-z0-9_]+$", callback_name):
    162             json = re.sub(r"^[A-Za-z0-9_]+[(]", callback_name + "(", json)
    163 
    164         if json:
    165             self.response.headers["Content-Type"] = "application/json"
    166             self.response.out.write(json)
    167         else:
    168             self.error(404)
     193        self._serve_json(_replace_jsonp_callback(json, callback_name))
     194
    169195
    170196class Upload(webapp.RequestHandler):
     
    208234                update_succeeded = JsonResults.update(master, builder, test_type, file.value)
    209235            else:
    210                 update_succeeded = TestFile.update(
     236                update_succeeded = TestFile.add_file(
    211237                    master, builder, test_type, file.filename, file.value)
    212238
  • trunk/Tools/TestResultServer/model/testfile.py

    r70822 r90665  
    9898        return file
    9999
    100     @classmethod
    101     def update(cls, master, builder, test_type, name, data):
    102         files = cls.get_files(master, builder, test_type, name)
    103         if not files:
    104             return cls.add_file(master, builder, test_type, name, data)
    105 
    106         file = files[0]
    107         if not file.save(data):
    108             return None
    109 
    110         logging.info(
    111             "File replaced, master: %s, builder: %s, test_type: %s, name: %s, data key: %s.",
    112             master, builder, test_type, file.name, str(file.data_keys))
    113 
    114         return file
    115 
    116100    def save(self, data):
    117101        if not self.save_data(data):
Note: See TracChangeset for help on using the changeset viewer.