#include <stdio.h>
#include <errno.h>
+#include <cclassad.h>
+
#include "glite/lb/context.h"
#include "glite/lb/jobstat.h"
av[0].value = edg_wlc_JobIdUnparse(h->status.jobId);
av[0].size = -1;
av[0].timestamp = h->status.lastUpdateTime.tv_sec;
- } else if (strcmp(attr, GLITE_JP_LB_VO) == 0 ||
- strcmp(attr, GLITE_JP_LB_aTag) == 0 ||
+ } else if (strcmp(attr, GLITE_JP_LB_VO) == 0) {
+ av = calloc(2, sizeof(glite_jp_attrval_t));
+ av[0].name = strdup(attr);
+ if (h->events) {
+ i = 0;
+ while (h->events[i]) {
+ if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
+ struct cclassad *ad;
+ char *string_vo = NULL;
+
+ ad = cclassad_create(h->events[i]->regJob.jdl);
+ if (ad) {
+ if (!cclassad_evaluate_to_string(ad, "VirtualOrganisation", &string_vo))
+ string_vo = NULL;
+
+ av[0].value = check_strdup(string_vo);
+ cclassad_delete(ad);
+ if (string_vo) free(string_vo);
+ }
+ av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
+ break;
+ }
+ i++;
+ }
+ }
+ if (!av[0].value) {
+ av[0].value = "UNKNOWN";
+ av[0].timestamp = h->status.lastUpdateTime.tv_sec;
+ }
+ } else if (strcmp(attr, GLITE_JP_LB_eNodes) == 0) {
+ av = calloc(2, sizeof(glite_jp_attrval_t));
+ av[0].name = strdup(attr);
+ if (h->events) {
+ i = 0;
+ while (h->events[i]) {
+ if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
+ struct cclassad *ad;
+ char *string_nodes = NULL;
+
+ ad = cclassad_create(h->events[i]->regJob.jdl);
+ if (ad) {
+ if (!cclassad_evaluate_to_string(ad, "max_nodes_running", &string_nodes))
+ string_nodes = NULL;
+
+ av[0].value = check_strdup(string_nodes);
+ cclassad_delete(ad);
+ if (string_nodes) free(string_nodes);
+ }
+ av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
+ break;
+ }
+ i++;
+ }
+ }
+ if (!av[0].value) {
+ av[0].value = "UNKNOWN";
+ av[0].timestamp = h->status.lastUpdateTime.tv_sec;
+ }
+ } else if (strcmp(attr, GLITE_JP_LB_eProc) == 0) {
+ av = calloc(2, sizeof(glite_jp_attrval_t));
+ av[0].name = strdup(attr);
+ if (h->events) {
+ i = 0;
+ while (h->events[i]) {
+ if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
+ struct cclassad *ad;
+ char *string_nodes = NULL;
+
+ ad = cclassad_create(h->events[i]->regJob.jdl);
+ if (ad) {
+ if (!cclassad_evaluate_to_string(ad, "NodeNumber", &string_nodes))
+ string_nodes = NULL;
+
+ av[0].value = check_strdup(string_nodes);
+ cclassad_delete(ad);
+ if (string_nodes) free(string_nodes);
+ }
+ av[0].timestamp = h->events[i]->any.timestamp.tv_sec;
+ break;
+ }
+ i++;
+ }
+ }
+ if (!av[0].value) {
+ av[0].value = "UNKNOWN";
+ av[0].timestamp = h->status.lastUpdateTime.tv_sec;
+ }
+ } else if (strcmp(attr, GLITE_JP_LB_aTag) == 0 ||
strcmp(attr, GLITE_JP_LB_rQType) == 0 ||
- strcmp(attr, GLITE_JP_LB_eDuration) == 0 ||
- strcmp(attr, GLITE_JP_LB_eNodes) == 0 ||
- strcmp(attr, GLITE_JP_LB_eProc) == 0) {
+ strcmp(attr, GLITE_JP_LB_eDuration) == 0) {
/* have to be retrieved from JDL */
/*
av = calloc(2, sizeof(glite_jp_attrval_t));