forked from yubo/rrdlite
-
Notifications
You must be signed in to change notification settings - Fork 16
/
rrd_format.c
103 lines (94 loc) · 3.51 KB
/
rrd_format.c
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
/*****************************************************************************
* RRDtool 1.4.9 Copyright by Tobi Oetiker, 1997-2014
*****************************************************************************
* rrd_format.c RRD Database Format helper functions
*****************************************************************************
* $Id$
* $Log$
* Revision 1.5 2004/05/18 18:53:03 oetiker
* big spell checking patch -- [email protected]
*
* Revision 1.4 2003/02/13 07:05:27 oetiker
* Find attached the patch I promised to send to you. Please note that there
* are three new source files (src/rrd_is_thread_safe.h, src/rrd_thread_safe.c
* and src/rrd_not_thread_safe.c) and the introduction of librrd_th. This
* library is identical to librrd, but it contains support code for per-thread
* global variables currently used for error information only. This is similar
* to how errno per-thread variables are implemented. librrd_th must be linked
* alongside of libpthred
*
* There is also a new file "THREADS", holding some documentation.
*
* -- Peter Stamfest <[email protected]>
*
* Revision 1.3 2002/02/01 20:34:49 oetiker
* fixed version number and date/time
*
* Revision 1.2 2001/03/10 23:54:39 oetiker
* Support for COMPUTE data sources (CDEF data sources). Removes the RPN
* parser and calculator from rrd_graph and puts then in a new file,
* rrd_rpncalc.c. Changes to core files rrd_create and rrd_update. Some
* clean-up of aberrant behavior stuff, including a bug fix.
* Documentation update (rrdcreate.pod, rrdupdate.pod). Change xml format.
* -- Jake Brutlag <[email protected]>
*
* Revision 1.1.1.1 2001/02/25 22:25:05 oetiker
* checkin
*
* Revision 1.3 1998/03/08 12:35:11 oetiker
* checkpointing things because the current setup seems to work
* according to the things said in the manpages
*
* Revision 1.2 1998/02/26 22:58:22 oetiker
* fixed define
*
* Revision 1.1 1998/02/21 16:14:41 oetiker
* Initial revision
*
*
*****************************************************************************/
#include "rrd_tool.h"
#ifdef WIN32
#include "stdlib.h"
#endif
#define converter(VV,VVV) \
if (strcmp(#VV, string) == 0) return VVV;
/* conversion functions to allow symbolic entry of enumerations */
enum dst_en dst_conv( char *string) {
converter(COUNTER, DST_COUNTER)
converter(ABSOLUTE, DST_ABSOLUTE)
converter(GAUGE, DST_GAUGE)
converter(DERIVE, DST_DERIVE)
converter(COMPUTE, DST_CDEF)
return (enum dst_en)(-1);
}
enum cf_en cf_conv( const char *string) {
converter(AVERAGE, CF_AVERAGE)
converter(MIN, CF_MINIMUM)
converter(MAX, CF_MAXIMUM)
converter(LAST, CF_LAST)
converter(HWPREDICT, CF_HWPREDICT)
converter(MHWPREDICT, CF_MHWPREDICT)
converter(DEVPREDICT, CF_DEVPREDICT)
converter(SEASONAL, CF_SEASONAL)
converter(DEVSEASONAL, CF_DEVSEASONAL)
converter(FAILURES, CF_FAILURES)
return (enum cf_en)(-1);
}
#undef converter
long ds_match( rrd_t *rrd, char *ds_nam) {
unsigned long i;
for (i = 0; i < rrd->stat_head->ds_cnt; i++)
if ((strcmp(ds_nam, rrd->ds_def[i].ds_nam)) == 0)
return i;
return -RRD_ERR_UNKNOWN_DS_NAME;
}
off_t rrd_get_header_size( rrd_t *rrd) {
return sizeof(stat_head_t) + \
sizeof(ds_def_t) * rrd->stat_head->ds_cnt + \
sizeof(rra_def_t) * rrd->stat_head->rra_cnt + \
( atoi(rrd->stat_head->version) < 3 ? sizeof(time_t) : sizeof(live_head_t) ) + \
sizeof(pdp_prep_t) * rrd->stat_head->ds_cnt + \
sizeof(cdp_prep_t) * rrd->stat_head->ds_cnt * rrd->stat_head->rra_cnt + \
sizeof(rra_ptr_t) * rrd->stat_head->rra_cnt;
}