def process(values): json_string = json.dumps(values) if values.get('type') == 'Entry v1': entry = DiaryEntry.from_json(json_string) add_entry_v1(entry) else: get_logger().error('Unsupported values: %r' % values)
def add_entry_v1(entry): blocked_events = get_events_to_reject() if entry.event_name in blocked_events: get_logger().info('Rejecting %s' % entry.event_name) return with get_client(version=1) as client: client.add(entry)
def wrapper(*args, **kwds): try: return f(*args, **kwds) except Exception as exc: get_logger().error('%s failed! %s' % (f.__name__, exc)) import traceback get_logger().error(traceback.format_exc()) return ''
def write_entry(entry): entry.assert_types() blocked_events = get_events_to_reject() if entry.event_name in blocked_events: get_logger().info('Rejecting %s' % entry.event_name) return body = entry.to_json() emitter.emit(body) get_logger().debug('Successfully wrote %s. (%s)' % (entry.context_id, entry.event_name)) return entry.context_id
def emit(self, entry): if self.handler is None: if os.path.exists('/dev/log'): self.handler = SysLogHandler(address='/dev/log', facility='user') else: get_logger().error( 'RsyslogEmitter().emit() failed: /dev/log does not exist, cannot emit entry (%s)' % (entry, )) return record = logging.LogRecord('diary-rsyslogger', logging.INFO, None, None, 'ADMINDIARY: ' + str(entry), (), None, None) self.handler.emit(record)
def deserialize(self, line): get_logger().debug('Parsing %s' % line) try: parsed = self._pattern.parseString(line) parsed_dict = parsed.asDict() except ParseException as exc: get_logger().error('Parsing failed! %s (%s)' % (line, exc)) else: # merge the nested dictionaries to return a simple structure rsyslog_event_dict = parsed_dict["serialized_event_dict"] # and convert to Admin Diary object model try: return json.loads(rsyslog_event_dict) except TypeError as exc: get_logger().error('Parsing failed! %r (%s)' % (rsyslog_event_dict, exc))
with get_client(version=1) as client: client.add(entry) def ok(): # tell rsyslog that everything is ok print("OK") sys.stdout.flush() def stdin_to_storage(): rsyslog_transport = RsyslogTransport("ADMINDIARY:") ok() while True: line = sys.stdin.readline() if not line: break values = rsyslog_transport.deserialize(line) if values: process(values) ok() if __name__ == "__main__": try: stdin_to_storage() except Exception as exc: get_logger().error('Processing entry failed!') get_logger().exception(exc) raise
def add(self, diary_entry): if diary_entry.event_name == 'COMMENT': entry_message = diary_entry.message.get('en') event_id = None else: get_logger().debug('Searching for Event %s' % diary_entry.event_name) entry_message = None event = self.add_event(diary_entry.event_name) event_id = event.id get_logger().debug('Found Event ID %s' % event.id) if diary_entry.message: for locale, message in diary_entry.message.items(): get_logger().debug('Trying to insert message for %s' % locale) if self.add_event_message(event.id, locale, message, False): get_logger().debug( 'Found no existing one. Inserted %r' % message) else: get_logger().debug('No further message given, though') entry = Entry(username=diary_entry.username, hostname=diary_entry.hostname, timestamp=diary_entry.timestamp, context_id=diary_entry.context_id, event_id=event_id, message=entry_message) self._session.add(entry) main_id = self._session.query(func.min( Entry.id)).filter(Entry.context_id == entry.context_id).scalar() if main_id: entry.main_id = main_id for tag in diary_entry.tags: tag = self.add_tag(tag) entry.tags.append(tag) for key, value in diary_entry.args.items(): entry.args.append(Arg(key=key, value=value)) get_logger().info('Successfully added %s (%s)' % (diary_entry.context_id, diary_entry.event_name))
def wrapper(*args, **kwds): try: return f(*args, **kwds) except Exception as exc: get_logger().error('%s failed! %s' % (f.__name__, exc)) return None