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