def __init__(self, *args, **kwargs): Runner.__init__(self, *args, **kwargs) self.host_selector = HostSelector(self.event_handler, self.popen) self.suite_run_cleaner = SuiteRunCleaner( event_handler=self.event_handler, host_selector=self.host_selector, suite_engine_proc=self.suite_engine_proc)
def __init__(self, *args, **kwargs): self.exposed = True self.props = {} rose_conf = ResourceLocator.default().get_conf() self.props["title"] = rose_conf.get_value(["rosie-disco", "title"], self.TITLE) self.props["host_name"] = rose_conf.get_value(["rosie-disco", "host"]) if self.props["host_name"] is None: self.props["host_name"] = HostSelector().get_local_host() if self.props["host_name"] and "." in self.props["host_name"]: self.props["host_name"] = (self.props["host_name"].split( ".", 1)[0]) self.props["rose_version"] = ResourceLocator.default().get_version() self.props["template_env"] = jinja2.Environment( loader=jinja2.FileSystemLoader(ResourceLocator.default( ).get_util_home("lib", "html", "template", "rosie-disco"))) db_url_map = {} for key, node in rose_conf.get(["rosie-db"]).value.items(): if key.startswith("db.") and key[3:]: db_url_map[key[3:]] = node.value self.db_url_map = db_url_map if not self.db_url_map: self.db_url_map = {} for key, db_url in self.db_url_map.items(): setattr(self, key, RosieDiscoService(self.props, key, db_url))
def __init__(self, event_handler=None): self.event_handler = event_handler self.popen = RosePopener(self.event_handler) self.fs_util = FileSystemUtil(self.event_handler) self.config_pm = ConfigProcessorsManager(self.event_handler, self.popen, self.fs_util) self.host_selector = HostSelector(self.event_handler, self.popen) self.suite_engine_proc = SuiteEngineProcessor.get_processor( event_handler=self.event_handler, popen=self.popen, fs_util=self.fs_util)
def __init__(self, event_handler=None, host_selector=None, suite_engine_proc=None): if event_handler is None: event_handler = Reporter() self.event_handler = event_handler if host_selector is None: host_selector = HostSelector(event_handler=event_handler) self.host_selector = host_selector if suite_engine_proc is None: suite_engine_proc = SuiteEngineProcessor.get_processor( event_handler=event_handler) self.suite_engine_proc = suite_engine_proc
def __init__(self, event_handler=None, popen=None, fs_util=None, host_selector=None, **kwargs): self.event_handler = event_handler if popen is None: popen = RosePopener(event_handler) self.popen = popen if fs_util is None: fs_util = FileSystemUtil(event_handler) self.fs_util = fs_util if host_selector is None: host_selector = HostSelector(event_handler, popen) self.host_selector = host_selector self.date_time_oper = RoseDateTimeOperator()
def __init__(self, event_handler=None, popen=None, suite_engine_proc=None, host_selector=None): self.event_handler = event_handler if popen is None: popen = RosePopener(event_handler) self.popen = popen if suite_engine_proc is None: suite_engine_proc = SuiteEngineProcessor.get_processor( event_handler=event_handler, popen=popen) self.suite_engine_proc = suite_engine_proc if host_selector is None: host_selector = HostSelector(event_handler, popen) self.host_selector = host_selector
def __init__(self, opts, reporter=None, popen=None, fs_util=None): self.opts = opts if reporter is None: self.reporter = Reporter(opts.verbosity - opts.quietness) else: self.reporter = reporter if popen is None: self.popen = RosePopener(event_handler=self.reporter) else: self.popen = popen if fs_util is None: self.fs_util = FileSystemUtil(event_handler=self.reporter) else: self.fs_util = fs_util self.host_selector = HostSelector(event_handler=self.reporter, popen=self.popen)
def __init__(self, *args, **kwargs): self.exposed = True self.suite_engine_proc = SuiteEngineProcessor.get_processor() rose_conf = ResourceLocator.default().get_conf() self.logo = rose_conf.get_value(["rose-bush", "logo"]) self.title = rose_conf.get_value(["rose-bush", "title"], self.TITLE) self.host_name = rose_conf.get_value(["rose-bush", "host"]) if self.host_name is None: self.host_name = HostSelector().get_local_host() if self.host_name and "." in self.host_name: self.host_name = self.host_name.split(".", 1)[0] self.rose_version = ResourceLocator.default().get_version() template_env = jinja2.Environment(loader=jinja2.FileSystemLoader( ResourceLocator.default().get_util_home( "lib", "html", "template", "rose-bush"))) self.template_env = template_env
def __init__(self, *args, **kwargs): self.exposed = True self.bush_dao = RoseBushDAO() rose_conf = ResourceLocator.default().get_conf() self.logo = rose_conf.get_value(["rose-bush", "logo"]) self.title = rose_conf.get_value(["rose-bush", "title"], self.TITLE) self.host_name = rose_conf.get_value(["rose-bush", "host"]) if self.host_name is None: self.host_name = HostSelector().get_local_host() if self.host_name and "." in self.host_name: self.host_name = self.host_name.split(".", 1)[0] self.rose_version = ResourceLocator.default().get_version() template_env = jinja2.Environment( loader=jinja2.FileSystemLoader(ResourceLocator.default( ).get_util_home("lib", "html", "template", "rose-bush"))) template_env.filters['urlise'] = self.url2hyperlink self.template_env = template_env
def __init__(self, *args, **kwargs): self.exposed = True self.suite_engine_proc = SuiteEngineProcessor.get_processor() rose_conf = ResourceLocator.default().get_conf() self.logo = rose_conf.get_value(["rose-bush", "logo"]) self.title = rose_conf.get_value(["rose-bush", "title"], self.TITLE) self.host_name = rose_conf.get_value(["rose-bush", "host"]) if self.host_name is None: self.host_name = HostSelector().get_local_host() if self.host_name and "." in self.host_name: self.host_name = self.host_name.split(".", 1)[0] self.rose_version = ResourceLocator.default().get_version() template_env = jinja2.Environment( loader=jinja2.FileSystemLoader(ResourceLocator.default( ).get_util_home("lib", "html", "template", "rose-bush"))) def urlise(text): pattern = '((https?):\/\/[^\s\(\)&\[\]\{\}]+)' replacement = '<a href="\g<1>">\g<1></a>' text = re.sub(pattern, replacement, text) return text template_env.filters['urlise'] = urlise self.template_env = template_env
def run(self, app_runner, conf_tree, opts, args, uuid, work_files): """Suite housekeeping application. This application is designed to work under "rose task-run" in a cycling suite. """ suite_name = os.getenv("ROSE_SUITE_NAME") if not suite_name: return # Tar-gzip job logs on suite host # Prune job logs on remote hosts and suite host prune_remote_logs_cycles = self._get_conf(app_runner, conf_tree, "prune-remote-logs-at") prune_server_logs_cycles = self._get_conf(app_runner, conf_tree, "prune-server-logs-at") archive_logs_cycles = self._get_conf(app_runner, conf_tree, "archive-logs-at") if (prune_remote_logs_cycles or prune_server_logs_cycles or archive_logs_cycles): tmp_prune_remote_logs_cycles = [] for cycle in prune_remote_logs_cycles: if cycle not in archive_logs_cycles: tmp_prune_remote_logs_cycles.append(cycle) prune_remote_logs_cycles = tmp_prune_remote_logs_cycles tmp_prune_server_logs_cycles = [] for cycle in prune_server_logs_cycles: if cycle not in archive_logs_cycles: tmp_prune_server_logs_cycles.append(cycle) prune_server_logs_cycles = tmp_prune_server_logs_cycles if prune_remote_logs_cycles: app_runner.suite_engine_proc.job_logs_pull_remote( suite_name, prune_remote_logs_cycles, prune_remote_mode=True) if prune_server_logs_cycles: app_runner.suite_engine_proc.job_logs_remove_on_server( suite_name, prune_server_logs_cycles) if archive_logs_cycles: app_runner.suite_engine_proc.job_logs_archive( suite_name, archive_logs_cycles) # Prune other directories globs, cycle_set = self._get_prune_globs(app_runner, conf_tree) if not globs: return suite_engine_proc = app_runner.suite_engine_proc hosts = suite_engine_proc.get_suite_jobs_auths( suite_name, [(cycle, None) for cycle in cycle_set]) # A shuffle here should allow the load for doing "rm -rf" to be shared # between job hosts who share a file system. shuffle(hosts) suite_dir_rel = suite_engine_proc.get_suite_dir_rel(suite_name) form_dict = {"d": suite_dir_rel, "g": " ".join(globs)} sh_cmd_head = r"set -e; cd %(d)s; " % form_dict sh_cmd = (r"set +e; ls -d %(g)s; " + r"set -e; rm -fr %(g)s") % form_dict cwd = os.getcwd() host_selector = HostSelector(app_runner.event_handler, app_runner.popen) for host in hosts + [host_selector.get_local_host()]: sdir = None try: if host_selector.is_local_host(host): sdir = suite_engine_proc.get_suite_dir(suite_name) app_runner.fs_util.chdir(sdir) out = app_runner.popen.run_ok("bash", "-O", "extglob", "-c", sh_cmd)[0] else: cmd = app_runner.popen.get_cmd( "ssh", host, "bash -O extglob -c '" + sh_cmd_head + sh_cmd + "'") out = app_runner.popen.run_ok(*cmd)[0] except RosePopenError as exc: app_runner.handle_event(exc) else: if sdir is None: event = FileSystemEvent(FileSystemEvent.CHDIR, host + ":" + suite_dir_rel) app_runner.handle_event(event) for line in sorted(out.splitlines()): if not host_selector.is_local_host(host): line = host + ":" + line event = FileSystemEvent(FileSystemEvent.DELETE, line) app_runner.handle_event(event) finally: if sdir: app_runner.fs_util.chdir(cwd) return