From dd3c95822971cf0477318b31d322dbd72656961e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zden=C4=9Bk=20=C5=A0ustr?= Date: Mon, 20 Aug 2012 15:19:29 +0000 Subject: [PATCH] Major consolidation and refactoring of HTML and text output. - will continue - will be subject to intensive testing --- org.glite.lb.server/src/lb_html.c | 465 ++++++++++++++++++++++++++----------- org.glite.lb.server/src/lb_html.h | 11 +- org.glite.lb.server/src/lb_proto.c | 26 +-- org.glite.lb.server/src/lb_text.c | 221 ------------------ org.glite.lb.server/src/lb_text.h | 3 - 5 files changed, 343 insertions(+), 383 deletions(-) diff --git a/org.glite.lb.server/src/lb_html.c b/org.glite.lb.server/src/lb_html.c index 700ece7..1cfbec9 100644 --- a/org.glite.lb.server/src/lb_html.c +++ b/org.glite.lb.server/src/lb_html.c @@ -23,11 +23,16 @@ limitations under the License. #include "pretty_print_wrapper.h" #include "server_stats.h" #include "authz_policy.h" +#include "index.h" +#include "server_state.h" +#include "lb_authz.h" #include "glite/lb/context-int.h" #include "glite/lb/xml_conversions.h" #include "glite/lbu/log.h" +#include "glite/lbu/db.h" +#include "glite/lbu/escape.h" #include #include @@ -42,6 +47,94 @@ limitations under the License. #define UNUSED_VAR #endif +#define TR(name,type,field,null) \ +{ \ + int l; \ + if ((field) != (null)){ \ + l = asprintf(&pomA,"" name ":" \ + "" type "\n", (field)); \ + } \ + else{ \ + l = asprintf(&pomA,"" name \ + "\n"); \ + } \ + pomB = realloc(pomB, sizeof(*pomB)*(pomL+l+1)); \ + strcpy(pomB+pomL, pomA); \ + pomL += l; \ + free(pomA); \ + pomA=NULL; \ +} + +#define TRL(name,type,field,null) \ +{ \ + int l; \ + if ((field) != (null)){ \ + l = asprintf(&pomA,"" name ":" \ + "" type "\n", (field), (field)); \ + } \ + else{ \ + l = asprintf(&pomA,"" name \ + "\n"); \ + } \ + pomB = realloc(pomB, sizeof(*pomB)*(pomL+l+1)); \ + strcpy(pomB+pomL, pomA); \ + pomL += l; \ + free(pomA); \ + pomA=NULL; \ +} + +#define TRS(name,type,field) \ +{ \ + int l; \ + if (field) \ + l = asprintf(&a,"%s=" type "", \ + name, field); \ + else \ + l = asprintf(&a,"%s=\n", name); \ + b = realloc(b, sizeof(*b)*(pomL+l+1)); \ + strcpy(b+pomL, a); \ + pomL += l; \ + free(a); a=NULL; \ +} + +#define TRA(type,field) \ +{ \ + int l; \ + if (field) \ + l = asprintf(&a,"," type "", \ + field); \ + else \ + l = asprintf(&a,"\n"); \ + b = realloc(b, sizeof(*b)*(pomL+l+1)); \ + strcpy(b+pomL, a); \ + pomL += l; \ + free(a); a=NULL; \ +} + +void add_row(char **body, char *text_title, char *html_title, char *value, char *link, http_output_type text) { + char *newbody = NULL, *target; + int len; + + switch (text) { + case HTTP_OUTPUT_TYPE_HTML: + if (value) { + if (link) len = asprintf(&newbody,"%s%s%s\n", *body ? *body : "", html_title, link, value); + else len = asprintf(&newbody,"%s%s%s\n", *body ? *body : "", html_title, value); + } + else len = asprintf(&newbody,"%s%s\n", *body ? *body : "", html_title); + break; + case HTTP_OUTPUT_TYPE_TEXT_APPEND: + if ((target = strrchr(*body ? *body : "", '\n'))) target[0]='\0'; + case HTTP_OUTPUT_TYPE_TEXT: + len = asprintf(&newbody,"%s%s=%s\n", *body ? *body : "", text_title, value ? value : ""); + break; + } + + free(*body); + *body = newbody; + +} + char *get_html_header(edg_wll_Context ctx, int text) { char *header = NULL; size_t header_len = 0, rlen = 0; @@ -76,6 +169,111 @@ int jobstat_cmp (const void *a, const void *b) { return strcmp(((JobIdSorter*)a)->id_unparsed, ((JobIdSorter*)b)->id_unparsed); } +int edg_wll_ConfigurationToHTML(edg_wll_Context ctx, int admin, char **message, int text){ + char *a = NULL, *b, *header, *out, *out_tmp; + int i = 0; + b = strdup(""); + + header = get_html_header(ctx, text); + if (!text) asprintf(&out, "\n\nServer Configuration\n%s\n\n\n" + "

LB Server Configuration

\n" + "\n" + "\n", + header ? header : ""); + else + out = strdup(""); + + free(header); + + add_row(&out, "server_version", "Server version", VERSION, NULL, text); + + add_row(&out, "server_identity", "Server identity", ctx->serverIdentity, NULL, text); + + for (i = 0; ctx->job_index && ctx->job_index[i]; i++){ + char *idx_title = edg_wll_QueryRecToColumn(ctx->job_index[i]); + asprintf(&out_tmp, "%s%s%s", a ? a : "", a ? (text ? "," : "
") : "", idx_title); + free(a); + a = out_tmp; + } + add_row(&out, "server_indices", "Server indices", a, NULL, text); + free(a); + + a = NULL; + for (i = 0; ctx->msg_brokers && ctx->msg_brokers[i]; i++){ + asprintf(&out_tmp, "%s%s%s", a ? a : "", a ? (text ? "," : "
") : "", ctx->msg_brokers[i]); + free(a); + a = out_tmp; + } + add_row(&out, "msg_brokers", "Messaging brokers", a, NULL, text); + free(a); + + a = NULL; + for (i = 0; ctx->msg_prefixes && ctx->msg_prefixes[i]; i++){ + asprintf(&out_tmp, "%s%s%s", a ? a : "", a ? (text ? "," : "
") : "", ctx->msg_prefixes[i]); + free(a); + a = out_tmp; + } + add_row(&out, "msg_prefixes", "Messaging prefixes", a, NULL, text); + free(a); + + /* only for superusers */ + if (admin){ + char *dbname, *dbhost; + dbname = glite_lbu_DBGetName(ctx->dbctx); + dbhost = glite_lbu_DBGetHost(ctx->dbctx); + add_row(&out, "database_name", "Database name", dbname, NULL, text); + add_row(&out, "database_host", "Database host", dbhost, NULL, text); + free(dbname); + free(dbhost); + + char *pf = NULL, *pf_pars = NULL; + FILE *authz_file; + size_t rlen, alloc_len; + if ((authz_file = fopen(ctx->authz_policy_file, "r"))) { + rlen = getdelim(&pf, &alloc_len, '\0', authz_file); + fclose (authz_file); + } + else rlen = -1; + + if (text) pf_pars = glite_lbu_EscapeULM(pf); + + add_row(&out, "authz_policy_file", "Authorization
policy file", rlen < 0 ? NULL : (pf_pars ? pf_pars : pf), NULL, text); + free(pf_pars); + free(pf); + + a = NULL; + edg_wll_authz_policy ap = edg_wll_get_server_policy(); + int i, j, k; + for (i = 0; i < ap->actions_num; i++){ + if (ap->actions[i].id == ADMIN_ACCESS) + for (j = 0; j < ap->actions[i].rules_num; j++) + for (k = 0; k < ap->actions[i].rules[j].attrs_num; k++){ + asprintf(&out_tmp, "%s%s%s", a ? a : "", a ? (text ? "," : "
") : "", ap->actions[i].rules[j].attrs[k].value); + free(a); + a = out_tmp; + } + } + add_row(&out, "admins", "Super Users", a, NULL, text); + free(a); + + char *start = NULL, *end = NULL; + edg_wll_GetServerState(ctx, EDG_WLL_STATE_DUMP_START, &start); + edg_wll_GetServerState(ctx, EDG_WLL_STATE_DUMP_END, &end); + add_row(&out, "dump_start", "Last dump start", start, NULL, text); + add_row(&out, "dump_end", "Last dump end", end, NULL, text); + } + + if (!text) { + asprintf(&out_tmp, "%s
OptionValue
\n\n", out); + free(out); + out = out_tmp; + } + + *message = out; + return 0; +} + + /* construct Message-Body of Response-Line for edg_wll_UserJobs */ int edg_wll_UserInfoToHTML(edg_wll_Context ctx UNUSED_VAR, edg_wlc_JobId *jobsOut, edg_wll_JobStat *statsOut, char **message, int text) { @@ -223,153 +421,149 @@ int edg_wll_UserNotifsToHTML(edg_wll_Context ctx UNUSED_VAR, char **notifids, ch return 0; } -#define TR(name,type,field,null) \ -{ \ - int l; \ - if ((field) != (null)){ \ - l = asprintf(&pomA,"" name ":" \ - "" type "\n", (field)); \ - } \ - else{ \ - l = asprintf(&pomA,"" name \ - "\n"); \ - } \ - pomB = realloc(pomB, sizeof(*pomB)*(pomL+l+1)); \ - strcpy(pomB+pomL, pomA); \ - pomL += l; \ - free(pomA); \ - pomA=NULL; \ -} -#define TRL(name,type,field,null) \ -{ \ - int l; \ - if ((field) != (null)){ \ - l = asprintf(&pomA,"" name ":" \ - "" type "\n", (field), (field)); \ - } \ - else{ \ - l = asprintf(&pomA,"" name \ - "\n"); \ - } \ - pomB = realloc(pomB, sizeof(*pomB)*(pomL+l+1)); \ - strcpy(pomB+pomL, pomA); \ - pomL += l; \ - free(pomA); \ - pomA=NULL; \ -} +int edg_wll_NotificationToHTML(edg_wll_Context ctx UNUSED_VAR, notifInfo *ni, char **message, int text){ + char *out_tmp = NULL, *flags = NULL, *cond, *header = NULL, *out; + int alljobs = strcmp(ni->jobid,"all_jobs"); -int edg_wll_NotificationToHTML(edg_wll_Context ctx UNUSED_VAR, notifInfo *ni, char **message){ - char *pomA = NULL, *pomB = NULL, *flags = NULL, *cond, *header = NULL; - int pomL = 0; + header = get_html_header(ctx, text); + if (!text) asprintf(&out, "\n\nNotification Detail\n%s\n\n\n" + "

Notification %s

\n" + "\n", + header ? header : "", + ni->notifid); + else + out = strdup(""); + + free(header); flags = edg_wll_stat_flags_to_string(ni->flags); - printf("flags %d - %s", ni->flags, flags); - - TR("Owner", "%s", ni->owner, NULL); - TR("Destination", "%s", ni->destination, NULL); - TR("Valid until", "%s", ni->valid, NULL); - TR("Flags", "%s", flags, NULL); - if (strcmp(ni->jobid,"all_jobs")) { - TRL("Job ID", "%s", ni->jobid, NULL); } - else { - TR("Job ID", "%s", "—", NULL); - } - free(flags); - if (! edg_wll_Condition_Dump(ni, &cond, 0)){ - asprintf(&pomA, "%s

Conditions

\r\n
%s
\r\n", - pomB, cond); - free(pomB); - pomB = pomA; - pomL = strlen(pomB); + add_row(&out, "Notif_id", "Notification ID", ni->notifid, NULL, text); + add_row(&out, "Owner", "Owner", ni->owner, NULL, text); + add_row(&out, "Destination", "Destination", ni->destination, NULL, text); + add_row(&out, "Valid_until", "Valid until", ni->valid, NULL, text); + add_row(&out, "Flags", "Flags", flags, NULL, text); + add_row(&out, "Job_id", "Job ID", alljobs ? ni->jobid : NULL, alljobs ? ni->jobid : NULL, text); - } + free(flags); + + edg_wll_Condition_Dump(ni, &cond, text); + add_row(&out, "Conditions", "Conditions", cond, NULL, text); free(cond); - header = get_html_header(ctx, 0); - asprintf(&pomA, "\n\nNotification Detail\n\n\n%s\n\n\r\n" - "

Notification %s

\r\n" - "
%s
" - "\t\r\n", - header, - ni->notifid, pomB); - free(header); + if (!text) { + asprintf(&out_tmp, "%s\n\n", out); + free(out); + out = out_tmp; + } - *message = pomA; + *message = out; return 0; } /* construct Message-Body of Response-Line for edg_wll_JobStatus */ -int edg_wll_GeneralJobStatusToHTML(edg_wll_Context ctx UNUSED_VAR, edg_wll_JobStat stat, char **message) +int edg_wll_GeneralJobStatusToHTML(edg_wll_Context ctx UNUSED_VAR, edg_wll_JobStat stat, char **message, int text) { - char *pomA = NULL, *pomB = NULL; - int pomL = 0; - char *chid,*chstat,*chis = NULL, *chos = NULL, *chpa = NULL, *header = NULL; - char *jdl,*rsl,*children; - int i; + char *out_tmp = NULL, *header = NULL, *out, *jdl = NULL, *rsl = NULL, *children = NULL, *chtemp; + time_t time; - jdl = strdup(""); - rsl = strdup(""); - children = strdup(""); - - chid = edg_wlc_JobIdUnparse(stat.jobId); - if (stat.isb_transfer) chis = edg_wlc_JobIdUnparse(stat.isb_transfer); - if (stat.osb_transfer) chos = edg_wlc_JobIdUnparse(stat.osb_transfer); - if (stat.parent_job) chpa = edg_wlc_JobIdUnparse(stat.parent_job); + char *pomA = NULL; + int i; - TRL("Parent job", "%s", chpa, NULL); - TR("Status","%s",(chstat = edg_wll_StatToString(stat.state)), NULL); - free(chstat); - TR("Type","%s",edg_wll_StatusJobtypeNames[stat.jobtype], NULL); - TR("Owner","%s",stat.owner, NULL); - TR("Payload Owner","%s",stat.payload_owner, NULL); - TR("Condor Id","%s",stat.condorId, NULL); - TR("Globus Id","%s",stat.globusId, NULL); - TR("Local Id","%s",stat.localId, NULL); - TR("Reason","%s",stat.reason, NULL); - if ( (stat.stateEnterTime.tv_sec) || (stat.stateEnterTime.tv_usec) ) { - time_t time = stat.stateEnterTime.tv_sec; - TR("State entered","%s",ctime(&time), NULL); - } - else - TR("State entered", "%s", (char*)NULL, NULL); - if ( (stat.lastUpdateTime.tv_sec) || (stat.lastUpdateTime.tv_usec) ) { - time_t time = stat.lastUpdateTime.tv_sec; - TR("Last update","%s",ctime(&time), NULL); - } - else - TR("Last update", "%s", (char*)NULL, NULL); - TR("Expect update","%s",stat.expectUpdate ? "YES" : "NO", NULL); - TR("Expect update from","%s",stat.expectFrom, NULL); - TR("Location","%s",stat.location, NULL); - TR("Destination","%s",stat.destination, NULL); - TR("Cancelling","%s",stat.cancelling>0 ? "YES" : "NO", NULL); - TR("Cancel reason","%s",stat.cancelReason, NULL); - TR("CPU time","%d",stat.cpuTime, 0); + chtemp = edg_wlc_JobIdUnparse(stat.jobId); + header = get_html_header(ctx, text); + if (!text) asprintf(&out, "\n\nJob Detail\n%s\n\n\n" + "

%s

\n" + "\n", + header ? header : "", + chtemp); + else + out = strdup(""); + + free(header); + + add_row(&out, "Job", "Job ID", chtemp, chtemp, text); + free(chtemp); + chtemp = stat.parent_job ? edg_wlc_JobIdUnparse(stat.parent_job) : NULL; + add_row(&out, "parent_job", "Parent job", chtemp, chtemp, text); + free(chtemp); + add_row(&out, "Status", "Status", (chtemp = edg_wll_StatToString(stat.state)), NULL, text); + free(chtemp); + add_row(&out, "job_type", "Type", edg_wll_StatusJobtypeNames[stat.jobtype], NULL, text); + add_row(&out, "owner", "Owner", stat.owner, NULL, text); + add_row(&out, "payload_owner", "Payload Owner", stat.payload_owner, NULL, text); + add_row(&out, "condorId", "Condor Id", stat.condorId, NULL, text); + add_row(&out, "globusId", "Globus Id", stat.globusId, NULL, text); + add_row(&out, "localId", "Local Id", stat.localId, NULL, text); + add_row(&out, "reason", "Reason", stat.reason, NULL, text); + time = stat.stateEnterTime.tv_sec; + asprintf(&chtemp, "%s", ctime(&time)); + chtemp[strlen(chtemp)-1]='\0'; + add_row(&out, "stateEnterTime", "State entered", time > 0 ? chtemp : NULL, NULL, text); + free(chtemp); + time = stat.lastUpdateTime.tv_sec; + asprintf(&chtemp, "%s", ctime(&time)); + chtemp[strlen(chtemp)-1]='\0'; + add_row(&out, "lastUpdateTime", "Last update", time > 0 ? chtemp : NULL, NULL, text); + free(chtemp); + add_row(&out, "expectUpdate", "Expect update", stat.expectUpdate ? "YES" : "NO", NULL, text); + add_row(&out, "expectFrom", "Expect update from", stat.expectFrom, NULL, text); + add_row(&out, "location", "Location", stat.location, NULL, text); + add_row(&out, "destination", "Destination", stat.destination, NULL, text); + add_row(&out, "cancelling", "Cancelling", stat.cancelling>0 ? "YES" : "NO", NULL, text); + add_row(&out, "cancelReason", "Cancel reason", stat.cancelReason, NULL, text); + asprintf(&chtemp, "%d", stat.cpuTime); + add_row(&out, "cpuTime", "CPU time", chtemp, NULL, text); + free(chtemp); + if (stat.done_code != -1) asprintf(&chtemp, "%d", stat.done_code); + else chtemp = NULL; + add_row(&out, "done_code", "Done code", chtemp, NULL, text); + free(chtemp); + if (stat.exit_code != -1) asprintf(&chtemp, "%d", stat.exit_code); + else chtemp = NULL; + add_row(&out, "exit_code", "Exit code", chtemp, NULL, text); + free(chtemp); + chtemp = stat.isb_transfer ? edg_wlc_JobIdUnparse(stat.isb_transfer) : NULL; + add_row(&out, "input_sandbox", "input sandbox", chtemp, chtemp, text); + free(chtemp); + chtemp = stat.osb_transfer ? edg_wlc_JobIdUnparse(stat.osb_transfer) : NULL; + add_row(&out, "output_sandbox", "Output sandbox", chtemp, chtemp, text); + free(chtemp); + + if (!text) { + asprintf(&out_tmp, "%s
\n\n", out); + free(out); + out = out_tmp; + } - TR("Done code","%d",stat.done_code, -1); - TR("Exit code","%d",stat.exit_code, -1); - - TRL("Input sandbox", "%s", chis, NULL); - TRL("Output sandbox", "%s", chos, NULL); - if (stat.jdl){ - char *jdl_unp; - if (pretty_print(stat.jdl, &jdl_unp) == 0) - asprintf(&jdl,"

Job description

\r\n" - "
%s
\r\n",jdl_unp); - else - asprintf(&jdl,"

Job description (not a ClassAd)" - "

\r\n
%s
\r\n",stat.jdl); + if (text) { + char* my_jdl = glite_lbu_EscapeULM(stat.jdl); + asprintf(&jdl,"jdl=%s\n", my_jdl); + free(my_jdl); + } + else { + char *jdl_unp; + if (pretty_print(stat.jdl, &jdl_unp) == 0) + asprintf(&jdl,"

Job description

\r\n" + "
%s
\r\n",jdl_unp); + else + asprintf(&jdl,"

Job description (not a ClassAd)" + "

\r\n
%s
\r\n",stat.jdl); + } } + else if (text) asprintf(&jdl,"jdl=\n"); - if (stat.rsl) asprintf(&rsl,"

RSL

\r\n" - "
%s
\r\n",stat.rsl); + if (stat.rsl) { + if (text) asprintf(&rsl,"

RSL

\r\n
%s
\r\n",stat.rsl); + else asprintf(&rsl,"rsl=%s\n", stat.rsl); + } + else if (text) asprintf(&rsl,"rsl=\n"); - if ((stat.jobtype == EDG_WLL_STAT_COLLECTION) && (stat.children_num > 0)){ + if ((!text) && (stat.jobtype == EDG_WLL_STAT_COLLECTION) && (stat.children_num > 0)){ asprintf(&children, "

Children

\r\n"); for (i = 0; i < stat.children_num; i++){ asprintf(&pomA,"%s\t\t
  • %s\r\n", @@ -378,23 +572,16 @@ int edg_wll_GeneralJobStatusToHTML(edg_wll_Context ctx UNUSED_VAR, edg_wll_JobSt } } - header = get_html_header(ctx, 0); - asprintf(&pomA, "\n\nJob Detail\n\n\n%s\n\n\r\n" - "

    %s

    \r\n" - "%s
    " - "%s%s%s" - "\t\r\n", - header, - chid,pomB,jdl,rsl, children); - free(pomB); - free(header); + asprintf(&pomA, "%s%s%s%s%s", + out, + jdl ? jdl : "", + rsl ? rsl : "", + children ? children : "", + text ? "" : "\n"); *message = pomA; - free(chid); - if (chis) free(chis); - if (chos) free(chos); - if (chpa) free(chpa); + free(out); free(jdl); free(rsl); free(children); @@ -612,7 +799,7 @@ int edg_wll_StatisticsToHTML(edg_wll_Context ctx, char **message, int text) { header ? header : "", edg_wll_ServerStatisticsInTmp() ? "WARNING: L&B statistics are stored in /tmp, please, configure L&B server to make them really persistent!

    \n" : ""); else - asprintf(&out, ""); + out = strdup(""); free(header); diff --git a/org.glite.lb.server/src/lb_html.h b/org.glite.lb.server/src/lb_html.h index 2446a30..b162168 100644 --- a/org.glite.lb.server/src/lb_html.h +++ b/org.glite.lb.server/src/lb_html.h @@ -31,12 +31,19 @@ typedef struct { char *key; int order; } JobIdSorter; +typedef enum _http_output_type{ + HTTP_OUTPUT_TYPE_HTML, + HTTP_OUTPUT_TYPE_TEXT, + HTTP_OUTPUT_TYPE_TEXT_APPEND +} http_output_type; + int edg_wll_QueryToHTML(edg_wll_Context,edg_wll_Event *,char **); -int edg_wll_GeneralJobStatusToHTML(edg_wll_Context, edg_wll_JobStat, char **); +int edg_wll_ConfigurationToHTML(edg_wll_Context ctx, int admin, char **message, int text); +int edg_wll_GeneralJobStatusToHTML(edg_wll_Context, edg_wll_JobStat, char **, int text); int edg_wll_CreamJobStatusToHTML(edg_wll_Context, edg_wll_JobStat, char **); int edg_wll_UserInfoToHTML(edg_wll_Context, edg_wlc_JobId *, edg_wll_JobStat *, char **, int text); int edg_wll_UserNotifsToHTML(edg_wll_Context ctx, char **notifids, char **message, http_admin_option option, int adm); -int edg_wll_NotificationToHTML(edg_wll_Context ctx, notifInfo *ni, char **message); +int edg_wll_NotificationToHTML(edg_wll_Context ctx, notifInfo *ni, char **message, int text); char *edg_wll_ErrorToHTML(edg_wll_Context,int); int edg_wll_FileTransferStatusToHTML(edg_wll_Context ctx, edg_wll_JobStat stat, char **message); int edg_wll_VMHostToHTML(edg_wll_Context ctx, char *hostname, edg_wll_JobStat *states, char **message); diff --git a/org.glite.lb.server/src/lb_proto.c b/org.glite.lb.server/src/lb_proto.c index 1c1a677..bb55e98 100644 --- a/org.glite.lb.server/src/lb_proto.c +++ b/org.glite.lb.server/src/lb_proto.c @@ -1009,12 +1009,7 @@ edg_wll_ErrorCode edg_wll_Proto(edg_wll_Context ctx, ret = HTTP_BADREQ; } else switch (edg_wll_JobStatusServer(ctx,jobId,EDG_WLL_STAT_CLASSADS | EDG_WLL_STAT_CHILDREN | rflags, &stat)) { - case 0: if (text) { - edg_wll_JobStatusToText(ctx,stat,&message); - edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_TEXT_VIEWS); - } - else if (html) { - edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_HTML_VIEWS); + case 0: switch(stat.jobtype){ case EDG_WLL_STAT_CREAM: edg_wll_CreamJobStatusToHTML(ctx,stat,&message); @@ -1025,12 +1020,12 @@ edg_wll_ErrorCode edg_wll_Proto(edg_wll_Context ctx, break; default: //XXX need some more implementations - edg_wll_GeneralJobStatusToHTML(ctx,stat,&message); + edg_wll_GeneralJobStatusToHTML(ctx,stat,&message,text); break; } - } + edg_wll_ServerStatisticsIncrement(ctx, text ? SERVER_STATS_TEXT_VIEWS : SERVER_STATS_HTML_VIEWS); - else ret = HTTP_OK; + ret = HTTP_OK; break; case ENOENT: ret = HTTP_NOTFOUND; break; case EINVAL: ret = HTTP_INVALID; break; @@ -1078,14 +1073,9 @@ edg_wll_ErrorCode edg_wll_Proto(edg_wll_Context ctx, free(pomCopy); - if (text) { - edg_wll_NotificationToText(ctx, &ni, &message); - edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_TEXT_VIEWS); - } - else { - edg_wll_NotificationToHTML(ctx, &ni, &message); - edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_HTML_VIEWS); - } + edg_wll_NotificationToHTML(ctx, &ni, &message, text); + + edg_wll_ServerStatisticsIncrement(ctx, text ? SERVER_STATS_TEXT_VIEWS : SERVER_STATS_HTML_VIEWS); freeNotifInfo(&ni); @@ -1171,7 +1161,7 @@ edg_wll_ErrorCode edg_wll_Proto(edg_wll_Context ctx, } else if (extra_opt == HTTP_EXTRA_OPTION_CONFIGURATION) { // also browser-readable HTML version here? isadm = ctx->noAuth || edg_wll_amIroot(ctx->peerName, ctx->fqans,&ctx->authz_policy); - edg_wll_ConfigurationToText(ctx, isadm, &message); + edg_wll_ConfigurationToHTML(ctx, isadm, &message, text); edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_TEXT_VIEWS); /* GET /?stats*/ } else if (extra_opt == HTTP_EXTRA_OPTION_STATS) { diff --git a/org.glite.lb.server/src/lb_text.c b/org.glite.lb.server/src/lb_text.c index d4596a5..284e9bf 100644 --- a/org.glite.lb.server/src/lb_text.c +++ b/org.glite.lb.server/src/lb_text.c @@ -43,36 +43,6 @@ limitations under the License. #define UNUSED_VAR #endif -static char *escape_text(char *text){ - int len = strlen(text); - char *ret = malloc((len+1)*sizeof(char)); - int reti = 0; - int retlen = len; - int i; - for (i = 0; i < len; i++){ - // escape '\' - if (text[i] == '\\'){ - ret[reti] = '\\'; - reti++; - retlen++; - ret = realloc(ret, (retlen+1)*sizeof(char)); - } - // replace newline by '\\n' - if (text[i] == '\n'){ - ret[reti] = '\\'; - reti++; - ret[reti] = 'n'; - retlen++; - ret = realloc(ret, (retlen+1)*sizeof(char)); - } - else - ret[reti] = text[i]; - reti++; - } - ret[reti] = 0; - return ret; -} - int edg_wll_QueryToText(edg_wll_Context ctx UNUSED_VAR, edg_wll_Event *eventsOut UNUSED_VAR, char **message UNUSED_VAR) { /* not implemented yet */ @@ -143,197 +113,6 @@ int edg_wll_UserNotifsToText(edg_wll_Context ctx, char **notifids, char **messag return 0; } -int edg_wll_NotificationToText(edg_wll_Context ctx UNUSED_VAR, notifInfo *ni, char **message){ - char *a = NULL, *b = NULL, *cond, *flags; - int pomL = 0; - - TR("Notif_id", "%s", ni->notifid); - TR("Owner", "%s", ni->owner); - TR("Destination", "%s", ni->destination); - TR("Valid_until", "%s", ni->valid); - flags = edg_wll_stat_flags_to_string(ni->flags); - TR("Flags", "%s", flags); - free(flags); - if (! edg_wll_Condition_Dump(ni, &cond, 1)){ - TR("Conditions", "%s", cond); - } - free(cond); - - *message = b; - - return 0; -} - -/* construct Message-Body of Response-Line for edg_wll_JobStatus */ -int edg_wll_JobStatusToText(edg_wll_Context ctx UNUSED_VAR, edg_wll_JobStat stat, char **message) -{ - char *a = NULL, *b = NULL; - char *chid,*chstat; - char *jdl,*rsl; - - jdl = strdup(""); - rsl = strdup(""); - - int pomL = 0; - - chid = edg_wlc_JobIdUnparse(stat.jobId); - - TR("Status","%s",(chstat = edg_wll_StatToString(stat.state))); - free(chstat); - TR("type","%s",edg_wll_StatusJobtypeNames[stat.jobtype]); - TR("owner","%s",stat.owner); - TR("payload_owner","%s",stat.payload_owner); - TR("condorId","%s",stat.condorId); - TR("globusId","%s",stat.globusId); - TR("localId","%s",stat.localId); - TR("reason","%s",stat.reason); - if ( (stat.stateEnterTime.tv_sec) || (stat.stateEnterTime.tv_usec) ) { - time_t time = stat.stateEnterTime.tv_sec; - //TR("State_entered","%s",ctime(&time)); - asprintf(&a, "%sstateEnterTime=%s", b, ctime(&time)); - free(b); b = a; - } - else{ - asprintf(&a, "%sstateEnterTime=", b); - free(b); b = a; - } - if ( (stat.lastUpdateTime.tv_sec) || (stat.lastUpdateTime.tv_usec) ) { - time_t time = stat.lastUpdateTime.tv_sec; - //TR("Last_update","%s",ctime(&time)); - asprintf(&a, "%slastUpdateTime=%s", b, ctime(&time)); - free(b); b = a; - } - else{ - asprintf(&a, "%slastUpdateTime=", b); - free(b); b = a; - } - TR("expectUpdate","%s",stat.expectUpdate ? "YES" : "NO"); - TR("expectFrom","%s",stat.expectFrom); - TR("location","%s",stat.location); - TR("destination","%s",stat.destination); - TR("cancelling","%s",stat.cancelling>0 ? "YES" : "NO"); - TR("cancelReason","%s",stat.cancelReason); - TR("cpuTime","%d",stat.cpuTime); - - TR("done_code","%d",stat.done_code); - TR("exit_code","%d",stat.exit_code); - - if (stat.jdl){ - char* my_jdl = escape_text(stat.jdl); - asprintf(&jdl,"jdl=%s\n", my_jdl); - free(my_jdl); - } - else - asprintf(&jdl,"jdl=\n"); - if (stat.rsl) - asprintf(&rsl,"rsl=%s\n", stat.rsl); - else - asprintf(&rsl,"rsl=\n"); - - asprintf(&a, "Job=%s\n" - "%s" - "%s" - "%s", - chid,b,jdl,rsl); - free(b); - - *message = a; - - free(chid); - free(jdl); - free(rsl); - return 0; -} - -int edg_wll_ConfigurationToText(edg_wll_Context ctx, int admin, char **message){ - char *a = NULL, *b; - int pomL = 0; - int i = 0; - b = strdup(""); - - TRS("server_version", "%s\n", VERSION); - - TRS("server_identity", "%s\n", ctx->serverIdentity); - - if (ctx->job_index) - for (i = 0; ctx->job_index[i]; i++){ - char *ch = edg_wll_QueryRecToColumn(ctx->job_index[i]); - if (i == 0) TRS("server_indices", "%s", ch) - else TRA("%s", ch); - free(ch); - } - if (i > 0) - TRA("%s", NULL); - - if (ctx->msg_brokers) - for (i = 0; ctx->msg_brokers[i]; i++){ - if (i == 0) TRS("msg_brokers", "%s", ctx->msg_brokers[i]) - else TRA("%s", ctx->msg_brokers[i]); - } - if (i > 0) - TRA("%s", NULL); - - if (ctx->msg_prefixes) - for (i = 0; ctx->msg_prefixes[i]; i++) - if (i == 0) TRS("msg_prefixes", "%s", ctx->msg_prefixes[i]) - else TRA("%s", ctx->msg_prefixes[i]); - if (i > 0) - TRA("%s", NULL); - - /* only for superusers */ - if (admin){ - char *dbname, *dbhost; - dbname = glite_lbu_DBGetName(ctx->dbctx); - dbhost = glite_lbu_DBGetHost(ctx->dbctx); - TRS("database_name", "%s\n", dbname); - TRS("database_host", "%s\n", dbhost); - - free(dbname); - free(dbhost); - - char *pf = NULL; - int fd; - if (ctx->authz_policy_file && (fd = open(ctx->authz_policy_file, O_RDONLY)) >= 0){ - off_t size = lseek(fd, 0, SEEK_END) - lseek(fd, 0, SEEK_SET); - if (size){ - char *pft = (char*)calloc(sizeof(char), size); - read(fd, pft, size); - close(fd); - pf = escape_text(pft); -// Why not trio_asprintf(&pf, "%|Js", pft); - free(pft); - } - } - TRS("authz_policy_file", "%s\n", pf); - free(pf); - - edg_wll_authz_policy ap = edg_wll_get_server_policy(); - int i, j, k, l = 0; - for (i = 0; i < ap->actions_num; i++){ - if (ap->actions[i].id == ADMIN_ACCESS) - for (j = 0; j < ap->actions[i].rules_num; j++) - for (k = 0; k < ap->actions[i].rules[j].attrs_num; k++){ - if (l == 0) - TRS("admins", "\"%s\"", ap->actions[i].rules[j].attrs[k].value) - else - TRA("\"%s\"", ap->actions[i].rules[j].attrs[k].value); - l++; - } - } - if (l) TRA("%s", NULL); - - char *start = NULL, *end = NULL; - edg_wll_GetServerState(ctx, EDG_WLL_STATE_DUMP_START, &start); - edg_wll_GetServerState(ctx, EDG_WLL_STATE_DUMP_END, &end); - TRS("dump_start", "%s\n", start); - TRS("dump_end", "%s\n", end); - } - - *message = b; - - return 0; -} - char *edg_wll_ErrorToText(edg_wll_Context ctx,int code) { char *out,*et,*ed; diff --git a/org.glite.lb.server/src/lb_text.h b/org.glite.lb.server/src/lb_text.h index c5647f2..6f0d980 100644 --- a/org.glite.lb.server/src/lb_text.h +++ b/org.glite.lb.server/src/lb_text.h @@ -24,10 +24,7 @@ limitations under the License. #include "lb_proto.h" int edg_wll_QueryToText(edg_wll_Context,edg_wll_Event *,char **); -int edg_wll_JobStatusToText(edg_wll_Context, edg_wll_JobStat, char **); int edg_wll_UserNotifsToText(edg_wll_Context ctx, char **notifids, char **message); -int edg_wll_NotificationToText(edg_wll_Context ctx, notifInfo *ni, char **message); -int edg_wll_ConfigurationToText(edg_wll_Context ctx, int admin, char **message); char *edg_wll_ErrorToText(edg_wll_Context,int); #endif /* GLITE_LB_TEXT */ -- 1.8.2.3