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