A Python one-liner for pretty-printing radosgw utilization

Posted on Thu 17 December 2015 in hints-and-kinks • 1 min read

In case you need a quick overview of how many radosgw objects live in your Ceph cluster, your first step is normally this command:

radosgw-admin bucket stats

When used without the --bucket=<name> argument, this command lists a bunch of statistics for all your radosgw buckets, in a somewhat convoluted JSON format. If you only want a simple list of all your buckets and the number of objects they contain, you can use the following bit of Python list comprehension magic:

radosgw-admin bucket stats | \
  python -c 'import json; import sys; print "\n".join(["%s: %s" % (str(x["bucket"]), ", ".join(["%s: %s" % (k, v["num_objects"]) for k,v in x["usage"].iteritems()])) for x in json.load(sys.stdin) if isinstance(x,dict)])'

And while the above is all on one line so you can easily copy and paste, here are the Python bits in a slightly more legible format:

import json
import sys

data = json.load(sys.stdin)

print "\n".join(["%s: %s" % (str(x["bucket"]),
                             ", ".join(["%s: %s" % (k,
                                        for k, v in x["usage"].iteritems()]))
                 for x in data
                 if isinstance(x, dict)])

Of course, you’ll need to substitute print() for print if your system runs only Python 3.

This article originally appeared on the hastexo.com website (now defunct).