success : function()

in solr/webapp/solr/js/scripts/replication.js [75:447]


      success : function( response, text_status, xhr )
      {
        $( '.refresh-status span', navigation_element )
          .removeClass( 'loader' );
                
        var data = response.details;
        var is_slave = 'true' === data.isSlave;

        replication_element
          .addClass( is_slave ? 'slave' : 'master' );

        if( is_slave )
        {
          var error_element = $( '#error', replication_element );

          if( data.slave.ERROR )
          {
            error_element
              .html( data.slave.ERROR )
              .show();
          }
          else
          {
            error_element
              .hide()
              .empty();
          }

          var progress_element = $( '#progress', replication_element );

          var start_element = $( '#start', progress_element );
          $( 'span', start_element )
            .text( data.slave.replicationStartTime );

          var eta_element = $( '#eta', progress_element );
          $( 'span', eta_element )
            .text( app.convert_seconds_to_readable_time( data.slave.timeRemaining ) );

          var bar_element = $( '#bar', progress_element );
          $( '.files span', bar_element )
            .text( data.slave.numFilesToDownload );
          $( '.size span', bar_element )
            .text( data.slave.bytesToDownload );

          var speed_element = $( '#speed', progress_element );
          $( 'span', speed_element )
            .text( data.slave.downloadSpeed );

          var done_element = $( '#done', progress_element );
          $( '.files span', done_element )
            .text( data.slave.numFilesDownloaded );
          $( '.size span', done_element )
            .text( data.slave.bytesDownloaded );
          $( '.percent span', done_element )
            .text( parseInt(data.slave.totalPercent ) );

          var percent = parseInt( data.slave.totalPercent );
          if( 0 === percent )
          {
            done_element
              .css( 'width', '1px' ); 
          }
          else
          {
            done_element
              .css( 'width', percent + '%' );
          }

          var current_file_element = $( '#current-file', replication_element );
          $( '.file', current_file_element )
            .text( data.slave.currentFile );
          $( '.done', current_file_element )
            .text( data.slave.currentFileSizeDownloaded );
          $( '.total', current_file_element )
            .text( data.slave.currentFileSize );
          $( '.percent', current_file_element )
            .text( parseInt( data.slave.currentFileSizePercent ) );

          if( !data.slave.indexReplicatedAtList )
          {
            data.slave.indexReplicatedAtList = [];
          }

          if( !data.slave.replicationFailedAtList )
          {
            data.slave.replicationFailedAtList = [];
          }

          var iterations_element = $( '#iterations', replication_element );
          var iterations_list = $( '.iterations ul', iterations_element );

          var iterations_data = [];
          var iterations_obj = {};

          for( var i in data.slave.indexReplicatedAtList )
          {
            var date = data.slave.indexReplicatedAtList[i];
            if( !iterations_obj[date] )
            {
              iterations_obj[date] = true;
              iterations_data.push( date );
            }
          }

          for( var i in data.slave.replicationFailedAtList )
          {
            var date = data.slave.replicationFailedAtList[i];
            if( !iterations_obj[date] )
            {
              iterations_obj[date] = true;
              iterations_data.push( date );
            }
          }

          iterations_data.sort().reverse();

          if( 0 !== iterations_data.length )
          {
            var iterations = [];
            for( var i = 0; i < iterations_data.length; i++ )
            {
              iterations.push( '<li data-date="' + iterations_data[i] + '">' + iterations_data[i] + '</li>' );
            }
                        
            iterations_list
              .html( iterations.join( "\n" ) )
              .show();
                        
            $( data.slave.indexReplicatedAtList )
              .each
              (
                function( key, value )
                {
                  $( 'li[data-date="' + value + '"]', iterations_list )
                    .addClass( 'replicated' );
                }
              );
                        
            if( data.slave.indexReplicatedAt )
            {
              $( 'li[data-date="' + data.slave.indexReplicatedAt + '"]', iterations_list )
                .addClass( 'latest' );
            }
                        
            $( data.slave.replicationFailedAtList )
              .each
              (
                function( key, value )
                {
                  $( 'li[data-date="' + value + '"]', iterations_list )
                    .addClass( 'failed' );
                }
              );
                        
            if( data.slave.replicationFailedAt )
            {
              $( 'li[data-date="' + data.slave.replicationFailedAt + '"]', iterations_list )
                .addClass( 'latest' );
            }

            if( 0 !== $( 'li:hidden', iterations_list ).size() )
            {
              $( 'a', iterations_element )
                .show();
            }
            else
            {
              $( 'a', iterations_element )
                .hide();
            }
          }
        }

        var details_element = $( '#details', replication_element );
        var current_type_element = $( ( is_slave ? '.slave' : '.masterSearch' ), details_element );
        var master_data = is_slave ? data.slave.masterDetails : data;

        // the currently searchable commit regardless of type
        $( '.version div', current_type_element )
          .html( data.indexVersion );
        $( '.generation div', current_type_element )
          .html( data.generation );
        $( '.size div', current_type_element )
          .html( data.indexSize );

        // what's replicable on the master
        var master_element = $( '.master', details_element );
        $( '.version div', master_element )
          .html( master_data.master.replicableVersion || '-' );
        $( '.generation div', master_element )
          .html( master_data.master.replicableGeneration || '-' );
        $( '.size div', master_element )
          .html( "-" );
                
        if( is_slave )
        {
          // what's searchable on the master
          var master_searchable = $( '.masterSearch', details_element );
          $( '.version div', master_searchable )
            .html( master_data.indexVersion );
          $( '.generation div', master_searchable )
            .html( master_data.generation );
          $( '.size div', master_searchable )
            .html( master_data.indexSize );
 
          // warnings if slave version|gen doesn't match what's replicable
          if( data.indexVersion !== master_data.master.replicableVersion )
          {
            $( '.version', details_element )
              .addClass( 'diff' );
          }
          else
          {
            $( '.version', details_element )
              .removeClass( 'diff' );
          }
                    
          if( data.generation !== master_data.master.replicableGeneration )
          {
            $( '.generation', details_element )
              .addClass( 'diff' );
          }
          else
          {
            $( '.generation', details_element )
              .removeClass( 'diff' );
          }
        }

        if( is_slave )
        {
          var settings_element = $( '#settings', replication_element );

          if( data.slave.masterUrl )
          {
            $( '.masterUrl dd', settings_element )
              .html( response.details.slave.masterUrl )
              .parents( 'li' ).show();
          }

          var polling_content = '&nbsp;';
          var polling_ico = 'ico-1';

          if( 'true' === data.slave.isPollingDisabled )
          {
            polling_ico = 'ico-0';

            $( '.disable-polling', navigation_element ).hide();
            $( '.enable-polling', navigation_element ).show();
          }
          else
          {
            $( '.disable-polling', navigation_element ).show();
            $( '.enable-polling', navigation_element ).hide();

            if( data.slave.pollInterval )
            {
              polling_content = '(interval: ' + data.slave.pollInterval + ')';
            }
          }

          $( '.isPollingDisabled dd', settings_element )
            .removeClass( 'ico-0' )
            .removeClass( 'ico-1' )
            .addClass( polling_ico )
            .html( polling_content )
            .parents( 'li' ).show();
                
          if( 'true' === data.slave.isReplicating )
          {
            replication_element
              .addClass( 'replicating' );
                        
            $( '.replicate-now', navigation_element ).hide();
            $( '.abort-replication', navigation_element ).show();
                        
            window.setTimeout( replication_fetch_status, 1000 );
          }
          else
          {
            replication_element
              .removeClass( 'replicating' );
                        
            $( '.replicate-now', navigation_element ).show();
            $( '.abort-replication', navigation_element ).hide();


            if( 'false' === data.slave.isPollingDisabled && data.slave.pollInterval )
            {
              timer_element = $( '.timer', navigation_element );
              approx_element = $( '.approx', timer_element );

              var next_tick = app.convert_duration_to_seconds( data.slave.pollInterval );
              approx_element.show();

              if( data.slave.nextExecutionAt )
              {
                var nextExecutionAt = new SolrDate( data.slave.nextExecutionAt );
                var currentDate = new SolrDate( data.slave.currentDate );

                if( nextExecutionAt.getTime() > currentDate.getTime() )
                {
                  next_tick = ( nextExecutionAt.getTime() - currentDate.getTime() ) / 1000;
                  approx_element.hide();

                  $( 'small', timer_element )
                    .text( data.slave.nextExecutionAt )
                    .show();
                }
              }

              init_timer( next_tick );

              timer_element
                .show();
            }
          }
        }

        var master_settings_element = $( '#master-settings', replication_element );
        var master_data = is_slave ? data.slave.masterDetails.master : data.master;

        var replication_icon = 'ico-0';
        if( 'true' === master_data.replicationEnabled )
        {
          replication_icon = 'ico-1';

          $( '.disable-replication', navigation_element ).show();
          $( '.enable-replication', navigation_element ).hide();
        }
        else
        {
          $( '.disable-replication', navigation_element ).hide();
          $( '.enable-replication', navigation_element ).show();
        }

        $( '.replicationEnabled dd', master_settings_element )
          .removeClass( 'ico-0' )
          .removeClass( 'ico-1' )
          .addClass( replication_icon )
          .parents( 'li' ).show();

        $( '.replicateAfter dd', master_settings_element )
          .html( master_data.replicateAfter.join( ', ' ) )
          .parents( 'li' ).show();

        if( master_data.confFiles )
        {
          var conf_files = [];
          var conf_data = master_data.confFiles.split( ',' );
                    
          for( var i = 0; i < conf_data.length; i++ )
          {
            var item = conf_data[i];

            if( - 1 !== item.indexOf( ':' ) )
            {
              info = item.split( ':' );
              item = '<abbr title="' + info[0] + ' » ' + info[1] + '">' + ( is_slave ? info[1] : info[0] ) + '</abbr>';
            }

            conf_files.push( item );
          }

          $( '.confFiles dd', master_settings_element )
            .html( conf_files.join( ', ' ) )
            .parents( 'li' ).show();
        }


        $( '.block', replication_element ).last()
          .addClass( 'last' );
      },