summaryrefslogtreecommitdiff
path: root/orkbasecxx
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2007-02-07 20:06:09 +0000
committerHenri Herscher <henri@oreka.org>2007-02-07 20:06:09 +0000
commit6921d5b3d1a4a2de5cbf806c98b1272af42c9fdc (patch)
tree71f9dce05d944961ad056f52ca7435839643ac32 /orkbasecxx
parentdf00070ac0bd9dda8503a33b713275e8d1ee0af3 (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.cpp1
-rw-r--r--orkbasecxx/LogManager.h3
-rw-r--r--orkbasecxx/OrkClient.cpp32
-rw-r--r--orkbasecxx/OrkClient.h7
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. */