#!/usr/bin/python import urllib import sys import logging import traceback import simplejson import re import time import subprocess import optparse import os import datetime import textwrap import signal import random from urllib2 import HTTPError 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://app.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, site=options.site) def print_zephyr(notice): print notice.cls, notice.instance, notice.sender, notice.message.split('\0')[1] 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=False, 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=False, 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!" print messages 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!" print messages failed = True if failed: print "original keys:", zhkey1, zhkey2, hzkey1, hzkey2 sys.exit(1) print "Success!" sys.exit(0)