def _begin_start(self, name, program, args):
     fn_name = SCREEN_TEMPL % (name)
     tracefn = tr.touch_trace(self.trace_dir, fn_name)
     runtrace = tr.Trace(tracefn)
     runtrace.trace(TYPE, RUN_TYPE)
     runtrace.trace(NAME, name)
     runtrace.trace(ARGS, json.dumps(args))
     full_cmd = [program] + list(args)
     session_name = self._get_session()
     inited_screen = False
     if session_name is None:
         inited_screen = True
         self._do_screen_init()
         session_name = self._get_session()
         if session_name is None:
             msg = "After initializing screen with session named [%s], no screen session with that name was found!" % (SESSION_NAME)
             raise excp.StartException(msg)
     runtrace.trace(SESSION_ID, session_name)
     if inited_screen or not sh.isfile(SCREEN_RC):
         rc_gen = ScreenRcGenerator(self)
         rc_contents = rc_gen.create(session_name, self._get_env())
         out_fn = sh.abspth(SCREEN_RC)
         LOG.info("Writing your created screen rc file to [%s]" % (out_fn))
         sh.write_file(out_fn, rc_contents)
     self._do_start(session_name, name, full_cmd)
     return tracefn
 def _install_python_setups(self):
     pydirs = self._get_python_directories()
     if pydirs:
         LOG.info("Setting up %s python directories (%s)" % (len(pydirs), pydirs))
         for (name, wkdir) in pydirs.items():
             working_dir = wkdir or self.appdir
             self.tracewriter.make_dir(working_dir)
             record_fn = tr.touch_trace(self.tracedir, self._format_trace_name(name))
             #do this before write just incase it craps out half way through
             self.tracewriter.file_touched(record_fn)
             self.tracewriter.py_install(name, record_fn, working_dir)
             #now actually do it
             (stdout, stderr) = sh.execute(*PY_INSTALL, cwd=working_dir, run_as_root=True)
             sh.write_file(record_fn, self._format_stderr_out(stderr, stdout))
 def start(self, name, program, *args, **kargs):
     tracedir = kargs.get("trace_dir")
     appdir = kargs.get("app_dir")
     fn_name = FORK_TEMPL % (name)
     (pidfile, stderrfn, stdoutfn) = self._form_file_names(tracedir, fn_name)
     tracefn = tr.touch_trace(tracedir, fn_name)
     runtrace = tr.Trace(tracefn)
     runtrace.trace(TYPE, RUN_TYPE)
     runtrace.trace(PID_FN, pidfile)
     runtrace.trace(STDERR_FN, stderrfn)
     runtrace.trace(STDOUT_FN, stdoutfn)
     runtrace.trace(ARGS, json.dumps(args))
     LOG.info("Forking [%s] by running command [%s]" % (name, program))
     self._fork_start(program, appdir, pidfile, stdoutfn, stderrfn, *args)
     return tracefn
 def _start(self, app_name, program, program_args):
     fn_name = UPSTART_TEMPL % (app_name)
     tracefn = tr.touch_trace(self.trace_dir, fn_name)
     runtrace = tr.Trace(tracefn)
     runtrace.trace(TYPE, RUN_TYPE)
     runtrace.trace(NAME, app_name)
     runtrace.trace(ARGS, json.dumps(program_args))
     # Emit the start, keep track and only do one per component name
     component_event = self.component_name + START_EVENT_SUFFIX
     if component_event in self.events:
         LOG.debug("Already emitted event: %s" % (component_event))
     else:
         LOG.info("About to emit event: %s" % (component_event))
         cmd = EMIT_BASE_CMD + [component_event]
         sh.execute(*cmd, run_as_root=True)
         self.events.add(component_event)
     return tracefn
 def _install_python_setups(self):
     #setup any python directories
     pydirs = self._get_python_directories()
     if pydirs:
         actual_dirs = list()
         for pydir_info in pydirs:
             working_dir = pydir_info.get('work_dir', self.appdir)
             actual_dirs.append(working_dir)
         LOG.info("Setting up %s python directories (%s)" % (len(pydirs), ", ".join(actual_dirs)))
         self.tracewriter.make_dir(self.tracedir)
         for pydir_info in pydirs:
             name = pydir_info.get("name")
             if not name:
                 #TODO should we raise an exception here?
                 continue
             working_dir = pydir_info.get('work_dir', self.appdir)
             record_fn = tr.touch_trace(self.tracedir, self._format_trace_name(name))
             self.tracewriter.file_touched(record_fn)
             (stdout, stderr) = sh.execute(*PY_INSTALL, cwd=working_dir, run_as_root=True)
             sh.write_file(record_fn, self._format_stderr_out(stderr, stdout))
             self.tracewriter.py_install(name, record_fn, working_dir)
 def _do_trace(self, fn, kvs):
     tracefn = tr.touch_trace(self.trace_dir, fn)
     runtrace = tr.Trace(tracefn)
     for (k, v) in kvs.items():
         runtrace.trace(k, v)
     return tracefn