forked from fedora-infra/fedmsg
-
Notifications
You must be signed in to change notification settings - Fork 1
/
logger.py
75 lines (61 loc) · 1.92 KB
/
logger.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import sys
import fedmsg
import fedmsg.json
from fedmsg.commands import command
def _log_message(kw, message):
msg = {'log': message}
if kw['json_input']:
msg = fedmsg.json.loads(message)
fedmsg.send_message(
topic=kw['topic'],
msg=msg,
modname=kw['modname'],
)
extra_args = [
(['--message'], {
'dest': 'message',
'help': "The message to send.",
}),
(['--json-input'], {
'dest': 'json_input',
'action': 'store_true',
'default': False,
'help': "Take each line of input as JSON.",
}),
(['--topic'], {
'dest': 'topic',
'metavar': "TOPIC",
'default': "log",
'help': "Think org.fedoraproject.logger.TOPIC",
}),
(['--modname'], {
'dest': 'modname',
'metavar': "MODNAME",
'default': "logger",
'help': "More control over the topic. Think org.fp.MODNAME.TOPIC.",
}),
]
@command(extra_args=extra_args)
def logger(**kwargs):
"""
Emit log messages to the FI bus.
If the fedmsg-relay service is not running at the address specified in
fedmsg-config.py, then this command will *hang* until that service becomes
available.
If --message is not specified, this command accepts messages from stdin.
Some examples::
$ echo '{"a": 1}' | fedmsg-logger --json-input
$ echo "Hai there." | fedmsg-logger --modname=git --topic=repo.update
$ fedmsg-logger --message="This is a message."
$ fedmsg-logger --message='{"a": 1}' --json-input
"""
kwargs['active'] = True
kwargs['endpoints']['relay_inbound'] = kwargs['relay_inbound']
fedmsg.init(name='relay_inbound', **kwargs)
if kwargs.get('message', None):
_log_message(kwargs, kwargs['message'])
else:
line = sys.stdin.readline()
while line:
_log_message(kwargs, line.strip())
line = sys.stdin.readline()