No longer send data to mongo at all.  It's hostedgraphite or bust!

Summary:
We still need to fix up the billing script though -- this only cleans
up fetch_stats.sh.

The tricky part is we used to use mongo to figure out how much we
needed to backfill -- we'd figure out the last timestamp we had data
for and start filling in new data from there.  Without mongo, we have
to use a new approach.  We now just depend on the fact the cronjob is
called every 5 minutes, and collect 5 minutes' worth of data.  This
means that if the cronjob fails once, we'll lose that data, but that's
probably ok.  It also means we could miss -- or double-count --
datapoints near the 5 minute mark; again, probably ok.

Add support for load_usage_reports.py to talk to graphite.

There's still a TODO here to get the data formatted the way graphite likes.

Finish converting load_usage_reports.py over to graphite.

The main thing left to do was to munge the key-name to make it
prettier.  But we could clean things up a lot too because
graphite_util does the rolling-up for us, that we used to be doing
here.

Fix docstrings as pointed out in review.

Test Plan:
Ran
   env srcdir=. ./fetch_stats.sh -nv

and it got 4 records.  Assuming one record per minute, that's a
plausible number.  The timestamps were:
    datetime.datetime(2014, 5, 22, 0, 30, 48)
    datetime.datetime(2014, 5, 22, 0, 31, 47)
    datetime.datetime(2014, 5, 22, 0, 32, 45)
    datetime.datetime(2014, 5, 22, 0, 33, 44)
which is consistent with one a minute.  The timestamp arguments passed
into the script were from xxx:30:24  to xxx:35:24, so it looks like
we're missing the timestamp at (2014, 5, 22, 0, 34, 45-or-so) -- I
guess it takes a bit of time for the data to get to the server.  This
means we'll probably lose one datapoint every 5 minutes, which isn't
terrible.  Maybe we should retrieve the last 6 minutes' worth of data
in that case. :-)

Ran
   cat /var/tmp/u | ./load_usage_reports.py -nv 2014-05-20
where /var/tmp/u holds some usage data downloaded manually (as per
fetch_usgae.sh), and saw it say:

    Importing usage reports starting from 2014-05-20
    Found usage report for 2014-05-20
    [{'usage': [{'used': 31910.51, 'name': 'Frontend Instance Hours', 'unit': 'Hour'}, {'used': 0.0, 'name': 'Discounted Instance Hour', 'unit': 'Hour'}, {'used': 12993.57, 'name': 'Backend Instance Hours', 'unit': 'Hour'}, {'used': 37329.75, 'name': 'Datastore Storage', 'unit': 'GByte-day'}, {'used': 150.0, 'name': 'Logs Storage', 'unit': 'GByte-day'}, {'used': 0.01, 'name': 'Taskqueue Storage', 'unit': 'GByte-day'}, {'used': 232.69, 'name': 'Blobstore Storage', 'unit': 'GByte-day'}, {'used': 240.0, 'name': 'Dedicated Memcache (10k ops/s/GB, 1GB unit)', 'unit': 'GB-hour'}, {'used': 7.42, 'name': 'Code and Static File Storage', 'unit': 'GByte-day'}, {'used': 947.75, 'name': 'Datastore Writes', 'unit': 'Million Ops'}, {'used': 1038.15, 'name': 'Datastore Reads', 'unit': 'Million Ops'}, {'used': 25.55, 'name': 'Small Datastore Operations', 'unit': 'Million Ops'}, {'used': 1420.14, 'name': 'Bandwidth Out', 'unit': 'GByte'}, {'used': 133.84, 'name': 'Emails', 'unit': '100 Recipients'}, {'used': 0.0, 'name': 'XMPP Stanzas', 'unit': '100K Stanzas'}, {'used': 0.0, 'name': 'Opened Channels', 'unit': '100 Opens'}, {'used': 225.62, 'name': 'Logs Read Bandwidth', 'unit': 'GByte'}, {'used': 0.0, 'name': 'PageSpeed Out Bandwidth', 'unit': 'GByte'}, {'used': 3.0, 'name': 'SSL VIPs', 'unit': 'Day'}, {'used': 20.0, 'name': 'SSL SNI Certificates', 'unit': 'Day'}, {'used': 0.0, 'name': 'Other Search Ops', 'unit': '10k Ops'}, {'used': 0.0, 'name': 'Search Document Indexing', 'unit': 'GByte'}, {'used': 0.0, 'name': 'Search Document Storage', 'unit': 'GByte-day'}, {'used': 0.0, 'name': 'Complex Searches', 'unit': '10k Ops'}, {'used': 0.0, 'name': 'Simple Searches', 'unit': '10k Ops'}], 'utc_datetime': datetime.datetime(2014, 5, 20, 0, 0)}]

which seems right, modulo the TODO to get the field names better.

(same)

(none new)

Reviewers: chris

Reviewed By: chris

Differential Revision: http://phabricator.khanacademy.org/D9227