File: stats.c

package info (click to toggle)
memcachedb 1.2.0-11
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 956 kB
  • ctags: 676
  • sloc: ansic: 3,319; sh: 1,126; python: 1,081; perl: 78; makefile: 21
file content (235 lines) | stat: -rw-r--r-- 12,691 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
/*
 *  MemcacheDB - A distributed key-value storage system designed for persistent:
 *
 *      http://memcachedb.googlecode.com
 *
 *  The source code of Memcachedb is most based on Memcached:
 *
 *      http://danga.com/memcached/
 *
 *  Copyright 2008 Steve Chu.  All rights reserved.
 *
 *  Use and distribution licensed under the BSD license.  See
 *  the LICENSE file for full text.
 *
 *  Authors:
 *      Steve Chu <stvchu@gmail.com>
 *
 */
  
#include "memcachedb.h"
#include <db.h>

void stats_bdb(char *temp){
    char *pos = temp;
    int ret;
    /* get bdb version */
    pos += sprintf(pos, "STAT db_ver %d.%d.%d\r\n", bdb_version.majver, 
                                                    bdb_version.minver, 
                                                    bdb_version.patch);
    /* get page size */
    if((ret = dbp->get_pagesize(dbp, &bdb_settings.page_size)) == 0){
        pos += sprintf(pos, "STAT page_size %u\r\n", bdb_settings.page_size);
    }
    
    /* get database type */
    if((ret = dbp->get_type(dbp, &bdb_settings.db_type)) == 0){
        if (bdb_settings.db_type == DB_BTREE){
            pos += sprintf(pos, "STAT db_type btree\r\n");
        }else if (bdb_settings.db_type == DB_HASH){
            pos += sprintf(pos, "STAT db_type hash\r\n");
        }
    }
    pos += sprintf(pos, "STAT cache_size %u\r\n", bdb_settings.cache_size);
    pos += sprintf(pos, "STAT txn_lg_bsize %u\r\n", bdb_settings.txn_lg_bsize);
    pos += sprintf(pos, "STAT txn_nosync %d\r\n", bdb_settings.txn_nosync);
    pos += sprintf(pos, "STAT dldetect_val %d\r\n", bdb_settings.dldetect_val);
    pos += sprintf(pos, "STAT chkpoint_val %d\r\n", bdb_settings.chkpoint_val);
    pos += sprintf(pos, "STAT memp_trickle_val %d\r\n", bdb_settings.memp_trickle_val);
    pos += sprintf(pos, "STAT memp_trickle_percent %d\r\n", bdb_settings.memp_trickle_percent);
    pos += sprintf(pos, "END");
}

void stats_rep(char *temp){
    char *pos = temp;
    int ret;
    DB_REP_STAT *statp = NULL;
    if (env->rep_stat(env, &statp, 0) == 0){
        pos += sprintf(pos, "STAT st_bulk_fills %u\r\n", statp->st_bulk_fills);
        pos += sprintf(pos, "STAT st_bulk_overflows %u\r\n", statp->st_bulk_overflows);
        pos += sprintf(pos, "STAT st_bulk_records %u\r\n", statp->st_bulk_records);
        pos += sprintf(pos, "STAT st_bulk_transfers %u\r\n", statp->st_bulk_transfers);
        pos += sprintf(pos, "STAT st_client_rerequests %u\r\n", statp->st_client_rerequests);
        pos += sprintf(pos, "STAT st_client_svc_miss %u\r\n", statp->st_client_svc_miss);
        pos += sprintf(pos, "STAT st_client_svc_req %u\r\n", statp->st_client_svc_req);
        pos += sprintf(pos, "STAT st_dupmasters %u\r\n", statp->st_dupmasters);
        pos += sprintf(pos, "STAT st_egen %u\r\n", statp->st_egen);
        pos += sprintf(pos, "STAT st_election_cur_winner %u\r\n", statp->st_election_cur_winner);
        pos += sprintf(pos, "STAT st_election_gen %u\r\n", statp->st_election_gen);
        pos += sprintf(pos, "STAT st_election_lsn %u/%u\r\n", statp->st_election_lsn.file,
                                                              statp->st_election_lsn.offset);
        pos += sprintf(pos, "STAT st_election_nsites %u\r\n", statp->st_election_nsites);
        pos += sprintf(pos, "STAT st_election_nvotes %u\r\n", statp->st_election_nvotes);
        pos += sprintf(pos, "STAT st_election_priority %u\r\n", statp->st_election_priority);
        pos += sprintf(pos, "STAT st_election_sec %u\r\n", statp->st_election_sec);
        pos += sprintf(pos, "STAT st_election_status %u\r\n", statp->st_election_status);
        pos += sprintf(pos, "STAT st_election_tiebreaker %u\r\n", statp->st_election_tiebreaker);
        pos += sprintf(pos, "STAT st_election_usec %u\r\n", statp->st_election_usec);
        pos += sprintf(pos, "STAT st_election_votes %u\r\n", statp->st_election_votes);
        pos += sprintf(pos, "STAT st_elections %u\r\n", statp->st_elections);
        pos += sprintf(pos, "STAT st_elections_won %u\r\n", statp->st_elections_won);
        pos += sprintf(pos, "STAT st_env_id %u\r\n", statp->st_env_id);
        pos += sprintf(pos, "STAT st_env_priority %u\r\n", statp->st_env_priority);
        pos += sprintf(pos, "STAT st_gen %u\r\n", statp->st_gen);
        pos += sprintf(pos, "STAT st_log_duplicated %u\r\n", statp->st_log_duplicated);
        pos += sprintf(pos, "STAT st_log_queued %u\r\n", statp->st_log_queued);
        pos += sprintf(pos, "STAT st_log_queued_max %u\r\n", statp->st_log_queued_max);
        pos += sprintf(pos, "STAT st_log_queued_total %u\r\n", statp->st_log_queued_total);
        pos += sprintf(pos, "STAT st_log_records %u\r\n", statp->st_log_records);
        pos += sprintf(pos, "STAT st_log_requested %u\r\n", statp->st_log_requested);
        pos += sprintf(pos, "STAT st_master %u\r\n", statp->st_master);
        pos += sprintf(pos, "STAT st_master_changes %u\r\n", statp->st_master_changes);
        pos += sprintf(pos, "STAT st_max_lease_sec %u\r\n", statp->st_max_lease_sec);
        pos += sprintf(pos, "STAT st_max_lease_usec %u\r\n", statp->st_max_lease_usec);
        pos += sprintf(pos, "STAT st_max_perm_lsn %u/%u\r\n", statp->st_max_perm_lsn.file,
                                                              statp->st_max_perm_lsn.offset);
        pos += sprintf(pos, "STAT st_msgs_badgen %u\r\n", statp->st_msgs_badgen);
        pos += sprintf(pos, "STAT st_msgs_processed %u\r\n", statp->st_msgs_processed);
        pos += sprintf(pos, "STAT st_msgs_recover %u\r\n", statp->st_msgs_recover);
        pos += sprintf(pos, "STAT st_msgs_send_failures %u\r\n", statp->st_msgs_send_failures);
        pos += sprintf(pos, "STAT st_msgs_sent %u\r\n", statp->st_msgs_sent);
        pos += sprintf(pos, "STAT st_newsites %u\r\n", statp->st_newsites);
        pos += sprintf(pos, "STAT st_next_lsn %u/%u\r\n", statp->st_next_lsn.file, 
                                                          statp->st_next_lsn.offset);
        pos += sprintf(pos, "STAT st_next_pg %u\r\n", statp->st_next_pg);
        pos += sprintf(pos, "STAT st_nsites %u\r\n", statp->st_nsites);
        pos += sprintf(pos, "STAT st_nthrottles %u\r\n", statp->st_nthrottles);
        pos += sprintf(pos, "STAT st_outdated %u\r\n", statp->st_outdated);
        pos += sprintf(pos, "STAT st_pg_duplicated %u\r\n", statp->st_pg_duplicated);
        pos += sprintf(pos, "STAT st_pg_records %u\r\n", statp->st_pg_records);
        pos += sprintf(pos, "STAT st_pg_requested %u\r\n", statp->st_pg_requested);
        pos += sprintf(pos, "STAT st_startsync_delayed %u\r\n", statp->st_startsync_delayed);
        pos += sprintf(pos, "STAT st_startup_complete %u\r\n", statp->st_startup_complete);
        pos += sprintf(pos, "STAT st_status %u\r\n", statp->st_status);
        pos += sprintf(pos, "STAT st_txns_applied %u\r\n", statp->st_txns_applied);
        pos += sprintf(pos, "STAT st_waiting_lsn %u/%u\r\n", statp->st_waiting_lsn.file,    
                                                             statp->st_waiting_lsn.offset);
        pos += sprintf(pos, "STAT st_waiting_pg %u\r\n", statp->st_waiting_pg);
    }
    if (statp != NULL)
        free(statp);

    pos += sprintf(pos, "END");
}

void stats_repmgr(char *temp){
    char *pos = temp;
    int ret;
    DB_REPMGR_STAT *statp = NULL;
    if (env->repmgr_stat(env, &statp, 0) == 0){
        pos += sprintf(pos, "STAT st_perm_failed %u\r\n", statp->st_perm_failed);
        pos += sprintf(pos, "STAT st_msgs_queued %u\r\n", statp->st_msgs_queued);
        pos += sprintf(pos, "STAT st_msgs_dropped %u\r\n", statp->st_msgs_dropped);
        pos += sprintf(pos, "STAT st_connection_drop %u\r\n", statp->st_connection_drop);
        pos += sprintf(pos, "STAT st_connect_fail %u\r\n", statp->st_connect_fail);
    }
    if (statp != NULL)
        free(statp);

    pos += sprintf(pos, "END");
}

void stats_repcfg(char *temp){
    char *pos = temp;
    int ret;
    if (env->rep_get_priority(env, &bdb_settings.rep_priority) == 0){
        pos += sprintf(pos, "STAT rep_priority %d\r\n", bdb_settings.rep_priority);
    }
    if (env->repmgr_get_ack_policy(env, &bdb_settings.rep_ack_policy) == 0){
        pos += sprintf(pos, "STAT rep_ack_policy %d\r\n", bdb_settings.rep_ack_policy);
    }
    /* timeout configure */
    if (env->rep_get_timeout(env, DB_REP_ACK_TIMEOUT, &bdb_settings.rep_ack_timeout) == 0){
        pos += sprintf(pos, "STAT rep_ack_timeout %u\r\n", bdb_settings.rep_ack_timeout);
    }
    if (env->rep_get_timeout(env, DB_REP_CHECKPOINT_DELAY, &bdb_settings.rep_chkpoint_delay) == 0){
        pos += sprintf(pos, "STAT rep_chkpoint_delay %u\r\n", bdb_settings.rep_chkpoint_delay);
    }
    if (env->rep_get_timeout(env, DB_REP_CONNECTION_RETRY, &bdb_settings.rep_conn_retry) == 0){
        pos += sprintf(pos, "STAT rep_conn_retry %u\r\n", bdb_settings.rep_conn_retry);
    }
    if (env->rep_get_timeout(env, DB_REP_ELECTION_TIMEOUT, &bdb_settings.rep_elect_timeout) == 0){
        pos += sprintf(pos, "STAT rep_elect_timeout %u\r\n", bdb_settings.rep_elect_timeout);
    }
    if (env->rep_get_timeout(env, DB_REP_ELECTION_RETRY, &bdb_settings.rep_elect_retry) == 0){
        pos += sprintf(pos, "STAT rep_elect_retry %u\r\n", bdb_settings.rep_elect_retry);
    }
    /*
    if (env->rep_get_timeout(env, DB_REP_HEARTBEAT_MONITOR, &bdb_settings.rep_heartbeat_monitor) == 0){
        pos += sprintf(pos, "STAT rep_heartbeat_monitor %u\r\n", bdb_settings.rep_heartbeat_monitor);
    }
    if (env->rep_get_timeout(env, DB_REP_HEARTBEAT_SEND, &bdb_settings.rep_heartbeat_send) == 0){
        pos += sprintf(pos, "STAT rep_heartbeat_send %u\r\n", bdb_settings.rep_heartbeat_send);
    }*/
    /*
    if (env->rep_get_timeout(env, DB_REP_LEASE_TIMEOUT, &bdb_settings.rep_lease_timeout) == 0){
        pos += sprintf(pos, "STAT rep_lease_timeout %u\r\n", bdb_settings.rep_lease_timeout);
    }*/
    
    /* flag configure */
    if (env->rep_get_config(env, DB_REP_CONF_BULK, &bdb_settings.rep_bulk) == 0){
        pos += sprintf(pos, "STAT rep_bulk %d\r\n", bdb_settings.rep_bulk);
    }
    /*
    if (env->rep_get_config(env, DB_REP_CONF_LEASE, &bdb_settings.rep_lease) == 0){
        pos += sprintf(pos, "STAT rep_lease %d\r\n", bdb_settings.rep_lease);
    }*/
    if (env->rep_get_request(env, &bdb_settings.rep_req_min, &bdb_settings.rep_req_max) == 0){ 
        pos += sprintf(pos, "STAT rep_request %u/%u\r\n", bdb_settings.rep_req_min, 
                                                          bdb_settings.rep_req_max);
    }
    /* 
    if (env->rep_get_clockskew(env, &bdb_settings.rep_fast_clock, &bdb_settings.rep_slow_clock) == 0){ 
        pos += sprintf(pos, "STAT rep_clock %u/%u\r\n", bdb_settings.rep_fast_clock, 
                                                        bdb_settings.rep_slow_clock);
    } */
    if (env->rep_get_limit(env, &bdb_settings.rep_limit_gbytes, &bdb_settings.rep_limit_bytes) == 0){ 
        pos += sprintf(pos, "STAT rep_limit %u/%u\r\n", bdb_settings.rep_limit_gbytes, 
                                                        bdb_settings.rep_limit_bytes);
    } 
    if (env->rep_get_nsites(env, &bdb_settings.rep_nsites) == 0){ 
        pos += sprintf(pos, "STAT rep_nsites %u\r\n", bdb_settings.rep_nsites);
    } 
    pos += sprintf(pos, "END");
}

void stats_repms(char *temp){
    char *pos = temp;
    int ret;
    DB_REPMGR_SITE *list = NULL;
    u_int count, i;
    
    /* stats myself */
    if (bdb_settings.rep_master_eid == DB_EID_INVALID){
        pos += sprintf(pos, "STAT site-00 %s:%d/UNKNOWN/--\r\n", bdb_settings.rep_localhost,
                                                                 bdb_settings.rep_localport);
    } else if (bdb_settings.rep_master_eid == BDB_EID_SELF){
        pos += sprintf(pos, "STAT site-00 %s:%d/MASTER/--\r\n", bdb_settings.rep_localhost,
                                                                bdb_settings.rep_localport);
    } else {
        pos += sprintf(pos, "STAT site-00 %s:%d/CLIENT/--\r\n", bdb_settings.rep_localhost,
                                                                bdb_settings.rep_localport);
    }
    
    /* stats others */
    if ((0 == env->repmgr_site_list(env, &count, &list))) { 
        for (i = 0; i < count; ++i) {
            pos += sprintf(pos, "STAT site-%02d %s:%d/%s/%s\r\n", i+1, list[i].host, list[i].port,
                           (bdb_settings.rep_master_eid == list[i].eid ? "MASTER" : "CLIENT"),           
                           (list[i].status == DB_REPMGR_CONNECTED ? "CONNECTED": "DISCONNECTED"));
        }
    }
    if (list != NULL)
        free(list);
    pos += sprintf(pos, "END");
}