else:
num_pgs = int(mo.group(1))
num_pools = int(mo.group(2))
- byte_count = int(mo.group(3))
+ byte_count = mo.group(3)
byte_scale = mo.group(4)
num_objs = int(mo.group(5))
- nums = {'mons':num_mons,
- 'osds':num_osds,
- 'mdss':num_mdss,
- 'pgs':num_pgs,
- 'pools':num_pools,
- 'bytes': {'count':byte_count, 'scale':byte_scale},
- 'objects':num_objs}
+ nums = {'num_mons':num_mons,
+ 'num_osds':num_osds,
+ 'num_mdss':num_mdss,
+ 'num_pgs':num_pgs,
+ 'num_pools':num_pools,
+ 'num_bytes': byte_count + " " + byte_scale,
+ 'num_objects':num_objs}
return nums
def get_crush_types():
out['uuid'] = get_uuid()
out['cluster_creation_date'] = get_cluster_creation_date()
nums = get_nums()
- num_osds = int(nums['osds'])
+ num_osds = int(nums['num_osds'])
out['components_count'] = nums
out['crush_types'] = get_crush_types()
out['pool_metadata'] = get_pool_metadata()
import json
from datetime import datetime
+import re
from sqlalchemy.orm import sessionmaker, scoped_session
-from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
+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
index = Column(Integer, primary_key=True)
vid = Column(ForeignKey('version_info.index'))
- byte_count = Column(Integer)
- byte_scale = Column(String(8))
+ num_bytes = Column(BigInteger)
num_osds = Column(Integer)
num_objects = Column(Integer)
num_pgs = Column(Integer)
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 bytes_pretty_to_raw(pretty):
+ mo = re.search("(\d+)\ (\S+)", pretty)
+ if not mo:
+ raise ValueError()
+
+ byte_count = int(mo.group(1))
+ byte_scale = mo.group(2)
+ if byte_scale == 'kB':
+ return byte_count >> 10
+ if byte_scale == 'MB':
+ return byte_count >> 20
+ if byte_scale == 'GB':
+ return byte_count >> 30
+ if byte_scale == 'TB':
+ return byte_count >> 40
+ if byte_scale == 'PB':
+ return byte_count >> 50
+ if byte_scale == 'EB':
+ return byte_count >> 60
+
+ return byte_count
+
+def bytes_raw_to_pretty(num_bytes):
+ shift_limit = 100
+
+ if num_bytes > shift_limit << 60:
+ return str(num_bytes >> 60) + " EB"
+ if num_bytes > shift_limit << 50:
+ return str(num_bytes >> 50) + " PB"
+ if num_bytes > shift_limit << 40:
+ return str(num_bytes >> 40) + " TB"
+ if num_bytes > shift_limit << 30:
+ return str(num_bytes >> 30) + " GB"
+ if num_bytes > shift_limit << 20:
+ return str(num_bytes >> 20) + " MB"
+ if num_bytes > shift_limit << 10:
+ return str(num_bytes >> 10) + " kB"
+
+ return str(num_bytes) + " bytes"
+
def put_new_version(data):
info = json.loads(data)
def add_cluster_info():
def add_components_info(vi):
comps_count= info['components_count']
+ nbytes = comps_count['num_bytes']
comps_info = components_info(vid=vi.index,
- byte_count=comps_count['bytes']['count'],
- byte_scale=comps_count['bytes']['scale'],
- num_osds=comps_count['osds'],
- num_objects=comps_count['objects'],
- num_pgs=comps_count['pgs'],
- num_pools=comps_count['pools'],
- num_mdss=comps_count['mdss'],
- num_mons=comps_count['mons'],
+ num_bytes=bytes_pretty_to_raw(nbytes),
+ 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'],
crush_types=','.join(info['crush_types']))
Session.add(comps_info)