4 Copyright (C) Ronnie Sahlberg 2010
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, see <http://www.gnu.org/licenses/>.
22 #include "../include/ctdb_private.h"
24 static void ctdb_statistics_update(struct event_context
*ev
, struct timed_event
*te
,
25 struct timeval t
, void *p
)
27 struct ctdb_context
*ctdb
= talloc_get_type(p
, struct ctdb_context
);
29 memmove(&ctdb
->statistics_history
[1], &ctdb
->statistics_history
[0], (MAX_STAT_HISTORY
-1)*sizeof(struct ctdb_statistics
));
30 memcpy(&ctdb
->statistics_history
[0], &ctdb
->statistics_current
, sizeof(struct ctdb_statistics
));
31 ctdb
->statistics_history
[0].statistics_current_time
= timeval_current();
34 bzero(&ctdb
->statistics_current
, sizeof(struct ctdb_statistics
));
35 ctdb
->statistics_current
.statistics_start_time
= timeval_current();
38 event_add_timed(ctdb
->ev
, ctdb
, timeval_current_ofs(ctdb
->tunable
.stat_history_interval
, 0), ctdb_statistics_update
, ctdb
);
41 int ctdb_statistics_init(struct ctdb_context
*ctdb
)
43 bzero(&ctdb
->statistics
, sizeof(struct ctdb_statistics
));
44 ctdb
->statistics
.statistics_start_time
= timeval_current();
46 bzero(&ctdb
->statistics_current
, sizeof(struct ctdb_statistics
));
47 ctdb
->statistics_current
.statistics_start_time
= timeval_current();
49 bzero(ctdb
->statistics_history
, sizeof(ctdb
->statistics_history
));
51 event_add_timed(ctdb
->ev
, ctdb
, timeval_current_ofs(ctdb
->tunable
.stat_history_interval
, 0), ctdb_statistics_update
, ctdb
);
56 int32_t ctdb_control_get_stat_history(struct ctdb_context
*ctdb
,
57 struct ctdb_req_control
*c
,
61 struct ctdb_statistics_wire
*s
;
63 len
= offsetof(struct ctdb_statistics_wire
, stats
) + MAX_STAT_HISTORY
*sizeof(struct ctdb_statistics
);
65 s
= talloc_size(outdata
, len
);
67 DEBUG(DEBUG_ERR
,(__location__
" Failed to allocate statistics history structure\n"));
71 s
->num
= MAX_STAT_HISTORY
;
72 memcpy(&s
->stats
[0], &ctdb
->statistics_history
[0], sizeof(ctdb
->statistics_history
));
75 outdata
->dptr
= (uint8_t *)s
;