added abort_job
authorAleš Křenek <ljocha@ics.muni.cz>
Fri, 7 Jan 2005 12:53:21 +0000 (12:53 +0000)
committerAleš Křenek <ljocha@ics.muni.cz>
Fri, 7 Jan 2005 12:53:21 +0000 (12:53 +0000)
org.glite.lb.client/Makefile
org.glite.lb.client/examples/abort_job.c [new file with mode: 0644]

index 3fde357..ce9241f 100644 (file)
@@ -135,7 +135,7 @@ PLUSLIB:=libglite_lb_clientpp_${nothrflavour}.la
 THRPLUSLIB:=libglite_lb_clientpp_${thrflavour}.la
 
 TOOLS:=dump load purge
-EXAMPLES:=log_usertag_proxy job_log job_reg feed_shark notify query_ext query_seq_code stats
+EXAMPLES:=log_usertag_proxy job_log job_reg feed_shark notify query_ext query_seq_code stats abort_job
 FAKE_EXAMPLES:=job_log_fake
 
 version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :`
diff --git a/org.glite.lb.client/examples/abort_job.c b/org.glite.lb.client/examples/abort_job.c
new file mode 100644 (file)
index 0000000..2a72d79
--- /dev/null
@@ -0,0 +1,114 @@
+#ident "$Header$"
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "glite/lb/events_parse.h"
+#include "glite/lb/consumer.h"
+#include "glite/wmsutils/jobid/cjobid.h"
+
+static void free_events(edg_wll_Event *);
+
+static void help(const char* n)
+{
+    fprintf(stderr,"usage: %s <jobid> <source>\n", n);
+    exit(1);
+}
+
+int main(int argc,char **argv)
+{
+       edg_wll_Context ctx;
+       char            *errt,*errd,*e;
+       edg_wll_Event   *events;
+       int             i;
+       edg_wll_QueryRec        jq[2],eq[2];
+       edg_wlc_JobId   job;
+       edg_wll_Source  src;
+
+       if (argc != 3) help(argv[0]);
+
+       edg_wll_InitContext(&ctx);
+
+       if (edg_wlc_JobIdParse(argv[1],&job)) {
+               fprintf(stderr,"%s: can't parse job ID\n",argv[1]);
+               return 1;
+       }
+
+       if (( src = edg_wll_StringToSource(argv[2])) == EDG_WLL_SOURCE_NONE) {
+               fprintf(stderr,"%s: unknown event source\n",argv[2]);
+               return 1;
+       }
+
+       jq[0].attr = EDG_WLL_QUERY_ATTR_JOBID;
+       jq[0].op = EDG_WLL_QUERY_OP_EQUAL;
+       jq[0].value.j = job;
+       jq[1].attr = EDG_WLL_QUERY_ATTR_UNDEF;
+
+       eq[0].attr = EDG_WLL_QUERY_ATTR_SOURCE;
+       eq[0].op = EDG_WLL_QUERY_OP_EQUAL;
+       eq[0].value.i = src;
+       eq[1].attr = EDG_WLL_QUERY_ATTR_UNDEF;
+
+       if ( edg_wll_QueryEvents(ctx,jq,eq,&events) )
+       {
+               if ( edg_wll_Error(ctx, &errt, &errd) != E2BIG )
+                       goto err;
+
+               fprintf(stderr,"%s: %s (%s)\n",argv[0],errt,errd);
+       }
+
+       for ( i = 0; events[i].type != EDG_WLL_EVENT_UNDEF; i++ );
+
+       e = edg_wll_UnparseEvent(ctx,events+i-1);
+
+       fputs(e,stdout);
+       fputs("\n",stdout);
+
+       if (edg_wll_SetParam(ctx,EDG_WLL_PARAM_SOURCE,src) || 
+               edg_wll_SetLoggingJob(ctx,job,events[i-1].any.seqcode,EDG_WLL_SEQ_NORMAL) ||
+               edg_wll_IncSequenceCode(ctx) || /* necessary to simulate this
+                                               * call in last event logging 
+                                               * _after_ current seq. was used */
+               edg_wll_LogAbort(ctx,"manual abort")) goto err;
+
+
+       free(e);
+       free_events(events);
+
+       edg_wll_FreeContext(ctx); 
+
+       return 0;
+
+err:
+       switch (edg_wll_Error(ctx,&errt,&errd)) {
+               case 0: break;
+               case ENOENT:
+                       puts("No events found");
+                       break;
+               default:
+                       fprintf(stderr,"%s: %s (%s)\n",argv[0],errt,errd);
+                       return 1;
+       }
+
+       edg_wll_FreeContext(ctx); 
+
+       return 0;
+}
+
+static void free_events(edg_wll_Event *events)
+{
+       int     i;
+
+       if (events) {
+               for (i=0; events[i].type != EDG_WLL_EVENT_UNDEF; i++) edg_wll_FreeEvent(&(events[i]));
+               edg_wll_FreeEvent(&(events[i])); /* free last line */
+               free(events);   
+               events = NULL;
+       }
+}