// Latency
#define COLOR_LATENCY COLOR_LIGHT_BLUE
+#define COLOR_LOSS_0 COLOR_TRANSPARENT
+#define COLOR_LOSS_5 COLOR_WITH_ALPHA(COLOR_LIMIT, COLOR_OPACITY_20P)
+#define COLOR_LOSS_10 COLOR_WITH_ALPHA(COLOR_LIMIT, COLOR_OPACITY_40P)
+#define COLOR_LOSS_25 COLOR_WITH_ALPHA(COLOR_LIMIT, COLOR_OPACITY_60P)
+#define COLOR_LOSS_50 COLOR_WITH_ALPHA(COLOR_LIMIT, COLOR_OPACITY_80P)
// Temperature
#define COLOR_TEMPERATURE COLOR_RED
#define COLOR_WITH_ALPHA(base, alpha) base alpha
#define COLOR_OPACITY_100P "ff"
+#define COLOR_OPACITY_80P "cc"
#define COLOR_OPACITY_75P "c0"
+#define COLOR_OPACITY_60P "66"
#define COLOR_OPACITY_50P "80"
+#define COLOR_OPACITY_40P "66"
#define COLOR_OPACITY_25P "40"
+#define COLOR_OPACITY_20P "33"
#define COLOR_OPACITY_0P "00"
// Fill areas very lightly
// Handles for fields
#define FIELD_SPACER(field) field "_spacer"
+#define FIELD_BACKGROUND(field) field "_background"
#define FIELD_CURRENT(field) field "_cur"
#define FIELD_AVERAGE(field) field "_avg"
#define FIELD_MINIMUM(field) field "_min"
); \
} while (0)
+#define COMPUTE_BACKGROUND(args, background, field, object) \
+ do { \
+ COMPUTE_CDEF(args, FIELD "=" FIELD ",UN,UNKN,INF,IF", \
+ FIELD_AND_OBJECT(background, object), \
+ FIELD_AND_OBJECT(field, object) \
+ ); \
+ } while (0)
+
#define COMPUTE_BYTES_FROM_SECTORS(args, field, object) \
do { \
COMPUTE_CDEF(args, FIELD "=" FIELD ",512,*", \
DRAW_AREA_BACKGROUND(args, FIELD_STDDEV2(stddev), object, color, STACKED); \
} while (0)
+/*
+ Fills the background with the given color if there is any value
+*/
+#define DRAW_BACKGROUND_WITH_LABEL(args, field, object, color, ...) \
+ do { \
+ COMPUTE_BACKGROUND(args, FIELD_BACKGROUND(field), field, object); \
+ DRAW_WITH_LABEL(args, "AREA", FIELD_BACKGROUND(field), object, color, 0, ##__VA_ARGS__); \
+ } while (0)
+
/*
This draws an I/O graph
*/
if (r < 0)
return r;
+ // Compute packet losses
+ COMPUTE_LIMIT(args, "loss0", "loss", NULL, 0L, 5L);
+ COMPUTE_LIMIT(args, "loss5", "loss", NULL, 5L, 10L);
+ COMPUTE_LIMIT(args, "loss10", "loss", NULL, 10L, 25L);
+ COMPUTE_LIMIT(args, "loss25", "loss", NULL, 25L, 50L);
+ COMPUTE_LIMIT(args, "loss50", "loss", NULL, 50L, 100L);
+
+ // Fill the background if the loss is within the range
+ DRAW_BACKGROUND_WITH_LABEL(args, "loss0", NULL, COLOR_LOSS_0, "%s", _("Packet Loss > 0%"));
+ PRINT_EOL(args);
+
+ DRAW_BACKGROUND_WITH_LABEL(args, "loss5", NULL, COLOR_LOSS_5, "%s", _("Packet Loss > 5%"));
+ PRINT_EOL(args);
+
+ DRAW_BACKGROUND_WITH_LABEL(args, "loss10", NULL, COLOR_LOSS_10, "%s", _("Packet Loss > 10%"));
+ PRINT_EOL(args);
+
+ DRAW_BACKGROUND_WITH_LABEL(args, "loss25", NULL, COLOR_LOSS_25, "%s", _("Packet Loss > 25%"));
+ PRINT_EOL(args);
+
+ DRAW_BACKGROUND_WITH_LABEL(args, "loss50", NULL, COLOR_LOSS_50, "%s", _("Packet Loss > 50%"));
+ PRINT_EOL(args);
+
PRINT_EMPTY_LINE(args);
// Draw a horizontal line of the average
avg = MSEC_TO_SEC(avg);
mdev = MSEC_TO_SEC(mdev);
- // Convert the loss
- loss /= 100.0;
-
// Submit values
return td_source_submit_values(source, NULL, VALUES(
VALUE_FLOAT("latency", &avg),