--- projects/cms/source/idar/idar.c 2003/04/10 12:31:19 1.15 +++ projects/cms/source/idar/idar.c 2004/06/02 16:13:06 1.24 @@ -1,6 +1,6 @@ /* * i-scream central monitoring system - * http://www.i-scream.org.uk + * http://www.i-scream.org * Copyright (C) 2000-2002 i-scream * * This program is free software; you can redistribute it and/or @@ -26,14 +26,15 @@ #include #include #include +#include #include #include -#include #include #include #include #include #include +#include #include #include @@ -413,6 +414,8 @@ int parse_xml(char *xml, machine_data_list_t **md){ machine_data_list->diskio_data_list=NULL; *md=machine_data_list; num_hosts++; + } else { + xmlFree(hostname); } /* Now we want to pull out the data */ @@ -963,6 +966,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 +991,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; @@ -990,7 +1007,7 @@ int main(int argc, char **argv){ extern int errno; display_config_t display_config; - char ch; + int ch; int data_fileno, stdin_fileno, biggest_fileno; @@ -1038,9 +1055,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 +1074,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); } - if(argc<(optind+2)){ - printf("Usage is %s <-d lines> hostname port \n", argv[0]); - exit(1); - } - - 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 +1156,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); }