/* * * * * * * * * * * * * * * * * * * * * * * * * * * *  */
/* this is a program to compile statistics from mmailr... */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *  */

#include <stdio.h>
#include <ctype.h>

int lclwakeups = 0;
int lclusefull = 0;
int rtmwakeups = 0;
int rtmusefull = 0;
int ntwwakeups = 0;
int ntwusefull = 0;
int mmcnt =0;
int babcnt =0;
int remcnt =0;
int voicnt =0;
int chacnt = 0;
int reqcnt = 0;
int defcnt =0;
int rcvcnt =0;
int bbcnt =0;
int actcnt =0;
int dmpcnt =0;
int sndcnt =0;
int sdfcnt =0;
int rtncnt =0;
int bdycnt =0;
int inqcnt =0;
int cafcnt =0;
int maicnt =0;

/*
* Forward definitions.
*/

void do1log();
void do2log();
void do3log();
void outstats();


main(argc,argv)
int argc;
char *argv[];
{
   do1log();
   do2log();
   do3log();
   outstats();
}

/* * * * * * * * * * * * * * * * * * * * * *  */
/* prefixed says if str2 is prefixed by str1  */
/* * * * * * * * * * * * * * * * * * * * * *  */

prefixed(str1,str2)
char *str1,*str2;
{
   int test;
   test = 0;

   /*
    * Strip leading blanks.
    */
   while (*str2 == ' ') {
       str2++;
   }
   while ((*str1) && (test = (*str1++ == toupper(*str2++))));
   return(test);
}

/* * * * * * * * * * * * * * * * * * * * * * * *  */
/* substring says if str1 is a substring of str2  */
/* * * * * * * * * * * * * * * * * * * * * * * *  */

substring(str1,str2)
char *str1,*str2;
{
   int result;
   result = 0;
   while ((*str2) && !(result = prefixed(str1,str2++)));
   return(result);
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  */
/* do1log handles the file mail:1-mmailr.log checking it for local mail */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  */

void do1log()
{
   FILE *logfile;
   char buffer[512];
   int num;
   char datebuffer[20];

   if ((logfile = fopen("mail:1-mmailr.log","r")) == NULL)
       {
           printf("\ncould not open mail:1-mmailr.log for reading\n");
           return;
       }
   num = fscanf(logfile,"%s",datebuffer);
   printf("\n*************");
   printf("\n* %9s *\n",datebuffer);
   printf("*************\n\n");
   while (!feof(logfile))
     {
         num = fscanf(logfile, "%*s%*s%[^\n]",buffer);
         if (prefixed("DAEMON WAKEUP",buffer))
            {
            lclwakeups++;
            continue;
            }
        if (prefixed("PROCESSING OF RECIPIENTS DEFERRED UNTIL",buffer))
            {
            defcnt++;
            continue;
            }
        if (prefixed("DONE, REQUEUED",buffer))
            {
            reqcnt++;
            continue;
            }
         if (substring(": OK",buffer))
             {
             rcvcnt++;
             if (prefixed("PS:<BBOARD>",buffer))
                 bbcnt++;
             continue;
             }
         if (prefixed("FILE ",buffer))
            {
            lclusefull++;
            if (substring("-MM-",buffer))
                {
                mmcnt++;
                continue;
                }
            if (substring("-BABYL.",buffer))
                {
                babcnt++;
                continue;
                }
            if (substring("-MAISER-",buffer))
               {
               maicnt++;
               continue;
               }
            if (substring("-SYSJB1-",buffer))
               {
               remcnt++;
               continue;
               }
            if (substring("NEW-VM-",buffer))
               {
               voicnt++;
               continue;
               }
            if (substring("-CHAOS-MAIL-",buffer))
               {
               chacnt++;
               continue;
               }
            if (substring("-CAFARD-",buffer))
               {
               cafcnt++;
               continue;
               }
            if (substring(".NEW-FILE-NOTIFICATION.",buffer))
                {
                dmpcnt++;
                continue;
                }
            if (substring("--RETURNED-MAIL--",buffer))
                {
                rtncnt++;
                continue;
                }
            if (substring("-ACCOUNT-",buffer))
                {
                actcnt++;
                continue;
                }
            if (substring("-INQUIRE-",buffer))
                {
                inqcnt++;
                continue;
                }
            if (substring("-SNDMSG-",buffer))
                {
                sndcnt++;
                continue;
                }
            if (substring("-SNDFIL-",buffer))
                {
                sdfcnt++;
                continue;
                }
            if (substring("-HB-NOTICE-",buffer) ||
                substring("-HAPPY-BIRTHDAY-",buffer))
                {
                bdycnt++;
                continue;
                }
            printf("\nunknown sender : %s\n",buffer);
            }
     }
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  */
/* do2log handles statistics for 2-mmailr.log to find network mail  */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  */

void do2log()
{
   FILE *logfile;
   char buffer[512];
   int num;
   if ((logfile = fopen("mail:2-mmailr.log","r")) == NULL)
       {
           printf("\ncould not open mail:2-mmailr.log for reading\n");
           return;
       }
   while (!feof(logfile))
     {
         num = fscanf(logfile, "%*s%*s%[^\n]",buffer);
         if (prefixed("DAEMON WAKEUP",buffer))
            ntwwakeups++;
         if (prefixed("FILE ",buffer))
            ntwusefull++;
        if (prefixed("PROCESSING OF RECIPIENTS DEFERRED UNTIL",buffer))
            {
            defcnt++;
            }
        if (prefixed("DONE, REQUEUED",buffer))
            {
            reqcnt++;
            }
     }
}

/* * * * * * * * * * * * * * * * * * * * * * * * * *  */
/* do3log handles 3-mmailr.log to get retransmit data */
/* * * * * * * * * * * * * * * * * * * * * * * * * *  */

void do3log()
{
   FILE *logfile;
   char buffer[512];
   int num;
   if ((logfile = fopen("mail:3-mmailr.log","r")) == NULL)
       {
           printf("\ncould not open mail:3-mmailr.log for reading\n");
           return;
       }
   while (!feof(logfile))
     {
         num = fscanf(logfile, "%*s%*s%[^\n]",buffer);
         if (prefixed("DAEMON WAKEUP",buffer))
            {
             rtmwakeups++;
            }
         if (prefixed("FILE ",buffer))
            {
             rtmusefull++;
            }
        if (prefixed("PROCESSING OF RECIPIENTS DEFERRED UNTIL",buffer))
            {
            defcnt++;
            }
        if (prefixed("DONE, REQUEUED",buffer))
            {
            reqcnt++;
            }
     }
}


/* * * * * * * * * * * * * * * * * * * * * * * * * *  */
/* outsats prints out the statistics that we found... */
/* * * * * * * * * * * * * * * * * * * * * * * * * *  */

void outstats()
{
   printf("local wakeups :   %5d useful local wakeups :   %5d\n",
          lclwakeups,lclusefull);
   printf("network wakeups : %5d useful network wakeups : %5d\n",
          ntwwakeups,ntwusefull);
   printf("retrans wakeups : %5d useful retrans wakeups : %5d\n",
          rtmwakeups,rtmusefull);
   printf("\nthere were %5d messages sent via MM\n",mmcnt);
   printf("there were %5d messages sent via Babyl\n",babcnt);
   printf("there were %5d messages sent via Internet SMTP\n",maicnt);
   printf("there were %5d messages sent via the REMIND program\n",remcnt);
   printf("there were %5d messages sent via Voice Mail\n",voicnt);
   printf("there were %5d messages sent via ChaosMail\n",chacnt);
   printf("there were %5d messages sent via Cafard\n",cafcnt);
   printf("there were %5d messages from Dumper\n",dmpcnt);
   printf("there were %5d messages from Mmailr (failed messages)\n",rtncnt);
   printf("there were %5d messages from Bday Daemon\n",bdycnt);
   printf("there were %5d messages from Watson\n",inqcnt);
   printf("there were %5d messages from Send\n",sndcnt);
   printf("there were %5d messages from Sndfil\n",sdfcnt);
   printf("there were %5d messages from Accounts\n",actcnt);
   printf("\n%d messages were requeued, of which %d were deferred\n",
          reqcnt,defcnt);
   printf("\n%d local recipients, of which %d were bboards\n",rcvcnt,bbcnt);
}