diff options
Diffstat (limited to 'js/RrdJson.js')
-rw-r--r-- | js/RrdJson.js | 588 |
1 files changed, 588 insertions, 0 deletions
diff --git a/js/RrdJson.js b/js/RrdJson.js new file mode 100644 index 0000000..85b7f11 --- /dev/null +++ b/js/RrdJson.js | |||
@@ -0,0 +1,588 @@ | |||
1 | /** | ||
2 | * | ||
3 | * This program is free software; you can redistribute it and/or modify it | ||
4 | * under the terms of the GNU General Public License as published by the Free | ||
5 | * Software Foundation; either version 2 of the License, or (at your option) | ||
6 | * any later version. | ||
7 | * | ||
8 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
11 | * more details. | ||
12 | |||
13 | * You should have received a copy of the GNU General Public License along | ||
14 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
15 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | ||
16 | |||
17 | * | ||
18 | * Manuel Sanmartin <manuel.luis at gmail.com> | ||
19 | **/ | ||
20 | |||
21 | "use strict"; | ||
22 | |||
23 | /** | ||
24 | * RrdJson | ||
25 | * @constructor | ||
26 | */ | ||
27 | var RrdJson = function() { | ||
28 | if (arguments.length == 1) { | ||
29 | this.init1.apply(this, arguments); | ||
30 | } else if (arguments.length == 2) { | ||
31 | this.init2.apply(this, arguments); | ||
32 | } else if (arguments.length == 3) { | ||
33 | this.init3.apply(this, arguments); | ||
34 | } | ||
35 | }; | ||
36 | |||
37 | RrdJson.prototype = { | ||
38 | graph: null, | ||
39 | json: null, | ||
40 | |||
41 | init1: function (rrdgraph) | ||
42 | { | ||
43 | this.graph = rrdgraph | ||
44 | }, | ||
45 | init2: function (rrdgraph, jsonstr) | ||
46 | { | ||
47 | this.json = JSON.parse(jsonstr); | ||
48 | this.graph = rrdgraph | ||
49 | }, | ||
50 | init3: function (gfx, fetch, jsonstr) | ||
51 | { | ||
52 | this.json = JSON.parse(jsonstr); | ||
53 | this.graph = new RrdGraph(gfx, fetch); | ||
54 | }, | ||
55 | parse: function() | ||
56 | { | ||
57 | for (var option in this.json) { | ||
58 | switch(option) { | ||
59 | case 'alt_autoscale': | ||
60 | this.graph.alt_autoscale = this.json.alt_autoscale; | ||
61 | break; | ||
62 | case 'base': | ||
63 | this.graph.base = parseInt(this.json.base, 10); | ||
64 | if (this.graph.base !== 1000 && this.graph.base !== 1024) | ||
65 | throw 'the only sensible value for base apart from 1000 is 1024'; | ||
66 | break; | ||
67 | case 'color': | ||
68 | for (var color in this.json.color) { | ||
69 | if (color in this.graph.GRC) { | ||
70 | this.graph.GRC[color] = this.json.color[color]; | ||
71 | } else { | ||
72 | throw "invalid color name '"+name+"'"; | ||
73 | } | ||
74 | } | ||
75 | break; | ||
76 | case 'full_size_mode': | ||
77 | this.graph.full_size_mode = this.json.full_size_mode; | ||
78 | break; | ||
79 | case 'slope_mode': | ||
80 | this.graph.slopemode = this.json.slope_mode; | ||
81 | break; | ||
82 | case 'end': | ||
83 | this.graph.end_t = new RrdTime(this.json.end); | ||
84 | break; | ||
85 | case 'force_rules_legend': | ||
86 | this.graph.force_rules_legend = this.json.force_rules_legend; | ||
87 | break; | ||
88 | case 'no_legend': | ||
89 | this.graph.no_legend = this.json.no_legend; | ||
90 | break; | ||
91 | case 'height': | ||
92 | this.graph.ysize = this.json.height; | ||
93 | break; | ||
94 | case 'no_minor': | ||
95 | this.graph.no_minor = this.json.no_minor; | ||
96 | break; | ||
97 | case 'alt_autoscale_min': | ||
98 | this.graph.alt_autoscale_min = this.json.alt_autoscale_min; | ||
99 | break; | ||
100 | case 'only_graph': | ||
101 | this.graph.only_graph = this.json.only_graph; | ||
102 | break; | ||
103 | case 'units_length': | ||
104 | this.graph.unitslength = this.json.units_length; // FIXME | ||
105 | this.graph.forceleftspace = true; | ||
106 | break; | ||
107 | case 'lower_limit': | ||
108 | if (this.json.lower_limit === null) this.graph.setminval = Number.NaN; | ||
109 | else this.graph.setminval = this.json.lower_limit; | ||
110 | break; | ||
111 | case 'alt_autoscale_max': | ||
112 | this.graph.alt_autoscale_max = this.json.alt_autoscale_max; | ||
113 | break; | ||
114 | case 'zoom': | ||
115 | this.graph.zoom = this.json.zoom; | ||
116 | if (this.graph.zoom <= 0.0) | ||
117 | throw "zoom factor must be > 0"; | ||
118 | break; | ||
119 | case 'no_gridfit': | ||
120 | this.graph.gridfit = this.json.no_gridfit; | ||
121 | break; | ||
122 | case 'font': | ||
123 | for (var font in this.json.font) { | ||
124 | if (font in this.graph.TEXT) { | ||
125 | if (this.json.font[font].size !== undefined) | ||
126 | this.graph.TEXT[font].size = this.json.font[font].size; | ||
127 | if (this.json.font[font].font !== undefined) | ||
128 | this.graph.TEXT[font].font = this.json.font[font].font; | ||
129 | } else { | ||
130 | throw "invalid text property name"; | ||
131 | } | ||
132 | } | ||
133 | break; | ||
134 | case 'logarithmic': | ||
135 | this.graph.logarithmic = this.json.logarithmic; | ||
136 | break; | ||
137 | case 'rigid': | ||
138 | this.graph.rigid = this.json.rigid; | ||
139 | break; | ||
140 | case 'step': | ||
141 | this.graph.step = this.json.step; | ||
142 | break; | ||
143 | case 'start': | ||
144 | this.graph.start_t = new RrdTime(this.json.start); | ||
145 | break; | ||
146 | case 'tabwidth': | ||
147 | this.graph.tabwidth = this.json.tabwidth; | ||
148 | break; | ||
149 | case 'title': | ||
150 | this.graph.title = this.json.title; | ||
151 | break; | ||
152 | case 'upper_limit': | ||
153 | if (this.json.upper_limit === null) this.graph.setmaxval = Number.NaN; | ||
154 | else this.graph.setmaxval = this.json.upper_limit; | ||
155 | break; | ||
156 | case 'vertical_label': | ||
157 | this.graph.ylegend = this.json.vertical_label; | ||
158 | break; | ||
159 | case 'watermark': | ||
160 | this.graph.watermark = this.json.watermark; | ||
161 | break; | ||
162 | case 'width': | ||
163 | this.graph.xsize = this.json.width; | ||
164 | if (this.graph.xsize < 10) | ||
165 | throw "width below 10 pixels"; | ||
166 | break; | ||
167 | case 'units_exponent': | ||
168 | this.graph.unitsexponent = this.json.units_exponent; | ||
169 | break; | ||
170 | case 'x_grid': | ||
171 | break; | ||
172 | case 'alt_ygrid': | ||
173 | this.graph.alt_ygrid = this.json.alt_ygrid; | ||
174 | break; | ||
175 | case 'y_grid': | ||
176 | break; | ||
177 | case 'lazy': | ||
178 | this.graph.lazy = this.json.lazy; | ||
179 | break; | ||
180 | case 'units': | ||
181 | break; | ||
182 | case 'disable_rrdtool_tag': | ||
183 | this.graph.no_rrdtool_tag = this.json.disable_rrdtool_tag; | ||
184 | break; | ||
185 | case 'right_axis': | ||
186 | break; | ||
187 | case 'right_axis_label': | ||
188 | this.graph.second_axis_legend = this.json.right_axis_label; | ||
189 | break; | ||
190 | case 'right_axis_format': | ||
191 | this.graph.second_axis_format = this.json.right_axis_format; | ||
192 | break; | ||
193 | case 'legend_position': | ||
194 | if (this.json.legend_position === "north") { | ||
195 | this.graph.legendposition = this.graph.LEGEND_POS.NORTH; | ||
196 | } else if (this.json.legend_position === "west") { | ||
197 | this.graph.legendposition = this.graph.LEGEND_POS.WEST; | ||
198 | } else if (this.json.legend_position === "south") { | ||
199 | this.graph.legendposition = this.graph.LEGEND_POS.SOUTH; | ||
200 | } else if (this.json.legend_position === "east") { | ||
201 | this.graph.legendposition = this.graph.LEGEND_POS.EAST; | ||
202 | } else { | ||
203 | throw "unknown legend-position '"+value+"'"; | ||
204 | } | ||
205 | break; | ||
206 | case 'legend_direction': | ||
207 | if (this.json.legend_direction === "topdown") { | ||
208 | this.graph.legenddirection = this.graph.LEGEND_DIR.TOP_DOWN; | ||
209 | } else if (this.json.legend_direction === "bottomup") { | ||
210 | this.graph.legenddirection = this.graph.LEGEND_DIR.BOTTOM_UP; | ||
211 | } else { | ||
212 | throw "unknown legend-position '"+value+"'"; | ||
213 | } | ||
214 | break; | ||
215 | case 'border': | ||
216 | this.graph.draw_3d_border = this.json.border; | ||
217 | break; | ||
218 | case 'grid_dash': | ||
219 | if (this.json.grid_dash.length !== 2) | ||
220 | throw "expected grid-dash format float:float"; | ||
221 | this.graph.grid_dash_on = this.json.grid_dash[0]; | ||
222 | this.graph.grid_dash_off = this.json.grid_dash[1]; | ||
223 | break; | ||
224 | case 'dynamic_labels': | ||
225 | this.graph.dynamic_labels = this.json.dynamic_labels; | ||
226 | break; | ||
227 | case 'gdes': | ||
228 | this.parse_gdes(this.json.gdes); | ||
229 | break; | ||
230 | default: | ||
231 | throw 'Unknow option "'+option+'"'; | ||
232 | } | ||
233 | } | ||
234 | var start_end = RrdTime.proc_start_end(this.graph.start_t, this.graph.end_t); // FIXME here? | ||
235 | this.graph.start = start_end[0]; | ||
236 | this.graph.end = start_end[1]; | ||
237 | }, | ||
238 | parse_gdes: function (gdes) | ||
239 | { | ||
240 | for (var i = 0, gdes_c = gdes.length; i < gdes_c; i++) { | ||
241 | switch (gdes[i].type) { | ||
242 | // GPRINT:vname:format | ||
243 | case 'GPRINT': | ||
244 | this.graph.gdes_add_gprint(gdes[i].vname, gdes[i].cf, gdes[i].format, gdes[i].strftm); | ||
245 | break; | ||
246 | // LINE[width]:value[#color][:[legend][:STACK]][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]] | ||
247 | case 'LINE': | ||
248 | this.graph.gdes_add_line(gdes[i].width, gdes[i].value, gdes[i].color, gdes[i].legend, gdes[i].stack); | ||
249 | break; | ||
250 | // AREA:value[#color][:[legend][:STACK]] | ||
251 | case 'AREA': | ||
252 | this.graph.gdes_add_area(gdes[i].value, gdes[i].color, gdes[i].legend, gdes[i].stack); | ||
253 | break; | ||
254 | // TICK:vname#rrggbb[aa][:fraction[:legend]] | ||
255 | case 'TICK': | ||
256 | this.graph.gdes_add_tick(gdes[i].vname, gdes[i].color, gdes[i].fraction, gdes[i].legend); | ||
257 | break; | ||
258 | // HRULE:value#color[:legend][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]] | ||
259 | case 'HRULE': | ||
260 | this.graph.gdes_add_hrule(gdes[i].value, gdes[i].color, gdes[i].legend); | ||
261 | break; | ||
262 | // VRULE:time#color[:legend][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]] | ||
263 | case 'VRULE': | ||
264 | this.graph.gdes_add_vrule(gdes[i].time, gdes[i].color, gdes[i].legend); | ||
265 | break; | ||
266 | // COMMENT:text | ||
267 | case 'COMMENT': | ||
268 | this.graph.gdes_add_comment(gdes[i].legend); | ||
269 | break; | ||
270 | // TEXTALIGN:{left|right|justified|center} | ||
271 | case 'TEXTALIGN': | ||
272 | switch (gdes[i].align) { | ||
273 | case 'left': | ||
274 | this.graph.gdes_add_textaling(RrdGraphDesc.TXA_LEFT); | ||
275 | break | ||
276 | case 'right': | ||
277 | this.graph.gdes_add_textaling(RrdGraphDesc.TXA_RIGHT); | ||
278 | break | ||
279 | case 'justified': | ||
280 | this.graph.gdes_add_textaling(RrdGraphDesc.TXA_JUSTIFIED); | ||
281 | break | ||
282 | case 'center': | ||
283 | this.graph.gdes_add_textaling(RrdGraphDesc.TXA_CENTER); | ||
284 | break | ||
285 | } | ||
286 | break; | ||
287 | // DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>] | ||
288 | case 'DEF': | ||
289 | this.graph.gdes_add_def(gdes[i].vname, gdes[i].rrdfile, gdes[i].name, gdes[i].cf, gdes[i].step, gdes[i].start, gdes[i].end, gdes[i].reduce) | ||
290 | break; | ||
291 | // CDEF:vname=RPN expression | ||
292 | case 'CDEF': | ||
293 | this.graph.gdes_add_cdef(gdes[i].vname, gdes[i].rpn); | ||
294 | break; | ||
295 | // VDEF:vname=RPN expression | ||
296 | case 'VDEF': | ||
297 | this.graph.gdes_add_vdef(gdes[i].vname, gdes[i].rpn); | ||
298 | break; | ||
299 | // SHIFT:vname:offset | ||
300 | case 'SHIFT': | ||
301 | this.graph.gdes_add_shift(gdes[i].vname, gdes[i].offset); | ||
302 | break; | ||
303 | } | ||
304 | } | ||
305 | }, | ||
306 | dump: function(full) | ||
307 | { | ||
308 | this.json = {}; | ||
309 | |||
310 | if (full === undefined) full = false; | ||
311 | |||
312 | if (this.graph.alt_autoscale != false || full) | ||
313 | this.json.alt_autoscale = this.graph.alt_autoscale; | ||
314 | |||
315 | if (this.graph.base != 1000 || full) | ||
316 | this.json.base = this.graph.base; | ||
317 | |||
318 | this.json.color = {}; | ||
319 | |||
320 | if (this.graph.GRC.CANVAS != 'rgba(255, 255, 255, 1.0)' || full) | ||
321 | this.json.color.CANVAS = this.graph.GRC.CANVAS; | ||
322 | if (this.graph.GRC.BACK != 'rgba(242,242, 242, 1.0)' || full) | ||
323 | this.json.color.BACK = this.graph.GRC.BACK; | ||
324 | if (this.graph.GRC.SHADEA != 'rgba(207, 207, 207, 1.0)' || full) | ||
325 | this.json.color.SHADEA = this.graph.GRC.SHADEA; | ||
326 | if (this.graph.GRC.SHADEB != 'rgba(158, 158, 158, 1.0)' || full) | ||
327 | this.json.color.SHADEB = this.graph.GRC.SHADEB; | ||
328 | if (this.graph.GRC.GRID != 'rgba(143, 143, 143, 0.75)' || full) | ||
329 | this.json.color.GRID = this.graph.GRC.GRID; | ||
330 | if (this.graph.GRC.MGRID != 'rgba(222, 79, 79, 0.60)' || full) | ||
331 | this.json.color.MGRID = this.graph.GRC.MGRID; | ||
332 | if (this.graph.GRC.FONT != 'rgba(0, 0, 0, 1.0)' || full) | ||
333 | this.json.color.FONT = this.graph.GRC.FONT; | ||
334 | if (this.graph.GRC.ARROW != 'rgba(127, 31, 31, 1.0)' || full) | ||
335 | this.json.color.ARROW = this.graph.GRC.ARROW; | ||
336 | if (this.graph.GRC.AXIS != 'rgba(31, 31, 31, 1.0)' || full) | ||
337 | this.json.color.AXIS = this.graph.GRC.AXIS; | ||
338 | if (this.graph.GRC.FRAME != 'rgba(0, 0, 0, 1.0)' || full) | ||
339 | this.json.color.FRAME = this.graph.GRC.FRAME; | ||
340 | |||
341 | if (Object.keys(this.json.color) == 0) delete this.json.color; | ||
342 | |||
343 | if (this.graph.full_size_mode != false || full) | ||
344 | this.json.full_size_mode = this.graph.full_size_mode; | ||
345 | |||
346 | if (this.graph.slopemode != false || full) | ||
347 | this.json.slope_mode = this.graph.slopemode; | ||
348 | |||
349 | this.json.end = this.graph.end_t.tspec; | ||
350 | this.json.start = this.graph.start_t.tspec; | ||
351 | |||
352 | if (this.graph.force_rules_legend != false || full) | ||
353 | this.json.force_rules_legend = this.graph.force_rules_legend; | ||
354 | |||
355 | if (this.graph.no_legend != false || full) | ||
356 | this.json.no_legend = this.graph.no_legend; | ||
357 | |||
358 | this.json.width = this.graph.xsize; | ||
359 | this.json.height = this.graph.ysize; | ||
360 | |||
361 | if (this.graph.no_minor != false || full) | ||
362 | this.json.no_minor = this.graph.no_minor; | ||
363 | |||
364 | if (this.graph.alt_autoscale_min != false || full) | ||
365 | this.json.alt_autoscale_min = this.graph.alt_autoscale_min; | ||
366 | |||
367 | if (this.graph.only_graph != false || full) | ||
368 | this.json.only_graph = this.graph.only_graph; | ||
369 | |||
370 | if (this.graph.unitslength != 6 || full) | ||
371 | this.json.units_length = this.graph.unitslength; | ||
372 | |||
373 | if (!isNaN(this.graph.setminval) || full) | ||
374 | this.json.lower_limit = this.graph.setminval; | ||
375 | |||
376 | if (this.graph.alt_autoscale_max != false || full) | ||
377 | this.json.alt_autoscale_max = this.graph.alt_autoscale_max; | ||
378 | |||
379 | if (this.graph.zoom != 1 || full) | ||
380 | this.json.zoom = this.graph.zoom; | ||
381 | |||
382 | if (this.graph.gridfit != true || full) | ||
383 | this.json.no_gridfit = this.graph.gridfit; | ||
384 | |||
385 | this.json.font = {}; | ||
386 | if (this.graph.TEXT.DEFAULT.size != 11 || this.graph.TEXT.LEGEND.font != this.graph.DEFAULT_FONT || full) | ||
387 | this.json.font.DEFAULT = { size: this.graph.TEXT.DEFAULT.size, font: this.graph.TEXT.DEFAULT.font}; | ||
388 | if (this.graph.TEXT.TITLE.size != 12 || this.graph.TEXT.TITLE.font != this.graph.DEFAULT_FONT || full) | ||
389 | this.json.font.TITLE = { size: this.graph.TEXT.TITLE.size, font: this.graph.TEXT.TITLE.font}; | ||
390 | if (this.graph.TEXT.AXIS.size != 10 || this.graph.TEXT.AXIS.font != this.graph.DEFAULT_FONT || full) | ||
391 | this.json.font.AXIS = { size: this.graph.TEXT.AXIS.size, font: this.graph.TEXT.AXIS.font}; | ||
392 | if (this.graph.TEXT.UNIT.size != 11 || this.graph.TEXT.UNIT.font != this.graph.DEFAULT_FONT || full) | ||
393 | this.json.font.UNIT = { size: this.graph.TEXT.UNIT.size, font: this.graph.TEXT.UNIT.font}; | ||
394 | if (this.graph.TEXT.LEGEND.size != 11 || this.graph.TEXT.LEGEND.font != this.graph.DEFAULT_FONT || full) | ||
395 | this.json.font.LEGEND = { size: this.graph.TEXT.LEGEND.size, font: this.graph.TEXT.LEGEND.font}; | ||
396 | if (this.graph.TEXT.WATERMARK.size != 8 || this.graph.TEXT.WATERMARK.font != this.graph.DEFAULT_FONT || full) | ||
397 | this.json.font.WATERMARK = { size: this.graph.TEXT.WATERMARK.size, font: this.graph.TEXT.WATERMARK.font}; | ||
398 | |||
399 | if (Object.keys(this.json.font) == 0) delete this.json.font; | ||
400 | |||
401 | if (this.graph.logarithmic != false || full) | ||
402 | this.json.logarithmic = this.graph.logarithmic; | ||
403 | |||
404 | if (this.graph.rigid != false || full) | ||
405 | this.json.rigid = this.graph.rigid; | ||
406 | |||
407 | // this.json.step = this.graph.step; // FIXME | ||
408 | |||
409 | if (this.graph.tabwidth != 40 || full) | ||
410 | this.json.tabwidth = this.graph.tabwidth; | ||
411 | |||
412 | if (this.graph.title != '' || full) | ||
413 | this.json.title = this.graph.title; | ||
414 | |||
415 | if (!isNaN(this.graph.setmaxval) || full) | ||
416 | this.json.upper_limit = this.graph.setmaxval; | ||
417 | |||
418 | if (this.graph.ylegend != null || full) | ||
419 | this.json.vertical_label = this.graph.ylegend; | ||
420 | |||
421 | if (this.graph.watermark != null || full) | ||
422 | this.json.watermark = this.graph.watermark; | ||
423 | |||
424 | if (this.graph.unitsexponent != 9999 || full) | ||
425 | this.json.units_exponent = this.graph.unitsexponent; | ||
426 | |||
427 | // this.json.x-grid = // FIXME | ||
428 | |||
429 | if (this.graph.alt_ygrid != false || full) | ||
430 | this.json.alt_ygrid = this.graph.alt_ygrid; | ||
431 | |||
432 | // this.json.y_grid = // FIXME | ||
433 | |||
434 | // this.json.lazy = this.graph.lazy; | ||
435 | |||
436 | if (this.graph.force_units_si != false || full) | ||
437 | this.json.units = 'si'; // FIXME | ||
438 | |||
439 | if (this.graph.no_rrdtool_tag != false || full) | ||
440 | this.json.disable_rrdtool_tag = this.graph.no_rrdtool_tag; | ||
441 | |||
442 | // this.json.right_axis = FIXME | ||
443 | |||
444 | if (this.graph.second_axis_legend != null || full) | ||
445 | this.json.right_axis_label = this.graph.second_axis_legend; | ||
446 | if (this.graph.second_axis_format != null || full) | ||
447 | this.json.right_axis_format = this.graph.second_axis_format; | ||
448 | |||
449 | // this.json.legendposition = this.graph.legendposition; // FIXME | ||
450 | // this.json.legend-direction = this.graph.legenddirection; // FIXME | ||
451 | |||
452 | if (this.graph.draw_3d_border != 2 || full) | ||
453 | this.json.border = this.graph.draw_3d_border; | ||
454 | |||
455 | if (this.graph.grid_dash_on != 1 || this.graph.grid_dash_off != 1 || full) | ||
456 | this.json.grid_dash = [this.graph.grid_dash_on, this.graph.grid_dash_off] | ||
457 | |||
458 | if (this.graph.dynamic_labels != false || full) | ||
459 | this.json.dynamic_labels = this.graph.dynamic_labels; | ||
460 | |||
461 | this.json.gdes = []; | ||
462 | for (var i = 0, gdes_c = this.graph.gdes.length; i < gdes_c; i++) { | ||
463 | switch (this.graph.gdes[i].gf) { | ||
464 | // GPRINT:vname:format | ||
465 | case RrdGraphDesc.GF_GPRINT: | ||
466 | this.json.gdes.push({ | ||
467 | type: 'GPRINT', | ||
468 | vname: this.graph.gdes[i].vname, | ||
469 | cf: RrdGraphDesc.cf2str(this.graph.gdes[i].cf), | ||
470 | format: this.graph.gdes[i].format, | ||
471 | strftm: (this.graph.gdes[i].strftm === false ? undefined : this.graph.gdes[i].strftm) }); | ||
472 | break; | ||
473 | // LINE[width]:value[#color][:[legend][:STACK]][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]] | ||
474 | case RrdGraphDesc.GF_LINE: | ||
475 | this.json.gdes.push({ | ||
476 | type: 'LINE', | ||
477 | width: this.graph.gdes[i].linewidth, | ||
478 | value: this.graph.gdes[i].vname, | ||
479 | color: this.graph.gdes[i].col, | ||
480 | legend: (this.graph.gdes[i].legend === '' ? undefined : this.graph.gdes[i].legend.substr(2)), | ||
481 | stack: (this.graph.gdes[i].stack === false ? undefined : this.graph.gdes[i].stack) }); | ||
482 | break; | ||
483 | // AREA:value[#color][:[legend][:STACK]] | ||
484 | case RrdGraphDesc.GF_AREA: | ||
485 | this.json.gdes.push({ | ||
486 | type: 'AREA', | ||
487 | value: this.graph.gdes[i].vname, | ||
488 | color: this.graph.gdes[i].col, | ||
489 | legend: (this.graph.gdes[i].legend === '' ? undefined : this.graph.gdes[i].legend.substr(2)), | ||
490 | stack: (this.graph.gdes[i].stack === false ? undefined : this.graph.gdes[i].stack) }); | ||
491 | break; | ||
492 | // TICK:vname#rrggbb[aa][:fraction[:legend]] | ||
493 | case RrdGraphDesc.GF_TICK: | ||
494 | this.json.gdes.push({ | ||
495 | type: 'TICK', | ||
496 | vname: this.graph.gdes[i].vname, | ||
497 | color: this.graph.gdes[i].col, | ||
498 | fraction: this.graph.gdes[i].yrule, | ||
499 | legend: (this.graph.gdes[i].legend === '' ? undefined : this.graph.gdes[i].legend.substr(2)) }); | ||
500 | break; | ||
501 | // HRULE:value#color[:legend][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]] | ||
502 | case RrdGraphDesc.GF_HRULE: | ||
503 | this.json.gdes.push({ | ||
504 | type: 'HRULE', | ||
505 | value: this.graph.gdes[i].yrule, | ||
506 | color: this.graph.gdes[i].col, | ||
507 | legend: (this.graph.gdes[i].legend === '' ? undefined : this.graph.gdes[i].legend.substr(2)) }); | ||
508 | break; | ||
509 | // VRULE:time#color[:legend][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offset]] | ||
510 | case RrdGraphDesc.GF_VRULE: | ||
511 | this.json.gdes.push({ | ||
512 | type: 'VRULE', | ||
513 | time: this.graph.gdes[i].xrule, | ||
514 | color: this.graph.gdes[i].col, | ||
515 | legend: (this.graph.gdes[i].legend === '' ? undefined : this.graph.gdes[i].legend.substr(2)) }); | ||
516 | break; | ||
517 | // COMMENT:text | ||
518 | case RrdGraphDesc.GF_COMMENT: | ||
519 | this.json.gdes.push({ | ||
520 | type: 'COMMENT', | ||
521 | legend: this.graph.gdes[i].legend}); | ||
522 | break; | ||
523 | // TEXTALIGN:{left|right|justified|center} | ||
524 | case RrdGraphDesc.GF_TEXTALIGN: | ||
525 | var align = ''; | ||
526 | switch (this.graph.gdes[i].txtalign) { | ||
527 | case RrdGraphDesc.TXA_LEFT: | ||
528 | align = 'left'; | ||
529 | break | ||
530 | case RrdGraphDesc.TXA_RIGHT: | ||
531 | align = 'right'; | ||
532 | break | ||
533 | case RrdGraphDesc.TXA_JUSTIFIED: | ||
534 | align = 'justified'; | ||
535 | break | ||
536 | case RrdGraphDesc.TXA_CENTER: | ||
537 | align = 'center'; | ||
538 | break | ||
539 | } | ||
540 | |||
541 | this.json.gdes.push({ | ||
542 | type: 'TEXTALIGN', | ||
543 | align: align }); | ||
544 | break; | ||
545 | // DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>] | ||
546 | case RrdGraphDesc.GF_DEF: | ||
547 | this.json.gdes.push({ | ||
548 | type: 'DEF', | ||
549 | vname: this.graph.gdes[i].vname, | ||
550 | rrdfile: this.graph.gdes[i].rrd, | ||
551 | name: this.graph.gdes[i].ds_nam, | ||
552 | cf: RrdGraphDesc.cf2str(this.graph.gdes[i].cf), | ||
553 | // step: this.graph.gdes[i].step, | ||
554 | step: undefined, | ||
555 | start: undefined, | ||
556 | // start: this.graph.gdes[i].start, // FIXME | ||
557 | end: undefined, | ||
558 | // end: this.graph.gdes[i].end, // FIXME | ||
559 | // reduce: RrdGraphDesc.cf2str(this.graph.gdes[i].cf_reduce) | ||
560 | reduce: undefined | ||
561 | }); | ||
562 | |||
563 | break; | ||
564 | // CDEF:vname=RPN expression | ||
565 | case RrdGraphDesc.GF_CDEF: | ||
566 | this.json.gdes.push({ | ||
567 | type: 'CDEF', | ||
568 | vname: this.graph.gdes[i].vname, | ||
569 | rpn: this.graph.gdes[i].rpnp.rpnexpr}); | ||
570 | break; | ||
571 | // VDEF:vname=RPN expression | ||
572 | case RrdGraphDesc.GF_VDEF: | ||
573 | this.json.gdes.push({ | ||
574 | type: 'VDEF', | ||
575 | vname: this.graph.gdes[i].vname, | ||
576 | rpn: this.graph.gdes[this.graph.gdes[i].vidx].vname+','+this.graph.gdes[i].vf.expr}); | ||
577 | break; | ||
578 | // SHIFT:vname:offset | ||
579 | case RrdGraphDesc.GF_SHIFT: | ||
580 | this.json.gdes.push({ | ||
581 | type: 'VDEF', | ||
582 | vname: this.graph.gdes[i].vname, | ||
583 | offset: this.shidx }); | ||
584 | break; | ||
585 | } | ||
586 | } | ||
587 | } | ||
588 | }; | ||