You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by le...@apache.org on 2004/02/05 16:28:09 UTC

cvs commit: avalon-excalibur/instrument-manager/src/java/org/apache/excalibur/instrument/manager/http HTMLSampleHandler.java

leif        2004/02/05 07:28:09

  Modified:    instrument-manager/src/java/org/apache/excalibur/instrument/manager/http
                        HTMLSampleHandler.java
  Log:
  Fix a problem where a machine suspended for a few hours while viewing a
  sample page with auto refresh enabled was causing several thousand requests
  for sample images when it was resumed.  This was due to the javascript involved
  making use of the setInterval function which was trying to catch up.  We now use
  setTimeout which is always relative to when it is set.
  
  Revision  Changes    Path
  1.2       +30 -8     avalon-excalibur/instrument-manager/src/java/org/apache/excalibur/instrument/manager/http/HTMLSampleHandler.java
  
  Index: HTMLSampleHandler.java
  ===================================================================
  RCS file: /home/cvs/avalon-excalibur/instrument-manager/src/java/org/apache/excalibur/instrument/manager/http/HTMLSampleHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HTMLSampleHandler.java	9 Nov 2003 16:36:33 -0000	1.1
  +++ HTMLSampleHandler.java	5 Feb 2004 15:28:09 -0000	1.2
  @@ -210,21 +210,43 @@
               out.println( "<h2>Data Samples (<a href='sample.html?name="
                   + urlEncode( desc.getName() ) + "'>Plain</a>)</h2>" );
               
  +            // Originally, the JavaScript timer in the page made use of the setInterval
  +            //  function to build a simple timer.  This worked fine under normal
  +            //  operation.  But if a browser was suspended for 1 hour with a timer
  +            //  running at 1 second intervals, the timer would try to catch up when
  +            //  the machine was resumed.  This would result in the timer firing 3600
  +            //  times over the course of a few seconds.  The sudden burst of requests
  +            //  was swamping the server.
  +            // The current scripts below now always reset the timer each time it is
  +            //  fired.  If the timer ever falls behind it will recover smoothly
  +            //  without trying to catch up.  While not quite as accurate it is
  +            //  sufficient for our purposes.
  +            
               out.println( "<SCRIPT LANGUAGE=\"JavaScript\">" );
  -            out.println( "var intervalId;" );
  +            out.println( "var timerId = 0;" );
  +            out.println( "var timerInterval = 5000;" );
               out.println( "function refreshChart() {" );
  +            //out.println( "  alert(\"in refreshChart()\");" );
               out.println( "  document.chart.src=\"sample-chart.jpg?name=" + urlEncode( desc.getName() ) + "&time=\" + new Date().getTime();" );
               out.println( "}" );
  +            out.println( "function timerFired() {" );
  +            //out.println( "  alert(\"in timerFired()\");" );
  +            out.println( "  if (timerId) {" );
  +            out.println( "    clearTimeout(timerId);" );
  +            out.println( "  }" );
  +            out.println( "  timerId = setTimeout(\"timerFired()\", timerInterval)" );
  +            out.println( "  refreshChart();" );
  +            out.println( "}" );
               out.println( "function setRefresh(refresh) {" );
  -            out.println( "  clearInterval(intervalId);" );
  -            out.println( "  intervalId = setInterval(\"refreshChart()\", refresh);" );
  +            //out.println( "  alert(\"in setRefresh(\" + refresh + \")\");" );
  +            out.println( "  timerInterval = refresh;" );
  +            out.println( "  timerFired();" );
               out.println( "}" );
               out.println( "function chartError() {" );
  -            out.println( "  clearInterval(intervalId);" );
  +            //out.println( "  alert(\"in chartError()\");" );
  +            out.println( "  clearTimeout(timerId);" );
               out.println( "  document.location=\"instrument.html?name=" + urlEncode( desc.getInstrumentDescriptor().getName() ) + "\";" );
               out.println( "}" );
  -            // No auto refresh by default.
  -            //out.println( "setRefresh(5000);" );
               out.println( "</SCRIPT>" );
               
               out.println( "<form>" );
  @@ -232,7 +254,7 @@
               tableCell( out, "<img name='chart' src='sample-chart.jpg?name=" + urlEncode( desc.getName() ) + "' onError='javascript:chartError()'>" );
               endTable( out );
               out.println( "Refresh rate:" );
  -            out.println( "<input type='button' value='No Refresh' onClick='javascript:clearInterval(intervalId)'>" );
  +            out.println( "<input type='button' value='No Refresh' onClick='javascript:clearTimeout(timerId)'>" );
               out.println( "<input type='button' value='1 Second' onClick='javascript:setRefresh(1000)'>" );
               out.println( "<input type='button' value='5 Seconds' onClick='javascript:setRefresh(5000)'>" );
               out.println( "<input type='button' value='10 Seconds' onClick='javascript:setRefresh(10000)'>" );
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org