Пример #1
0
static int handle_worker_check(wproc_result *wpres, struct wproc_worker *wp, struct wproc_job *job)
{
	int result = ERROR;
	check_result *cr = (check_result *)job->arg;

	memcpy(&cr->rusage, &wpres->rusage, sizeof(wpres->rusage));
	cr->start_time.tv_sec = wpres->start.tv_sec;
	cr->start_time.tv_usec = wpres->start.tv_usec;
	cr->finish_time.tv_sec = wpres->stop.tv_sec;
	cr->finish_time.tv_usec = wpres->stop.tv_usec;
	if (WIFEXITED(wpres->wait_status)) {
		cr->return_code = WEXITSTATUS(wpres->wait_status);
	} else {
		cr->return_code = STATE_UNKNOWN;
	}

	if (wpres->outstd && *wpres->outstd) {
		cr->output = strdup(wpres->outstd);
	} else if (wpres->outerr) {
		asprintf(&cr->output, "(No output on stdout) stderr: %s", wpres->outerr);
	} else {
		cr->output = NULL;
	}

	cr->early_timeout = wpres->early_timeout;
	cr->exited_ok = wpres->exited_ok;
	cr->engine = NULL;
	cr->source = wp->name;

	process_check_result(cr);
	free_check_result(cr);

	return result;
}
Пример #2
0
static int handle_worker_check(wproc_result *wpres, worker_process *wp, worker_job *job)
{
	int result = ERROR;
	check_result *cr = (check_result *)job->arg;

	memcpy(&cr->rusage, &wpres->rusage, sizeof(wpres->rusage));
	cr->start_time.tv_sec = wpres->start.tv_sec;
	cr->start_time.tv_usec = wpres->start.tv_usec;
	cr->finish_time.tv_sec = wpres->stop.tv_sec;
	cr->finish_time.tv_usec = wpres->stop.tv_usec;
	if (WIFEXITED(wpres->wait_status)) {
		cr->return_code = WEXITSTATUS(wpres->wait_status);
	} else {
		cr->return_code = STATE_UNKNOWN;
	}

	if (wpres->outstd) {
		cr->output = strdup(wpres->outstd);
	} else if (wpres->outerr) {
		asprintf(&cr->output, "(No output on stdout) stderr: %s", wpres->outerr);
	} else {
		cr->output = NULL;
	}

	cr->early_timeout = wpres->early_timeout;
	cr->exited_ok = wpres->exited_ok;

	if (cr->service_description) {
		service *svc = find_service(cr->host_name, cr->service_description);
		if (svc)
			result = handle_async_service_check_result(svc, cr);
		else
			logit(NSLOG_RUNTIME_WARNING, TRUE, "Worker: Failed to locate service '%s' on host '%s'. Result from job %d (%s) will be dropped.\n",
				  cr->service_description, cr->host_name, job->id, job->command);
	} else {
		host *hst = find_host(cr->host_name);
		if (hst)
			result = handle_async_host_check_result_3x(hst, cr);
		else
			logit(NSLOG_RUNTIME_WARNING, TRUE, "Worker: Failed to locate host '%s'. Result from job %d (%s) will be dropped.\n",
				  cr->host_name, job->id, job->command);
	}
	free_check_result(cr);

	return result;
}
Пример #3
0
/* insert results list into core */
static void move_results_to_core() {
    /* safely save off currently local list */
    pthread_mutex_lock(&mod_gm_result_list_mutex);

    objectlist *tmp_list = NULL;
    for (mod_gm_result_list; mod_gm_result_list; mod_gm_result_list = mod_gm_result_list->next) {
        free(tmp_list);
        process_check_result(mod_gm_result_list->object_ptr);
        free_check_result(mod_gm_result_list->object_ptr);
        free(mod_gm_result_list->object_ptr);
        tmp_list = mod_gm_result_list;
    }
    mod_gm_result_list = 0;
    free(tmp_list);

    pthread_mutex_unlock(&mod_gm_result_list_mutex);
}
Пример #4
0
static void destroy_job(worker_process *wp, worker_job *job)
{
	wproc_object_job *oj;

	if (!job)
		return;

	oj = (wproc_object_job *)job->arg;

	switch (job->type) {
	case WPJOB_CHECK:
		free_check_result(job->arg);
		free(job->arg);
		break;
	case WPJOB_NOTIFY:
		free(oj->contact_name);
		/* fallthrough */
	case WPJOB_OCSP:
	case WPJOB_OCHP:
		free(oj->host_name);
		if (oj->service_description) {
			free(oj->service_description);
		}
		free(job->arg);
		break;

	case WPJOB_GLOBAL_SVC_EVTHANDLER:
	case WPJOB_SVC_EVTHANDLER:
	case WPJOB_GLOBAL_HOST_EVTHANDLER:
	case WPJOB_HOST_EVTHANDLER:
		/* these require nothing special */
		break;
	default:
		logit(NSLOG_RUNTIME_WARNING, TRUE, "Workers: Unknown job type: %d\n", job->type);
		break;
	}

	my_free(job->command);

	wp->jobs[job->id % wp->max_jobs] = NULL;
	wp->jobs_running--;

	free(job);
}
Пример #5
0
static void destroy_job(struct wproc_job *job)
{
	if (!job)
		return;

	switch (job->type) {
	case WPJOB_CHECK:
		free_check_result(job->arg);
		free(job->arg);
		break;
	case WPJOB_NOTIFY:
	case WPJOB_OCSP:
	case WPJOB_OCHP:
		free(job->arg);
		break;

	case WPJOB_GLOBAL_SVC_EVTHANDLER:
	case WPJOB_SVC_EVTHANDLER:
	case WPJOB_GLOBAL_HOST_EVTHANDLER:
	case WPJOB_HOST_EVTHANDLER:
	case WPJOB_HOST_PERFDATA:
	case WPJOB_SVC_PERFDATA:
		/* these require nothing special */
		break;
	case WPJOB_CALLBACK:
		/* call with NULL result to make callback clean things up */
		run_job_callback(job, NULL, 0);
		break;
	default:
		logit(NSLOG_RUNTIME_WARNING, TRUE, "wproc: Unknown job type: %d\n", job->type);
		break;
	}

	my_free(job->command);
	if (job->wp) {
		fanout_remove(job->wp->jobs, job->id);
		job->wp->jobs_running--;
	}
	loadctl.jobs_running--;

	free(job);
}
Пример #6
0
/**
 * Main function for command-line check utility
 */
int main(int argc, char *argv[])
{
  /** Checking functions to call */
  check_func checks[] = {
    check_tables,
    check_header,
    check_keywords,
    check_visrefmap,
    check_unique_targets,
    check_targets_present,
    check_arrname,
    check_elements_present,
    check_corr_present,
    check_flagging,
    check_t3amp,
    check_waveorder,
    check_time,
    check_flux,
    NULL
  };
  oi_fits oi;
  oi_check_result result;
  oi_breach_level worst;
  char filename[FLEN_FILENAME];
  int status, i;

  /* Parse command-line */
  if (argc != 2) {
    printf("Usage:\n%s FILE\n", argv[0]);
    exit(2); /* standard unix behaviour */
  }
  (void)g_strlcpy(filename, argv[1], FLEN_FILENAME);

  /* Read FITS file */
  status = 0;
  read_oi_fits(filename, &oi, &status);
  if (status) goto except;

  /* Display summary info */
  print_oi_fits_summary(&oi);

  /* Run checks */
  worst = OI_BREACH_NONE;
  i = 0;
  while (checks[i] != NULL) {
    if ((*checks[i++])(&oi, &result) != OI_BREACH_NONE) {
      print_check_result(&result);
      if (result.level > worst) worst = result.level;
    }
    free_check_result(&result);
  }

  if (worst == OI_BREACH_NONE)
    printf("All checks passed\n");

  free_oi_fits(&oi);
  exit(EXIT_SUCCESS);

except:
  exit(EXIT_FAILURE);
}