[LNT] r306743 - Add an API for accessing sample data

Chris Matthews via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 29 14:33:01 PDT 2017


Author: cmatthews
Date: Thu Jun 29 14:33:01 2017
New Revision: 306743

URL: http://llvm.org/viewvc/llvm-project?rev=306743&view=rev
Log:
Add an API for accessing sample data

Not super useful on its own, but will be useful when I add delete. Also
nice for testing.

Modified:
    lnt/trunk/docs/api.rst
    lnt/trunk/lnt/server/db/testsuitedb.py
    lnt/trunk/lnt/server/ui/api.py
    lnt/trunk/tests/server/ui/test_api.py

Modified: lnt/trunk/docs/api.rst
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/docs/api.rst?rev=306743&r1=306742&r2=306743&view=diff
==============================================================================
--- lnt/trunk/docs/api.rst (original)
+++ lnt/trunk/docs/api.rst Thu Jun 29 14:33:01 2017
@@ -34,6 +34,8 @@ once.
 |                           | Will return sample data in the samples section, as a list of dicts, with a key for       |
 |                           | each metric type.                                                                        |
 +---------------------------+------------------------------------------------------------------------------------------+
+| /samples/`id`             | Get all sample info for Sample `id`.                                                       |
++---------------------------+------------------------------------------------------------------------------------------+
 
 Examples
 --------

Modified: lnt/trunk/lnt/server/db/testsuitedb.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/db/testsuitedb.py?rev=306743&r1=306742&r2=306743&view=diff
==============================================================================
--- lnt/trunk/lnt/server/db/testsuitedb.py (original)
+++ lnt/trunk/lnt/server/db/testsuitedb.py Thu Jun 29 14:33:01 2017
@@ -471,6 +471,9 @@ class TestSuiteDB(object):
                 return '%s_%s(%r, %r, **%r)' % (
                     db_key_name, self.__class__.__name__,
                     self.run, self.test, fields)
+
+            def __json__(self):
+                return strip(self.__dict__)
         
         class FieldChange(self.base, ParameterizedMixin):
             """FieldChange represents a change in between the values

Modified: lnt/trunk/lnt/server/ui/api.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/server/ui/api.py?rev=306743&r1=306742&r2=306743&view=diff
==============================================================================
--- lnt/trunk/lnt/server/ui/api.py (original)
+++ lnt/trunk/lnt/server/ui/api.py Thu Jun 29 14:33:01 2017
@@ -186,6 +186,21 @@ class Order(Resource):
 
 
 class SampleData(Resource):
+    method_decorators = [in_db]
+
+    @staticmethod
+    def get(sample_id):
+        ts = request.get_testsuite()
+        try:
+            sample = ts.query(ts.Sample).filter(ts.Sample.id == sample_id).one()
+        except NoResultFound:
+            return abort(404, message="Invalid order.")
+        sample_output = common_fields_factory()
+        sample_output['samples'] = [sample]
+        return jsonify(sample_output)
+
+
+class SamplesData(Resource):
     """List all the machines and give summary information."""
     method_decorators = [in_db]
 
@@ -319,7 +334,8 @@ def load_api_resources(api):
     api.add_resource(Machines, ts_path("machines/"))
     api.add_resource(Machine, ts_path("machines/<machine_id>"))
     api.add_resource(Runs, ts_path("runs/<int:run_id>"))
-    api.add_resource(SampleData, ts_path("samples"))
+    api.add_resource(SamplesData, ts_path("samples"))
+    api.add_resource(SampleData, ts_path("samples/<sample_id>"))
     api.add_resource(Order, ts_path("orders/<int:order_id>"))
     graph_url = "graph/<int:machine_id>/<int:test_id>/<int:field_index>"
     api.add_resource(Graph, ts_path(graph_url))

Modified: lnt/trunk/tests/server/ui/test_api.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/tests/server/ui/test_api.py?rev=306743&r1=306742&r2=306743&view=diff
==============================================================================
--- lnt/trunk/tests/server/ui/test_api.py (original)
+++ lnt/trunk/tests/server/ui/test_api.py Thu Jun 29 14:33:01 2017
@@ -37,6 +37,20 @@ order_expected_response = {u'llvm_projec
                            u'id': 1,
                            u'name': u'154331'}
 
+sample_expected_response = {u'run_id': 1,
+                            u'mem_bytes': None,
+                            u'profile_id': None,
+                            u'id': 1,
+                            u'compile_status': None,
+                            u'score': None,
+                            u'hash': None,
+                            u'execution_time': 0.0003,
+                            u'execution_status': None,
+                            u'test_id': 1,
+                            u'compile_time': 0.007,
+                            u'hash_status': None,
+                            u'code_size': None}
+
 graph_data = [[[152292], 1.0,
                {u'date': u'2012-05-01 16:28:23',
                 u'label': u'152292',
@@ -175,6 +189,14 @@ class JSONAPITester(unittest.TestCase):
         self._check_response_is_well_formed(j)
         check_json(client, 'api/db_default/v4/nts/orders/100', expected_code=404)
 
+    def test_single_sample_api(self):
+        """ Check /samples/n returns the expected sample information."""
+        client = self.client
+        j = check_json(client, 'api/db_default/v4/nts/samples/1')
+        self._check_response_is_well_formed(j)
+        self.assertEquals(sample_expected_response, j['samples'][0])
+        check_json(client, 'api/db_default/v4/nts/samples/1000', expected_code=404)
+
     def test_graph_api(self):
         """Check that /graph/x/y/z returns what we expect."""
         client = self.client




More information about the llvm-commits mailing list