Przeglądaj źródła

HPCC-20719 Fix 2 problems in ESP Transaction Logging

1. the filterLogContent() should not overwrite original logging
request because other logging agent may use it;
2. wsloggingserviceagent.xsl should only create the setting for
one agent instance because multiple agent instances have been
handled by loggingmanager related xsl.

Signed-off-by: wangkx <kevin.wang@lexisnexis.com>
wangkx 6 lat temu
rodzic
commit
70218df8b5

+ 2 - 2
esp/logging/loggingagent/espserverloggingagent/loggingagent.cpp

@@ -303,9 +303,9 @@ bool CESPServerLoggingAgent::updateLog(IEspUpdateLogRequestWrap& req, IEspUpdate
     return true;
 }
 
-void CESPServerLoggingAgent::filterLogContent(IEspUpdateLogRequestWrap* req)
+IEspUpdateLogRequestWrap* CESPServerLoggingAgent::filterLogContent(IEspUpdateLogRequestWrap* req)
 {
-    logContentFilter.filterLogContent(req);
+    return logContentFilter.filterLogContent(req);
 }
 
 bool CESPServerLoggingAgent::sendHTTPRequest(StringBuffer& req, StringBuffer &resp, StringBuffer &status)

+ 1 - 1
esp/logging/loggingagent/espserverloggingagent/loggingagent.hpp

@@ -57,7 +57,7 @@ public:
     virtual bool getTransactionSeed(IEspGetTransactionSeedRequest& req, IEspGetTransactionSeedResponse& resp);
     virtual void getTransactionID(StringAttrMapping* transFields, StringBuffer& transactionID);
     virtual bool updateLog(IEspUpdateLogRequestWrap& req, IEspUpdateLogResponse& resp);
-    virtual void filterLogContent(IEspUpdateLogRequestWrap* req);
+    virtual IEspUpdateLogRequestWrap* filterLogContent(IEspUpdateLogRequestWrap* req);
 };
 
 #endif //__ESPSERVERLOGGINGAGENT__HPP__

+ 5 - 4
esp/logging/logginglib/loggingagentbase.cpp

@@ -143,7 +143,7 @@ void CLogContentFilter::filterLogContentTree(StringArray& filters, IPropertyTree
     }
 }
 
-void CLogContentFilter::filterLogContent(IEspUpdateLogRequestWrap* req)
+IEspUpdateLogRequestWrap* CLogContentFilter::filterLogContent(IEspUpdateLogRequestWrap* req)
 {
     const char* logContent = req->getUpdateLogRequest();
     Owned<IPropertyTree> logRequestTree = req->getLogRequestTree();
@@ -294,8 +294,8 @@ void CLogContentFilter::filterLogContent(IEspUpdateLogRequestWrap* req)
     StringBuffer updateLogRequestXML;
     toXML(updateLogRequestTree, updateLogRequestXML);
     ESPLOG(LogMax, "filtered content and option: <%s>", updateLogRequestXML.str());
-    req->clearOriginalContent();
-    req->setUpdateLogRequest(updateLogRequestXML.str());
+
+    return new CUpdateLogRequestWrap(req->getGUID(), req->getOption(), updateLogRequestXML.str());
 }
 
 void CDBLogAgentBase::readDBCfg(IPropertyTree* cfg, StringBuffer& server, StringBuffer& dbUser, StringBuffer& dbPassword)
@@ -550,7 +550,8 @@ void CDBLogAgentBase::getTransactionID(StringAttrMapping* transFields, StringBuf
     //Not implemented
 }
 
-void CDBLogAgentBase::filterLogContent(IEspUpdateLogRequestWrap* req)
+IEspUpdateLogRequestWrap* CDBLogAgentBase::filterLogContent(IEspUpdateLogRequestWrap* req)
 {
     //No filter in CDBSQLLogAgent
+    return req;
 }

+ 3 - 3
esp/logging/logginglib/loggingagentbase.hpp

@@ -241,7 +241,7 @@ interface IEspLogAgent : extends IInterface
     virtual bool getTransactionSeed(IEspGetTransactionSeedRequest& req, IEspGetTransactionSeedResponse& resp) = 0;
     virtual void getTransactionID(StringAttrMapping* transFields, StringBuffer& transactionID) = 0;
     virtual bool updateLog(IEspUpdateLogRequestWrap& req, IEspUpdateLogResponse& resp) = 0;
-    virtual void filterLogContent(IEspUpdateLogRequestWrap* req) = 0;
+    virtual IEspUpdateLogRequestWrap* filterLogContent(IEspUpdateLogRequestWrap* req) = 0;
 };
 
 class CESPLogContentGroupFilters : public CInterface, implements IInterface
@@ -281,7 +281,7 @@ public:
     CLogContentFilter() {};
 
     void readAllLogFilters(IPropertyTree* cfg);
-    void filterLogContent(IEspUpdateLogRequestWrap* req);
+    IEspUpdateLogRequestWrap* filterLogContent(IEspUpdateLogRequestWrap* req);
 };
 
 class LOGGINGCOMMON_API CDBLogAgentBase : public CInterface, implements IEspLogAgent
@@ -316,6 +316,6 @@ public:
     virtual bool getTransactionSeed(IEspGetTransactionSeedRequest& req, IEspGetTransactionSeedResponse& resp);
     virtual void getTransactionID(StringAttrMapping* transFields, StringBuffer& transactionID);
     virtual bool updateLog(IEspUpdateLogRequestWrap& req, IEspUpdateLogResponse& resp);
-    virtual void filterLogContent(IEspUpdateLogRequestWrap* req);
+    virtual IEspUpdateLogRequestWrap* filterLogContent(IEspUpdateLogRequestWrap* req);
 };
 #endif  //_LOGGINGAGENT_HPP__

+ 2 - 2
esp/logging/logginglib/logthread.cpp

@@ -158,9 +158,9 @@ bool CLogThread::queueLog(IEspUpdateLogRequest* logRequest)
 bool CLogThread::queueLog(IEspUpdateLogRequestWrap* logRequest)
 {
     unsigned startTime = (getEspLogLevel()>=LogNormal) ? msTick() : 0;
-    logAgent->filterLogContent(logRequest);
+    Owned<IEspUpdateLogRequestWrap> logRequestFiltered = logAgent->filterLogContent(logRequest);
     ESPLOG(LogNormal, "LThread:filterLog: %dms\n", msTick() -  startTime);
-    return enqueue(logRequest);
+    return enqueue(logRequestFiltered);
 }
 
 bool CLogThread::enqueue(IEspUpdateLogRequestWrap* logRequest)

+ 2 - 1
initfiles/componentfiles/configxml/@temp/esp_service_DynamicESDL.xsl

@@ -84,7 +84,8 @@
                             </xsl:when>
                             <xsl:when test="($wsLogServiceESPAgentNode)">
                                 <xsl:call-template name="WsLogServiceESPAgent">
-                                    <xsl:with-param name="managerNode" select="$managerNode"/>
+                                    <xsl:with-param name="agentName" select="$agentName"/>
+                                    <xsl:with-param name="agentNode" select="$wsLogServiceESPAgentNode"/>
                                 </xsl:call-template>
                             </xsl:when>
                             <xsl:otherwise>

+ 78 - 81
initfiles/componentfiles/configxml/@temp/wslogserviceespagent.xsl

@@ -23,100 +23,97 @@ xmlns:set="http://exslt.org/sets">
     <xsl:import href="esp_logging_transid.xsl"/>
 
     <xsl:template name="WsLogServiceESPAgent" type="DefaultLoggingAgent">
-        <xsl:param name="managerNode"/>
-        <xsl:for-each select="$managerNode/ESPLoggingAgent">
-            <xsl:variable name="agentName" select="@ESPLoggingAgent"/>
-            <xsl:variable name="agentNode" select="/Environment/Software/WsLogServiceESPAgent[@name=$agentName]"/>
-            <xsl:if test="not($agentNode)">
-                <xsl:message terminate="yes">An WsLogService ESP Logging Agent <xsl:value-of select="$agentName"/>  for <xsl:value-of select="$managerNode/@name"/> is undefined!</xsl:message>
+        <xsl:param name="agentName"/>
+        <xsl:param name="agentNode"/>
+        <xsl:if test="not($agentNode)">
+            <xsl:message terminate="yes">An WsLogService ESP Logging Agent <xsl:value-of select="$agentName"/> is undefined!</xsl:message>
+        </xsl:if>
+        <xsl:variable name="loggingServer" select="$agentNode/LoggingServer"/>
+        <xsl:if test="not($loggingServer)">
+            <xsl:message terminate="yes">ESP logging server is undefined for <xsl:value-of select="$agentName"/> </xsl:message>
+        </xsl:if>
+        <xsl:variable name="loggingServerUrl" select="$loggingServer/@Url"/>
+        <xsl:if test="string($loggingServerUrl) = ''">
+            <xsl:message terminate="yes">Logging Server URL is undefined for <xsl:value-of select="$agentName"/>!</xsl:message>
+        </xsl:if>
+        <xsl:variable name="logDataXPath" select="$agentNode/LogDataXPath"/>
+        <xsl:if test="not($logDataXPath)">
+            <xsl:message terminate="yes">Log Data XPath is undefined for <xsl:value-of select="$agentName"/> </xsl:message>
+        </xsl:if>
+
+        <LogAgent name="{$agentName}" type="LogAgent" services="GetTransactionSeed,UpdateLog,GetTransactionID" plugin="wslogserviceespagent">
+            <LoggingServer url="{$loggingServerUrl}" user="{$loggingServer/@User}" password="{$loggingServer/@Password}"/>
+            <xsl:if test="string($agentNode/@FailSafe) != ''">
+                <FailSafe><xsl:value-of select="$agentNode/@FailSafe"/></FailSafe>
+            </xsl:if>
+            <xsl:if test="string($agentNode/@FailSafeLogsDir) != ''">
+                <FailSafeLogsDir><xsl:value-of select="$agentNode/@FailSafeLogsDir"/></FailSafeLogsDir>
+            </xsl:if>
+            <xsl:if test="string($agentNode/@MaxLogQueueLength) != ''">
+                <MaxLogQueueLength><xsl:value-of select="$agentNode/@MaxLogQueueLength"/></MaxLogQueueLength>
             </xsl:if>
-            <xsl:variable name="loggingServer" select="$agentNode/LoggingServer"/>
-            <xsl:if test="not($loggingServer)">
-                <xsl:message terminate="yes">ESP logging server is undefined for <xsl:value-of select="$agentName"/> </xsl:message>
+            <xsl:if test="string($agentNode/@MaxTriesGTS) != ''">
+                <MaxTriesGTS><xsl:value-of select="$agentNode/@MaxTriesGTS"/></MaxTriesGTS>
             </xsl:if>
-            <xsl:variable name="loggingServerUrl" select="$loggingServer/@Url"/>
-            <xsl:if test="string($loggingServerUrl) = ''">
-                <xsl:message terminate="yes">Logging Server URL is undefined!</xsl:message>
+            <xsl:if test="string($agentNode/@MaxTriesRS) != ''">
+                <MaxTriesRS><xsl:value-of select="$agentNode/@MaxTriesRS"/></MaxTriesRS>
             </xsl:if>
-            <xsl:variable name="logDataXPath" select="$agentNode/LogDataXPath"/>
-            <xsl:if test="not($logDataXPath)">
-                <xsl:message terminate="yes">Log Data XPath is undefined for <xsl:value-of select="$agentName"/> </xsl:message>
+            <xsl:if test="string($agentNode/@QueueSizeSignal) != ''">
+                <QueueSizeSignal><xsl:value-of select="$agentNode/@QueueSizeSignal"/></QueueSizeSignal>
+            </xsl:if>
+            <xsl:if test="string($agentNode/@TransactionSeedType) != ''">
+                <TransactionSeedType><xsl:value-of select="$agentNode/@TransactionSeedType"/></TransactionSeedType>
+            </xsl:if>
+            <xsl:if test="string($agentNode/@AlternativeTransactionSeedType) != ''">
+                <AlternativeTransactionSeedType><xsl:value-of select="$agentNode/@AlternativeTransactionSeedType"/></AlternativeTransactionSeedType>
             </xsl:if>
 
-            <LogAgent name="{$agentName}" type="LogAgent" services="GetTransactionSeed,UpdateLog,GetTransactionID" plugin="wslogserviceespagent">
-                <LoggingServer url="{$loggingServerUrl}" user="{$loggingServer/@User}" password="{$loggingServer/@Password}"/>
-                <xsl:if test="string($agentNode/@FailSafe) != ''">
-                    <FailSafe><xsl:value-of select="$agentNode/@FailSafe"/></FailSafe>
+            <xsl:call-template name="EspLoggingTransactionID">
+                <xsl:with-param name="agentNode" select="$agentNode"/>
+            </xsl:call-template>
+                
+            <LogDataXPath>
+                <xsl:if test="string($logDataXPath/@IP) != ''">
+                    <IP><xsl:value-of select="$logDataXPath/@IP"/></IP>
                 </xsl:if>
-                <xsl:if test="string($agentNode/@FailSafeLogsDir) != ''">
-                    <FailSafeLogsDir><xsl:value-of select="$agentNode/@FailSafeLogsDir"/></FailSafeLogsDir>
+                <xsl:if test="string($logDataXPath/@UserName) != ''">
+                    <UserName><xsl:value-of select="$logDataXPath/@UserName"/></UserName>
                 </xsl:if>
-                <xsl:if test="string($agentNode/@MaxLogQueueLength) != ''">
-                    <MaxLogQueueLength><xsl:value-of select="$agentNode/@MaxLogQueueLength"/></MaxLogQueueLength>
+                <xsl:if test="string($logDataXPath/@ServiceName) != ''">
+                    <ServiceName><xsl:value-of select="$logDataXPath/@ServiceName"/></ServiceName>
                 </xsl:if>
-                <xsl:if test="string($agentNode/@MaxTriesGTS) != ''">
-                    <MaxTriesGTS><xsl:value-of select="$agentNode/@MaxTriesGTS"/></MaxTriesGTS>
+                <xsl:if test="string($logDataXPath/@RecordCount) != ''">
+                    <RecordCount><xsl:value-of select="$logDataXPath/@RecordCount"/></RecordCount>
                 </xsl:if>
-                <xsl:if test="string($agentNode/@MaxTriesRS) != ''">
-                    <MaxTriesRS><xsl:value-of select="$agentNode/@MaxTriesRS"/></MaxTriesRS>
+                <xsl:if test="string($logDataXPath/@DomainName) != ''">
+                    <DomainName><xsl:value-of select="$logDataXPath/@DomainName"/></DomainName>
                 </xsl:if>
-                <xsl:if test="string($agentNode/@QueueSizeSignal) != ''">
-                    <QueueSizeSignal><xsl:value-of select="$agentNode/@QueueSizeSignal"/></QueueSizeSignal>
+                <xsl:if test="string($logDataXPath/@GUID) != ''">
+                    <GUID><xsl:value-of select="$logDataXPath/@GUID"/></GUID>
                 </xsl:if>
-                <xsl:if test="string($agentNode/@TransactionSeedType) != ''">
-                    <TransactionSeedType><xsl:value-of select="$agentNode/@TransactionSeedType"/></TransactionSeedType>
+                <xsl:if test="string($logDataXPath/@BlindLogging) != ''">
+                    <BlindLogging><xsl:value-of select="$logDataXPath/@BlindLogging"/></BlindLogging>
                 </xsl:if>
-                <xsl:if test="string($agentNode/@AlternativeTransactionSeedType) != ''">
-                    <AlternativeTransactionSeedType><xsl:value-of select="$agentNode/@AlternativeTransactionSeedType"/></AlternativeTransactionSeedType>
+                <xsl:if test="string($logDataXPath/@EncryptedLogging) != ''">
+                    <EncryptedLogging><xsl:value-of select="$logDataXPath/@EncryptedLogging"/></EncryptedLogging>
                 </xsl:if>
-
-                <xsl:call-template name="EspLoggingTransactionID">
-                    <xsl:with-param name="agentNode" select="$agentNode"/>
-                </xsl:call-template>
-                
-                <LogDataXPath>
-                    <xsl:if test="string($logDataXPath/@IP) != ''">
-                        <IP><xsl:value-of select="$logDataXPath/@IP"/></IP>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@UserName) != ''">
-                        <UserName><xsl:value-of select="$logDataXPath/@UserName"/></UserName>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@ServiceName) != ''">
-                        <ServiceName><xsl:value-of select="$logDataXPath/@ServiceName"/></ServiceName>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@RecordCount) != ''">
-                        <RecordCount><xsl:value-of select="$logDataXPath/@RecordCount"/></RecordCount>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@DomainName) != ''">
-                        <DomainName><xsl:value-of select="$logDataXPath/@DomainName"/></DomainName>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@GUID) != ''">
-                        <GUID><xsl:value-of select="$logDataXPath/@GUID"/></GUID>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@BlindLogging) != ''">
-                        <BlindLogging><xsl:value-of select="$logDataXPath/@BlindLogging"/></BlindLogging>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@EncryptedLogging) != ''">
-                        <EncryptedLogging><xsl:value-of select="$logDataXPath/@EncryptedLogging"/></EncryptedLogging>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@ForwardLog) != ''">
-                        <ForwardLog><xsl:value-of select="$logDataXPath/@ForwardLog"/></ForwardLog>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@RawLogInformation) != ''">
-                        <RawLogInformation><xsl:value-of select="$logDataXPath/@RawLogInformation"/></RawLogInformation>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@CompressBlobs) != ''">
-                        <CompressBlobs><xsl:value-of select="$logDataXPath/@CompressBlobs"/></CompressBlobs>
-                    </xsl:if>
-                    <xsl:if test="string($logDataXPath/@WorkunitID) != ''">
-                        <WorkunitID><xsl:value-of select="$logDataXPath/@WorkunitID"/></WorkunitID>
-                    </xsl:if>
-                    <xsl:for-each select="$agentNode/LogInfo">
-                        <LogInfo name="{current()/@name}" valueXPath="{current()/@valueXPath}" dataXPath="{current()/@dataXPath}" multipleValue="{current()/@multipleValue}" multipleData="{current()/@multipleData}" encodeValue="{current()/@encodeValue}" encodeData="{current()/@encodeData}"/>
-                    </xsl:for-each>
-                </LogDataXPath>
-            </LogAgent>
-        </xsl:for-each>
+                <xsl:if test="string($logDataXPath/@ForwardLog) != ''">
+                    <ForwardLog><xsl:value-of select="$logDataXPath/@ForwardLog"/></ForwardLog>
+                </xsl:if>
+                <xsl:if test="string($logDataXPath/@RawLogInformation) != ''">
+                    <RawLogInformation><xsl:value-of select="$logDataXPath/@RawLogInformation"/></RawLogInformation>
+                </xsl:if>
+                <xsl:if test="string($logDataXPath/@CompressBlobs) != ''">
+                    <CompressBlobs><xsl:value-of select="$logDataXPath/@CompressBlobs"/></CompressBlobs>
+                </xsl:if>
+                <xsl:if test="string($logDataXPath/@WorkunitID) != ''">
+                    <WorkunitID><xsl:value-of select="$logDataXPath/@WorkunitID"/></WorkunitID>
+                </xsl:if>
+                <xsl:for-each select="$agentNode/LogInfo">
+                    <LogInfo name="{current()/@name}" valueXPath="{current()/@valueXPath}" dataXPath="{current()/@dataXPath}" multipleValue="{current()/@multipleValue}" multipleData="{current()/@multipleData}" encodeValue="{current()/@encodeValue}" encodeData="{current()/@encodeData}"/>
+                </xsl:for-each>
+            </LogDataXPath>
+        </LogAgent>
     </xsl:template>
 
 </xsl:stylesheet>