def test_metric(): conn = Model.setup_db() Metric.create_table(conn) metric = Metric.create(conn, created_at = datetime.now(), name = "mood", description = "On a scale of 1 to 10, 10 being best, rate your mood." ) assert metric.id > 0 MetricData.create_table(conn) p1 = MetricData.create(conn, created_at = datetime.now(), value = 7, metric_id = metric.id ) assert p1.id > 0 p2 = MetricData.create(conn, created_at = datetime.now(), value = 8, metric_id = metric.id ) assert p2.id > 0 latest = metric.latest(conn) assert latest.value == 8 assert latest.id == p2.id datetimes, values = metric.ts(conn) assert values == [7, 8]
def latest(self, conn=None): """ Returns most recent MetricData point available. """ if not conn: conn = self.conn sql = "select * from %s where metric_id = %s ORDER BY created_at DESC LIMIT 1" rows = conn.execute(sql % (MetricData.table_name(), self.id)) row = rows.fetchone() if row: return MetricData.load(conn, row)
def ts(self, conn=None): """ Returns time series of all data points. """ sql = "select * from %s where metric_id = %s ORDER BY created_at" datetimes = [] values = [] rows = conn.execute(sql % (MetricData.table_name(), self.id)) for row in rows: datetimes.append(row['created_at']) values.append(row['value']) return datetimes, values
def record_metric(m, value="None"): c = ado.commands.conn() if m < 0: Metric.printall(c) raw_m = ado.commands.clean_input("Choose a metric number: ") if raw_m: m = int(raw_m) else: sys.stderr.write("No metric chosen.\n") sys.exit(1) if value == "None": metric = Metric.get(c, m) print "Record Metric %s) %s" % (metric.id, metric.name) print metric.description value = float(ado.commands.clean_input("> ")) md = MetricData.create(c, metric_id=m, value=value, created_at=datetime.now()) print md.display_line()