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.9 by pajs, Wed Apr 2 15:23:26 2003 UTC vs.
Revision 1.21 by tdb, Fri Sep 26 21:22:43 2003 UTC

# Line 1 | Line 1
1   /*
2   * i-scream central monitoring system
3 < * http://www.i-scream.org.uk
3 > * http://www.i-scream.org
4   * Copyright (C) 2000-2002 i-scream
5   *
6   * This program is free software; you can redistribute it and/or
# Line 26 | Line 26
26   #include <string.h>
27   #include <sys/types.h>
28   #include <sys/socket.h>
29 + #include <sys/ioctl.h>
30   #include <unistd.h>
31   #include <stdlib.h>
32   #include <ukcprog.h>
33 + #include <netinet/in.h>
34 + #include <netdb.h>
35 + #include <sys/termios.h>
36 + #include <signal.h>
37 + #include <errno.h>
38  
39   #include <libxml/xmlmemory.h>
40   #include <libxml/parser.h>
# Line 142 | Line 148 | typedef struct machine_data_t machine_data_list_t;
148  
149   #define SORTBYMAXNAME 128
150   typedef struct{
151 +        int maxx;
152 +        int maxy;
153 +
154 +        char units;
155 +
156          int cpu_user;
157          int cpu_idle;
158          int cpu_iowait;
# Line 166 | Line 177 | typedef struct{
177          int pages_in;
178          int pages_out;
179  
180 <        int processes_total;
170 <        int processes_sleeping;
171 <        int processes_cpu;
172 <        int processes_zombie;
173 <        int processes_stopped;
180 >        int processes;
181  
182          int network_io_total_tx;
183          int network_io_total_rx;
# Line 215 | Line 222 | MKCMP(swap_used_pecent)
222   #define DISKIOW "DiskIO writes"
223   #define DISKIO "Total DiskIO (reads+writes)"
224  
225 + int sig_winch=0;
226  
219 /*
220 int cmp_cpu(machine_data_list_t *a, machine_data_list_t *b){
221
222        if(a->cpu_used == b->cpu_used){
223                if(a->load_1 == b->load_1) return 0;
224                if(a->load_1 > b->load_1){
225                        return -1;
226                }else{
227                        return 1;
228                }
229        }
230
231        if((a->cpu_used) > (b->cpu_used)){
232                return -1;
233        }else{
234                return 1;
235        }
236 }
237 */
238
227   #ifndef HAVE_ATOLL
228   long long int atoll (const char *nptr){
229    return strtoll (nptr, (char **) NULL, 10);
# Line 673 | Line 661 | int parse_xml(char *xml, machine_data_list_t **md){
661          
662   }
663  
664 < void display(machine_data_list_t *machine_data_list, display_config_t *display_config, int num_lines, int *title){
664 > void display(machine_data_list_t *machine_data_list, display_config_t *display_config, int *title){
665          int line_num=4;
666          int counter;
667          int x=1;
668  
669          if(*title){
670                  clear();
671 <                move (num_lines-3, 1);
671 >                move (display_config->maxy-3, 1);
672                  printw("Sorting by %-64s", display_config->sortby);
673 +                move (display_config->maxy-2, 1);
674 +                if(display_config->units == 'b'){
675 +                        printw("Units are measured in bytes/sec");
676 +                }
677 +                if(display_config->units == 'k'){
678 +                        printw("Units are measured in kilobytes/sec");
679 +                }
680 +                if(display_config->units == 'm'){
681 +                        printw("Units are measured in megabytes/sec");
682 +                }
683  
684                  move(1,1);
685                  printw("%-11s", "Hostname");
686                  x=x+11+1;
687 <                if(display_config->cpu_used){
687 >                if(display_config->cpu_used && (display_config->maxx > x+6)){
688                          move(1,x);
689                          printw("%5s", "CPU");
690                          move(2,x);
691                          printw("%5s", "used%");
692                          x+=6;
693                  }
694 <                if(display_config->load_1){
694 >                if(display_config->load_1 && (display_config->maxx > x+6)){
695                          move(1,x);
696                          printw("%5s", "Load");
697                          move(2,x);
698                          printw("%5s", "(1m)");
699                          x+=6;
700                  }
701 <                if(display_config->pages_in){
701 >
702 >                if(display_config->pages_in && (display_config->maxx > x+6)){
703                          move(1,x);
704                          printw("%5s", "Page");
705                          move(2,x);
706                          printw("%5s", "ins");
707                          x+=6;
708                  }
709 <                if(display_config->pages_out){
709 >
710 >                if(display_config->pages_out && (display_config->maxx > x+6)){
711                          move(1,x);
712                          printw("%5s", "Page");
713                          move(2,x);
714                          printw("%5s", "outs");
715                          x+=6;
716                  }
717 <                if(display_config->memory_used_pecent){
717 >
718 >                if(display_config->memory_used_pecent && (display_config->maxx > x+6)){
719                          move(1,x);
720                          printw("%5s", "Mem");
721                          move(2,x);
722                          printw("%5s", "used");
723                          x+=6;
724                  }
725 <                if(display_config->swap_used_pecent){
725 >
726 >                if(display_config->swap_used_pecent  && (display_config->maxx > x+6)){
727                          move(1,x);
728                          printw("%5s", "Swap");
729                          move(2,x);
730                          printw("%5s", "used");
731                          x+=6;
732                  }
733 <                if(display_config->network_io_total_rx){
734 <                        move(1,x);
735 <                        printw("%8s", "Net");
736 <                        move(2,x);
737 <                        printw("%8s", "rx");
738 <                        x+=9;
733 >
734 >                if(display_config->network_io_total_rx){
735 >                        if(display_config->units=='b' && (display_config->maxx > x+9)){
736 >                                move(1,x);
737 >                                printw("%8s", "Net");
738 >                                move(2,x);
739 >                                printw("%8s", "rx");
740 >                                x+=9;
741 >                        }
742 >
743 >                        if(display_config->units=='k' && (display_config->maxx > x+6)){
744 >                                move(1,x);
745 >                                printw("%5s", "Net");
746 >                                move(2,x);
747 >                                printw("%5s", "rx");
748 >                                x+=6;
749 >                        }
750 >
751 >                        if(display_config->units=='m' && (display_config->maxx > x+6)){
752 >                                move(1,x);
753 >                                printw("%5s", "Net");
754 >                                move(2,x);
755 >                                printw("%5s", "rx");
756 >                                x+=6;
757 >                        }
758 >
759                  }
760 +
761                  if(display_config->network_io_total_tx){
762 <                        move(1,x);
763 <                        printw("%8s", "Net");
764 <                        move(2,x);
765 <                        printw("%8s", "tx");
766 <                        x+=9;
762 >                        if(display_config->units=='b' && (display_config->maxx > x+9)){
763 >                                move(1,x);
764 >                                printw("%8s", "Net");
765 >                                move(2,x);
766 >                                printw("%8s", "tx");
767 >                                x+=9;
768 >                        }
769 >
770 >                        if(display_config->units=='k' && (display_config->maxx > x+6)){
771 >                                move(1,x);
772 >                                printw("%5s", "Net");
773 >                                move(2,x);
774 >                                printw("%5s", "tx");
775 >                                x+=6;
776 >                        }
777 >
778 >                        if(display_config->units=='m' && (display_config->maxx > x+6)){
779 >                                move(1,x);
780 >                                printw("%5s", "Net");
781 >                                move(2,x);
782 >                                printw("%5s", "tx");
783 >                                x+=6;
784 >                        }
785 >
786                  }
787 +
788                  if(display_config->disk_io_total_read){
789 <                        move(1,x);
790 <                        printw("%9s", "Disk");
791 <                        move(2,x);
792 <                        printw("%9s", "read");
793 <                        x+=10;
789 >                        if(display_config->units=='b' && (display_config->maxx > x+10)){
790 >                                move(1,x);
791 >                                printw("%9s", "Disk");
792 >                                move(2,x);
793 >                                printw("%9s", "read");
794 >                                x+=10;
795 >                        }
796 >
797 >                        if(display_config->units=='k' && (display_config->maxx > x+7)){
798 >                                move(1,x);
799 >                                printw("%6s", "Disk");
800 >                                move(2,x);
801 >                                printw("%6s", "read");
802 >                                x+=7;
803 >                        }
804 >
805 >                        if(display_config->units=='m' && (display_config->maxx > x+7)){
806 >                                move(1,x);
807 >                                printw("%6s", "Disk");
808 >                                move(2,x);
809 >                                printw("%6s", "read");
810 >                                x+=7;
811 >                        }
812 >
813                  }
814 +
815                  if(display_config->disk_io_total_read){
816 +                        if(display_config->units=='b' && (display_config->maxx > x+10)){
817 +                                move(1,x);
818 +                                printw("%9s", "Disk");
819 +                                move(2,x);
820 +                                printw("%9s", "write");
821 +                                x+=10;
822 +                        }
823 +
824 +                        if(display_config->units=='k' && (display_config->maxx > x+7)){
825 +                                move(1,x);
826 +                                printw("%6s", "Disk");
827 +                                move(2,x);
828 +                                printw("%6s", "write");
829 +                                x+=7;
830 +                        }
831 +
832 +                        if(display_config->units=='m' && (display_config->maxx > x+7)){
833 +                                move(1,x);
834 +                                printw("%6s", "Disk");
835 +                                move(2,x);
836 +                                printw("%6s", "write");
837 +                                x+=7;
838 +                        }
839 +
840 +                }
841 +
842 +                if(display_config->processes && (display_config->maxx > x+25)){
843                          move(1,x);
844 <                        printw("%9s", "Disk");
844 >                        printw("%-24s", "   Number of Process");
845                          move(2,x);
846 <                        printw("%9s", "write");
847 <                        x+=10;
848 <                }
849 <                
846 >                        printw("%-24s", " Run Slep Zomb Stop  Tot");
847 >                        x+=25;
848 >                }
849 >
850                  *title=0;
851          }
852  
853          /* Counter starts at 8, for padding (eg, headers, borders etc) */
854 <        for(counter=8;counter<num_lines;counter++){    
854 >        for(counter=8;counter<display_config->maxy;counter++){  
855                  if(machine_data_list==NULL) break;
856                  move(line_num++, 1);
857                  printw("%-11s", machine_data_list->sysname);
858 +                x=13;
859  
860 <                if(display_config->cpu_used)            printw(" %5.1f", machine_data_list->cpu_used);
861 <                if(display_config->load_1)              printw(" %5.1f", machine_data_list->load_1);
862 <                if(display_config->pages_in)            printw(" %5d", machine_data_list->pages_in);
863 <                if(display_config->pages_out)           printw(" %5d", machine_data_list->pages_out);
864 <                if(display_config->memory_used_pecent)  printw(" %5.1f", machine_data_list->memory_used_pecent);
865 <                if(display_config->swap_used_pecent)    printw(" %5.1f", machine_data_list->swap_used_pecent);
866 <                if(display_config->network_io_total_rx) printw(" %8lld", machine_data_list->network_io_total_rx);
867 <                if(display_config->network_io_total_tx) printw(" %8lld", machine_data_list->network_io_total_tx);
868 <                if(display_config->disk_io_total_read)  printw(" %9lld", machine_data_list->disk_io_total_read);
869 <                if(display_config->disk_io_total_write) printw(" %9lld", machine_data_list->disk_io_total_write);
860 >                if(display_config->cpu_used && (display_config->maxx > x+6)){
861 >                        printw(" %5.1f", machine_data_list->cpu_used);
862 >                        x+=6;
863 >                }
864 >                if(display_config->load_1 && (display_config->maxx > x+6)){
865 >                        printw(" %5.1f", machine_data_list->load_1);
866 >                        x+=6;
867 >                }
868 >                if(display_config->pages_in && (display_config->maxx > x+6)){
869 >                        printw(" %5d", machine_data_list->pages_in);
870 >                        x+=6;
871 >                }
872 >                if(display_config->pages_out && (display_config->maxx > x+6)){
873 >                        printw(" %5d", machine_data_list->pages_out);
874 >                        x+=6;
875 >                }
876 >                if(display_config->memory_used_pecent && (display_config->maxx > x+6)){
877 >                        printw(" %5.1f", machine_data_list->memory_used_pecent);
878 >                        x+=6;
879 >                }
880 >                if(display_config->swap_used_pecent && (display_config->maxx > x+6)){
881 >                        printw(" %5.1f", machine_data_list->swap_used_pecent);
882 >                        x+=6;
883 >                }
884  
885 +                if(display_config->network_io_total_rx){
886 +                        if(display_config->units=='b' && (display_config->maxx > x+9)){
887 +                                printw(" %8lld", machine_data_list->network_io_total_rx);
888 +                                x+=9;
889 +                        }
890 +                        if(display_config->units=='k' && (display_config->maxx > x+6)){
891 +                                printw(" %5lld", machine_data_list->network_io_total_rx/1024);
892 +                                x+=6;
893 +                        }
894 +                        if(display_config->units=='m' && (display_config->maxx > x+6)){
895 +                                printw(" %5.2f", (double)(machine_data_list->network_io_total_rx/(1024.00*1024.00)));
896 +                                x+=6;
897 +                        }
898 +                }
899 +
900 +                if(display_config->network_io_total_tx){
901 +                        if(display_config->units=='b' && (display_config->maxx > x+9)){
902 +                                printw(" %8lld", machine_data_list->network_io_total_tx);
903 +                                x+=9;
904 +                        }
905 +                        if(display_config->units=='k' && (display_config->maxx > x+6)){
906 +                                printw(" %5lld", machine_data_list->network_io_total_tx/1024);
907 +                                x+=6;
908 +                        }
909 +                        if(display_config->units=='m' && (display_config->maxx > x+6)){
910 +                                printw(" %5.2f", (double)(machine_data_list->network_io_total_tx/(1024.00*1024.00)));
911 +                                x+=6;
912 +                        }
913 +                }
914 +
915 +                if(display_config->disk_io_total_read){
916 +                        if(display_config->units=='b' && (display_config->maxx > x+10)){
917 +                                printw(" %9lld", machine_data_list->disk_io_total_read);
918 +                                x+=10;
919 +                        }
920 +                        if(display_config->units=='k' && (display_config->maxx > x+7)){
921 +                                printw(" %6lld", machine_data_list->disk_io_total_read/1024);
922 +                                x+=7;
923 +                        }
924 +                        if(display_config->units=='m' && (display_config->maxx > x+7)){
925 +                                printw(" %6.2f", (double)(machine_data_list->disk_io_total_read/(1024.00*1024.00)));
926 +                                x+=7;
927 +                        }
928 +                }
929 +
930 +                if(display_config->disk_io_total_write){
931 +                        if(display_config->units=='b' && (display_config->maxx > x+10)){
932 +                                printw(" %9lld", machine_data_list->disk_io_total_write);
933 +                                x+=10;
934 +                        }
935 +                        if(display_config->units=='k' && (display_config->maxx > x+7)){
936 +                                printw(" %6lld", machine_data_list->disk_io_total_write/1024);
937 +                                x+=7;
938 +                        }
939 +                        if(display_config->units=='m' && (display_config->maxx > x+7)){
940 +                                printw(" %6.2f", (double)(machine_data_list->disk_io_total_write/(1024.00*1024.00)));
941 +                                x+=7;
942 +                        }
943 +                }
944 +                if(display_config->processes && display_config->maxx > x+25){
945 +                        printw(" %4d %4d %4d %4d %4d", machine_data_list->processes_cpu, \
946 +                                machine_data_list->processes_sleeping, \
947 +                                machine_data_list->processes_zombie, \
948 +                                machine_data_list->processes_stopped, \
949 +                                machine_data_list->processes_total);
950 +                        x+=25;
951 +                }
952 +
953                  machine_data_list=machine_data_list->next;
954          }
955  
# Line 785 | Line 958 | void display(machine_data_list_t *machine_data_list, d
958          
959   }
960  
961 + void sig_winch_handler(int sig){
962 +
963 +        sig_winch=1;    
964 +        signal(SIGWINCH, sig_winch_handler);
965 + }
966 +
967 + void usage() {
968 +        printf("Usage: idar [-o order] [-s server] [-p port] [-l list] [-h]\n\n");
969 +        printf("  -o    Sets the initial sort order. Accepted arguments are one of:\n");
970 +        printf("            cpu load mem swap net disk\n");
971 +        printf("  -s    Specifies the i-scream server to connect to.\n");
972 +        printf("            default: %s\n", DEF_SERVER_NAME);
973 +        printf("  -p    Specifies the i-scream server port.\n");
974 +        printf("            default: %d\n", DEF_SERVER_PORT);
975 +        printf("  -l    Sets the list of hosts to monitor in a semi-colon separated list.\n");
976 +        printf("  -h    Displays this help information.\n");
977 +        printf("\nReport bugs to <%s>.\n", PACKAGE_BUGREPORT);
978 +        exit(1);
979 + }
980 +
981   int main(int argc, char **argv){
982          WINDOW *window;
983          fd_set infds;
984 <        int maxx, maxy;
984 >        struct winsize size;
985  
986          FILE *control;
987          FILE *data;
# Line 796 | Line 989 | int main(int argc, char **argv){
989          char *machine_list=NULL;
990          char *response=NULL;
991  
992 <        char *servername;
992 >        char *server_name;
993          int server_control_port;
994          int server_data_port;
995  
996          machine_data_list_t *machine_data_list=NULL;
997  
998          int num_hosts;
806        int max_display=0;
999          int title=1;
1000  
1001          int cmdopt;
1002          extern int optind;
1003          extern char *optarg;
1004 +
1005 +        extern int errno;
1006          
1007          display_config_t display_config;
1008          char ch;
# Line 818 | Line 1012 | int main(int argc, char **argv){
1012          sortby_ptr=NULL;
1013  
1014          /* What to display defaults */
1015 +        display_config.units='b';
1016 +        
1017          display_config.cpu_user=0;
1018          display_config.cpu_idle=0;
1019          display_config.cpu_iowait=0;
# Line 842 | Line 1038 | int main(int argc, char **argv){
1038          display_config.pages_in=1;
1039          display_config.pages_out=1;
1040  
1041 <        display_config.processes_total=0;
846 <        display_config.processes_sleeping=0;
847 <        display_config.processes_cpu=0;
848 <        display_config.processes_zombie=0;
849 <        display_config.processes_stopped=0;
1041 >        display_config.processes=1;
1042  
1043          display_config.network_io_total_tx=1;
1044          display_config.network_io_total_rx=1;
# Line 857 | Line 1049 | int main(int argc, char **argv){
1049          display_config.disk_io_all_stats=0;
1050  
1051          display_config.disk_total_used=0;
1052 <        display_config.disk_all_stats=0;
1052 >        display_config.disk_all_stats=0;
1053  
1054 <        while((cmdopt=getopt(argc, argv, "d:s:"))  != -1){
1054 >        signal(SIGWINCH, sig_winch_handler);
1055 >
1056 >        server_name=DEF_SERVER_NAME;
1057 >        server_control_port=DEF_SERVER_PORT;
1058 >
1059 >        while((cmdopt=getopt(argc, argv, "o:s:p:l:h"))  != -1){
1060                  switch(cmdopt){
1061 <                        case 'd':
865 <                                max_display=atoi(optarg);
866 <                        break;
867 <                        case 's':
1061 >                        case 'o':
1062                                  if(!strcmp(optarg, "cpu")){
1063                                          sortby_ptr=cmp_cpu_used;
1064                                          strlcpy(display_config.sortby, CPU_USED, SORTBYMAXNAME);
# Line 878 | Line 1072 | int main(int argc, char **argv){
1072                                          strlcpy(display_config.sortby, MEM, SORTBYMAXNAME);
1073                                  }
1074                                  if(!strcmp(optarg, "swap")){
1075 <                                        sortby_ptr=cmp_swap_used_pecent;
1076 <                                        strlcpy(display_config.sortby, SWAP, SORTBYMAXNAME);
1077 <                                }
1075 >                                        sortby_ptr=cmp_swap_used_pecent;
1076 >                                        strlcpy(display_config.sortby, SWAP, SORTBYMAXNAME);
1077 >                                }
1078 >                                if(!strcmp(optarg, "net")){
1079 >                                        sortby_ptr=cmp_network_io_total;
1080 >                                        strlcpy(display_config.sortby, NETIO, SORTBYMAXNAME);
1081 >                                }
1082 >                                if(!strcmp(optarg, "disk")){
1083 >                                        sortby_ptr=cmp_disk_io_total;
1084 >                                        strlcpy(display_config.sortby, DISKIO, SORTBYMAXNAME);
1085 >                                }
1086                                  if(sortby_ptr==NULL){
1087 <                                        errf("Invalid sort type");
1088 <                                        exit(1);
1087 >                                        errf("Invalid order given.");
1088 >                                        usage();
1089                                  }
1090 <                        break;
1090 >                                break;
1091 >                        case 's':
1092 >                                server_name=optarg;
1093 >                                break;
1094 >                        case 'p':
1095 >                                server_control_port=atoi(optarg);
1096 >                                break;
1097 >                        case 'l':
1098 >                                /* We've been passed a machine list */
1099 >                                /* list currently needs to be ; seperated */
1100 >                                machine_list=strdup(optarg);
1101 >                                break;
1102 >                        case 'h':
1103 >                        default:
1104 >                                usage();
1105 >                                break;
1106                  }
1107          }      
1108  
1109 +        /* Don't take any other arguments */
1110 +        if(argc>optind){
1111 +                usage();
1112 +        }
1113 +
1114          if(sortby_ptr==NULL){
1115                  sortby_ptr=cmp_cpu_used;
1116                  strlcpy(display_config.sortby, "CPU Used", SORTBYMAXNAME);
1117          }
1118  
1119 <        if(argc<(optind+2)){
898 <                printf("Usage is %s <-d lines> hostname port <machine list>\n", argv[0]);
899 <                exit(1);
900 <        }
901 <
902 <        servername=argv[optind];
903 <        server_control_port=atoi(argv[optind+1]);
904 <
905 <        control=create_tcp_connection(servername, server_control_port);
1119 >        control=create_tcp_connection(server_name, server_control_port);
1120          if(control==NULL){
1121                  errf("Failed to connect (%m)");
1122 +                exit(1);
1123          }
1124  
910        if(argc==4){
911                /* We've been passed a machine list */
912                /* list currently needs to be ; seperated */
913                machine_list=strdup(argv[3]);
914        }      
915        
1125          if((tcp_comm(control, NULL, &response, "PROTOCOL 1.1"))!=0){
1126                  errf("Incorrect version number (%s)", response);
1127                  exit(1);
# Line 945 | Line 1154 | int main(int argc, char **argv){
1154                  exit(1);
1155          }
1156  
1157 <        data=create_tcp_connection(servername, server_data_port);
1157 >        data=create_tcp_connection(server_name, server_data_port);
1158          if(data==NULL){
1159 <                errf("Failed to connect to host %s on port %d (%m)",servername, server_data_port);
1159 >                errf("Failed to connect to host %s on port %d (%m)",server_name, server_data_port);
1160 >                exit(1);
1161          }
1162  
953        /*      
954        printf("\033[2J");
955        printf("\033[1;1HHostname     CPU   Load  Page  Page  Mem   Swap      Net      Net      Disk     Disk");
956        printf("\033[2;1H             used%% (1m)  ins   outs  used  used      rx       tx       read     write");      
957        */
958
1163          initscr();
1164          nonl();
1165          cbreak();
1166 <        echo();
1166 >        noecho();
1167          window=newwin(0, 0, 0, 0);
1168 <        getmaxyx(window, maxy, maxx);
1168 >        getmaxyx(window, display_config.maxy, display_config.maxx);
1169  
1170          stdin_fileno=fileno(stdin);
1171          data_fileno=fileno(data);
# Line 971 | Line 1175 | int main(int argc, char **argv){
1175                  FD_ZERO(&infds);
1176                  FD_SET(stdin_fileno, &infds);
1177                  FD_SET(data_fileno, &infds);
1178 <                select(biggest_fileno, &infds, NULL, NULL, NULL);
1178 >                if((select(biggest_fileno, &infds, NULL, NULL, NULL))==-1){
1179 >                        if(errno!=EINTR){
1180 >                                errf("select failed with (%m)");
1181 >                                exit(1);
1182 >                        }
1183 >                }
1184 >
1185 >                if(sig_winch){
1186 >                        if (ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0) {
1187 >                                resizeterm(size.ws_row, size.ws_col);
1188 >                                wrefresh(curscr);
1189 >                        }
1190 >                        getmaxyx(window, display_config.maxy, display_config.maxx);
1191 >                        title=1;
1192 >                        display(machine_data_list, &display_config, &title);
1193 >                        refresh();
1194 >                        sig_winch=0;
1195 >                        continue;
1196 >                }
1197                  
1198                  if(FD_ISSET(stdin_fileno, &infds)){
1199                  
1200 <                        ch=getc(stdin);
1200 >                        ch=getch();
1201                          switch(ch){
1202 +                                case KEY_RESIZE:
1203 +                                        sig_winch=1;
1204 +                                        break;                                          
1205  
1206                                  /* Quit */
1207                                  case 'Q':
# Line 984 | Line 1209 | int main(int argc, char **argv){
1209                                          endwin();
1210                                          exit(0);
1211                                          break;
1212 +                                /* Units */
1213 +                                case 'U':
1214 +                                case 'u':
1215 +                                        if(display_config.units == 'b'){
1216 +                                                display_config.units = 'k';
1217 +                                        }else if(display_config.units == 'k'){
1218 +                                                display_config.units = 'm';
1219 +                                        }else{
1220 +                                                display_config.units = 'b';
1221 +                                        }
1222 +                                        break;
1223  
1224                                  /* Sort by */
1225                                  case 'C':
# Line 1089 | Line 1325 | int main(int argc, char **argv){
1325                                                  display_config.cpu_used=1;
1326                                          }
1327                                          break;
1328 +                                case 'r':
1329 +                                        if(display_config.processes){
1330 +                                                display_config.processes=0;
1331 +                                        }else{
1332 +                                                display_config.processes=1;
1333 +                                        }
1334 +                                        break;
1335  
1336                                  default:
1337 <                                        /* Invalid key.. Ignore.. Set Title to -1, as the
1095 <                                         * title++ will then make that "0" (false) so a
1096 <                                         * screen redraw will not happen */
1097 <                                        title=-1;
1098 <                                        break;
1337 >                                        continue;
1338                          }
1339  
1340                          /* Increment title so it becomes true (and making the screen update */  
# Line 1114 | Line 1353 | int main(int argc, char **argv){
1353                  num_hosts=parse_xml(response, &machine_data_list);
1354                  if(num_hosts==-1) continue;
1355                  machine_data_list=sort_machine_stats(machine_data_list, num_hosts, sortby_ptr);
1356 <                if(max_display==0){
1118 <                        display(machine_data_list, &display_config, maxy, &title);
1119 <                }else{
1120 <                        display(machine_data_list, &display_config, max_display, &title);
1121 <                }
1356 >                display(machine_data_list, &display_config, &title);
1357  
1358          }
1359          exit(0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines