AdminSocket users: use generic formatting

All call() routines get a format parameter; all places where
JSONFormatter was created get a new_formatter() instead.
'plain' formatting is unsupported, and help is forced to be
'json-pretty' as it was.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Formatter, admin_socket: make default formatter be json-pretty

If not given, default to json-pretty; if given but not equal to one
of the formatter choices, return NULL as before.  Remove defaulting
code in admin_socket.cc in favor of this.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
In general, flush in caller of dump worker rather than worker

This allows easier refactoring of workers (no dual flushes when code
changes).

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_argparse.py, ceph.in: validate_command: stop handling format

We were passing the entire parsed_args Namespace just to look at
and tack on 'format', and that's kinda silly; do it in the callers
instead.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph.in: admin_socket() now validates command and passes format

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph.in: clean up help, fix partial matching on all help

Remove --help-all; too much effort for low benefit

Signed-off-by: Dan Mick <dan.mick@inktank.com>
OSD: provide newer command descs with module/perm/avail

Signed-off-by: Dan Mick <dan.mick@inktank.com>
OSD: "tell <osd.n>" version, bench, dump_pg_recovery_stats: formatted

Signed-off-by: Dan Mick <dan.mick@inktank.com>
PG: add formatted output to pg <pgid> query, list_missing

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_rest_api.py: obtain and handle tell <osd-or-pgid> commands

Contact an OSD that's up to get a list of the commands, and use
them to add to the URL map.

Special treatment throughout for these commands:

* hack the help signature dump
* keep a 'flavor' per command to allow special handler() processing
* strip off 'tell/<target>' when constructing command
* allow multiple dicts with the same url
  (the parameters and get/put methods can change)
* because of above, method must be validated in handler()
* validate the given OSD
* calculate target for command (mon, osd, pg)

Unrelated: make method_dict into global METHOD_DICT

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_argparse, mon: make "tell <pgid>" work (duplicating "pg <pgid>")

It's a wad of special cases, but it implements "tell <pgid>" such that
it has the same effect as "pg <pgid>".

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_argparse.py: make find_cmd_target handle tell <pgid>

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_rest_api.py: cleanup, more docstrings, unused vars

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Merge remote-tracking branch 'gh/wip-tell-unified' into next

Reviewed-by: Sage Weil <sage@inktank.com>