|
| 1 | +#!/usr/bin/python |
| 2 | +import yaml |
| 3 | +import argparse |
| 4 | +from kafka import KafkaConsumer |
| 5 | +import imp |
| 6 | +import json |
| 7 | +import sys |
| 8 | + |
| 9 | +parser = argparse.ArgumentParser(description='Process cache relay commands from Kafka') |
| 10 | +parser.add_argument('--config', required=True, help='YAML configuration file') |
| 11 | +script_args = parser.parse_args() |
| 12 | + |
| 13 | +config_file = open(script_args.config) |
| 14 | +config = yaml.safe_load(config_file) |
| 15 | + |
| 16 | +if 'listeners' not in config: |
| 17 | + raise Exception('listeners config required') |
| 18 | + |
| 19 | +topics = [] |
| 20 | +handlers = {} |
| 21 | +for listener in config['listeners']: |
| 22 | + topics.append(listener['topic']) |
| 23 | + fp, pathname, description = imp.find_module(listener['handler'], ['handlers']) |
| 24 | + mod = imp.load_module(listener['handler'], fp, pathname, description) |
| 25 | + klass = getattr(mod, listener['handler']) |
| 26 | + handlers[listener['topic']] = klass(**listener['params']) |
| 27 | + |
| 28 | +consumer = KafkaConsumer(*topics) |
| 29 | +for msg in consumer: |
| 30 | + if msg.topic not in handlers: |
| 31 | + print("Weird, unknown topic %s" % msg.topic) |
| 32 | + continue |
| 33 | + try: |
| 34 | + data = json.loads(msg.value) |
| 35 | + except ValueError: |
| 36 | + data = None |
| 37 | + if not data: |
| 38 | + print("Could not parse data, meh") |
| 39 | + continue |
| 40 | +# try: |
| 41 | + handlers[msg.topic].handle(msg.topic, data) |
| 42 | +# except: |
| 43 | +# e = sys.exc_info() |
| 44 | +# print("Oops, something happened: " + str(e)) |
0 commit comments