summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md12
-rwxr-xr-xclient/ceph-brag83
-rw-r--r--server/ceph_brag/model/db.py4
-rw-r--r--server/sample.json12
4 files changed, 40 insertions, 71 deletions
diff --git a/README.md b/README.md
index 6eabcf79c0b..55af44f83a6 100644
--- a/README.md
+++ b/README.md
@@ -59,18 +59,18 @@ Run 'ceph-brag -h' to get the usage information of this tool.
"pool_metadata": [
{
"size": 3,
- "id": "0",
- "type": "replicated"
+ "id": 0,
+ "type": 1
},
{
"size": 3,
- "id": "1",
- "name": "erasure"
+ "id": 1,
+ "type": 1
},
{
"size": 3,
- "id": "2",
- "name": "replicated"
+ "id": 2,
+ "name": 1
}
],
"sysinfo": {
diff --git a/client/ceph-brag b/client/ceph-brag
index 8bc2b4304e0..e07ad01b663 100755
--- a/client/ceph-brag
+++ b/client/ceph-brag
@@ -31,26 +31,12 @@ def get_uuid():
return uid
def get_cluster_creation_date():
- (rc, o, e) = run_command(['ceph', 'mon', 'dump'])
+ (rc, o, e) = run_command(['ceph', 'mon', 'dump', '-f', 'json'])
if rc is not 0:
raise RuntimeError("\'ceph mon dump\' failed - " + e)
- rec = re.compile('(.*created\ )(.*)(\n.*)')
-
- mo = rec.search(o);
- if mo and mo.group(2) != '0.000000':
- return mo.group(2)
-
- # Try and get the date from osd dump
- (rc, o, e) = run_command(['ceph', 'osd', 'dump'])
- if rc is not 0:
- raise RuntimeError("\'ceph osd dump\' failed - " + e)
-
- mo = rec.search(o);
- if not mo or mo.group(2) == '0.000000':
- print >> sys.stderr, "Unable to get cluster creation date"
-
- return mo.group(2)
+ oj = json.loads(o)
+ return oj['created']
def bytes_pretty_to_raw(byte_count, byte_scale):
if byte_scale == 'kB':
@@ -69,49 +55,35 @@ def bytes_pretty_to_raw(byte_count, byte_scale):
return byte_count
def get_nums():
- (rc, o, e) = run_command(['ceph', '-s'])
+ (rc, o, e) = run_command(['ceph', '-s', '-f', 'json'])
if rc is not 0:
raise RuntimeError("\'ceph -s\' failed - " + e)
- num_mons = 0
-
- mo = re.search('(.*monmap\ .*:\ )(\d+)(.*)', o)
- if not mo:
- raise RuntimeError("Unmatched pattern for monmap in \'ceph status\'")
- else:
- num_mons = int(mo.group(2))
-
- num_osds = 0
- mo = re.search('.*osdmap.*(\d+).*(\d+).*(\d+).*', o)
- if not mo:
- raise RuntimeError("Unmatched pattern for osdmap in \'ceph status\'")
- else:
- num_osds = int(mo.group(1))
+ oj = json.loads(o)
+ num_mons = len(oj['monmap']['mons'])
+ num_osds = int(oj['osdmap']['osdmap']['num_in_osds'])
+ num_mdss = oj['mdsmap']['in']
- num_mdss = 0
- mo = re.search('.*mdsmap\ e\d+.*(\d+)/(\d+)/(\d+).*', o)
- if mo:
- num_mdss = int(mo.group(2));
+ pgmap = oj['pgmap']
+ num_pgs = pgmap['num_pgs']
+ num_bytes = pgmap['data_bytes']
- num_pgs = 0
- num_pools = 0
- num_bytes = 0
+ (rc, o, e) = run_command(['ceph', 'pg', 'dump', 'pools', '-f', 'json-pretty'])
+ if rc is not 0:
+ raise RuntimeError("\'ceph pg dump pools\' failed - " + e)
+
+ pools = json.loads(o)
+ num_pools = len(pools)
num_objs = 0
- mo = re.search('.*pgmap\ v\d+:\ (\d+).*,\ (\d+).*,\ (\d+)\ (\S+)\ data,\ (\d+).*', o)
- if not mo:
- raise RuntimeError("Unmatched pattern for pgmap in \'ceph status\'")
- else:
- num_pgs = int(mo.group(1))
- num_pools = int(mo.group(2))
- byte_count = int(mo.group(3))
- byte_scale = mo.group(4)
- num_objs = int(mo.group(5))
+ for p in pools:
+ num_objs += p['stat_sum']['num_objects']
+
nums = {'num_mons':num_mons,
'num_osds':num_osds,
'num_mdss':num_mdss,
'num_pgs':num_pgs,
+ 'num_bytes':num_bytes,
'num_pools':num_pools,
- 'num_bytes': bytes_pretty_to_raw(byte_count, byte_scale),
'num_objects':num_objs}
return nums
@@ -153,18 +125,15 @@ def get_crush_types():
return crush_map
def get_pool_metadata():
- (rc, o, e) = run_command(['ceph', 'osd', 'dump'])
+ (rc, o, e) = run_command(['ceph', 'osd', 'dump', '-f', 'json'])
if rc is not 0:
raise RuntimeError("\'ceph osd dump\' failed - " + e)
- result = re.findall("pool\ (\d+)\ '(\S+)'\ (\S+)\ size\ (\d+)", o)
- if len(result) is 0:
- raise RuntimeError("Unmatched pattern for \'pool\' in \'ceph osd dump\'")
-
pool_meta = []
- proc = lambda x: {'id':x[0], 'type':x[2], 'size':int(x[3])}
- for r in result:
- pool_meta.append(proc(r))
+ oj = json.loads(o)
+ proc = lambda x: {'id':x['pool'], 'type':x['type'], 'size':x['size']}
+ for p in oj['pools']:
+ pool_meta.append(proc(p))
return pool_meta
diff --git a/server/ceph_brag/model/db.py b/server/ceph_brag/model/db.py
index 32f528a43c1..94d98ffc04d 100644
--- a/server/ceph_brag/model/db.py
+++ b/server/ceph_brag/model/db.py
@@ -56,8 +56,8 @@ class pools_info(Base):
index = Column(Integer, primary_key=True)
vid = Column(ForeignKey('version_info.index'))
- pool_id = Column(String(8))
- pool_type = Column(String(16))
+ pool_id = Column(Integer)
+ pool_type = Column(Integer)
pool_rep_size = Column(Integer)
class os_info(Base):
diff --git a/server/sample.json b/server/sample.json
index 4915f5afd3f..194ec637be9 100644
--- a/server/sample.json
+++ b/server/sample.json
@@ -36,18 +36,18 @@
},
"pool_metadata": [
{
- "type": "replicated",
- "id": "0",
+ "type": 1,
+ "id": 0,
"size": 3
},
{
- "type": "replicated",
- "id": "1",
+ "type": 1,
+ "id": 1,
"size": 3
},
{
- "type": "replicated",
- "id": "2",
+ "type": 1,
+ "id": 2,
"size": 3
}
],