예제 #1
0
 def _begin_start(self, name, program, args):
     run_trace = tr.TraceWriter(
         tr.trace_fn(self.trace_dir, SCREEN_TEMPL % (name)))
     run_trace.trace(TYPE, RUN_TYPE)
     run_trace.trace(NAME, name)
     run_trace.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)
     run_trace.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 run_trace.filename()
예제 #2
0
 def stop(self, app_name):
     with sh.Rooted(ROOT_GO):
         if not sh.isdir(self.trace_dir):
             msg = "No trace directory found from which to stop %s" % (app_name)
             raise excp.StopException(msg)
         fn_name = FORK_TEMPL % (app_name)
         (pid_file, stderr_fn, stdout_fn) = self._form_file_names(fn_name)
         trace_fn = tr.trace_fn(self.trace_dir, fn_name)
         if sh.isfile(pid_file) and sh.isfile(trace_fn):
             pid = int(sh.load_file(pid_file).strip())
             (killed, attempts) = self._stop_pid(pid)
             # Trash the files if it worked
             if killed:
                 LOG.debug("Killed pid %s after %s attempts" % (pid, attempts))
                 LOG.debug("Removing pid file %s" % (pid_file))
                 sh.unlink(pid_file)
                 LOG.debug("Removing stderr file %s" % (stderr_fn))
                 sh.unlink(stderr_fn)
                 LOG.debug("Removing stdout file %s" % (stdout_fn))
                 sh.unlink(stdout_fn)
                 LOG.debug("Removing %s trace file %s" % (app_name, trace_fn))
                 sh.unlink(trace_fn)
             else:
                 msg = "Could not stop %s after %s attempts" % (app_name, attempts)
                 raise excp.StopException(msg)
         else:
             msg = "No pid or trace file could be found to stop %s in directory %s" % (app_name, self.trace_dir)
             raise excp.StopException(msg)
예제 #3
0
 def stop(self, name, *args, **kargs):
     with sh.Rooted(kargs.get("run_as_root", True)):
         trace_dir = kargs.get("trace_dir")
         if not trace_dir or not sh.isdir(trace_dir):
             msg = "No trace directory found from which to stop %s" % (name)
             raise excp.StopException(msg)
         fn_name = FORK_TEMPL % (name)
         (pid_file, stderr_fn, stdout_fn) = self._form_file_names(trace_dir, fn_name)
         trace_fn = tr.trace_fn(trace_dir, fn_name)
         if sh.isfile(pid_file) and sh.isfile(trace_fn):
             pid = int(sh.load_file(pid_file).strip())
             (killed, attempts) = self._stop_pid(pid)
             #trash the files
             if killed:
                 LOG.debug("Killed pid %s after %s attempts" % (pid, attempts))
                 LOG.debug("Removing pid file %s" % (pid_file))
                 sh.unlink(pid_file)
                 LOG.debug("Removing stderr file %s" % (stderr_fn))
                 sh.unlink(stderr_fn)
                 LOG.debug("Removing stdout file %s" % (stdout_fn))
                 sh.unlink(stdout_fn)
                 LOG.debug("Removing %s trace file %s" % (name, trace_fn))
                 sh.unlink(trace_fn)
             else:
                 msg = "Could not stop %s after %s attempts" % (name, attempts)
                 raise excp.StopException(msg)
         else:
             msg = "No pid or trace file could be found to stop %s in directory %s" % (name, trace_dir)
             raise excp.StopException(msg)
예제 #4
0
 def stop(self, app_name):
     fn_name = UPSTART_TEMPL % (app_name)
     trace_fn = tr.trace_fn(self.trace_dir, fn_name)
     # Emit the start, keep track and only do one per component name
     component_event = self.component_name + STOP_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)
     sh.unlink(trace_fn)
예제 #5
0
 def stop(self, app_name):
     fn_name = UPSTART_TEMPL % (app_name)
     trace_fn = tr.trace_fn(self.trace_dir, fn_name)
     # Emit the start, keep track and only do one per component name
     component_event = self.component_name + STOP_EVENT_SUFFIX
     if component_event in self.events:
         LOG.debug("Already emitted event: %s" % (component_event))
     else:
         LOG.debug("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)
     sh.unlink(trace_fn)
예제 #6
0
 def _start(self, app_name, program, program_args):
     run_trace = tr.TraceWriter(tr.trace_fn(self.trace_dir, UPSTART_TEMPL % (app_name)))
     run_trace.trace(TYPE, RUN_TYPE)
     run_trace.trace(NAME, app_name)
     run_trace.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.debug("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 run_trace.filename()
예제 #7
0
 def _start(self, app_name, program, program_args):
     run_trace = tr.TraceWriter(
         tr.trace_fn(self.trace_dir, UPSTART_TEMPL % (app_name)))
     run_trace.trace(TYPE, RUN_TYPE)
     run_trace.trace(NAME, app_name)
     run_trace.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.debug("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 run_trace.filename()
예제 #8
0
 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.app_dir
             self.tracewriter.dirs_made(*sh.mkdirslist(working_dir))
             self.tracewriter.py_installed(name, working_dir)
             (stdout, stderr) = sh.execute(*PY_INSTALL, cwd=working_dir, run_as_root=True)
             py_trace_name = "%s-%s" % (tr.PY_TRACE, name)
             py_writer = tr.TraceWriter(tr.trace_fn(self.trace_dir, py_trace_name))
             # Format or json encoding isn't really needed here since this is
             # more just for information output/lookup if desired.
             py_writer.trace("CMD", " ".join(PY_INSTALL))
             py_writer.trace("STDOUT", stdout)
             py_writer.trace("STDERR", stderr)
             self.tracewriter.file_touched(py_writer.filename())
예제 #9
0
 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
             #ensure working dir is there
             self.tracewriter.dirs_made(*sh.mkdirslist(working_dir))
             #do this before write just incase it craps out half way through
             self.tracewriter.py_installed(name, working_dir)
             #now actually do it
             (stdout, stderr) = sh.execute(*PY_INSTALL, cwd=working_dir, run_as_root=True)
             py_trace_name = "%s-%s" % (tr.PY_TRACE, name)
             py_writer = tr.TraceWriter(tr.trace_fn(self.tracedir, py_trace_name))
             py_writer.trace("CMD", " ".join(PY_INSTALL))
             py_writer.trace("STDOUT", stdout)
             py_writer.trace("STDERR", stderr)
             self.tracewriter.file_touched(py_writer.filename())
예제 #10
0
 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.app_dir
             self.tracewriter.dirs_made(*sh.mkdirslist(working_dir))
             self.tracewriter.py_installed(name, working_dir)
             (stdout, stderr) = sh.execute(*PY_INSTALL,
                                           cwd=working_dir,
                                           run_as_root=True)
             py_trace_name = "%s-%s" % (tr.PY_TRACE, name)
             py_writer = tr.TraceWriter(
                 tr.trace_fn(self.trace_dir, py_trace_name))
             # Format or json encoding isn't really needed here since this is
             # more just for information output/lookup if desired.
             py_writer.trace("CMD", " ".join(PY_INSTALL))
             py_writer.trace("STDOUT", stdout)
             py_writer.trace("STDERR", stderr)
             self.tracewriter.file_touched(py_writer.filename())
예제 #11
0
 def _begin_start(self, name, program, args):
     run_trace = tr.TraceWriter(tr.trace_fn(self.trace_dir, SCREEN_TEMPL % (name)))
     run_trace.trace(TYPE, RUN_TYPE)
     run_trace.trace(NAME, name)
     run_trace.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)
     run_trace.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 run_trace.filename()
예제 #12
0
 def is_started(self):
     return tr.TraceReader(tr.trace_fn(self.trace_dir, tr.START_TRACE)).exists()
예제 #13
0
 def stop(self, app_name):
     trace_fn = tr.trace_fn(self.trace_dir, SCREEN_TEMPL % (app_name))
     session_id = self._find_session(app_name, trace_fn)
     self._do_stop(app_name, session_id)
     sh.unlink(trace_fn)
예제 #14
0
 def __init__(self, *args, **kargs):
     ComponentBase.__init__(self, *args, **kargs)
     self.tracewriter = tr.TraceWriter(tr.trace_fn(self.trace_dir, tr.IN_TRACE))
     self.packages = kargs.get("packages", list())
예제 #15
0
 def __init__(self, *args, **kargs):
     ComponentBase.__init__(self, *args, **kargs)
     self.tracereader = tr.TraceReader(
         tr.trace_fn(self.trace_dir, tr.IN_TRACE))
예제 #16
0
 def __init__(self, *args, **kargs):
     ComponentBase.__init__(self, *args, **kargs)
     self.tracewriter = tr.TraceWriter(
         tr.trace_fn(self.trace_dir, tr.IN_TRACE))
     self.packages = kargs.get('packages', list())
예제 #17
0
 def stop(self, app_name):
     trace_fn = tr.trace_fn(self.trace_dir, SCREEN_TEMPL % (app_name))
     session_id = self._find_session(app_name, trace_fn)
     self._do_stop(app_name, session_id)
     sh.unlink(trace_fn)
예제 #18
0
 def __init__(self, *args, **kargs):
     ComponentBase.__init__(self, *args, **kargs)
     PackageBasedComponentMixin.__init__(self)
     self.tracereader = tr.TraceReader(tr.trace_fn(self.trace_dir,
                                                   tr.IN_TRACE))
     self.keep_old = kargs.get('keep_old')
예제 #19
0
 def is_installed(self):
     return tr.TraceReader(tr.trace_fn(self.trace_dir, tr.IN_TRACE)).exists()
예제 #20
0
 def _do_trace(self, fn, kvs):
     run_trace = tr.TraceWriter(tr.trace_fn(self.trace_dir, fn))
     for (k, v) in kvs.items():
         run_trace.trace(k, v)
     return run_trace.filename()
예제 #21
0
 def __init__(self, component_name, *args, **kargs):
     ComponentBase.__init__(self, component_name, *args, **kargs)
     self.tracewriter = tr.TraceWriter(tr.trace_fn(self.tracedir, tr.IN_TRACE))
예제 #22
0
 def __init__(self, component_name, *args, **kargs):
     ComponentBase.__init__(self, component_name, *args, **kargs)
     self.tracereader = tr.TraceReader(tr.trace_fn(self.tracedir, tr.IN_TRACE))
     self.keep_old = kargs.get("keep_old")
예제 #23
0
 def __init__(self, *args, **kargs):
     ComponentBase.__init__(self, *args, **kargs)
     PackageBasedComponentMixin.__init__(self)
     self.tracewriter = tr.TraceWriter(tr.trace_fn(self.trace_dir,
                                                   tr.IN_TRACE))
     self.packages = kargs.get('packages', list())
예제 #24
0
 def is_started(self):
     return tr.TraceReader(tr.trace_fn(self.trace_dir,
                                       tr.START_TRACE)).exists()
예제 #25
0
 def __init__(self, *args, **kargs):
     ComponentBase.__init__(self, *args, **kargs)
     self.tracereader = tr.TraceReader(tr.trace_fn(self.trace_dir, tr.IN_TRACE))
예제 #26
0
 def is_installed(self):
     return tr.TraceReader(tr.trace_fn(self.trace_dir,
                                       tr.IN_TRACE)).exists()