+++ /dev/null
-import json
-from datetime import datetime
-from sqlalchemy.orm import sessionmaker, scoped_session
-from sqlalchemy import Column, Integer, String, \
- DateTime, ForeignKey, BigInteger
-from sqlalchemy import PrimaryKeyConstraint
-from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy.ext.declarative import declared_attr
-
-Base = declarative_base()
-Session = scoped_session(sessionmaker())
-
-class cluster_info(Base):
- __tablename__ = 'cluster_info'
-
- index = Column(Integer, primary_key=True)
- uuid = Column(String(36), unique=True)
- organization = Column(String(64))
- contact_email = Column(String(32))
- cluster_name = Column(String(32))
- cluster_creation_date = Column(DateTime)
- description = Column(String(32))
- num_versions = Column(Integer)
-
-class version_info(Base):
- __tablename__ = 'version_info'
-
- index = Column(Integer, primary_key=True)
- cluster_id = Column(ForeignKey('cluster_info.index'))
- version_number = Column(Integer)
- version_date = Column(DateTime)
-
-class components_info(Base):
- __tablename__ = 'components_info'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- num_data_bytes = Column(BigInteger)
- num_bytes_total = Column(BigInteger)
- num_osds = Column(Integer)
- num_objects = Column(Integer)
- num_pgs = Column(Integer)
- num_pools = Column(Integer)
- num_mdss = Column(Integer)
- num_mons = Column(Integer)
-
-class crush_types(Base):
- __tablename__ = 'crush_types'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- crush_type = Column(String(16))
- crush_count = Column(Integer)
-
-class pools_info(Base):
- __tablename__ = 'pools_info'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- pool_id = Column(Integer)
- pool_type = Column(Integer)
- pool_rep_size = Column(Integer)
-
-class os_info(Base):
- __tablename__ = 'os_info'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- os = Column(String(16))
- count = Column(Integer)
-
-class kernel_versions(Base):
- __tablename__ = 'kernel_versions'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- version = Column(String(16))
- count = Column(Integer)
-
-class kernel_types(Base):
- __tablename__ = 'kernel_types'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- type = Column(String(64))
- count = Column(Integer)
-
-class distros(Base):
- __tablename__ = 'distros'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- distro = Column(String(64))
- count = Column(Integer)
-
-class cpus(Base):
- __tablename__ = 'cpus'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- cpu = Column(String(16))
- count = Column(Integer)
-
-class cpu_archs(Base):
- __tablename__ = 'cpu_archs'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- arch = Column(String(16))
- count = Column(Integer)
-
-class ceph_versions(Base):
- __tablename__ = 'ceph_versions'
-
- index = Column(Integer, primary_key=True)
- vid = Column(ForeignKey('version_info.index'))
- version = Column(String(16))
- count = Column(Integer)
-
-class sysinfo(object):
- def __init__(self, vindex):
- self.os = Session.query(os_info).filter_by(vid=vindex).all()
- self.kern_vers = Session.query(kernel_versions).filter_by(vid=vindex).all()
- self.kern_types = Session.query(kernel_types).filter_by(vid=vindex).all()
- self.distros = Session.query(distros).filter_by(vid=vindex).all()
- self.cpus = Session.query(cpus).filter_by(vid=vindex).all()
- self.cpu_archs = Session.query(cpu_archs).filter_by(vid=vindex).all()
- self.ceph_vers = Session.query(ceph_versions).filter_by(vid=vindex).all()
-
-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.crush = Session.query(crush_types).filter_by(vid=self.vi.index).all()
- self.pools = Session.query(pools_info).filter_by(vid=self.vi.index).all()
- self.sysinfo = sysinfo(self.vi.index)
-
-def put_new_version(data):
- info = json.loads(data)
- def add_cluster_info():
- ci = Session.query(cluster_info).filter_by(uuid=info['uuid']).first()
- if ci is None:
- dt = datetime.strptime(info['cluster_creation_date'], "%Y-%m-%d %H:%M:%S.%f")
- ci = cluster_info(uuid=info['uuid'],
- 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)
- Session.commit()
- else:
- ci.num_versions += 1
-
- return ci
-
- def add_version_info(ci):
- vi = version_info(cluster_id=ci.index,
- version_number=ci.num_versions,
- version_date=datetime.now())
- Session.add(vi)
- return vi
-
- def add_components_info(vi):
- comps_count= info['components_count']
- comps_info = components_info(vid=vi.index,
- num_data_bytes=comps_count['num_data_bytes'],
- num_bytes_total=comps_count['num_bytes_total'],
- num_osds=comps_count['num_osds'],
- num_objects=comps_count['num_objects'],
- num_pgs=comps_count['num_pgs'],
- num_pools=comps_count['num_pools'],
- num_mdss=comps_count['num_mdss'],
- num_mons=comps_count['num_mons'])
- Session.add(comps_info)
-
- def add_crush_types(vi):
- for c in info['crush_types']:
- Session.add(crush_types(vid=vi.index,
- crush_type=c['type'],
- crush_count=c['count']))
-
- def add_pools_info(vi):
- pools = info['pool_metadata']
- for p in pools:
- Session.add(pools_info(vid=vi.index,
- pool_id=p['id'],
- pool_type=p['type'],
- pool_rep_size=p['size']))
-
- def add_sys_info(vi):
- si = info['sysinfo']
- while si:
- k,v = si.popitem()
- if k == 'os_info':
- for o in v:
- Session.add(os_info(vid=vi.index,
- os=o['os'],
- count=o['count']))
- elif k == 'kernel_versions':
- for k in v:
- Session.add(kernel_versions(vid=vi.index,
- version=k['version'],
- count=k['count']))
- elif k == 'kernel_types':
- for k in v:
- Session.add(kernel_types(vid=vi.index,
- type=k['type'],
- count=k['count']))
- elif k == 'distros':
- for d in v:
- Session.add(distros(vid=vi.index,
- distro=d['distro'],
- count=d['count']))
- elif k == 'cpus':
- for c in v:
- Session.add(cpus(vid=vi.index,
- cpu=c['cpu'],
- count=c['count']))
- elif k == 'cpu_archs':
- for c in v:
- Session.add(cpu_archs(vid=vi.index,
- arch=c['arch'],
- count=c['count']))
- elif k == 'ceph_versions':
- for c in v:
- Session.add(ceph_versions(vid=vi.index,
- version=c['version'],
- count=c['count']))
-
- ci = add_cluster_info()
- add_version_info(ci)
- vi = Session.query(version_info).filter_by(cluster_id=ci.index,
- version_number=ci.num_versions).first()
- add_components_info(vi)
- add_crush_types(vi)
- add_pools_info(vi)
- add_sys_info(vi)
-
-def delete_uuid(uuid):
- ci = Session.query(cluster_info).filter_by(uuid=uuid).first()
- if ci is None:
- return {'status':400, 'msg':'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(crush_types).filter_by(vid=v.index).delete()
- Session.query(pools_info).filter_by(vid=v.index).delete()
- Session.query(os_info).filter_by(vid=v.index).delete()
- Session.query(kernel_versions).filter_by(vid=v.index).delete()
- Session.query(kernel_types).filter_by(vid=v.index).delete()
- Session.query(distros).filter_by(vid=v.index).delete()
- Session.query(cpus).filter_by(vid=v.index).delete()
- Session.query(cpu_archs).filter_by(vid=v.index).delete()
- Session.query(ceph_versions).filter_by(vid=v.index).delete()
-
- Session.flush()
- Session.delete(v)
- Session.flush()
-
- 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