--- projects/cms/source/idar/idar.c 2003/06/09 13:47:58 1.16 +++ projects/cms/source/idar/idar.c 2003/08/21 21:10:34 1.20 @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -963,6 +964,20 @@ void sig_winch_handler(int sig){ signal(SIGWINCH, sig_winch_handler); } +void usage() { + printf("Usage: idar [-o order] [-s server] [-p port] [-l list] [-h]\n\n"); + printf(" -o Sets the initial sort order. Accepted arguments are one of:\n"); + printf(" cpu load mem swap net disk\n"); + printf(" -s Specifies the i-scream server to connect to.\n"); + printf(" default: %s\n", DEF_SERVER_NAME); + printf(" -p Specifies the i-scream server port.\n"); + printf(" default: %d\n", DEF_SERVER_PORT); + printf(" -l Sets the list of hosts to monitor in a semi-colon separated list.\n"); + printf(" -h Displays this help information.\n"); + printf("\nReport bugs to <%s>.\n", PACKAGE_BUGREPORT); + exit(1); +} + int main(int argc, char **argv){ WINDOW *window; fd_set infds; @@ -974,7 +989,7 @@ int main(int argc, char **argv){ char *machine_list=NULL; char *response=NULL; - char *servername; + char *server_name; int server_control_port; int server_data_port; @@ -1038,9 +1053,12 @@ int main(int argc, char **argv){ signal(SIGWINCH, sig_winch_handler); - while((cmdopt=getopt(argc, argv, "s:")) != -1){ + server_name=DEF_SERVER_NAME; + server_control_port=DEF_SERVER_PORT; + + while((cmdopt=getopt(argc, argv, "o:s:p:l:h")) != -1){ switch(cmdopt){ - case 's': + case 'o': if(!strcmp(optarg, "cpu")){ sortby_ptr=cmp_cpu_used; strlcpy(display_config.sortby, CPU_USED, SORTBYMAXNAME); @@ -1054,42 +1072,56 @@ int main(int argc, char **argv){ strlcpy(display_config.sortby, MEM, SORTBYMAXNAME); } if(!strcmp(optarg, "swap")){ - sortby_ptr=cmp_swap_used_pecent; - strlcpy(display_config.sortby, SWAP, SORTBYMAXNAME); - } + sortby_ptr=cmp_swap_used_pecent; + strlcpy(display_config.sortby, SWAP, SORTBYMAXNAME); + } + if(!strcmp(optarg, "net")){ + sortby_ptr=cmp_network_io_total; + strlcpy(display_config.sortby, NETIO, SORTBYMAXNAME); + } + if(!strcmp(optarg, "disk")){ + sortby_ptr=cmp_disk_io_total; + strlcpy(display_config.sortby, DISKIO, SORTBYMAXNAME); + } if(sortby_ptr==NULL){ - errf("Invalid sort type"); - exit(1); + errf("Invalid order given."); + usage(); } - break; + break; + case 's': + server_name=optarg; + break; + case 'p': + server_control_port=atoi(optarg); + break; + case 'l': + /* We've been passed a machine list */ + /* list currently needs to be ; seperated */ + machine_list=strdup(optarg); + break; + case 'h': + default: + usage(); + break; } } + /* Don't take any other arguments */ + if(argc>optind){ + usage(); + } + if(sortby_ptr==NULL){ sortby_ptr=cmp_cpu_used; strlcpy(display_config.sortby, "CPU Used", SORTBYMAXNAME); } - servername=DEF_SERVER_NAME; - server_control_port=DEF_SERVER_PORT; - - if(argc>=(optind+2)){ - servername=argv[optind]; - server_control_port=atoi(argv[optind+1]); - } - - control=create_tcp_connection(servername, server_control_port); + control=create_tcp_connection(server_name, server_control_port); if(control==NULL){ errf("Failed to connect (%m)"); exit(1); } - if(argc==4){ - /* We've been passed a machine list */ - /* list currently needs to be ; seperated */ - machine_list=strdup(argv[3]); - } - if((tcp_comm(control, NULL, &response, "PROTOCOL 1.1"))!=0){ errf("Incorrect version number (%s)", response); exit(1); @@ -1122,9 +1154,9 @@ int main(int argc, char **argv){ exit(1); } - data=create_tcp_connection(servername, server_data_port); + data=create_tcp_connection(server_name, server_data_port); if(data==NULL){ - errf("Failed to connect to host %s on port %d (%m)",servername, server_data_port); + errf("Failed to connect to host %s on port %d (%m)",server_name, server_data_port); exit(1); }