source: branches/prototype-v0/zoo-project/zoo-services/utils/status/service.c @ 839

Last change on this file since 839 was 839, checked in by djay, 7 years ago

Update the source code for HPC support. Automatically adding nested outputs for the HPC support (should this be available for every support?). Add capability to store the metadata in the Collection DataBase?. Addition of the zcfg2sql to import any existing ZCFG file into the Collection DB. Add the support to invoke a callback (for history purpose) in case a [callback] section contains at least one parameter defined (url). Add support to convert maps and map to JSON (for callback use only by now). Fix some memory leaks (some are still there).

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc
File size: 5.3 KB
Line 
1/**
2 * Author : Gérald FENOY
3 *
4 * Copyright 2008-2009 GeoLabs SARL. All rights reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24
25
26#include "service.h"
27#include "service_internal.h"
28
29#include <libxml/tree.h>
30#include <libxml/parser.h>
31#include <libxml/xpath.h>
32#include <libxml/xpathInternals.h>
33
34#include <libxslt/xslt.h>
35#include <libxslt/xsltInternals.h>
36#include <libxslt/transform.h>
37#include <libxslt/xsltutils.h>
38
39#include <dirent.h>
40extern "C" {
41
42  /**
43   * GetStatus ZOO Service :
44   * This service is used in the ZOO-Project to get information about Services
45   * running as background tasks. The service will first get the XML document
46   * cached by the ZOO-Kernel before calling effectively the Service, then
47   * will access the shared memory space created by the Kernel to extract the
48   * current status of the running Service. Using a simple XSL file it will
49   * finally produce the final ExecuteResponse including the updated
50   * percentCompleted attribute of the ProcessStarted node of the cached
51   * document if any (so if the Service is currently running) else it will
52   * return the final ExecuteResponse stored on the Server file system.
53   */
54  ZOO_DLL_EXPORT int GetStatus(maps*& conf,maps*& inputs,maps*& outputs){         
55    const char *params[4 + 1];
56    int xmlLoadExtDtdDefaultValue;
57    map* tmpMap=NULL,*tmpMmap=NULL, *tmpTmap=NULL;
58
59    tmpMap=getMapFromMaps(inputs,"sid","value");
60    tmpTmap=getMapFromMaps(conf,"main","tmpPath");
61    tmpMmap=getMapFromMaps(conf,"main","dataPath");
62    if(tmpMmap==NULL)
63      tmpMmap=tmpTmap;
64    xmlInitParser();
65    int hasFile=-1;
66    char xslFileName[1024];
67    char* mem=_getStatusFile(conf,tmpMap->value);
68    if(mem==NULL){
69      char tmp[1024];
70      snprintf(tmp,1024,_ss("GetStatus was unable to find any cache file for Service ID %s."),tmpMap->value);
71      setMapInMaps(conf,"lenv","message",tmp);
72      return SERVICE_FAILED;
73    }
74    sprintf(xslFileName,"%s/updateStatus.xsl",tmpMmap->value);
75    xmlSubstituteEntitiesDefault(1);
76    xmlLoadExtDtdDefaultValue = 0;
77    xsltStylesheetPtr cur = NULL;
78    xmlDocPtr doc, res;
79    cur = xsltParseStylesheetFile(BAD_CAST xslFileName);
80    doc = xmlParseMemory(mem,strlen(mem));
81    //doc = xmlParseFile(fileName);
82    if(cur!=NULL && doc!=NULL){
83      /**
84       * Parse Status to extract Status / Message
85       */
86      char *tmpStr=_getStatus(conf,tmpMap->value);
87      //#ifdef DEBUG
88      fprintf(stderr,"DEBUG: %s \n",tmpStr);
89      //#endif
90      if(tmpStr!=NULL && strncmp(tmpStr,"-1",2)!=0){
91        char *tmpStr1=strdup(tmpStr);
92        char *tmpStr0=strdup(strstr(tmpStr,"|")+1);
93        free(tmpStr);
94        tmpStr1[strlen(tmpStr1)-strlen(tmpStr0)-1]='\0';
95        char *tmpStrFinal=(char*)malloc((strlen(tmpStr0)+11)*sizeof(char));
96        sprintf(tmpStrFinal,"string(\"%s\")",tmpStr0);
97        params[0]="value";
98        params[1]=tmpStr1;
99        params[2]="message";
100        params[3]=tmpStrFinal;
101        params[4]=NULL;
102        res = xsltApplyStylesheet(cur, doc, params);
103        xmlChar *xmlbuff;
104        int buffersize;
105        xmlDocDumpFormatMemory(res, &xmlbuff, &buffersize, 1);
106        setMapInMaps(outputs,"Result","value",(char*)xmlbuff);
107        xmlFree(xmlbuff);
108        free(tmpStr1);
109        free(tmpStr0);
110        free(tmpStrFinal);
111      }else{
112        xmlChar *xmlbuff;
113        int buffersize;
114        xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);
115        setMapInMaps(outputs,"Result","value",(char*)xmlbuff);
116        xmlFree(xmlbuff);
117      }
118    }
119    else{
120      char tmp[1024];
121      sprintf(tmp,_ss("ZOO GetStatus Service was unable to parse the cache xml file available for the Service ID %s."),tmpMap->value);
122      setMapInMaps(conf,"lenv","message",tmp);
123      return SERVICE_FAILED;
124    }
125    return SERVICE_SUCCEEDED;
126  }
127
128
129  /**
130   * longProcess ZOO Service :
131   * Simple Service which just loop over 100 times then return a welcome message
132   * string, at each step the service will sleep for one second.
133   */
134#ifdef WIN32
135  __declspec(dllexport)
136#endif
137  int longProcess(maps*& conf,maps*& inputs,maps*& outputs){
138    int i=0;
139    while(i<100){
140      char message[10];
141      sprintf(message,"Step %d",i);
142      fprintf (stderr, "RUN IN BACKGROUND MODE %s %d \n",__FILE__,__LINE__);
143      fflush(stderr);
144      updateStatus(conf,i,message);
145#ifndef WIN32
146      sleep(1);
147#else
148      Sleep(1000);
149#endif
150      i+=5;
151    }
152    setOutputValue(outputs,"Result",(char*)"\"Long process run successfully\"",-1);
153    return SERVICE_SUCCEEDED;
154  }
155
156}
Note: See TracBrowser for help on using the repository browser.

Search

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png