home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / sarg1221.zip / email.c < prev    next >
C/C++ Source or Header  |  2002-10-08  |  9KB  |  305 lines

  1. /*
  2.  * sarg - Squid user management log
  3.  * Mar/98 - Pedro L Orso - orso@onda.com.br
  4.  */
  5.  
  6. #include "include/conf.h"
  7.  
  8. int geramail(const char *dirname, int debug, const char *outdir, int userip, char *email, char *TempDir)
  9.  
  10. {
  11.  
  12.    FILE *fp_in, *fp_top1, *fp_top2, *fp_top3;
  13.    long long int ttnbytes=0, ttnacc=0, tnacc=0;
  14.    long long int tnbytes=0, ttnelap=0, tnelap=0;
  15.    float perc=0.00;
  16.    float perc2=0.00;
  17.    int posicao=0;
  18.    char olduser[MAXLEN], csort[MAXLEN], periodo[MAXLEN], arqper[MAXLEN];
  19.    char wger[MAXLEN], top1[MAXLEN], top2[MAXLEN], top3[MAXLEN], user[MAXLEN], nacc[20], nbytes[20], url[1024], preg[MAXLEN], tusr[MAXLEN];
  20.    char ip[MAXLEN], hora[9], data[11], elap[15], user2[MAXLEN], wperc[8], wperc2[8];
  21.    char strip1[MAXLEN], strip2[MAXLEN], strip3[MAXLEN], strip4[MAXLEN], strip5[MAXLEN], strip6[MAXLEN], strip7[MAXLEN];
  22.    char incac[16], oucac[16];
  23.    int totuser=0;
  24.    time_t t;
  25.    struct tm *local;
  26.  
  27.    strcpy(wger,dirname);
  28.    strcpy(top1,dirname);
  29.    strcpy(top2,dirname);
  30.    strcpy(top3,dirname);
  31.    strcpy(tusr,dirname);
  32.    strcat(wger,"/geral");
  33.    strcat(top1,"/top");
  34.    strcat(top2,"/top.tmp");
  35.    strcat(top3,"/report");
  36.    strcat(tusr,"/usuarios");
  37.  
  38.    if((fp_in=fopen(wger,"r"))==NULL) {
  39.       fprintf(stderr, "SARG: (email) %s: %s\n",text[45],wger);
  40.       exit(1);
  41.    }
  42.  
  43.    if((fp_top1=fopen(top1,"w"))==NULL) {
  44.       fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top1);
  45.       exit(1);
  46.    }
  47.  
  48.    if((fp_top2=fopen(top2,"w"))==NULL) {
  49.       fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top2);
  50.       exit(1);
  51.    }
  52.  
  53.    fscanf(fp_in,"%s",user);
  54.    fscanf(fp_in,"%s",nacc);
  55.    fscanf(fp_in,"%s",nbytes);
  56.    fscanf(fp_in,"%s",url);
  57.    fscanf(fp_in,"%s",ip);
  58.    fscanf(fp_in,"%s",hora);
  59.    fscanf(fp_in,"%s",data);
  60.    fscanf(fp_in,"%s",elap);
  61.    fscanf(fp_in,"%s",incac);
  62.    fscanf(fp_in,"%s",oucac);
  63.  
  64.    strcpy(olduser,user);
  65.    totuser=1;
  66.  
  67.    while(!feof(fp_in))
  68.    {
  69.  
  70.       if(strcmp(olduser,user) != 0)
  71.       {
  72.          if(strcmp(user,"TOTAL") != 0)
  73.             totuser++;
  74.  
  75. #if defined(__FreeBSD__)
  76.    sprintf(preg,"%s %15qu %15qu %15qu\n",olduser,tnbytes,tnacc,tnelap);
  77. #elif defined(__alpha) || __ALPHA
  78.    sprintf(preg,"%s %15ld %15ld %15ld\n",olduser,tnbytes,tnacc,tnelap);
  79. #else
  80.    sprintf(preg,"%s %15lld %15lld %15lld\n",olduser,tnbytes,tnacc,tnelap);
  81. #endif
  82.          fputs(preg,fp_top2);
  83.      strcpy(olduser,user);
  84.          ttnbytes=ttnbytes+tnbytes;
  85.      ttnacc=ttnacc+tnacc;
  86.      ttnelap=ttnelap+tnelap;
  87.          tnbytes=0;
  88.          tnacc=0;
  89.          tnelap=0;
  90.       }
  91.  
  92.       tnbytes=tnbytes+atol(nbytes);
  93.       tnacc=tnacc+atol(nacc);
  94.       tnelap=tnelap+atol(elap);
  95.  
  96.       fscanf(fp_in,"%s",user);
  97.       fscanf(fp_in,"%s",nacc);
  98.       fscanf(fp_in,"%s",nbytes);
  99.       fscanf(fp_in,"%s",url);
  100.       fscanf(fp_in,"%s",ip);
  101.       fscanf(fp_in,"%s",hora);
  102.       fscanf(fp_in,"%s",data);
  103.       fscanf(fp_in,"%s",elap);
  104.       fscanf(fp_in,"%s",incac);
  105.       fscanf(fp_in,"%s",oucac);
  106.  
  107.       if(strcmp(user,"TOTAL") == 0)
  108.          continue;
  109.    }
  110. #if defined(__FreeBSD__)
  111.    sprintf(preg,"%s %15qu %15qu %15qu\n",olduser,tnbytes,tnacc,tnelap);
  112. #elif defined(__alpha) || __ALPHA
  113.    sprintf(preg,"%s %15ld %15ld %15ld\n",olduser,tnbytes,tnacc,tnelap);
  114. #else
  115.    sprintf(preg,"%s %15lld %15lld %15lld\n",olduser,tnbytes,tnacc,tnelap);
  116. #endif
  117.    fputs(preg,fp_top2);
  118.    ttnbytes=ttnbytes+tnbytes;
  119.    ttnacc=ttnacc+tnacc;
  120.    ttnelap=ttnelap+tnelap;
  121.  
  122. #if defined(__FreeBSD__)
  123.    sprintf(preg,"TOTAL %15qu %15qu %15qu\n",ttnbytes,ttnacc,ttnelap);
  124. #elif defined(__alpha) || __ALPHA
  125.    sprintf(preg,"TOTAL %15ld %15ld %15ld\n",ttnbytes,ttnacc,ttnelap);
  126. #else
  127.    sprintf(preg,"TOTAL %15lld %15lld %15lld\n",ttnbytes,ttnacc,ttnelap);
  128. #endif
  129.  
  130.    fclose(fp_in);
  131.    fclose(fp_top2);
  132.  
  133.    sprintf(csort, SORT" -n -T %s -r -k 2,2 -o %s %s", TempDir, top1, top2);
  134.    system(csort);
  135.  
  136.    unlink(top2);
  137.  
  138.    if((fp_top1=fopen(top1,"a"))==NULL) {
  139.       fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top1);
  140.       exit(1);
  141.    }
  142.    fputs(preg,fp_top1);
  143.    fclose(fp_top1);
  144.  
  145.    if((fp_top1=fopen(top1,"r"))==NULL) {
  146.       fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top1);
  147.       exit(1);
  148.    }
  149.  
  150.    if((fp_top3=fopen(top3,"w"))==NULL) {
  151.       fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top3);
  152.       exit(1);
  153.    }
  154.  
  155.  /*
  156.  * Obtem o periodo
  157.  */
  158.  
  159.    strcpy(arqper,dirname);
  160.    strcat(arqper,"/periodo");
  161.  
  162.    if ((fp_in = fopen(arqper, "r")) == 0){
  163.       fprintf(stderr, "SARG: (email) %s: %s\n",text[45],arqper);
  164.       exit(1);
  165.    }
  166.  
  167.    fgets(periodo,sizeof(periodo),fp_in);
  168.    fclose(fp_in);
  169.  
  170.    sprintf(strip1,"%s",text[88]);
  171.    strip_latin(strip1);
  172.    sprintf(preg,"%s\n",strip1);
  173.    fputs(preg,fp_top3);
  174.  
  175.    sprintf(strip1,"%s",text[97]);
  176.    strip_latin(strip1);
  177.    sprintf(preg,"%s\n",strip1);
  178.    fputs(preg,fp_top3);
  179.  
  180.    sprintf(strip1,"%s",text[89]);
  181.    strip_latin(strip1);
  182.    sprintf(preg,"%s %s\n\n",strip1,periodo);
  183.    fputs(preg,fp_top3);
  184.  
  185.    sprintf(strip1,"%s",text[100]);
  186.    strip_latin(strip1);
  187.    sprintf(strip2,"%s",text[98]);
  188.    strip_latin(strip2);
  189.    sprintf(strip3,"%s",text[92]);
  190.    strip_latin(strip3);
  191.    sprintf(strip4,"%s",text[93]);
  192.    strip_latin(strip4);
  193.    sprintf(strip5,"%s",text[94]);
  194.    strip_latin(strip5);
  195.    sprintf(strip6,"%s",text[95]);
  196.    strip_latin(strip6);
  197.    sprintf(strip7,"%s",text[99]);
  198.    strip_latin(strip7);
  199.  
  200.    sprintf(preg,"%-7s %-20s %-8s %-15s %%%-6s %-10s %-10s %%%-7s\n------- -------------------- -------- --------------- ------- ---------- ---------- -------\n",strip1,strip2,strip3,strip4,strip4,strip5,strip6,strip7);
  201.    fputs(preg,fp_top3);
  202.  
  203.    fscanf(fp_top1,"%s",user);
  204.    fscanf(fp_top1,"%s",nbytes);
  205.    fscanf(fp_top1,"%s",nacc);
  206.    fscanf(fp_top1,"%s",elap);
  207.  
  208.    while(!feof(fp_top1))
  209.    {
  210.  
  211.       if(strstr(user,"_") != 0)
  212.          fixip(user);
  213.  
  214.       strcpy(user2,user);
  215.  
  216.       tnbytes=atol(nbytes);
  217.  
  218.       if(tnbytes) {
  219.          perc=ttnbytes / 100;
  220.          perc=tnbytes / perc;
  221.       } else perc = 0;
  222.  
  223.       if(atol(elap)) {
  224.          perc2=ttnelap / 100;
  225.          perc2=atol(elap) / perc2;
  226.       } else perc2 = 0;
  227.  
  228.       posicao++;
  229.       tnelap=atol(elap);
  230.  
  231.       sprintf(wperc,"%3.2f%%",perc);
  232.       sprintf(wperc2,"%3.2f%%",perc2);
  233.  
  234. #if defined(__FreeBSD__)
  235.       sprintf(preg,"%7d %20s %8s %15s %7s %10s %10qu %7s%%\n",posicao,user2,nacc,fixnum(tnbytes),wperc,buildtime(tnelap),tnelap,wperc2);
  236. #elif defined(__alpha) || __ALPHA
  237.       sprintf(preg,"%7d %20s %8s %15s %7s %10s %10ld %7s%%\n",posicao,user2,nacc,fixnum(tnbytes),wperc,buildtime(tnelap),tnelap,wperc2);
  238. #else
  239.       sprintf(preg,"%7d %20s %8s %15s %7s %10s %10lld %7s\n",posicao,user2,nacc,fixnum(tnbytes),wperc,buildtime(tnelap),tnelap,wperc2);
  240. #endif
  241.  
  242.       if(strstr(user,"TOTAL") != 0){
  243.          sprintf(preg,"------- -------------------- -------- --------------- ------- ---------- ---------- -------\n");
  244.          fputs(preg,fp_top3);
  245. #if defined(__FreeBSD__)
  246.          sprintf(preg,"%-7s %20s %8qu %15s %8s %9s %10qu\n",text[107]," ",ttnacc,fixnum(ttnbytes)," ",buildtime(ttnelap),ttnelap);
  247. #elif defined(__alpha) || __ALPHA
  248.          sprintf(preg,"%-7s %20s %8ld %15s %8s %9s %10ld\n",text[107]," ",ttnacc,fixnum(ttnbytes)," ",buildtime(ttnelap),ttnelap);
  249. #else
  250.          sprintf(preg,"%-7s %20s %8lld %15s %8s %9s %10lld\n",text[107]," ",ttnacc,fixnum(ttnbytes)," ",buildtime(ttnelap),ttnelap);
  251. #endif
  252.       }
  253.  
  254.       fputs(preg,fp_top3);
  255.  
  256.       fscanf(fp_top1,"%s",user);
  257.       fscanf(fp_top1,"%s",nbytes);
  258.       fscanf(fp_top1,"%s",nacc);
  259.       fscanf(fp_top1,"%s",elap);
  260.    }
  261.  
  262.    if(ttnbytes) {
  263.       tnbytes=ttnbytes / totuser;
  264.    } else tnbytes=0;
  265.  
  266.    sprintf(strip1,"%s",text[96]);
  267.    strip_latin(strip1);
  268. #if defined(__FreeBSD__)
  269.    sprintf(preg,"%-7s %20s %8qu %15s %8s %9s %10qu\n",strip1," ",ttnacc/totuser,fixnum(tnbytes)," ",buildtime(ttnelap/totuser),ttnelap/totuser);
  270. #elif defined(__alpha) || __ALPHA
  271.    sprintf(preg,"%-7s %20s %8ld %15s %8s %9s %10ld\n",strip1," ",ttnacc/totuser,fixnum(tnbytes)," ",buildtime(ttnelap/totuser),ttnelap/totuser);
  272. #else
  273.    sprintf(preg,"%-7s %20s %8lld %15s %8s %9s %10lld\n",strip1," ",ttnacc/totuser,fixnum(tnbytes)," ",buildtime(ttnelap/totuser),ttnelap/totuser);
  274. #endif
  275.    fputs(preg,fp_top3);
  276.  
  277.    fclose(fp_top1);
  278.    unlink(top1);
  279.  
  280.    t = time(NULL);
  281.    local = localtime(&t);
  282.    sprintf(preg, "\n%s\n", asctime(local));
  283.    fputs(preg,fp_top3);
  284.  
  285.    fclose(fp_top3);
  286.  
  287.    if(strcmp(email,"stdout") == 0) {
  288.       if((fp_top3=fopen(top3,"r"))==NULL) {
  289.          fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top3);
  290.          exit(1);
  291.       }
  292.  
  293.       while(fgets(buf,sizeof(buf),fp_top3)!=NULL)
  294.          printf("%s",buf);
  295.     } else {
  296.       sprintf(buf,"%s -s 'SARG %s, %s' %s <%s",MailUtility,text[55],asctime(local),email,top3);
  297.       system(buf);
  298.    }
  299.  
  300.    sprintf(csort, RM" -r %s/sarg_tmp",TempDir);
  301.    system(csort);
  302.  
  303.    return (0);
  304. }
  305.