Browse Source

For legacy workunit, allows a user to enter ip of slave.

Signed-off-by: Kevin Wang <kevin.wang@lexisnexis.com>
Kevin Wang 13 years ago
parent
commit
ff18904dc3

+ 37 - 4
esp/eclwatch/ws_XSLT/wuid.xslt

@@ -94,6 +94,27 @@
                    return false;
             }
 
+            function CheckSlaveAddress(e)
+            {
+                if (document.getElementById('SlaveAddress').disabled == 'true')
+                    return false;
+
+                var key;
+                if (window.event)
+                   key = window.event.keyCode;
+                else if (e)
+                   key = e.which;
+                else
+                   return true;
+
+                var keychar = String.fromCharCode(key);
+
+                if ((("0123456789_.").indexOf(keychar) > -1))
+                   return true;
+                else
+                   return false;
+            }
+
             function thorProcessChanged(value)
             {
                 pos = value.indexOf('@');
@@ -125,8 +146,7 @@
 
             function GetThorSlaveLog()
             {
-                var el = document.getElementById('NumberSlaves');
-                if (el != undefined)
+                if (document.getElementById('NumberSlaves') != undefined)
                 {
                     var slaveNum = document.getElementById('SlaveNum').value;
                     if (slaveNum > numberOfSlaves)
@@ -134,10 +154,23 @@
                         alert('Slave Number cannot be greater than ' + numberOfSlaves);
                         return;
                     }
+
+                    getOptions('ThorSlave.log', '/WsWorkunits/WUFile?Wuid='+wid+'&Type=ThorSlaveLog&Process='
+                    +thorProcess+'&ClusterGroup='+thorGroup+'&LogDate='+thorLogDate+'&SlaveNumber='+slaveNum, true);
                 }
+                else
+                {
+                    var el = document.getElementById('SlaveAddress');
+                    if (el.value == '')
+                    {
+                        alert('Slave address not specified');
+                        return;
+                    }
 
-                getOptions('ThorSlave.log', '/WsWorkunits/WUFile?Wuid='+wid+'&Type=ThorSlaveLog&Process='
-                +thorProcess+'&ClusterGroup='+thorGroup+'&LogDate='+thorLogDate+'&SlaveNumber='+slaveNum, true);
+                    getOptions('ThorSlave.log', '/WsWorkunits/WUFile?Wuid='+wid+'&Type=ThorSlaveLog&SlaveNumber=0&Process='
+                    +document.getElementById('ProcessName').value+'&IPAddress='+el.value+'&LogDate='
+                    +document.getElementById('LogDate').value, true);
+                }
             }
 
             // This function gets called when the window has completely loaded.

+ 20 - 13
esp/eclwatch/ws_XSLT/wuidcommon.xslt

@@ -731,19 +731,26 @@
                     <td colspan="3">
                         <div style="border:1px solid grey;">
                             <input id="getthorslavelog" type="button" value="Get slave log" onclick="GetThorSlaveLog()"> </input>
-                            Thor Process: <select id="ThorProcess" name="ThorProcess" onchange="thorProcessChanged(options[selectedIndex].value)">
-                                <xsl:for-each select="ThorLogList/ThorLogInfo">
-                                    <xsl:variable name="val">
-                                        <xsl:value-of select="./NumberSlaves"/>@<xsl:value-of select="./LogDate"/>@<xsl:value-of select="./ProcessName"/>@<xsl:value-of select="./ClusterGroup"/>
-                                    </xsl:variable>
-                                    <option value="{$val}">
-                                        <xsl:value-of select="./ProcessName"/>
-                                    </option>
-                                </xsl:for-each>
-                            </select>
-                            <xsl:if test="number(ThorLogList/ThorLogInfo[1]/NumberSlaves) != 0">
-                                Slave Number<span id="NumberSlaves"></span>: <input type="text" id="SlaveNum" name="SlaveNum" value="1" size="4" onkeypress="return CheckSlaveNum(event);"/>
-                            </xsl:if>
+                            <xsl:choose>
+                                <xsl:when test="number(ThorLogList/ThorLogInfo[1]/NumberSlaves) != 0">
+                                    Thor Process: <select id="ThorProcess" name="ThorProcess" onchange="thorProcessChanged(options[selectedIndex].value)">
+                                    <xsl:for-each select="ThorLogList/ThorLogInfo">
+                                        <xsl:variable name="val">
+                                            <xsl:value-of select="./NumberSlaves"/>@<xsl:value-of select="./LogDate"/>@<xsl:value-of select="./ProcessName"/>@<xsl:value-of select="./ClusterGroup"/>
+                                        </xsl:variable>
+                                        <option value="{$val}">
+                                            <xsl:value-of select="./ProcessName"/>
+                                        </option>
+                                    </xsl:for-each>
+                                    </select>
+                                    Slave Number<span id="NumberSlaves"></span>: <input type="text" id="SlaveNum" name="SlaveNum" value="1" size="4" onkeypress="return CheckSlaveNum(event);"/>
+                                </xsl:when>
+                                <xsl:otherwise>
+                                    <input type="hidden" id="ProcessName" value="{ThorLogList/ThorLogInfo[1]/ProcessName}"/>
+                                    <input type="hidden" id="LogDate" value="{ThorLogList/ThorLogInfo[1]/LogDate}"/>
+                                    on: <input type="text" id="SlaveAddress" name="SlaveAddress" value="" size="16" onkeypress="return CheckSlaveAddress(event);"/>
+                                </xsl:otherwise>
+                            </xsl:choose>
                         </div>
                     </td>
                 </tr>

+ 16 - 15
esp/services/ws_workunits/ws_workunitsHelpers.cpp

@@ -1726,25 +1726,26 @@ void WsWuInfo::getWorkunitThorLog(const char* processName, MemoryBuffer& buf)
     }
 }
 
-void WsWuInfo::getWorkunitThorSlaveLog(const char *groupName, const char* logDate, const char* logDir, int slaveNum, MemoryBuffer& buf, bool forDownload)
+void WsWuInfo::getWorkunitThorSlaveLog(const char *groupName, const char *ipAddress, const char* logDate, const char* logDir, int slaveNum, MemoryBuffer& buf, bool forDownload)
 {
-    if (isEmpty(groupName))
-      throw MakeStringException(ECLWATCH_INVALID_INPUT,"Thor group not specified.");
     if (isEmpty(logDir))
       throw MakeStringException(ECLWATCH_INVALID_INPUT,"ThorSlave log path not specified.");
     if (isEmpty(logDate))
         throw MakeStringException(ECLWATCH_INVALID_INPUT,"ThorSlave log date not specified.");
 
     StringBuffer slaveIPAddress, logName;
-    Owned<IGroup> nodeGroup = queryNamedGroupStore().lookup(groupName);
-    if (!nodeGroup || (nodeGroup->ordinality() == 0))
-    {
-        WARNLOG("Node group %s not found", groupName);
-        return;
-    }
-
     if (slaveNum > 0)
     {
+        if (isEmpty(groupName))
+          throw MakeStringException(ECLWATCH_INVALID_INPUT,"Thor group not specified.");
+
+        Owned<IGroup> nodeGroup = queryNamedGroupStore().lookup(groupName);
+        if (!nodeGroup || (nodeGroup->ordinality() == 0))
+        {
+            WARNLOG("Node group %s not found", groupName);
+            return;
+        }
+
         nodeGroup->queryNode(slaveNum-1).endpoint().getIpText(slaveIPAddress);
         if (slaveIPAddress.length() < 1)
             throw MakeStringException(ECLWATCH_INVALID_INPUT,"ThorSlave log network address not found.");
@@ -1752,13 +1753,13 @@ void WsWuInfo::getWorkunitThorSlaveLog(const char *groupName, const char* logDat
         logName.appendf("thorslave.%d.%s.log", slaveNum, logDate);
     }
     else
-    {//legacy wuid
-        nodeGroup->queryNode(0).endpoint().getIpText(slaveIPAddress);
-        if (slaveIPAddress.length() < 1)
-            throw MakeStringException(ECLWATCH_INVALID_INPUT,"ThorSlave log network address not found.");
+    {//legacy wuid: a user types in an IP address for a thor slave
+        if (isEmpty(ipAddress))
+            throw MakeStringException(ECLWATCH_INVALID_INPUT,"ThorSlave address not specified.");
 
         //thorslave.10.239.219.6_20100.2012_05_23.log
-        logName.appendf("thorslave.%s_*.%s.log", slaveIPAddress.str(), logDate);
+        logName.appendf("thorslave.%s_*.%s.log", ipAddress, logDate);
+        slaveIPAddress.append(ipAddress);
     }
 
     RemoteFilename rfn;

+ 1 - 1
esp/services/ws_workunits/ws_workunitsHelpers.hpp

@@ -166,7 +166,7 @@ public:
 
     void getWorkunitEclAgentLog(const char* eclAgentInstance, MemoryBuffer& buf);
     void getWorkunitThorLog(const char *processName, MemoryBuffer& buf);
-    void getWorkunitThorSlaveLog(const char *groupName, const char* logDate, const char* logDir, int slaveNum, MemoryBuffer& buf, bool forDownload);
+    void getWorkunitThorSlaveLog(const char *groupName, const char *ipAddress, const char* logDate, const char* logDir, int slaveNum, MemoryBuffer& buf, bool forDownload);
     void getWorkunitResTxt(MemoryBuffer& buf);
     void getWorkunitArchiveQuery(MemoryBuffer& buf);
     void getWorkunitDll(StringBuffer &name, MemoryBuffer& buf);

+ 1 - 1
esp/services/ws_workunits/ws_workunitsService.cpp

@@ -2431,7 +2431,7 @@ bool CWsWorkunitsEx::onWUFile(IEspContext &context,IEspWULogFileRequest &req, IE
                 StringBuffer logDir;
                 getConfigurationDirectory(directories, "log", "thor", req.getProcess(), logDir);
 
-                winfo.getWorkunitThorSlaveLog(req.getClusterGroup(), req.getLogDate(), logDir.str(), req.getSlaveNumber(), mb, false);
+                winfo.getWorkunitThorSlaveLog(req.getClusterGroup(), req.getIPAddress(), req.getLogDate(), logDir.str(), req.getSlaveNumber(), mb, false);
                 openSaveFile(context, opt, "ThorSlave.log", HTTP_TYPE_TEXT_PLAIN, mb, resp);
             }
             else if (strieq(File_EclAgentLog,req.getType()))