From e1e6c458a193fcdeffe136788159581fc9345174 Mon Sep 17 00:00:00 2001 From: Babu Shanmugam Date: Fri, 7 Feb 2014 15:55:21 +0530 Subject: [PATCH] Completed model and controller code 1. GET, PUT and DELETE request are added 2. Removed public folder as it will never be used --- server/ceph_brag.egg-info/SOURCES.txt | 4 +- server/ceph_brag/app.py | 2 +- server/ceph_brag/controllers/root.py | 70 +++++++++++++++++----- server/ceph_brag/json.py | 67 +++++++++++++++++++++ server/ceph_brag/model/__init__.py | 4 -- server/ceph_brag/model/db.py | 45 +++++++++++++- server/ceph_brag/tests/test_functional.py | 13 ++-- server/config.py | 2 +- server/public/css/style.css | 43 ------------- server/public/images/logo.png | Bin 35094 -> 0 bytes 10 files changed, 177 insertions(+), 73 deletions(-) create mode 100644 server/ceph_brag/json.py delete mode 100644 server/public/css/style.css delete mode 100644 server/public/images/logo.png diff --git a/server/ceph_brag.egg-info/SOURCES.txt b/server/ceph_brag.egg-info/SOURCES.txt index b47f0a6eba3ff..9c182f9a27046 100644 --- a/server/ceph_brag.egg-info/SOURCES.txt +++ b/server/ceph_brag.egg-info/SOURCES.txt @@ -1,8 +1,10 @@ MANIFEST.in +config.py setup.cfg setup.py ceph_brag/__init__.py ceph_brag/app.py +ceph_brag/json.py ceph_brag.egg-info/PKG-INFO ceph_brag.egg-info/SOURCES.txt ceph_brag.egg-info/dependency_links.txt @@ -17,5 +19,3 @@ ceph_brag/tests/__init__.py ceph_brag/tests/config.py ceph_brag/tests/test_functional.py ceph_brag/tests/test_units.py -public/css/style.css -public/images/logo.png \ No newline at end of file diff --git a/server/ceph_brag/app.py b/server/ceph_brag/app.py index 6cdc579d7804e..340c60d916a89 100644 --- a/server/ceph_brag/app.py +++ b/server/ceph_brag/app.py @@ -1,5 +1,5 @@ from pecan import make_app -from ceph_brag import model +from ceph_brag import model, json from pecan.hooks import TransactionHook def setup_app(config): diff --git a/server/ceph_brag/controllers/root.py b/server/ceph_brag/controllers/root.py index 88aff5c6774ec..b83c460d88083 100644 --- a/server/ceph_brag/controllers/root.py +++ b/server/ceph_brag/controllers/root.py @@ -1,27 +1,69 @@ from pecan import expose, request, abort, response from webob.exc import status_map from pecan.rest import RestController -from ceph_brag.model.db import put_new_version +from ceph_brag.model import db import sys, traceback class RootController(RestController): - @expose() + @expose('json') def get(self, *args, **kwargs): - return "" + if len(args) is 0: + #return the list of uuids + try: + result = db.get_uuids() + except Exception as e: + traceback.print_exc() + abort(500, comment="Internal Server Error") + elif len(args) is 1 or len(args) is 2 and args[1] == '': + #/uuid + try: + result = db.get_versions(args[0]) + except Exception as e: + traceback.print_exc() + abort(status_code=500, comment="Internal Server Error") + + if result is None: + abort(400, comment="Invalid UUID") + elif len(args) is 2 or len(args) is 3 and args[2] == '': + #/uuid/version_number + try: + result = db.get_brag(args[0], args[1]) + except Exception as e: + traceback.print_exc() + abort(status_code=500, comment="Internal Server Error") - @expose() + if result is None: + abort(status_code=400, comment="Invalid UUID,version combination") + else: + abort(status_code=400, comment="Invalid args") + + return result + + @expose(content_type='application/json') def put(self, *args, **kwargs): try: - put_new_version(request.body) + db.put_new_version(request.body) except Exception as e: - print >> sys.stderr, "Got an exception " + str(e) - traceback.print_exc() - abort(status_code=500, comment="Internal Server Error") - - print >> sys.stderr, "Successfully completed the new version" - response.status_int = 201 - return "Created" + traceback.print_exc() + abort(status_code=500, comment="Internal Server Error") + + response.status = 201 + return "CREATED" @expose() - def delete(self): - return "" + def delete(self, *args, **kwargs): + uuid = kwargs['uuid'] + if uuid is None: + abort(status_code=400, comment="Required uuid parameter") + + try: + status = db.delete_uuid(uuid) + except Exception as e: + traceback.print_exc() + abort(status_code=500, comment="Internal Server Error") + + if status is not None: + abort(status_code=status['status'], comment=status['comment']) + + response.status=200 + return "DELETED" diff --git a/server/ceph_brag/json.py b/server/ceph_brag/json.py new file mode 100644 index 0000000000000..2f5128193f63c --- /dev/null +++ b/server/ceph_brag/json.py @@ -0,0 +1,67 @@ +from pecan.jsonify import jsonify +from ceph_brag.model import db + +@jsonify.register(db.version_info) +def jsonify_version(vi): + return dict( + version_id=vi.index, + version_number=vi.version_number, + version_date=str(vi.version_date) + ) + +@jsonify.register(db.cluster_info) +def jsonify_cluster_info(ci): + return dict( + uuid=ci.uuid, + organization=ci.organization, + email=ci.contact_email, + cluster_name=ci.cluster_name, + cluster_creation_date=str(ci.cluster_creation_date), + ) + +@jsonify.register(db.components_info) +def jsonify_components_info(comps): + return dict( + bytes={'count':comps.byte_count, 'scale':comps.byte_scale}, + osds=comps.num_osds, + objects=comps.num_objects, + pgs=comps.num_pgs, + pools=comps.num_pools, + mdss=comps.num_mdss, + mons=comps.num_mons + ) + +@jsonify.register(db.pools_info) +def jsonify_pools_info(pool): + return dict(rep_size=pool.pool_rep_size, + name=pool.pool_name, + id=pool.pool_id + ) + +@jsonify.register(db.osds_info) +def jsonify_osds_info(osd): + return dict(nw_info={'address':osd.nw_address,'hostname':osd.hostname}, + hw_info={'swap_kb':osd.swap_kb,'mem_kb':osd.mem_kb, + 'arch':osd.arch, 'cpu':osd.cpu}, + id=osd.osd_id, + os_info={'os':osd.os,'version':osd.os_version, + 'description':osd.os_desc, 'distro':osd.distro}, + ceph_version=osd.ceph_version + ) + +@jsonify.register(db.brag) +def jsonify_brag(b): + ownership = {'organization':b.ci.organization, + 'description':b.ci.description, + 'email':b.ci.contact_email, + 'name':b.ci.cluster_name + } + crush_types=b.comps.crush_types.split(',') + return dict(uuid=b.ci.uuid, + cluster_creation_date=str(b.ci.cluster_creation_date), + components_count=b.comps, + crush_types=crush_types, + ownership=ownership, + pool_metadata=b.pools, + sysinfo=b.osds + ) diff --git a/server/ceph_brag/model/__init__.py b/server/ceph_brag/model/__init__.py index c8a9f71ab97cf..664427d299938 100644 --- a/server/ceph_brag/model/__init__.py +++ b/server/ceph_brag/model/__init__.py @@ -16,18 +16,14 @@ def init_model(): Base.metadata.create_all(engine) def start(): - print >> sys.stderr, " --- MODEL START" Session.bind = conf.sqlalchemy.engine def commit(): - print >> sys.stderr, " --- MODEL COMMIT" Session.commit() def rollback(): - print >> sys.stderr, " --- MODEL ROLLBACK" Session.rollback() def clear(): - print >> sys.stderr, " --- MODEL CLEAR" Session.remove() diff --git a/server/ceph_brag/model/db.py b/server/ceph_brag/model/db.py index 96b1933d3b05b..09b5f5c94375d 100644 --- a/server/ceph_brag/model/db.py +++ b/server/ceph_brag/model/db.py @@ -18,6 +18,7 @@ class cluster_info(Base): contact_email = Column(String) cluster_name = Column(String) cluster_creation_date = Column(DateTime) + description = Column(String) num_versions = Column(Integer) class version_info(Base): @@ -70,6 +71,17 @@ class osds_info(Base): distro = Column(String) ceph_version = Column(String) +class brag(object): + def __init__(self, uuid, version_number): + self.ci = Session.query(cluster_info).filter_by(uuid=uuid).first() + if self.ci is not None: + self.vi = Session.query(version_info).filter_by(cluster_id=self.ci.index, version_number=version_number).first() + + if self.ci is not None and self.vi is not None: + self.comps = Session.query(components_info).filter_by(vid=self.vi.index).first() + self.pools = Session.query(pools_info).filter_by(vid=self.vi.index).all() + self.osds = Session.query(osds_info).filter_by(vid=self.vi.index).all() + def put_new_version(data): info = json.loads(data) def add_cluster_info(): @@ -80,6 +92,7 @@ def put_new_version(data): organization=info['ownership']['organization'], contact_email=info['ownership']['email'], cluster_name=info['ownership']['name'], + description=info['ownership']['description'], cluster_creation_date=dt, num_versions=1) Session.add(ci) @@ -143,4 +156,34 @@ def put_new_version(data): add_components_info(vi) add_pools_info(vi) add_osds_info(vi) - + +def delete_uuid(uuid): + ci = Session.query(cluster_info).filter_by(uuid=uuid).first() + if ci is None: + return {'status':400, 'comment':'No information for this UUID'} + + for v in Session.query(version_info).filter_by(cluster_id=ci.index).all(): + Session.query(components_info).filter_by(vid=v.index).delete() + Session.query(pools_info).filter_by(vid=v.index).delete() + Session.query(osds_info).filter_by(vid=v.index).delete() + Session.delete(v) + + Session.delete(ci) + return None + +def get_uuids(): + return Session.query(cluster_info).all() + +def get_versions(uuid): + ci = Session.query(cluster_info).filter_by(uuid=uuid).first() + if ci is None: + return None + + return Session.query(version_info).filter_by(cluster_id=ci.index).all() + +def get_brag(uuid, version_id): + b = brag(uuid, version_id) + if b.ci is None or b.vi is None: + return None + + return b diff --git a/server/ceph_brag/tests/test_functional.py b/server/ceph_brag/tests/test_functional.py index a9675cdd9aa9c..126817ee5d156 100644 --- a/server/ceph_brag/tests/test_functional.py +++ b/server/ceph_brag/tests/test_functional.py @@ -2,21 +2,20 @@ from unittest import TestCase from webtest import TestApp from ceph_brag.tests import FunctionalTest import sys +from pecan import request class TestRootController(FunctionalTest): def test_get(self): response = self.app.get('/?k1=v1&k2=v2') - print >> sys.stderr, "Vars of response = " + str(vars(response)) assert response.status_int == 200 - def test_search(self): - response = self.app.post('/', params={'q': 'RestController'}) + def test_put(self): + #response = self.app.put('/', upload_files=[("uploadfield", "/tmp/sample.json")]) + with open ("/tmp/sample.json", "r") as myfile: + data=myfile.read().replace('\n', '') + response = self.app.request('/', method='PUT', body=data) assert response.status_int == 302 - assert response.headers['Location'] == ( - 'http://pecan.readthedocs.org/en/latest/search.html' - '?q=RestController' - ) def test_get_not_found(self): response = self.app.get('/a/bogus/url', expect_errors=True) diff --git a/server/config.py b/server/config.py index 51beebf49f156..b6190da49fdd0 100644 --- a/server/config.py +++ b/server/config.py @@ -41,7 +41,7 @@ logging = { sqlalchemy = { 'url' : 'sqlite:////tmp/test.db', - 'echo' : True, + 'echo' : False, 'encoding' : 'utf-8' } diff --git a/server/public/css/style.css b/server/public/css/style.css deleted file mode 100644 index 55c9db54a055d..0000000000000 --- a/server/public/css/style.css +++ /dev/null @@ -1,43 +0,0 @@ -body { - background: #311F00; - color: white; - font-family: 'Helvetica Neue', 'Helvetica', 'Verdana', sans-serif; - padding: 1em 2em; -} - -a { - color: #FAFF78; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -div#content { - width: 800px; - margin: 0 auto; -} - -form { - margin: 0; - padding: 0; - border: 0; -} - -fieldset { - border: 0; -} - -input.error { - background: #FAFF78; -} - -header { - text-align: center; -} - -h1, h2, h3, h4, h5, h6 { - font-family: 'Futura-CondensedExtraBold', 'Futura', 'Helvetica', sans-serif; - text-transform: uppercase; -} diff --git a/server/public/images/logo.png b/server/public/images/logo.png deleted file mode 100644 index 5994d22d9b1edf086925d4e786bfc385125ce457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35094 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 A%m4rY -- 2.39.5