Exemplo n.º 1
0
def landing(request):
    """Customer Care Landing page."""

    # Get a redis client
    redis = None
    try:
        redis = redis_client(name='default')
    except RedisError as e:
        statsd.incr('redis.errror')
        log.error('Redis error: %s' % e)

    contributor_stats = redis and redis.get(settings.CC_TOP_CONTRIB_CACHE_KEY)
    if contributor_stats:
        contributor_stats = json.loads(contributor_stats)
        statsd.incr('customercare.stats.contributors.hit')
    else:
        statsd.incr('customercare.stats.contributors.miss')

    try:
        twitter_user = (request.twitter.api.auth.get_username()
                        if request.twitter.authed else None)
    except tweepy.TweepError:
        # Bad oauth token. Create a new session so user re-auths.
        twitter_user = None
        request.twitter = twitter.Session()

    yesterday = datetime.now() - timedelta(days=1)

    recent_replied_count = _count_answered_tweets(since=yesterday)

    return render(
        request, 'customercare/landing.html', {
            'contributor_stats':
            contributor_stats,
            'canned_responses':
            get_common_replies(request.LANGUAGE_CODE),
            'tweets':
            _get_tweets(locale=request.LANGUAGE_CODE,
                        https=request.is_secure()),
            'authed':
            request.twitter.authed,
            'twitter_user':
            twitter_user,
            'filters':
            FILTERS,
            'goal':
            settings.CC_REPLIES_GOAL,
            'recent_replied_count':
            recent_replied_count
        })
Exemplo n.º 2
0
def landing(request):
    """Customer Care Landing page."""

    # Get a redis client
    redis = None
    try:
        redis = redis_client(name='default')
    except RedisError as e:
        statsd.incr('redis.errror')
        log.error('Redis error: %s' % e)

    contributor_stats = redis and redis.get(settings.CC_TOP_CONTRIB_CACHE_KEY)
    if contributor_stats:
        contributor_stats = json.loads(contributor_stats)
        statsd.incr('customercare.stats.contributors.hit')
    else:
        statsd.incr('customercare.stats.contributors.miss')

    try:
        twitter_user = (request.twitter.api.auth.get_username() if
                        request.twitter.authed else None)
    except tweepy.TweepError:
        # Bad oauth token. Create a new session so user re-auths.
        twitter_user = None
        request.twitter = twitter.Session()

    yesterday = datetime.now() - timedelta(days=1)

    recent_replied_count = _count_answered_tweets(since=yesterday)

    return jingo.render(request, 'customercare/landing.html', {
        'contributor_stats': contributor_stats,
        'canned_responses': get_common_replies(request.locale),
        'tweets': _get_tweets(locale=request.locale,
                              https=request.is_secure()),
        'authed': request.twitter.authed,
        'twitter_user': twitter_user,
        'filters': FILTERS,
        'goal': settings.CC_REPLIES_GOAL,
        'recent_replied_count': recent_replied_count,
    })
Exemplo n.º 3
0
def landing(request):
    """Customer Care Landing page."""

    # Get a redis client
    redis = None
    try:
        redis = redis_client(name='default')
    except RedisError as e:
        statsd.incr('redis.errror')
        log.error('Redis error: %s' % e)
    # Stats. See customercare.cron.get_customercare_stats.
    activity = redis and redis.get(settings.CC_TWEET_ACTIVITY_CACHE_KEY)
    if activity:
        activity = json.loads(activity)
    if activity and 'resultset' in activity:
        statsd.incr('customercare.stats.activity.hit')
        activity_stats = []
        for act in activity['resultset']:
            if act is None:  # Sometimes we get bad data here.
                continue
            activity_stats.append((act[0], {
                'requests': format_number(act[1], locale='en_US'),
                'replies': format_number(act[2], locale='en_US'),
                'perc': act[3] * 100,
            }))
    else:
        statsd.incr('customercare.stats.activity.miss')
        activity_stats = []

    contributors = redis and redis.get(settings.CC_TOP_CONTRIB_CACHE_KEY)
    if contributors:
        contributors = json.loads(contributors)
    if contributors and 'resultset' in contributors:
        statsd.incr('customercare.stats.contributors.hit')
        contributor_stats = {}
        for contrib in contributors['resultset']:
            # Create one list per time period
            period = contrib[1]
            if not contributor_stats.get(period):
                contributor_stats[period] = []
            elif len(contributor_stats[period]) == 16:
                # Show a max. of 16 people.
                continue

            contributor_stats[period].append({
                'name': contrib[2],
                'username': contrib[3],
                'count': contrib[4],
                'avatar': contributors['avatars'].get(contrib[3]),
            })
    else:
        statsd.incr('customercare.stats.contributors.miss')
        contributor_stats = {}

    # reformat stats to be more useful.
    new_contrib_stats = {}
    for time_period, contributors in contributor_stats.items():
        for contributor in contributors:
            username = contributor['username']
            if contributor['username'] not in new_contrib_stats:
                new_contrib_stats[contributor['username']] = {
                    'username': username,
                    'name': contributor['name'],
                    'avatar': contributor['avatar'],
                }
            assert time_period not in new_contrib_stats[username]
            new_contrib_stats[username][time_period] = contributor['count']

    contributor_stats = sorted(new_contrib_stats.values(), reverse=True,
        key=lambda c: c.get('Last Week', 0))

    try:
        twitter_user = (request.twitter.api.auth.get_username() if
                        request.twitter.authed else None)
    except tweepy.TweepError:
        # Bad oauth token. Create a new session so user re-auths.
        twitter_user = None
        request.twitter = twitter.Session()

    yesterday = datetime.now() - timedelta(days=1)

    recent_replied_count = _count_answered_tweets(since=yesterday)

    return jingo.render(request, 'customercare/landing.html', {
        'activity_stats': activity_stats,
        'contributor_stats': contributor_stats,
        'canned_responses': get_common_replies(request.locale),
        'tweets': _get_tweets(locale=request.locale,
                              https=request.is_secure()),
        'authed': request.twitter.authed,
        'twitter_user': twitter_user,
        'filters': FILTERS,
        'goal': settings.CC_REPLIES_GOAL,
        'recent_replied_count': recent_replied_count,
    })
Exemplo n.º 4
0
def landing(request):
    """Customer Care Landing page."""

    # Get a redis client
    redis = None
    try:
        redis = redis_client(name='default')
    except RedisError as e:
        statsd.incr('redis.errror')
        log.error('Redis error: %s' % e)
    # Stats. See customercare.cron.get_customercare_stats.
    activity = redis and redis.get(settings.CC_TWEET_ACTIVITY_CACHE_KEY)
    if activity:
        activity = json.loads(activity)
    if activity and 'resultset' in activity:
        statsd.incr('customercare.stats.activity.hit')
        activity_stats = []
        for act in activity['resultset']:
            if act is None:  # Sometimes we get bad data here.
                continue
            activity_stats.append((act[0], {
                'requests':
                format_number(act[1], locale='en_US'),
                'replies':
                format_number(act[2], locale='en_US'),
                'perc':
                act[3] * 100,
            }))
    else:
        statsd.incr('customercare.stats.activity.miss')
        activity_stats = []

    contributors = redis and redis.get(settings.CC_TOP_CONTRIB_CACHE_KEY)
    if contributors:
        contributors = json.loads(contributors)
    if contributors and 'resultset' in contributors:
        statsd.incr('customercare.stats.contributors.hit')
        contributor_stats = {}
        for contrib in contributors['resultset']:
            # Create one list per time period
            period = contrib[1]
            if not contributor_stats.get(period):
                contributor_stats[period] = []
            elif len(contributor_stats[period]) == 16:
                # Show a max. of 16 people.
                continue

            contributor_stats[period].append({
                'name':
                contrib[2],
                'username':
                contrib[3],
                'count':
                contrib[4],
                'avatar':
                contributors['avatars'].get(contrib[3]),
            })
    else:
        statsd.incr('customercare.stats.contributors.miss')
        contributor_stats = {}

    try:
        twitter_user = (request.twitter.api.auth.get_username()
                        if request.twitter.authed else None)
    except tweepy.TweepError:
        # Bad oauth token. Create a new session so user re-auths.
        twitter_user = None
        request.twitter = twitter.Session()

    yesterday = datetime.now() - timedelta(days=1)

    recent_replied_count = _count_answered_tweets(since=yesterday)

    return jingo.render(
        request, 'customercare/landing.html', {
            'activity_stats': activity_stats,
            'contributor_stats': contributor_stats,
            'canned_responses': get_common_replies(request.locale),
            'tweets': _get_tweets(locale=request.locale,
                                  https=request.is_secure()),
            'authed': request.twitter.authed,
            'twitter_user': twitter_user,
            'filters': FILTERS,
            'goal': settings.CC_REPLIES_GOAL,
            'recent_replied_count': recent_replied_count,
        })
Exemplo n.º 5
0
def landing(request):
    """Customer Care Landing page."""

    twitter = request.twitter

    # Get a redis client
    redis = None
    try:
        redis = redis_client(name='default')
    except RedisError as e:
        statsd.incr('redis.errror')
        log.error('Redis error: %s' % e)
    # Stats. See customercare.cron.get_customercare_stats.
    activity = redis and redis.get(settings.CC_TWEET_ACTIVITY_CACHE_KEY)
    if activity:
        activity = json.loads(activity)
    if activity and 'resultset' in activity:
        statsd.incr('customercare.stats.activity.hit')
        activity_stats = []
        for act in activity['resultset']:
            if act is None:  # Sometimes we get bad data here.
                continue
            activity_stats.append((act[0], {
                'requests': format_number(act[1], locale='en_US'),
                'replies': format_number(act[2], locale='en_US'),
                'perc': act[3] * 100,
            }))
    else:
        statsd.incr('customercare.stats.activity.miss')
        activity_stats = []

    contributors = redis and redis.get(settings.CC_TOP_CONTRIB_CACHE_KEY)
    if contributors:
        contributors = json.loads(contributors)
    if contributors and 'resultset' in contributors:
        statsd.incr('customercare.stats.contributors.hit')
        contributor_stats = {}
        for contrib in contributors['resultset']:
            # Create one list per time period
            period = contrib[1]
            if not contributor_stats.get(period):
                contributor_stats[period] = []
            elif len(contributor_stats[period]) == 16:
                # Show a max. of 16 people.
                continue

            contributor_stats[period].append({
                'name': contrib[2],
                'username': contrib[3],
                'count': contrib[4],
                'avatar': contributors['avatars'].get(contrib[3]),
            })
    else:
        statsd.incr('customercare.stats.contributors.miss')
        contributor_stats = {}

    return jingo.render(request, 'customercare/landing.html', {
        'activity_stats': activity_stats,
        'contributor_stats': contributor_stats,
        'canned_responses': get_common_replies(request.locale),
        'tweets': _get_tweets(locale=request.locale,
                              https=request.is_secure()),
        'authed': twitter.authed,
        'twitter_user': (twitter.api.auth.get_username() if
                         twitter.authed else None),
        'filters': FILTERS,
    })