#include #include #include #include #define length 100 #define num_maq_max 10 //celu mama: 0 - 95028055 int main(int argc, char *argv[]) { /***************************** Definicion De Variables Fijas *****************************************/ int i=1, j=0, c, k, int_time, num_ping, acum=0, count, sca, lim, mi_pid; float tmp1, tmp2; FILE *arch1, *temp1, *arch2, *temp2; char par_f[length], namemaq[num_maq_max][length]; pid_t arreglo[num_maq_max]; /***************************** Fin Definicion De Variables Fijas *************************************/ /***************************** Inicio Obtencion De Los Flags Para Determinar Opciones De Ejecucion *****************/ if((argc<4)) /* Restriccion de argumentos */ { printf("Faltan argumentos\nAyuda:rttgraph [-s|-m|-l] \n"); exit(0); } c = getopt(argc, argv, "sml"); /* Analizando flags */ switch(c) { case -1: printf("No hay flags :(\nAyuda:rttgraph [-s|-m|-l] \n"); exit(0); case 's': sprintf(par_f,"\tModo short activado\n"); int_time=1; num_ping=5; lim=1; break; case 'm': sprintf(par_f,"\tModo middle activado\n"); int_time=3; num_ping=90; lim=1; break; case 'l': sprintf(par_f,"\tModo long activado\n"); int_time=60; num_ping=1440; lim=1; break; default: printf("Modo no valido\nAyuda:rttgraph [-s|-m|-l] \n"); exit(0); } /***************************** Fin Obtencion De Los Flags Para Determinar Opciones De Ejecucion ****************************/ /***************************** Inicio Informacion Al Usuario ****************************************************************/ // system("clear"); printf("Programa Que Genera Un Archivo Postscript Que Contiene Las Graficas De Tiempo De RTT Y Paquetes Perdidos\n\nInformacion:\n"); printf(par_f); printf("\tTiempo Esperado De Ejecucion: %d [seg] o %f [min] o %f [hrs]\n\n",num_ping*int_time,(float)(num_ping*int_time/60.0),(float)(num_ping*int_time/3600.0)); /***************************** Fin Informacion Al Usuario ****************************************************************/ /***************************** Inicio reconocimiento de los host a utilizar **************************/ arch1=fopen(argv[argc-2],"r"); while((fscanf(arch1,"%s\n",&namemaq[j]))!=EOF) j++; fclose(arch1); /***************************** Fin reconocimiento de los host ****************************************/ /***************************** Inicio De Recopilacion Y Procesado De Informacion *******************************************/ for(i=0;i>d_maq%d.%d.tx",int_time,namemaq[i],num_ping,i+1,mi_pid); /* Haciendo Ping */ system(par_f); sprintf(par_f,"cat d_maq%d.%d.tx |awk '{print $6}' |awk -F= '{print $2}'>>rtt_maq%d.%d.txx",i+1,mi_pid,i+1,mi_pid); /* Rescatando la informacion importante */ system(par_f); sprintf(par_f,"cat d_maq%d.%d.tx |awk '{print $5}' |awk -F= '{print $2}'>>loss_maq%d.%d.txx",i+1,mi_pid,i+1,mi_pid); /* Rescatando la informacion importante */ system(par_f); sprintf(par_f,"rtt_maq%d.%d.txx",i+1,mi_pid); /* Abriendo la informacion recopilada */ temp1=fopen(par_f,"r"); sprintf(par_f,"rtt_maq%d.%d.dat",i+1,mi_pid); /* Para traspasarla a un formato valido para gnuplot */ arch1=fopen(par_f,"w"); sprintf(par_f,"loss_maq%d.%d.txx",i+1,mi_pid); temp2=fopen(par_f,"r"); sprintf(par_f,"loss_maq%d.%d.dat",i+1,mi_pid); arch2=fopen(par_f,"w"); count=0; sca=0; for(k=0;k0) waitpid(arreglo[i],NULL,NULL); /* Esperando que todos los hijos terminen */ } /***************************** Fin De Recopilacion Y Procesado De Informacion *******************************************/ /***************************** Inicio De Ploteo Y Limpieza De Archivos Temporales ***************************************/ printf("Creando Archivos Finales...\n"); /***************************** Inicio Creacion del archivo temporal rtt.gnu necesario para graficar *********/ sprintf(par_f,"rtt.%d.gnu",arreglo[j-1]); arch1=fopen(par_f,"w"); fprintf(arch1,"set title \" Tiempo de RTT v/s numero de Pings\"\n"); fprintf(arch1,"set xlabel \" Numero de Ping\"\n"); fprintf(arch1,"set ylabel \" Tiempo de RTT [ms]\"\n"); fprintf(arch1,"set grid\n"); fprintf(arch1,"set terminal postscript landscape color\n"); fprintf(arch1,"set output \"%s.rtt.ps\"\n",argv[argc-1]); if(arreglo[0]>0) fprintf(arch1,"plot \"rtt_maq1.%d.dat\" using 1:2 title \"%s\" with points 1, \\\n",arreglo[0],namemaq[0]); for(i=1;i0) fprintf(arch1,"\"rtt_maq%d.%d.dat\" using 1:2 title \"%s\" with points %d, \\\n",i+1,arreglo[i],namemaq[i],i+1); } if(arreglo[j]>0) fprintf(arch1,"\"rtt_maq%d.%d.dat\" using 1:2 title \"%s\" with points %d\n",j,arreglo[j-1],namemaq[j-1],j); fprintf(arch1,"\n"); fclose(arch1); /***************************** Fin Creacion del archivo temporal rtt.gnu necesario para graficar *********/ /***************************** Inicio Creacion del archivo temporal loss.gnu necesario para graficar *********/ sprintf(par_f,"loss.%d.gnu",arreglo[j-1]); arch1=fopen(par_f,"w"); fprintf(arch1,"set title \" Paquetes perdidos Acumulados\"\n"); fprintf(arch1,"set xlabel \" Numero de Ping \"\n"); fprintf(arch1,"set ylabel \" Numero de Paquetes Perdidos \"\n"); fprintf(arch1,"set grid\n"); fprintf(arch1,"set terminal postscript landscape color\n"); fprintf(arch1,"set output \"%s.loss.ps\"\n",argv[argc-1]); if(arreglo[0]>0) fprintf(arch1,"plot \"loss_maq1.%d.dat\" using 1:2 title \"%s\" with lines 1, \\\n",arreglo[0],namemaq[0]); for(i=1;i0) fprintf(arch1,"\"loss_maq%d.%d.dat\" using 1:2 title \"%s\" with lines %d, \\\n",i+1,arreglo[i],namemaq[i],i+1); } if(arreglo[j]>0) fprintf(arch1,"\"loss_maq%d.%d.dat\" using 1:2 title \"%s\" with lines %d\n",j,arreglo[j-1],namemaq[j-1],j); fprintf(arch1,"\n"); fclose(arch1); /***************************** Fin Creacion del archivo temporal loss.gnu necesario para graficar *********/ sprintf(par_f,"gnuplot rtt.%d.gnu",arreglo[j-1]); /* Creando archivo grafico */ system(par_f); sprintf(par_f,"gnuplot loss.%d.gnu",arreglo[j-1]); system(par_f); for(i=0;i0) { sprintf(par_f,"rm *.%d.txx ",arreglo[i]); /* Borrando Archivos Temporales */ system(par_f); if(lim==1) { sprintf(par_f,"rm *.%d.dat *.%d.tx",arreglo[i],arreglo[i]); system(par_f); } } } if(arreglo[j-1]>0) { sprintf(par_f,"rm *.%d.gnu ",arreglo[j-1]); system(par_f); } // system("rm *.txx *.gnu"); // if(lim==1) // system("rm *.dat *.tx"); printf("\nBy Hazahel\n"); /***************************** Fin De Ploteo Y Limpieza De Archivos Temporales ***************************************/ }