static int ngislSSHjobPBSqueryStatus( ngisSSHjob_t *job) { ngisCallback_t callback; int index; ngisExecutable_t *exe; ngisLog_t *log; int result; static const char fName[] = "ngislSSHjobPBSqueryStatus"; NGIS_ASSERT(job != NULL); log = job->ngsj_log; while (job->ngsj_iExecutables < job->ngsj_nExecutables) { index = job->ngsj_iExecutables; exe = &job->ngsj_executables[index]; ngisDebugPrint(log, fName, "Executable[%d] is %d\n", index, exe->nge_status); if (exe->nge_status <= NGIS_EXECUTABLE_STATUS_ACTIVE) { /* Check Status */ job->ngsj_nextReadCallback = ngislSSHjobPBSqueryStatusReadCallback; callback = ngisCallbackWriteFormat( job->ngsj_stdio.ngsio_in, ngisSSHjobWriteStringCallback, job, "%s -f %s | %s 'job_state';%s dummy\n", job->ngsj_attributes->ngsja_sshStatusCommand, exe->nge_identifier, NGIS_GREP_COMMAND, NGIS_ECHO_COMMAND); if (!ngisCallbackIsValid(callback)) { ngisErrorPrint(log, fName, "Can't register function for sending" " query status command string.\n"); return 0; } break; } job->ngsj_iExecutables++; } if (!(job->ngsj_iExecutables < job->ngsj_nExecutables)) { ngisDebugPrint(log, fName, "Status checking has finished.\n"); job->ngsj_iExecutables = 0; result = ngisSSHjobFinishQuery(job); if (result == 0) { ngisErrorPrint(log, fName, "Can't finish to query the job status.\n"); return 0; } } return 1; }
/** * SSH job: Query status */ static int ngislSSHjobQueryStatus( ngisSSHjob_t *job) { int index; ngisExecutable_t *exe; ngisCallback_t callback; ngisLog_t *log = NULL; int result; static const char fName[] = "ngislSSHjobQueryStatus"; NGIS_ASSERT(job != NULL); NGIS_ASSERT(job->ngsj_attributes != NULL); log = job->ngsj_log; ngisDebugPrint(log, fName, "Index is %d/%d\n", job->ngsj_iExecutables, job->ngsj_nExecutables); while (job->ngsj_iExecutables < job->ngsj_nExecutables) { index = job->ngsj_iExecutables; exe = &job->ngsj_executables[index]; ngisDebugPrint(log, fName, "Executable[%d] is %s\n", index, ngislExecutableStatusString[exe->nge_status]); if (exe->nge_status == NGIS_EXECUTABLE_STATUS_ACTIVE) { /* Check Status */ job->ngsj_nextReadCallback = ngislSSHjobQueryStatusReadCallback; callback = ngisCallbackWriteFormat( job->ngsj_stdio.ngsio_in, ngisSSHjobWriteStringCallback, job, "%s %s 2> %s && %s %s || %s %s\n", NGIS_QUERY_COMMAND, exe->nge_identifier, NGIS_DEV_NULL, NGIS_ECHO_COMMAND, NGIS_SSH_JOB_NONE, NGIS_ECHO_COMMAND, NGIS_SSH_JOB_EXIT); if (!ngisCallbackIsValid(callback)) { ngisErrorPrint(log, fName, "Can't write command invoking a executable.\n"); } break; } job->ngsj_iExecutables++; } if (!(job->ngsj_iExecutables < job->ngsj_nExecutables)) { ngisDebugPrint(log, fName, "Status checking has finished.\n"); result = ngisSSHjobFinishQuery(job); if (result == 0) { ngisErrorPrint(log, fName, "Can't finish to query the job status.\n"); return 0; } } return 1; }