The journald beacon allows for the systemd journal to be parsed and linked
    objects to be turned into events.

    This beacons config will return all sshd jornal entries

    .. code-block:: yaml

        beacons:
          journald:
            - services:
                sshd:
                  SYSLOG_IDENTIFIER: sshd
                  PRIORITY: 6

def beacon(config):
    '''
    The journald beacon allows for the systemd journal to be parsed and linked
    objects to be turned into events.

    This beacons config will return all sshd jornal entries

    .. code-block:: yaml

        beacons:
          journald:
            - services:
                sshd:
                  SYSLOG_IDENTIFIER: sshd
                  PRIORITY: 6
    '''
    ret = []
    journal = _get_journal()

    _config = {}
    list(map(_config.update, config))

    while True:
        cur = journal.get_next()
        if not cur:
            break

        for name in _config.get('services', {}):
            n_flag = 0
            for key in _config['services'][name]:
                if isinstance(key, salt.ext.six.string_types):
                    key = salt.utils.data.decode(key)
                if key in cur:
                    if _config['services'][name][key] == cur[key]:
                        n_flag += 1
            if n_flag == len(_config['services'][name]):
                # Match!
                sub = salt.utils.data.simple_types_filter(cur)
                sub.update({'tag': name})
                ret.append(sub)
    return ret