![]() |
![]() |
00001 #ifndef INCLUDE_ORA_MONITORING_H 00002 #define INCLUDE_ORA_MONITORING_H 00003 00004 // 00005 #include <string> 00006 #include <map> 00007 #include "boost/date_time/posix_time/posix_time.hpp" 00008 #include <iostream> 00009 00010 namespace ora { 00011 00012 struct TransactionMonitoringData { 00013 explicit TransactionMonitoringData( boost::posix_time::ptime start ); 00014 void stop(bool commit_status=true); 00015 boost::posix_time::ptime m_start; 00016 boost::posix_time::ptime m_stop; 00017 bool m_status; 00018 }; 00019 00020 class SessionMonitoringData { 00021 public: 00022 SessionMonitoringData( boost::posix_time::ptime start, const std::string& connectionString ); 00023 ~SessionMonitoringData(); 00024 size_t newTransaction(); 00025 size_t stopTransaction( bool commit_status=true); 00026 void stop(); 00027 size_t numberOfTransactions() const ; 00028 void report( std::ostream& out ) const ; 00029 std::string m_connectionString; 00030 boost::posix_time::ptime m_start; 00031 boost::posix_time::ptime m_stop; 00032 private: 00033 TransactionMonitoringData* m_currentTransaction; 00034 std::map<std::string,TransactionMonitoringData*> m_transactions; 00035 size_t m_ncur; 00036 }; 00037 00038 class Monitoring { 00039 public: 00040 static Monitoring& get(); 00041 static bool isEnabled(); 00042 static void enable(); 00043 static std::string& outFileName(); 00044 public: 00045 00047 virtual ~Monitoring() throw(); 00048 00049 SessionMonitoringData* startSession( const std::string& connectionString ); 00050 00051 void report( std::ostream& out ); 00052 private: 00053 static bool s_enabled; 00054 00055 private: 00056 // 00057 Monitoring(); 00058 private: 00059 00060 std::map<std::string,SessionMonitoringData*> m_sessions; 00061 }; 00062 00063 } 00064 00065 #endif