Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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()