1 #include "status_counter.h"
2
3 #include <stdlib.h>
4
5 /**
6 * The status array can carry all the status information you want
7 * the key to the array is <module-prefix>.<name>
8 * and the values are counters
9 *
10 * example:
11 * fastcgi.backends = 10
12 * fastcgi.active-backends = 6
13 * fastcgi.backend.<key>.load = 24
14 * fastcgi.backend.<key>....
15 *
16 * fastcgi.backend.<key>.disconnects = ...
17 */
18
status_counter_get_counter(server * srv,const char * s,size_t len)19 data_integer *status_counter_get_counter(server *srv, const char *s, size_t len) {
20 data_integer *di;
21
22 if (NULL == (di = (data_integer *)array_get_element(srv->status, s))) {
23 /* not found, create it */
24
25 if (NULL == (di = (data_integer *)array_get_unused_element(srv->status, TYPE_INTEGER))) {
26 di = data_integer_init();
27 }
28 buffer_copy_string_len(di->key, s, len);
29 di->value = 0;
30
31 array_insert_unique(srv->status, (data_unset *)di);
32 }
33 return di;
34 }
35
36 /* dummies of the statistic framework functions
37 * they will be moved to a statistics.c later */
status_counter_inc(server * srv,const char * s,size_t len)38 int status_counter_inc(server *srv, const char *s, size_t len) {
39 data_integer *di = status_counter_get_counter(srv, s, len);
40
41 di->value++;
42
43 return 0;
44 }
45
status_counter_dec(server * srv,const char * s,size_t len)46 int status_counter_dec(server *srv, const char *s, size_t len) {
47 data_integer *di = status_counter_get_counter(srv, s, len);
48
49 if (di->value > 0) di->value--;
50
51 return 0;
52 }
53
status_counter_set(server * srv,const char * s,size_t len,int val)54 int status_counter_set(server *srv, const char *s, size_t len, int val) {
55 data_integer *di = status_counter_get_counter(srv, s, len);
56
57 di->value = val;
58
59 return 0;
60 }
61
62