295
295
patcher.monkey_patch()
296
296
hubs.get_hub().debug_exceptions = False
298
conffile = '/etc/swift/dispersion.conf'
298
300
parser = OptionParser(usage='''
299
Usage: %prog [options] [conf_file]
301
Usage: %%prog [options] [conf_file]
301
[conf_file] defaults to /etc/swift/stats.conf'''.strip())
303
[conf_file] defaults to %s'''.strip() % conffile)
302
304
parser.add_option('-j', '--dump-json', action='store_true', default=False,
303
305
help='dump dispersion report in json format')
304
306
parser.add_option('-d', '--debug', action='store_true', default=False,
305
307
help='print 404s to standard error')
306
308
parser.add_option('-p', '--partitions', action='store_true', default=False,
307
309
help='print missing partitions to standard error')
310
parser.add_option('--container-only', action='store_true', default=False,
311
help='Only run container report')
312
parser.add_option('--object-only', action='store_true', default=False,
313
help='Only run object report')
309
314
options, args = parser.parse_args()
311
conffile = '/etc/swift/dispersion.conf'
313
317
conffile = args.pop(0)
322
326
concurrency = int(conf.get('concurrency', 25))
323
327
if options.dump_json or config_true_value(conf.get('dump_json', 'no')):
324
328
json_output = True
329
container_report = config_true_value(conf.get('container_report', 'yes')) \
330
and not options.object_only
331
object_report = config_true_value(conf.get('object_report', 'yes')) \
332
and not options.container_only
333
if not (object_report or container_report):
334
exit("Neither container or object report is set to run")
325
335
if options.debug:
339
349
container_ring = Ring(swift_dir, ring_name='container')
340
350
object_ring = Ring(swift_dir, ring_name='object')
342
container_result = container_dispersion_report(
343
coropool, connpool, account, container_ring, retries,
345
object_result = object_dispersion_report(
346
coropool, connpool, account, object_ring, retries, options.partitions)
354
output['container'] = container_dispersion_report(
355
coropool, connpool, account, container_ring, retries,
358
output['object'] = object_dispersion_report(
359
coropool, connpool, account, object_ring, retries,
348
print json.dumps({"container": container_result,
349
"object": object_result})
362
print json.dumps(output)