| Current File : /home/jvzmxxx/wiki1/extensions/EventLogging/server/bin/eventlogging-forwarder |
#!/usr/bin/env python -OO
# -*- coding: utf-8 -*-
"""
eventlogging-forwarder
----------------------
Arbitrary input -> ZeroMQ socket forwarding. Reads line-oriented input from
an input stream and writes it to a ZeroMQ TCP PUB socket bound to the same
port number.
usage: eventlogging-forwarder [-h] input output [output ...]
positional arguments:
input input uri
Examples:
udp://localhost:8599
kafka://?brokers=broker1:9092,broker2:9092&topic=foo&group_id=bar
output URIs of output streams
optional arguments:
-h, --help show this help message and exit
:copyright: (c) 2012 by Ori Livneh <ori@wikimedia.org>
:license: GNU General Public Licence 2.0 or later
"""
from __future__ import unicode_literals
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import argparse
import logging
from eventlogging import setup_logging, get_reader, get_writer, uri_force_raw
ap = argparse.ArgumentParser(description='UDP => Writers Device',
fromfile_prefix_chars='@')
# Forward raw events. This keeps the reader
# attempting to parse the input as json.
ap.add_argument('input', help='URI of raw input stream', type=uri_force_raw)
ap.add_argument('output', nargs='+', help='URIs if outputs (multicast)',
type=uri_force_raw)
ap.add_argument('--count', action='store_true',
help='Prepend an autoincrementing ID to each message')
args = ap.parse_args()
setup_logging()
input_stream = get_reader(args.input)
writers_list = []
for output_uri in args.output:
writers_list.append(get_writer(output_uri))
logging.info('Forwarding %s => %s...', args.input, output_uri)
if args.count:
input_stream = (
'{0}\t{1}'.format(str(id), msg) for id, msg in enumerate(input_stream)
)
for line in input_stream:
for writer in writers_list:
writer.send(line)