/*
 * get_status.c
 *
 *  Created on: 2 juil. 2015
 *      Author: cresson
 */
#include "drmaa.h"
#include <stdlib.h>     /* exit, EXIT_FAILURE */

int main (int argc, char **argv) {
if (argc<2)
{
 printf ("One argument is missing (Job ID)\n");
return EXIT_FAILURE;
}

const char * jobid = argv[1];
   char error[DRMAA_ERROR_STRING_BUFFER];
   int errnum = 0;
   int status = 0;
   
   errnum = drmaa_init (NULL, error, DRMAA_ERROR_STRING_BUFFER);

   if (errnum != DRMAA_ERRNO_SUCCESS) {
      fprintf (stderr, "Could not initialize the DRMAA library: %s\n", error);
      return EXIT_FAILURE;
   }

            errnum = drmaa_job_ps (jobid, &status, error,
                                   DRMAA_ERROR_STRING_BUFFER);

            if (errnum != DRMAA_ERRNO_SUCCESS) {
               fprintf (stderr, "Could not get job' status: %s\n", error);
               return EXIT_FAILURE;
            }
            else {
               switch (status) {
                  case DRMAA_PS_UNDETERMINED:
                     printf ("Job status cannot be determined\n");
                     break;
                  case DRMAA_PS_QUEUED_ACTIVE:
                     printf ("Job is queued and active\n");
                     break;
                  case DRMAA_PS_SYSTEM_ON_HOLD:
                     printf ("Job is queued and in system hold\n");
                     break;
                  case DRMAA_PS_USER_ON_HOLD:
                     printf ("Job is queued and in user hold\n");
                     break;
                  case DRMAA_PS_USER_SYSTEM_ON_HOLD:
                     printf ("Job is queued and in user and system hold\n");
                     break;
                  case DRMAA_PS_RUNNING:
                     printf ("Job is running\n");
                     break;
                  case DRMAA_PS_SYSTEM_SUSPENDED:
                     printf ("Job is system suspended\n");
                     break;
                  case DRMAA_PS_USER_SUSPENDED:
                     printf ("Job is user suspended\n");
                     break;
                  case DRMAA_PS_USER_SYSTEM_SUSPENDED:
                     printf ("Job is user and system suspended\n");
                     break;
                  case DRMAA_PS_DONE:
                     printf ("Job finished normally\n");
                     break;
                  case DRMAA_PS_FAILED:
                     printf ("Job finished, but failed\n");
                     break;
               } /* switch */
            } /* else */

  
   errnum = drmaa_exit (error, DRMAA_ERROR_STRING_BUFFER);

   if (errnum != DRMAA_ERRNO_SUCCESS) {
      fprintf (stderr, "Could not shut down the DRMAA library: %s\n", error);
      return EXIT_FAILURE;
   }

   return EXIT_SUCCESS;
}

