<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
	<TITLE>rrdFlotSupport module</TITLE>
	<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.0  (Linux)">
	<META NAME="Info 1" CONTENT="">
	<META NAME="Info 2" CONTENT="">
	<META NAME="Info 3" CONTENT="">
	<META NAME="Info 4" CONTENT="">
	<STYLE TYPE="text/css">
	<!--
		@page { margin: 0.79in }
		TD P { margin-bottom: 0.08in }
		H1 { margin-bottom: 0.08in }
		H1.western { font-family: "Liberation Sans", sans-serif; font-size: 22pt }
		P { margin-bottom: 0.08in }
		H2.heading-2-western { font-family: "Liberation Serif", serif; font-size: 16pt }
		TH P { margin-bottom: 0.08in }
		A:link { so-language: zxx }
	-->
	</STYLE>
</HEAD>
<BODY LANG="en-US" DIR="LTR">
<H1 CLASS="western">rrdFlotSupport module</H1>
<TABLE WIDTH=50% CELLPADDING=2 CELLSPACING=2>
	<TR>
		<TD>
			<HR>
			<P>The <A HREF="../../src/lib/rrdFlotSupport.js">rrdFlotSupport Javascript module</A> 
                        implements a set of commonly used functions an classes that may be used while plotting 
                        <A HREF="http://oss.oetiker.ch/rrdtool/">RRD files</A> with 
                        <A HREF="http://code.google.com/p/flot/">Flot</A>.</P>
			<HR>
		</TD>
	</TR>
</TABLE>
<H2 CLASS="heading-2-western">Overview</H2>
<P>This module provides two types of support:
<UL>
 <LI>Functions providing support in converting raw data into Flot-friendly format:
    <A HREF="#rrdDS2FlotSeries">rrdDS2FlotSeries</A> and 
    <A HREF="#rrdRRA2FlotObj">rrdRRA2FlotObj</A>.
 <LI>A class providing support for handling the plotting:
     <A HREF="#rrdFlotSelection">rrdFlotSelection</A>.
</UL>
</P>
<H2 CLASS="heading-2-western"><A NAME="rrdDS2FlotSeries"></A>Function rrdDS2FlotSeries</H2>
<P>This function extracts a specific DS from a specific RRA and returns an object that 
contains the data in format flot expects.</P>
<P>
Input parameters:
</P>
<DIV ALIGN=RIGHT>
	<TABLE WIDTH=90% BORDER=1 CELLPADDING=2 CELLSPACING=3>
		<COL WIDTH=51*>
		<COL WIDTH=205*>
		<THEAD>
			<TR VALIGN=TOP>
				<TH WIDTH=20%>
					<P ALIGN=LEFT>Parameter</P>
				</TH>
				<TH WIDTH=80%>
					<P ALIGN=LEFT>Description</P>
				</TH>
			</TR>
		</THEAD>
		<TBODY>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>rrd_file</P>
				</TD>
				<TD WIDTH=80%>
					<P>An object of type <A HREF="rrdFile_js.html#RRDFile">RRDFile</A> or equivalent.</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>ds_id</P>
				</TD>
				<TD WIDTH=80%>
					<P>Identifier of the desired DS (as accepted by
                                            <A HREF="rrdFile_js.html#RRDFile">RRDFile.getDS()</A>).</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>rra_idx</P>
				</TD>
				<TD WIDTH=80%>
					<P>Index of the desired RRA.</P>
				</TD>
			</TR>
		</TBODY>
	</TABLE>
</DIV>
<P>
The output is an object containing:
</P>
<DIV ALIGN=RIGHT>
	<TABLE WIDTH=90% BORDER=1 CELLPADDING=2 CELLSPACING=3>
		<COL WIDTH=51*>
		<COL WIDTH=205*>
		<THEAD>
			<TR VALIGN=TOP>
				<TH WIDTH=20%>
					<P ALIGN=LEFT>Attribute</P>
				</TH>
				<TH WIDTH=80%>
					<P ALIGN=LEFT>Description</P>
				</TH>
			</TR>
		</THEAD>
		<TBODY>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>data</P>
				</TD>
				<TD WIDTH=80%>
					<P>A list of datapoints suitable to be fed to <A HREF="http://code.google.com/p/flot/">Flot</A>. Each element is a (Timestamp in ms, value) pair.<P>
                                        <P>An example of use with Flot:<BR>
<PRE>
var fd=rrdDS2FlotSeries(...);
var plot = $.plot("#myplot", [{data:fd.data}], options);
</PRE>
                                        </P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>label</P>
				</TD>
				<TD WIDTH=80%>
					<P>The DS name.</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>min</P>
				</TD>
				<TD WIDTH=80% ROWSPAN=2>
					<P>Min and max timestamp in ms.</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>max</P>
				</TD>
                        </TR>
		</TBODY>
	</TABLE>
</DIV>
<H2 CLASS="heading-2-western"><A NAME="rrdDS2FlotObj"></A>Function rrdDS2FlotObj</H2>
<P>This function extracts a set of DSs from a specific RRA and returns an object that 
contains the data in format flot expects.</P>
<P>
Input parameters:
</P>
<DIV ALIGN=RIGHT>
	<TABLE WIDTH=90% BORDER=1 CELLPADDING=2 CELLSPACING=3>
		<COL WIDTH=51*>
		<COL WIDTH=205*>
		<THEAD>
			<TR VALIGN=TOP>
				<TH WIDTH=20%>
					<P ALIGN=LEFT>Parameter</P>
				</TH>
				<TH WIDTH=80%>
					<P ALIGN=LEFT>Description</P>
				</TH>
			</TR>
		</THEAD>
		<TBODY>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>rrd_file</P>
				</TD>
				<TD WIDTH=80%>
					<P>An object of type <A HREF="rrdFile_js.html#RRDFile">RRDFile</A> or equivalent.</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>rra_idx</P>
				</TD>
				<TD WIDTH=80%>
					<P>Index of the desired RRA.</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>ds_list</P>
				</TD>
				<TD WIDTH=80%>
					<P>List of DS identifiers (as accepted by
                                            <A HREF="rrdFile_js.html#RRDFile">RRDFile.getDS()</A>).</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>want_label</P>
				</TD>
				<TD WIDTH=80%>
					<P>Should the DS name be included as label in the output? 
                                           (If false, only the order distinguishes the requested DSs)</P>
				</TD>
			</TR>
		</TBODY>
	</TABLE>
</DIV>
<P>
The output is an object containing:
</P>
<DIV ALIGN=RIGHT>
	<TABLE WIDTH=90% BORDER=1 CELLPADDING=2 CELLSPACING=3>
		<COL WIDTH=51*>
		<COL WIDTH=205*>
		<THEAD>
			<TR VALIGN=TOP>
				<TH WIDTH=20%>
					<P ALIGN=LEFT>Attribute</P>
				</TH>
				<TH WIDTH=80%>
					<P ALIGN=LEFT>Description</P>
				</TH>
			</TR>
		</THEAD>
		<TBODY>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>data</P>
				</TD>
				<TD WIDTH=80%>
					<P>A list of objects suitable to be fed to <A HREF="http://code.google.com/p/flot/">Flot</A>. Each element is an object composed of two attributes:<UL>
                                         <LI>data - A list of (Timestamp in ms, value) pairs.</LI>
                                         <LI>label - The (optional) DS name.</LI></UL></P>
                                        <P>An example of use with Flot:<BR>
<PRE>
var fd=rrdDS2FlotObj(...);
var plot = $.plot("#myplot", fd.data, options);
</PRE>
                                        </P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>min</P>
				</TD>
				<TD WIDTH=80% ROWSPAN=2>
					<P>Min and max timestamp in ms.</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>max</P>
				</TD>
                        </TR>
		</TBODY>
	</TABLE>
</DIV>
<H2 CLASS="heading-2-western"><A NAME="rrdFlotSelection"></A>Class rrdFlotSelection</H2>
<P>Helper class to handle <A HREF="http://code.google.com/p/flot/">Flot</A> selections.
</P>
<DIV ALIGN=RIGHT>
	<TABLE WIDTH=90% BORDER=1 CELLPADDING=2 CELLSPACING=3>
		<COL WIDTH=52*>
		<COL WIDTH=204*>
		<THEAD>
			<TR VALIGN=TOP>
				<TH WIDTH=20%>
					<P ALIGN=LEFT>Method</P>
				</TH>
				<TH WIDTH=80%>
					<P ALIGN=LEFT>Description</P>
				</TH>
			</TR>
		</THEAD>
		<TBODY>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>reset()</P>
				</TD>
				<TD WIDTH=80%>
					<P>Clear the selection. (isSet() will return False)</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>isSet()</P>
				</TD>
				<TD WIDTH=80%>
					<P>Was a selection set?</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>setFromFlotRanges(ranges)</P>
				</TD>
				<TD WIDTH=80%>
					<P>Set the selection to ranges.xaxis. See plotselected 
                                           <A HREF="http://code.google.com/p/flot/">Flot</A>
                                           event for more info on ranges. (isSet() will return True, and getFlotRanges() can now be called.)</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>getFlotRanges()</P>
				</TD>
				<TD WIDTH=80%>
					<P>Return a ranges object. See plotselected 
                                           <A HREF="http://code.google.com/p/flot/">Flot</A>
                                           event for more info on ranges.</P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>trim_flot_data(flot_data)</P>
				</TD>
				<TD WIDTH=80%>
					<P>Create a new Flot data object by selecting only the data points within the current selection.</P>
                                        <P>An example Flot data object is 
<PRE>
rrdDS2FlotObj(...).data
</PRE></P>
				</TD>
			</TR>
			<TR VALIGN=TOP>
				<TD WIDTH=20%>
					<P>trim_data(data_list)</P>
				</TD>
				<TD WIDTH=80%>
					<P>Create a new data list by selecting only the data points within the current selection.</P>
                                        <P>An example data list is 
<PRE>
rrdDS2FlotSeries(...).data
</PRE></P>
				</TD>
			</TR>
		</TBODY>
	</TABLE>
</DIV>
<P>Pseudo-example of use:
<PRE>
  myplotplot.bind("plotselected", function (event, ranges) {
      // do the zooming
      selection_range.setFromFlotRanges(ranges);
      graph_options.xaxis.min=ranges.xaxis.from;
      graph_options.xaxis.max=ranges.xaxis.to;
      mygraph = $.plot("#mygraph", selection_range.trim_flot_data(flot_data), graph_options);
  });
</PRE>
</P>
</BODY>
</HTML>