aboutsummaryrefslogtreecommitdiff
path: root/iowatcher/plot.h
diff options
context:
space:
mode:
Diffstat (limited to 'iowatcher/plot.h')
-rw-r--r--iowatcher/plot.h180
1 files changed, 180 insertions, 0 deletions
diff --git a/iowatcher/plot.h b/iowatcher/plot.h
new file mode 100644
index 0000000..d65bbcf
--- /dev/null
+++ b/iowatcher/plot.h
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2012 Fusion-io
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License v2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+#ifndef __IOWATCH_PLOT__
+#define __IOWATCH_PLOT__
+#define MAX_TICKS 10
+
+#include "list.h"
+
+typedef __u64 u64;
+typedef __u32 u32;
+typedef __u16 u16;
+
+
+/* values for the plot direction field */
+#define PLOT_DOWN 0
+#define PLOT_ACROSS 1
+
+struct plot {
+ int fd;
+
+ /* svg style y = 0 is the top of the graph */
+ int start_y_offset;
+
+ /* abs coords of the start of X start of the plot */
+ int start_x_offset;
+
+ int add_xlabel;
+ int no_legend;
+
+ /*
+ * these two are for anyone that wants
+ * to add a plot after this one, it tells
+ * them how much space we took up
+ */
+ int total_height;
+ int total_width;
+ char **legend_lines;
+ int legend_index;
+ int num_legend_lines;
+ int direction;
+
+ /*
+ * timeline is a vertical line through line graphs that
+ * is used by the movie mode to show where in the graph
+ * our current frame lives
+ */
+ int timeline;
+};
+
+struct graph_line_pair {
+ u64 count;
+ u64 sum;
+};
+
+struct graph_line_data {
+ /* beginning of an interval displayed by this graph */
+ unsigned int min_seconds;
+
+ /* end of an interval displayed by this graph */
+ unsigned int max_seconds;
+
+ unsigned int stop_seconds;
+
+ /* Y max */
+ u64 max;
+
+ /* label for this graph */
+ char *label;
+ struct graph_line_pair data[];
+};
+
+struct graph_dot_data {
+ u64 min_offset;
+ u64 max_offset;
+ u64 max_bank;
+ u64 max_bank_offset;
+ u64 total_ios;
+ u64 total_bank_ios;
+
+ int add_bank_ios;
+
+ /* in pixels, number of rows in our bitmap */
+ int rows;
+ /* in pixels, number of cols in our bitmap */
+ int cols;
+
+ /* beginning of an interval displayed by this graph */
+ int min_seconds;
+
+ /* end of an interval displayed by this graph */
+ unsigned int max_seconds;
+ unsigned int stop_seconds;
+
+ /* label for the legend */
+ char *label;
+
+ /* color for plotting data */
+ char *color;
+
+ /* bitmap, one bit for each cell to light up */
+ unsigned char data[];
+};
+
+struct pid_plot_history {
+ double history_max;
+ int history_len;
+ int num_used;
+ char *color;
+ double *history;
+};
+
+struct plot_history {
+ struct list_head list;
+ int pid_history_count;
+ int col;
+ struct pid_plot_history **read_pid_history;
+ struct pid_plot_history **write_pid_history;
+};
+
+char *pick_color(void);
+char *pick_fio_color(void);
+char *pick_cpu_color(void);
+void reset_cpu_color(void);
+int svg_io_graph(struct plot *plot, struct graph_dot_data *gdd);
+double line_graph_roll_avg_max(struct graph_line_data *gld);
+int svg_line_graph(struct plot *plot, struct graph_line_data *gld, char *color, int thresh1, int thresh2);
+struct graph_line_data *alloc_line_data(unsigned int min_seconds, unsigned int max_seconds, unsigned int stop_seconds);
+struct graph_dot_data *alloc_dot_data(unsigned int min_seconds, unsigned int max_seconds, u64 min_offset, u64 max_offset, unsigned int stop_seconds, char *color, char *label);
+void set_gdd_bit(struct graph_dot_data *gdd, u64 offset, double bytes, double time);
+void write_svg_header(int fd);
+struct plot *alloc_plot(void);
+int close_plot(struct plot *plot);
+int close_plot_no_height(struct plot *plot);
+void setup_axis(struct plot *plot);
+void set_xticks(struct plot *plot, int num_ticks, int first, int last);
+void set_yticks(struct plot *plot, int num_ticks, int first, int last, char *units);
+void set_plot_title(struct plot *plot, char *title);
+void set_plot_label(struct plot *plot, char *label);
+void set_xlabel(struct plot *plot, char *label);
+void set_ylabel(struct plot *plot, char *label);
+void scale_line_graph_bytes(u64 *max, char **units, u64 factor);
+void scale_line_graph_time(u64 *max, char **units);
+void write_drop_shadow_line(struct plot *plot);
+void svg_write_legend(struct plot *plot);
+void svg_add_legend(struct plot *plot, char *text, char *extra, char *color);
+void svg_alloc_legend(struct plot *plot, int num_lines);
+void set_legend_width(int longest_str);
+void set_rolling_avg(int rolling);
+void svg_free_legend(struct plot *plot);
+void set_io_graph_scale(int scale);
+void set_plot_output(struct plot *plot, char *filename);
+void set_graph_size(int width, int height);
+void get_graph_size(int *width, int *height);
+int svg_io_graph_movie(struct graph_dot_data *gdd, struct pid_plot_history *ph, int col);
+int svg_io_graph_movie_array(struct plot *plot, struct pid_plot_history *ph);
+void svg_write_time_line(struct plot *plot, int col);
+void set_graph_height(int h);
+void set_graph_width(int w);
+int close_plot_file(struct plot *plot);
+int svg_io_graph_movie_array_spindle(struct plot *plot, struct pid_plot_history *ph);
+void rewind_spindle_steps(int num);
+void setup_axis_spindle(struct plot *plot);
+int close_plot_col(struct plot *plot);
+
+#endif