return 0;
}
+int edg_wll_VMHostToHTML(edg_wll_Context ctx UNUSED_VAR, char *hostname, edg_wll_JobStat *states, char **message){
+ char *pomA = NULL, *pomB = NULL;
+ int i;
+
+ if (states) for (i = 0; states[i].state != EDG_WLL_JOB_UNDEF; i++){
+ char *status = edg_wll_VMStatToString(states[i].vm_state);
+ char *chid = edg_wlc_JobIdUnparse(states[i].jobId);
+ if (pomB)
+ asprintf(&pomA, "%s\t\t <li> <a href=\"%s\">%s</a> (%s)\r\n",
+ pomB, chid, chid, status);
+ else
+ asprintf(&pomA, "<li> <a href=\"%s\">%s</a> (%s)\r\n",
+ chid, chid, status);
+ free(pomB);
+ pomB = pomA;
+ free(chid);
+ free(status);
+ }
+
+ asprintf(&pomA, "<html>\r\n\t<body>\r\n"
+ "<h2>%s</h2>\r\n"
+ "<table halign=\"left\">%s</table>"
+ "\t</body>\r\n</html>",
+ hostname,pomB);
+ free(pomB);
+
+ *message = pomA;
+
+ return 0;
+}
+
char *edg_wll_ErrorToHTML(edg_wll_Context ctx,int code)
{
char *out,*et,*ed,*header = NULL;
int edg_wll_NotificationToHTML(edg_wll_Context ctx, notifInfo *ni, char **message);
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);
int edg_wll_StatisticsToHTML(edg_wll_Context ctx, char **message, int text);
#endif /* GLITE_LB_HTML_H */
return 0;
}
+static int getVMsOnHost(edg_wll_Context ctx, char *hostname, edg_wll_JobStat **statesOut){
+ edg_wlc_JobId *jobsOut;
+ edg_wll_QueryRec **conds;
+ int i;
+
+ conds = malloc(2*sizeof(*conds));
+ conds[0] = malloc(2*sizeof(**conds));
+ conds[0][0].attr = EDG_WLL_QUERY_ATTR_DESTINATION;
+ conds[0][0].op = EDG_WLL_QUERY_OP_EQUAL;
+ conds[0][0].value.c = hostname;
+ conds[0][1].attr = EDG_WLL_QUERY_ATTR_UNDEF;
+ conds[1] = NULL;
+
+
+ if (edg_wll_QueryJobsServer(ctx, (const edg_wll_QueryRec **)conds, 0, &jobsOut, statesOut)){
+ *statesOut = NULL;
+ }
+
+ for (i = 0; conds[i]; i++)
+ free(conds[i]);
+ free(conds);
+
+ return 0;
+}
+
+
+
static void hup_handler(int sig) {
purge_quit = 1;
}
else if (strcmp(requestMeat, "/RSS:")
&& strcmp(requestMeat, "/NOTIF")
&& strncmp(requestMeat, "/NOTIF:", 7)
+ && strncmp(requestMeat, "/VMHOST:", 8)
&& strcmp(requestMeat, "/favicon.ico")
&& extra_opt == HTTP_EXTRA_OPTION_NONE
) {
edg_wll_RSSFeed(ctx, states, requestPTR, &message);
edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_RSS_VIEWS);
}
+ /*GET /VMHOST:[hostname] all VMs associated with hostname */
+ } else if (strncmp(requestMeat, "/VMHOST:", strlen("/VMHOST:")) == 0) {
+ char *host = requestMeat + strlen("/VMHOST:");
+ edg_wll_JobStat *states;
+ if (getVMsOnHost(ctx, host, &states)){
+ ret = HTTP_INTERNAL;
+ goto err;
+ }
+ if (text){
+// edg_wll_VMHostToText(ctx, requestPTR + strlen("/VMHOST:"), states, &message);
+// edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_TEXT_VIEWS);
+ }
+ else{
+ edg_wll_VMHostToHTML(ctx, host, states, &message);
+ edg_wll_ServerStatisticsIncrement(ctx, SERVER_STATS_HTML_VIEWS);
+ }
} else if (!strcmp(requestMeat, "/favicon.ico")) {
message=NULL;
ret = HTTP_NOTFOUND;