--- /dev/null
+#include <stdio.h>
+#include <malloc.h>
+#include <unistd.h>
+
+#include "glite/lbu/trio.h"
+
+#include "glite/jp/types.h"
+#include "glite/jp/context.h"
+#include "glite/jp/file_plugin.h"
+#include "glite/jp/attr.h"
+#include "glite/lb/job_attrs.h"
+
+/*
+ * free the array of JP attr
+ */
+static void free_attrs(glite_jp_attrval_t *av) {
+ glite_jp_attrval_t *item;
+
+ item = av;
+ while (item->name) {
+ glite_jp_attrval_free(item++, 0);
+ }
+ free(av);
+}
+
+/*
+ * process attributes
+ */
+void process_attrs(glite_jp_context_t jpctx, glite_jpps_fplug_data_t plugin_data, void *data_handle, FILE *outfile) {
+
+ glite_jp_attrval_t *attrval;
+
+ /* <header> */
+ trio_fprintf(outfile,"<?xml version=\"1.0\"?>\n\n");
+ trio_fprintf(outfile,"<lbd:jobRecord\n");
+ trio_fprintf(outfile,"xmlns:lbd=\"http://glite.org/wsdl/types/lbdump\"\n");
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_jobId, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"jobid=\"%|Xs\"\n", attrval->value);
+ free_attrs(attrval);
+ } else {
+ trio_fprintf(outfile,"jobid=\"default\"\n");
+ }
+ trio_fprintf(outfile,">\n");
+ /* </header> */
+
+ /* <body> */
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_user, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<user>%|Xs</user>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_parent, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<parent>%|Xs</parent>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_VO, &attrval);
+ if (attrval) {
+ trio_fprintf(stdout,"<VO>%|Xs</VO>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_aTag, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<aTag>%|Xs</aTag>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_rQType, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<rQType>%|Xs</rQType>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_eDuration, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<eDuration>%|Xs</eDuration>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_eNodes, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<eNodes>%|Xs</eNodes>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_eProc, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<eProc>%|Xs</eProc>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_RB, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<RB>%|Xs</RB>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_CE, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<CE>%|Xs</CE>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_host, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<host>%|Xs</host>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_UIHost, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<UIHost>%|Xs</UIHost>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_CPUTime, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<CPUTime>%|Xs</CPUTime>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_NProc, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<NProc>%|Xs</NProc>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_finalStatus, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<finalStatus>%|Xs</finalStatus>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_finalDoneStatus, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<finalDoneStatus>%|Xs</finalDoneStatus>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_finalStatusDate, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<finalStatusDate>%|Xs</finalStatusDate>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_finalStatusReason, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<finalStatusReason>%|Xs</finalStatusReason>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_LRMSDoneStatus, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<LRMSDoneStatus>%|Xs</LRMSDoneStatus>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_LRMSStatusReason, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<LRMSStatusReason>%|Xs</LRMSStatusReason>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_retryCount, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<retryCount>%|Xs</retryCount>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_additionalReason, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<additionalReason>%|Xs</additionalReason>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_jobType, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<jobType>%|Xs</jobType>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_nsubjobs, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<nsubjobs>%|Xs</nsubjobs>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_subjobs, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<subjobs>%|Xs</subjobs>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_lastStatusHistory, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<lastStatusHistory>%s</lastStatusHistory>\n",attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_fullStatusHistory, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<fullStatusHistory>%s</fullStatusHistory>\n",attrval->value);
+ free_attrs(attrval);
+ }
+
+ plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_JDL, &attrval);
+ if (attrval) {
+ trio_fprintf(outfile,"<JDL>%|Xs</JDL>\n", attrval->value);
+ free_attrs(attrval);
+ }
+
+ /* </body> */
+
+ trio_fprintf(outfile,"</lbd:jobRecord>\n\n");
+}
typedef int init_f(glite_jp_context_t ctx, glite_jpps_fplug_data_t *data);
typedef void done_f(glite_jp_context_t ctx, glite_jpps_fplug_data_t *data);
+void process_attrs(glite_jp_context_t jpctx, glite_jpps_fplug_data_t plugin_data, void *data_handle, FILE *outfile);
+void process_attrs2(glite_jp_context_t jpctx, glite_jpps_fplug_data_t plugin_data, void *data_handle, FILE *outfile);
+
static const char rcsid[] = "@(#)$Id$";
static int verbose = 0;
static char *infilename = NULL;
static char *outfilename = NULL;
-static int jdl = 0;
+static int versionone = 0;
static struct option const long_options[] = {
{ "file", required_argument, 0, 'f' },
{ "outfile", required_argument, 0, 'o' },
- { "jdl", no_argument, 0, 'j' },
+ { "versionone", no_argument, 0, '1' },
{ "help", no_argument, 0, 'h' },
{ "verbose", no_argument, 0, 'v' },
{ "version", no_argument, 0, 'V' },
"-v, --verbose print extensive debug output to stderr\n"
"-f, --file <file> dump file to process\n"
"-o, --outfile <file> output filename\n"
- "-j, --jdl prit also JDL in the XML\n\n",
+ "-1, --versionone use version 1 of the attributes (obsolete now)\n\n",
program_name);
}
}
/*
- * free the array of JP attr
- */
-static void free_attrs(glite_jp_attrval_t *av) {
- glite_jp_attrval_t *item;
-
- item = av;
- while (item->name) {
- glite_jp_attrval_free(item++, 0);
- }
- free(av);
-}
-
-/*
* main
*/
int main(int argc, char *argv[])
glite_jpps_fplug_data_t plugin_data;
void *data_handle, *lib_handle;
FILE *infile,*outfile = NULL;
- glite_jp_attrval_t *attrval;
char *err;
init_f *plugin_init;
done_f *plugin_done;
while ((opt = getopt_long(argc,argv,
"f:" /* input file */
"o:" /* output file */
- "j" /* jdl */
+ "1" /* version one of the attributes */
"h" /* help */
"v" /* verbose */
"V", /* version */
case 'v': verbose = 1; break;
case 'f': infilename = optarg; break;
case 'o': outfilename = optarg; break;
- case 'j': jdl = 1; break;
+ case '1': versionone = 1; break;
case 'h':
default:
usage(argv[0]); return(0);
err = dlerror() ? :"unknown error";
fprintf(stderr,"lb_statistics: can't load L&B plugin (%s)\n", err);
return 1;
- }
+ } else if (verbose) fprintf(stdout,"lb_statistics: loaded L&B plugin\n");
+
if ((plugin_init = dlsym(lib_handle, "init")) == NULL ||
(plugin_done = dlsym(lib_handle, "done")) == NULL) {
err = dlerror() ? : "unknown error";
fprintf(stderr,"lb_statistics: can't find symbol 'init' or 'done' (%s)\n", err);
dlclose(lib_handle);
return 1;
- }
+ } else if (verbose) fprintf(stdout,"lb_statistics: L&B plugin check o.k.\n");
/* dump file with events */
if ((infile = fopen(infilename, "rt")) == NULL) {
fprintf(stderr,"lb_statistics: Error opening file %s: %s\n", infilename, strerror(errno));
dlclose(lib_handle);
return 1;
- }
+ } else if (verbose) fprintf(stdout,"lb_statistics: opened input file %s\n", infilename);
/* output filename */
if (outfilename) {
fprintf(stderr,"lb_statistics: Error opening file %s: %s\n", outfilename, strerror(errno));
dlclose(lib_handle);
fclose(infile);
- }
+ } else if (verbose) fprintf(stdout,"lb_statistics: opened output file %s\n", outfilename);
} else {
outfile = stdout;
+ if (verbose) fprintf(stdout,"lb_statistics: output will go to stdout\n");
}
- jpctx = calloc(1,sizeof *jpctx);
/* use the plugin */
+ jpctx = calloc(1,sizeof *jpctx);
plugin_init(jpctx, &plugin_data);
jpctx->plugins = calloc(2,sizeof(*jpctx->plugins));
plugin_data.ops.open(jpctx, infile, "uri://", &data_handle);
if (data_handle) {
- /* <header> */
- fprintf(outfile,"<?xml version=\"1.0\"?>\n\n");
- fprintf(outfile,"<lbd:jobRecord\n");
- fprintf(outfile,"\txmlns:lbd=\"http://glite.org/wsdl/types/lbdump\"\n");
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_jobId, &attrval);
- if (attrval) {
- fprintf(outfile,"\tjobid=\"%s\"\n", attrval->value);
- free_attrs(attrval);
- } else {
- fprintf(outfile,"\tjobid=\"default\"\n");
- }
- fprintf(outfile,">\n");
- /* </header> */
-
- /* <body> */
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_user, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<user>%s</user>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_parent, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<parent>%s</parent>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_VO, &attrval);
- if (attrval) {
- fprintf(stdout,"\t<VO>%s</VO>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_aTag, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<aTag>%s</aTag>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_rQType, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<rQType>%s</rQType>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_eDuration, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<eDuration>%s</eDuration>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_eNodes, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<eNodes>%s</eNodes>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_eProc, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<eProc>%s</eProc>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_RB, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<RB>%s</RB>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_CE, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<CE>%s</CE>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_host, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<host>%s</host>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_UIHost, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<UIHost>%s</UIHost>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_CPUTime, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<CPUTime>%s</CPUTime>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_NProc, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<NProc>%s</NProc>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_finalStatus, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<finalStatus>%s</finalStatus>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_finalDoneStatus, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<finalDoneStatus>%s</finalDoneStatus>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_finalStatusDate, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<finalStatusDate>%s</finalStatusDate>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_finalStatusReason, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<finalStatusReason>%s</finalStatusReason>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_LRMSDoneStatus, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<LRMSDoneStatus>%s</LRMSDoneStatus>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_LRMSStatusReason, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<LRMSStatusReason>%s</LRMSStatusReason>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_retryCount, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<retryCount>%s</retryCount>\n", attrval->value);
- free_attrs(attrval);
- }
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_additionalReason, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<additionalReason>%s</additionalReason>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_jobType, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<jobType>%s</jobType>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_nsubjobs, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<nsubjobs>%s</nsubjobs>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_subjobs, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<subjobs>\n%s\t</subjobs>\n", attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_lastStatusHistory, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<lastStatusHistory>\n%s\t</lastStatusHistory>\n",attrval->value);
- free_attrs(attrval);
- }
-
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_fullStatusHistory, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<fullStatusHistory>\n%s\t</fullStatusHistory>\n",attrval->value);
- free_attrs(attrval);
- }
-
- if (jdl) {
- plugin_data.ops.attr(jpctx, data_handle, GLITE_JP_LB_JDL, &attrval);
- if (attrval) {
- fprintf(outfile,"\t<JDL>%s</JDL>\n", attrval->value);
- free_attrs(attrval);
- }
+ if (versionone) {
+ process_attrs(jpctx, plugin_data, data_handle, outfile);
+ } else {
+ process_attrs2(jpctx, plugin_data, data_handle, outfile);
}
- fprintf(outfile,"</lbd:jobRecord>\n");
-
- /* </body> */
plugin_data.ops.close(jpctx, data_handle);
}
plugin_done(jpctx, &plugin_data);
fclose(infile);
- if (outfile) fclose(outfile);
+ if (verbose) fprintf(stdout,"lb_statistics: closed input file %s\n", infilename);
+
+ if (outfile) {
+ fclose(outfile);
+ if (verbose) fprintf(stdout,"lb_statistics: closed output file %s\n", outfilename);
+ }
+
dlclose(lib_handle);
+ if (verbose) fprintf(stdout,"lb_statistics: L&B plugin closed\n");
+
return 0;
}
+