diff --git a/check-mirroring b/check-mirroring
new file mode 100755
index 00000000..600be4d4
--- /dev/null
+++ b/check-mirroring
@@ -0,0 +1,144 @@
+#!/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)