<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--
 Example HTML/javascript file that display the
 header of a RRD archive files
 Part of the javascriptRRD package
 Copyright (c) 2009 Frank Wuerthwein, fkw@ucsd.edu

 Original repository: http://javascriptrrd.sourceforge.net/
 
 MIT License [http://www.opensource.org/licenses/mit-license.php]

-->

<html>
  
    <script type="text/javascript" src="../lib/binaryXHR.js"></script>
    <script type="text/javascript" src="../lib/rrdFile.js"></script>
  <head>
    <title>RRD Header Info</title>
  </head>

  <body>
    <h1 id="title">RRD Header Info</h1>

    RRD URL:
    <input type="text" id="input_fname" value="example1.rrd"
           onchange="input_update()">
     <button onclick="input_update()">Update</button>
    <hr>

    <table id="infotable" border=1>
        <tr><td colspan="5"><b>Javascript needed for this page to work</b></td></tr>
	<tr><td><b>RRD file</b></td><td id="fname" colspan="4">None</td></tr>
	<tr><td><b>Min Step</b></td><td id="step" align="right">N/A</td><td><b>Last update</b></td><td id="last_update" colspan="2">N/A</td></tr>
    </table>

    <script type="text/javascript">
      // Remove the Javascript warning
      document.getElementById("infotable").deleteRow(0);

      // fname is the global variable used by all the functions below
      fname=document.getElementById("input_fname").value;

      // This function updates the Web Page with the data from the RRD archive
      function update_info(fname,rrd_data) {
        // cleanup
        // rows may have been added during previous updates
        var oTable=document.getElementById("infotable");
        while (oTable.rows.length>=3) {
          oTable.deleteRow(2);
        } 

        // Generic header info
        document.getElementById("fname").firstChild.data=fname;
        document.getElementById("step").firstChild.data=rrd_data.getMinStep();
        document.getElementById("last_update").firstChild.data=rrd_data.getLastUpdate();

        // DS info
        var nrDSs=rrd_data.getNrDSs()
        var oRow=oTable.insertRow(-1);
        var oCell=oRow.insertCell(0);
        oCell.innerHTML="<b>DS list</b>";
        oCell.colSpan=5;
        for (var i=0; i<nrDSs; i++) {
          var oDS=rrd_data.getDS(i);
          oRow=oTable.insertRow(-1);
          oCell=oRow.insertCell(0)
          oCell.innerHTML="<b>"+oDS.getName()+"</b>";
          oCell=oRow.insertCell(1)
          oCell.innerHTML=oDS.getType();
          oCell.colSpan=4;
        }

        // RRA Info
        var nrRRAs=rrd_data.getNrRRAs()
        oRow=oTable.insertRow(-1);
        oCell=oRow.insertCell(0);
        oCell.innerHTML="<b>RRA list</b>";
        oCell.colSpan=5;
        for (var i=0; i<nrRRAs; i++) {
          var oRRA=rrd_data.getRRAInfo(i);
          oRow=oTable.insertRow(-1);
          oCell=oRow.insertCell(0)
          oCell.innerHTML=i;
          oCell.align="center";
          oCell=oRow.insertCell(1)
          oCell.innerHTML="<b>Rows</b>";
          oCell=oRow.insertCell(2)
          oCell.innerHTML=oRRA.getNrRows();
          oCell.align="right";
          oCell=oRow.insertCell(3)
          oCell.innerHTML="<b>Step</b>";
          oCell=oRow.insertCell(4)
          oCell.innerHTML=oRRA.getStep();
          oCell.align="right";
        }
      }      

      // This is the callback function that,
      // given a binary file object,
      // verifies that it is a valid RRD archive
      // and performs the update of the Web page
      function update_info_handler(bf) {
          var rrd_data=undefined;
          try {
            var rrd_data=new RRDFile(bf);            
          } catch(err) {
            alert("File "+fname+" is not a valid RRD archive!");
          }
          if (rrd_data!=undefined) {
            update_info(fname,rrd_data)
          }
      }

      // this function is invoked when the RRD file name changes
      function input_update() {
        fname=document.getElementById("input_fname").value;
        try {
          FetchBinaryURLAsync(fname,update_info_handler);
        } catch (err) {
           alert("Failed loading "+fname+"\n"+err);
        }
      }

      // Uncomment this part if you want the Web page to load the
      // default RRD file at load time
      //
      //try {
      //  FetchBinaryURLAsync(fname,update_info_handler);
      //} catch (err) {
      //  alert("Failed loading "+fname+"\n"+err);
      //}
      
    </script>
  </body>
</html>