diff options
author | Henri Herscher <henri@oreka.org> | 2007-02-07 20:06:09 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2007-02-07 20:06:09 +0000 |
commit | 6921d5b3d1a4a2de5cbf806c98b1272af42c9fdc (patch) | |
tree | 71f9dce05d944961ad056f52ca7435839643ac32 /orkbasecxx | |
parent | df00070ac0bd9dda8503a33b713275e8d1ee0af3 (diff) |
Added OS errno logging when an OrkClient HTTP request fails.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@404 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkbasecxx')
-rw-r--r-- | orkbasecxx/LogManager.cpp | 1 | ||||
-rw-r--r-- | orkbasecxx/LogManager.h | 3 | ||||
-rw-r--r-- | orkbasecxx/OrkClient.cpp | 32 | ||||
-rw-r--r-- | orkbasecxx/OrkClient.h | 7 |
4 files changed, 41 insertions, 2 deletions
diff --git a/orkbasecxx/LogManager.cpp b/orkbasecxx/LogManager.cpp index a6d4e8a..2162ef9 100644 --- a/orkbasecxx/LogManager.cpp +++ b/orkbasecxx/LogManager.cpp @@ -56,6 +56,7 @@ void OrkLogManager::Initialize() configLog = Logger::getLogger("config"); tapelistLog = Logger::getLogger("tapelist"); tapeLog = Logger::getLogger("tape"); + clientLog = Logger::getLogger("orkclient"); } void OrkLogManager::Shutdown() diff --git a/orkbasecxx/LogManager.h b/orkbasecxx/LogManager.h index a66d357..1a73519 100644 --- a/orkbasecxx/LogManager.h +++ b/orkbasecxx/LogManager.h @@ -40,13 +40,12 @@ public: LoggerPtr configLog; LoggerPtr tapelistLog; LoggerPtr tapeLog; + LoggerPtr clientLog; private: static OrkLogManager m_orkLogManager; }; -//typedef ACE_Singleton<OrkLogManager, ACE_Thread_Mutex> OrkLogManagerSingleton; - #define LOG (*OrkLogManager::Instance()) #endif diff --git a/orkbasecxx/OrkClient.cpp b/orkbasecxx/OrkClient.cpp index 8fe5634..643f24e 100644 --- a/orkbasecxx/OrkClient.cpp +++ b/orkbasecxx/OrkClient.cpp @@ -16,6 +16,7 @@ #include "ace/INET_Addr.h" #include "ace/SOCK_Connector.h" #include "ace/SOCK_Stream.h" +#include "LogManager.h" #ifdef WIN32 #define IOV_TYPE char* @@ -23,13 +24,32 @@ #define IOV_TYPE void* #endif +time_t OrkClient::s_lastErrorReportedTime = 0; + +OrkClient::OrkClient() +{ + m_log = OrkLogManager::Instance()->clientLog; +} + +OrkClient::LogError(CStdString& logMsg) +{ + if((time(NULL) - s_lastErrorReportedTime) > 60) + { + s_lastErrorReportedTime = time(NULL); + LOG4CXX_ERROR(m_log, logMsg); + } +} + bool OrkHttpClient::ExecuteUrl(CStdString& request, CStdString& response, CStdString& hostname, int tcpPort, int timeout) { + CStdString logMsg; ACE_SOCK_Connector connector; ACE_SOCK_Stream peer; ACE_INET_Addr peer_addr; if(timeout < 1){timeout = 1;} ACE_Time_Value aceTimeout (timeout); + CStdString requestDetails; + requestDetails.Format("timeout:%d http://%s:%d/%s", timeout, hostname, tcpPort, request); time_t beginRequestTimestamp = time(NULL); char szTcpPort[10]; @@ -54,6 +74,8 @@ bool OrkHttpClient::ExecuteUrl(CStdString& request, CStdString& response, CStdSt if (peer_addr.set (tcpPort, (PCSTR)hostname) == -1) { + logMsg.Format("peer_addr.set() errno=%d %s", errno, requestDetails); + LogError(logMsg); return false; } else if (connector.connect (peer, peer_addr, &aceTimeout) == -1) @@ -61,10 +83,14 @@ bool OrkHttpClient::ExecuteUrl(CStdString& request, CStdString& response, CStdSt if (errno == ETIME) { } + logMsg.Format("connector.connect() errno=%d %s", errno, requestDetails); + LogError(logMsg); return false; } else if (peer.sendv_n (iov, 8, &aceTimeout) == -1) { + logMsg.Format("peer.sendv_n errno=%d %s", errno, requestDetails); + LogError(logMsg); return false; } @@ -103,10 +129,14 @@ bool OrkHttpClient::ExecuteUrl(CStdString& request, CStdString& response, CStdSt if(numReceived < 0) { + logMsg.Format("numReceived:%d %s", numReceived, requestDetails); + LogError(logMsg); return false; } if(header.size() <= 0 || response.size() <= 0) { + logMsg.Format("header size:%d response size:%d %s", header.size(), response.size(), requestDetails); + LogError(logMsg); return false; } if( header.GetAt(10) != '2' && @@ -116,6 +146,8 @@ bool OrkHttpClient::ExecuteUrl(CStdString& request, CStdString& response, CStdSt header.GetAt(14) != 'O' && header.GetAt(15) != 'K' ) { + logMsg.Format("received header != 200 OK %s", requestDetails); + LogError(logMsg); return false; } return true; diff --git a/orkbasecxx/OrkClient.h b/orkbasecxx/OrkClient.h index f1487dd..fe36c3e 100644 --- a/orkbasecxx/OrkClient.h +++ b/orkbasecxx/OrkClient.h @@ -14,6 +14,7 @@ #ifndef __ORKCLIENT_H__ #define __ORKCLIENT_H__ +#include <log4cxx/logger.h> #include "messages/SyncMessage.h" #include "messages/AsyncMessage.h" @@ -21,7 +22,13 @@ class DLL_IMPORT_EXPORT_ORKBASE OrkClient { public: + OrkClient(); virtual bool Execute(SyncMessage& request, AsyncMessage& response, CStdString& hostname, int tcpPort, CStdString& serviceName, int timeout = 5) = 0; +protected: + LogError(CStdString& errorString); + + log4cxx::LoggerPtr m_log; + static time_t s_lastErrorReportedTime; }; /** Abstract base class for all clients based on http. */ |