Beispiel #1
0
def get_events(environment, start_response, headers):
  """
  Retrieve events
  POST body should contain a JSON encoded version of:
    { namespace: namespace_name (optional),
      stream : stream_name,
      start_time : starting_time_as_kronos_time,
      end_time : ending_time_as_kronos_time,
      start_id : only_return_events_with_id_greater_than_me,
      limit: optional_maximum_number_of_events,
      order: ResultOrder.ASCENDING or ResultOrder.DESCENDING (default
             ResultOrder.ASCENDING)
    }
  Either start_time or start_id should be specified. If a retrieval breaks
  while returning results, you can send another retrieval request and specify
  start_id as the last id that you saw. Kronos will only return events that
  occurred after the event with that id.
  """
  request_json = environment['json']
  try:
    stream = request_json['stream']
    validate_stream(stream)
  except Exception, e:
    log.exception('get_events: stream validation failed for `%s`',
                  request_json.get('stream'))
    start_response('400 Bad Request', headers)
    yield marshal.dumps({ERRORS_FIELD: [repr(e)],
                         SUCCESS_FIELD: False})
    return
Beispiel #2
0
def put_events(environment, start_response, headers):
  """
  Store events in backends
  POST body should contain a JSON encoded version of:
    { namespace: namespace_name (optional),
      events: { stream_name1 : [event1, event2, ...],
                stream_name2 : [event1, event2, ...],
                ... }
    }
  Where each event is a dictionary of keys and values.
  """
  errors = []
  events_to_insert = defaultdict(list)
  request_json = environment['json']
  namespace = request_json.get('namespace', settings.default_namespace)

  # Validate streams and events
  for stream, events in request_json.get('events', {}).iteritems():
    try:
      validate_stream(stream)
    except Exception, e:
      log.exception('put_events: stream validation failed for `%s`', stream)
      errors.append(repr(e))
      continue

    for event in events:
      try:
        events_to_insert[stream].append(validate_event_and_assign_id(event))
      except Exception, e:
        log.exception('put_events: event validation failed for `%s`', event)
        errors.append(repr(e))
Beispiel #3
0
def put_events(environment, start_response, headers):
    """
  Store events in backends
  POST body should contain a JSON encoded version of:
    { namespace: namespace_name (optional),
      events: { stream_name1 : [event1, event2, ...],
                stream_name2 : [event1, event2, ...],
                ... }
    }
  Where each event is a dictionary of keys and values.
  """
    errors = []
    events_to_insert = defaultdict(list)
    request_json = environment['json']
    namespace = request_json.get('namespace', settings.default_namespace)

    # Validate streams and events
    for stream, events in request_json.get('events', {}).iteritems():
        try:
            validate_stream(stream)
        except Exception, e:
            log.exception('put_events: stream validation failed for `%s`',
                          stream)
            errors.append(repr(e))
            continue

        for event in events:
            try:
                events_to_insert[stream].append(
                    validate_event_and_assign_id(event))
            except Exception, e:
                log.exception('put_events: event validation failed for `%s`',
                              event)
                errors.append(repr(e))
Beispiel #4
0
def get_events(environment, start_response, headers):
    """
  Retrieve events
  POST body should contain a JSON encoded version of:
    { namespace: namespace_name (optional),
      stream : stream_name,
      start_time : starting_time_as_kronos_time,
      end_time : ending_time_as_kronos_time,
      start_id : only_return_events_with_id_greater_than_me,
      limit: optional_maximum_number_of_events,
      order: ResultOrder.ASCENDING or ResultOrder.DESCENDING (default
             ResultOrder.ASCENDING)
    }
  Either start_time or start_id should be specified. If a retrieval breaks
  while returning results, you can send another retrieval request and specify
  start_id as the last id that you saw. Kronos will only return events that
  occurred after the event with that id.
  """
    request_json = environment['json']
    try:
        stream = request_json['stream']
        validate_stream(stream)
    except Exception, e:
        log.exception('get_events: stream validation failed for `%s`',
                      request_json.get('stream'))
        start_response('400 Bad Request', headers)
        yield marshal.dumps({ERRORS_FIELD: [repr(e)], SUCCESS_FIELD: False})
        return
Beispiel #5
0
 def get_matching_prefix(self, namespace, stream):
   """
   We look at the stream prefixs configured in stream.yaml and match stream
   to the longest prefix.
   """
   validate_stream(stream)
   default_prefix = ''
   longest_prefix = default_prefix
   for prefix in self.prefix_confs[namespace]:
     if prefix == default_prefix:
       continue
     if not stream.startswith(prefix):
       continue
     if len(prefix) <= len(longest_prefix):
       continue
     longest_prefix = prefix
   return longest_prefix
Beispiel #6
0
def delete_events(environment, start_response, headers):
    """
  Delete events
  POST body should contain a JSON encoded version of:
    { namespace: namespace_name (optional),
      stream : stream_name,
      start_time : starting_time_as_kronos_time,
      end_time : ending_time_as_kronos_time,
      start_id : only_delete_events_with_id_gte_me,
    }
  Either start_time or start_id should be specified.
  """
    request_json = environment["json"]
    try:
        stream = request_json["stream"]
        validate_stream(stream)
    except Exception, e:
        log.exception("delete_events: stream validation failed for `%s`.", request_json.get("stream"))
        start_response("400 Bad Request", headers)
        return {ERRORS_FIELD: [repr(e)]}
Beispiel #7
0
def delete_events(environment, start_response, headers):
    """
  Delete events
  POST body should contain a JSON encoded version of:
    { namespace: namespace_name (optional),
      stream : stream_name,
      start_time : starting_time_as_kronos_time,
      end_time : ending_time_as_kronos_time,
      start_id : only_delete_events_with_id_gte_me,
    }
  Either start_time or start_id should be specified.
  """
    request_json = environment['json']
    try:
        stream = request_json['stream']
        validate_stream(stream)
    except Exception, e:
        log.exception('delete_events: stream validation failed for `%s`.',
                      request_json.get('stream'))
        start_response('400 Bad Request', headers)
        return {ERRORS_FIELD: [repr(e)]}