diff options
Diffstat (limited to '')
-rw-r--r-- | src/old-stats/mail-stats.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/old-stats/mail-stats.h b/src/old-stats/mail-stats.h new file mode 100644 index 0000000..efd0824 --- /dev/null +++ b/src/old-stats/mail-stats.h @@ -0,0 +1,123 @@ +#ifndef MAIL_STATS_H +#define MAIL_STATS_H + +#include <sys/time.h> + +#include "net.h" +#include "guid.h" +#include "stats.h" + +struct stats_send_ctx; + +struct mail_command { + struct mail_command *stable_prev, *stable_next; + struct mail_command *session_prev, *session_next; + + struct mail_session *session; + char *name, *args; + /* non-zero id means the command is still running */ + unsigned int id; + + struct timeval last_update; + struct stats *stats; + + int refcount; +}; + +struct mail_session { + struct mail_session *stable_prev, *stable_next; + struct mail_session *sorted_prev, *sorted_next; + struct mail_session *user_prev, *user_next; + struct mail_session *ip_prev, *ip_next; + + /* if id="", the session no longer exists */ + char *id; + struct mail_user *user; + const char *service; + pid_t pid; + /* ip address may be NULL if there's none */ + struct mail_ip *ip; + struct timeout *to_idle; + + struct stats *stats; + struct timeval last_update; + unsigned int num_cmds; + + bool disconnected; + unsigned int highest_cmd_id; + int refcount; + struct mail_command *commands; +}; + +struct mail_user { + struct mail_user *stable_prev, *stable_next; + struct mail_user *sorted_prev, *sorted_next; + struct mail_user *domain_prev, *domain_next; + char *name; + struct mail_domain *domain; + time_t reset_timestamp; + + struct timeval last_update; + struct stats *stats; + unsigned int num_logins; + unsigned int num_cmds; + + int refcount; + struct mail_session *sessions; +}; + +struct mail_domain { + struct mail_domain *stable_prev, *stable_next; + struct mail_domain *sorted_prev, *sorted_next; + char *name; + time_t reset_timestamp; + + struct timeval last_update; + struct stats *stats; + unsigned int num_logins; + unsigned int num_cmds; + unsigned int num_connected_sessions; + + int refcount; + struct mail_user *users; +}; + +struct mail_ip { + struct mail_ip *stable_prev, *stable_next; + struct mail_ip *sorted_prev, *sorted_next; + struct ip_addr ip; + time_t reset_timestamp; + + struct timeval last_update; + struct stats *stats; + unsigned int num_logins; + unsigned int num_cmds; + unsigned int num_connected_sessions; + + int refcount; + struct mail_session *sessions; +}; + +struct mail_global { + time_t reset_timestamp; + + struct timeval last_update; + struct stats *stats; + unsigned int num_logins; + unsigned int num_cmds; + unsigned int num_connected_sessions; + + struct timeout *to_stats_send; + struct stats_send_ctx *stats_send_ctx; +}; + +extern struct mail_global mail_global_stats; + +void mail_global_init(void); +void mail_global_deinit(void); + +void mail_global_login(void); +void mail_global_disconnected(void); +void mail_global_refresh(const struct stats *diff_stats); + +#endif |