--- projects/cms/source/idar/idar.c 2003/03/28 18:42:57 1.2 +++ projects/cms/source/idar/idar.c 2003/03/30 17:11:26 1.6 @@ -1,3 +1,27 @@ +/* + * i-scream central monitoring system + * http://www.i-scream.org.uk + * Copyright (C) 2000-2002 i-scream + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include #include @@ -10,6 +34,12 @@ #include #include "genmergesort.h" +#ifdef HAVE_NCURSES_H +#include +#else +#include +#endif + struct host_line_t{ char *hostname; int line; @@ -556,59 +586,80 @@ void display(machine_data_list_t *machine_data_list, d int x=1; if(*title){ - printf("\033[2J"); +// printf("\033[2J"); // printf("\033[1;1HHostname CPU Load Page Page Mem Swap Net Net Disk Disk"); - // printf("\033[2;1H used%% (1m) ins outs used used rx tx read write"); - printf("\033[1;1H%-11s", "Hostname"); + // printw("\033[2;1H used%% (1m) ins outs used used rx tx read write"); + move(1,1); + printw("%-11s", "Hostname"); x=x+11+1; if(display_config->cpu_used){ - printf("\033[1;%dH%5s", x, "CPU"); - printf("\033[2;%dH%5s", x, "used%"); + move(1,x); + printw("%5s", "CPU"); + move(2,x); + printw("%5s", "used%"); x+=6; } if(display_config->load_1){ - printf("\033[1;%dH%5s", x, "Load"); - printf("\033[2;%dH%5s", x, "(1m)"); + move(1,x); + printw("%5s", "Load"); + move(2,x); + printw("%5s", "(1m)"); x+=6; } if(display_config->pages_in){ - printf("\033[1;%dH%5s", x, "Page"); - printf("\033[2;%dH%5s", x, "ins"); + move(1,x); + printw("%5s", "Page"); + move(2,x); + printw("%5s", "ins"); x+=6; } if(display_config->pages_out){ - printf("\033[1;%dH%5s", x, "Page"); - printf("\033[2;%dH%5s", x, "outs"); + move(1,x); + printw("%5s", "Page"); + move(2,x); + printw("%5s", "outs"); x+=6; } if(display_config->memory_used_pecent){ - printf("\033[1;%dH%5s", x, "Mem"); - printf("\033[2;%dH%5s", x, "used"); + move(1,x); + printw("%5s", "Mem"); + move(2,x); + printw("%5s", "used"); x+=6; } if(display_config->swap_used_pecent){ - printf("\033[1;%dH%5s", x, "Swap"); - printf("\033[2;%dH%5s", x, "used"); + move(1,x); + printw("%5s", "Swap"); + move(2,x); + printw("%5s", "used"); x+=6; } if(display_config->network_io_total_rx){ - printf("\033[1;%dH%8s", x, "Net"); - printf("\033[2;%dH%8s", x, "rx"); + move(1,x); + printw("%8s", "Net"); + move(2,x); + printw("%8s", "rx"); x+=9; } if(display_config->network_io_total_tx){ - printf("\033[1;%dH%8s", x, "Net"); - printf("\033[2;%dH%8s", x, "tx"); + move(1,x); + printw("%8s", "Net"); + move(2,x); + printw("%8s", "tx"); x+=9; } if(display_config->disk_io_total_read){ - printf("\033[1;%dH%9s", x, "Disk"); - printf("\033[2;%dH%9s", x, "read"); + move(1,x); + printw("%9s", "Disk"); + move(2,x); + printw("%9s", "read"); x+=10; } if(display_config->disk_io_total_read){ - printf("\033[1;%dH%9s", x, "Disk"); - printf("\033[2;%dH%9s", x, "write"); + move(1,x); + printw("%9s", "Disk"); + move(2,x); + printw("%9s", "write"); x+=10; } @@ -617,29 +668,32 @@ void display(machine_data_list_t *machine_data_list, d for(;num_lines;num_lines--){ if(machine_data_list==NULL) break; + move(line_num++, 1); + printw("%-11s", machine_data_list->sysname); - printf("\033[%d;%dH%-11s", line_num++, 1, machine_data_list->sysname); + if(display_config->cpu_used) printw(" %5.1f", machine_data_list->cpu_used); + if(display_config->load_1) printw(" %5.1f", machine_data_list->load_1); + if(display_config->pages_in) printw(" %5d", machine_data_list->pages_in); + if(display_config->pages_out) printw(" %5d", machine_data_list->pages_out); + if(display_config->memory_used_pecent) printw(" %5.1f", machine_data_list->memory_used_pecent); + if(display_config->swap_used_pecent) printw(" %5.1f", machine_data_list->swap_used_pecent); + if(display_config->network_io_total_rx) printw(" %8lld", machine_data_list->network_io_total_rx); + if(display_config->network_io_total_tx) printw(" %8lld", machine_data_list->network_io_total_tx); + if(display_config->disk_io_total_read) printw(" %9lld", machine_data_list->disk_io_total_read); + if(display_config->disk_io_total_write) printw(" %9lld", machine_data_list->disk_io_total_write); - if(display_config->cpu_used) printf(" %5.1f", machine_data_list->cpu_used); - if(display_config->load_1) printf(" %5.1f", machine_data_list->load_1); - if(display_config->pages_in) printf(" %5d", machine_data_list->pages_in); - if(display_config->pages_out) printf(" %5d", machine_data_list->pages_out); - if(display_config->memory_used_pecent) printf(" %5.1f", machine_data_list->memory_used_pecent); - if(display_config->swap_used_pecent) printf(" %5.1f", machine_data_list->swap_used_pecent); - if(display_config->network_io_total_rx) printf(" %8lld", machine_data_list->network_io_total_rx); - if(display_config->network_io_total_tx) printf(" %8lld", machine_data_list->network_io_total_tx); - if(display_config->disk_io_total_read) printf(" %9lld", machine_data_list->disk_io_total_read); - if(display_config->disk_io_total_write) printf(" %9lld", machine_data_list->disk_io_total_write); - machine_data_list=machine_data_list->next; } - fflush(stdout); + refresh(); } int main(int argc, char **argv){ + WINDOW *window; + fd_set infds; + FILE *control; FILE *data; @@ -659,10 +713,14 @@ int main(int argc, char **argv){ int cmdopt; extern int optind; extern char *optarg; - sortby_ptr=NULL; display_config_t display_config; + char ch; + int data_fileno, stdin_fileno, biggest_fileno; + + sortby_ptr=NULL; + /* What to display defaults */ display_config.cpu_user=0; display_config.cpu_idle=0; @@ -698,14 +756,13 @@ int main(int argc, char **argv){ display_config.network_io_total_rx=1; display_config.network_all_stats=1; - display_config.disk_io_total_write=1; - display_config.disk_io_total_read=1; + display_config.disk_io_total_write=0; + display_config.disk_io_total_read=0; display_config.disk_io_all_stats=0; display_config.disk_total_used=0; display_config.disk_all_stats=0; - while((cmdopt=getopt(argc, argv, "d:s:")) != -1){ switch(cmdopt){ case 'd': @@ -792,13 +849,40 @@ int main(int argc, char **argv){ printf("\033[1;1HHostname CPU Load Page Page Mem Swap Net Net Disk Disk"); printf("\033[2;1H used%% (1m) ins outs used used rx tx read write"); */ - fflush(stdout); + + initscr(); + nonl(); + cbreak(); + echo(); + window=newwin(0, 0, 0, 0); + + stdin_fileno=fileno(stdin); + data_fileno=fileno(data); + biggest_fileno=(data_fileno>stdin_fileno) ? (data_fileno+1) : (stdin_fileno+1); + for(;;){ - response=fpgetline(data); - if (response==NULL){ - errf("Failed to read data (%m)"); - exit(1); + FD_ZERO(&infds); + FD_SET(stdin_fileno, &infds); + FD_SET(data_fileno, &infds); + select(biggest_fileno, &infds, NULL, NULL, NULL); + + if(FD_ISSET(stdin_fileno, &infds)){ + + ch=getc(stdin); + + if(ch=='q'){ + endwin(); + exit(0); + } } + if(FD_ISSET(data_fileno, &infds)){ + response=fpgetline(data); + if (response==NULL){ + errf("Failed to read data (%m)"); + exit(1); + } + } + num_hosts=parse_xml(response, &machine_data_list); if(num_hosts==-1) continue;