#!/usr/bin/python import sys import time import optparse import os import random root_path = "/mit/tabbott/for_friends" sys.path.append(root_path + "/python-zephyr") sys.path.append(root_path + "/python-zephyr/build/lib.linux-x86_64-2.6/") parser = optparse.OptionParser() parser.add_option('--verbose', dest='verbose', default=False, action='store_true') parser.add_option('--site', dest='site', default="https://humbughq.com", action='store') (options, args) = parser.parse_args() mit_user = 'tabbott/extra@ATHENA.MIT.EDU' humbug_user = 'tabbott/extra@mit.edu' zhkey1 = random.getrandbits(32) hzkey1 = random.getrandbits(32) zhkey2 = random.getrandbits(32) hzkey2 = random.getrandbits(32) sys.path.append(".") sys.path.append(os.path.dirname(os.path.dirname(__file__))) import api.common humbug_client = api.common.HumbugAPI(email=humbug_user, api_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", verbose=True, client="test: Humbug API", site=options.site) def print_zephyr(notice): print notice.cls, notice.instance, notice.sender, notice.message.split('\0')[1] def print_humbug(message): if message['type'] == "stream": print message["type"], message['display_recipient'], message['subject'], \ message['sender_email'], message['content'] else: print message["type"], message['sender_email'], \ message['display_recipient'], message['content'] child_pid = os.fork() if child_pid == 0: # Run the humbug => zephyr mirror in the child time.sleep(3) humbug_client.send_message({ "type": "personal", "content": str(hzkey1), "recipient": humbug_user, }); time.sleep(0.2) humbug_client.send_message({ "type": "stream", "subject": "test", "content": str(hzkey2), "stream": "tabbott-nagios-test", }); print "Sent Humbug messages!" time.sleep(0.5) import zephyr zephyr.init() zsig = "Timothy Good Abbott" zeph = zephyr.ZNotice(sender=mit_user, auth=True, recipient=mit_user, cls="message", instance="personal") zeph.setmessage("%s\0%s" % (zsig, zhkey1)) zeph.send() time.sleep(0.2) zeph = zephyr.ZNotice(sender=mit_user, auth=True, cls="tabbott-nagios-test", instance="test") zeph.setmessage("%s\0%s" % (zsig, zhkey2)) zeph.send() print "Sent Zephyr messages!" else: failed = False import zephyr zephyr.init() subs = zephyr.Subscriptions() subs.add(('message', 'personal', 'tabbott/extra@ATHENA.MIT.EDU')) subs.add(('tabbott-nagios-test', '*', '*')) res = humbug_client.get_messages({'server_generation': '0', 'first': '0', 'last': '1000000000000',}) max_message_id = res['max_message_id'] time.sleep(10) print "Receiving messages!" notices = [] while True: notice = zephyr.receive(block=False) if notice is None: break if notice.opcode != "": continue notices.append(notice) if len(notices) != 4: print "humbug=>zephyr: Got wrong number of messages back!" failed = True elif (notices[0].message.split('\0')[1] != str(hzkey1) or notices[1].message.split('\0')[1] != str(hzkey2) or notices[2].message.split('\0')[1] != str(zhkey1) or notices[3].message.split('\0')[1] != str(zhkey2)): print "humbug=>zephyr: Didn't get back right values!" failed = True if failed: for notice in notices: print_zephyr(notice) messages = humbug_client.get_messages({'first': '0', 'last': str(max_message_id), 'server_generation': '0'})['messages'] if len(messages) != 4: print "zephyr=>humbug: Didn't get exactly 4 messages!" for message in messages: print_humbug(message) failed = True elif (messages[0]['content'] != str(hzkey1) or messages[1]['content'] != str(hzkey2) or messages[2]['content'] != str(zhkey1) or messages[3]['content'] != str(zhkey2)): print "zephyr=>humbug: Didn't get back right values!" for message in messages: print_humbug(message) failed = True if failed: print "original keys:", zhkey1, zhkey2, hzkey1, hzkey2 sys.exit(1) print "Success!" sys.exit(0)