summaryrefslogtreecommitdiffstats
path: root/qtip/api/controllers
diff options
context:
space:
mode:
authorakhilbatra898 <akhil.batra@research.iiit.ac.in>2017-03-10 15:35:04 +0530
committerzhihui wu <zhihui.wu2006+zte@gmail.com>2017-03-11 02:43:21 +0000
commit8d56e59c70f15897e366a0dbddefda43107b61c6 (patch)
treee76f22cfb9dc4b0be373fd5cabb9e73e7fdc9ac1 /qtip/api/controllers
parentc5f64d5114be98cbe6a74c2078b22b741ae984a4 (diff)
Implement Retrieval of plans, QPIs, and metrics
- All specs can be listed - All specs can be individually retrieved - API can be installed alongside qtip - API can be hosted using command `qtip-api` JIRA: QTIP-221 JIRA: QTIP-222 Change-Id: I1e80e6609cae1252cb2fcdc38c71b4bf6d02e8c9 Signed-off-by: akhilbatra898 <akhil.batra@research.iiit.ac.in> (cherry picked from commit 15fceada86ad0d5dabe26365451aae9c95b36be1)
Diffstat (limited to 'qtip/api/controllers')
-rw-r--r--qtip/api/controllers/metric.py23
-rw-r--r--qtip/api/controllers/plan.py23
-rw-r--r--qtip/api/controllers/qpi.py23
3 files changed, 48 insertions, 21 deletions
diff --git a/qtip/api/controllers/metric.py b/qtip/api/controllers/metric.py
index a026b5fc..86bf70f9 100644
--- a/qtip/api/controllers/metric.py
+++ b/qtip/api/controllers/metric.py
@@ -7,17 +7,26 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-import connexion
import httplib
+import connexion
+
+from qtip.base import error
+from qtip.loader import metric
+
def list_metrics():
- return connexion.problem(httplib.NOT_IMPLEMENTED,
- 'List metrics',
- 'Metrics listing not implemented')
+ metric_list = list(metric.MetricSpec.list_all())
+ return metric_list, httplib.OK
def get_metric(name):
- return connexion.problem(httplib.NOT_IMPLEMENTED,
- 'Get a metric',
- 'metric retrieval not implemented')
+ try:
+ metric_spec = metric.MetricSpec(name)
+ return {'name': metric_spec.name,
+ 'abspath': metric_spec.abspath,
+ 'content': metric_spec.content}, httplib.OK
+ except error.NotFoundError:
+ return connexion.problem(httplib.NOT_FOUND,
+ 'Metric Not Found',
+ 'Requested metric `' + name + '` not found.')
diff --git a/qtip/api/controllers/plan.py b/qtip/api/controllers/plan.py
index e202b413..93836a32 100644
--- a/qtip/api/controllers/plan.py
+++ b/qtip/api/controllers/plan.py
@@ -7,20 +7,29 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-import connexion
import httplib
+import connexion
+
+from qtip.base import error
+from qtip.loader import plan
+
def list_plans():
- return connexion.problem(httplib.NOT_IMPLEMENTED,
- 'List plans',
- 'Plans listing not implemented')
+ plan_list = list(plan.Plan.list_all())
+ return plan_list, httplib.OK
def get_plan(name):
- return connexion.problem(httplib.NOT_IMPLEMENTED,
- 'Get a plan',
- 'Plan retrieval not implemented')
+ try:
+ plan_spec = plan.Plan(name)
+ return {'name': plan_spec.name,
+ 'abspath': plan_spec.abspath,
+ 'content': plan_spec.content}, httplib.OK
+ except error.NotFoundError:
+ return connexion.problem(httplib.NOT_FOUND,
+ 'Plan Not Found',
+ 'requested plan `' + name + '` not found.')
def run_plan(name, action="run"):
diff --git a/qtip/api/controllers/qpi.py b/qtip/api/controllers/qpi.py
index 0b5c5b09..3c4dd718 100644
--- a/qtip/api/controllers/qpi.py
+++ b/qtip/api/controllers/qpi.py
@@ -7,17 +7,26 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-import connexion
import httplib
+import connexion
+
+from qtip.base import error
+from qtip.loader import qpi
+
def list_qpis():
- return connexion.problem(httplib.NOT_IMPLEMENTED,
- 'List QPIs',
- 'QPIs listing not implemented')
+ qpi_spec_list = list(qpi.QPISpec.list_all())
+ return qpi_spec_list, httplib.OK
def get_qpi(name):
- return connexion.problem(httplib.NOT_IMPLEMENTED,
- 'Get a QPI',
- 'QPI retrieval not implemented')
+ try:
+ qpi_spec = qpi.QPISpec(name)
+ return {'name': qpi_spec.name,
+ 'abspath': qpi_spec.abspath,
+ 'content': qpi_spec.content}, httplib.OK
+ except error.NotFoundError:
+ return connexion.problem(httplib.NOT_FOUND,
+ 'QPI Not Found',
+ 'Requested QPI Spec `' + name + '` not found.')