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.12 by pajs, Thu Apr 3 10:59:28 2003 UTC vs.
Revision 1.16 by tdb, Mon Jun 9 13:47:58 2003 UTC

# Line 31 | Line 31
31   #include <ukcprog.h>
32   #include <netinet/in.h>
33   #include <netdb.h>
34 + #include <sys/termios.h>
35 + #include <signal.h>
36 + #include <errno.h>
37  
38   #include <libxml/xmlmemory.h>
39   #include <libxml/parser.h>
# Line 144 | Line 147 | typedef struct machine_data_t machine_data_list_t;
147  
148   #define SORTBYMAXNAME 128
149   typedef struct{
150 +        int maxx;
151 +        int maxy;
152 +
153 +        char units;
154 +
155          int cpu_user;
156          int cpu_idle;
157          int cpu_iowait;
# Line 168 | Line 176 | typedef struct{
176          int pages_in;
177          int pages_out;
178  
179 <        int processes_total;
172 <        int processes_sleeping;
173 <        int processes_cpu;
174 <        int processes_zombie;
175 <        int processes_stopped;
179 >        int processes;
180  
181          int network_io_total_tx;
182          int network_io_total_rx;
# Line 217 | Line 221 | MKCMP(swap_used_pecent)
221   #define DISKIOW "DiskIO writes"
222   #define DISKIO "Total DiskIO (reads+writes)"
223  
224 + int sig_winch=0;
225  
221 /*
222 int cmp_cpu(machine_data_list_t *a, machine_data_list_t *b){
223
224        if(a->cpu_used == b->cpu_used){
225                if(a->load_1 == b->load_1) return 0;
226                if(a->load_1 > b->load_1){
227                        return -1;
228                }else{
229                        return 1;
230                }
231        }
232
233        if((a->cpu_used) > (b->cpu_used)){
234                return -1;
235        }else{
236                return 1;
237        }
238 }
239 */
240
226   #ifndef HAVE_ATOLL
227   long long int atoll (const char *nptr){
228    return strtoll (nptr, (char **) NULL, 10);
# Line 675 | Line 660 | int parse_xml(char *xml, machine_data_list_t **md){
660          
661   }
662  
663 < void display(machine_data_list_t *machine_data_list, display_config_t *display_config, int num_lines, int *title){
663 > void display(machine_data_list_t *machine_data_list, display_config_t *display_config, int *title){
664          int line_num=4;
665          int counter;
666          int x=1;
667  
668          if(*title){
669                  clear();
670 <                move (num_lines-3, 1);
670 >                move (display_config->maxy-3, 1);
671                  printw("Sorting by %-64s", display_config->sortby);
672 +                move (display_config->maxy-2, 1);
673 +                if(display_config->units == 'b'){
674 +                        printw("Units are measured in bytes/sec");
675 +                }
676 +                if(display_config->units == 'k'){
677 +                        printw("Units are measured in kilobytes/sec");
678 +                }
679 +                if(display_config->units == 'm'){
680 +                        printw("Units are measured in megabytes/sec");
681 +                }
682  
683                  move(1,1);
684                  printw("%-11s", "Hostname");
685                  x=x+11+1;
686 <                if(display_config->cpu_used){
686 >                if(display_config->cpu_used && (display_config->maxx > x+6)){
687                          move(1,x);
688                          printw("%5s", "CPU");
689                          move(2,x);
690                          printw("%5s", "used%");
691                          x+=6;
692                  }
693 <                if(display_config->load_1){
693 >                if(display_config->load_1 && (display_config->maxx > x+6)){
694                          move(1,x);
695                          printw("%5s", "Load");
696                          move(2,x);
697                          printw("%5s", "(1m)");
698                          x+=6;
699                  }
700 <                if(display_config->pages_in){
700 >
701 >                if(display_config->pages_in && (display_config->maxx > x+6)){
702                          move(1,x);
703                          printw("%5s", "Page");
704                          move(2,x);
705                          printw("%5s", "ins");
706                          x+=6;
707                  }
708 <                if(display_config->pages_out){
708 >
709 >                if(display_config->pages_out && (display_config->maxx > x+6)){
710                          move(1,x);
711                          printw("%5s", "Page");
712                          move(2,x);
713                          printw("%5s", "outs");
714                          x+=6;
715                  }
716 <                if(display_config->memory_used_pecent){
716 >
717 >                if(display_config->memory_used_pecent && (display_config->maxx > x+6)){
718                          move(1,x);
719                          printw("%5s", "Mem");
720                          move(2,x);
721                          printw("%5s", "used");
722                          x+=6;
723                  }
724 <                if(display_config->swap_used_pecent){
724 >
725 >                if(display_config->swap_used_pecent  && (display_config->maxx > x+6)){
726                          move(1,x);
727                          printw("%5s", "Swap");
728                          move(2,x);
729                          printw("%5s", "used");
730                          x+=6;
731                  }
732 <                if(display_config->network_io_total_rx){
733 <                        move(1,x);
734 <                        printw("%8s", "Net");
735 <                        move(2,x);
736 <                        printw("%8s", "rx");
737 <                        x+=9;
732 >
733 >                if(display_config->network_io_total_rx){
734 >                        if(display_config->units=='b' && (display_config->maxx > x+9)){
735 >                                move(1,x);
736 >                                printw("%8s", "Net");
737 >                                move(2,x);
738 >                                printw("%8s", "rx");
739 >                                x+=9;
740 >                        }
741 >
742 >                        if(display_config->units=='k' && (display_config->maxx > x+6)){
743 >                                move(1,x);
744 >                                printw("%5s", "Net");
745 >                                move(2,x);
746 >                                printw("%5s", "rx");
747 >                                x+=6;
748 >                        }
749 >
750 >                        if(display_config->units=='m' && (display_config->maxx > x+6)){
751 >                                move(1,x);
752 >                                printw("%5s", "Net");
753 >                                move(2,x);
754 >                                printw("%5s", "rx");
755 >                                x+=6;
756 >                        }
757 >
758                  }
759 +
760                  if(display_config->network_io_total_tx){
761 <                        move(1,x);
762 <                        printw("%8s", "Net");
763 <                        move(2,x);
764 <                        printw("%8s", "tx");
765 <                        x+=9;
761 >                        if(display_config->units=='b' && (display_config->maxx > x+9)){
762 >                                move(1,x);
763 >                                printw("%8s", "Net");
764 >                                move(2,x);
765 >                                printw("%8s", "tx");
766 >                                x+=9;
767 >                        }
768 >
769 >                        if(display_config->units=='k' && (display_config->maxx > x+6)){
770 >                                move(1,x);
771 >                                printw("%5s", "Net");
772 >                                move(2,x);
773 >                                printw("%5s", "tx");
774 >                                x+=6;
775 >                        }
776 >
777 >                        if(display_config->units=='m' && (display_config->maxx > x+6)){
778 >                                move(1,x);
779 >                                printw("%5s", "Net");
780 >                                move(2,x);
781 >                                printw("%5s", "tx");
782 >                                x+=6;
783 >                        }
784 >
785                  }
786 +
787                  if(display_config->disk_io_total_read){
788 <                        move(1,x);
789 <                        printw("%9s", "Disk");
790 <                        move(2,x);
791 <                        printw("%9s", "read");
792 <                        x+=10;
788 >                        if(display_config->units=='b' && (display_config->maxx > x+10)){
789 >                                move(1,x);
790 >                                printw("%9s", "Disk");
791 >                                move(2,x);
792 >                                printw("%9s", "read");
793 >                                x+=10;
794 >                        }
795 >
796 >                        if(display_config->units=='k' && (display_config->maxx > x+7)){
797 >                                move(1,x);
798 >                                printw("%6s", "Disk");
799 >                                move(2,x);
800 >                                printw("%6s", "read");
801 >                                x+=7;
802 >                        }
803 >
804 >                        if(display_config->units=='m' && (display_config->maxx > x+7)){
805 >                                move(1,x);
806 >                                printw("%6s", "Disk");
807 >                                move(2,x);
808 >                                printw("%6s", "read");
809 >                                x+=7;
810 >                        }
811 >
812                  }
813 +
814                  if(display_config->disk_io_total_read){
815 +                        if(display_config->units=='b' && (display_config->maxx > x+10)){
816 +                                move(1,x);
817 +                                printw("%9s", "Disk");
818 +                                move(2,x);
819 +                                printw("%9s", "write");
820 +                                x+=10;
821 +                        }
822 +
823 +                        if(display_config->units=='k' && (display_config->maxx > x+7)){
824 +                                move(1,x);
825 +                                printw("%6s", "Disk");
826 +                                move(2,x);
827 +                                printw("%6s", "write");
828 +                                x+=7;
829 +                        }
830 +
831 +                        if(display_config->units=='m' && (display_config->maxx > x+7)){
832 +                                move(1,x);
833 +                                printw("%6s", "Disk");
834 +                                move(2,x);
835 +                                printw("%6s", "write");
836 +                                x+=7;
837 +                        }
838 +
839 +                }
840 +
841 +                if(display_config->processes && (display_config->maxx > x+25)){
842                          move(1,x);
843 <                        printw("%9s", "Disk");
843 >                        printw("%-24s", "   Number of Process");
844                          move(2,x);
845 <                        printw("%9s", "write");
846 <                        x+=10;
847 <                }
848 <                
845 >                        printw("%-24s", " Run Slep Zomb Stop  Tot");
846 >                        x+=25;
847 >                }
848 >
849                  *title=0;
850          }
851  
852          /* Counter starts at 8, for padding (eg, headers, borders etc) */
853 <        for(counter=8;counter<num_lines;counter++){    
853 >        for(counter=8;counter<display_config->maxy;counter++){  
854                  if(machine_data_list==NULL) break;
855                  move(line_num++, 1);
856                  printw("%-11s", machine_data_list->sysname);
857 +                x=13;
858  
859 <                if(display_config->cpu_used)            printw(" %5.1f", machine_data_list->cpu_used);
860 <                if(display_config->load_1)              printw(" %5.1f", machine_data_list->load_1);
861 <                if(display_config->pages_in)            printw(" %5d", machine_data_list->pages_in);
862 <                if(display_config->pages_out)           printw(" %5d", machine_data_list->pages_out);
863 <                if(display_config->memory_used_pecent)  printw(" %5.1f", machine_data_list->memory_used_pecent);
864 <                if(display_config->swap_used_pecent)    printw(" %5.1f", machine_data_list->swap_used_pecent);
865 <                if(display_config->network_io_total_rx) printw(" %8lld", machine_data_list->network_io_total_rx);
866 <                if(display_config->network_io_total_tx) printw(" %8lld", machine_data_list->network_io_total_tx);
867 <                if(display_config->disk_io_total_read)  printw(" %9lld", machine_data_list->disk_io_total_read);
868 <                if(display_config->disk_io_total_write) printw(" %9lld", machine_data_list->disk_io_total_write);
859 >                if(display_config->cpu_used && (display_config->maxx > x+6)){
860 >                        printw(" %5.1f", machine_data_list->cpu_used);
861 >                        x+=6;
862 >                }
863 >                if(display_config->load_1 && (display_config->maxx > x+6)){
864 >                        printw(" %5.1f", machine_data_list->load_1);
865 >                        x+=6;
866 >                }
867 >                if(display_config->pages_in && (display_config->maxx > x+6)){
868 >                        printw(" %5d", machine_data_list->pages_in);
869 >                        x+=6;
870 >                }
871 >                if(display_config->pages_out && (display_config->maxx > x+6)){
872 >                        printw(" %5d", machine_data_list->pages_out);
873 >                        x+=6;
874 >                }
875 >                if(display_config->memory_used_pecent && (display_config->maxx > x+6)){
876 >                        printw(" %5.1f", machine_data_list->memory_used_pecent);
877 >                        x+=6;
878 >                }
879 >                if(display_config->swap_used_pecent && (display_config->maxx > x+6)){
880 >                        printw(" %5.1f", machine_data_list->swap_used_pecent);
881 >                        x+=6;
882 >                }
883  
884 +                if(display_config->network_io_total_rx){
885 +                        if(display_config->units=='b' && (display_config->maxx > x+9)){
886 +                                printw(" %8lld", machine_data_list->network_io_total_rx);
887 +                                x+=9;
888 +                        }
889 +                        if(display_config->units=='k' && (display_config->maxx > x+6)){
890 +                                printw(" %5lld", machine_data_list->network_io_total_rx/1024);
891 +                                x+=6;
892 +                        }
893 +                        if(display_config->units=='m' && (display_config->maxx > x+6)){
894 +                                printw(" %5.2f", (double)(machine_data_list->network_io_total_rx/(1024.00*1024.00)));
895 +                                x+=6;
896 +                        }
897 +                }
898 +
899 +                if(display_config->network_io_total_tx){
900 +                        if(display_config->units=='b' && (display_config->maxx > x+9)){
901 +                                printw(" %8lld", machine_data_list->network_io_total_tx);
902 +                                x+=9;
903 +                        }
904 +                        if(display_config->units=='k' && (display_config->maxx > x+6)){
905 +                                printw(" %5lld", machine_data_list->network_io_total_tx/1024);
906 +                                x+=6;
907 +                        }
908 +                        if(display_config->units=='m' && (display_config->maxx > x+6)){
909 +                                printw(" %5.2f", (double)(machine_data_list->network_io_total_tx/(1024.00*1024.00)));
910 +                                x+=6;
911 +                        }
912 +                }
913 +
914 +                if(display_config->disk_io_total_read){
915 +                        if(display_config->units=='b' && (display_config->maxx > x+10)){
916 +                                printw(" %9lld", machine_data_list->disk_io_total_read);
917 +                                x+=10;
918 +                        }
919 +                        if(display_config->units=='k' && (display_config->maxx > x+7)){
920 +                                printw(" %6lld", machine_data_list->disk_io_total_read/1024);
921 +                                x+=7;
922 +                        }
923 +                        if(display_config->units=='m' && (display_config->maxx > x+7)){
924 +                                printw(" %6.2f", (double)(machine_data_list->disk_io_total_read/(1024.00*1024.00)));
925 +                                x+=7;
926 +                        }
927 +                }
928 +
929 +                if(display_config->disk_io_total_write){
930 +                        if(display_config->units=='b' && (display_config->maxx > x+10)){
931 +                                printw(" %9lld", machine_data_list->disk_io_total_write);
932 +                                x+=10;
933 +                        }
934 +                        if(display_config->units=='k' && (display_config->maxx > x+7)){
935 +                                printw(" %6lld", machine_data_list->disk_io_total_write/1024);
936 +                                x+=7;
937 +                        }
938 +                        if(display_config->units=='m' && (display_config->maxx > x+7)){
939 +                                printw(" %6.2f", (double)(machine_data_list->disk_io_total_write/(1024.00*1024.00)));
940 +                                x+=7;
941 +                        }
942 +                }
943 +                if(display_config->processes && display_config->maxx > x+25){
944 +                        printw(" %4d %4d %4d %4d %4d", machine_data_list->processes_cpu, \
945 +                                machine_data_list->processes_sleeping, \
946 +                                machine_data_list->processes_zombie, \
947 +                                machine_data_list->processes_stopped, \
948 +                                machine_data_list->processes_total);
949 +                        x+=25;
950 +                }
951 +
952                  machine_data_list=machine_data_list->next;
953          }
954  
# Line 787 | Line 957 | void display(machine_data_list_t *machine_data_list, d
957          
958   }
959  
960 + void sig_winch_handler(int sig){
961 +
962 +        sig_winch=1;    
963 +        signal(SIGWINCH, sig_winch_handler);
964 + }
965 +
966   int main(int argc, char **argv){
967          WINDOW *window;
968          fd_set infds;
969 <        int maxx, maxy;
969 >        struct winsize size;
970  
971          FILE *control;
972          FILE *data;
# Line 805 | Line 981 | int main(int argc, char **argv){
981          machine_data_list_t *machine_data_list=NULL;
982  
983          int num_hosts;
808        int max_display=0;
984          int title=1;
985  
986          int cmdopt;
987          extern int optind;
988          extern char *optarg;
989 +
990 +        extern int errno;
991          
992          display_config_t display_config;
993          char ch;
# Line 820 | Line 997 | int main(int argc, char **argv){
997          sortby_ptr=NULL;
998  
999          /* What to display defaults */
1000 +        display_config.units='b';
1001 +        
1002          display_config.cpu_user=0;
1003          display_config.cpu_idle=0;
1004          display_config.cpu_iowait=0;
# Line 844 | Line 1023 | int main(int argc, char **argv){
1023          display_config.pages_in=1;
1024          display_config.pages_out=1;
1025  
1026 <        display_config.processes_total=0;
848 <        display_config.processes_sleeping=0;
849 <        display_config.processes_cpu=0;
850 <        display_config.processes_zombie=0;
851 <        display_config.processes_stopped=0;
1026 >        display_config.processes=1;
1027  
1028          display_config.network_io_total_tx=1;
1029          display_config.network_io_total_rx=1;
# Line 859 | Line 1034 | int main(int argc, char **argv){
1034          display_config.disk_io_all_stats=0;
1035  
1036          display_config.disk_total_used=0;
1037 <        display_config.disk_all_stats=0;
1037 >        display_config.disk_all_stats=0;
1038  
1039 <        while((cmdopt=getopt(argc, argv, "d:s:"))  != -1){
1039 >        signal(SIGWINCH, sig_winch_handler);
1040 >
1041 >        while((cmdopt=getopt(argc, argv, "s:"))  != -1){
1042                  switch(cmdopt){
866                        case 'd':
867                                max_display=atoi(optarg);
868                        break;
1043                          case 's':
1044                                  if(!strcmp(optarg, "cpu")){
1045                                          sortby_ptr=cmp_cpu_used;
# Line 896 | Line 1070 | int main(int argc, char **argv){
1070                  strlcpy(display_config.sortby, "CPU Used", SORTBYMAXNAME);
1071          }
1072  
1073 <        if(argc<(optind+2)){
1074 <                printf("Usage is %s <-d lines> hostname port <machine list>\n", argv[0]);
1075 <                exit(1);
1073 >        servername=DEF_SERVER_NAME;
1074 >        server_control_port=DEF_SERVER_PORT;
1075 >
1076 >        if(argc>=(optind+2)){
1077 >                servername=argv[optind];
1078 >                server_control_port=atoi(argv[optind+1]);
1079          }
1080  
904        servername=argv[optind];
905        server_control_port=atoi(argv[optind+1]);
906
1081          control=create_tcp_connection(servername, server_control_port);
1082          if(control==NULL){
1083                  errf("Failed to connect (%m)");
# Line 951 | Line 1125 | int main(int argc, char **argv){
1125          data=create_tcp_connection(servername, server_data_port);
1126          if(data==NULL){
1127                  errf("Failed to connect to host %s on port %d (%m)",servername, server_data_port);
1128 +                exit(1);
1129          }
1130  
956        /*      
957        printf("\033[2J");
958        printf("\033[1;1HHostname     CPU   Load  Page  Page  Mem   Swap      Net      Net      Disk     Disk");
959        printf("\033[2;1H             used%% (1m)  ins   outs  used  used      rx       tx       read     write");      
960        */
961
1131          initscr();
1132          nonl();
1133          cbreak();
1134 <        echo();
1134 >        noecho();
1135          window=newwin(0, 0, 0, 0);
1136 <        getmaxyx(window, maxy, maxx);
1136 >        getmaxyx(window, display_config.maxy, display_config.maxx);
1137  
1138          stdin_fileno=fileno(stdin);
1139          data_fileno=fileno(data);
# Line 974 | Line 1143 | int main(int argc, char **argv){
1143                  FD_ZERO(&infds);
1144                  FD_SET(stdin_fileno, &infds);
1145                  FD_SET(data_fileno, &infds);
1146 <                select(biggest_fileno, &infds, NULL, NULL, NULL);
1146 >                if((select(biggest_fileno, &infds, NULL, NULL, NULL))==-1){
1147 >                        if(errno!=EINTR){
1148 >                                errf("select failed with (%m)");
1149 >                                exit(1);
1150 >                        }
1151 >                }
1152 >
1153 >                if(sig_winch){
1154 >                        if (ioctl(fileno(stdout), TIOCGWINSZ, &size) == 0) {
1155 >                                resizeterm(size.ws_row, size.ws_col);
1156 >                                wrefresh(curscr);
1157 >                        }
1158 >                        getmaxyx(window, display_config.maxy, display_config.maxx);
1159 >                        title=1;
1160 >                        display(machine_data_list, &display_config, &title);
1161 >                        refresh();
1162 >                        sig_winch=0;
1163 >                        continue;
1164 >                }
1165                  
1166                  if(FD_ISSET(stdin_fileno, &infds)){
1167                  
1168 <                        ch=getc(stdin);
1168 >                        ch=getch();
1169                          switch(ch){
1170 +                                case KEY_RESIZE:
1171 +                                        sig_winch=1;
1172 +                                        break;                                          
1173  
1174                                  /* Quit */
1175                                  case 'Q':
# Line 987 | Line 1177 | int main(int argc, char **argv){
1177                                          endwin();
1178                                          exit(0);
1179                                          break;
1180 +                                /* Units */
1181 +                                case 'U':
1182 +                                case 'u':
1183 +                                        if(display_config.units == 'b'){
1184 +                                                display_config.units = 'k';
1185 +                                        }else if(display_config.units == 'k'){
1186 +                                                display_config.units = 'm';
1187 +                                        }else{
1188 +                                                display_config.units = 'b';
1189 +                                        }
1190 +                                        break;
1191  
1192                                  /* Sort by */
1193                                  case 'C':
# Line 1092 | Line 1293 | int main(int argc, char **argv){
1293                                                  display_config.cpu_used=1;
1294                                          }
1295                                          break;
1296 +                                case 'r':
1297 +                                        if(display_config.processes){
1298 +                                                display_config.processes=0;
1299 +                                        }else{
1300 +                                                display_config.processes=1;
1301 +                                        }
1302 +                                        break;
1303  
1304                                  default:
1305 <                                        /* Invalid key.. Ignore.. Set Title to -1, as the
1098 <                                         * title++ will then make that "0" (false) so a
1099 <                                         * screen redraw will not happen */
1100 <                                        title=-1;
1101 <                                        break;
1305 >                                        continue;
1306                          }
1307  
1308                          /* Increment title so it becomes true (and making the screen update */  
# Line 1117 | Line 1321 | int main(int argc, char **argv){
1321                  num_hosts=parse_xml(response, &machine_data_list);
1322                  if(num_hosts==-1) continue;
1323                  machine_data_list=sort_machine_stats(machine_data_list, num_hosts, sortby_ptr);
1324 <                if(max_display==0){
1121 <                        display(machine_data_list, &display_config, maxy, &title);
1122 <                }else{
1123 <                        display(machine_data_list, &display_config, max_display, &title);
1124 <                }
1324 >                display(machine_data_list, &display_config, &title);
1325  
1326          }
1327          exit(0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines