282 lines
9.5 KiB
C
282 lines
9.5 KiB
C
/*****************************************************************************
|
|
* RRDtool 1.4.9 Copyright by Tobi Oetiker, 1997-2014
|
|
*****************************************************************************
|
|
* rrdlib.h Public header file for librrd
|
|
*****************************************************************************
|
|
* $Id$
|
|
* $Log$
|
|
* Revision 1.9 2005/02/13 16:13:33 oetiker
|
|
* let rrd_graph return the actual value range it picked ...
|
|
* -- Henrik Stoerner <henrik@hswn.dk>
|
|
*
|
|
* Revision 1.8 2004/05/26 22:11:12 oetiker
|
|
* reduce compiler warnings. Many small fixes. -- Mike Slifcak <slif@bellsouth.net>
|
|
*
|
|
* Revision 1.7 2003/11/12 22:14:26 oetiker
|
|
* allow to pass an open filehandle into rrd_graph as an extra argument
|
|
*
|
|
* Revision 1.6 2003/11/11 19:46:21 oetiker
|
|
* replaced time_value with rrd_time_value as MacOS X introduced a struct of that name in their standard headers
|
|
*
|
|
* Revision 1.5 2003/04/25 18:35:08 jake
|
|
* Alternate update interface, updatev. Returns info about CDPs written to disk as result of update. Output format is similar to rrd_info, a hash of key-values.
|
|
*
|
|
* Revision 1.4 2003/04/01 22:52:23 jake
|
|
* Fix Win32 build. VC++ 6.0 and 7.0 now use the thread-safe code.
|
|
*
|
|
* Revision 1.3 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 <peter@stamfest.at>
|
|
*
|
|
* Revision 1.2 2002/05/07 21:58:32 oetiker
|
|
* new command rrdtool xport integrated
|
|
* -- Wolfgang Schrimm <Wolfgang.Schrimm@urz.uni-heidelberg.de>
|
|
*
|
|
* Revision 1.1.1.1 2001/02/25 22:25:05 oetiker
|
|
* checkin
|
|
*
|
|
*****************************************************************************/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef _RRDLIB_H
|
|
#define _RRDLIB_H
|
|
|
|
#include <sys/types.h> /* for off_t */
|
|
|
|
#ifndef WIN32
|
|
#include <unistd.h> /* for off_t */
|
|
#else
|
|
#ifdef _MSC_VER
|
|
#ifndef PERLPATCHLEVEL
|
|
typedef int mode_t;
|
|
#endif
|
|
#define strtoll _strtoi64
|
|
#endif
|
|
typedef size_t ssize_t;
|
|
typedef long off_t;
|
|
#endif
|
|
|
|
#include <time.h>
|
|
#include <stdio.h> /* for FILE */
|
|
#include <string.h>
|
|
|
|
/* Formerly rrd_nan_inf.h */
|
|
#ifndef DNAN
|
|
# define DNAN rrd_set_to_DNAN()
|
|
#endif
|
|
|
|
#ifndef DINF
|
|
# define DINF rrd_set_to_DINF()
|
|
#endif
|
|
double rrd_set_to_DNAN( void);
|
|
double rrd_set_to_DINF( void);
|
|
/* end of rrd_nan_inf.h */
|
|
|
|
/* Transplanted from rrd_format.h */
|
|
typedef double rrd_value_t; /* the data storage type is
|
|
* double */
|
|
/* END rrd_format.h */
|
|
|
|
/* information about an rrd file */
|
|
typedef struct rrd_file_t {
|
|
size_t header_len; /* length of the header of this rrd file */
|
|
size_t file_len; /* total size of the rrd file */
|
|
size_t pos; /* current pos in file */
|
|
void *pvt;
|
|
} rrd_file_t;
|
|
|
|
/* information used for the conventional file access methods */
|
|
typedef struct rrd_simple_file_t {
|
|
int fd; /* file descriptor of this rrd file */
|
|
#ifdef HAVE_MMAP
|
|
char *file_start; /* start address of an open rrd file */
|
|
int mm_prot;
|
|
int mm_flags;
|
|
#endif
|
|
} rrd_simple_file_t;
|
|
|
|
/* rrd info interface */
|
|
typedef struct rrd_blob_t {
|
|
unsigned long size; /* size of the blob */
|
|
unsigned char *ptr; /* pointer */
|
|
} rrd_blob_t;
|
|
|
|
typedef enum rrd_info_type { RD_I_VAL = 0,
|
|
RD_I_CNT,
|
|
RD_I_STR,
|
|
RD_I_INT,
|
|
RD_I_BLO
|
|
} rrd_info_type_t;
|
|
|
|
typedef union rrd_infoval {
|
|
unsigned long u_cnt;
|
|
rrd_value_t u_val;
|
|
char *u_str;
|
|
int u_int;
|
|
rrd_blob_t u_blo;
|
|
} rrd_infoval_t;
|
|
|
|
typedef struct rrd_info_t {
|
|
char *key;
|
|
rrd_info_type_t type;
|
|
rrd_infoval_t value;
|
|
struct rrd_info_t *next;
|
|
} rrd_info_t;
|
|
|
|
typedef size_t (* rrd_output_callback_t)( const void *, size_t, void *);
|
|
|
|
/* main function blocks */
|
|
int rrd_create( int, char **);
|
|
rrd_info_t *rrd_info( int, char **);
|
|
rrd_info_t *rrd_info_push( rrd_info_t *, char *, rrd_info_type_t, rrd_infoval_t);
|
|
void rrd_info_print( rrd_info_t * data);
|
|
void rrd_info_free( rrd_info_t *);
|
|
int rrd_update( int, char **);
|
|
rrd_info_t *rrd_update_v( int, char **);
|
|
int rrd_graph( int, char **, char ***, int *, int *,
|
|
FILE *, double *, double *);
|
|
rrd_info_t *rrd_graph_v( int, char **);
|
|
|
|
int rrd_fetch( int, char **, time_t *, time_t *, unsigned long *,
|
|
unsigned long *, char ***, rrd_value_t **);
|
|
int rrd_restore( int, char **);
|
|
int rrd_dump( int, char **);
|
|
int rrd_tune( int, char **);
|
|
time_t rrd_last( int, char **);
|
|
int rrd_lastupdate(int argc, char **argv);
|
|
time_t rrd_first( int, char **);
|
|
int rrd_resize( int, char **);
|
|
char *rrd_strversion( void);
|
|
double rrd_version( void);
|
|
int rrd_xport( int, char **, int *, time_t *, time_t *,
|
|
unsigned long *, unsigned long *, char ***, rrd_value_t **);
|
|
int rrd_flushcached (int argc, char **argv);
|
|
|
|
void rrd_freemem( void *mem);
|
|
|
|
/* thread-safe (hopefully) */
|
|
int rrd_create_r( const char *filename, unsigned long pdp_step, time_t last_up,
|
|
int argc, const char **argv);
|
|
rrd_info_t *rrd_info_r(char *, int *);
|
|
/* NOTE: rrd_update_r are only thread-safe if no at-style time
|
|
specifications get used!!! */
|
|
|
|
int rrd_update_r( const char *filename, const char *_template,
|
|
int argc, const char **argv);
|
|
int rrd_fetch_r ( const char *filename, const char *cf, time_t *start, time_t *end,
|
|
unsigned long *step, unsigned long *ds_cnt, char ***ds_namv, rrd_value_t **data);
|
|
int rrd_dump_r( const char *filename, char *outname);
|
|
time_t rrd_last_r (const char *filename);
|
|
int rrd_lastupdate_r (const char *filename, time_t *ret_last_update, unsigned long *ret_ds_count, char ***ret_ds_names, char ***ret_last_ds);
|
|
time_t rrd_first_r( const char *filename, int rraindex);
|
|
|
|
int rrd_dump_cb_r( const char *filename, int opt_header, rrd_output_callback_t cb, void *user);
|
|
|
|
/* Transplanted from rrd_parsetime.h */
|
|
typedef enum {
|
|
ABSOLUTE_TIME,
|
|
RELATIVE_TO_START_TIME,
|
|
RELATIVE_TO_END_TIME,
|
|
RELATIVE_TO_EPOCH
|
|
} rrd_timetype_t;
|
|
|
|
#define TIME_OK NULL
|
|
|
|
typedef struct rrd_time_value {
|
|
rrd_timetype_t type;
|
|
long offset;
|
|
struct tm tm;
|
|
} rrd_time_value_t;
|
|
|
|
char *rrd_parsetime( const char *spec, rrd_time_value_t * ptv);
|
|
/* END rrd_parsetime.h */
|
|
|
|
typedef struct rrd_context {
|
|
char lib_errstr[256];
|
|
char rrd_error[4096];
|
|
} rrd_context_t;
|
|
|
|
/* returns the current per-thread rrd_context */
|
|
rrd_context_t *rrd_get_context(void);
|
|
|
|
#ifdef WIN32
|
|
/* this was added by the win32 porters Christof.Wegmann@exitgames.com */
|
|
rrd_context_t *rrd_force_new_context(void);
|
|
#endif
|
|
|
|
int rrd_proc_start_end( rrd_time_value_t *, rrd_time_value_t *, time_t *, time_t *);
|
|
|
|
|
|
/* rrd_strerror is thread safe, but still it uses a global buffer
|
|
(but one per thread), thus subsequent calls within a single
|
|
thread overwrite the same buffer */
|
|
const char *rrd_strerror( int err);
|
|
|
|
/** MULTITHREADED HELPER FUNCTIONS */
|
|
|
|
/** UTILITY FUNCTIONS */
|
|
|
|
long rrd_random(void);
|
|
|
|
int rrd_add_ptr(void ***dest, size_t *dest_size, void *src);
|
|
int rrd_add_strdup(char ***dest, size_t *dest_size, char *src);
|
|
void rrd_free_ptrs(void ***src, size_t *cnt);
|
|
|
|
int rrd_mkdir_p(const char *pathname, mode_t mode);
|
|
|
|
/*
|
|
* The following functions are _internal_ functions needed to read the raw RRD
|
|
* files. Since they are _internal_ they may change with the file format and
|
|
* will be replaced with a more general interface in RRDTool 1.4. Don't use
|
|
* these functions unless you have good reasons to do so. If you do use these
|
|
* functions you will have to adapt your code for RRDTool 1.4!
|
|
*
|
|
* To enable the deprecated functions define `RRD_EXPORT_DEPRECATED' before
|
|
* including <rrd_test.h>. You have been warned! If you come back to the
|
|
* RRDTool mailing list and whine about your broken application, you will get
|
|
* hit with something smelly!
|
|
*/
|
|
#if defined(_RRD_TOOL_H) || defined(RRD_EXPORT_DEPRECATED)
|
|
|
|
#include "rrd_error.h"
|
|
#include "rrd_format.h"
|
|
|
|
#if defined(__GNUC__) && defined (RRD_EXPORT_DEPRECATED)
|
|
# define RRD_DEPRECATED __attribute__((deprecated))
|
|
#else
|
|
# define RRD_DEPRECATED /**/
|
|
#endif
|
|
void rrd_free( rrd_t *rrd) RRD_DEPRECATED;
|
|
void rrd_init( rrd_t *rrd) RRD_DEPRECATED;
|
|
|
|
rrd_file_t *rrd_open( const char *const file_name, rrd_t *rrd, unsigned rdwr, int *ret_p) RRD_DEPRECATED;
|
|
|
|
void rrd_dontneed( rrd_file_t *rrd_file, rrd_t *rrd) RRD_DEPRECATED;
|
|
int rrd_close( rrd_file_t *rrd_file) RRD_DEPRECATED;
|
|
ssize_t rrd_read( rrd_file_t *rrd_file, void *buf, size_t count) RRD_DEPRECATED;
|
|
ssize_t rrd_write( rrd_file_t *rrd_file, const void *buf, size_t count) RRD_DEPRECATED;
|
|
void rrd_flush( rrd_file_t *rrd_file) RRD_DEPRECATED;
|
|
off_t rrd_seek( rrd_file_t *rrd_file, off_t off, int whence) RRD_DEPRECATED;
|
|
off_t rrd_tell( rrd_file_t *rrd_file) RRD_DEPRECATED;
|
|
int rrd_lock( rrd_file_t *file) RRD_DEPRECATED;
|
|
void rrd_notify_row( rrd_file_t *rrd_file, int rra_idx, unsigned long rra_row, time_t rra_time) RRD_DEPRECATED;
|
|
unsigned long rrd_select_initial_row( rrd_file_t *rrd_file, int rra_idx, rra_def_t *rra) RRD_DEPRECATED;
|
|
#endif /* defined(_RRD_TOOL_H) || defined(RRD_EXPORT_DEPRECATED) */
|
|
|
|
#endif /* _RRDLIB_H */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|