mirror of
				https://github.com/Telecominfraproject/wlan-cloud-ucentralgw.git
				synced 2025-11-04 04:37:46 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			version_up
			...
			WIP.2.7.1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					17fe350d8c | ||
| 
						 | 
					73e4f0df94 | ||
| 
						 | 
					702d863e6b | 
@@ -1,5 +1,5 @@
 | 
			
		||||
cmake_minimum_required(VERSION 3.13)
 | 
			
		||||
project(owgw VERSION 2.7.0)
 | 
			
		||||
project(owgw VERSION 2.7.1)
 | 
			
		||||
 | 
			
		||||
set(CMAKE_CXX_STANDARD 17)
 | 
			
		||||
 | 
			
		||||
@@ -132,7 +132,7 @@ add_executable( owgw
 | 
			
		||||
        src/AP_WS_Process_state.cpp
 | 
			
		||||
        src/AP_WS_Process_healthcheck.cpp
 | 
			
		||||
        src/AP_WS_Process_log.cpp
 | 
			
		||||
        src/AP_WS_Process_crashlog.cpp src/AP_WS_Process_ping.cpp src/AP_WS_Process_cfgpending.cpp src/AP_WS_Process_recovery.cpp src/AP_WS_Process_deviceupdate.cpp src/AP_WS_Process_telemetry.cpp src/AP_WS_Process_venuebroadcast.cpp src/RADSECserver.h)
 | 
			
		||||
        src/AP_WS_Process_crashlog.cpp src/AP_WS_Process_ping.cpp src/AP_WS_Process_cfgpending.cpp src/AP_WS_Process_recovery.cpp src/AP_WS_Process_deviceupdate.cpp src/AP_WS_Process_telemetry.cpp src/AP_WS_Process_venuebroadcast.cpp src/RADSECserver.h src/framework/MicroServiceErrorHandler.h)
 | 
			
		||||
 | 
			
		||||
if(NOT SMALL_BUILD)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -99,6 +99,7 @@ using namespace std::chrono_literals;
 | 
			
		||||
#include "Poco/ThreadLocal.h"
 | 
			
		||||
#include "cppkafka/cppkafka.h"
 | 
			
		||||
 | 
			
		||||
#include "framework/MicroServiceErrorHandler.h"
 | 
			
		||||
#include "framework/OpenWifiTypes.h"
 | 
			
		||||
#include "framework/KafkaTopics.h"
 | 
			
		||||
#include "framework/ow_constants.h"
 | 
			
		||||
@@ -1360,32 +1361,6 @@ namespace OpenWifi {
 | 
			
		||||
        Poco::ExpireLRUCache<KeyType,Record>  Cache_{Size,Expiry};
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    class MicroServiceErrorHandler : public Poco::ErrorHandler {
 | 
			
		||||
	  public:
 | 
			
		||||
		explicit MicroServiceErrorHandler(Poco::Util::Application &App) : App_(App) {}
 | 
			
		||||
		inline void exception(const Poco::Exception & E) {
 | 
			
		||||
		    Poco::Thread * CurrentThread = Poco::Thread::current();
 | 
			
		||||
		    App_.logger().log(E);
 | 
			
		||||
		    poco_error(App_.logger(), fmt::format("Poco::Exception occurred in name={} thr_id={}",
 | 
			
		||||
												  CurrentThread->getName(), CurrentThread->id()));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		inline void exception(const std::exception & E) {
 | 
			
		||||
		    Poco::Thread * CurrentThread = Poco::Thread::current();
 | 
			
		||||
			poco_warning(App_.logger(), fmt::format("std::exception in {}: {} thr_id={}",
 | 
			
		||||
													CurrentThread->getName(),E.what(),
 | 
			
		||||
													CurrentThread->id()));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		inline void exception() {
 | 
			
		||||
		    Poco::Thread * CurrentThread = Poco::Thread::current();
 | 
			
		||||
			poco_warning(App_.logger(), fmt::format("generic exception in {} thr_id={}",
 | 
			
		||||
													CurrentThread->getName(), CurrentThread->id()));
 | 
			
		||||
		}
 | 
			
		||||
	  private:
 | 
			
		||||
		Poco::Util::Application	&App_;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	class BusEventManager : public Poco::Runnable {
 | 
			
		||||
	  public:
 | 
			
		||||
		explicit BusEventManager(Poco::Logger &L) : Logger_(L) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										169
									
								
								src/framework/MicroServiceErrorHandler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								src/framework/MicroServiceErrorHandler.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,169 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by stephane bourque on 2022-09-29.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "fmt/format.h"
 | 
			
		||||
#include "Poco/Util/Application.h"
 | 
			
		||||
#include "Poco/ErrorHandler.h"
 | 
			
		||||
#include "Poco/Net/NetException.h"
 | 
			
		||||
#include "Poco/Net/SSLException.h"
 | 
			
		||||
#include "Poco/JSON/Template.h"
 | 
			
		||||
#include "Poco/Thread.h"
 | 
			
		||||
 | 
			
		||||
namespace OpenWifi {
 | 
			
		||||
 | 
			
		||||
	class MicroServiceErrorHandler : public Poco::ErrorHandler {
 | 
			
		||||
	  public:
 | 
			
		||||
		explicit MicroServiceErrorHandler(Poco::Util::Application &App) : App_(App) {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		inline void exception(const Poco::Exception & Base) override {
 | 
			
		||||
			try {
 | 
			
		||||
				if(Poco::Thread::current()!= nullptr) {
 | 
			
		||||
					t_name = Poco::Thread::current()->getName();
 | 
			
		||||
					t_id = Poco::Thread::current()->id();
 | 
			
		||||
				} else {
 | 
			
		||||
					t_name = "startup_code";
 | 
			
		||||
					t_id = 0;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				App_.logger().log(Base);
 | 
			
		||||
				Base.rethrow();
 | 
			
		||||
 | 
			
		||||
			} catch (const Poco::Net::InvalidCertificateException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::InvalidCertificateException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::Net::InvalidSocketException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::InvalidSocketException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::Net::WebSocketException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::WebSocketException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::Net::ConnectionResetException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::ConnectionResetException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::Net::CertificateValidationException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::CertificateValidationException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::Net::SSLConnectionUnexpectedlyClosedException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::SSLConnectionUnexpectedlyClosedException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::Net::SSLContextException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::SSLContextException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::Net::SSLException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::SSLException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
 | 
			
		||||
			} catch (const Poco::Net::InvalidAddressException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::InvalidAddressException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
 | 
			
		||||
			} catch (const Poco::Net::NetException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Net::NetException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
 | 
			
		||||
			} catch (const Poco::IOException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::IOException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::RuntimeException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::RuntimeException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::JSON::JSONTemplateException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::JSON::JSONTemplateException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::JSON::JSONException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::JSON::JSONException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::ApplicationException &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::ApplicationException thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (const Poco::Exception &E) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco::Exception thr_name={} thr_id={} code={} text={} msg={} what={}",
 | 
			
		||||
													  t_name, t_id, E.code(),
 | 
			
		||||
													  E.displayText(),
 | 
			
		||||
													  E.message(),
 | 
			
		||||
													  E.what()));
 | 
			
		||||
			} catch (...) {
 | 
			
		||||
				poco_error(App_.logger(), fmt::format("Poco:Generic thr_name={}",t_name, t_id));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		inline void exception(const std::exception & E) override {
 | 
			
		||||
			if(Poco::Thread::current()!= nullptr) {
 | 
			
		||||
				t_name = Poco::Thread::current()->getName();
 | 
			
		||||
				t_id = Poco::Thread::current()->id();
 | 
			
		||||
			} else {
 | 
			
		||||
				t_name = "startup_code";
 | 
			
		||||
				t_id = 0;
 | 
			
		||||
			}
 | 
			
		||||
			poco_warning(App_.logger(), fmt::format("std::exception in {}: {} thr_id={}",
 | 
			
		||||
													t_name,E.what(),
 | 
			
		||||
													t_id));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		inline void exception() override {
 | 
			
		||||
			if(Poco::Thread::current()!= nullptr) {
 | 
			
		||||
				t_name = Poco::Thread::current()->getName();
 | 
			
		||||
				t_id = Poco::Thread::current()->id();
 | 
			
		||||
			} else {
 | 
			
		||||
				t_name = "startup_code";
 | 
			
		||||
				t_id = 0;
 | 
			
		||||
			}
 | 
			
		||||
			poco_warning(App_.logger(), fmt::format("generic exception in {} thr_id={}",
 | 
			
		||||
													t_name, t_id));
 | 
			
		||||
		}
 | 
			
		||||
	  private:
 | 
			
		||||
		Poco::Util::Application	&App_;
 | 
			
		||||
		std::string		t_name;
 | 
			
		||||
		int 			t_id=0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user