From 6c30c2d1bd7c83d5ff072d2b1dff9f32aca24895 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zden=C4=9Bk=20=C5=A0ustr?= Date: Fri, 21 Dec 2007 13:40:46 +0000 Subject: [PATCH] (Cont'd) Implementation of querry attributes for the sake of the Dashboard service, namely State Enter Time - should be implemented correctly as of now. --- org.glite.lb.client/examples/query_ext.c | 19 ++++++++++++++++--- org.glite.lb.common/src/xml_parse.c.T | 14 +++++++++++--- org.glite.lb.server/src/lb_xml_parse.c.T | 13 ++++--------- org.glite.lb.server/src/query.c | 7 ++++++- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/org.glite.lb.client/examples/query_ext.c b/org.glite.lb.client/examples/query_ext.c index 42ee3af..96de829 100644 --- a/org.glite.lb.client/examples/query_ext.c +++ b/org.glite.lb.client/examples/query_ext.c @@ -469,8 +469,6 @@ static char *get_job_condition(char *src, edg_wll_QueryRec *cond) cond->value2.i = atoi(tmps); } break; - case EDG_WLL_QUERY_ATTR_LASTUPDATETIME: - case EDG_WLL_QUERY_ATTR_STATEENTERTIME: case EDG_WLL_QUERY_ATTR_TIME: cond->value.t.tv_sec = StrToTime(tmps); if ( cond->op == EDG_WLL_QUERY_OP_WITHIN ) @@ -503,7 +501,22 @@ static char *get_job_condition(char *src, edg_wll_QueryRec *cond) fprintf(stderr,"%s: invalid status value (%s)\n", myname, tmps); return 0; } - break; + break; + + case EDG_WLL_QUERY_ATTR_LASTUPDATETIME: + case EDG_WLL_QUERY_ATTR_STATEENTERTIME: + cond->value.t.tv_sec = StrToTime(tmps); + if ( cond->op == EDG_WLL_QUERY_OP_WITHIN ) + { + if ( !(s = get_attr_value(s, tmps, 500)) ) return NULL; + if ( tmps[0] == '\0' ) + { + fprintf(stderr,"%s: second interval boundary not set\n", myname); + return NULL; + } + cond->value2.t.tv_sec = StrToTime(tmps); + } + break; default: break; diff --git a/org.glite.lb.common/src/xml_parse.c.T b/org.glite.lb.common/src/xml_parse.c.T index 612fc3f..c3783a0 100644 --- a/org.glite.lb.common/src/xml_parse.c.T +++ b/org.glite.lb.common/src/xml_parse.c.T @@ -2511,11 +2511,11 @@ int edg_wll_JobQueryRecToXML( break; case EDG_WLL_QUERY_ATTR_STATEENTERTIME: if (conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN) { - edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, conditions[row][i].value.t.tv_sec, "stateentertime", edg_wll_StatToString(conditions[row][i].attr_id.state), "state", -1); - edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, conditions[row][i].value2.t.tv_sec, "stateentertime", edg_wll_StatToString(conditions[row][i].attr_id.state), "state", -1); + edg_wll_add_time_t_to_XMLBody(&pomValue, conditions[row][i].value.t.tv_sec, "stateentertime", -1); + edg_wll_add_time_t_to_XMLBody(&pomValue, conditions[row][i].value2.t.tv_sec, "stateentertime", -1); } else - edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, conditions[row][i].value.t.tv_sec, "stateentertime", edg_wll_StatToString(conditions[row][i].attr_id.state), "state", -1); + edg_wll_add_time_t_to_XMLBody(&pomValue, conditions[row][i].value.t.tv_sec, "stateentertime", -1); break; case EDG_WLL_QUERY_ATTR_LASTUPDATETIME: if (conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN) { @@ -2630,6 +2630,14 @@ int edg_wll_QueryEventsRequestToXML( else edg_wll_add_tagged_time_t_to_XMLBody(&pomValue, event_conditions[row][i].value.t.tv_sec, "time", edg_wll_StatToString(event_conditions[row][i].attr_id.state), "state", -1); break; + case EDG_WLL_QUERY_ATTR_STATEENTERTIME: + if (event_conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN) { + edg_wll_add_time_t_to_XMLBody(&pomValue, event_conditions[row][i].value.t.tv_sec, "stateentertime", -1); + edg_wll_add_time_t_to_XMLBody(&pomValue, event_conditions[row][i].value2.t.tv_sec, "stateentertime", -1); + } + else + edg_wll_add_time_t_to_XMLBody(&pomValue, event_conditions[row][i].value.t.tv_sec, "stateentertime", -1); + break; case EDG_WLL_QUERY_ATTR_LEVEL: edg_wll_add_int_to_XMLBody(&pomValue, event_conditions[row][i].value.i, "level", -1); if (event_conditions[row][i].op == EDG_WLL_QUERY_OP_WITHIN) diff --git a/org.glite.lb.server/src/lb_xml_parse.c.T b/org.glite.lb.server/src/lb_xml_parse.c.T index 7fc5f44..e0efdcb 100644 --- a/org.glite.lb.server/src/lb_xml_parse.c.T +++ b/org.glite.lb.server/src/lb_xml_parse.c.T @@ -116,8 +116,7 @@ static void startJobQueryRec(void *data, const char *el, const char **attr) if (strcmp(attr[0],"name")) { unexp() break;} XMLCtx->job_conditions[XMLCtx->row][XMLCtx->position].attr_id.tag = strdup(attr[1]); } - else if ( ((i+1) == EDG_WLL_QUERY_ATTR_TIME) || - ((i+1) == EDG_WLL_QUERY_ATTR_STATEENTERTIME)) { + else if ( (i+1) == EDG_WLL_QUERY_ATTR_TIME ) { if (!attr[0] || !attr[1]) { unexp() break;} if (attr[0] && strcmp(attr[0],"state")) { unexp() break;} XMLCtx->job_conditions[XMLCtx->row][XMLCtx->position].attr_id.state = edg_wll_StringToStat(attr[1]); @@ -242,8 +241,7 @@ static void startQueryEventsRequest(void *data, const char *el, const char **att if (attr[0] && strcmp(attr[0],"name")) { unexp() break;} XMLCtx->job_conditions[XMLCtx->row][XMLCtx->position].attr_id.tag = strdup(attr[1]); } - else if ( ((i+1) == EDG_WLL_QUERY_ATTR_TIME) || - ((i+1) == EDG_WLL_QUERY_ATTR_STATEENTERTIME)) { + else if ( (i+1) == EDG_WLL_QUERY_ATTR_TIME ) { if (!attr[0] || !attr[1]) { unexp() break;} if (attr[0] && strcmp(attr[0],"state")) { unexp() break;} XMLCtx->job_conditions[XMLCtx->row][XMLCtx->position].attr_id.state = edg_wll_StringToStat(attr[1]); @@ -258,8 +256,7 @@ static void startQueryEventsRequest(void *data, const char *el, const char **att if (attr[0] && strcmp(attr[0],"name")) { unexp() break;} XMLCtx->event_conditions[XMLCtx->row2][XMLCtx->position].attr_id.tag = strdup(attr[1]); } - else if ( ((i+1) == EDG_WLL_QUERY_ATTR_TIME) || - ((i+1) == EDG_WLL_QUERY_ATTR_STATEENTERTIME)) { + else if ( (i+1) == EDG_WLL_QUERY_ATTR_TIME ) { if (!attr[0] || !attr[1]) { unexp() break;} if (attr[0] && strcmp(attr[0],"state")) { unexp() break;} XMLCtx->event_conditions[XMLCtx->row2][XMLCtx->position].attr_id.state = edg_wll_StringToStat(attr[1]); @@ -688,7 +685,6 @@ static void endQueryEventsRequest(void *data, const char *el UNUSED_VAR) XMLCtx->event_conditions[XMLCtx->row2] != NULL) { switch (XMLCtx->event_conditions[XMLCtx->row2][XMLCtx->position2].attr) { case EDG_WLL_QUERY_ATTR_TIME: - case EDG_WLL_QUERY_ATTR_STATEENTERTIME: if ( !XMLCtx->bound ) { XMLCtx->event_conditions[XMLCtx->row2][XMLCtx->position2].value.t.tv_sec = @@ -1935,8 +1931,7 @@ int edg_wll_IndexedAttrsToXML( edg_wll_query_attrToString(ctx->job_index[i][j].attr), "attribute", NULL); - if ((ctx->job_index[i][j].attr == EDG_WLL_QUERY_ATTR_TIME) || - (ctx->job_index[i][j].attr == EDG_WLL_QUERY_ATTR_STATEENTERTIME)) + if ( ctx->job_index[i][j].attr == EDG_WLL_QUERY_ATTR_TIME ) edg_wll_add_string_to_XMLBody(&pomA, edg_wll_StatToString(ctx->job_index[i][j].attr_id.state), "state", NULL); diff --git a/org.glite.lb.server/src/query.c b/org.glite.lb.server/src/query.c index 0fde3a1..156654b 100644 --- a/org.glite.lb.server/src/query.c +++ b/org.glite.lb.server/src/query.c @@ -642,6 +642,8 @@ static char *ec_to_head_where(edg_wll_Context ctx,const edg_wll_QueryRec **ec) * Any op allowed - but be careful */ case EDG_WLL_QUERY_ATTR_TIME: + case EDG_WLL_QUERY_ATTR_STATEENTERTIME: + case EDG_WLL_QUERY_ATTR_LASTUPDATETIME: /* any operator allowed */ ct++; break; @@ -676,6 +678,8 @@ static char *ec_to_head_where(edg_wll_Context ctx,const edg_wll_QueryRec **ec) for ( n = 0; ec[m][n].attr; n++ ) switch ( ec[m][n].attr ) { case EDG_WLL_QUERY_ATTR_TIME: + case EDG_WLL_QUERY_ATTR_STATEENTERTIME: + case EDG_WLL_QUERY_ATTR_LASTUPDATETIME: glite_lbu_TimeToDB(ec[m][n].value.t.tv_sec, &dbt); if ( conds ) { @@ -905,7 +909,6 @@ static char *jc_to_head_where( break; case EDG_WLL_QUERY_ATTR_TIME: - case EDG_WLL_QUERY_ATTR_STATEENTERTIME: if ( jc[m][n].attr_id.state == EDG_WLL_JOB_UNDEF ) { edg_wll_SetError(ctx, EINVAL, "Time attribut have to be associated with status specification"); @@ -916,6 +919,7 @@ static char *jc_to_head_where( case EDG_WLL_QUERY_ATTR_DONECODE: case EDG_WLL_QUERY_ATTR_EXITCODE: case EDG_WLL_QUERY_ATTR_STATUS: + case EDG_WLL_QUERY_ATTR_STATEENTERTIME: case EDG_WLL_QUERY_ATTR_LASTUPDATETIME: ct++; break; @@ -1533,6 +1537,7 @@ int match_status(edg_wll_Context ctx, const edg_wll_JobStat *stat, const edg_wll return 0; or_satisfied: + // just for escaping from nested cycles ; /* prevent compiler to complain */ } -- 1.8.2.3