def time_chart(user, weeks, period=1): """Get information from a specified interval.""" date_range = weeks * 7 // period period = timedelta(days=period) # 'now' is technically tomorrow at 0:00, so that today's smokes have # somewhere to go. now = datetime.today().replace(hour=0, minute=0, second=0, microsecond=0) \ + timedelta(days=1) past = now - timedelta(weeks=weeks) data = DBSession.query(Cigarette).filter_by(user=user.user_name) \ .filter(Cigarette.date >= past).all() # pre-fill the dictionary with zeroes freq_data = {(past + x*period): 0 for x in range(date_range)} for datum in data: distance = (datum.date - past).total_seconds() // period.total_seconds() freq_data[past + (int(distance) * period)] += 1 if not freq_data: chart = 'No data to display.' else: chart = DateY(LineConfig()) chart.add(user.display_name, sorted(freq_data.items())) chart = chart.render(is_unicode=True) return chart
def graph_uptime(record_files): chart = DateY(BaseConfig) for name, record_list in sort_domains(record_files.items()): values = [] up, down = timedelta(), timedelta() last = None for record in record_list: if last: down += record[1] - last values.append((record[1], 100 * up.total_seconds() / (up+down).total_seconds())) else: values.append((record[1], 100)) last = record[1] + record[0] up += record[0] values.append((record[1] + record[0], 100 * up.total_seconds() / (up+down).total_seconds())) chart.add(name, values) return chart.render()