Kaynağa Gözat

Bug: #81901 - Move the code for Browsing Resource from ws_roxiequeryservice to ws_smc

Signed-off-by: Kevin Wang <kevin.wang@lexisnexis.com>
Kevin Wang 14 yıl önce
ebeveyn
işleme
3f97c6db8f

+ 0 - 38
esp/scm/ws_roxiequery.ecm

@@ -131,41 +131,6 @@ RoxieQueryDetailsResponse
     ESParray<ESPStruct RoxieQueryAlias> Aliases;
 };
 
-ESPStruct HPCCResource
-{
-    string Name;
-    string Description;
-    string FileName;
-    string Version;
-};
-
-ESPStruct HPCCResourceRepository
-{
-    string Name;
-    string Path;
-    ESParray<ESPstruct HPCCResource> HPCCResources;
-};
-
-ESPrequest
-[
-]
-BrowseResourcesRequest
-{
-};
-
-ESPresponse 
-[
-    exceptions_inline, nil_remove
-] 
-BrowseResourcesResponse
-{
-    string PortalURL;
-    string NetAddress;
-    int OS;
-    ESParray<ESPstruct HPCCResourceRepository> HPCCResourceRepositories;
-};
-    
-
 
 //  ===========================================================================
 ESPservice [
@@ -179,9 +144,6 @@ ESPservice [
     ESPmethod [resp_xsl_default("/esp/xslt/roxiequery_search.xslt")] RoxieQuerySearch(RoxieQuerySearchRequest, RoxieQuerySearchResponse);
     ESPmethod [resp_xsl_default("/esp/xslt/roxiequery.xslt")] RoxieQueryList(RoxieQueryListRequest, RoxieQueryListResponse);
     ESPmethod [resp_xsl_default("/esp/xslt/roxiequerydetails.xslt")] QueryDetails(RoxieQueryDetailsRequest, RoxieQueryDetailsResponse);
-
-    ESPmethod [resp_xsl_default("/esp/xslt/hpccresourcelist.xslt")] BrowseResources(BrowseResourcesRequest, BrowseResourcesResponse);
-
 };
 
 SCMexportdef(WsRoxieQuery);

+ 35 - 1
esp/scm/ws_smc.ecm

@@ -212,7 +212,39 @@ ESPresponse [exceptions_inline] NotInCommunityEditionResponse
 {
 };
 
-#include "xslprocessor.hpp" 
+ESPStruct HPCCResource
+{
+    string Name;
+    string Description;
+    string FileName;
+    string Version;
+};
+
+ESPStruct HPCCResourceRepository
+{
+    string Name;
+    string Path;
+    ESParray<ESPstruct HPCCResource> HPCCResources;
+};
+
+ESPrequest
+[
+]
+BrowseResourcesRequest
+{
+};
+
+ESPresponse
+[
+    exceptions_inline, nil_remove
+]
+BrowseResourcesResponse
+{
+    string PortalURL;
+    string NetAddress;
+    int OS;
+    ESParray<ESPstruct HPCCResourceRepository> HPCCResourceRepositories;
+};
 
 //ESPservice [noforms, version("1.04"), default_client_version("1.04"), exceptions_inline("./smc_xslt/exceptions.xslt")] WsSMC
 ESPservice [noforms, version("1.10"), default_client_version("1.10"), exceptions_inline("./smc_xslt/exceptions.xslt"), use_method_name] WsSMC
@@ -243,6 +275,8 @@ ESPservice [noforms, version("1.10"), default_client_version("1.10"), exceptions
     ESPmethod SetBanner(SetBannerRequest, SetBannerResponse);
 
     ESPmethod NotInCommunityEdition(NotInCommunityEditionRequest, NotInCommunityEditionResponse);
+
+    ESPmethod [resp_xsl_default("/esp/xslt/hpccresourcelist.xslt")] BrowseResources(BrowseResourcesRequest, BrowseResourcesResponse);
 };
 
 SCMexportdef(WSSMC);

+ 0 - 146
esp/services/ws_roxiequery/ws_roxiequeryservice.cpp

@@ -147,15 +147,6 @@ void CWsRoxieQueryEx::init(IPropertyTree *cfg, const char *process, const char *
 
     xslt = cfg->queryProp("xslt[@name='graphStats']");
     m_graphStatsXSLT.append(getCFD()).append( xslt && *xslt ? xslt : "smc_xslt/graphStats.xslt");
-
-    StringBuffer xpath;
-    xpath.appendf("Software/EspProcess[@name='%s']/EspService[@name='%s']", process, service);
-    IPropertyTree *local = cfg->queryPropTree(xpath.str());
-
-    xpath.clear().appendf("Software/EspProcess[@name='%s']/@portalurl", process, service);
-    const char* portalURL = cfg->queryProp(xpath.str());
-    if (portalURL && *portalURL)
-        m_portalURL.append(portalURL);
 }
 
 void CWsRoxieQueryEx::addToQueryString(StringBuffer &queryString, const char *name, const char *value)
@@ -645,140 +636,3 @@ bool CWsRoxieQueryEx::onQueryDetails(IEspContext &context, IEspRoxieQueryDetails
     }
     return true;
 }
-
-bool CWsRoxieQueryEx::onBrowseResources(IEspContext &context, IEspBrowseResourcesRequest & req, IEspBrowseResourcesResponse & resp)
-{
-    try
-    {
-        if (!context.validateFeatureAccess(FEATURE_URL, SecAccess_Read, false))
-            throw MakeStringException(ECLWATCH_ROXIE_QUERY_ACCESS_DENIED, "Failed to Browse Resources. Permission denied.");
-
-        if (m_portalURL.length() > 0)
-            resp.setPortalURL(m_portalURL.str());
-        
-                IArrayOf<IEspHPCCResourceRepository> resourcRepositories;
-
-        Owned<IEnvironmentFactory> factory = getEnvironmentFactory();
-        Owned<IConstEnvironment> constEnv = factory->openEnvironmentByFile();
-        Owned<IPropertyTree> pEnvRoot = &constEnv->getPTree();
-        const char* ossInstall = pEnvRoot->queryProp("EnvSettings/path");
-        if (!ossInstall || !*ossInstall)
-            return true;
-
-        //The resource files will be downloaded from the same box of ESP (not dali)
-        StringBuffer ipStr;
-        IpAddress ipaddr = queryHostIP();
-        ipaddr.getIpText(ipStr);
-        if (ipStr.length() > 0)
-        {
-            resp.setNetAddress(ipStr.str());
-            Owned<IConstMachineInfo> machine = constEnv->getMachineByAddress(ipStr.str());
-            if (machine)
-            {
-                int os = machine->getOS();
-                resp.setOS(os);
-            }
-        }
-
-        StringBuffer path;
-        path.appendf("%s/componentfiles/files/downloads", ossInstall);
-        Owned<IFile> f = createIFile(path.str());
-        if(f->exists())
-        {
-            if(!f->isDirectory())
-                throw MakeStringException(ECLWATCH_INVALID_DIRECTORY, "%s is not a directory.", path.str());
-
-            Owned<IDirectoryIterator> di = f->directoryFiles(NULL, false, true);
-            if(di.get() != NULL)
-            {
-                ForEach(*di) 
-                {
-                    StringBuffer path0, folder;
-
-                    if (!di->isDir())
-                        continue;
-
-                    di->getName(folder);
-                    if (folder.length() == 0)
-                        continue;
-
-                    StringArray files;
-                    IArrayOf<IEspHPCCResource> resourcs;
-                    path0.appendf("%s/%s/description.xml", path.str(), folder.str());
-                    Owned<IFile> f0 = createIFile(path0.str());
-                    if(f0->exists())
-                    {
-                        OwnedIFileIO rIO = f0->openShared(IFOread,IFSHfull);
-                        if(rIO)
-                        {
-                            StringBuffer tmpBuf;
-                            offset_t fileSize = f0->size();
-                            tmpBuf.ensureCapacity((unsigned)fileSize);
-                            tmpBuf.setLength((unsigned)fileSize);
-
-                            size32_t nRead = rIO->read(0, (size32_t) fileSize, (char*)tmpBuf.str());
-                            if (nRead == fileSize)
-                            {
-                                Owned<IPropertyTree> desc = createPTreeFromXMLString(tmpBuf.str(),false);
-                                if (desc)
-                                {
-                                    Owned<IPropertyTreeIterator> fileIterator = desc->getElements("file");
-                                    if (fileIterator->first()) 
-                                    {
-                                        do {
-                                            IPropertyTree &fileItem = fileIterator->query();
-                                            const char* filename = fileItem.queryProp("filename");
-                                            if (!filename || !*filename)
-                                                continue;
-
-                                            StringBuffer pathStr(filename);
-                                            files.append(pathStr.toLowerCase());
-
-                                            const char* name0 = fileItem.queryProp("name");
-                                            const char* description0 = fileItem.queryProp("description");
-                                            const char* version0 = fileItem.queryProp("version");
-                                            
-                                            Owned<IEspHPCCResource> onefile = createHPCCResource();
-
-                                            onefile->setFileName(filename);
-                                            if (name0 && *name0)
-                                                onefile->setName(name0);
-                                            if (description0 && *description0)
-                                                onefile->setDescription(description0);
-                                            if (version0 && *version0)
-                                                onefile->setVersion(version0);
-
-                                            resourcs.append(*onefile.getLink());
-
-                                        } while (fileIterator->next());
-                                    }
-                                }
-                            }
-                        }
-                    }
-                    StringBuffer path1;
-                    path1.appendf("%s/%s", path.str(), folder.str());
-
-                    if (resourcs.ordinality())
-                    {
-                        Owned<IEspHPCCResourceRepository> oneRepository = createHPCCResourceRepository();
-                        oneRepository->setName(folder.str());
-                        oneRepository->setPath(path1.str());
-                        oneRepository->setHPCCResources(resourcs);
-
-                        resourcRepositories.append(*oneRepository.getLink());
-                    }
-                }
-            }
-        }
-            
-        if (resourcRepositories.ordinality())
-            resp.setHPCCResourceRepositories(resourcRepositories);
-    }
-    catch(IException* e)
-    {   
-        FORWARDEXCEPTION(e, ECLWATCH_INTERNAL_ERROR);
-    }
-
-    return true;
-}

+ 0 - 6
esp/services/ws_roxiequery/ws_roxiequeryservice.hpp

@@ -59,9 +59,6 @@ public:
             path.appendf("&EEPortal=%s", m_portalURL.str());
         ensureNavLink(*folder, "Search Roxie Files",path.str(), "Search Roxie Files", NULL, NULL, 2);
         ensureNavLink(*folder, "View Roxie Files", path.str(), "View Roxie Files", NULL, NULL, 3);
-
-        IPropertyTree *folderTools = ensureNavFolder(data, "Resources", "HPCC Resources", NULL, false, 8);
-        ensureNavLink(*folderTools, "Browse", "/WsRoxieQuery/BrowseResources", "List HPCC Resources for Download", NULL, NULL, 1);
     }
 };
 
@@ -74,7 +71,6 @@ private:
 
     StringBuffer m_attsXSLT;
     StringBuffer m_graphStatsXSLT;
-    StringBuffer m_portalURL;
 
 public:
     IMPLEMENT_IINTERFACE;
@@ -85,8 +81,6 @@ public:
     bool onRoxieQueryList(IEspContext &context, IEspRoxieQueryListRequest &req, IEspRoxieQueryListResponse &resp);
     bool onQueryDetails(IEspContext &context, IEspRoxieQueryDetailsRequest & req, IEspRoxieQueryDetailsResponse & resp);
 
-    virtual bool onBrowseResources(IEspContext &context, IEspBrowseResourcesRequest & req, IEspBrowseResourcesResponse & resp);
-
 private:
     void addToQueryString(StringBuffer &queryString, const char *name, const char *value);
     void addToQueryStringFromInt(StringBuffer &queryString, const char *name, int value);

+ 161 - 0
esp/services/ws_smc/ws_smcService.cpp

@@ -127,6 +127,12 @@ void CWsSMCEx::init(IPropertyTree *cfg, const char *process, const char *service
     m_BannerSize = "4";
     m_BannerColor = "red";
     m_BannerScroll = "2";
+
+    StringBuffer xpath;
+    xpath.appendf("Software/EspProcess[@name='%s']/@portalurl", process, service);
+    const char* portalURL = cfg->queryProp(xpath.str());
+    if (portalURL && *portalURL)
+        m_PortalURL.append(portalURL);
 }
 
 static void countProgress(IPropertyTree *t,unsigned &done,unsigned &total)
@@ -1327,6 +1333,161 @@ bool CWsSMCEx::onNotInCommunityEdition(IEspContext &context, IEspNotInCommunityE
    return true;
 }
 
+
+bool CWsSMCEx::onBrowseResources(IEspContext &context, IEspBrowseResourcesRequest & req, IEspBrowseResourcesResponse & resp)
+{
+    try
+    {
+        if (!context.validateFeatureAccess(FEATURE_URL, SecAccess_Read, false))
+            throw MakeStringException(ECLWATCH_SMC_ACCESS_DENIED, "Failed to Browse Resources. Permission denied.");
+
+        Owned<IEnvironmentFactory> factory = getEnvironmentFactory();
+        Owned<IConstEnvironment> constEnv = factory->openEnvironmentByFile();
+
+        //The resource files will be downloaded from the same box of ESP (not dali)
+        StringBuffer ipStr;
+        IpAddress ipaddr = queryHostIP();
+        ipaddr.getIpText(ipStr);
+        if (ipStr.length() > 0)
+        {
+            resp.setNetAddress(ipStr.str());
+            Owned<IConstMachineInfo> machine = constEnv->getMachineByAddress(ipStr.str());
+            if (machine)
+            {
+                int os = machine->getOS();
+                resp.setOS(os);
+            }
+        }
+
+        if (m_PortalURL.length() > 0)
+            resp.setPortalURL(m_PortalURL.str());
+
+        //Now, get a list of resources stored inside the ESP box
+        IArrayOf<IEspHPCCResourceRepository> resourceRepositories;
+
+        Owned<IPropertyTree> pEnvRoot = &constEnv->getPTree();
+        const char* ossInstall = pEnvRoot->queryProp("EnvSettings/path");
+        if (!ossInstall || !*ossInstall)
+        {
+            DBGLOG("Failed to get EnvSettings/Path in environment settings.");
+            return true;
+        }
+
+        StringBuffer path;
+        path.appendf("%s/componentfiles/files/downloads", ossInstall);
+        Owned<IFile> f = createIFile(path.str());
+        if(!f->exists() || !f->isDirectory())
+        {
+            DBGLOG("Invalid resource folder");
+            return true;
+        }
+
+        Owned<IDirectoryIterator> di = f->directoryFiles(NULL, false, true);
+        if(di.get() == NULL)
+        {
+            DBGLOG("Resource folder is empty.");
+            return true;
+        }
+
+        ForEach(*di)
+        {
+            if (!di->isDir())
+                continue;
+
+            StringBuffer folder, path0, tmpBuf;
+            di->getName(folder);
+            if (folder.length() == 0)
+                continue;
+
+            path0.appendf("%s/%s/description.xml", path.str(), folder.str());
+            Owned<IFile> f0 = createIFile(path0.str());
+            if(!f0->exists())
+            {
+                DBGLOG("Description file not found for %s", folder.str());
+                continue;
+            }
+
+            OwnedIFileIO rIO = f0->openShared(IFOread,IFSHfull);
+            if(!rIO)
+            {
+                DBGLOG("Failed to open the description file for %s", folder.str());
+                continue;
+            }
+
+            offset_t fileSize = f0->size();
+            tmpBuf.ensureCapacity((unsigned)fileSize);
+            tmpBuf.setLength((unsigned)fileSize);
+
+            size32_t nRead = rIO->read(0, (size32_t) fileSize, (char*)tmpBuf.str());
+            if (nRead != fileSize)
+            {
+                DBGLOG("Failed to read the description file for %s", folder.str());
+                continue;
+            }
+
+            Owned<IPropertyTree> desc = createPTreeFromXMLString(tmpBuf.str(),false);
+            if (!desc)
+            {
+                DBGLOG("Invalid description file for %s", folder.str());
+                continue;
+            }
+
+            Owned<IPropertyTreeIterator> fileIterator = desc->getElements("file");
+            if (!fileIterator->first())
+            {
+                DBGLOG("Invalid description file for %s", folder.str());
+                continue;
+            }
+
+            IArrayOf<IEspHPCCResource> resourcs;
+
+            do {
+                IPropertyTree &fileItem = fileIterator->query();
+                const char* filename = fileItem.queryProp("filename");
+                if (!filename || !*filename)
+                    continue;
+
+                const char* name0 = fileItem.queryProp("name");
+                const char* description0 = fileItem.queryProp("description");
+                const char* version0 = fileItem.queryProp("version");
+
+                Owned<IEspHPCCResource> onefile = createHPCCResource();
+                onefile->setFileName(filename);
+                if (name0 && *name0)
+                    onefile->setName(name0);
+                if (description0 && *description0)
+                    onefile->setDescription(description0);
+                if (version0 && *version0)
+                    onefile->setVersion(version0);
+
+                resourcs.append(*onefile.getLink());
+            } while (fileIterator->next());
+
+            if (resourcs.ordinality())
+            {
+                StringBuffer path1;
+                path1.appendf("%s/%s", path.str(), folder.str());
+
+                Owned<IEspHPCCResourceRepository> oneRepository = createHPCCResourceRepository();
+                oneRepository->setName(folder.str());
+                oneRepository->setPath(path1.str());
+                oneRepository->setHPCCResources(resourcs);
+
+                resourceRepositories.append(*oneRepository.getLink());
+            }
+        }
+
+        if (resourceRepositories.ordinality())
+            resp.setHPCCResourceRepositories(resourceRepositories);
+    }
+    catch(IException* e)
+    {
+        FORWARDEXCEPTION(e, ECLWATCH_INTERNAL_ERROR);
+    }
+
+    return true;
+}
+
 int CWsSMCSoapBindingEx::onGetForm(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *service, const char *method)
 {
     try

+ 6 - 0
esp/services/ws_smc/ws_smcService.hpp

@@ -34,6 +34,7 @@ class CWsSMCEx : public CWsSMC
     StringBuffer m_BannerSize;
     StringBuffer m_BannerColor;
     StringBuffer m_BannerScroll;
+    StringBuffer m_PortalURL;
     int m_BannerAction;
     bool m_EnableChatURL;
 
@@ -59,6 +60,8 @@ public:
     bool onSetBanner(IEspContext &context, IEspSetBannerRequest &req, IEspSetBannerResponse& resp);
     bool onNotInCommunityEdition(IEspContext &context, IEspNotInCommunityEditionRequest &req, IEspNotInCommunityEditionResponse &resp);
 
+    virtual bool onBrowseResources(IEspContext &context, IEspBrowseResourcesRequest & req, IEspBrowseResourcesResponse & resp);
+
 private:
     void addCapabilities( IPropertyTree* pFeatureNode, const char* access, 
                                  IArrayOf<IEspCapability>& capabilities);
@@ -91,6 +94,9 @@ public:
         IPropertyTree *folder = ensureNavFolder(data, "Clusters", "Clusters", NULL, false, 1);
         ensureNavLink(*folder, "Activity", "/WsSMC/Activity", "View Activity", NULL, NULL, 1);
         ensureNavLink(*folder, "Scheduler", "/WsWorkunits/WUShowScheduled", "Show Scheduled WUs", NULL, NULL, 2);
+
+        IPropertyTree *folderTools = ensureNavFolder(data, "Resources", "HPCC Resources", NULL, false, 8);
+        ensureNavLink(*folderTools, "Browse", "/WsSMC/BrowseResources", "List HPCC Resources for Download", NULL, NULL, 1);
     }
     virtual void getNavSettings(int &width, bool &resizable, bool &scroll)
     {