[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