Postfix3.3.1
msg_stats.h
[詳解]
1 #ifndef _MSG_STATS_H_INCLUDED_
2 #define _MSG_STATS_H_INCLUDED_
3 
4 /*++
5 /* NAME
6 /* msg_stats 3h
7 /* SUMMARY
8 /* message delivery profiling
9 /* SYNOPSIS
10 /* #include <msg_stats.h>
11 /* DESCRIPTION
12 /* .nf
13 
14  /*
15  * System library.
16  */
17 #include <sys/time.h>
18 #include <time.h>
19 #include <string.h>
20 
21  /*
22  * Utility library.
23  */
24 #include <attr.h>
25 #include <vstream.h>
26 
27  /*
28  * External interface.
29  *
30  * This structure contains the time stamps from various mail delivery stages,
31  * as well as the connection reuse count. The time stamps provide additional
32  * insight into the nature of performance bottle necks.
33  *
34  * For convenience, we record absolute time stamps instead of time differences.
35  * This is because the decision of what numbers to subtract actually depends
36  * on program history. Since we prefer to compute time differences in one
37  * place, we postpone this task until the end, in log_adhoc().
38  *
39  * A zero time stamp or reuse count means the information is not supplied.
40  *
41  * Specifically, a zero active_arrival value means that the message did not
42  * reach the queue manager; and a zero agent_handoff time means that the
43  * queue manager did not give the message to a delivery agent.
44  *
45  * Some network clients update the conn_setup_done value when connection setup
46  * fails or completes.
47  *
48  * The deliver_done value is usually left at zero, which means use the wall
49  * clock time when reporting recipient status information. The exception is
50  * with delivery agents that can deliver multiple recipients in a single
51  * transaction. These agents explicitly update the deliver_done time stamp
52  * to ensure that multiple recipient records show the exact same delay
53  * values.
54  */
55 typedef struct {
56  struct timeval incoming_arrival; /* incoming queue entry */
57  struct timeval active_arrival; /* active queue entry */
58  struct timeval agent_handoff; /* delivery agent hand-off */
59  struct timeval conn_setup_done; /* connection set-up done */
60  struct timeval deliver_done; /* transmission done */
61  int reuse_count; /* connection reuse count */
62 } MSG_STATS;
63 
64 #define MSG_STATS_INIT(st) \
65  ( \
66  memset((char *) (st), 0, sizeof(*(st))), \
67  (st) \
68  )
69 
70 #define MSG_STATS_INIT1(st, member, value) \
71  ( \
72  memset((char *) (st), 0, sizeof(*(st))), \
73  ((st)->member = (value)), \
74  (st) \
75  )
76 
77 #define MSG_STATS_INIT2(st, m1, v1, m2, v2) \
78  ( \
79  memset((char *) (st), 0, sizeof(*(st))), \
80  ((st)->m1 = (v1)), \
81  ((st)->m2 = (v2)), \
82  (st) \
83  )
84 
85 extern int msg_stats_scan(ATTR_SCAN_MASTER_FN, VSTREAM *, int, void *);
86 extern int msg_stats_print(ATTR_PRINT_MASTER_FN, VSTREAM *, int, void *);
87 
88 /* LICENSE
89 /* .ad
90 /* .fi
91 /* The Secure Mailer license must be distributed with this software.
92 /* AUTHOR(S)
93 /* Wietse Venema
94 /* IBM T.J. Watson Research
95 /* P.O. Box 704
96 /* Yorktown Heights, NY 10598, USA
97 /*--*/
98 
99 #endif
int(* ATTR_PRINT_MASTER_FN)(VSTREAM *, int,...)
Definition: attr.h:33
int msg_stats_print(ATTR_PRINT_MASTER_FN, VSTREAM *, int, void *)
int(* ATTR_SCAN_MASTER_FN)(VSTREAM *, int,...)
Definition: attr.h:31
int msg_stats_scan(ATTR_SCAN_MASTER_FN, VSTREAM *, int, void *)
int reuse_count
Definition: msg_stats.h:61