Пример #1
0
def handle_disconnection(client_id):
  """Handles a channel disconnection for a Clio channel."""
  # Find all their subscriptions and delete them.
  q = model.Subscription.all().filter('client_id =', client_id)
  subscriptions = q.fetch(1000)
  for sub in subscriptions:
    prospective_search.unsubscribe(model.RequestRecord, str(sub.key()))
  db.delete(subscriptions)
Пример #2
0
 def post(self):
     record = prospective_search.get_document(self.request)
     record_value = simplejson.loads(record.value)
     subscriber_keys = map(db.Key, self.request.get_all("id"))
     subscribers = db.get(subscriber_keys)
     datapoints = []
     stats_json = []
     for subscriber_key, subscriber in zip(subscriber_keys, subscribers):
         if not subscriber:
             prospective_search.unsubscribe(stats.StatsRecord, subscriber_key)
         else:
             datapoints.append(models.getStats(subscriber.datapoint, record.timestamp, duration="day"))
             datapoints.append(models.getStats(subscriber.datapoint, record.timestamp, duration="hour"))
     for datapoint in datapoints:
         if datapoint.datapoint == "active_users":
             try:
                 user = models.getUser(record_value["user"], False)
             except models.UserDoesNotExistError:
                 continue
             last_seen = user.last_seen
             new_last_seen = timestamp.now()
             if datapoint.duration == "day":
                 last_seen = last_seen.replace(hour=0, minute=0, second=0, microsecond=0)
                 new_last_seen = new_last_seen.replace(hour=0, minute=0, second=0, microsecond=0)
             if last_seen < new_last_seen:
                 user.updateLastSeen(new_last_seen)
                 user.save()
             else:
                 continue
         if datapoint.datapoint == "quota":
             datapoint.count = models.getQuota().amount
         else:
             datapoint.increment()
         json = {
             "datapoint": datapoint.datapoint,
             "value": datapoint.count,
             "date": datapoint.date.strftime("%D, %M %d %y"),
             "datestamp": int(time.mktime(datapoint.date.date().timetuple())) * 1000,
             "hour": datapoint.date.hour,
         }
         if datapoint.duration == "day":
             json["hour"] = "total"
         stats_json.append(json)
     db.put(datapoints)
     push = channels.Channel("[email protected]/Web", False)
     push.message = {"stats": stats_json}
     push.send()
     logging.debug(simplejson.dumps(stats_json))
Пример #3
0
  def post(self):
    # Fetch the log record
    record = prospective_search.get_document(self.request)
    record_data = record.to_json()

    # Fetch the set of subscribers to send this record to
    subscriber_keys = map(db.Key, self.request.get_all('id'))
    subscribers = db.get(subscriber_keys)

    for subscriber_key, subscriber in zip(subscriber_keys, subscribers):
      # If the subscription has been deleted from the datastore, delete it
      # from the matcher API.
      if not subscriber:
        logging.error("Subscription %s deleted!", subscriber_key)
        prospective_search.unsubscribe(model.RequestRecord, subscriber_key)
      else:
        data = simplejson.dumps({
            'subscription_key': str(subscriber_key),
            'data': record_data,
        })
        channel.send_message(subscriber.client_id, data)
Пример #4
0
 def post(self):
     record = prospective_search.get_document(self.request)
     record_value = simplejson.loads(record.value)
     subscriber_keys = map(db.Key, self.request.get_all('id'))
     subscribers = db.get(subscriber_keys)
     datapoints = []
     stats_json = []
     for subscriber_key, subscriber in zip(subscriber_keys, subscribers):
         if not subscriber:
             prospective_search.unsubscribe(stats.StatsRecord,
                                            subscriber_key)
         else:
             datapoints.append(
                 models.getStats(subscriber.datapoint,
                                 record.timestamp,
                                 duration='day'))
             datapoints.append(
                 models.getStats(subscriber.datapoint,
                                 record.timestamp,
                                 duration='hour'))
     for datapoint in datapoints:
         if datapoint.datapoint == 'active_users':
             try:
                 user = models.getUser(record_value['user'], False)
             except models.UserDoesNotExistError:
                 continue
             last_seen = user.last_seen
             new_last_seen = timestamp.now()
             if datapoint.duration == "day":
                 last_seen = last_seen.replace(hour=0,
                                               minute=0,
                                               second=0,
                                               microsecond=0)
                 new_last_seen = new_last_seen.replace(hour=0,
                                                       minute=0,
                                                       second=0,
                                                       microsecond=0)
             if last_seen < new_last_seen:
                 user.updateLastSeen(new_last_seen)
                 user.save()
             else:
                 continue
         if datapoint.datapoint == 'quota':
             datapoint.count = models.getQuota().amount
         else:
             datapoint.increment()
         json = {
             'datapoint': datapoint.datapoint,
             'value': datapoint.count,
             'date': datapoint.date.strftime("%D, %M %d %y"),
             'datestamp':
             int(time.mktime(datapoint.date.date().timetuple())) * 1000,
             'hour': datapoint.date.hour
         }
         if datapoint.duration == "day":
             json['hour'] = "total"
         stats_json.append(json)
     db.put(datapoints)
     push = channels.Channel("[email protected]/Web", False)
     push.message = {"stats": stats_json}
     push.send()
     logging.debug(simplejson.dumps(stats_json))
Пример #5
0
def unsubscribe(document_class, sub_id, topic=None):
  topic = _get_document_topic(document_class, topic)
  prospective_search.unsubscribe(datastore.Entity, sub_id, topic=topic)
Пример #6
0
def unsubscribe(document_class, sub_id, topic=None):
    topic = _get_document_topic(document_class, topic)
    prospective_search.unsubscribe(datastore.Entity, sub_id, topic=topic)