Daemon heartbeats backend
Add instance methods for checking on dagster-daemon health.
As part of it's loop the daemon updates the timestamp of it's heartbeat in a new db table. Other system components can use daemon_healthy() to check if heartbeats have been arriving.
Why run storage and not event log? Decision is somewhat arbitrary. Event log gets partitioned by run, so run storage was more convenient
- do an update rather than insert on the heartbeats table, or continually truncate it (Is there any reason we'd want to see past heartbeats?)
- use of time libraries is messy, how should I improve mocking, conversions, etc
Unit tests on run storage and an integration test with the daemon
Reviewers: dgibson, alangenfeld, dish, prha
Reviewed By: dgibson
Differential Revision: https://dagster.phacility.com/D5120