|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Eric P. Allman
3: * Copyright (c) 1988 Regents of the University of California.
4: * All rights reserved.
5: *
6: * Redistribution and use in source and binary forms are permitted
7: * provided that the above copyright notice and this paragraph are
8: * duplicated in all such forms and that any documentation,
9: * advertising materials, and other materials related to such
10: * distribution and use acknowledge that the software was developed
11: * by the University of California, Berkeley. The name of the
12: * University may not be used to endorse or promote products derived
13: * from this software without specific prior written permission.
14: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
15: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
16: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17: */
18:
19: #ifndef lint
20: static char sccsid[] = "@(#)stats.c 5.10 (Berkeley) 6/30/88";
21: #endif /* not lint */
22:
23: # include "sendmail.h"
24: # include "mailstats.h"
25:
26: struct statistics Stat;
27:
28: #define ONE_K 1000 /* one thousand (twenty-four?) */
29: #define KBYTES(x) (((x) + (ONE_K - 1)) / ONE_K)
30: /*
31: ** MARKSTATS -- mark statistics
32: */
33:
34: markstats(e, to)
35: register ENVELOPE *e;
36: register ADDRESS *to;
37: {
38: if (to == NULL)
39: {
40: if (e->e_from.q_mailer != NULL)
41: {
42: Stat.stat_nf[e->e_from.q_mailer->m_mno]++;
43: Stat.stat_bf[e->e_from.q_mailer->m_mno] +=
44: KBYTES(CurEnv->e_msgsize);
45: }
46: }
47: else
48: {
49: Stat.stat_nt[to->q_mailer->m_mno]++;
50: Stat.stat_bt[to->q_mailer->m_mno] += KBYTES(CurEnv->e_msgsize);
51: }
52: }
53: /*
54: ** POSTSTATS -- post statistics in the statistics file
55: **
56: ** Parameters:
57: ** sfile -- the name of the statistics file.
58: **
59: ** Returns:
60: ** none.
61: **
62: ** Side Effects:
63: ** merges the Stat structure with the sfile file.
64: */
65:
66: poststats(sfile)
67: char *sfile;
68: {
69: register int fd;
70: struct statistics stat;
71: extern off_t lseek();
72:
73: if (sfile == NULL)
74: return;
75:
76: (void) time(&Stat.stat_itime);
77: Stat.stat_size = sizeof Stat;
78:
79: fd = open(sfile, 2);
80: if (fd < 0)
81: {
82: errno = 0;
83: return;
84: }
85: if (read(fd, (char *) &stat, sizeof stat) == sizeof stat &&
86: stat.stat_size == sizeof stat)
87: {
88: /* merge current statistics into statfile */
89: register int i;
90:
91: for (i = 0; i < MAXMAILERS; i++)
92: {
93: stat.stat_nf[i] += Stat.stat_nf[i];
94: stat.stat_bf[i] += Stat.stat_bf[i];
95: stat.stat_nt[i] += Stat.stat_nt[i];
96: stat.stat_bt[i] += Stat.stat_bt[i];
97: }
98: }
99: else
100: bcopy((char *) &Stat, (char *) &stat, sizeof stat);
101:
102: /* write out results */
103: (void) lseek(fd, (off_t) 0, 0);
104: (void) write(fd, (char *) &stat, sizeof stat);
105: (void) close(fd);
106: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.