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}}
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 } }
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, } }
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
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
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
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, } }
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
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, } }
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
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
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
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)
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, } }
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)
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)
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)
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
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)
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)
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)
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, }
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 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
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)
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, }
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
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
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