Changeset 56635 in webkit


Ignore:
Timestamp:
Mar 26, 2010 11:14:42 AM (14 years ago)
Author:
eric@webkit.org
Message:

2010-03-26 Victor Wang <victorw@chromium.org>

Reviewed by Adam Barth.

Host layout test flakiness dashboard in TestResultServer appengine.

Flakiness dashboard is a tool to monitor layout test status and
help layout test regression diagnostics.

https://bugs.webkit.org/show_bug.cgi?id=36195

  • TestResultServer/handlers/dashboardhandler.py: Added.
    • New handler to handle dashboard request
  • TestResultServer/handlers/menu.py:
    • Add new dashboard links
  • TestResultServer/handlers/testfilehandler.py:
    • Request routes refactory
  • TestResultServer/index.yaml:
  • TestResultServer/main.py:
    • Add new dashboard request routes and refactor test result file rountes.
  • TestResultServer/model/dashboardfile.py: Added.
    • Model to access datastore for dashboard files
  • TestResultServer/model/testfile.py:
  • TestResultServer/stylesheets/dashboardfile.css: Added.
  • TestResultServer/templates/dashboardfilelist.html: Added.
  • TestResultServer/templates/showfilelist.html:
Location:
trunk/WebKitTools
Files:
4 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKitTools/ChangeLog

    r56632 r56635  
     12010-03-26  Victor Wang  <victorw@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Host layout test flakiness dashboard in TestResultServer appengine.
     6
     7        Flakiness dashboard is a tool to monitor layout test status and
     8        help layout test regression diagnostics.
     9
     10        https://bugs.webkit.org/show_bug.cgi?id=36195
     11
     12        * TestResultServer/handlers/dashboardhandler.py: Added.
     13         - New handler to handle dashboard request
     14        * TestResultServer/handlers/menu.py:
     15         - Add new dashboard links
     16        * TestResultServer/handlers/testfilehandler.py:
     17         - Request routes refactory
     18        * TestResultServer/index.yaml:
     19        * TestResultServer/main.py:
     20         - Add new dashboard request routes and refactor test result file rountes.
     21        * TestResultServer/model/dashboardfile.py: Added.
     22         - Model to access datastore for dashboard files
     23        * TestResultServer/model/testfile.py:
     24        * TestResultServer/stylesheets/dashboardfile.css: Added.
     25        * TestResultServer/templates/dashboardfilelist.html: Added.
     26        * TestResultServer/templates/showfilelist.html:
     27
    1282010-03-26  Adam Barth  <abarth@webkit.org>
    229
  • trunk/WebKitTools/TestResultServer/app.yaml

    r55960 r56635  
    88  static_dir: stylesheets
    99
     10- url: /testfile/delete
     11  script: main.py
     12  login: admin
     13
     14- url: /dashboards/delete
     15  script: main.py
     16  login: admin
     17
    1018- url: /.*
    1119  script: main.py
  • trunk/WebKitTools/TestResultServer/handlers/menu.py

    r55960 r56635  
    3131
    3232menu = [
    33     ["List of files", "/getfile"],
    34     ["List of results.json files", "/getfile?name=results.json"],
    35     ["List of expectations.json files", "/getfile?name=expectations.json"],
    36     ["Upload file", "/uploadform"],
     33    ["List of test files", "/testfile"],
     34    ["List of results.json files", "/testfile?name=results.json"],
     35    ["List of expectations.json files", "/testfile?name=expectations.json"],
     36    ["Upload test file", "/testfile/uploadform"],
     37    ["List of dashboard files", "/dashboards/"],
     38    ["Update dashboard files", "/dashboards/update"],
    3739]
    3840
  • trunk/WebKitTools/TestResultServer/handlers/testfilehandler.py

    r55960 r56635  
    3030import urllib
    3131
     32from google.appengine.api import users
    3233from google.appengine.ext import blobstore
    3334from google.appengine.ext import webapp
     
    6162
    6263        # Display file list after deleting the file.
    63         self.redirect("/getfile?builder=%s&testtype=%s&name=%s"
     64        self.redirect("/testfile?builder=%s&testtype=%s&name=%s"
    6465            % (builder, test_type, name))
    6566
     
    6869    """Get file content or list of files for given builder and name."""
    6970
    70     def get_file_list(self, builder, test_type, name):
     71    def _get_file_list(self, builder, test_type, name):
    7172        """Get and display a list of files that matches builder and file name.
    7273
     
    8586
    8687        template_values = {
     88            "admin": users.is_current_user_admin(),
    8789            "builder": builder,
    8890            "test_type": test_type,
     
    9395                                                template_values))
    9496
    95     def get_file_content(self, builder, test_type, name):
     97    def _get_file_content(self, builder, test_type, name):
    9698        """Return content of the file that matches builder and file name.
    9799
     
    127129        # file content.
    128130        if dir or not builder or not name:
    129             return self.get_file_list(builder, test_type, name)
     131            return self._get_file_list(builder, test_type, name)
    130132        else:
    131             return self.get_file_content(builder, test_type, name)
     133            return self._get_file_content(builder, test_type, name)
    132134
    133135
     
    136138
    137139    def get(self):
    138         upload_url = blobstore.create_upload_url("/upload")
     140        upload_url = blobstore.create_upload_url("/testfile/upload")
    139141        logging.info("Getting upload url: %s.", upload_url)
    140142        self.response.out.write(upload_url)
     
    195197
    196198    def get(self):
    197         upload_url = blobstore.create_upload_url("/upload")
     199        upload_url = blobstore.create_upload_url("/testfile/upload")
    198200        template_values = {
    199201            "upload_url": upload_url,
     
    206208
    207209    def get(self):
     210        logging.debug("Update status")
     211
    208212        if self.request.path == "/uploadsuccess":
    209213            self.response.set_status(200)
     
    212216            errors = self.request.params.getall("error")
    213217            if errors:
    214                 messages = "FAIL: " + "\n".join(errors)
     218                messages = "FAIL: " + "; ".join(errors)
    215219                logging.warning(messages)
    216                 self.response.out.write(messages)
    217                 self.response.set_status(500)
     220                self.response.set_status(500, messages)
     221                self.response.out.write("FAIL")
  • trunk/WebKitTools/TestResultServer/index.yaml

    r55960 r56635  
    1010# automatically uploaded to the admin console when you next deploy
    1111# your application using appcfg.py.
     12
     13- kind: DashboardFile
     14  properties:
     15  - name: name
     16  - name: date
     17    direction: desc
    1218
    1319- kind: TestFile
     
    3440- kind: TestFile
    3541  properties:
    36   - name: builder=
    37   - name: name=
    38   - name: date
    39     direction: desc
    40 
    41 - kind: TestFile
    42   properties:
    4342  - name: name
    4443  - name: date
  • trunk/WebKitTools/TestResultServer/main.py

    r55960 r56635  
    3434from google.appengine.ext.webapp.util import run_wsgi_app
    3535
    36 from handlers.menu import Menu
    37 from handlers.testfilehandler import DeleteFile
    38 from handlers.testfilehandler import GetFile
    39 from handlers.testfilehandler import GetUploadUrl
    40 from handlers.testfilehandler import Upload
    41 from handlers.testfilehandler import UploadForm
    42 from handlers.testfilehandler import UploadStatus
     36from handlers import dashboardhandler
     37from handlers import menu
     38from handlers import testfilehandler
    4339
    4440routes = [
    45     ('/deletefile', DeleteFile),
    46     ('/getfile', GetFile),
    47     ('/getuploadurl', GetUploadUrl),
    48     ('/upload', Upload),
    49     ('/uploadfail', UploadStatus),
    50     ('/uploadform', UploadForm),
    51     ('/uploadsuccess', UploadStatus),
    52     ('/*|/menu', Menu),
     41    ('/dashboards/delete', dashboardhandler.DeleteDashboardFile),
     42    ('/dashboards/update', dashboardhandler.UpdateDashboardFile),
     43    ('/dashboards/([^?]+)?', dashboardhandler.GetDashboardFile),
     44    ('/testfile/delete', testfilehandler.DeleteFile),
     45    ('/testfile/uploadurl', testfilehandler.GetUploadUrl),
     46    ('/testfile/upload', testfilehandler.Upload),
     47    ('/testfile/uploadform', testfilehandler.UploadForm),
     48    ('/testfile/?', testfilehandler.GetFile),
     49    ('/uploadfail', testfilehandler.UploadStatus),
     50    ('/uploadsuccess', testfilehandler.UploadStatus),
     51    ('/*|/menu', menu.Menu),
    5352]
    5453
  • trunk/WebKitTools/TestResultServer/model/testfile.py

    r55960 r56635  
    8686        logging.info(
    8787            "File saved, builder: %s, test_type: %s, name: %s, blob key: %s.",
    88             builder, file.name, file.blob_key)
     88            builder, test_type, file.name, file.blob_key)
    8989
    9090        return file
  • trunk/WebKitTools/TestResultServer/templates/showfilelist.html

    r55960 r56635  
    1818            <th>File</th>
    1919            <th>Date</th>
     20            {% if admin %}
    2021            <th></th>
     22            {% endif %}
    2123        {% for file in files %}
    2224        <tr>{% if file.builder and file.name %}
    23             <td><a href="/getfile?builder={{ file.builder }}" >
     25            <td><a href="/testfile?builder={{ file.builder }}" >
    2426                {{ file.builder }}
    2527                </a>
    2628            </td>
    2729            <td>{% if file.test_type %}
    28                 <a href="/getfile?testtype={{ file.test_type }}" >
     30                <a href="/testfile?testtype={{ file.test_type }}" >
    2931                {{ file.test_type }}
    3032                </a>
    3133                {% endif %}
    3234            </td>
    33             <td><a href="/getfile?builder={{ file.builder }}&name={{ file.name }}" >
     35            <td><a href="/testfile?builder={{ file.builder }}&name={{ file.name }}" >
    3436                {{ file.name }}
    3537                </a>
     
    3739            <td>{{ file.date|date:"d-M-Y H:i:s" }}
    3840            </td>
    39             <td><a href="/deletefile?key={{ file.key }}&builder={{ builder }}&name={{ name }}" >
     41            {% if admin %}
     42            <td><a href="/testfile/delete?key={{ file.key }}&builder={{ builder }}&name={{ name }}" >
    4043                Delete
    4144                </a>
    4245            </td>
     46            {% endif %}
    4347        {% endif %}
    4448        </tr>
  • trunk/WebKitTools/TestResultServer/templates/uploadform.html

    r55960 r56635  
    77<body>
    88<h1>Upload Test Result File</h1>
    9 <form accept="text/html" action="{{ upload_url }}" enctype="multipart/form-data" method="post">
     9<form id="uploadForm" name="test_result_upload" accept="text/html" action="{{ upload_url }}" enctype="multipart/form-data" method="post">
    1010    <br>
    1111    <table>
     
    1919    </tr>
    2020    </table>
    21     <div><input class=button type="file" name="file"></div>
     21    <div><input class=button type="file" name="file" multiple></div>
    2222    <br>
    2323    <div><input class=button type="submit" value="Upload"></div>
Note: See TracChangeset for help on using the changeset viewer.