4f36933019c091c4864c86390de91e0b6654a81b
[sip-router] / modules / tm / t_stats.c
1 /*
2  *
3  * $Id$
4  *
5  */
6
7
8 #include <stdio.h>
9 #include "t_stats.h"
10 #include "../../mem/shm_mem.h"
11 #include "../../dprint.h"
12 #include "../../config.h"
13 #include "../../fifo_server.h"
14
15 struct t_stats *cur_stats, *acc_stats;
16
17
18 /* we don't worry about locking data during reads (unlike
19    setting values which always happens from some locks) */
20   
21 int print_stats(  FILE *f )
22 {
23         fprintf(f, "Current:\n");
24         fprintf(f, "# of transactions: %d, ", 
25                 cur_stats->transactions );
26         fprintf(f, "local: %d, ",
27                 cur_stats->client_transactions );
28         fprintf(f, "waiting: %d" CLEANUP_EOL ,
29                 cur_stats->waiting );
30
31         fprintf(f, "Total:\n");
32         fprintf(f, "# of transactions: %d,",
33                 acc_stats->transactions );
34         fprintf(f, " local: %d,",
35                 acc_stats->client_transactions );
36         fprintf(f, " waiting: %d" CLEANUP_EOL ,
37                 acc_stats->waiting );
38
39         fprintf(f, "Replied localy: %d" CLEANUP_EOL ,
40                 acc_stats->replied_localy );
41         fprintf(f, "Completion status 6xx: %d,",
42                 acc_stats->completed_6xx );
43         fprintf(f, " 5xx: %d,",
44                 acc_stats->completed_5xx );
45         fprintf(f, " 4xx: %d,",
46                 acc_stats->completed_4xx );
47         fprintf(f, " 3xx: %d,",
48                 acc_stats->completed_3xx );
49         fprintf(f, "2xx: %d" CLEANUP_EOL ,
50                 acc_stats->completed_2xx );
51         
52         return 1;
53 }
54
55 int static fifo_stats( FILE *pipe, char *response_file )
56 {
57         FILE *file;
58
59         if (response_file==0 || *response_file==0 ) {
60                 LOG(L_ERR, "ERROR: fifo_stats: null file\n");
61                 return -1;
62         }
63
64         file=open_reply_pipe(response_file );
65         if (file==NULL) {
66                 LOG(L_ERR, "ERROR: fifo_stats: file %s bad: %s\n",
67                         response_file, strerror(errno) );
68                 return -1;
69         }
70         print_stats( file );
71         fclose(file);
72         
73         return 1;
74
75 }
76
77 int init_tm_stats(void)
78 {
79         cur_stats=shm_malloc(sizeof(struct t_stats));
80         if (cur_stats==0) {
81                 LOG(L_ERR, "ERROR: init_stats: no mem for stats\n");
82                 return -1;
83         }
84         acc_stats=shm_malloc(sizeof(struct t_stats));
85         if (acc_stats==0) {
86                 LOG(L_ERR, "ERROR: init_stats: no mem for stats\n");
87                 shm_free(cur_stats);
88                 return -1;
89         }
90
91         if (register_fifo_cmd(fifo_stats, "t_stats", 0)<0) {
92                 LOG(L_CRIT, "cannot register fifo stats\n");
93                 return -1;
94         }
95
96         memset(cur_stats, 0, sizeof(struct t_stats) );
97         memset(acc_stats, 0, sizeof(struct t_stats) );
98         return 1;
99 }