6 extern int hstat_cycle
;
7 extern time_t hstat_last_cycle
;
9 /* forward declarations */
10 struct hchannel_struct
;
13 #define HSTAT_ACTIVITY_TRESHOLD (3 * HDEF_m)
15 #define HSTAT_ACCOUNT_SUM(sum, op1, op2)\
17 (sum).time_spent = (op1).time_spent + (op2).time_spent;\
18 (sum).prime_time_spent = (op1).prime_time_spent + (op2).prime_time_spent;\
19 (sum).lines = (op1).lines + (op2).lines;\
20 (sum).words = (op1).words + (op2).words;\
23 #define HSTAT_ACCOUNT_ZERO(target)\
25 (target).time_spent = 0;\
26 (target).prime_time_spent = 0;\
31 #define HSTAT_CHANNEL_SUM(sum, op1, op2)\
33 (sum).active_time = (op1).active_time + (op2).active_time;\
34 (sum).staff_active_time = (op1).staff_active_time + (op2).staff_active_time;\
35 (sum).time_spent = (op1).time_spent + (op2).time_spent;\
36 (sum).prime_time_spent = (op1).prime_time_spent + (op2).prime_time_spent;\
37 (sum).lines = (op1).lines + (op2).lines;\
38 (sum).words = (op1).words + (op2).words;\
39 (sum).joins = (op1).joins + (op2).joins;\
40 (sum).queue_use = (op1).queue_use + (op2).queue_use;\
43 #define HSTAT_CHANNEL_ZERO(target)\
45 (target).active_time = 0;\
46 (target).staff_active_time = 0;\
47 (target).time_spent = 0;\
48 (target).prime_time_spent = 0;\
52 (target).queue_use = 0;\
63 typedef struct hstat_account_entry_struct
69 } hstat_account_entry
;
71 typedef struct hstat_account_entry_sum_struct
77 struct haccount_struct
*owner
; /* haccount* */
78 } hstat_account_entry_sum
;
80 typedef struct hstat_channel_entry_struct
83 int staff_active_time
;
93 } hstat_channel_entry
;
95 typedef struct hstat_channel_struct
97 hstat_channel_entry week
[7]; /* 7 days */
98 hstat_channel_entry longterm
[10]; /* 10 weeks */
102 typedef struct hstats_account_struct
104 struct hchannel_struct
*hchan
;
106 hstat_account_entry week
[7]; /* 7 days */
107 hstat_account_entry longterm
[10]; /* 10 weeks */
109 struct hstats_account_struct
*next
;
112 typedef struct hstat_accounts_array_struct
114 hstat_account_entry_sum
*array
;
116 } hstat_accounts_array
;
118 /* free() this.entries, arguments: channel, level to list */
119 hstat_accounts_array
create_hstat_account_array(struct hchannel_struct
*, hlevel
);
121 hstat_channel
*get_hstat_channel(void);
122 hstat_account
*get_hstat_account(void);
124 const char *hstat_header(hstat_type
);
126 const char *hstat_channel_print(hstat_channel_entry
*, int);
128 const char *hstat_account_print(hstat_account_entry
*, int);
130 void hstat_calculate_account(struct hchannel_struct
*, struct huser_struct
*, const char *);
131 void hstat_calculate_channel(struct hchannel_struct
*, struct huser_struct
*, const char *);
133 void hstat_add_join(struct hchannel_struct
*);
134 void hstat_del_channel(struct hchannel_struct
*);
136 void hstat_add_queue(struct hchannel_struct
*, int);
138 int is_prime_time(void); /* tells if now is the "main" time in #feds */
140 int hstat_week(void);
143 hstat_account_entry_sum
hstat_account_last_week(hstat_account
*);
144 hstat_account_entry_sum
hstat_account_last_month(hstat_account
*);
145 hstat_channel_entry
hstat_channel_last_week(hstat_channel
*);
146 hstat_channel_entry
hstat_channel_last_month(hstat_channel
*);
148 int hstat_account_count(hstat_account
*);
150 /* handles the cycle and today -> week -> longterm changes */
151 void hstat_scheduler(void);
152 int hstat_get_schedule_time(void);