📄 bank_stat.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 + -