Ejemplo n.º 1
0
def active(request):
    url = request.GET.get('url', '')

    domain = url_domain(url)

    timestamp = timezone.now() - datetime.timedelta(days=7)

    used_users = []
    active_users = []
    active_dusers = []

    eyehists = EyeHistory.objects.filter(
        (Q(url=url) | Q(domain=domain)) & Q(start_time__gt=timestamp)
        & ~Q(user_id=request.user.id)).order_by('-end_time').select_related()

    for eyehist in eyehists:
        if len(used_users) >= 6:
            break
        user = eyehist.user
        if user not in used_users:
            old_level = 3
            if eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(minutes=5)):
                old_level = 0
            elif eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(hours=1)):
                old_level = 1
            elif eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(hours=24)):
                old_level = 2

            if url == eyehist.url:
                active_users.append({
                    'username':
                    user.username,
                    'pic_url':
                    gravatar_for_user(user),
                    'resourceURI':
                    '%s/users/%s' % (BASE_URL, user.username),
                    'old_level':
                    old_level,
                    'time_ago':
                    humanize_time(timezone.now() - eyehist.end_time)
                })
            else:
                active_dusers.append({
                    'username':
                    user.username,
                    'pic_url':
                    gravatar_for_user(user),
                    'resourceURI':
                    '%s/users/%s' % (BASE_URL, user.username),
                    'old_level':
                    old_level,
                    'time_ago':
                    humanize_time(timezone.now() - eyehist.end_time)
                })
            used_users.append(user)

    return {'result': {'page': active_users, 'domain': active_dusers}}
Ejemplo n.º 2
0
def active(request):
    url = request.GET.get('url', '')

    domain = url_domain(url)

    timestamp = timezone.now() - datetime.timedelta(days=7)

    used_users = []
    active_users = []
    active_dusers = []

    eyehists = EyeHistory.objects.filter(
        (Q(url=url) | Q(domain=domain)) &
        Q(start_time__gt=timestamp) &
        ~Q(user_id=request.user.id)
    ).order_by('-end_time').select_related()

    for eyehist in eyehists:
        if len(used_users) >= 6:
            break
        user = eyehist.user
        if user not in used_users:
            old_level = 3
            if eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(minutes=5)):
                old_level = 0
            elif eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(hours=1)):
                old_level = 1
            elif eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(hours=24)):
                old_level = 2

            if url == eyehist.url:
                active_users.append({'username': user.username,
                                     'pic_url': gravatar_for_user(user),
                                     'resourceURI': '%s/users/%s' % (BASE_URL, user.username),
                                     'old_level': old_level,
                                     'time_ago': humanize_time(
                                         timezone.now() - eyehist.end_time)
                                     })
            else:
                active_dusers.append({'username': user.username,
                                      'pic_url': gravatar_for_user(user),
                                      'resourceURI': '%s/users/%s' % (BASE_URL, user.username),
                                      'old_level': old_level,
                                      'time_ago': humanize_time(
                                          timezone.now() - eyehist.end_time)
                                      })
            used_users.append(user)

    return {
        'result': {
            'page': active_users,
            'domain': active_dusers
        }
    }
Ejemplo n.º 3
0
def get_messages(request):
    url = request.GET.get('url', '')

    messages = EyeHistoryMessage.objects.filter(eyehistory__url=url).order_by('-post_time').select_related()

    message_list = []
    for message in messages:
        eye_hist = message.eyehistory

        m = twitter_username_re.sub(lambda m: '<a href="http://eyebrowse.csail.mit.edu/users/%s">%s</a>' % (m.group(1), m.group(0)), message.message)

        message_list.append({'message': m,
                             'post_time': str(message.post_time),
                             'username': eye_hist.user.username,
                             'pic_url': gravatar_for_user(eye_hist.user),
                             'user_url': '%s/users/%s' % (BASE_URL, eye_hist.user.username),
                             'hum_time': humanize_time(
                                 timezone.now() - message.post_time) + ' ago'
                             })

    return {
        'result': {
            'messages': message_list,
        }
    }
Ejemplo n.º 4
0
def merge_histories(dup_histories, end_time, end_event):
    earliest_start = timezone.now()
    earliest_eyehist = None
    dup_histories = list(dup_histories)

    for hist in dup_histories:
        if hist.start_time < earliest_start:
            earliest_start = hist.start_time
            earliest_eyehist = hist

    if earliest_eyehist is None:
        earliest_eyehist = dup_histories[0]

    earliest_eyehist.end_time = end_time
    earliest_eyehist.end_event = end_event

    elapsed_time = earliest_eyehist.end_time - earliest_eyehist.start_time
    earliest_eyehist.total_time = int(
        round((elapsed_time.microseconds / 1.0E3) +
              (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
    earliest_eyehist.humanize_time = humanize_time(elapsed_time)

    earliest_eyehist.save()

    if len(dup_histories) > 1:
        for item in dup_histories:
            if item != earliest_eyehist:
                messages = EyeHistoryMessage.objects.filter(eyehistory=item)
                for message in messages:
                    message.eyehistory = earliest_eyehist
                    message.save()
                item.delete()

    return earliest_eyehist
Ejemplo n.º 5
0
def merge_histories(dup_histories, end_time, end_event):
    earliest_start = timezone.now()
    earliest_eyehist = None
    dup_histories = list(dup_histories)
    
    for hist in dup_histories:
        if hist.start_time < earliest_start:
            earliest_start = hist.start_time
            earliest_eyehist = hist
            
    if earliest_eyehist == None:
        earliest_eyehist = dup_histories[0]

    earliest_eyehist.end_time = end_time
    earliest_eyehist.end_event = end_event
    
    elapsed_time = earliest_eyehist.end_time - earliest_eyehist.start_time
    earliest_eyehist.total_time = int(round((elapsed_time.microseconds / 1.0E3) + (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
    earliest_eyehist.humanize_time = humanize_time(elapsed_time)
    
    if earliest_eyehist.favIconUrl.strip() == '':
        earliest_eyehist.favIconUrl = "http://www.google.com/s2/favicons?domain_url=" + urllib.quote(earliest_eyehist.url)
    
    earliest_eyehist.save()
    
    if len(dup_histories) > 1:
        for item in dup_histories:
            if item != earliest_eyehist:
                messages = EyeHistoryMessage.objects.filter(eyehistory=item)
                for message in messages:
                    message.eyehistory = earliest_eyehist
                    message.save()
                item.delete()
            
    return earliest_eyehist
Ejemplo n.º 6
0
def merge_histories(dup_histories, end_time, end_event):
    earliest_start = timezone.now()
    earliest_eyehist = None
    dup_histories = list(dup_histories)

    for hist in dup_histories:
        if hist.start_time < earliest_start:
            earliest_start = hist.start_time
            earliest_eyehist = hist

    if earliest_eyehist is None:
        earliest_eyehist = dup_histories[0]

    earliest_eyehist.end_time = end_time
    earliest_eyehist.end_event = end_event

    elapsed_time = earliest_eyehist.end_time - earliest_eyehist.start_time
    earliest_eyehist.total_time = int(round(
        (elapsed_time.microseconds / 1.0E3)
        + (elapsed_time.seconds * 1000) +
        (elapsed_time.days * 8.64E7)))
    earliest_eyehist.humanize_time = humanize_time(elapsed_time)

    earliest_eyehist.save()

    if len(dup_histories) > 1:
        for item in dup_histories:
            if item != earliest_eyehist:
                messages = EyeHistoryMessage.objects.filter(eyehistory=item)
                for message in messages:
                    message.eyehistory = earliest_eyehist
                    message.save()
                item.delete()

    return earliest_eyehist
Ejemplo n.º 7
0
def get_messages(request):
    url = request.GET.get('url', '')

    messages = EyeHistoryMessage.objects.filter(
        eyehistory__url=url).order_by('-post_time').select_related()

    message_list = []
    for message in messages:
        eye_hist = message.eyehistory

        m = twitter_username_re.sub(
            lambda m:
            '<a href="http://eyebrowse.csail.mit.edu/users/%s">%s</a>' %
            (m.group(1), m.group(0)), message.message)

        message_list.append({
            'message':
            m,
            'post_time':
            str(message.post_time),
            'username':
            eye_hist.user.username,
            'pic_url':
            gravatar_for_user(eye_hist.user),
            'user_url':
            '%s/users/%s' % (BASE_URL, eye_hist.user.username),
            'hum_time':
            humanize_time(timezone.now() - message.post_time) + ' ago'
        })

    return {
        'result': {
            'messages': message_list,
        }
    }
Ejemplo n.º 8
0
def merge_histories(histories):
    histories = list(histories)
    i = 0

    while i < len(histories) - 1:
        hist1 = histories[i]
        j = i + 1
        while j < len(histories):
            hist2 = histories[j]
            if hist1.end_time + datetime.timedelta(minutes=5) >= hist2.start_time:
                print 'merging %s and %s' % (hist1, hist2)
                hist1.end_time = hist2.end_time
                hist1.end_event = hist2.end_event
                elapsed_time = hist1.end_time - hist1.start_time
                hist1.total_time = int(round(
                    (elapsed_time.microseconds / 1.0E3) +
                    (elapsed_time.seconds * 1000) +
                    (elapsed_time.days * 8.64E7)))
                hist1.humanize_time = humanize_time(elapsed_time)
                hist2.delete()
                hist1.save(save_raw=False)
                print 'deleting %s' % (hist2)
                j += 1
            else:
                i = j
                break
        i = j
Ejemplo n.º 9
0
def get_messages(request):
    url = request.GET.get("url")

    messages = EyeHistoryMessage.objects.filter(
        eyehistory__url=url).order_by('-post_time').select_related()

    message_list = []
    for message in messages:
        eye_hist = message.eyehistory
        message_list.append({
            'message':
            message.message,
            'post_time':
            str(message.post_time),
            'username':
            eye_hist.user.username,
            'pic_url':
            gravatar_for_user(eye_hist.user),
            'user_url':
            '%s/users/%s' % (BASE_URL, eye_hist.user.username),
            'hum_time':
            humanize_time(timezone.now() - message.post_time) + ' ago'
        })

    return {
        'result': {
            'messages': message_list,
        }
    }
Ejemplo n.º 10
0
def get_stats(visits):
    count = visits.count()
    if count == 1:
        count_text = '1 visit'
    else:
        count_text = '%s visits' % (count)
    if count == 0:
        time = '0 seconds'
    else:
        time = humanize_time(datetime.timedelta(milliseconds=visits.aggregate(Sum('total_time'))['total_time__sum']))

    return count_text, time
Ejemplo n.º 11
0
def get_stats(visits):
    count = visits.count()
    if count == 1:
        count_text = '1 visit'
    else:
        count_text = '%s visits' % (count)
    if count == 0:
        time = '0 seconds'
    else:
        time = humanize_time(
            datetime.timedelta(milliseconds=visits.aggregate(Sum('total_time'))
                               ['total_time__sum']))

    return count_text, time
Ejemplo n.º 12
0
def get_stats(visits):
    count = visits.count()
    if count == 1:
        count_text = '1 visit'
    else:
        count_text = '%s visits' % (count)
    if count == 0:
        time = '0 seconds'
    else:
        avg_time = float(visits.aggregate(Sum('total_time'))['total_time__sum'])/float(count)
        time = humanize_time(datetime.timedelta(
            milliseconds=avg_time))
        time = re.sub('minutes', 'min', time)
        time = re.sub('minute', 'min', time)

    return count_text, time
Ejemplo n.º 13
0
def save_raw_eyehistory(user, url, title, start_event, end_event, start_time,
                        end_time, src, domain, favicon_url):
    elapsed_time = end_time - start_time
    total_time = int(
        round((elapsed_time.microseconds / 1.0E3) +
              (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
    hum_time = humanize_time(elapsed_time)

    raw, created = EyeHistoryRaw.objects.get_or_create(user=user,
                                                       url=url,
                                                       title=title,
                                                       start_event=start_event,
                                                       end_event=end_event,
                                                       start_time=start_time,
                                                       end_time=end_time,
                                                       src=src,
                                                       domain=domain,
                                                       favicon_url=favicon_url,
                                                       total_time=total_time,
                                                       humanize_time=hum_time)
Ejemplo n.º 14
0
def get_messages(request):
    url = request.GET.get("url")

    messages = EyeHistoryMessage.objects.filter(eyehistory__url=url).order_by('-post_time').select_related()

    message_list = []
    for message in messages:
        eye_hist = message.eyehistory
        message_list.append({'message': message.message,
                            'post_time': str(message.post_time),
                            'username': eye_hist.user.username,
                            'pic_url': gravatar_for_user(eye_hist.user),
                            'user_url': '%s/users/%s' % (BASE_URL,eye_hist.user.username),
                            'hum_time': humanize_time(timezone.now() - message.post_time) + ' ago'
                            })

    return {'result': {
                   'messages': message_list,
                   }
        }
Ejemplo n.º 15
0
def save_raw_eyehistory(user, url, title, start_event, end_event, start_time, end_time, src, domain, favIconUrl):
    elapsed_time = end_time - start_time
    total_time = int(round((elapsed_time.microseconds / 1.0E3) + (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
    hum_time = humanize_time(elapsed_time)
    
    if favIconUrl == None:
        favIconUrl = "http://www.google.com/s2/favicons?domain_url=" + urllib.quote(url)
    
    raw, created = EyeHistoryRaw.objects.get_or_create(user=user, 
                            url=url, 
                            title=title, 
                            start_event=start_event, 
                            end_event=end_event,
                            start_time=start_time,
                            end_time=end_time,
                            src=src,
                            domain=domain,
                            favIconUrl=favIconUrl,
                            total_time=total_time,
                            humanize_time=hum_time)
Ejemplo n.º 16
0
def notification_renderer(user, empty_search_msg):
    notifications = Notification.objects.filter(
        recipient=user).select_related().order_by('-date_created')
    for notif in notifications:
        if notif.notice_type.label != "new_follower":
            pop = PopularHistoryInfo.objects.filter(url=notif.url)
            if pop.exists():
                notif.description = pop[0].description
                notif.img_url = pop[0].img_url
                notif.favIconUrl = pop[0].favIconUrl
                notif.title = pop[0].title
                notif.hum_date = humanize_time(
                    timezone.now() - notif.date_created)
            else:
                notif.description = None

    template_dict = {'notifications': notifications,
                     'empty_search_msg': empty_search_msg, }

    return render_to_string('notifications/notification_list.html', template_dict)
Ejemplo n.º 17
0
def save_raw_eyehistory(user, url, title,
                        start_event, end_event,
                        start_time, end_time,
                        src, domain, favicon_url):
    elapsed_time = end_time - start_time
    total_time = int(round((elapsed_time.microseconds / 1.0E3) +
                           (elapsed_time.seconds * 1000) +
                           (elapsed_time.days * 8.64E7)))
    hum_time = humanize_time(elapsed_time)

    raw, created = EyeHistoryRaw.objects.get_or_create(user=user,
                                                       url=url,
                                                       title=title,
                                                       start_event=start_event,
                                                       end_event=end_event,
                                                       start_time=start_time,
                                                       end_time=end_time,
                                                       src=src,
                                                       domain=domain,
                                                       favicon_url=favicon_url,
                                                       total_time=total_time,
                                                       humanize_time=hum_time)
Ejemplo n.º 18
0
def merge_histories(dup_histories, end_time, end_event):
    earliest_start = timezone.now()
    earliest_eyehist = None
    dup_histories = list(dup_histories)

    for hist in dup_histories:
        if hist.start_time < earliest_start:
            earliest_start = hist.start_time
            earliest_eyehist = hist

    if earliest_eyehist == None:
        earliest_eyehist = dup_histories[0]

    earliest_eyehist.end_time = end_time
    earliest_eyehist.end_event = end_event

    elapsed_time = earliest_eyehist.end_time - earliest_eyehist.start_time
    earliest_eyehist.total_time = int(
        round((elapsed_time.microseconds / 1.0E3) +
              (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
    earliest_eyehist.humanize_time = humanize_time(elapsed_time)

    if earliest_eyehist.favIconUrl.strip() == '':
        earliest_eyehist.favIconUrl = "http://www.google.com/s2/favicons?domain_url=" + urllib.quote(
            earliest_eyehist.url)

    earliest_eyehist.save()

    if len(dup_histories) > 1:
        for item in dup_histories:
            if item != earliest_eyehist:
                messages = EyeHistoryMessage.objects.filter(eyehistory=item)
                for message in messages:
                    message.eyehistory = earliest_eyehist
                    message.save()
                item.delete()

    return earliest_eyehist
Ejemplo n.º 19
0
def notification_renderer(user, empty_search_msg):
    notifications = Notification.objects.filter(
        recipient=user).select_related().order_by('-date_created')
    for notif in notifications:
        if notif.notice_type.label != "new_follower":
            pop = PopularHistoryInfo.objects.filter(url=notif.url)
            if pop.exists():
                notif.description = pop[0].description
                notif.img_url = pop[0].img_url
                notif.favIconUrl = pop[0].favIconUrl
                notif.title = pop[0].title
                notif.hum_date = humanize_time(timezone.now() -
                                               notif.date_created)
            else:
                notif.description = None

    template_dict = {
        'notifications': notifications,
        'empty_search_msg': empty_search_msg,
    }

    return render_to_string('notifications/notification_list.html',
                            template_dict)
Ejemplo n.º 20
0
def save_raw_eyehistory(user, url, title, start_event, end_event, start_time,
                        end_time, src, domain, favIconUrl):
    elapsed_time = end_time - start_time
    total_time = int(
        round((elapsed_time.microseconds / 1.0E3) +
              (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
    hum_time = humanize_time(elapsed_time)

    if favIconUrl == None:
        favIconUrl = "http://www.google.com/s2/favicons?domain_url=" + urllib.quote(
            url)

    raw, created = EyeHistoryRaw.objects.get_or_create(user=user,
                                                       url=url,
                                                       title=title,
                                                       start_event=start_event,
                                                       end_event=end_event,
                                                       start_time=start_time,
                                                       end_time=end_time,
                                                       src=src,
                                                       domain=domain,
                                                       favIconUrl=favIconUrl,
                                                       total_time=total_time,
                                                       humanize_time=hum_time)
Ejemplo n.º 21
0
def ticker_info(request):
    timestamp = timezone.now() - datetime.timedelta(minutes=5)

    followers = User.objects.filter(userprofile__followed_by=request.user)

    history = EyeHistory.objects.filter(
        start_time__gt=timestamp).order_by('-start_time').select_related()

    most_recent_hist = None

    mutelist_urls = MuteList.objects.filter(user=request.user,
                                            url__isnull=False).values_list(
                                                'url', flat=True)

    mutelist_words = MuteList.objects.filter(user=request.user,
                                             word__isnull=False).values_list(
                                                 'word', flat=True)

    users = []
    for h in history:
        if h.user not in users and h.user in followers:
            if most_recent_hist == None:
                show = True
                if len(mutelist_urls) > 0:
                    for m in mutelist_urls:
                        if m in h.url:
                            show = False
                if show and len(mutelist_words) > 0:
                    for m in mutelist_words:
                        if m in h.title:
                            show = False

                if show:
                    most_recent_hist = h

            users.append({
                'username': h.user.username,
                'pic_url': gravatar_for_user(h.user),
                'url': '%s/users/%s' % (BASE_URL, h.user.username),
            })

    res = {}
    res['online_users'] = sorted(users, key=lambda u: u['username'])

    if most_recent_hist != None:

        res['history_item'] = {
            'username': most_recent_hist.user.username,
            'pic_url': gravatar_for_user(most_recent_hist.user),
            'user_url':
            '%s/users/%s' % (BASE_URL, most_recent_hist.user.username),
            'url': most_recent_hist.url,
            'title': most_recent_hist.title,
            'favicon': most_recent_hist.favIconUrl,
            'time_ago':
            humanize_time(timezone.now() - most_recent_hist.start_time)
        }

        t = Tag.objects.filter(user=request.user,
                               domain=most_recent_hist.domain)
        if t.exists():
            res['history_item']['tag'] = {
                'name': t[0].name,
                'color': t[0].color
            }
    else:
        res['history_item'] = None
    return JSONResponse(res)
Ejemplo n.º 22
0
def get_info(request):
    url = request.GET.get("url")

    domain = url_domain(url)

    timestamp = timezone.now() - datetime.timedelta(days=7)

    used_users = []

    active = []

    eyehists = EyeHistory.objects.filter(
        (Q(url=url) | Q(domain=domain)) & Q(start_time__gt=timestamp)
        & ~Q(user_id=request.user.id)).order_by('-end_time').select_related()

    for eyehist in eyehists:
        if len(active) >= 6:
            break
        user = eyehist.user
        if user not in used_users:
            old_level = 3
            if eyehist.end_time > (timezone.now() -
                                   datetime.timedelta(minutes=5)):
                old_level = 0
            elif eyehist.end_time > (timezone.now() -
                                     datetime.timedelta(hours=1)):
                old_level = 1
            elif eyehist.end_time > (timezone.now() -
                                     datetime.timedelta(hours=24)):
                old_level = 2

            active.append({
                'username':
                user.username,
                'pic_url':
                gravatar_for_user(user),
                'url':
                '%s/users/%s' % (BASE_URL, user.username),
                'old_level':
                old_level,
                'time_ago':
                humanize_time(timezone.now() - eyehist.end_time)
            })
            used_users.append(user)

    message = EyeHistoryMessage.objects.filter(
        eyehistory__url=url).select_related()
    about_message = None
    user_url = None
    username = None

    if message:
        about_message = humanize_time(timezone.now() -
                                      message[0].post_time) + ' ago'
        message = message[0].message

    if not about_message:
        chat_message = ChatMessage.objects.filter(url=url).select_related()
        if chat_message:
            about_message = humanize_time(timezone.now() -
                                          chat_message[0].date) + ' ago'
            message = '"%s"' % (chat_message[0].message)
            user_url = '%s/users/%s' % (BASE_URL,
                                        chat_message[0].author.username)
            username = chat_message[0].author.username

    if not about_message:
        about_message = ''
        message = ''

    return {
        'url': url,
        'active_users': active,
        'message': message,
        'about_message': about_message,
        'user_url': user_url,
        'username': username,
    }
Ejemplo n.º 23
0
def bubble_info(request):
    url = request.POST.get('url', '')

    domain = url_domain(url)

    timestamp = timezone.now() - datetime.timedelta(days=7)

    used_users = []

    active = []

    followers = User.objects.filter(userprofile__followed_by=request.user)

    eyehists = EyeHistory.objects.filter(
        (Q(url=url) | Q(domain=domain)) & Q(start_time__gt=timestamp)
        & ~Q(user_id=request.user.id)).order_by('-end_time').select_related()

    for eyehist in eyehists:
        if len(active) >= 6:
            break
        user = eyehist.user
        if user not in used_users and user in followers:
            old_level = 3
            if eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(minutes=5)):
                old_level = 0
            elif eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(hours=1)):
                old_level = 1
            elif eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(hours=24)):
                old_level = 2

            url_level = "site-level"
            if eyehist.url == url:
                url_level = "page-level"

            active.append({
                'username':
                user.username,
                'pic_url':
                gravatar_for_user(user),
                'url':
                '%s/users/%s' % (BASE_URL, user.username),
                'old_level':
                old_level,
                'url_level':
                url_level,
                'time_ago':
                humanize_time(timezone.now() - eyehist.end_time)
            })
            used_users.append(user)

    messages = EyeHistoryMessage.objects.filter(
        Q(eyehistory__url=url)
        & Q(post_time__gt=timestamp)).order_by('-post_time').select_related()
    about_message = None
    user_url = None
    username = None
    message = None

    for m in messages:
        if m.eyehistory.user in followers:
            message = m.message
            about_message = humanize_time(timezone.now() -
                                          m.post_time) + ' ago'
            user_url = '%s/users/%s' % (BASE_URL, m.eyehistory.user.username)
            username = m.eyehistory.user.username
            break

    if not about_message:
        chat_messages = ChatMessage.objects.filter(
            url=url).order_by('-date').select_related()
        for c in chat_messages:
            if c.author in followers:
                about_message = humanize_time(timezone.now() - c.date) + ' ago'
                message = '"%s"' % (c.message)
                user_url = '%s/users/%s' % (BASE_URL, c.author.username)
                username = c.author.username
                break

    if not about_message:
        about_message = ''
        message = ''

    return JSONResponse({
        'url': url,
        'active_users': active,
        'message': message,
        'about_message': about_message,
        'user_url': user_url,
        'username': username,
    })
Ejemplo n.º 24
0
    def obj_create(self, bundle, request=None, **kwargs):
        url = bundle.data['url']
        domain = url_domain(url)

        bundle.data['domain'] = domain

        title = bundle.data['title']
        start_time = bundle.data['start_time']
        start_event = bundle.data['start_event']
        end_time = bundle.data['end_time']
        end_event = bundle.data['end_event']
        favicon_url = bundle.data.get('favIconUrl')
        bundle.data['favicon_url'] = favicon_url
        src = bundle.data['src']

        end_time = datetime.datetime.strptime(
            end_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc)
        start_time = datetime.datetime.strptime(
            start_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc)

        message = bundle.data.get('message')

        if message and message.strip() == '':
            message = None

        if message:
            bundle.data.pop('message', None)

        try:
            exists = EyeHistory.objects.filter(user=request.user,
                                               url=url,
                                               title=title,
                                               src=src,
                                               favicon_url=favicon_url,
                                               start_time__gt=start_time -
                                               datetime.timedelta(minutes=1),
                                               start_event=start_event)
            if exists.count() > 0:
                eye_his = exists[0]
                eye_his.end_time = end_time
                eye_his.end_event = end_event
                elapsed_time = end_time - start_time
                eye_his.total_time = int(
                    round((elapsed_time.microseconds / 1.0E3) +
                          (elapsed_time.seconds * 1000) +
                          (elapsed_time.days * 8.64E7)))
                eye_his.humanize_time = humanize_time(elapsed_time)
                eye_his.save()
                if message:
                    eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                        eyehistory=eye_his, message=message)
                    notify_message(message=eye_message)
            else:
                # save_raw_eyehistory(request.user, url, title, start_event, end_event, start_time, end_time, src, domain, favicon_url)
                dup_histories = EyeHistory.objects.filter(
                    user=request.user,
                    url=url,
                    title=title,
                    end_time__gt=start_time - datetime.timedelta(minutes=5))
                if dup_histories.count() > 0:
                    obj = merge_histories(dup_histories, end_time, end_event)
                    if message:
                        eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                            eyehistory=obj, message=message)
                        notify_message(message=eye_message)
                else:
                    bundle_res = super(EyeHistoryResource,
                                       self).obj_create(bundle,
                                                        request,
                                                        user=request.user,
                                                        **kwargs)
                    check_bumps(request.user, start_time, end_time, url)

                    if message:
                        eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                            eyehistory=bundle_res.obj, message=message)
                        notify_message(message=eye_message)

                    return bundle_res
        except MultipleObjectsReturned as e:
            logger.info(e)
            # multiple items created, delete duplicates
            call_command('remove_duplicate_history')

        return bundle
Ejemplo n.º 25
0
def ticker_info(request):
    timestamp = timezone.now() - datetime.timedelta(minutes=5)

    followers = User.objects.filter(userprofile__followed_by=request.user)

    history = EyeHistory.objects.filter(
        start_time__gt=timestamp).order_by('-start_time').select_related()

    most_recent_hist = None

    mutelist_urls = MuteList.objects.filter(
                    user=request.user,
                    url__isnull=False
                ).values_list('url', flat=True)

    mutelist_words = MuteList.objects.filter(
                    user=request.user, word__isnull=False
                ).values_list('word', flat=True)

    users = []
    for h in history:
        if h.user not in users and h.user in followers:
            if most_recent_hist == None:
                show = True
                if len(mutelist_urls) > 0:
                    for m in mutelist_urls:
                        if m in h.url:
                            show = False
                if show and len(mutelist_words) > 0:
                    for m in mutelist_words:
                        if m in h.title:
                            show = False

                if show:
                    most_recent_hist = h

            users.append({ 'username': h.user.username,
                           'pic_url': gravatar_for_user(h.user),
                           'url': '%s/users/%s' % (BASE_URL, h.user.username),
                           })

    res = {}
    res['online_users'] = sorted(users, key=lambda u: u['username'])

    if most_recent_hist != None:

        res['history_item'] = { 'username': most_recent_hist.user.username,
                               'pic_url': gravatar_for_user(most_recent_hist.user),
                               'user_url': '%s/users/%s' % (BASE_URL, most_recent_hist.user.username),
                               'url': most_recent_hist.url,
                               'title': most_recent_hist.title,
                               'favicon': most_recent_hist.favIconUrl,
                               'time_ago': humanize_time(timezone.now() - most_recent_hist.start_time)
                               }

        t = Tag.objects.filter(user=request.user, domain=most_recent_hist.domain)
        if t.exists():
            res['history_item']['tag'] = {'name': t[0].name,
                                          'color': t[0].color}
    else:
        res['history_item'] = None
    return JSONResponse(res)
Ejemplo n.º 26
0
def get_info(request):
    url = request.GET.get("url")

    domain = url_domain(url)

    timestamp =  timezone.now() - datetime.timedelta(days=7)

    used_users = []

    active = []

    eyehists = EyeHistory.objects.filter((Q(url=url) | Q(domain=domain)) & Q(start_time__gt=timestamp) & ~Q(user_id=request.user.id)).order_by('-end_time').select_related()

    for eyehist in eyehists:
        if len(active) >= 6:
            break
        user = eyehist.user
        if user not in used_users:
            old_level = 3
            if eyehist.end_time > (timezone.now() - datetime.timedelta(minutes=5)):
                old_level = 0
            elif eyehist.end_time > (timezone.now() - datetime.timedelta(hours=1)):
                old_level = 1
            elif eyehist.end_time > (timezone.now() - datetime.timedelta(hours=24)):
                old_level = 2

            active.append({'username': user.username,
                        'pic_url': gravatar_for_user(user),
                        'url': '%s/users/%s' % (BASE_URL,user.username),
                        'old_level': old_level,
                        'time_ago': humanize_time(timezone.now()-eyehist.end_time)
                        })
            used_users.append(user)

    message = EyeHistoryMessage.objects.filter(eyehistory__url=url).select_related()
    about_message = None
    user_url = None
    username = None

    if message:
        about_message = humanize_time(timezone.now() - message[0].post_time) + ' ago'
        message = message[0].message

    if not about_message:
        chat_message = ChatMessage.objects.filter(url=url).select_related()
        if chat_message:
            about_message = humanize_time(timezone.now() - chat_message[0].date) + ' ago'
            message = '"%s"' % (chat_message[0].message)
            user_url = '%s/users/%s' % (BASE_URL,chat_message[0].author.username)
            username = chat_message[0].author.username

    if not about_message:
        about_message = ''
        message = ''

    return {
        'url' : url,
        'active_users': active,
        'message': message,
        'about_message': about_message,
        'user_url': user_url,
        'username': username,
    }
Ejemplo n.º 27
0
def bubble_info(request):
    url = request.POST.get('url', '')

    domain = url_domain(url)

    timestamp = timezone.now() - datetime.timedelta(days=7)

    used_users = []

    active = []

    followers = User.objects.filter(userprofile__followed_by=request.user)

    eyehists = EyeHistory.objects.filter((
        Q(url=url) | Q(domain=domain)) &
        Q(start_time__gt=timestamp) &
        ~Q(user_id=request.user.id)
    ).order_by('-end_time').select_related()

    for eyehist in eyehists:
        if len(active) >= 6:
            break
        user = eyehist.user
        if user not in used_users and user in followers:
            old_level = 3
            if eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(minutes=5)):
                old_level = 0
            elif eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(hours=1)):
                old_level = 1
            elif eyehist.end_time > \
                    (timezone.now() - datetime.timedelta(hours=24)):
                old_level = 2

            url_level = "site-level"
            if eyehist.url == url:
                url_level = "page-level"

            active.append({'username': user.username,
                           'pic_url': gravatar_for_user(user),
                           'url': '%s/users/%s' % (BASE_URL, user.username),
                           'old_level': old_level,
                           'url_level': url_level,
                           'time_ago': humanize_time(
                               timezone.now() - eyehist.end_time)
                           })
            used_users.append(user)

    messages = EyeHistoryMessage.objects.filter(
        Q(eyehistory__url=url) &
        Q(post_time__gt=timestamp)
    ).order_by('-post_time').select_related()
    about_message = None
    user_url = None
    username = None
    message = None

    for m in messages:
        if m.eyehistory.user in followers:
            message = m.message
            about_message = humanize_time(
                timezone.now() - m.post_time) + ' ago'
            user_url = '%s/users/%s' % (BASE_URL, m.eyehistory.user.username)
            username = m.eyehistory.user.username
            break

    if not about_message:
        chat_messages = ChatMessage.objects.filter(
            url=url).order_by('-date').select_related()
        for c in chat_messages:
            if c.author in followers:
                about_message = humanize_time(timezone.now() - c.date) + ' ago'
                message = '"%s"' % (c.message)
                user_url = '%s/users/%s' % (BASE_URL, c.author.username)
                username = c.author.username
                break

    if not about_message:
        about_message = ''
        message = ''

    return JSONResponse({
        'url': url,
        'active_users': active,
        'message': message,
        'about_message': about_message,
        'user_url': user_url,
        'username': username,
    })
    def _calculate_scores(self, user=None):
        self.log('_calculate_scores')
        # we should have lists of eyehistories, list of users,
        # list of messages, total time ago, and total time spent
        # populated for each popularhistory. Now we calculate
        # scores based on these things.
        
        if user:
            popular_history = PopularHistory.objects.filter(user=user).prefetch_related(
                'eye_hists', 'messages', 'visitors', 'popular_history')
        else:
            popular_history = PopularHistory.objects.all().prefetch_related(
                'eye_hists', 'messages', 'visitors', 'popular_history')

        for p in popular_history:
            try:
                eye_hist_count = p.eye_hists.count()
                if eye_hist_count == 0:
                    p.delete()
                    continue

                # avg time ago is total time ago / number of eyehistories
                time = p.total_time_ago / float(eye_hist_count)
                p.avg_time_ago = timezone.now() - \
                    datetime.timedelta(hours=time)

                # avg time spent is total time spent / eyehistories
                time_spent = p.total_time_spent / \
                    float(eye_hist_count)
                p.humanize_avg_time = humanize_time(
                    datetime.timedelta(milliseconds=time_spent))

                # num comment score gives score based on num
                # comments with a time decay factor
                num_comments = p.messages.count()
                comment_score = float(num_comments * 40.0) / \
                    float(
                        ((
                            float(p.total_time_ago) + 1.0) /
                            float(eye_hist_count)) ** 1.2)
                p.num_comment_score = comment_score

                # num visitors score gives score based on num
                # visitors with a time decay factor
                num_vistors = p.visitors.count()
                visitor_score = float((num_vistors - 1.0) * 50.0) / \
                    float(
                        ((
                            float(p.total_time_ago) + 1.0) /
                            float(eye_hist_count)) ** 1.2)
                p.unique_visitor_score = visitor_score

                # num time score gives score based on avg time
                # spent with a time decay factor
                
                tot_time = 0
                if p.total_time_spent > 20000:
                    tot_time = 20000
                else:
                    tot_time = p.total_time_spent
                
                num_time1 = float(tot_time) / \
                    float(eye_hist_count)
                    
                num_time2 = float(p.total_time_spent) / \
                    float(eye_hist_count)

                time_score = float((num_time1) / 1000.0) / \
                    (float(p.total_time_ago) + 1.0)

                time_score_2 = float((num_time2 - 5000) / 1000.0) / \
                    float(
                        ((
                            float(p.total_time_ago) + 1.0) /
                            float(eye_hist_count)) ** 1)
                p.avg_time_spent_score = time_score_2
                
                domain_score = 0.0
                
                if not user: # only do this for cron, not for user-specific since it adds time
                    # decrease factor if domain is popular
                    if p.popular_history.domain not in news_list:
                        num_domain_visits = EyeHistory.objects.filter(domain=p.popular_history.domain).count()
                        domain_score = float(num_domain_visits) / 5000.0
                    
                    if p.popular_history.url.endswith('.com/') and p.visitors.count() > 4:
                        domain_score += 1.0
                

                # top score combines all the scores together
                p.top_score = float(
                    comment_score + visitor_score + time_score - domain_score)

                p.save()
            except Exception, e:
                self.log(e)
                continue
Ejemplo n.º 29
0
    def obj_create(self, bundle, request=None, **kwargs):
        url = bundle.data['url']
        domain = url_domain(url)

        bundle.data['domain'] = domain

        title = bundle.data.get('title')
        start_time = bundle.data.get('start_time')
        start_event = bundle.data.get('start_event')
        end_time = bundle.data.get('end_time')
        end_event = bundle.data.get('end_event')
        favicon_url = bundle.data.get('favIconUrl')
        bundle.data['favicon_url'] = favicon_url
        src = bundle.data.get('src')
        tags = bundle.data.get('tags')

        if tags:
            tags = json.loads(tags);

        if end_time and start_time:
            end_time = datetime.datetime.strptime(
                end_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc)
            start_time = datetime.datetime.strptime(
                start_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc)
        else:
            end_time = datetime.datetime.now().replace(tzinfo=pytz.utc)
            start_time = datetime.datetime.now().replace(tzinfo=pytz.utc)

        message = bundle.data.get('message')
        highlight = bundle.data.get('highlight')
        parent_comment = bundle.data.get('parent_comment')

        if message and message.strip() == '':
            message = None

        if message:
            bundle.data.pop('message', None)
        if highlight:
            bundle.data.pop('highlight', None)
        if parent_comment:
            bundle.data.pop('parent_comment', None)

        try:
            exists = EyeHistory.objects.filter(user=request.user, url=url,
                                               title=title, src=src, favicon_url=favicon_url,
                                               start_time__gt=start_time -
                                               datetime.timedelta(minutes=1),
                                               start_event=start_event)
            if exists.count() > 0:
                eye_his = exists[0]
                eye_his.end_time = end_time
                eye_his.end_event = end_event
                elapsed_time = end_time - start_time
                eye_his.total_time = int(round(
                    (elapsed_time.microseconds / 1.0E3) + (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
                eye_his.humanize_time = humanize_time(elapsed_time)
                eye_his.save()
                if message:
                    eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                        eyehistory=eye_his, message=message)
                    notify_message(message=eye_message)
            else:
                # save_raw_eyehistory(request.user, url, title, start_event, end_event, start_time, end_time, src, domain, favicon_url)
                dup_histories = EyeHistory.objects.filter(
                    user=request.user, url=url, title=title, end_time__gt=start_time - datetime.timedelta(minutes=5))
                if dup_histories.count() > 0:
                    obj = merge_histories(dup_histories, end_time, end_event)
                    if message:
                        eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                            eyehistory=obj, message=message)
                        notify_message(message=eye_message)
                else:
                    bundle_res = super(EyeHistoryResource, self).obj_create(
                        bundle, request, user=request.user, **kwargs)
                    check_bumps(request.user, start_time, end_time, url)
                    if message:
                        eye_message = None
                        if parent_comment:
                            h = Highlight.objects.get(id=highlight)
                            eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                                eyehistory=bundle_res.obj, message=message, highlight=h, parent_comment=parent_comment)
                        elif highlight:
                            h = Highlight.objects.get(id=highlight)
                            eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                                eyehistory=bundle_res.obj, message=message, highlight=h)
                        else:
                            eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                                eyehistory=bundle_res.obj, message=message)

                        if tags:
                            for tag in tags:
                                if len(Tag.objects.filter(comment=eye_message, common_tag__name=tag)) == 0:
                                    try:
                                        common_tag = CommonTag.objects.get(name=tag)
                                        vt = Tag(
                                            common_tag=common_tag,
                                            user=request.user,
                                            comment=eye_message,
                                        )
                                        vt.save()
                                    except CommonTag.DoesNotExist:
                                        pass


                        notify_message(message=eye_message)
                    return bundle_res
        except MultipleObjectsReturned as e:
            logger.info(e)
            # multiple items created, delete duplicates
            call_command('remove_duplicate_history')

        return bundle
Ejemplo n.º 30
0
    def obj_create(self, bundle, request=None, **kwargs):
        url = bundle.data['url']
        domain = url_domain(url)

        bundle.data['domain'] = domain

        title = bundle.data['title']
        start_time = bundle.data['start_time']
        start_event = bundle.data['start_event']
        end_time = bundle.data['end_time']
        end_event = bundle.data['end_event']
        favicon_url = bundle.data.get('favIconUrl')
        bundle.data['favicon_url'] = favicon_url
        src = bundle.data['src']

        end_time = datetime.datetime.strptime(
            end_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc)
        start_time = datetime.datetime.strptime(
            start_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc)

        message = bundle.data.get('message')

        if message and message.strip() == '':
            message = None

        if message:
            bundle.data.pop('message', None)

        try:
            exists = EyeHistory.objects.filter(user=request.user, url=url,
                                               title=title, src=src, favicon_url=favicon_url,
                                               start_time__gt=start_time -
                                               datetime.timedelta(minutes=1),
                                               start_event=start_event)
            if exists.count() > 0:
                eye_his = exists[0]
                eye_his.end_time = end_time
                eye_his.end_event = end_event
                elapsed_time = end_time - start_time
                eye_his.total_time = int(round(
                    (elapsed_time.microseconds / 1.0E3) + (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7)))
                eye_his.humanize_time = humanize_time(elapsed_time)
                eye_his.save()
                if message:
                    eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                        eyehistory=eye_his, message=message)
                    notify_message(message=eye_message)
            else:
                # save_raw_eyehistory(request.user, url, title, start_event, end_event, start_time, end_time, src, domain, favicon_url)
                dup_histories = EyeHistory.objects.filter(
                    user=request.user, url=url, title=title, end_time__gt=start_time - datetime.timedelta(minutes=5))
                if dup_histories.count() > 0:
                    obj = merge_histories(dup_histories, end_time, end_event)
                    if message:
                        eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                            eyehistory=obj, message=message)
                        notify_message(message=eye_message)
                else:
                    bundle_res = super(EyeHistoryResource, self).obj_create(
                        bundle, request, user=request.user, **kwargs)
                    check_bumps(request.user, start_time, end_time, url)

                    if message:
                        eye_message, _ = EyeHistoryMessage.objects.get_or_create(
                            eyehistory=bundle_res.obj, message=message)
                        notify_message(message=eye_message)

                    return bundle_res
        except MultipleObjectsReturned as e:
            logger.info(e)
            # multiple items created, delete duplicates
            call_command('remove_duplicate_history')

        return bundle
Ejemplo n.º 31
0
    def _calculate_scores(self, user=None):
        self.log('_calculate_scores')
        # we should have lists of eyehistories, list of users,
        # list of messages, total time ago, and total time spent
        # populated for each popularhistory. Now we calculate
        # scores based on these things.
        
        if user:
            popular_history = PopularHistory.objects.filter(user=user).prefetch_related(
                'eye_hists', 'messages', 'visitors', 'popular_history')
        else:
            popular_history = PopularHistory.objects.all().prefetch_related(
                'eye_hists', 'messages', 'visitors', 'popular_history')

        for p in popular_history:
            try:
                eye_hist_count = p.eye_hists.count()
                if eye_hist_count == 0:
                    p.delete()
                    continue

                # avg time ago is total time ago / number of eyehistories
                time = p.total_time_ago / float(eye_hist_count)
                p.avg_time_ago = timezone.now() - \
                    datetime.timedelta(hours=time)

                # avg time spent is total time spent / eyehistories
                time_spent = p.total_time_spent / \
                    float(eye_hist_count)
                p.humanize_avg_time = humanize_time(
                    datetime.timedelta(milliseconds=time_spent))

                # num comment score gives score based on num
                # comments with a time decay factor
                num_comments = p.messages.count()
                comment_score = float(num_comments * 40.0) / \
                    float(
                        ((
                            float(p.total_time_ago) + 1.0) /
                            float(eye_hist_count)) ** 1.2)
                p.num_comment_score = comment_score

                # num visitors score gives score based on num
                # visitors with a time decay factor
                num_vistors = p.visitors.count()
                visitor_score = float((num_vistors - 1.0) * 50.0) / \
                    float(
                        ((
                            float(p.total_time_ago) + 1.0) /
                            float(eye_hist_count)) ** 1.2)
                p.unique_visitor_score = visitor_score

                # num time score gives score based on avg time
                # spent with a time decay factor
                
                tot_time = 0
                if p.total_time_spent > 20000:
                    tot_time = 20000
                else:
                    tot_time = p.total_time_spent
                
                num_time1 = float(tot_time) / \
                    float(eye_hist_count)
                    
                num_time2 = float(p.total_time_spent) / \
                    float(eye_hist_count)

                time_score = float((num_time1) / 1000.0) / \
                    (float(p.total_time_ago) + 1.0)

                time_score_2 = float((num_time2 - 5000) / 1000.0) / \
                    float(
                        ((
                            float(p.total_time_ago) + 1.0) /
                            float(eye_hist_count)) ** 1)
                p.avg_time_spent_score = time_score_2
                
                domain_score = 0.0
                
                if not user: # only do this for cron, not for user-specific since it adds time
                    # decrease factor if domain is popular
                    if p.popular_history.domain not in news_list:
                        num_domain_visits = EyeHistory.objects.filter(domain=p.popular_history.domain).count()
                        domain_score = float(num_domain_visits) / 5000.0
                    
                    if p.popular_history.url.endswith('.com/') and p.visitors.count() > 4:
                        domain_score += 1.0
                

                # top score combines all the scores together
                p.top_score = float(
                    comment_score + visitor_score + time_score - domain_score)

                p.save()
            except Exception, e:
                self.log(e)
                continue