1: /*
2: ** Sendmail
3: ** Copyright (c) 1983 Eric P. Allman
4: ** Berkeley, California
5: **
6: ** Copyright (c) 1983 Regents of the University of California.
7: ** All rights reserved. The Berkeley software License Agreement
8: ** specifies the terms and conditions for redistribution.
9: */
10:
11: #ifndef lint
12: static char SccsId[] = "@(#)stats.c 5.8 (Berkeley) 5/2/86";
13: #endif not lint
14:
15: # include "sendmail.h"
16: # include "mailstats.h"
17:
18: struct statistics Stat;
19:
20: #define ONE_K 1000 /* one thousand (twenty-four?) */
21: #define KBYTES(x) (((x) + (ONE_K - 1)) / ONE_K)
22: /*
23: ** MARKSTATS -- mark statistics
24: */
25:
26: markstats(e, to)
27: register ENVELOPE *e;
28: register ADDRESS *to;
29: {
30: if (to == NULL)
31: {
32: if (e->e_from.q_mailer != NULL)
33: {
34: Stat.stat_nf[e->e_from.q_mailer->m_mno]++;
35: Stat.stat_bf[e->e_from.q_mailer->m_mno] +=
36: KBYTES(CurEnv->e_msgsize);
37: }
38: }
39: else
40: {
41: Stat.stat_nt[to->q_mailer->m_mno]++;
42: Stat.stat_bt[to->q_mailer->m_mno] += KBYTES(CurEnv->e_msgsize);
43: }
44: }
45: /*
46: ** POSTSTATS -- post statistics in the statistics file
47: **
48: ** Parameters:
49: ** sfile -- the name of the statistics file.
50: **
51: ** Returns:
52: ** none.
53: **
54: ** Side Effects:
55: ** merges the Stat structure with the sfile file.
56: */
57:
58: poststats(sfile)
59: char *sfile;
60: {
61: register int fd;
62: struct statistics stat;
63: extern off_t lseek();
64:
65: if (sfile == NULL)
66: return;
67:
68: (void) time(&Stat.stat_itime);
69: Stat.stat_size = sizeof Stat;
70:
71: fd = open(sfile, 2);
72: if (fd < 0)
73: {
74: errno = 0;
75: return;
76: }
77: if (read(fd, (char *) &stat, sizeof stat) == sizeof stat &&
78: stat.stat_size == sizeof stat)
79: {
80: /* merge current statistics into statfile */
81: register int i;
82:
83: for (i = 0; i < MAXMAILERS; i++)
84: {
85: stat.stat_nf[i] += Stat.stat_nf[i];
86: stat.stat_bf[i] += Stat.stat_bf[i];
87: stat.stat_nt[i] += Stat.stat_nt[i];
88: stat.stat_bt[i] += Stat.stat_bt[i];
89: }
90: }
91: else
92: bcopy((char *) &Stat, (char *) &stat, sizeof stat);
93:
94: /* write out results */
95: (void) lseek(fd, (off_t) 0, 0);
96: (void) write(fd, (char *) &stat, sizeof stat);
97: (void) close(fd);
98: }
Defined functions
Defined variables
Stat
defined in line
18; used 12 times
Defined macros
ONE_K
defined in line
20; used 2 times