def format_chronos_job_status(client, job, running_tasks, verbose=0): """Given a job, returns a pretty-printed human readable output regarding the status of the job. :param job: dictionary of the job status :param running_tasks: a list of Mesos tasks associated with ``job``, e.g. the result of ``mesos_tools.get_running_tasks_from_frameworks()``. :param verbose: int verbosity level """ job_name = _format_job_name(job) is_temporary = chronos_tools.is_temporary_job( job) if 'name' in job else 'UNKNOWN' job_name = modify_string_for_rerun_status(job_name, is_temporary) disabled_state = _format_disabled_status(job) service, instance = chronos_tools.decompose_job_id(job['name']) chronos_state = chronos_tools.get_chronos_status_for_job( client, service, instance) (last_result, formatted_time) = _format_last_result(job) job_type = chronos_tools.get_job_type(job) schedule_type = _get_schedule_field_for_job_type(job_type) schedule_formatter = get_schedule_formatter(job_type, verbose) schedule_value = schedule_formatter(job) command = _format_command(job) mesos_status = _format_mesos_status(running_tasks) if verbose > 0: tail_lines = calculate_tail_lines(verbose_level=verbose) mesos_status_verbose = status_mesos_tasks_verbose( job_id=job["name"], get_short_task_id=get_short_task_id, tail_lines=tail_lines, ) mesos_status = "%s\n%s" % (mesos_status, mesos_status_verbose) return ("Job: %(job_name)s\n" " Status: %(disabled_state)s (%(chronos_state)s)" " Last: %(last_result)s (%(formatted_time)s)\n" " %(schedule_type)s: %(schedule_value)s\n" " Command: %(command)s\n" " Mesos: %(mesos_status)s" % { "job_name": job_name, "is_temporary": is_temporary, "schedule_type": schedule_type, "chronos_state": PaastaColors.grey(chronos_state), "disabled_state": disabled_state, "last_result": last_result, "formatted_time": formatted_time, "schedule_value": schedule_value, "command": command, "mesos_status": mesos_status, })
def format_chronos_job_status(client, job, running_tasks, verbose=0): """Given a job, returns a pretty-printed human readable output regarding the status of the job. :param job: dictionary of the job status :param running_tasks: a list of Mesos tasks associated with ``job``, e.g. the result of ``mesos_tools.get_running_tasks_from_active_frameworks()``. :param verbose: int verbosity level """ job_name = _format_job_name(job) is_temporary = chronos_tools.is_temporary_job(job) if 'name' in job else 'UNKNOWN' job_name = modify_string_for_rerun_status(job_name, is_temporary) disabled_state = _format_disabled_status(job) service, instance = chronos_tools.decompose_job_id(job['name']) chronos_state = chronos_tools.get_chronos_status_for_job(client, service, instance) (last_result, formatted_time) = _format_last_result(job) job_type = chronos_tools.get_job_type(job) schedule_type = _get_schedule_field_for_job_type(job_type) schedule_formatter = get_schedule_formatter(job_type, verbose) schedule_value = schedule_formatter(job) command = _format_command(job) mesos_status = _format_mesos_status(job, running_tasks) if verbose > 0: tail_lines = calculate_tail_lines(verbose_level=verbose) mesos_status_verbose = status_mesos_tasks_verbose( job_id=job["name"], get_short_task_id=get_short_task_id, tail_lines=tail_lines, ) mesos_status = "%s\n%s" % (mesos_status, mesos_status_verbose) return ( "Job: %(job_name)s\n" " Status: %(disabled_state)s (%(chronos_state)s)" " Last: %(last_result)s (%(formatted_time)s)\n" " %(schedule_type)s: %(schedule_value)s\n" " Command: %(command)s\n" " Mesos: %(mesos_status)s" % { "job_name": job_name, "is_temporary": is_temporary, "schedule_type": schedule_type, "chronos_state": PaastaColors.grey(chronos_state), "disabled_state": disabled_state, "last_result": last_result, "formatted_time": formatted_time, "schedule_value": schedule_value, "command": command, "mesos_status": mesos_status, } )
def sensu_message_status_for_jobs(chronos_job_config, chronos_job, client): """ :param chronos_job_config: an instance of ChronosJobConfig :param client: configured Chronos client """ if not chronos_job: if chronos_job_config.get_disabled(): sensu_status = pysensu_yelp.Status.OK output = "Job {}{}{} is disabled - ignoring status.".format( chronos_job_config.service, utils.SPACER, chronos_job_config.instance) else: sensu_status = pysensu_yelp.Status.WARNING output = ("Warning: %s%s%s isn't in chronos at all, " "which means it may not be deployed yet" % ( chronos_job_config.service, utils.SPACER, chronos_job_config.instance, )) else: if chronos_job.get("disabled") and not chronos_tools.is_temporary_job( chronos_job): sensu_status = pysensu_yelp.Status.OK output = "Job {}{}{} is disabled - ignoring status.".format( chronos_job_config.service, utils.SPACER, chronos_job_config.instance) else: last_run_time, state = chronos_tools.get_status_last_run( chronos_job) interval_in_seconds = chronos_job_config.get_schedule_interval_in_seconds( ) if job_is_stuck(last_run_time, interval_in_seconds, client, chronos_job["name"]): sensu_status = pysensu_yelp.Status.CRITICAL output = message_for_stuck_job( service=chronos_job_config.service, instance=chronos_job_config.instance, cluster=chronos_job_config.cluster, last_run_iso_time=last_run_time, interval_in_seconds=interval_in_seconds, schedule=chronos_job_config.get_schedule(), schedule_timezone=chronos_job_config. get_schedule_time_zone(), ) else: sensu_status = sensu_event_for_last_run_state(state) output = message_for_status(sensu_status, chronos_job_config) return output, sensu_status
def sensu_message_status_for_jobs(chronos_job_config, service, instance, cluster, chronos_job): if not chronos_job: if chronos_job_config.get_disabled(): sensu_status = pysensu_yelp.Status.OK output = ("Job %s%s%s is disabled - ignoring status." % (service, utils.SPACER, instance)) else: sensu_status = pysensu_yelp.Status.WARNING output = ("Warning: %s%s%s isn't in chronos at all, " "which means it may not be deployed yet" % (service, utils.SPACER, instance)) else: if chronos_job.get('disabled') and not chronos_tools.is_temporary_job( chronos_job): sensu_status = pysensu_yelp.Status.OK output = "Job %s%s%s is disabled - ignoring status." % ( service, utils.SPACER, instance) else: last_run_time, state = chronos_tools.get_status_last_run( chronos_job) interval_in_seconds = chronos_job_config.get_schedule_interval_in_seconds( ) if job_is_stuck(last_run_time, interval_in_seconds): sensu_status = pysensu_yelp.Status.CRITICAL output = message_for_stuck_job( service=service, instance=instance, cluster=cluster, last_run_iso_time=last_run_time, interval_in_seconds=interval_in_seconds, schedule=chronos_job_config.get_schedule(), schedule_timezone=chronos_job_config. get_schedule_time_zone(), ) else: sensu_status = sensu_event_for_last_run_state(state) output = message_for_status(sensu_status, service, instance, cluster) return output, sensu_status