def GET_pixel(self, event): extension = request.environ.get("extension") if extension != "png": abort(404) event_id = event[:50] # some very simple poor-man's validation user_id = hashlib.sha1(request.ip + request.user_agent).hexdigest() ActiveVisitorsByLiveUpdateEvent.touch(event_id, user_id) response.content_type = "image/png" response.headers["Cache-Control"] = "no-cache, max-age=0" response.headers["Pragma"] = "no-cache" response.headers["Expires"] = "Thu, 01 Jan 1970 00:00:00 GMT" return self._pixel_contents
def GET_pixel(self, event): extension = request.environ.get("extension") if extension != "png": abort(404) event_id = event[:50] # some very simple poor-man's validation user_agent = request.user_agent or '' user_id = hashlib.sha1(request.ip + user_agent).hexdigest() ActiveVisitorsByLiveUpdateEvent.touch(event_id, user_id) response.content_type = "image/png" response.headers["Cache-Control"] = "no-cache, max-age=0" response.headers["Pragma"] = "no-cache" response.headers["Expires"] = "Thu, 01 Jan 1970 00:00:00 GMT" return self._pixel_contents
def _get_active_visitors(self): count, is_fuzzed = ActiveVisitorsByLiveUpdateEvent.get_count( self.event._id, fuzz=not c.user_is_admin) if is_fuzzed: return "~%d" % count return count
def update_activity(): event_ids = ActiveVisitorsByLiveUpdateEvent._cf.get_range(column_count=1, filter_empty=False) for event_id, is_active in event_ids: count = 0 if is_active: try: count = ActiveVisitorsByLiveUpdateEvent.get_count(event_id) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to fetch activity count for %r: %s", event_id, e) return try: LiveUpdateEvent.update_activity(event_id, count) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to update event activity for %r: %s", event_id, e) try: LiveUpdateActivityHistoryByEvent.record_activity(event_id, count) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to update activity history for %r: %s", event_id, e) is_fuzzed = False if count < ACTIVITY_FUZZING_THRESHOLD: count = utils.fuzz_activity(count) is_fuzzed = True websockets.send_broadcast("/live/" + event_id, type="activity", payload={"count": count, "fuzzed": is_fuzzed}) # ensure that all the amqp messages we've put on the worker's queue are # sent before we allow this script to exit. amqp.worker.join()
def update_activity(): events = {} event_counts = collections.Counter() event_ids = ActiveVisitorsByLiveUpdateEvent._cf.get_range( column_count=1, filter_empty=False) for event_id, is_active in event_ids: count = 0 if is_active: try: count = ActiveVisitorsByLiveUpdateEvent.get_count(event_id) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to fetch activity count for %r: %s", event_id, e) return try: LiveUpdateActivityHistoryByEvent.record_activity(event_id, count) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to update activity history for %r: %s", event_id, e) is_fuzzed = False if count < ACTIVITY_FUZZING_THRESHOLD: count = utils.fuzz_activity(count) is_fuzzed = True try: event = LiveUpdateEvent.update_activity(event_id, count, is_fuzzed) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to update event activity for %r: %s", event_id, e) else: events[event_id] = event event_counts[event_id] = count websockets.send_broadcast( "/live/" + event_id, type="activity", payload={ "count": count, "fuzzed": is_fuzzed, }, ) top_event_ids = [ event_id for event_id, count in event_counts.most_common(1000) ] top_events = [events[event_id] for event_id in top_event_ids] query_ttl = datetime.timedelta(days=3) with CachedQueryMutator() as m: m.replace(get_active_events(), top_events, ttl=query_ttl) # ensure that all the amqp messages we've put on the worker's queue are # sent before we allow this script to exit. amqp.worker.join()
def update_activity(): events = {} event_counts = collections.Counter() event_ids = ActiveVisitorsByLiveUpdateEvent._cf.get_range( column_count=1, filter_empty=False) for event_id, is_active in event_ids: count = 0 if is_active: try: count = ActiveVisitorsByLiveUpdateEvent.get_count(event_id) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to fetch activity count for %r: %s", event_id, e) return try: LiveUpdateActivityHistoryByEvent.record_activity(event_id, count) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to update activity history for %r: %s", event_id, e) is_fuzzed = False if count < ACTIVITY_FUZZING_THRESHOLD: count = utils.fuzz_activity(count) is_fuzzed = True try: event = LiveUpdateEvent.update_activity(event_id, count, is_fuzzed) except tdb_cassandra.TRANSIENT_EXCEPTIONS as e: g.log.warning("Failed to update event activity for %r: %s", event_id, e) else: events[event_id] = event event_counts[event_id] = count websockets.send_broadcast( "/live/" + event_id, type="activity", payload={ "count": count, "fuzzed": is_fuzzed, }, ) top_event_ids = [event_id for event_id, count in event_counts.most_common(1000)] top_events = [events[event_id] for event_id in top_event_ids] query_ttl = datetime.timedelta(days=3) with CachedQueryMutator() as m: m.replace(get_active_events(), top_events, ttl=query_ttl) # ensure that all the amqp messages we've put on the worker's queue are # sent before we allow this script to exit. amqp.worker.join()
def GET_pixel(self, event, **kwargs): extension = request.environ.get("extension") if extension != "png": abort(404) event_id = event[:50] # some very simple poor-man's validation user_agent = request.user_agent or '' user_id = hashlib.sha1(request.ip + user_agent).hexdigest() ActiveVisitorsByLiveUpdateEvent.touch(event_id, user_id) if c.activity_service: event_context_id = "LiveUpdateEvent_" + event_id try: c.activity_service.record_activity(event_context_id, user_id) except TTransportException: pass response.content_type = "image/png" response.headers["Cache-Control"] = "no-cache, max-age=0" response.headers["Pragma"] = "no-cache" response.headers["Expires"] = "Thu, 01 Jan 1970 00:00:00 GMT" return self._pixel_contents
def broadcast_update(): event_ids = ActiveVisitorsByLiveUpdateEvent._cf.get_range( column_count=1, filter_empty=False) for event_id, is_active in event_ids: if is_active: count, is_fuzzed = ActiveVisitorsByLiveUpdateEvent.get_count( event_id, cached=False) else: count, is_fuzzed = 0, False payload = { "count": count, "fuzzed": is_fuzzed, } websockets.send_broadcast( "/live/" + event_id, type="activity", payload=payload) amqp.worker.join()
def broadcast_update(): event_ids = ActiveVisitorsByLiveUpdateEvent._cf.get_range( column_count=1, filter_empty=False) for event_id, is_active in event_ids: if is_active: count, is_fuzzed = ActiveVisitorsByLiveUpdateEvent.get_count( event_id, cached=False) else: count, is_fuzzed = 0, False payload = { "count": count, "fuzzed": is_fuzzed, } websockets.send_broadcast( "/live/" + event_id, type="activity", payload=payload) # ensure that all the amqp messages we've put on the worker's queue are # sent before we allow this script to exit. amqp.worker.join()