ping-service.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /**
  2. * The ping service checks the status of the attached server and sets the light in the
  3. * control bar accordingly.
  4. */
  5. define( ['jquery', 'underscore', 'sprintf'],
  6. function( $, _, sprintf ) {
  7. var PING_URL = "$/ping"
  8. var DEFAULT_PING_TIME = 500000; // TODO slowed down during debugging phase
  9. var _startTime = 0;
  10. var onBeforeSend = function() {
  11. _startTime = new Date().getTime();
  12. };
  13. var duration = function() {
  14. return new Date().getTime() - _startTime;
  15. };
  16. var onPingSuccess = function( ) {
  17. setPingStatus( "server-up", sprintf( "Last ping returned OK in %dms", duration() ) );
  18. };
  19. var onPingFail = function( jqXHR, msg, errorThrown ) {
  20. setPingStatus( "server-down", sprintf( "Last ping returned '%s' in %dms", errorThrown || msg, duration() ) );
  21. };
  22. var setPingStatus = function( lampClass, statusText ) {
  23. $( "a#server-status-light span").removeClass()
  24. .addClass( lampClass )
  25. .attr( "title", statusText );
  26. };
  27. /** Return a cache-defeating ping URL */
  28. var ping_url = function() {
  29. return PING_URL + "?_=" + Math.random();
  30. };
  31. var start = function( period ) {
  32. ping( period || DEFAULT_PING_TIME );
  33. };
  34. var ping = function( period ) {
  35. onBeforeSend();
  36. $.get( ping_url() ).done( onPingSuccess )
  37. .fail( onPingFail );
  38. setTimeout( function() {ping( period );}, period );
  39. };
  40. return {
  41. start: start
  42. }
  43. }
  44. );