예제 #1
0
def get_hourly_goal_data(team, resource):
    """:return: the energy goal data for the user's team."""
    date = datetime.datetime.today()
    if resource_mgr.is_blackout(date):
        return {"is_blackout": True}

    data = resource_mgr.team_resource_data(date=date.date(), team=team, resource=resource)
    if data:
        goal_settings = resource_goal.team_goal_settings(team, resource)
        goal_percentage = goal_settings.goal_percent_reduction
        baseline = resource_goal.team_hourly_resource_baseline(date, team, resource)
        if goal_settings.baseline_method == "Dynamic":
            # get previous day's goal result and the current goal percent
            previous_goal_result = resource_goal.team_goal(date - datetime.timedelta(days=1),
                                                           team, resource)
            if previous_goal_result and previous_goal_result.current_goal_percent_reduction:
                goal_percentage = previous_goal_result.current_goal_percent_reduction

        goal = {"goal_usage": (baseline * 100 - baseline * goal_percentage) / 100,
                "warning_usage": (baseline * 100 - baseline * goal_percentage / 2) / 100,
                "actual_usage": data.usage,
                "updated_at": datetime.datetime.combine(date=data.date, time=data.time)
               }
        goal["actual_diff"] = abs(goal["actual_usage"] - goal["goal_usage"])
        return goal
    else:
        return {"actual_usage": None}
예제 #2
0
파일: views.py 프로젝트: csdl/makahiki
def supply(request, page_name):
    """Return the view_objects content, which in this case is empty."""

    _ = page_name

    wattdepot_version = "WATTDEPOT2"

    team = request.user.profile.team
    if team:
        goal = resource_goal.team_goal_settings(team, "energy")
        interval = goal.realtime_meter_interval
        wattdepot_source_name = goal.wattdepot_source_name
        if not wattdepot_source_name:
            wattdepot_source_name = team.name

        if settings.MAKAHIKI_USE_WATTDEPOT3:
            wattdepot_version = "WATTDEPOT3"
            wattdepot_source_name = wattdepot_source_name.lower()
    else:
        interval = None
        wattdepot_source_name = None

    width = 300
    height = 100
    return {"interval": interval,
            "wattdepot_source_name": wattdepot_source_name,
            "wattdepot_version": wattdepot_version,
            "width": width,
            "height": height
            }
예제 #3
0
def get_hourly_goal_data(team, resource):
    """:return: the energy goal data for the user's team."""

    hourly_goal = cache_mgr.get_cache("hgoal-%s-%d" % (resource, team.id))
    if hourly_goal is None:
        date = datetime.datetime.today()
        hourly_goal = {"resource": resource}
        if resource_mgr.is_blackout(date):
            hourly_goal.update({"is_blackout": True})
        else:
            resource_setting = resource_mgr.get_resource_setting(resource)
            unit = resource_setting.unit
            rate = resource_setting.conversion_rate

            usage_data = resource_mgr.team_resource_data(date=date.date(),
                                                         team=team,
                                                         resource=resource)
            if usage_data:
                actual_usage = utils.format_usage(usage_data.usage, rate)

                goal_settings = resource_goal.team_goal_settings(
                    team, resource)
                goal_percent = resource_goal.get_goal_percent(
                    date, team, resource, goal_settings)

                baseline = resource_goal.team_hourly_resource_baseline(
                    resource, team, usage_data.date, usage_data.time)
                goal_usage = utils.format_usage(
                    baseline * (100 - goal_percent) / 100, rate)
                warning_usage = utils.format_usage(
                    baseline * (100 - goal_percent / 2) / 100, rate)
                actual_diff = abs(actual_usage - goal_usage)

                hourly_goal.update({
                    "goal_usage":
                    goal_usage,
                    "warning_usage":
                    warning_usage,
                    "actual_usage":
                    actual_usage,
                    "actual_diff":
                    actual_diff,
                    "updated_at":
                    datetime.datetime.combine(date=usage_data.date,
                                              time=usage_data.time),
                    "unit":
                    unit,
                })
            else:
                hourly_goal.update({"no_data": True})

        cache_mgr.set_cache("hgoal-%s-%d" % (resource, team.id), hourly_goal,
                            600)

    return hourly_goal
예제 #4
0
def _set_goal_info(goal_info, resource, team, date):
    """set the goal info."""
    resource_setting = resource_mgr.get_resource_setting(resource)
    unit = resource_setting.unit
    rate = resource_setting.conversion_rate
    goal_settings = resource_goal.team_goal_settings(team, resource)
    goal = resource_goal.team_goal(date, team, resource)
    goal_percent = resource_goal.get_goal_percent(date, team, resource,
                                                  goal_settings)

    if goal:
        goal_info["goal_status"] = goal.goal_status
        if goal.actual_usage:
            goal_info["goal_info"] = "usage:<br/>%d %s" % (utils.format_usage(
                goal.actual_usage, rate), unit)
        elif goal.goal_usage:
            goal_info["goal_info"] = "goal:%d %s<br/>(reduce %d%%)" % (
                utils.format_usage(goal.goal_usage, rate), unit, goal_percent)
    else:
        goal_info["goal_status"] = "Unknown"

    if goal_info["goal_status"] == "Not available":
        goal_info["verbose_info"] = "Game disabled for today because baseline data " \
                                    "not available."
    elif goal_info["goal_status"] == "Unknown":
        if date == datetime.date.today():
            # if there is baseline, display the expected goal,
            # otherwise, display disabled with no baseline, as unavailable
            baseline = resource_goal.team_daily_resource_baseline(
                date, team, resource)
            if baseline:
                goal_usage = baseline * (100 - goal_percent) / 100
                goal_info["goal_status"] = None
                goal_info["goal_info"] = "goal:%d %s<br/>(reduce %d%%)" % (
                    utils.format_usage(goal_usage, rate), unit, goal_percent)
            else:
                goal_info["goal_status"] = "Not available"
                goal_info["verbose_info"] = "Game disabled for today because " \
                                            "baseline data not available."
        else:
            goal_info["goal_status"] = "Not available"
            goal_info["verbose_info"] = "Game disabled for today because usage data " \
                                    "not available."
    else:
        goal_info["verbose_info"] = "%d %s used within the last 24 hours (ends at %s). " \
        "<br/>The goal is %d %s (reduce %d%%)." % (
                utils.format_usage(goal.actual_usage, rate),
                unit,
                goal_settings.manual_entry_time if goal_settings.manual_entry else "midnight",
                utils.format_usage(goal.goal_usage, rate),
                unit,
                goal_percent
            )
예제 #5
0
파일: views.py 프로젝트: csdl/makahiki
def _set_goal_info(goal_info, resource, team, date):
    """set the goal info."""
    resource_setting = resource_mgr.get_resource_setting(resource)
    unit = resource_setting.unit
    rate = resource_setting.conversion_rate
    goal_settings = resource_goal.team_goal_settings(team, resource)
    goal = resource_goal.team_goal(date, team, resource)
    goal_percent = resource_goal.get_goal_percent(date, team, resource, goal_settings)

    if goal:
        goal_info["goal_status"] = goal.goal_status
        if goal.actual_usage:
            goal_info["goal_info"] = "usage:<br/>%d %s" % (
                utils.format_usage(goal.actual_usage, rate), unit)
        elif goal.goal_usage:
            goal_info["goal_info"] = "goal:%d %s<br/>(reduce %d%%)" % (
                utils.format_usage(goal.goal_usage, rate), unit, goal_percent)
    else:
        goal_info["goal_status"] = "Unknown"

    if goal_info["goal_status"] == "Not available":
        goal_info["verbose_info"] = "Game disabled for today because baseline data " \
                                    "not available."
    elif goal_info["goal_status"] == "Unknown":
        if date == datetime.date.today():
            # if there is baseline, display the expected goal,
            # otherwise, display disabled with no baseline, as unavailable
            baseline = resource_goal.team_daily_resource_baseline(
                date, team, resource)
            if baseline:
                goal_usage = baseline * (100 - goal_percent) / 100
                goal_info["goal_status"] = None
                goal_info["goal_info"] = "goal:%d %s<br/>(reduce %d%%)" % (
                    utils.format_usage(goal_usage, rate), unit, goal_percent)
            else:
                goal_info["goal_status"] = "Not available"
                goal_info["verbose_info"] = "Game disabled for today because " \
                                            "baseline data not available."
        else:
            goal_info["goal_status"] = "Not available"
            goal_info["verbose_info"] = "Game disabled for today because usage data " \
                                    "not available."
    else:
        goal_info["verbose_info"] = "%d %s used within the last 24 hours (ends at %s). " \
        "<br/>The goal is %d %s (reduce %d%%)." % (
                utils.format_usage(goal.actual_usage, rate),
                unit,
                goal_settings.manual_entry_time if goal_settings.manual_entry else "midnight",
                utils.format_usage(goal.goal_usage, rate),
                unit,
                goal_percent
            )
예제 #6
0
def supply(request, page_name):
    """Return the view_objects content, which in this case is empty."""

    _ = page_name

    team = request.user.get_profile().team
    if team:
        interval = resource_goal.team_goal_settings(team, "energy").realtime_meter_interval
    else:
        interval = None
    width = 300
    height = 100
    return {"interval": interval,
            "width": width,
            "height": height
            }
예제 #7
0
파일: views.py 프로젝트: csdl/makahiki
def get_hourly_goal_data(team, resource):
    """:return: the energy goal data for the user's team."""

    hourly_goal = cache_mgr.get_cache("hgoal-%s-%d" % (resource, team.id))
    if hourly_goal is None:
        date = datetime.datetime.today()
        hourly_goal = {"resource": resource}
        if resource_mgr.is_blackout(date):
            hourly_goal.update({"is_blackout": True})
        else:
            resource_setting = resource_mgr.get_resource_setting(resource)
            unit = resource_setting.unit
            rate = resource_setting.conversion_rate

            usage_data = resource_mgr.team_resource_data(date=date.date(),
                                                         team=team,
                                                         resource=resource)
            if usage_data:
                actual_usage = utils.format_usage(usage_data.usage, rate)

                goal_settings = resource_goal.team_goal_settings(team, resource)
                goal_percent = resource_goal.get_goal_percent(date, team, resource, goal_settings)

                baseline = resource_goal.team_hourly_resource_baseline(
                    resource, team, usage_data.date, usage_data.time)
                goal_usage = utils.format_usage(baseline * (100 - goal_percent) / 100, rate)
                warning_usage = utils.format_usage(baseline * (100 - goal_percent / 2) / 100, rate)
                actual_diff = abs(actual_usage - goal_usage)

                hourly_goal.update({"goal_usage": goal_usage,
                    "warning_usage": warning_usage,
                    "actual_usage": actual_usage,
                    "actual_diff": actual_diff,
                    "updated_at": datetime.datetime.combine(date=usage_data.date,
                                                            time=usage_data.time),
                    "unit": unit,
                   })
            else:
                hourly_goal.update({"no_data": True})

        cache_mgr.set_cache("hgoal-%s-%d" % (resource, team.id), hourly_goal, 600)

    return hourly_goal
예제 #8
0
def get_daily_goal_data(team, resource):
    """:return: the daily energy goal data."""

    round_info = challenge_mgr.get_round_info()
    if not round_info:
        return None

    start = round_info["start"].date()
    end = round_info["end"].date()
    delta = (end - start).days + 1
    data_table = []
    for day in range(0, delta):
        date = start + datetime.timedelta(days=day)

        goal_info = {"date": date}

        if day == 0:
            # cal and store the filler_days in the first day goal_info
            goal_info["filler_days"] = range(0, date.weekday())

        if day == (delta - 1):
            # cal and store the filler_days in the last day goal_info
            goal_info["filler_days"] = range(0, 6 - date.weekday())

        goal = resource_goal.team_goal(date, team, resource)
        goal_settings = resource_goal.team_goal_settings(team, resource)
        unit = resource_mgr.get_resource_setting(resource).unit
        goal_usage = resource_goal.team_daily_goal_usage(date, team, resource, goal_settings)
        goal_info["goal_info"] = "%d %s" % (goal_usage, unit)
        if goal:
            goal_info["goal_status"] = goal.goal_status
            goal_info["verbose_info"] = "%d %s used within the last 24 hours (ends at %s). " \
                                        "The goal is %d %s." % (
                resource_mgr.team_resource_usage(date, team, resource),
                unit,
                goal_settings.manual_entry_time,
                goal_usage,
                unit
            )

        data_table.append(goal_info)

    return data_table
예제 #9
0
def supply(request, page_name):
    """Return the view_objects content, which in this case is empty."""

    _ = page_name

    team = request.user.profile.team
    if team:
        goal = resource_goal.team_goal_settings(team, "energy")
        interval = goal.realtime_meter_interval
        wattdepot_source_name = goal.wattdepot_source_name
        if not wattdepot_source_name:
            wattdepot_source_name = team.name
    else:
        interval = None
        wattdepot_source_name = None
    width = 300
    height = 100
    return {
        "interval": interval,
        "wattdepot_source_name": wattdepot_source_name,
        "width": width,
        "height": height
    }
예제 #10
0
def resource_supply(request, page_name):
    """Supply the view_objects content for this widget."""
    user = request.user
    team = user.profile.team
    golow_activities = smartgrid.get_available_golow_actions(user, page_name)
    hourly_goal = None
    daily_goal = None
    goal_settings = None
    if team:
        goal_settings = resource_goal.team_goal_settings(team, page_name)
        if not goal_settings.manual_entry and not "calendar_view" in request.GET:
            hourly_goal = get_hourly_goal_data(team, page_name)
        else:
            daily_goal = get_daily_goal_data(team, page_name)

    resource_setting = resource_mgr.get_resource_setting(page_name)

    return {
        "golow_activities": golow_activities,
        "hourly_goal": hourly_goal,
        "daily_goal": daily_goal,
        "resource": resource_setting,
        "goal_settings": goal_settings,
    }
예제 #11
0
파일: views.py 프로젝트: csdl/makahiki
def resource_supply(request, page_name):
    """Supply the view_objects content for this widget."""
    user = request.user
    team = user.profile.team
    golow_activities = smartgrid.get_available_golow_actions(user, page_name)
    hourly_goal = None
    daily_goal = None
    goal_settings = None
    if team:
        goal_settings = resource_goal.team_goal_settings(team, page_name)
        if not goal_settings.manual_entry and not "calendar_view" in request.GET:
            hourly_goal = get_hourly_goal_data(team, page_name)
        else:
            daily_goal = get_daily_goal_data(team, page_name)

    resource_setting = resource_mgr.get_resource_setting(page_name)

    return {
        "golow_activities": golow_activities,
        "hourly_goal": hourly_goal,
        "daily_goal": daily_goal,
        "resource": resource_setting,
        "goal_settings": goal_settings,
        }