def run_commands(name, **kwargs): from tsuru.stream import Stream config = load_config(**kwargs) watcher = kwargs.get("watcher") parts = name.split(":") cmds = config.get("hooks", {}) for part in parts: cmds = cmds.get(part, {}) if cmds: Stream(watcher_name=watcher.name)({ "data": " ---> Running {}".format(name) }) for command in cmds: try: commands = ["/bin/bash", "-c"] cmd = "source /home/application/apprc && {}" commands.append(cmd.format(command)) result = subprocess.check_output(commands, stderr=subprocess.STDOUT, cwd=watcher.working_dir, preexec_fn=set_uid(watcher)) Stream(watcher_name=watcher.name)({"data": result}) except subprocess.CalledProcessError as e: Stream(watcher_name=watcher.name)({"data": str(e)}) Stream(watcher_name=watcher.name)({"data": e.output}) return True
def test_should_slience_errors_when_envs_does_not_exist(lenvs, self): lenvs.return_value = {} try: stream = Stream() stream(self.data) except Exception as e: msg = "Should not fail when envs does not exist. " \ "Exception: {}".format(e) self.fail(msg)
def setUp(self, gethostname): gethostname.return_value = "myhost" l_out = '2012-11-06 17:13:55 [12019] [INFO] Starting gunicorn 0.15.0\n' l_err = '2012-11-06 17:13:55 [12019] [ERROR] Error starting gunicorn\n' self.data = {} self.data['stderr'] = {'pid': 12018, 'data': l_err, 'name': 'stderr'} self.data['stdout'] = {'pid': 12018, 'data': l_out, 'name': 'stdout'} self.stream = Stream(watcher_name='mywatcher') self.stream.apprc = os.path.join(os.path.dirname(__file__), "testdata/apprc")
def test_timeout_is_configurable(self, post, gethostname): post.return_value = mock.Mock(status_code=200) gethostname.return_value = "myhost" stream = Stream(watcher_name="watcher", timeout=10) stream.apprc = os.path.join(os.path.dirname(__file__), "testdata/apprc") stream(self.data['stdout']) (appname, host, token, syslog_server, syslog_port, syslog_facility, syslog_socket) = self.stream.load_envs() url = "{0}/apps/{1}/log?source=watcher&unit=myhost".format( host, appname) expected_msg = "Starting gunicorn 0.15.0\n" expected_data = json.dumps([expected_msg]) post.assert_called_with(url, data=expected_data, headers={"Authorization": "bearer " + token}, timeout=10)
def setUp(self): l = '2012-11-06 17:13:55 [12019] [INFO] Starting gunicorn 0.15.0\n' self.data = {'pid': 12018, 'data': l, 'name': 'stderr'} self.stream = Stream(watcher_name='mywatcher') self.stream.apprc = os.path.join(os.path.dirname(__file__), "testdata/apprc")