def test_process_printer_receives_started_with_pid(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb') proc.pid = 345 proc.stdout = FakeOutput(attached_process=proc) pm.loop() self.assertEqual("started with pid 345\n", proc.printer.data[0])
def test_processmanager_returncode_set_by_exiting_process(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb') proc.stdout = FakeOutput(attached_process=proc) proc.returncode = 123 pm.loop() self.assertEqual(123, pm.returncode)
def test_process_printer_doesnt_print_quiet_processes(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb', quiet=True) proc.stdout = FakeOutput(attached_process=proc) proc.stdout.lines = [b'hello\n', b'world\n'] pm.loop() self.assertNotIn("hello\n", proc.printer.data) self.assertNotIn("world\n", proc.printer.data)
def test_process_printer_appends_missing_newlines(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb') proc.stdout = FakeOutput(attached_process=proc) proc.stdout.lines = [b'hello', b'world'] pm.loop() self.assertIn("hello\n", proc.printer.data) self.assertIn("world\n", proc.printer.data)
def test_process_printer_receives_output_lines(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb') proc.pid = 345 proc.stdout = FakeOutput(attached_process=proc) proc.stdout.lines = [b'hello\n', b'world\n'] pm.loop() self.assertIn("hello\n", proc.printer.data) self.assertIn("world\n", proc.printer.data)
def test_process_printer_handles_bad_utf8(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb') proc.stdout = FakeOutput(attached_process=proc) proc.stdout.lines = [b'hello\n', b'\xfe\xff', b'world\n'] pm.loop() self.assertIn("hello\n", proc.printer.data) self.assertIn("world\n", proc.printer.data) self.assertIn( "UnicodeDecodeError while decoding line from process foo\n", pm.system_printer.data)
def test_processmanager_terminate_terminates_processes(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb') proc.stdout = FakeBlockingOutput() def _terminate(manager): manager.terminate(kill_fallback=False) t = Thread(target=_terminate, args=(pm,)) t.start() pm.loop() t.join() self.assertTrue(proc._terminated)
def test_add_processes(self, process_mock): pm = ProcessManager() pm.add_process('foo', 'ruby server.rb') pm.add_process('bar', 'python worker.py') expected = [call('ruby server.rb', name='foo'), call('python worker.py', name='bar')] assert_equal(process_mock.mock_calls, expected)
def test_process_stdout_is_closed(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb') proc.stdout = FakeOutput(attached_process=proc) pm.loop() self.assertTrue(proc.stdout.closed)
def test_process_printer_receives_process_terminated(self): pm = ProcessManager(process=FakeProcess, printer=FakePrinter) proc = pm.add_process('foo', 'ruby server.rb') proc.stdout = FakeOutput(attached_process=proc) pm.loop() self.assertEqual("process terminated\n", proc.printer.data[1])
def test_add_process_creates_process(self): pm = ProcessManager(process=FakeProcess) proc = pm.add_process('foo', 'ruby server.rb') self.assertEqual('foo', proc.name) self.assertEqual('ruby server.rb', proc.command) self.assertFalse(proc.quiet)
import logging import os import sys import time import pika from honcho.process import Process, ProcessManager logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO) log = logging.getLogger(__name__) process_manager = ProcessManager() def blocking_queue(): """Create up a queue connection and returns a generator of blocking reads. """ params = pika.ConnectionParameters( host=os.environ.get("RABBITMQ_HOST"), port=int(os.environ.get("RABBITMQ_PORT")), virtual_host=os.environ.get("RABBITMQ_VHOST"), credentials=pika.credentials.PlainCredentials( os.environ.get("RABBITMQ_USER"), os.environ.get("RABBITMQ_PASS"))) queue = os.environ.get("CAP_SHOVE_QUEUE", "default") channel = pika.BlockingConnection(params).channel() while (True): _, _, body = channel.basic_get(queue=queue, no_ack=True) if not body: print "Nothing yet, having a quick nap." time.sleep(5) continue