~singpolyma/sgx-jmp

Factor out CustomerRepo

Using the Repository pattern to encapsulate the fetch and create operations on
the persistence layer for a domain object.  These were not really factories in
the classic sense, but rather "fetch from persisitence layer" methods, and so
they now have a home.
Merge branch 'logging'

* logging:
  Slightly better logging
Slightly better logging

Import structured logging gem ougai and replace current use of puts/warn with
logging calls.  Gives us level, timestamp, and formatting for exceptions and/or
hash of arbitrary context data.  Can do JSON logging if we ever need that, but
set to human-readable (with colour if isatty) for now.
Merge branch 'btc_spop'

* btc_spop:
  Get new Bitcoin address from Redis set
Get new Bitcoin address from Redis set

This set is populated by a cron job to have only known-good available addresses
in it.
On SGX register! failure, return a useful error to user
Explicitly wrap errors we want to send
Sync/flush stdout when logging
Set type map on *all* connections in pool
monthly_price is in 10000ths of a dollar, not 1000ths
Alt registration payment wording
Command cancel rejects the promise

So it won't be taken as next by naive code.
No more "choose next"

Instead, adhoc bot will show the options for actions to take
Set catapult_fwd_timeout on our backend-facing JID

Not on our inbound-facing JID.  This is why we shouldn't be mucking in the SGX's
Redis at all...
Fix Invites with Empty Guard

Turns out every user will start with no attempts, and the code wasn't
handling that case. Oops.
Set location (API calls it "SipPeer") on new TN orders
Funnel statsd for registration
Import group-text fix from prod
Cheogram should not save the route since signup is not done
Next