24 #include <plugins/rrd/aspect/rrd_descriptions.h> 25 #include <plugins/rrd/aspect/rrd_manager.h> 26 #include <core/exceptions/software.h> 27 #include <core/exceptions/system.h> 28 #include <utils/misc/string_conversions.h> 58 : __name(strdup(name)), __type(type), __heartbeat(heartbeat),
59 __min(min), __max(max), __rpn_expression(NULL), __string(NULL)
63 "COMPUTE type for DS %s", name);
73 : __name(strdup(name)), __type(
COMPUTE), __heartbeat(300), __min(
UNKNOWN),
74 __max(
UNKNOWN), __rpn_expression(strdup(rpn_expression)), __string(NULL)
82 : __name(strdup(other.__name)), __type(other.__type),
83 __heartbeat(other.__heartbeat),
84 __min(other.__min), __max(other.__max),
85 __rpn_expression(other.__rpn_expression ? strdup(other.__rpn_expression) : 0),
93 if (__string) free(__string);
94 if (__name) free(__name);
95 if (__rpn_expression) free(__rpn_expression);
105 if (__string) free(__string);
106 if (__name) free(__name);
107 if (__rpn_expression) free(__rpn_expression);
109 __rpn_expression = NULL;
110 __name = strdup(other.__name);
111 __type = other.__type;
112 __heartbeat = other.__heartbeat;
115 if (other.__rpn_expression) __rpn_expression = strdup(other.__rpn_expression);
129 if (asprintf(&__string,
"DS:%s:COMPUTE:%s", __name, __rpn_expression) == -1) {
133 const char *type_string;
135 case COUNTER: type_string =
"COUNTER";
break;
136 case DERIVE: type_string =
"DERIVE";
break;
137 case ABSOLUTE: type_string =
"ABSOLUTE";
break;
138 default: type_string =
"GAUGE";
break;
145 snprintf(min_s, 32,
"%f", __min);
150 snprintf(max_s, 32,
"%f", __max);
152 if (asprintf(&__string,
"DS:%s:%s:%u:%s:%s", __name, type_string,
153 __heartbeat, min_s, max_s) == -1) {
180 unsigned int steps,
unsigned int rows)
181 : __cf(cf), __xff(xff), __steps(steps), __rows(rows), __string(NULL)
190 : __cf(rra.__cf), __xff(rra.__xff), __steps(rra.__steps), __rows(rra.__rows),
199 if (__string) free(__string);
209 if (__string) free(__string);
213 __steps = rra.__steps;
225 const char *cf_string;
227 case MIN: cf_string =
"MIN";
break;
228 case MAX: cf_string =
"MAX";
break;
229 case LAST: cf_string =
"LAST";
break;
230 default: cf_string =
"AVERAGE";
break;
232 if (asprintf(&__string,
"RRA:%s:%f:%u:%u", cf_string,
233 __xff, __steps, __rows) == -1) {
252 default:
return "AVERAGE";
break;
275 unsigned int step_sec,
bool recreate)
276 : __name(strdup(name)), __step_sec(step_sec), __recreate(recreate),
277 __ds(ds), __rra(get_default_rra()), __filename(NULL), __rrd_manager(NULL)
291 std::vector<RRDDataSource> &ds,
292 std::vector<RRDArchive> &rra,
293 unsigned int step_sec,
bool recreate)
294 : __name(strdup(name)), __step_sec(step_sec), __recreate(recreate), __ds(ds),
295 __rra(rra), __filename(NULL), __rrd_manager(NULL)
304 : __name(strdup(other.__name)), __step_sec(other.__step_sec),
305 __recreate(other.__recreate), __ds(other.__ds), __rra(other.__rra),
306 __filename(other.__filename ? strdup(other.__filename) : 0),
318 if (__name) free(__name);
319 if (__filename) free(__filename);
320 if (__rrd_manager) __rrd_manager->
remove_rrd(
this);
322 __rrd_manager = NULL;
323 __name = strdup(other.__name);
324 __step_sec = other.__step_sec;
325 __recreate = other.__recreate;
328 if (other.__filename) __filename=strdup(other.__filename);
335 if (__rrd_manager) __rrd_manager->
remove_rrd(
this);
337 if (__name) free(__name);
338 if (__filename) free(__filename);
365 const std::vector<RRDArchive>
368 std::vector<RRDArchive> rv;
399 for (
size_t i = 0; i < __ds.size(); ++i) {
400 if (strcmp(__ds[i].
get_name(), ds_name) == 0)
return i;
403 throw Exception(
"Data source name %s not found", ds_name);
416 throw Exception(
"Graph definition %s: filename has already been set!", __name);
418 __filename = strdup(filename);
432 throw Exception(
"RRD definition %s: RRD manager has already been set", __name);
434 __rrd_manager = rrd_manager;
456 : __name(strdup(name)), __rrd_def(rrd_def),
457 __ds_name(ds_name ? strdup(ds_name) : strdup(name)),
458 __rpn_expression(NULL), __cf(cf), __string(NULL)
468 const char *rpn_expression)
469 : __name(strdup(name)), __rrd_def(0), __ds_name(NULL),
470 __rpn_expression(strdup(rpn_expression)),
480 : __name(strdup(other.__name)), __rrd_def(other.__rrd_def),
481 __ds_name(other.__ds_name ? strdup(other.__ds_name) : NULL),
482 __rpn_expression(other.__rpn_expression ? strdup(other.__rpn_expression) : 0),
483 __cf(other.__cf), __string(NULL)
491 if (__name) free(__name);
492 if (__ds_name) free(__ds_name);
493 if (__rpn_expression) free(__rpn_expression);
494 if (__string) free(__string);
504 if (__string) free(__string);
505 if (__ds_name) free(__ds_name);
506 if (__name) free(__name);
507 if (__rpn_expression) free(__rpn_expression);
510 __rpn_expression = NULL;
511 __name = strdup(other.__name);
512 __rrd_def = other.__rrd_def;
513 if (other.__ds_name) __ds_name = strdup(other.__ds_name);
514 if (other.__rpn_expression) __rpn_expression = other.__rpn_expression;
528 if (__rpn_expression) {
529 if (asprintf(&__string,
"CDEF:%s=%s", __name, __rpn_expression) == -1) {
535 if (asprintf(&__string,
"DEF:%s=%s:%s:%s", __name, __rrd_def->
get_filename(),
536 __rrd_def->
get_ds(ds_index).get_name(),
583 : __def_name(strdup(def_name)), __cf(cf), __format(strdup(format)),
592 : __def_name(strdup(other.__def_name)), __cf(other.__cf),
593 __format(strdup(other.__format)), __string(NULL)
601 if (__def_name) free(__def_name);
602 if (__format) free(__format);
603 if (__string) free(__string);
613 if (__def_name) free(__def_name);
614 if (__format) free(__format);
615 if (__string) free(__string);
618 __def_name = strdup(g.__def_name);
620 __format = strdup(g.__format);
630 if (asprintf(&__string,
"GPRINT:%s:%s:%s", __def_name,
653 const char *legend,
bool stacked)
654 : __def_name(strdup(def_name)), __width(width), __color(strdup(color)),
655 __legend(strdup(legend)), __stacked(stacked), __string(NULL)
663 : __def_name(strdup(other.__def_name)), __width(other.__width),
664 __color(strdup(other.__color)),
665 __legend(strdup(other.__legend)), __stacked(other.__stacked), __string(NULL)
673 if (__def_name) free(__def_name);
674 if (__color) free(__color);
675 if (__legend) free(__legend);
676 if (__string) free(__string);
687 if (__def_name) free(__def_name);
688 if (__color) free(__color);
689 if (__legend) free(__legend);
690 if (__string) free(__string);
693 __def_name = strdup(g.__def_name);
695 __color = strdup(g.__color);
696 __legend = strdup(g.__legend);
697 __stacked = g.__stacked;
707 if (asprintf(&__string,
"LINE%f:%s#%s:%s%s", __width, __def_name, __color,
708 __legend, __stacked ?
":STACK" :
"") == -1) {
729 const char *legend,
bool stacked)
730 : __def_name(strdup(def_name)), __color(strdup(color)),
731 __legend(strdup(legend)), __stacked(stacked), __string(NULL)
740 : __def_name(strdup(other.__def_name)), __color(strdup(other.__color)),
741 __legend(strdup(other.__legend)), __stacked(other.__stacked), __string(NULL)
749 if (__def_name) free(__def_name);
750 if (__color) free(__color);
751 if (__legend) free(__legend);
752 if (__string) free(__string);
763 if (__def_name) free(__def_name);
764 if (__color) free(__color);
765 if (__legend) free(__legend);
766 if (__string) free(__string);
769 __def_name = strdup(g.__def_name);
770 __color = strdup(g.__color);
771 __legend = strdup(g.__legend);
772 __stacked = g.__stacked;
782 if (asprintf(&__string,
"AREA:%s#%s:%s%s", __def_name, __color, __legend,
783 __stacked ?
":STACK" :
"") == -1) {
819 const char *vertical_label,
820 std::vector<RRDGraphDataDefinition> &def,
821 std::vector<RRDGraphElement *> &elements,
822 time_t start, time_t end,
unsigned int step,
823 unsigned int update_interval,
825 : __name(strdup(name)), __rrd_def(rrd_def),
826 __start(start), __end(end), __step(step),
827 __title(strdup(title)), __vertical_label(strdup(vertical_label)),
828 __update_interval(update_interval), __slope_mode(slope_mode),
829 __defs(def), __elements(elements)
834 __fonts.push_back(
"LEGEND:10:");
835 __fonts.push_back(
"UNIT:8:");
836 __fonts.push_back(
"TITLE:12:");
837 __fonts.push_back(
"AXIS:8:");
849 : __name(strdup(other.__name)), __rrd_def(other.__rrd_def),
850 __start(other.__start), __end(other.__end), __step(other.__step),
851 __title(strdup(other.__title)),
852 __vertical_label(strdup(other.__vertical_label)),
853 __update_interval(other.__update_interval),
854 __slope_mode(other.__slope_mode), __defs(other.__defs),
855 __width(other.__width), __fonts(other.__fonts),
856 __filename(strdup(other.__filename))
858 std::vector<RRDGraphElement *>::const_iterator i;
859 for (i = other.__elements.begin(); i != other.__elements.end(); ++i) {
860 __elements.push_back((*i)->clone());
875 if (__filename) free(__filename);
876 if (__argv) free(__argv);
877 if (__name) free(__name);
878 if (__title) free(__title);
879 if (__vertical_label) free(__vertical_label);
886 std::vector<RRDGraphElement *>::iterator i;
887 for (i = __elements.begin(); i != __elements.end(); ++i) {
902 throw Exception(
"Graph definition for RRD %s: filename has already been set!",
905 __filename = strdup(filename);
916 if (__argv == NULL) {
919 __argc = 16 + __fonts.size() * 2 + __defs.size() + __elements.size();
920 __argv = (
const char **)malloc(__argc *
sizeof(
char *));
922 __argv[i++] =
"graph";
923 __argv[i++] = __filename;
924 __argv[i++] =
"--disable-rrdtool-tag";
925 __argv[i++] =
"--width";
926 __argv[i++] = __width_s;
927 __argv[i++] =
"--start";
928 __argv[i++] = __start_s;
929 __argv[i++] =
"--end";
930 __argv[i++] = __end_s;
931 __argv[i++] =
"--step";
932 __argv[i++] = __step_s;
933 __argv[i++] =
"--title";
934 __argv[i++] = __title;
935 __argv[i++] =
"--vertical-label";
937 if (strcmp(__vertical_label,
"") == 0) {
940 __argv[i++] = __vertical_label;
943 if (__slope_mode) __argv[i++] =
"--slope-mode";
945 std::vector<const char *>::const_iterator f;
946 for (f = __fonts.begin(); f != __fonts.end(); ++f) {
947 __argv[i++] =
"--font";
951 std::vector<RRDGraphDataDefinition>::const_iterator d;
952 for (d = __defs.begin(); d != __defs.end(); ++d) {
953 __argv[i++] = d->to_string();
956 std::vector<RRDGraphElement *>::const_iterator e;
957 for (e = __elements.begin(); e != __elements.end(); ++e) {
958 __argv[i++] = (*e)->to_string();
static const float UNKNOWN
Use for unknown min or max values.
RRDGraphDefinition(const char *name, RRDDefinition *rrd_def, const char *title, const char *vertical_label, std::vector< RRDGraphDataDefinition > &def, std::vector< RRDGraphElement *> &elements, time_t start=-600, time_t end=-10, unsigned int step=10, unsigned int update_interval=10, bool slope_mode=false)
Constructor.
virtual const char * to_string() const
Create string representation.
virtual const char * to_string() const
Create string representation.
Interface for a RRD connection creator.
RRDGraphLine & operator=(const RRDGraphLine &g)
Assignment operator.
Fawkes library namespace.
const char * to_string() const
Get string reprensetation.
Called method has not been implemented.
const char * to_string() const
Get string representation.
Maximum consolidation function.
RRDDataSource(const char *name, Type type, unsigned int heartbeat=30, float min=0, float max=UNKNOWN)
Constructor for regular data source.
RRDGraphArea & operator=(const RRDGraphArea &g)
Assignment operator.
void set_filename(const char *filename)
Set filename.
const std::vector< RRDDataSource > & get_ds() const
Get data sources.
static const char * cf_to_string(ConsolidationFunction cf)
Convert consolidation function type to string.
~RRDGraphDefinition()
Destructor.
RRDGraphGPrint(const char *def_name, RRDArchive::ConsolidationFunction cf, const char *format)
Constructor.
RRDGraphArea(const char *def_name, const char *color, const char *legend, bool stacked=false)
Constructor.
ConsolidationFunction
Consolidation function type.
Represent data definition in graph arguments.
~RRDGraphDataDefinition()
Destructor.
Base class for exceptions in Fawkes.
~RRDDefinition()
Destructor.
Class representing a graph definition.
void set_filename(const char *filename)
Set filename.
RRDDataSource & operator=(const RRDDataSource &other)
Assignment operator.
Class to represent a RRD data source.
virtual const char * to_string() const
Create string representation.
const char * to_string() const
Create string representation.
RRDGraphDataDefinition(const char *name, RRDArchive::ConsolidationFunction cf, const RRDDefinition *rrd_def, const char *ds_name=NULL)
DEF constructor.
RRDDefinition(const char *name, std::vector< RRDDataSource > &ds, unsigned int step_sec=10, bool recreate=false)
Constructor with default RRAs.
virtual ~RRDGraphLine()
Destructor.
virtual void remove_rrd(RRDDefinition *rrd_def)=0
Remove RRD.
RRDArchive & operator=(const RRDArchive &rra)
Assignment operator.
const char ** get_argv(size_t &argc) const
Get argument array and size.
virtual const char * to_string() const
Create string representation.
size_t find_ds_index(const char *ds_name) const
Find data source index.
const char * get_name() const
Get name.
const char * get_filename() const
Get file name.
RRDArchive(ConsolidationFunction cf, float xff, unsigned int steps, unsigned int rows)
Constructor.
Print string inside graph.
~RRDDataSource()
Destructor.
RRDGraphGPrint & operator=(const RRDGraphGPrint &g)
Assignment operator.
RRDDefinition & operator=(const RRDDefinition &other)
Assignment operator.
Expected parameter is missing.
virtual ~RRDGraphArea()
Destructor.
Last value consolidation function.
Minimum consolidation function.
RRDGraphLine(const char *def_name, float width, const char *color, const char *legend, bool stacked=false)
Constructor.
static std::string to_string(unsigned int i)
Convert unsigned int value to a string.
static const std::vector< RRDArchive > get_default_rra()
Get default RRAs.
System ran out of memory and desired operation could not be fulfilled.
RRDGraphDataDefinition & operator=(const RRDGraphDataDefinition &rra)
Assignment operator.
void set_rrd_manager(RRDManager *rrd_manager)
Set RRD manager.
Averaging consolidation function.
virtual ~RRDGraphGPrint()
Destructor.