📄 adm_mon.c
字号:
} pclose( pfp) ; return( 0) ;}int ViewApp(){ char *title=" 服务进程信息 " ; char *p ; int flag=0, i, j ; void viewapp_action( int ) ; if ( find_bms_cfg() != SUCCESS ) { MessageBX( "find_bms_cfg error!") ; return 0; } find_apserver_cfg() ; clear_pid() ; for ( i = 0; i < MAXSVRNUM && ApSrv[ i].apsrv_id != 0; i++ ) { p = strrchr( ApSrv[ i].pathname, '/') ; p ++ ; if ( SearchPid( p, pid[ i]) <= 0 && ApSrv[ i].start_mode == RESIDENT ) { continue ; } flag ++ ; } if ( flag == 0 ) { MessageBX( "服务进程没有启动!") ; return 0; } tmpWin = CreateWindow(4, 7, 18, 60, REGULAR_BOARD, title, NULL); mvwprintw( tmpWin->win, 1, 2, "Svr_T Svr_N Run_Mode M_Concur C_Concur Program") ; wrefresh( tmpWin->win) ; displayappinfo( tmpWin->win) ; signal( SIGALRM, viewapp_action) ; alarm( 1) ; while (getchar() != 27) ; signal( SIGALRM, SIG_IGN) ; alarm( 0) ; DeleteWindow(tmpWin); return 0;}void viewapp_action( int sign){ void viewapp_action() ; displayappinfo( tmpWin->win) ; signal( SIGALRM, viewapp_action) ; alarm( 2) ; return ;}int displayappinfo(WINDOW *pwin){ char *p, tmp[ 20] ; char cmd[ 80] ; int procnum=0 ; int i, j, k ; i = 0 ; do { memset( tmp, '\0', sizeof( tmp)) ; if ( ApSrv[ i].start_mode == RESIDENT ) strcpy( tmp, "Resident") ; else if ( ApSrv[ i].start_mode = TRIGGER ) strcpy( tmp, "Trigger") ; else strcpy( tmp, "Other") ; p = strrchr( ApSrv[ i].pathname, '/') ; p ++ ; procnum = SearchCmdLine( p) ; if ( procnum <= 0 ) procnum = 0 ; memset( cmd, '\0', sizeof( cmd)) ; /*strcpy( cmd, strstr( CmdLine[ 0], p)) ; */ strcpy( cmd, p) ; k = i / 16 ; mvwprintw( pwin, 2 + (i-k*16), 2, " %-4d %-3d %-8s %-2d %-2d %s", ApSrv[ i].apg_id, ApSrv[ i].act_rec.num, tmp, ApSrv[ i].start_num, procnum, cmd) ; if ( i%16 == 0 ) mvwprintw( pwin, 17, 26, "第 [%2d] 页", k+1) ; if ( (i+1)%16 == 0 ) { ZWareaclear( pwin, 2, 2, 16, 58) ; } wrefresh( pwin) ; i ++ ; } while ( i < MAXSVRNUM && ApSrv[ i].apsrv_id != 0 ) ; return( SUCCESS) ;}int ViewShm(){ char *title= " 数据缓冲池信息 " ; void viewshm_action( int ) ; if ( SearchCmdLine( "poll.d") <= 0 ) { MessageBX( "通讯进程没有启动!") ; return 0; } if ( find_bms_cfg() != SUCCESS ) { MessageBX( "find_bms_cfg error!") ; return 0; } if (get_shm_id() == FAILURE || get_shm_p() == FAILURE ) { MessageBX("严重警告: 用于建立缓冲池的共享内存有错误!") ; return 0; } tmpWin = CreateWindow(3, 3, 20, 75, REGULAR_BOARD, title, NULL); signal( SIGALRM, viewshm_action) ; alarm( 1) ; while (getchar() != 27) ; signal( SIGALRM, SIG_IGN) ; alarm( 0) ; DeleteWindow(tmpWin); return ;}void viewshm_action( int sign){ int i, r, c ; int inuser ; void viewshm_action() ; inuser = 0 ; for ( i = 0 ; i < Sl_Accept ; i ++ ) if ( *(shmp+i) == INUSER ) inuser ++ ; mvwprintw( tmpWin->win, 1, 2, "交易请求数: %-3d", inuser) ; mvwprintw( tmpWin->win, 1, 19, "最大缓冲池: %-3d", Sl_Accept) ; mvwprintw( tmpWin->win, 1, 38, "共享内存大小: %ld", max_shm_size) ; mvwprintw( tmpWin->win, 2, 2, "------------------------------------------") ; mvwprintw( tmpWin->win, 2, 41, "---------------------------------") ; wrefresh( tmpWin->win) ; for ( i = 0 ; i < Sl_Accept ; i ++ ) { r = i / 24 ; if ( (i%24) == 0 ) c = 0 ; else c = c + 3 ; if ( *(shmp+i) == INUSER ) mvwprintw( tmpWin->win, r+3, c+2, "★") ; else mvwprintw( tmpWin->win, r+3, c+2, "☆") ; } wrefresh( tmpWin->win) ; signal( SIGALRM, viewshm_action) ; alarm( 2) ; return ;}int StartMon(){ tmpWin = CreateWindow(0, 0, 0, 0, NO_BOARD, NULL, NULL); SystemOpen(); system("monitor") ; SystemClose(); DispTitle() ; DeleteWindow(tmpWin); return 0;}int find_bms_cfg(){ char psf[ 80], key[ 80], tmp[ 80] ; sprintf( psf, "%s/%s", getenv("HOME"), "etc/bms.cfg") ; sprintf( key, "SL_PORT") ; if ( GetProfileString( psf, key, tmp) != SUCCESS ) return( FAILURE) ; Sl_Port = atoi( tmp) ; sprintf( key, "SL_ACCEPT") ; if ( GetProfileString( psf, key, tmp) != SUCCESS ) return( FAILURE) ; Sl_Accept= atoi( tmp) ; if ( Sl_Accept > MAXCONNECTNUM ) { fprintf( stdout, "SLserver Accept Over MAX_CONNECT_NUM!\n") ; return( FAILURE) ; } sprintf( key, "SL_KEY") ; if ( GetProfileString( psf, key, tmp) != SUCCESS ) return( FAILURE) ; Sl_Key= atoi( tmp) ; sprintf( key, "SysInterVal") ; if ( GetProfileString( psf, key, tmp) != SUCCESS ) return( FAILURE) ; MyINTERVAL= atoi( tmp) ; return( SUCCESS) ;}int clear_pid(){ int i, j ; for ( i = 0; i < MAXSVRNUM; i++ ) for ( j = 0; j < MAXCONCURNUM; j++ ) pid[ i][ j] = 0 ; return( SUCCESS) ;}int SearchPid( char *procname, long pid[]){ FILE *pfp ; char *p, cmd[ 80] ; char buf[ 256] ; char str[ 10] ; int i ; p = strrchr( (char *)getenv("HOME"), '/') ; p ++ ; sprintf( cmd, "ps -f -u %s", p) ; if ( (pfp=popen( cmd, "rb")) == NULL ) { fprintf( stdout, "popen ps -f -u output failure!\n") ; return( -1) ; } i = 0 ; while ( !feof( pfp)) { memset( buf, '\0', sizeof( buf)) ; if ( fgets( buf, sizeof( buf), pfp) == NULL ) continue ; if ( strstr( buf, procname) != NULL ) { memset( str, '\0', sizeof( str)) ; sscanf( buf, "%*s %s", str) ; pid[ i] = atol( str) ; i ++ ; } } pclose( pfp) ; if ( i == 0 ) return( -1) ; return( i) ; }int SearchCmdLine( char *procname){ FILE *pfp ; char *p, *q, cmd[ 80] ; char buf[ 256] ; int i ; p = strrchr( (char *)getenv("HOME"), '/') ; p ++ ; sprintf( cmd, "ps -f -u %s", p) ; if ( (pfp=popen( cmd, "rb")) == NULL ) { fprintf( stdout, "popen ps -f -u output failure!\n") ; return( -1) ; } i = 0 ; while ( !feof( pfp)) { memset( buf, '\0', sizeof( buf)) ; if ( fgets( buf, sizeof( buf), pfp) == NULL ) continue ; if ( strstr( buf, procname) != NULL ) { memset( CmdLine[ i], '\0', sizeof( CmdLine[ i])) ; p = &buf[ 0] ; q = &CmdLine[ i][ 0] ; while ( *p != '\0' && *p != '\n' && *p != '\t' ) { *q = *p ; p ++ ; q ++ ; } i ++ ; } } pclose( pfp) ; if ( i == 0 ) return( -1) ; return( i) ; }int get_shm_id(){ int shmflg ; shmflg = QPERM ; max_shm_size = Sl_Accept * ( 1 + 8 + sizeof( SUN_BUF)) ; if ( (shmid=shmget( Sl_Key, max_shm_size, shmflg)) == -1) return( FAILURE) ; return( SUCCESS) ;}int get_shm_p(){ shmp = (char *)0; if ( (shmp=( char *)shmat(shmid, shmp, 0)) == (char *)-1 ) return( FAILURE) ; return( SUCCESS) ;}int clr_shm(){ shmctl( shmid, IPC_RMID, 0) ; return( SUCCESS) ;}int get_sem_id(){ int semflg ; semflg = QPERM ; if ( (semid=semget( Sl_Key, 1, semflg)) == -1) return( FAILURE) ; return( SUCCESS) ;}int clr_sem(){ semctl(semid, 0, IPC_RMID, 0) ; return( SUCCESS) ;}int get_tpnode(){ FILE *tpfp ; char tpnode[ 80] ; char buf[ 80] ; sprintf( tpnode, "%s/%s", getenv("HOME"), TPNODE_FILE) ; if ((tpfp=fopen( tpnode, "rb")) == NULL ) return( FAILURE) ; NodeNum = 0 ; while ( !feof( tpfp) ) { memset( buf, '\0', sizeof( buf)) ; if ( fgets( buf, 79, tpfp) == NULL ) break ; if ( buf[ 0] == '#' || buf[ 0] == '@' || buf[ 0] == '[' ) continue ; memset( (char *)&TpNode[ NodeNum], '\0', sizeof( TpNode[ NodeNum])) ; memset( tpnode, '\0', sizeof( tpnode)) ; sscanf( buf, "%s %s", tpnode, TpNode[ NodeNum].node) ; get_net_b( tpnode, &TpNode[ NodeNum].address) ; NodeNum ++ ; } fclose( tpfp) ; return( SUCCESS) ;}/*----------------------------------------------------------*/#define MAXPROFILESTR 80#define MAXLENOFLINE 255int GetProfileString( char *psPfn, char *psKey, char *psRetStr){ FILE *fp ; char psRet[ MAXPROFILESTR] ; char psLine[ MAXLENOFLINE + 1] ; int i, len ; memset( psRet, '\0', sizeof( psRet)) ; if ( (len=strlen(psKey)) <= 0 || len > MAXPROFILESTR -1 ) return( FAILURE) ; if ( (fp=fopen( psPfn, "rb+")) == NULL) { fprintf( stdout, "Cannot open file [%s]\n", psPfn) ; return( FAILURE) ; } memset( psLine, '\0', sizeof( psLine)) ; while ( fgets( psLine, MAXLENOFLINE, fp) != NULL) { if ( psLine[ 0] == '[' ) continue ; if ( StringCompare( psLine, psKey, len) == -1 ) continue ; if ( psLine[ len] == '=') { for (i = 0; i < MAXLENOFLINE-MAXPROFILESTR-1; i++){ if ( psLine[ i + len + 1] == 0 ) break ; if ( psLine[ i + len + 1] == '\n' ) break ; psRet[ i] = psLine[ len + i + 1] ; } psRet[ i] = 0 ; strcpy( psRetStr, psRet) ; fclose( fp) ; return( SUCCESS) ; } } fclose( fp) ; return( FAILURE) ;}int StringCompare( char *psFirst, char *psSecond, int iNum){ int i ; for ( i = 0 ; i < iNum ; i++ ) { if ( psFirst[ i] != psSecond[ i] ) return( -1) ; } return( 0) ;}int find_apserver_cfg(){ int i ; for ( i = 0; i < MAXSVRNUM; i ++ ) { memset( (char *)&ApSrv[ i], '\0', sizeof( ApSrv[ i])) ; memset( (char *)&ApGrp[ i], '\0', sizeof( ApGrp[ i])) ; memset( (char *)&ApSrvInfo[ i], '\0', sizeof( ApSrvInfo[ i])) ; } find_apserver_name() ; for ( i = 0; i < MAXSVRNUM && ApSrv[ i].apsrv_id != 0; i++ ) { ApSrvInfo[ i].apg_id = ApSrv[ i].apg_id ; ApSrvInfo[ i].svr_num = 0 ; } return( SUCCESS) ;}int find_apserver_name(){ FILE *fp ; char apserver_name[ 80] ; char str[ 128] ; char *p, *q ; int c, delimiter, flg=0 ; sprintf( apserver_name, "%s/%s", getenv("HOME"), APSERVER_FILE) ; if ( (fp=fopen( apserver_name, "rb")) == NULL ) return( FAILURE) ; c = 0 ; while ( !feof( fp) ) { memset( str, '\0', sizeof( str)) ; if ( fgets( str, 128, fp) == NULL ) continue ; pub_trim( str) ; if ( str[ 0] == '\n' || str[ 0] == '\r') continue ; p = &str[ 0] ; if ( *p == '#' ) continue ; if ( *p == '[' ) { c ++ ; delimiter = 0 ; while ( *p != '\0' ) { if ( *p == ']' ) break ; if ( *p == DELIMITER ) delimiter ++ ; p ++ ; } if ( *p == '\0' || delimiter != 3 ) continue ; ApSrv[ c-1].apsrv_id = c ; q = get_substr( str, 1) ; strcpy( ApSrv[ c-1].pathname, q) ; q = get_substr( str, 2) ; if ( strcmp( "resident", q) == 0 ) ApSrv[ c-1].start_mode = RESIDENT ; else if ( strcmp( "trigger", q) == 0 ) ApSrv[ c-1].start_mode = TRIGGER ; else continue ; q = get_substr( str, 3) ; ApSrv[ c-1].start_num = atoi( q) ; q = get_substr( str, 4) ; if ( find_apgroup_name( q, &ApSrv[c-1], &ApGrp[c-1]) != SUCCESS ) ApSrv[ --c].apsrv_id = 0 ; else if ( ApGrp[c-1].stat == 'n' ) ApSrv[ --c].apsrv_id = 0 ; } else ApSrv[ c-1].act_rec.num ++ ; } fclose( fp) ; return( SUCCESS) ;}int find_apgroup_name( char *apg_n, APSRV *Srv, APGRP *Grp){ FILE *fp ; char apgroup_name[ 80] ; char str[ 128], ts[ 80] ; char *j, *k ; int delimiter, flg=0 ; sprintf( apgroup_name, "%s/%s", getenv("HOME"), APGROUP_FILE) ; if ( (fp=fopen( apgroup_name, "rb")) == NULL ) return( FAILURE) ; sprintf( ts, "%s", apg_n) ; while ( !feof( fp) ) { memset( str, '\0', sizeof( str)) ; if ( fgets( str, 128, fp) == NULL ) continue ; pub_trim( str) ; if ( str[ 0] == '\n' || str[ 0] == '\r') continue ; j = &str[ 0] ; if ( *j == '#' ) continue ; if ( *j == '[' ) { delimiter = 0 ; while ( *j != '\0' ) { if ( *j == ']' ) break ; if ( *j == DELIMITER ) delimiter ++ ; j ++ ; } if ( *j == '\0' || delimiter != 4 ) { fclose( fp) ; return( FAILURE) ; } k = get_substr( str, 1) ; if ( strcmp( ts, k) == 0 ) { k = get_substr( str, 1) ; strcpy( Grp->apgrp, k) ; k = get_substr( str, 2) ; Srv->apg_id = Grp->apg_id = atoi( k) ; if ( Srv->apg_id == 0 ) { fclose( fp) ; return( FAILURE) ; } k = get_substr( str, 3) ; strcpy( Grp->sl_pwd.pw_user, k) ; k = get_substr( str, 4) ; strcpy( Grp->sl_pwd.pw_grp, k) ; k = get_substr( str, 5) ; Grp->stat = k[ 0] ; fclose( fp) ; return( SUCCESS) ; } } } fclose( fp) ; return( FAILURE) ;}char *get_substr( char *str, int posi){ char *p, *q ; static char substr[ 128] ; int i = 0, delimiter = 0 ; if ( posi == 0 ) return( (char *)NULL) ; memset( substr, '\0', sizeof( substr)) ; p = &str[ 1] ; while ( *p != '\0' ) { if ( *p == DELIMITER ) delimiter ++ ; if ( delimiter == posi || *p == ']' ) { substr[ i] = 0 ; return( substr) ; } if ( delimiter == posi - 1 && *p != DELIMITER) { substr[ i] = *p ; i ++ ; } p ++ ; } return( (char *)NULL) ;}void pub_trimtail( char *buffer ) ;char *pub_trimfront( char *buffer ) ;void pub_trim( char *buffer){ pub_trimtail( buffer) ; sprintf( buffer, "%s", pub_trimfront( buffer)) ; return ;}void pub_trimtail( char *buffer ){ int i, len ; len = strlen( buffer) ; for ( i = len - 1 ; i >= 0 ; i-- ) { if ( buffer[ i] == ' ' ) buffer[ i] = '\0' ; else break ; } return ;}char *pub_trimfront( char *buffer ){ while ( *buffer != '\0' && *buffer == ' ' ) buffer ++ ; return( buffer) ;}int get_addr( unsigned long net_b, char *c_addr){ union { struct { unsigned char b1 ; unsigned char b2 ; unsigned char b3 ; unsigned char b4 ; } bb ; unsigned long ll ; } ad ; ad.ll = net_b ; /*sprintf( c_addr, "%d.%d.%d.%d", ad.bb.b4, ad.bb.b3, ad.bb.b2, ad.bb.b1);*/ sprintf( c_addr, "%d.%d.%d.%d", ad.bb.b1, ad.bb.b2, ad.bb.b3, ad.bb.b4); return( 0) ;}int get_net_b( char *c_addr, unsigned long *net_b){ union { struct { unsigned char b1 ; unsigned char b2 ; unsigned char b3 ; unsigned char b4 ; } bb ; unsigned long ll ; } ad ; char *p, tmp[ 4] ; p = strrchr( c_addr, '.') ; *p = 0 ; p ++ ; ad.bb.b1 = atoi( p) ; p = strrchr( c_addr, '.') ; *p = 0 ; p ++ ; ad.bb.b2 = atoi( p) ; p = strrchr( c_addr, '.') ; *p = 0 ; p ++ ; ad.bb.b3 = atoi( p) ; ad.bb.b4 = atoi( c_addr) ; (*net_b) = ad.ll ; return( 0) ;}int check_cli_addr( unsigned long net_b, char *node){ int i ; for ( i = 0; i < NodeNum; i ++) if ( net_b == TpNode[ i].address ) { strcpy( node, TpNode[ i].node) ; return( SUCCESS) ; } return( FAILURE) ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -