From dc04efbbb1723d618b54540e56607959c3cff2c4 Mon Sep 17 00:00:00 2001 From: Sala Leonardo Date: Tue, 9 Sep 2014 18:13:31 +0200 Subject: [PATCH] working logger! --- slsReceiverSoftware/Makefile | 21 ++- slsReceiverSoftware/includes/logger.h | 157 ++++++++++-------- slsReceiverSoftware/includes/utilities.h | 20 +-- .../slsReceiver/UDPInterface.cpp | 7 +- .../slsReceiver/UDPInterface.h | 2 +- slsReceiverSoftware/slsReceiver/main.cpp | 1 + slsReceiverSoftware/slsReceiver/utilities.cpp | 66 ++++++++ 7 files changed, 180 insertions(+), 94 deletions(-) create mode 100644 slsReceiverSoftware/slsReceiver/utilities.cpp diff --git a/slsReceiverSoftware/Makefile b/slsReceiverSoftware/Makefile index 07de13672..a9f9f57dc 100644 --- a/slsReceiverSoftware/Makefile +++ b/slsReceiverSoftware/Makefile @@ -12,17 +12,25 @@ CFLAGS= -g -DC_ONLY -fPIC DFLAGS= -g -DDACS_INT -DSLS_RECEIVER_UDP_FUNCTIONS INCLUDES?= -I. -Iincludes -IMySocketTCP -IslsReceiver -IslsDetectorCalibration -I$(ASM) + #-IslsReceiverInterface -SRC_CLNT= MySocketTCP/MySocketTCP.cpp slsReceiver/UDPInterface.cpp slsReceiver/UDPBaseImplementation.cpp slsReceiver/UDPStandardImplementation.cpp slsReceiver/UDPRESTImplementation.cpp slsReceiver/slsReceiverTCPIPInterface.cpp slsReceiver/slsReceiver.cpp slsReceiver/slsReceiverUsers.cpp includes/utilities.h +SRC_CLNT = MySocketTCP/MySocketTCP.cpp slsReceiver/UDPInterface.cpp slsReceiver/UDPBaseImplementation.cpp slsReceiver/UDPStandardImplementation.cpp slsReceiver/slsReceiverTCPIPInterface.cpp slsReceiver/slsReceiver.cpp slsReceiver/slsReceiverUsers.cpp slsReceiver/utilities.cpp #slsReceiverInterface/receiverInterface.cpp #slsReceiver/slsReceiverUDPFunctions.cpp +#slsReceiver/utilities.cpp includes/logger.h +#ifeq ($(REST),yes) +# SRC_CLNT += slsReceiver/UDPRESTImplementation.cpp +# INCLUDES += $(RESTINCLUDE) +#endif -OBJS = $(SRC_CLNT:.cpp=.o) -OBJS += includes/utilities.h +OBJS=$(SRC_CLNT:.cpp=.o) +#OBJS = $(OBJS1:.h=.o) +#OBJS += slsReceiver/logger.o #OBJS += slsReceiver/eigerReceiver.o + .PHONY: all intdoc package eigerReceiver clean all: package $(SRC_CLNT) @@ -30,19 +38,23 @@ all: package $(SRC_CLNT) intdoc: $(SRC_H) $(SRC_CLNT) doxygen doxy.config - %.o : %.cpp Makefile ifeq ($(ROOTSLS),yes) echo "with root" $(CXX) -DROOTSLS -o $@ -c $< $(INCLUDES) $(DFLAGS) $(ROOTFLAGS) -fPIC $(EPICSFLAGS) -L/usr/lib64/ #$(FLAGS) else echo "without root" + echo $(REST) + echo $(INCLUDES) $(CXX) -o $@ -c $< $(INCLUDES) $(DFLAGS) -fPIC $(EPICSFLAGS) -lpthread #$(FLAGS) endif # LEO: not satisfied by eigerReceiver package: $(OBJS) $(DESTDIR)/libSlsReceiver.so $(DESTDIR)/libSlsReceiver.a +#slsReceiver/logger.o: +# $(CXX) -o $@ -c includes/logger.h $(INCLUDES) $(DFLAGS) -fPIC $(EPICSFLAGS) -lpthread #$(FLAGS) + #eigerReceiver: # echo "src client:" $(SRC_CLNT) # cd slsReceiver && make eigerReceiver @@ -57,6 +69,7 @@ $(DESTDIR)/libSlsReceiver.a: $(OBJS) mv libSlsReceiver.a $(DESTDIR) clean: + echo rm -rf $(OBJS) rm -rf $(OBJS) cd slsReceiver && make clean cd diff --git a/slsReceiverSoftware/includes/logger.h b/slsReceiverSoftware/includes/logger.h index be93f9fac..eda43b0b0 100644 --- a/slsReceiverSoftware/includes/logger.h +++ b/slsReceiverSoftware/includes/logger.h @@ -1,5 +1,5 @@ -#ifndef __LOG_H__ -#define __LOG_H__ +//#ifndef __LOG_H__ +//#define __LOG_H__ #include #include @@ -9,13 +9,11 @@ inline std::string NowTime(); enum TLogLevel {logERROR, logWARNING, logINFO, logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4}; -template -class Log{ +template class Log{ public: Log(); virtual ~Log(); std::ostringstream& Get(TLogLevel level = logINFO); - public: static TLogLevel& ReportingLevel(); static std::string ToString(TLogLevel level); static TLogLevel FromString(const std::string& level); @@ -26,55 +24,6 @@ class Log{ Log& operator =(const Log&); }; -template Log::Log() {} - -template std::ostringstream& Log::Get(TLogLevel level) -{ - os << "- " << NowTime(); - os << " " << ToString(level) << ": "; - os << std::string(level > logDEBUG ? level - logDEBUG : 0, '\t'); - return os; -} - -template Log::~Log() -{ - os << std::endl; - T::Output(os.str()); -} - -template TLogLevel& Log::ReportingLevel() -{ - static TLogLevel reportingLevel = logDEBUG4; - return reportingLevel; -} - -template std::string Log::ToString(TLogLevel level) -{ - static const char* const buffer[] = {"ERROR", "WARNING", "INFO", "DEBUG", "DEBUG1", "DEBUG2", "DEBUG3", "DEBUG4"}; - return buffer[level]; -} - -template TLogLevel Log::FromString(const std::string& level) -{ - if (level == "DEBUG4") - return logDEBUG4; - if (level == "DEBUG3") - return logDEBUG3; - if (level == "DEBUG2") - return logDEBUG2; - if (level == "DEBUG1") - return logDEBUG1; - if (level == "DEBUG") - return logDEBUG; - if (level == "INFO") - return logINFO; - if (level == "WARNING") - return logWARNING; - if (level == "ERROR") - return logERROR; - Log().Get(logWARNING) << "Unknown logging level '" << level << "'. Using INFO level as default."; - return logINFO; -} class Output2FILE { public: @@ -82,20 +31,6 @@ public: static void Output(const std::string& msg); }; -inline FILE*& Output2FILE::Stream() { - static FILE* pStream = stderr; - return pStream; -} - -inline void Output2FILE::Output(const std::string& msg) -{ - FILE* pStream = Stream(); - if (!pStream) - return; - fprintf(pStream, "%s", msg.c_str()); - fflush(pStream); -} - #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) # if defined (BUILDING_FILELOG_DLL) # define FILELOG_DECLSPEC __declspec (dllexport) @@ -124,6 +59,8 @@ class FILELOG_DECLSPEC FILELog : public Log {}; #include + + inline std::string NowTime() { @@ -159,4 +96,86 @@ inline std::string NowTime() #endif //WIN32 -#endif //__LOG_H__ + +template Log::Log(){} + +template std::ostringstream& Log::Get(TLogLevel level) +{ + os << "- " << NowTime(); + os << " " << ToString(level) << ": "; + os << std::string(level > logDEBUG ? level - logDEBUG : 0, '\t'); + return os; +} + +template Log::~Log() +{ + os << std::endl; + T::Output(os.str()); +} + +template TLogLevel& Log::ReportingLevel() +{ + static TLogLevel reportingLevel = logDEBUG4; + return reportingLevel; +} + +template std::string Log::ToString(TLogLevel level) +{ + static const char* const buffer[] = {"ERROR", "WARNING", "INFO", "DEBUG", "DEBUG1", "DEBUG2", "DEBUG3", "DEBUG4"}; + return buffer[level]; +} + +template +TLogLevel Log::FromString(const std::string& level) +{ + if (level == "DEBUG4") + return logDEBUG4; + if (level == "DEBUG3") + return logDEBUG3; + if (level == "DEBUG2") + return logDEBUG2; + if (level == "DEBUG1") + return logDEBUG1; + if (level == "DEBUG") + return logDEBUG; + if (level == "INFO") + return logINFO; + if (level == "WARNING") + return logWARNING; + if (level == "ERROR") + return logERROR; + Log().Get(logWARNING) << "Unknown logging level '" << level << "'. Using INFO level as default."; + return logINFO; +} + + +inline FILE*& Output2FILE::Stream() +{ + static FILE* pStream = stderr; + return pStream; +} + +inline void Output2FILE::Output(const std::string& msg) +{ + FILE* pStream = Stream(); + if (!pStream) + return; + fprintf(pStream, "%s", msg.c_str()); + fflush(pStream); +} + +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) +# if defined (BUILDING_FILELOG_DLL) +# define FILELOG_DECLSPEC __declspec (dllexport) +# elif defined (USING_FILELOG_DLL) +# define FILELOG_DECLSPEC __declspec (dllimport) +# else +# define FILELOG_DECLSPEC +# endif // BUILDING_DBSIMPLE_DLL +#else +# define FILELOG_DECLSPEC +#endif // _WIN32 + + + +//#endif //__LOG_H__ diff --git a/slsReceiverSoftware/includes/utilities.h b/slsReceiverSoftware/includes/utilities.h index e55d81598..78a99bcbc 100644 --- a/slsReceiverSoftware/includes/utilities.h +++ b/slsReceiverSoftware/includes/utilities.h @@ -3,27 +3,11 @@ #include #include using namespace std; +#include "sls_receiver_defs.h" /* uncomment next line to enable debug output */ //#define EIGER_DEBUG -/* macro for debug output http://stackoverflow.com/a/14256296 */ -#ifdef EIGER_DEBUG -#define DEBUG(x) do { std::cerr << x << std::endl; } while (0) -#else -#define DEBUG(x) -#endif -#ifdef VERBOSE -#define VERBOSE_PRINT(x) do { std::cout << "[VERBOSE]" << x << std::endl; } while (0) -#else -#define VERBOSE_PRINT(x) -#endif - - - - - - -inline int read_config_file(string fname, int *tcpip_port_no); +int read_config_file(string fname, int *tcpip_port_no); diff --git a/slsReceiverSoftware/slsReceiver/UDPInterface.cpp b/slsReceiverSoftware/slsReceiver/UDPInterface.cpp index 650166a6e..a0d771687 100644 --- a/slsReceiverSoftware/slsReceiver/UDPInterface.cpp +++ b/slsReceiverSoftware/slsReceiver/UDPInterface.cpp @@ -34,8 +34,11 @@ UDPInterface * UDPInterface::create(string receiver_type){ cout << "Starting " << receiver_type << endl; return new UDPStandardImplementation(); } - //else if (receiver_type == "REST") - // return new UDPRESTImplementation(); + +#ifdef REST + else if (receiver_type == "REST") + return new UDPRESTImplementation(); +#endif else{ FILE_LOG(logWARNING) << "[ERROR] UDP interface not supported, using standard implementation"; return new UDPBaseImplementation(); diff --git a/slsReceiverSoftware/slsReceiver/UDPInterface.h b/slsReceiverSoftware/slsReceiver/UDPInterface.h index 77cfe3e7e..5c497167d 100644 --- a/slsReceiverSoftware/slsReceiver/UDPInterface.h +++ b/slsReceiverSoftware/slsReceiver/UDPInterface.h @@ -17,7 +17,7 @@ #include "MySocketTCP.h" #include "utilities.h" - +#include "logger.h" /* void print_not_implemented(string method_name){ diff --git a/slsReceiverSoftware/slsReceiver/main.cpp b/slsReceiverSoftware/slsReceiver/main.cpp index 14fb01d0e..32adb96be 100644 --- a/slsReceiverSoftware/slsReceiver/main.cpp +++ b/slsReceiverSoftware/slsReceiver/main.cpp @@ -8,6 +8,7 @@ #include #include "utilities.h" +#include "logger.h" using namespace std; diff --git a/slsReceiverSoftware/slsReceiver/utilities.cpp b/slsReceiverSoftware/slsReceiver/utilities.cpp new file mode 100644 index 000000000..ae401a5cc --- /dev/null +++ b/slsReceiverSoftware/slsReceiver/utilities.cpp @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#include +#include + +#include "utilities.h" + + +using namespace std; + + +int read_config_file(string fname, int *tcpip_port_no){ + + ifstream infile; + string sLine,sargname; + int iline = 0; + int success = slsReceiverDefs::OK; + + infile.open(fname.c_str(), ios_base::in); + if (infile.is_open()) { + while(infile.good()){ + getline(infile,sLine); + iline++; + + //VERBOSE_PRINT(sLine); + + if(sLine.find('#')!=string::npos){ + //VERBOSE_PRINT( "Line is a comment "); + continue; + } + else if(sLine.length()<2){ + //VERBOSE_PRINT("Empty line "); + continue; + } + else{ + istringstream sstr(sLine); + + //parameter name + if(sstr.good()) + sstr >> sargname; + + //tcp port + if(sargname=="rx_tcpport"){ + if(sstr.good()) { + sstr >> sargname; + if(sscanf(sargname.c_str(),"%d",tcpip_port_no)) + cout<<"dataport:"<