⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bank_stat.c

📁 API
💻 C
字号:
/*=============================================================
功能: 	设置系统联行状态
作者:		
王永忠:2001/03/29:规范程序设计

周国祥:2001/04/05  S_bank_info2 ==> S_bank_base等
	将所有jgbm改为bank,文件名jgbm_stat.c ==> bank_stat.c
周国祥:2001/04/05  bank_base_num ==> G_bank_base_num
	bank_tab => G_bank_tab
周国祥: 2001/05/12  将原有关状态监控P,V操作处理部分分离,
			移到netmoni/bank_stat_moni.c文件中
周国祥: 2001/06/21  增加对共享内存中联行状态的处理,使网络测试
		    与tonas建立联系

周国祥: 2002/05/10  将load_bank_tab()改为load_bank_tab_netm()
		    以支持net_watch对网控器的监控

===============================================================*/
#include <stdio.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include "shmsys.h"
#include "mytools.h"
#include "db_struct_c.h"

#ifdef zgx_no60_0405
JGBM_STAT jgbm_stat_tab;
int	jgbm_stat_sem;
extern int jgbm_base_num;
extern S_jgbm_base *jgbm_tab;
#else
BANK_STAT		bank_stat_tab;
extern int		G_bank_base_num;
extern S_bank_base	*G_bank_tab;
#endif

/*---------------------------------------------
功能:
设置系统联行状态
ENTRY:	
RETURN:	
	0	SUCC
-----------------------------------------------*/
int load_bank_stat ()
{
	BANK_STAT	tab_buf;
	S_bank_info	base;
	int i , j;
	int c;

	/*
	 * 从所有路由表中搜取联行,并从bank_base表中取出状态信息
	 * G_bank_tab[]
	 * (in dblib/db_op.ec)
	 */
#ifdef zgx020510_modi
	if ( load_bank_tab () < 0 ) {
		errcall ( ERROR , "Load bank tab from DB fail !" );
		return -1;
	}
#else
	if ( load_bank_tab_netm () < 0 ) {
		errcall ( ERROR , "Load bank tab from DB fail !" );
		return -1;
	}
#endif
	
	memcpy ( &tab_buf , &bank_stat_tab , sizeof(BANK_STAT) );
	memset ( &bank_stat_tab , '\0' , sizeof(BANK_STAT) );

#ifdef zgx010621_modi
	for ( c = 0, i = 0; i < G_bank_base_num && i < 300; i++) {
#else
	for ( c = 0, i = 0; i < G_bank_base_num && c < 100; i++) {
#endif
		if ( G_bank_tab[i].moni_enable[0] == 'Y' ) {
			/* moni_enable[0] == 'Y'才需监控 */
			strcpy(bank_stat_tab.j[c].bankid,G_bank_tab[i].bank_id);
			strcpy(bank_stat_tab.j[c].hostid,G_bank_tab[i].host_id);
			strcpy( base.bank_id, G_bank_tab[i].bank_id );
			strcpy( base.host_id, G_bank_tab[i].host_id );

			select_bank_info( &base );

			DelSpace( base.bank_name );
			strcpy ( bank_stat_tab.j[c].name, base.bank_name );

			strcpy ( bank_stat_tab.j[c].ip, G_bank_tab[i].tran_ip_addr1 );
#ifdef zgx010510_del
			strcpy ( bank_stat_tab.j[c].port1, G_bank_tab[i].tran_port1 );
#endif

			strcpy ( bank_stat_tab.j[c].ip2, G_bank_tab[i].tran_ip_addr2 );
#ifdef zgx010510_del
			strcpy ( bank_stat_tab.j[c].port2, G_bank_tab[i].tran_port2 );
#endif

			bank_stat_tab.j[c].moni_enable = G_bank_tab[i].moni_enable[0];
		
			bank_stat_tab.j[c].stati = 0;
			bank_stat_tab.j[c].logstat = G_bank_tab[i].login_stat[0];
			for ( j = 0 ; j < tab_buf.bank_num ; j++ ) 
				if (!strcmp(bank_stat_tab.j[c].bankid, tab_buf.j[j].bankid) && !strcmp(bank_stat_tab.j[c].hostid, tab_buf.j[j].hostid)) {
					bank_stat_tab.j[c].stati = tab_buf.j[j].stati;
			}
			c++;
		}
	}

	//G_bank_base_num = c;
	//bank_stat_tab.bank_num = G_bank_base_num;

	bank_stat_tab.bank_num = c;

#ifdef wyz0405	
	why free G_bank_tab
	free ( G_bank_tab );
	G_bank_tab = NULL;
#endif
		
	return 0;
}


#ifdef zgx010621_added
#else
/*---------------------------------------------
功能:
	初始共享内存联行状态
ENTRY:	
RETURN:	
	0	SUCC
-----------------------------------------------*/
#include "../netmoni/netmoni.h"
int init_bank_stat_in_shm ()
{
	BANK_STAT	tab_buf;
	S_bank_info	base;
	int i , j;
	int c;

	/*
	 * 从所有路由表中搜取联行,并从bank_base表中取出状态信息
	 * G_bank_tab[]
	 * (in dblib/db_op.ec)
	 */
#ifdef zgx020510_modi
	if ( load_bank_tab () < 0 ) {
		errcall ( ERROR , "Load bank tab from DB fail !" );
		return -1;
	}
#else
	if ( load_bank_tab_netm () < 0 ) {
		errcall ( ERROR , "Load bank tab from DB fail !" );
		return -1;
	}
#endif
	
	if (get_ipc_moni() < 0) {
		errcall ( ERROR , "get_ipc_moni fail !errno=%d", errno);
		return(-1);
	}
	netm_lock_bank_stat();
	for ( c = 0, i = 0; i < G_bank_base_num && c < 100; i++) {
		strcpy(_bank_stat->bank[c].bankid, G_bank_tab[i].bank_id);
		strcpy(_bank_stat->bank[c].hostid, G_bank_tab[i].host_id);
		strcpy ( _bank_stat->bank[c].main_ip, G_bank_tab[i].tran_ip_addr1 );
		strcpy ( _bank_stat->bank[c].bkup_ip, G_bank_tab[i].tran_ip_addr2 );
		_bank_stat->bank[c].stati = 0;
		_bank_stat->bank[c].logstat = G_bank_tab[i].login_stat[0];
		c++;
	}

	_bank_stat->bank_num = c;
	netm_unlock_bank_stat();

	return 0;
}

/*---------------------------------------------
功能:
	将网络测试后的状态更新到共享内存中
ENTRY:	
RETURN:	
	0	SUCC
-----------------------------------------------*/
int store_bank_stat_to_shm ()
{
	int i , j;
	int c;

	/*
	 * 从所有路由表中搜取联行,并从bank_base表中取出状态信息
	 * G_bank_tab[]
	 * (in dblib/db_op.ec)
	 */
#ifdef zgx020510_modi
	if ( load_bank_tab () < 0 ) {
		errcall ( ERROR , "Load bank tab from DB fail !" );
		return -1;
	}
#else
	if ( load_bank_tab_netm() < 0 ) {
		errcall ( ERROR , "Load bank tab from DB fail !" );
		return -1;
	}
#endif
	
	if (get_ipc_moni() < 0) {
		errcall ( ERROR , "get_ipc_moni fail !errno=%d", errno);
		return(-1);
	}
	netm_lock_bank_stat();
	for ( c = 0, i = 0; i < G_bank_base_num && c < 100; i++) {
		strcpy(_bank_stat->bank[c].bankid, G_bank_tab[i].bank_id);
		strcpy(_bank_stat->bank[c].hostid, G_bank_tab[i].host_id);
		strcpy ( _bank_stat->bank[c].main_ip, G_bank_tab[i].tran_ip_addr1 );
		strcpy ( _bank_stat->bank[c].bkup_ip, G_bank_tab[i].tran_ip_addr2 );
		_bank_stat->bank[c].stati = 0;
		_bank_stat->bank[c].logstat = G_bank_tab[i].login_stat[0];
		for (j = 0; j < bank_stat_tab.bank_num; j++ ) 
			if (!strcmp(_bank_stat->bank[c].bankid, bank_stat_tab.j[j].bankid) && !strcmp(_bank_stat->bank[c].hostid, bank_stat_tab.j[j].hostid)) {
				_bank_stat->bank[c].stati = bank_stat_tab.j[j].stati;
		}
		c++;
	}

	_bank_stat->bank_num = c;
	netm_unlock_bank_stat();

	return 0;
}

/*---------------------------------------------
功能:
	检查某联行通讯是否正常
ENTRY:
	bankid, hostid
RETURN:	
	0	MAIN_IP & BKUP_IP OK
	1	MAIN_IP OK
	2	BKUP_IP OK
	-1	MAIN_IP & BKUP_IP FAIL
-----------------------------------------------*/
int get_bank_stat_from_shm(char *bankid, char *hostid)
{
	int i , j;
	int c;
	char stati;

	if (get_ipc_moni() < 0) {
		errcall ( ERROR , "get_ipc_moni fail !errno=%d", errno);
		return(-1);
	}
	for (i = 0; i < _bank_stat->bank_num; i++) {
		if (!strcmp(_bank_stat->bank[i].bankid, bankid) &&
		    !strcmp(_bank_stat->bank[i].hostid, hostid)) {
			stati = _bank_stat->bank[i].stati;
			if (stati == 0)
				return(0);
			if (stati & 0x01 == 0)
				return(1);
			if (stati & 0x02 == 0)
				return(2);
			return -1;
		}
	}

	return -1;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -