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)
Пример #3
0
 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 ''
Пример #4
0
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
Пример #5
0
 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))
Пример #9
0
 def wrapper(*args, **kwds):
     try:
         return f(*args, **kwds)
     except Exception as exc:
         get_logger().error('%s failed! %s' % (f.__name__, exc))
         return None