dcavalca / rpms / systemd

Forked from rpms/systemd 2 years ago
Clone
Zbigniew Jędrzejewski-Szmek a52f67
From aaad88a2eb3a9be24b75e36aefbea9a77b9927b4 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek a52f67
From: Jan Engelhardt <jengelh@inai.de>
Zbigniew Jędrzejewski-Szmek a52f67
Date: Mon, 17 Feb 2014 02:49:45 +0100
Zbigniew Jędrzejewski-Szmek a52f67
Subject: [PATCH] doc: choose different words to improve clarity
Zbigniew Jędrzejewski-Szmek a52f67
Zbigniew Jędrzejewski-Szmek a52f67
I suggest the following changes to improve the way the text reads
Zbigniew Jędrzejewski-Szmek a52f67
("flows").
Zbigniew Jędrzejewski-Szmek a52f67
Zbigniew Jędrzejewski-Szmek a52f67
(cherry picked from commit dc968941bfc9be464e1df15afa05693dec3ec192)
Zbigniew Jędrzejewski-Szmek a52f67
Zbigniew Jędrzejewski-Szmek a52f67
Conflicts:
Zbigniew Jędrzejewski-Szmek a52f67
	man/crypttab.xml
Zbigniew Jędrzejewski-Szmek a52f67
	man/sd_bus_creds_get_pid.xml
Zbigniew Jędrzejewski-Szmek a52f67
	man/sd_bus_message_get_monotonic_usec.xml
Zbigniew Jędrzejewski-Szmek a52f67
---
Zbigniew Jędrzejewski-Szmek a52f67
 man/crypttab.xml                      |  4 +-
Zbigniew Jędrzejewski-Szmek a52f67
 src/journal/systemd-journal-feeder.py | 83 +++++++++++++++++++++++++++++++++++
Zbigniew Jędrzejewski-Szmek a52f67
 2 files changed, 85 insertions(+), 2 deletions(-)
Zbigniew Jędrzejewski-Szmek a52f67
 create mode 100644 src/journal/systemd-journal-feeder.py
Zbigniew Jędrzejewski-Szmek a52f67
Zbigniew Jędrzejewski-Szmek a52f67
diff --git a/man/crypttab.xml b/man/crypttab.xml
Zbigniew Jędrzejewski-Szmek 1cc3df
index 5f386e55f8..4b6d12ef4f 100644
Zbigniew Jędrzejewski-Szmek a52f67
--- a/man/crypttab.xml
Zbigniew Jędrzejewski-Szmek a52f67
+++ b/man/crypttab.xml
Zbigniew Jędrzejewski-Szmek a52f67
@@ -171,7 +171,7 @@
Zbigniew Jędrzejewski-Szmek a52f67
                                 If the key slot does not match the given
Zbigniew Jędrzejewski-Szmek a52f67
                                 passphrase or key, but another would, the
Zbigniew Jędrzejewski-Szmek a52f67
                                 setup of the device will fail regardless.
Zbigniew Jędrzejewski-Szmek a52f67
-                                This implies <varname>luks</varname>. See
Zbigniew Jędrzejewski-Szmek a52f67
+                                This option implies <varname>luks</varname>. See
Zbigniew Jędrzejewski-Szmek a52f67
                                 <citerefentry><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
Zbigniew Jędrzejewski-Szmek a52f67
                                 for possible values. The default is to try
Zbigniew Jędrzejewski-Szmek a52f67
                                 all key slots in sequential order.</para></listitem>
Zbigniew Jędrzejewski-Szmek a52f67
@@ -275,7 +275,7 @@
Zbigniew Jędrzejewski-Szmek a52f67
                                 <term><varname>tcrypt-hidden</varname></term>
Zbigniew Jędrzejewski-Szmek a52f67
 
Zbigniew Jędrzejewski-Szmek a52f67
                                 <listitem><para>Use the hidden TrueCrypt volume.
Zbigniew Jędrzejewski-Szmek a52f67
-                                This implies <varname>tcrypt</varname>.</para>
Zbigniew Jędrzejewski-Szmek a52f67
+                                This option implies <varname>tcrypt</varname>.</para>
Zbigniew Jędrzejewski-Szmek a52f67
 
Zbigniew Jędrzejewski-Szmek a52f67
                                 <para>This will map the hidden volume that is
Zbigniew Jędrzejewski-Szmek a52f67
                                 inside of the volume provided in the second
Zbigniew Jędrzejewski-Szmek a52f67
diff --git a/src/journal/systemd-journal-feeder.py b/src/journal/systemd-journal-feeder.py
Zbigniew Jędrzejewski-Szmek a52f67
new file mode 100644
Zbigniew Jędrzejewski-Szmek 1cc3df
index 0000000000..5cfab82ea0
Zbigniew Jędrzejewski-Szmek a52f67
--- /dev/null
Zbigniew Jędrzejewski-Szmek a52f67
+++ b/src/journal/systemd-journal-feeder.py
Zbigniew Jędrzejewski-Szmek a52f67
@@ -0,0 +1,83 @@
Zbigniew Jędrzejewski-Szmek a52f67
+import argparse
Zbigniew Jędrzejewski-Szmek a52f67
+import subprocess
Zbigniew Jędrzejewski-Szmek a52f67
+import collections
Zbigniew Jędrzejewski-Szmek a52f67
+import struct
Zbigniew Jędrzejewski-Szmek a52f67
+from systemd import journal
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+options = argparse.ArgumentParser()
Zbigniew Jędrzejewski-Szmek a52f67
+options.add_argument('-H', '--host', default='localhost')
Zbigniew Jędrzejewski-Szmek a52f67
+options.add_argument('-p', '--port', default=19531)
Zbigniew Jędrzejewski-Szmek a52f67
+options.add_argument('-b', '--boot', default='no',
Zbigniew Jędrzejewski-Szmek a52f67
+                     action='store_const', const='yes')
Zbigniew Jędrzejewski-Szmek a52f67
+options.add_argument('-f', '--follow', default='no',
Zbigniew Jędrzejewski-Szmek a52f67
+                     action='store_const', const='yes')
Zbigniew Jędrzejewski-Szmek a52f67
+options.add_argument('-s', '--submit', action='store_true')
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+def spawn_curl(host, port, boot, follow):
Zbigniew Jędrzejewski-Szmek a52f67
+    "Spawn curl to get events from systemd-journal-gatewayd"
Zbigniew Jędrzejewski-Szmek a52f67
+    url = 'http://{host}:{port}/entries?follow={follow}&boot={boot}'.format(
Zbigniew Jędrzejewski-Szmek a52f67
+        host=host, port=port, follow=follow, boot=boot)
Zbigniew Jędrzejewski-Szmek a52f67
+    cmdline = ['curl', '-HAccept: application/vnd.fdo.journal',
Zbigniew Jędrzejewski-Szmek a52f67
+               '--silent', '--show-error',
Zbigniew Jędrzejewski-Szmek a52f67
+               url]
Zbigniew Jędrzejewski-Szmek a52f67
+    child = subprocess.Popen(cmdline,
Zbigniew Jędrzejewski-Szmek a52f67
+                             stdin=subprocess.DEVNULL,
Zbigniew Jędrzejewski-Szmek a52f67
+                             stdout=subprocess.PIPE)
Zbigniew Jędrzejewski-Szmek a52f67
+    return child
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+def _read_one(inp):
Zbigniew Jędrzejewski-Szmek a52f67
+    fields = collections.OrderedDict()
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+    while inp:
Zbigniew Jędrzejewski-Szmek a52f67
+        line = inp.readline()
Zbigniew Jędrzejewski-Szmek a52f67
+        line = line[:-1] # remove newline
Zbigniew Jędrzejewski-Szmek a52f67
+        if not line:
Zbigniew Jędrzejewski-Szmek a52f67
+            break
Zbigniew Jędrzejewski-Szmek a52f67
+        left, split, right = line.partition(b'=')
Zbigniew Jędrzejewski-Szmek a52f67
+        name = left.decode('ascii')
Zbigniew Jędrzejewski-Szmek a52f67
+        if split:
Zbigniew Jędrzejewski-Szmek a52f67
+            value = right.decode()
Zbigniew Jędrzejewski-Szmek a52f67
+        else:
Zbigniew Jędrzejewski-Szmek a52f67
+            flen_ = inp.read(8)
Zbigniew Jędrzejewski-Szmek a52f67
+            flen = struct.unpack('
Zbigniew Jędrzejewski-Szmek a52f67
+            value = inp.read(flen)
Zbigniew Jędrzejewski-Szmek a52f67
+            newline = inp.read(1)
Zbigniew Jędrzejewski-Szmek a52f67
+            assert newline == b'\n', newline
Zbigniew Jędrzejewski-Szmek a52f67
+            name = name[:-1]
Zbigniew Jędrzejewski-Szmek a52f67
+        fields[name] = value
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+    return fields
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+def split_stream(stream):
Zbigniew Jędrzejewski-Szmek a52f67
+    "Parse journal events from stream"
Zbigniew Jędrzejewski-Szmek a52f67
+    while stream:
Zbigniew Jędrzejewski-Szmek a52f67
+        fields = _read_one(stream)
Zbigniew Jędrzejewski-Szmek a52f67
+        yield fields
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+def cat_events(stream):
Zbigniew Jędrzejewski-Szmek a52f67
+    for event in split_stream(stream):
Zbigniew Jędrzejewski-Szmek a52f67
+        print('event MESSAGE=' + event.get('MESSAGE', '(no message)')
Zbigniew Jędrzejewski-Szmek a52f67
+              + ' ' + ','.join(event.keys()))
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+def push_events(stream):
Zbigniew Jędrzejewski-Szmek a52f67
+    i = 0
Zbigniew Jędrzejewski-Szmek a52f67
+    for event in split_stream(stream):
Zbigniew Jędrzejewski-Szmek a52f67
+        #print(event)
Zbigniew Jędrzejewski-Szmek a52f67
+        v = [key.encode('utf-8') + b'=' + val
Zbigniew Jędrzejewski-Szmek a52f67
+             if isinstance(val, bytes)
Zbigniew Jędrzejewski-Szmek a52f67
+             else key + '=' + val
Zbigniew Jędrzejewski-Szmek a52f67
+             for key,val in event.items()]
Zbigniew Jędrzejewski-Szmek a52f67
+        print('\n'.join(v))
Zbigniew Jędrzejewski-Szmek a52f67
+        journal.sendv(*v)
Zbigniew Jędrzejewski-Szmek a52f67
+        i += 1
Zbigniew Jędrzejewski-Szmek a52f67
+        if i == 1:
Zbigniew Jędrzejewski-Szmek a52f67
+                break
Zbigniew Jędrzejewski-Szmek a52f67
+
Zbigniew Jędrzejewski-Szmek a52f67
+if __name__ == '__main__':
Zbigniew Jędrzejewski-Szmek a52f67
+    args = options.parse_args()
Zbigniew Jędrzejewski-Szmek a52f67
+    curl = spawn_curl(args.host, args.port,
Zbigniew Jędrzejewski-Szmek a52f67
+                      args.boot, args.follow)
Zbigniew Jędrzejewski-Szmek a52f67
+    if args.submit:
Zbigniew Jędrzejewski-Szmek a52f67
+        push_events(curl.stdout)
Zbigniew Jędrzejewski-Szmek a52f67
+    else:
Zbigniew Jędrzejewski-Szmek a52f67
+        cat_events(curl.stdout)