📄 adm.cc
字号:
S_TypeInfo *Type = gv_TypeInfo.Next;
char Buffer[STRING_LEN];
time_t Now;
struct tm *Time;
time(&Now);
Time = localtime(&Now);
mvhline(0,0,' ',COLS);
mvhline(1,0,' ',COLS);
mvhline(4,0,' ',COLS);
mvhline(21,0,' ',COLS);
mvhline(22,0,' ',COLS);
mvaddstr(0,28,(char *)"集中监控系统──中国电信");
mvaddstr(1,37,(char *)"主菜单");
mvaddstr(3,0,(char *)"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
mvaddstr(4,0,(char *)"序号");
mvaddstr(4,10,(char *)"监控类别");
mvaddstr(4,30,(char *)"监控对象");
mvaddstr(5,0,(char *)"────────────────────────────────────────");
mvaddstr(19,0,(char *)"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
mvaddstr(22,0,(char *)" Up Arrow=向上 Down Arrow=向下 ESC=退出 ");
mvaddstr(23,0,(char *)" Right Arrow=向下翻屏 Left Arrow=向上翻屏 Enter=选择 ");
mvhline(24,0,' ',COLS);
while(Type != 0)
{
Type = Type->Next;
lv_iTotalRow++; /*进程和磁盘空间总数*/
}
if (gv_iSelectedRow <= 0)
{
gv_iSelectedRow = lv_iTotalRow;
}
if (gv_iSelectedRow > lv_iTotalRow)
{
gv_iSelectedRow = 1;
}
if (gv_iStartRow <= 0)
{
gv_iStartRow = 1;
}
if (gv_iStartRow > gv_iSelectedRow)
{
gv_iStartRow = gv_iSelectedRow;
}
if (gv_iSelectedRow - gv_iStartRow >= 13)
{
gv_iStartRow = gv_iSelectedRow - 13 + 1;
}
Type = gv_TypeInfo.Next;
while(Type != 0)
{
if (lv_iCurrentRow >= gv_iStartRow)
{
break;
}
Type = Type->Next;
lv_iCurrentRow++;
}
while(Type != 0)
{
if (lv_iCurrentRow >= gv_iStartRow+13)
{
break;
}
if (lv_iCurrentRow == gv_iSelectedRow)
{
standout();
}
mvhline(lv_iCurrentRow - gv_iStartRow + 6,0,' ',COLS);
memset(Buffer,0,COLS);
sprintf(Buffer,"%d",lv_iCurrentRow);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,0,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer,Type->MonitorType,20);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,10,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer,Type->Type,30);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,30,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer,"--->",20);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,60,Buffer);
if (lv_iCurrentRow == gv_iSelectedRow)
{
standend();
}
Type = Type->Next;
lv_iCurrentRow++;
}
while(lv_iCurrentRow < gv_iStartRow + 13)
{
mvhline(lv_iCurrentRow - gv_iStartRow + 6,0,' ',COLS);
lv_iCurrentRow ++;
}
sprintf(Buffer,"[%02d个其他选项]",gv_iStartRow - 1);
mvaddstr(2,0,Buffer);
sprintf(Buffer,"[共%02d个选项]",lv_iTotalRow);
mvaddstr(2,34,Buffer);
sprintf(Buffer,"%04d/%02d/%02d %02d:%02d:%02d",Time->tm_year+1900,Time->tm_mon+1,Time->tm_mday,Time->tm_hour,Time->tm_min,Time->tm_sec);
mvaddstr(2,58,Buffer);
sprintf(Buffer,"[%02d个其他选项]",(lv_iTotalRow - gv_iStartRow - 13 + 1 > 0)?lv_iTotalRow - gv_iStartRow - 13 + 1:0);
mvaddstr(20,0,Buffer);
move(gv_iSelectedRow - gv_iStartRow + 6,0);
refresh();
}
/****************************************************************
**
** Function: RebuildProc
** Purpose: 重建进程监控菜单
** Input Parammeters:
Type -- 上级菜单名称
** Return:
** datetime:
**
*****************************************************************/
void RebuildProc(const char *Type)
{
int lv_iTotalRow = 0,lv_iCurrentRow = 0;
char Buffer[STRING_LEN];
char Date[10+1];
time_t Now;
struct tm *Time;
int i;
time(&Now);
Time = localtime(&Now);
sprintf(Date,"%04d-%02d-%02d",Time->tm_year+1900,Time->tm_mon+1,Time->tm_mday);
mvhline(0,0,' ',COLS);
mvhline(1,0,' ',COLS);
mvhline(4,0,' ',COLS);
mvhline(21,0,' ',COLS);
mvhline(22,0,' ',COLS);
mvaddstr(0,28,(char *)"集中监控系统──中国电信");
mvaddstr(1,(80 - strlen(Type))/2,(char *)Type);
mvaddstr(3,0,(char *)"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
mvaddstr(4,0,(char *)"序号");
mvaddstr(4,5,(char *)"进程别名");
mvaddstr(4,20,(char *)"进程ID");
mvaddstr(4,30,(char *)"进程状态");
mvaddstr(4,40,(char *)"处理对象");
mvaddstr(4,68,(char *)"处理速率");
mvaddstr(5,0,(char *)"────────────────────────────────────────");
mvaddstr(19,0,(char *)"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
mvaddstr(22,0,(char *)" Up Arrow=向上 A=启动全部 R=启动 ");
mvaddstr(23,0,(char *)" Down Arrow=向下 S=停止全部 X=停止 ");
mvaddstr(24,0,(char *)" Left Arrow=向上翻屏 Right Arrow=向下翻屏 ESC=退出 ");
for(i = 1;i <= gv_iProcCount;i++)
{
if (strcmp(gv_ProcInfo[i].Type,Type) == 0)
{
lv_iTotalRow++;
}
}
if (gv_iSelectedRow <= 0)
{
gv_iSelectedRow = lv_iTotalRow;
}
if (gv_iSelectedRow > lv_iTotalRow)
{
gv_iSelectedRow = 1;
}
if (gv_iStartRow <= 0)
{
gv_iStartRow = 1;
}
if (gv_iStartRow > gv_iSelectedRow)
{
gv_iStartRow = gv_iSelectedRow;
}
if (gv_iSelectedRow - gv_iStartRow >= 13)
{
gv_iStartRow = gv_iSelectedRow - 13 + 1;
}
for(i = 1;i <= gv_iProcCount;i++)
{
if (strcmp(gv_ProcInfo[i].Type,Type) == 0)
{
lv_iCurrentRow++;
}
if (lv_iCurrentRow >= gv_iStartRow)
{
break;
}
}
for(;i <= gv_iProcCount;i++)
{
if (strcmp(gv_ProcInfo[i].Type,Type) != 0)
{
continue;
}
if (lv_iCurrentRow >= gv_iStartRow + 13)
{
break;
}
if (lv_iCurrentRow == gv_iSelectedRow)
{
standout();
}
mvhline(lv_iCurrentRow - gv_iStartRow + 6,0,' ',COLS);
memset(Buffer,0,COLS);
sprintf(Buffer,"%d",lv_iCurrentRow);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,0,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer,gv_ProcInfo[i].Alias,15);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,5,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer,gv_ProcInfo[i].ProcID,10);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,20,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer,gv_ProcInfo[i].Status,10);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,30,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer,gv_ProcInfo[i].Object,25);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,40,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer, gv_ProcInfo[i].CDRProcSpeed, 20);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6, 67, Buffer);
if (lv_iCurrentRow == gv_iSelectedRow)
{
standend();
}
lv_iCurrentRow++;
}
while(lv_iCurrentRow < gv_iStartRow + 13)
{
mvhline(lv_iCurrentRow - gv_iStartRow + 6,0,' ',COLS);
lv_iCurrentRow++;
}
sprintf(Buffer,"[%02d个其他选项]",gv_iStartRow - 1);
mvaddstr(2,0,Buffer);
sprintf(Buffer,"[共%02d个选项]",lv_iTotalRow);
mvaddstr(2,34,Buffer);
sprintf(Buffer,"%04d/%02d/%02d %02d:%02d:%02d",Time->tm_year+1900,Time->tm_mon+1,Time->tm_mday,Time->tm_hour,Time->tm_min,Time->tm_sec);
mvaddstr(2,58,Buffer);
sprintf(Buffer,"[%02d个其他选项]",(lv_iTotalRow - gv_iStartRow - 13 + 1 > 0)?lv_iTotalRow - gv_iStartRow - 13 + 1:0);
mvaddstr(20,0,Buffer);
move(gv_iSelectedRow - gv_iStartRow + 6,0);
refresh();
}
/****************************************************************
**
** Function: RebuildDisk
** Purpose: 重建磁盘监控菜单
** Input Parammeters:
Type -- 上级菜单名称
** Return:
** datetime:
**
*****************************************************************/
void RebuildDisk(const char *Type)
{
int lv_iTotalRow = 0,lv_iCurrentRow = 0;
char Buffer[STRING_LEN];
char Date[10+1];
time_t Now;
struct tm *Time;
int i;
time(&Now);
Time = localtime(&Now);
mvhline(0,0,' ',COLS);
mvhline(1,0,' ',COLS);
mvhline(4,0,' ',COLS);
mvhline(21,0,' ',COLS);
mvhline(22,0,' ',COLS);
mvaddstr(0,28,(char *)"集中监控系统──中国电信");
mvaddstr(1,(80 - strlen(Type))/2,(char *)Type);
mvaddstr(3,0,(char *)"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
mvaddstr(4,0,(char *)"序号");
mvaddstr(4,10,(char *)"路径");
mvaddstr(4,25,(char *)"总空间");
mvaddstr(4,35,(char *)"可用空间");
mvaddstr(4,45,(char *)"利用率");
mvaddstr(4,56,(char *)"主机地址");
mvaddstr(5,0,(char *)"────────────────────────────────────────");
mvaddstr(19,0,(char *)"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
mvaddstr(22,0,(char *)" Up Arrow=向上 Down Arrow=向下 ");
mvaddstr(23,0,(char *)" Left Arrow=向上翻屏 Right Arrow=向下翻屏 ESC=退出");
mvhline(24,0,' ',COLS);
for(i = 1;i <= gv_iDiskCount;i++)
{
if (strcmp(gv_DiskInfo[i].Type,Type) == 0)
{
lv_iTotalRow++;
}
}
if (gv_iSelectedRow <= 0)
{
gv_iSelectedRow = lv_iTotalRow;
}
if (gv_iSelectedRow > lv_iTotalRow)
{
gv_iSelectedRow = 1;
}
if (gv_iStartRow <= 0)
{
gv_iStartRow = 1;
}
if (gv_iStartRow > gv_iSelectedRow)
{
gv_iStartRow = gv_iSelectedRow;
}
if (gv_iSelectedRow - gv_iStartRow >= 13)
{
gv_iStartRow = gv_iSelectedRow - 13 + 1;
}
for(i = 1;i <= gv_iDiskCount;i++)
{
if (strcmp(gv_DiskInfo[i].Type,Type) == 0)
{
lv_iCurrentRow++;
}
if (lv_iCurrentRow >= gv_iStartRow)
{
break;
}
}
for(;i <= gv_iDiskCount;i++)
{
if (strcmp(gv_DiskInfo[i].Type,Type) != 0)
{
continue;
}
if (lv_iCurrentRow >= gv_iStartRow + 13)
{
break;
}
if (lv_iCurrentRow == gv_iSelectedRow)
{
standout();
}
mvhline(lv_iCurrentRow - gv_iStartRow + 6,0,' ',COLS);
memset(Buffer,0,COLS);
sprintf(Buffer,"%d",lv_iCurrentRow);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,0,Buffer);
memset(Buffer,0,COLS);
memcpy(Buffer,gv_DiskInfo[i].Path,20);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,5,Buffer);
memset(Buffer,0,COLS);
sprintf(Buffer,"%10lu",gv_DiskInfo[i].DiskSize);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,21,Buffer);
memset(Buffer,0,COLS);
sprintf(Buffer,"%10lu",gv_DiskInfo[i].AvailSize);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,32,Buffer);
if (gv_DiskInfo[i].DiskSize!=0)
{
memset(Buffer,0,COLS);
sprintf(Buffer,"%8.2f%%",(float)100 * (gv_DiskInfo[i].DiskSize - gv_DiskInfo[i].AvailSize) / gv_DiskInfo[i].DiskSize);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,42,Buffer);
}
memset(Buffer,0,COLS);
memcpy(Buffer,gv_DiskInfo[i].HostAddr,25);
mvaddstr(lv_iCurrentRow - gv_iStartRow + 6,56,Buffer);
if (lv_iCurrentRow == gv_iSelectedRow)
{
standend();
}
lv_iCurrentRow++;
}
while(lv_iCurrentRow < gv_iStartRow + 13)
{
mvhline(lv_iCurrentRow - gv_iStartRow + 6,0,' ',COLS);
lv_iCurrentRow++;
}
sprintf(Buffer,"[%02d个其他选项]",gv_iStartRow - 1);
mvaddstr(2,0,Buffer);
sprintf(Buffer,"[共%02d个选项]",lv_iTotalRow);
mvaddstr(2,34,Buffer);
sprintf(Buffer,"%04d/%02d/%02d %02d:%02d:%02d",Time->tm_year+1900,Time->tm_mon+1,Time->tm_mday,Time->tm_hour,Time->tm_min,Time->tm_sec);
mvaddstr(2,58,Buffer);
sprintf(Buffer,"[%02d个其他选项]",(lv_iTotalRow - gv_iStartRow - 13 + 1 > 0)?lv_iTotalRow - gv_iStartRow - 13 + 1:0);
mvaddstr(20,0,Buffer);
move(gv_iSelectedRow - gv_iStartRow + 6,0);
refresh();
}
void MainTimeBreak(int sigid)
{
RebuildMenu();
return;
}
void ProcTimeBreak(int sigid)
{
LoadProcData(g_Type);
RebuildProc(g_Type);
return;
}
void DiskTimeBreak(int sigid)
{
LoadDiskData(g_Type);
RebuildDisk(g_Type);
return;
}
/****************************************************************
**
** Function: LoadProcData
** Purpose: 调用进程信息
** Input Parammeters:
Type -- 进程所属类型
** Return:
** datetime:
**
*****************************************************************/
void LoadProcData(const char *Type)
{
C_BaseSock Socket;
struct sockaddr_in Address;
char CommandLine[STRING_LEN];
char Buffer[STRING_LEN];
char SendBuffer[STRING_LEN],RecvBuffer[STRING_LEN];
int lv_iCurrentHost,lv_iCurrentProc,lv_iCurrentRow;
int i,j,k;
for(lv_iCurrentHost = 1;lv_iCurrentHost <= gv_iHostCount;lv_iCurrentHost++)
{
strcpy(CommandLine,"Command@ProcessStatus");
lv_iCurrentRow = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -