ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/idar/idar.c
(Generate patch)

Comparing projects/cms/source/idar/idar.c (file contents):
Revision 1.6 by tdb, Sun Mar 30 17:11:26 2003 UTC vs.
Revision 1.10 by pajs, Wed Apr 2 15:41:01 2003 UTC

# Line 29 | Line 29
29   #include <unistd.h>
30   #include <stdlib.h>
31   #include <ukcprog.h>
32 + #include <netdb.h>
33  
34   #include <libxml/xmlmemory.h>
35   #include <libxml/parser.h>
# Line 122 | Line 123 | struct machine_data_t{
123          network_data_list_t *network_data_list;
124          long long network_io_total_tx;
125          long long network_io_total_rx;
126 +        long long network_io_total;
127  
128          diskio_data_list_t *diskio_data_list;
129          long long disk_io_total_write;
130          long long disk_io_total_read;
131 +        long long disk_io_total;
132  
133          /* Maybe in the future */
134          /*
# Line 138 | Line 141 | struct machine_data_t{
141  
142   typedef struct machine_data_t machine_data_list_t;
143  
144 + #define SORTBYMAXNAME 128
145   typedef struct{
146          int cpu_user;
147          int cpu_idle;
# Line 179 | Line 183 | typedef struct{
183  
184          int disk_total_used;
185          int disk_all_stats;
186 +
187 +        char sortby[SORTBYMAXNAME];
188   }display_config_t;
189  
190   GENERIC_MERGE_SORT(static, sort_machine_stats, machine_data_list_t, next)
# Line 190 | Line 196 | int (*sortby_ptr)(machine_data_list_t *a, machine_data
196  
197   MKCMP(cpu_used)
198   MKCMP(load_1)
199 + MKCMP(network_io_total)
200   MKCMP(network_io_total_tx)
201   MKCMP(network_io_total_rx)
202 + MKCMP(disk_io_total)
203   MKCMP(disk_io_total_write)
204   MKCMP(disk_io_total_read)
205   MKCMP(memory_used_pecent)
206   MKCMP(swap_used_pecent)
207  
208 + #define CPU_USED "CPU used"
209 + #define LOAD "Load (1)"
210 + #define NETIORX "total Network RX for all interfaces"
211 + #define NETIOTX "total Network TX for all interfaces"
212 + #define NETIO "total Network IO for all interfaces (rx+tx)"
213 + #define MEM "Memory usage"
214 + #define SWAP "Swap usage"
215 + #define DISKIOR "DiskIO reads"
216 + #define DISKIOW "DiskIO writes"
217 + #define DISKIO "Total DiskIO (reads+writes)"
218 +
219 +
220   /*
221   int cmp_cpu(machine_data_list_t *a, machine_data_list_t *b){
222  
# Line 216 | Line 236 | int cmp_cpu(machine_data_list_t *a, machine_data_list_
236          }
237   }
238   */
239 +
240 + #ifndef HAVE_ATOLL
241 + long long int atoll (const char *nptr){
242 +  return strtoll (nptr, (char **) NULL, 10);
243 + }
244 + #endif
245 +
246 + #ifndef HAVE_STRLCPY
247 + /*
248 + * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
249 + * All rights reserved.
250 + *
251 + * Redistribution and use in source and binary forms, with or without
252 + * modification, are permitted provided that the following conditions
253 + * are met:
254 + * 1. Redistributions of source code must retain the above copyright
255 + *    notice, this list of conditions and the following disclaimer.
256 + * 2. Redistributions in binary form must reproduce the above copyright
257 + *    notice, this list of conditions and the following disclaimer in the
258 + *    documentation and/or other materials provided with the distribution.
259 + * 3. The name of the author may not be used to endorse or promote products
260 + *    derived from this software without specific prior written permission.
261 + *
262 + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
263 + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
264 + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
265 + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
266 + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
267 + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
268 + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
269 + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
270 + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
271 + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272 + */
273 +
274 + /*
275 + * Copy src to string dst of size siz.  At most siz-1 characters
276 + * will be copied.  Always NUL terminates (unless siz == 0).
277 + * Returns strlen(src); if retval >= siz, truncation occurred.
278 + */
279 + size_t
280 + strlcpy(dst, src, siz)
281 +        char *dst;
282 +        const char *src;
283 +        size_t siz;
284 + {
285 +        register char *d = dst;
286 +        register const char *s = src;
287 +        register size_t n = siz;
288 +
289 +        /* Copy as many bytes as will fit */
290 +        if (n != 0 && --n != 0) {
291 +                do {
292 +                        if ((*d++ = *s++) == 0)
293 +                                break;
294 +                } while (--n != 0);
295 +        }
296 +
297 +        /* Not enough room in dst, add NUL and traverse rest of src */
298 +        if (n == 0) {
299 +                if (siz != 0)
300 +                        *d = '\0';              /* NUL-terminate dst */
301 +                while (*s++)
302 +                        ;
303 +        }
304 +
305 +        return(s - src - 1);    /* count does not include NUL */
306 + }
307 +
308 + #endif
309 +
310          
311   FILE *create_tcp_connection(char *hostname, int port){
312          int sock;
# Line 564 | Line 655 | int parse_xml(char *xml, machine_data_list_t **md){
655                  machine_data_list->network_io_total_rx+=ndl_ptr->rx;
656                  ndl_ptr=ndl_ptr->next;
657          }
658 +        machine_data_list->network_io_total=machine_data_list->network_io_total_rx+machine_data_list->network_io_total_tx;
659  
660          didl_ptr=machine_data_list->diskio_data_list;
661          machine_data_list->disk_io_total_read=0;
# Line 573 | Line 665 | int parse_xml(char *xml, machine_data_list_t **md){
665                  machine_data_list->disk_io_total_write+=didl_ptr->write;
666                  didl_ptr=didl_ptr->next;
667          }
668 +        machine_data_list->disk_io_total=machine_data_list->disk_io_total_read+machine_data_list->disk_io_total_write;
669  
670          xmlFreeDoc(doc);
671          
# Line 583 | Line 676 | int parse_xml(char *xml, machine_data_list_t **md){
676  
677   void display(machine_data_list_t *machine_data_list, display_config_t *display_config, int num_lines, int *title){
678          int line_num=4;
679 +        int counter;
680          int x=1;
681  
682          if(*title){
683 < //              printf("\033[2J");
684 <        //      printf("\033[1;1HHostname     CPU   Load  Page  Page  Mem   Swap      Net      Net      Disk     Disk");
685 <        //       printw("\033[2;1H             used%% (1m)  ins   outs  used  used      rx       tx       read     write");
683 >                clear();
684 >                move (num_lines-3, 1);
685 >                printw("Sorting by %-64s", display_config->sortby);
686 >
687                  move(1,1);
688                  printw("%-11s", "Hostname");
689                  x=x+11+1;
# Line 666 | Line 761 | void display(machine_data_list_t *machine_data_list, d
761                  *title=0;
762          }
763  
764 <        for(;num_lines;num_lines--){    
764 >        /* Counter starts at 8, for padding (eg, headers, borders etc) */
765 >        for(counter=8;counter<num_lines;counter++){    
766                  if(machine_data_list==NULL) break;
767                  move(line_num++, 1);
768                  printw("%-11s", machine_data_list->sysname);
# Line 693 | Line 789 | void display(machine_data_list_t *machine_data_list, d
789   int main(int argc, char **argv){
790          WINDOW *window;
791          fd_set infds;
792 +        int maxx, maxy;
793  
794          FILE *control;
795          FILE *data;
# Line 708 | Line 805 | int main(int argc, char **argv){
805  
806          int num_hosts;
807          int max_display=0;
808 <        int title;
808 >        int title=1;
809  
810          int cmdopt;
811          extern int optind;
# Line 754 | Line 851 | int main(int argc, char **argv){
851  
852          display_config.network_io_total_tx=1;
853          display_config.network_io_total_rx=1;
854 <        display_config.network_all_stats=1;
854 >        display_config.network_all_stats=0;
855  
856 <        display_config.disk_io_total_write=0;
857 <        display_config.disk_io_total_read=0;
856 >        display_config.disk_io_total_write=1;
857 >        display_config.disk_io_total_read=1;
858          display_config.disk_io_all_stats=0;
859  
860          display_config.disk_total_used=0;
# Line 771 | Line 868 | int main(int argc, char **argv){
868                          case 's':
869                                  if(!strcmp(optarg, "cpu")){
870                                          sortby_ptr=cmp_cpu_used;
871 +                                        strlcpy(display_config.sortby, CPU_USED, SORTBYMAXNAME);
872                                  }
873                                  if(!strcmp(optarg, "load")){
874                                          sortby_ptr=cmp_load_1;
875 +                                        strlcpy(display_config.sortby, LOAD, SORTBYMAXNAME);
876                                  }
877                                  if(!strcmp(optarg, "mem")){
878                                          sortby_ptr=cmp_memory_used_pecent;
879 +                                        strlcpy(display_config.sortby, MEM, SORTBYMAXNAME);
880                                  }
881 +                                if(!strcmp(optarg, "swap")){
882 +                                        sortby_ptr=cmp_swap_used_pecent;
883 +                                        strlcpy(display_config.sortby, SWAP, SORTBYMAXNAME);
884 +                                }
885                                  if(sortby_ptr==NULL){
886                                          errf("Invalid sort type");
887                                          exit(1);
# Line 786 | Line 890 | int main(int argc, char **argv){
890                  }
891          }      
892  
893 <        if(sortby_ptr==NULL) sortby_ptr=cmp_cpu_used;
893 >        if(sortby_ptr==NULL){
894 >                sortby_ptr=cmp_cpu_used;
895 >                strlcpy(display_config.sortby, "CPU Used", SORTBYMAXNAME);
896 >        }
897  
898          if(argc<(optind+2)){
899                  printf("Usage is %s <-d lines> hostname port <machine list>\n", argv[0]);
# Line 855 | Line 962 | int main(int argc, char **argv){
962          cbreak();
963          echo();
964          window=newwin(0, 0, 0, 0);
965 +        getmaxyx(window, maxy, maxx);
966  
967          stdin_fileno=fileno(stdin);
968          data_fileno=fileno(data);
969          biggest_fileno=(data_fileno>stdin_fileno) ? (data_fileno+1) : (stdin_fileno+1);
970 <
970 >                
971          for(;;){
972                  FD_ZERO(&infds);
973                  FD_SET(stdin_fileno, &infds);
# Line 869 | Line 977 | int main(int argc, char **argv){
977                  if(FD_ISSET(stdin_fileno, &infds)){
978                  
979                          ch=getc(stdin);
980 +                        switch(ch){
981  
982 <                        if(ch=='q'){
983 <                                endwin();
984 <                                exit(0);
982 >                                /* Quit */
983 >                                case 'Q':
984 >                                case 'q':
985 >                                        endwin();
986 >                                        exit(0);
987 >                                        break;
988 >
989 >                                /* Sort by */
990 >                                case 'C':
991 >                                        sortby_ptr=cmp_cpu_used;
992 >                                        strlcpy(display_config.sortby, CPU_USED, SORTBYMAXNAME);
993 >                                        break;
994 >                        
995 >                                case 'M':
996 >                                        sortby_ptr=cmp_memory_used_pecent;
997 >                                        strlcpy(display_config.sortby, MEM, SORTBYMAXNAME);    
998 >                                        break;
999 >
1000 >                                case 'L':
1001 >                                        sortby_ptr=cmp_load_1;
1002 >                                        strlcpy(display_config.sortby, LOAD, SORTBYMAXNAME);
1003 >                                        break;                  
1004 >
1005 >                                case 'S':
1006 >                                        sortby_ptr=cmp_swap_used_pecent;
1007 >                                        strlcpy(display_config.sortby, SWAP, SORTBYMAXNAME);
1008 >                                        break;
1009 >                                
1010 >                                case 'N':
1011 >                                        if(sortby_ptr==cmp_network_io_total){
1012 >                                                strlcpy(display_config.sortby, NETIORX, SORTBYMAXNAME);
1013 >                                                sortby_ptr=cmp_network_io_total_rx;
1014 >                                        }else if(sortby_ptr==cmp_network_io_total_rx){
1015 >                                                strlcpy(display_config.sortby, NETIOTX, SORTBYMAXNAME);
1016 >                                                sortby_ptr=cmp_network_io_total_tx;
1017 >                                        }else{
1018 >                                                strlcpy(display_config.sortby, NETIO, SORTBYMAXNAME);
1019 >                                                sortby_ptr=cmp_network_io_total;
1020 >                                        }
1021 >                                        break;
1022 >                                case 'D':
1023 >                                        if(sortby_ptr==cmp_disk_io_total){
1024 >                                                strlcpy(display_config.sortby, DISKIOR, SORTBYMAXNAME);
1025 >                                                sortby_ptr=cmp_disk_io_total_read;
1026 >                                        }else if(sortby_ptr==cmp_disk_io_total_read){
1027 >                                                strlcpy(display_config.sortby, DISKIOW, SORTBYMAXNAME);
1028 >                                                sortby_ptr=cmp_disk_io_total_write;
1029 >                                        }else{
1030 >                                                strlcpy(display_config.sortby, DISKIO, SORTBYMAXNAME);
1031 >                                                sortby_ptr=cmp_disk_io_total;
1032 >                                        }
1033 >                                        break;
1034 >
1035 >                                /* Display */
1036 >                        
1037 >                                case 'd':
1038 >                                        if(display_config.disk_io_total_read){
1039 >                                                display_config.disk_io_total_read=0;
1040 >                                                display_config.disk_io_total_write=0;
1041 >                                        }else{
1042 >                                                display_config.disk_io_total_read=1;
1043 >                                                display_config.disk_io_total_write=1;
1044 >                                        }
1045 >                                        break;  
1046 >                                case 'n':
1047 >                                        if(display_config.network_io_total_rx){
1048 >                                                display_config.network_io_total_rx=0;
1049 >                                                display_config.network_io_total_tx=0;
1050 >                                        }else{
1051 >                                                display_config.network_io_total_rx=1;
1052 >                                                display_config.network_io_total_tx=1;
1053 >                                        }
1054 >                                        break;
1055 >                                case 'm':
1056 >                                        if(display_config.memory_used_pecent){
1057 >                                                display_config.memory_used_pecent=0;
1058 >                                        }else{
1059 >                                                display_config.memory_used_pecent=1;
1060 >                                        }
1061 >                                        break;
1062 >                                
1063 >                                case 's':
1064 >                                        if(display_config.swap_used_pecent){
1065 >                                                display_config.swap_used_pecent=0;
1066 >                                        }else{
1067 >                                                display_config.swap_used_pecent=1;
1068 >                                        }
1069 >                                        break;
1070 >                                case 'l':
1071 >                                        if(display_config.load_1){
1072 >                                                display_config.load_1=0;
1073 >                                        }else{
1074 >                                                display_config.load_1=1;
1075 >                                        }
1076 >                                        break;
1077 >                                case 'p':
1078 >                                        if(display_config.pages_in){
1079 >                                                display_config.pages_in=0;
1080 >                                                display_config.pages_out=0;
1081 >                                        }else{
1082 >                                                display_config.pages_in=1;
1083 >                                                display_config.pages_out=1;
1084 >                                        }
1085 >                                        break;
1086 >                                case 'c':
1087 >                                        if(display_config.cpu_used){
1088 >                                                display_config.cpu_used=0;
1089 >                                        }else{
1090 >                                                display_config.cpu_used=1;
1091 >                                        }
1092 >                                        break;
1093 >
1094 >                                default:
1095 >                                        /* Invalid key.. Ignore.. Set Title to -1, as the
1096 >                                         * title++ will then make that "0" (false) so a
1097 >                                         * screen redraw will not happen */
1098 >                                        title=-1;
1099 >                                        break;
1100                          }
1101 +
1102 +                        /* Increment title so it becomes true (and making the screen update */  
1103 +                        title++;
1104 +                        
1105                  }
1106                  if(FD_ISSET(data_fileno, &infds)){
1107                          response=fpgetline(data);
# Line 888 | Line 1116 | int main(int argc, char **argv){
1116                  if(num_hosts==-1) continue;
1117                  machine_data_list=sort_machine_stats(machine_data_list, num_hosts, sortby_ptr);
1118                  if(max_display==0){
1119 <                        display(machine_data_list, &display_config, num_hosts, &title);
1119 >                        display(machine_data_list, &display_config, maxy, &title);
1120                  }else{
1121                          display(machine_data_list, &display_config, max_display, &title);
1122                  }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines