Browse Source

Z991239-6440 #comment feat: 心跳实体连接主备模式功能改造

Signed-Off-By: commit-hook
刘文涛80174520 3 months ago
parent
commit
f45bf60fb1

+ 159 - 89
Module/mod_heartbeat/HeartBeatFSM.cpp

@@ -29,12 +29,31 @@ const char * ProcessTimeQuery	= "\\Processor Information(_Total)\\% Processor Ti
 
 #ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
 #define HAND_SHAKE_URL			"http://connectservice.paasst.cmbchina.cn/api/heartbeat/keep"
+#define	CARDISSUER_STAND_MAIN_SERVER				"rvctsst.cmbchina.cn 30033"
+#define CARDISSUER_STAND_BACKUP_SERVER				""
+#define	CARDISSUER_STORE_MAIN_SERVER				"rvctsst.cmbchina.cn 30033"
+#define CARDISSUER_STORE_BACKUP_SERVER				""
+
 #elif defined(DEVOPS_ON_UAT)/*DevOps流水线编译,UAT环境*/
 #define HAND_SHAKE_URL			"http://connectservice.paasuat.cmbchina.cn/api/heartbeat/keep"
+#define	CARDISSUER_STAND_MAIN_SERVER				"rvctsuat.cmbchina.cn 30033"
+#define CARDISSUER_STAND_BACKUP_SERVER				""
+#define	CARDISSUER_STORE_MAIN_SERVER				"55.6.78.32 30033"
+#define CARDISSUER_STORE_BACKUP_SERVER				""
+
 #elif defined(DEVOPS_ON_PRD)/*DevOps流水线编译,PRD环境*/
 #define HAND_SHAKE_URL			"https://connectservice.paas.cmbchina.cn/api/heartbeat/keep"
+#define	CARDISSUER_STAND_MAIN_SERVER				"rvcts.cmbchina.cn 30033"
+#define CARDISSUER_STAND_BACKUP_SERVER				""
+#define	CARDISSUER_STORE_MAIN_SERVER				"rvccardstore.cmbchina.cn 30033"
+#define CARDISSUER_STORE_BACKUP_SERVER				""
+
 #else/*DevOps流水线编译,Dev环境&本地编译等非DevOps环境*/
 #define HAND_SHAKE_URL			"http://connectservice.paasst.cmbchina.cn/api/heartbeat/keep"
+#define	CARDISSUER_STAND_MAIN_SERVER				"rvctsst.cmbchina.cn 30033"
+#define CARDISSUER_STAND_BACKUP_SERVER				""
+#define	CARDISSUER_STORE_MAIN_SERVER				"rvctsst.cmbchina.cn 30033"
+#define CARDISSUER_STORE_BACKUP_SERVER				""
 #endif
 
 // End Performance Component [Josephus in 9:32:05 2016/4/23]
@@ -61,9 +80,11 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 
 	m_isCardStore = !sysInfo.strMachineType.Compare("RVC.CardStore", true);
 
-	ErrorCodeEnum rc = GetServerAddr(spConfig, m_isCardStore);
+	//ErrorCodeEnum rc = GetServerAddr(spConfig, m_isCardStore);
+	ErrorCodeEnum rc = ParseServerAddr(m_isCardStore);
+
 	if (Error_Succeed != rc) {
-		LogWarn(Severity_Middle, Error_NotConfig, LOG_EVT_HEARTBEAT_LACK_CENSETTINGS, "找不到对应的配置,请检查集中配置是否存在!");
+		LogWarn(Severity_Middle, Error_NotConfig, LOG_EVT_HEARTBEAT_SERVER_CFG_FAIL, "读取连接虚机服务配置失败,请检查配置是否正确!");
         return rc;
 	}
 	int tmpCrossUseJS = 0;
@@ -111,7 +132,7 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 	//由于双活改造,改成固定ip,分行服务有处理
 	//m_servIP = "99.1.100.215";
 	m_dwServIP = inet_addr("99.1.100.215");
-	//m_csServerIP = m_servIP;
+
 
 	CSimpleStringA csRunDiskName("C:\\");
 	Error = GetEntityBase()->GetFunction()->GetPath("Run", csRunDiskName);
@@ -126,8 +147,7 @@ ErrorCodeEnum CHeartBeatFSM::OnInit()
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Split rundisk file string(%s) failed", (LPCTSTR)csRunDiskName);
 		return Error_Unexpect;
 	}
-	//CSimpleStringA temp="";
-	//spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(), "HandShakeUrl", temp);
+
 	m_strHandShakeUrl = HAND_SHAKE_URL;
 	//有心跳地址才启动心跳新线程
 	if (!m_strHandShakeUrl.IsNullOrEmpty()) {
@@ -251,7 +271,7 @@ void CHeartBeatFSM::s2_on_entry()
 	m_initTimes = 0;
 	m_testResult = Error_Succeed;
 	LogEvent(Severity_Middle, LOG_EVT_HEARTBEAT_CONNECTED, "Branch heartbeat service connected.");
-	LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_HEARTBEAT_CONNECTED, "Branch heartbeat service connected.");
+	//LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_HEARTBEAT_CONNECTED, "Branch heartbeat service connected.");
 }
 void CHeartBeatFSM::s2_on_exit()
 {
@@ -347,20 +367,22 @@ int CHeartBeatFSM::Starting()
 
 	if (!m_pHandShakeConn) 
 	{
-		//HeartBeatConnection* pHandShakeConn;
 		m_pHandShakeConn = new HeartBeatConnection(m_pEntity, this);
 		if (m_pHandShakeConn != NULL)
 		{
-			bool bConn = false;
-
-			if(m_isCardStore)
-			{
-				bConn = m_pHandShakeConn->Connect(m_servIP, m_port, 3);
-			}
-			else
-			{
-				bConn = m_pHandShakeConn->ConnectFromCentralSetting();
-			}
+			//bool bConn = false;
+
+			//if(m_isCardStore)
+			//{
+			//	bConn = m_pHandShakeConn->Connect(m_servIP, m_port, 3);
+			//}
+			//else
+			//{
+			//	bConn = m_pHandShakeConn->ConnectFromCentralSetting();
+			//}
+			CSimpleStringA connectedServ = "";
+			bool bConn = m_pHandShakeConn->ConnectFromAddress(m_servStr, m_servStrBArr, connectedServ);
+			
 			if (!bConn) 
 			{
 				m_pHandShakeConn->Close();
@@ -372,6 +394,17 @@ int CHeartBeatFSM::Starting()
 				LogWarn(Severity_Middle, Error_Unexpect, LOG_EVT_HEARTBEAT_UN_CONNECTED, "Branch heartbeat service unconnected.");
 				return 1;
 			}
+			else {
+				CSimpleStringA msg = "";
+				if (!connectedServ.IsNullOrEmpty()) {
+					msg = CSimpleStringA::Format("heartbeat service connected. server addr str = %s", connectedServ.GetData());
+				}
+				else {
+					msg = CSimpleStringA::Format("heartbeat service connected. server use last time addr str ");
+				}
+				LogWarn(Severity_Low, Error_Succeed, LOG_EVT_HEARTBEAT_CONNECTED, msg);
+				return 0;
+			}
 		}
 	}
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("HeartBeat connected.");
@@ -395,21 +428,6 @@ int CHeartBeatFSM::DoHandShake()
 			GetEntityBase()->GetFunction()->SetSysVar("HeartbeatState", "C");
 			m_pHandShakeConn->SendHandShake();
 
-			if(m_pHandShakeConn->IsConnectionOK() && !m_bAlarmed)
-			{
-				regex reg("((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])");
-				if(regex_match(m_servIP.GetData(), reg))
-				{
-					CSimpleStringA msg = CSimpleStringA::Format("Branch server IP: %s, backup ip: %s", m_servIP.GetData(), m_servIPB.GetData());
-					LogWarn(Severity_Low, Error_Succeed, LOG_EVT_CONNECT_BRANCH, msg);
-				}
-				else
-				{
-					CSimpleStringA msg = CSimpleStringA::Format("Center server url: %s", m_servIP.GetData());
-					LogWarn(Severity_Low, Error_Succeed, LOG_EVT_CONNECT_CENTER, msg);
-				}
-				m_bAlarmed = true;
-			}
 			Sleep(m_longConnInterval);//修改成可配置的时间间隔
 			//Sleep(20000);//oiltest
 			if (m_tmpTestFlag)
@@ -1394,77 +1412,129 @@ void HeartBeatConnection::PkgRcvProcCardActive(const CSmartPointer<IPackage> &pR
 	}
 }
 
-ErrorCodeEnum CHeartBeatFSM::GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore)
+//ErrorCodeEnum CHeartBeatFSM::GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore)
+//{
+//	//卡库用新地址
+//	if(isCardStore)
+//	{
+//		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"ServerNew",m_servStr);
+//
+//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ServerNew=%s", m_servStr);
+//		if (m_servStr.IsNullOrEmpty()) {
+//			GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的ServerNew配置,请检查集中配置");
+//			return Error_Param;
+//		}
+//
+//		if (!m_servStr.IsNullOrEmpty())
+//		{
+//			CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
+//			if (aaServ.GetCount() >= 2)
+//			{
+//				m_servIP = aaServ[0];
+//				m_port = atoi(aaServ[1]);
+//
+//			}
+//			else
+//			{
+//				GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的配置,请检查集中配置");
+//				return Error_Param;
+//			}
+//		}
+//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s,%d",(LPCTSTR)m_servIP,m_port);
+//	}
+//	else
+//	{
+//		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"Server",m_servStr);
+//		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"Server_Backup",m_servStrB);
+//		if (!m_servStr.IsNullOrEmpty())
+//		{
+//			CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
+//			if (aaServ.GetCount() >= 2)
+//			{
+//				m_servIP = aaServ[0];
+//				m_port = atoi(aaServ[1]);
+//
+//			}
+//			else
+//			{
+//				GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的配置,请检查集中配置");
+//				return Error_Param;
+//			}
+//		}
+//		if (!m_servStrB.IsNullOrEmpty())
+//		{
+//			CAutoArray<CSimpleStringA> aaServB = m_servStrB.Split(' ');
+//			if (aaServB.GetCount() >= 2)
+//			{
+//				m_servIPB = aaServB[0];
+//				m_portB = atoi(aaServB[1]);
+//
+//			}
+//			else
+//			{
+//				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("no backup(%s).",(LPCSTR)m_servStrB);
+//				m_servIPB = m_servIP;
+//				m_portB = m_port;
+//			}
+//		}
+//
+//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s,%d;%s,%d",(LPCTSTR)m_servIP,m_port,(LPCTSTR)m_servIPB,m_portB);
+//	}
+//
+//	return Error_Succeed;
+//}
+
+ErrorCodeEnum CHeartBeatFSM::ParseServerAddr(bool isCardStore)
 {
-	//卡库用新地址
-	if(isCardStore)
-	{
-		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"ServerNew",m_servStr);
+	//地址赋值
+	CSimpleStringA servStrBackup = "";
+	if (isCardStore){
+		m_servStr = CARDISSUER_STORE_MAIN_SERVER;
+		servStrBackup = CARDISSUER_STORE_BACKUP_SERVER;
 
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ServerNew=%s", m_servStr);
-		if (m_servStr.IsNullOrEmpty()) {
-			GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的ServerNew配置,请检查集中配置");
+	}else {
+		m_servStr = CARDISSUER_STAND_MAIN_SERVER;
+		servStrBackup = CARDISSUER_STAND_BACKUP_SERVER;
+	}
+	m_servStrBArr = servStrBackup.Split('|');
+
+	if (m_servStr.IsNullOrEmpty()) {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("实体HeartBeat配置的main_server值为空,请确认是否已设置正确,main_server=%s", m_servStr);
+		return Error_Param;
+	}
+	else {
+		CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
+		if (aaServ.GetCount() != 2){
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("实体HeartBeat配置的main_server值无法解析,请确认格式是否正确,main_server=%s", m_servStr.GetData());
 			return Error_Param;
 		}
-
-		if (!m_servStr.IsNullOrEmpty())
-		{
-			CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
-			if (aaServ.GetCount() >= 2)
-			{
-				m_servIP = aaServ[0];
-				m_port = atoi(aaServ[1]);
-
-			}
-			else
-			{
-				GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的配置,请检查集中配置");
-				return Error_Param;
-			}
+		else {
+			CSimpleStringA servIP = aaServ[0];
+			int port = atoi(aaServ[1]);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("main server: %s,%d", servIP.GetData(), port);
 		}
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s,%d",(LPCTSTR)m_servIP,m_port);
 	}
-	else
-	{
-		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"Server",m_servStr);
-		spConfig->ReadConfigValue(GetEntityBase()->GetEntityName(),"Server_Backup",m_servStrB);
-		if (!m_servStr.IsNullOrEmpty())
-		{
-			CAutoArray<CSimpleStringA> aaServ = m_servStr.Split(' ');
-			if (aaServ.GetCount() >= 2)
-			{
-				m_servIP = aaServ[0];
-				m_port = atoi(aaServ[1]);
+	
 
-			}
-			else
-			{
-				GetEntityBase()->GetFunction()->ShowFatalError("实体HeartBeat找不到对应的配置,请检查集中配置");
+	for (int i = 0; i<m_servStrBArr.GetCount(); i++)
+	{
+		CSimpleStringA servStrB = m_servStrBArr[i];
+		if (!servStrB.IsNullOrEmpty()) {
+			CAutoArray<CSimpleStringA> aaServB = servStrB.Split(' ');
+			if (aaServB.GetCount() != 2) {
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("实体HeartBeat配置的Backup_server值无法解析,请确认格式是否正确,Backup_server=%s", servStrB.GetData());
 				return Error_Param;
 			}
-		}
-		if (!m_servStrB.IsNullOrEmpty())
-		{
-			CAutoArray<CSimpleStringA> aaServB = m_servStrB.Split(' ');
-			if (aaServB.GetCount() >= 2)
-			{
-				m_servIPB = aaServB[0];
-				m_portB = atoi(aaServB[1]);
-
-			}
-			else
-			{
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("no backup(%s).",(LPCSTR)m_servStrB);
-				m_servIPB = m_servIP;
-				m_portB = m_port;
+			else {
+				CSimpleStringA servIP = aaServB[0];
+				int port = atoi(aaServB[1]);
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("backup server: %s,%d", servIP.GetData(), port);
 			}
 		}
-
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s,%d;%s,%d",(LPCTSTR)m_servIP,m_port,(LPCTSTR)m_servIPB,m_portB);
 	}
-
 	return Error_Succeed;
 }
+
 bool CHeartBeatFSM::CheckCRASessionOrToConnect()
 {
 	if (m_pCRAClient != NULL && !m_pCRAClient->QuerySessionClosed())

+ 8 - 5
Module/mod_heartbeat/HeartBeatFSM.h

@@ -308,7 +308,9 @@ public:
 	m_warnLevel(0), m_entErrorList(""), m_nLodCtrFlag(0), m_pHandShakeConn(NULL)
 	,m_pCRAClient(NULL),m_pCISClient(NULL)
 	, m_localDeviceNo(""), m_ILDeviceNo(""), m_tmpMultiBlob(""), m_terminalStage(""), m_strHandShakeUrl(""),m_bAlarmed(false), m_bCrossUseJS(false)
-	,m_longConnInterval(20000),m_handShakeConnInterval(20000){}
+	,m_longConnInterval(20000),m_handShakeConnInterval(20000){
+		m_servStrBArr.Init(1);
+	}
 	~CHeartBeatFSM(){}
 	virtual ErrorCodeEnum OnInit();
 	virtual ErrorCodeEnum OnExit();
@@ -374,16 +376,17 @@ protected:
 	void DoInstruction(SpReqAnsContext<HeartBeatService_Instruction_Req, HeartBeatService_Instruction_Ans>::Pointer ctx);
 	
 private:
-	ErrorCodeEnum GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore);
+	//ErrorCodeEnum GetServerAddr(CSmartPointer<IConfigInfo> &spConfig, bool isCardStore);
+	ErrorCodeEnum ParseServerAddr(bool isCardStore);
 	bool CheckCRASessionOrToConnect();
 	bool CheckCISSessionOrToConnect();
 	
 	int m_tmpTestFlag;
 	int m_longConnInterval;//长连接时间间隔
 	int m_handShakeConnInterval;//新心跳时间间隔
-	SOCKET m_ConnSocket;
-	CSimpleStringA m_servStr,m_servIP,m_servStrB,m_servIPB,m_entErrorList,m_localDeviceNo,m_ILDeviceNo,m_tmpMultiBlob, m_terminalStage;
-	int m_port,m_portB,m_initTimes,m_warnLevel;
+	CSimpleStringA m_servStr,m_entErrorList,m_localDeviceNo,m_ILDeviceNo,m_tmpMultiBlob, m_terminalStage;
+	CAutoArray<CSimpleStringA> m_servStrBArr;
+	int m_initTimes,m_warnLevel;
 	unsigned long m_ulServIP;
 	HeartBeatConnection* m_pHandShakeConn;
 	bool m_bUseBackup;

+ 1 - 0
Module/mod_heartbeat/HeartBeat_UserErrorCode.h

@@ -18,5 +18,6 @@
 #define LOG_EVT_HEARTBEAT_TASK_NOT_START	0x50310001		//新心跳服务未启动
 #define LOG_EVT_HEARTBEAT_HTTP_ERROR		0x50310002		//新心跳服务连接失败
 #define LOG_EVT_HEARTBEAT_LACK_CENSETTINGS		0x50310003		//读取集中配置失败
+#define LOG_EVT_HEARTBEAT_SERVER_CFG_FAIL		0x50310004		//读取虚机服务配置失败
 
 #endif