resque-sliders 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +9 -0
 - data/MIT-LICENSE +20 -0
 - data/README.md +88 -0
 - data/Rakefile +35 -0
 - data/bin/kewatcher +68 -0
 - data/config/config_example.yml +11 -0
 - data/lib/resque-sliders/commander.rb +73 -0
 - data/lib/resque-sliders/helpers.rb +72 -0
 - data/lib/resque-sliders/kewatcher.rb +345 -0
 - data/lib/resque-sliders/server/public/css/jqueryui-1.8.16/blitzer/jquery-ui.custom.css +568 -0
 - data/lib/resque-sliders/server/public/css/sliders.css +30 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_dots-small_65_a6a6a6_2x2.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_flat_0_333333_40x100.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_flat_65_ffffff_40x100.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_glass_55_fbf8ee_1x400.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_highlight-hard_100_eeeeee_1x100.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-bg_highlight-soft_15_cc0000_1x100.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-icons_004276_256x240.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-icons_cc0000_256x240.png +0 -0
 - data/lib/resque-sliders/server/public/images/ui-icons_ffffff_256x240.png +0 -0
 - data/lib/resque-sliders/server/public/js/jquery-ui-1.8.16.custom.min.js +791 -0
 - data/lib/resque-sliders/server/public/js/sliders.js +64 -0
 - data/lib/resque-sliders/server/views/index.erb +59 -0
 - data/lib/resque-sliders/server.rb +71 -0
 - data/lib/resque-sliders/version.rb +7 -0
 - data/lib/resque-sliders.rb +9 -0
 - data/resque-sliders.gemspec +29 -0
 - data/test/redis-test.conf +115 -0
 - data/test/resque-sliders_test.rb +12 -0
 - data/test/test_helper.rb +74 -0
 - metadata +117 -0
 
| 
         @@ -0,0 +1,64 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            $(document).ready(function() {
         
     | 
| 
      
 2 
     | 
    
         
            +
              function set_total() {
         
     | 
| 
      
 3 
     | 
    
         
            +
                var total = 0;
         
     | 
| 
      
 4 
     | 
    
         
            +
                $(".values").each(function () {
         
     | 
| 
      
 5 
     | 
    
         
            +
                  total += parseInt($(this).val());
         
     | 
| 
      
 6 
     | 
    
         
            +
                });
         
     | 
| 
      
 7 
     | 
    
         
            +
                $("#total").text(total);
         
     | 
| 
      
 8 
     | 
    
         
            +
              };
         
     | 
| 
      
 9 
     | 
    
         
            +
              function sanitize_input(s) {
         
     | 
| 
      
 10 
     | 
    
         
            +
                var ary = s.toLowerCase().replace(/[^a-z 0-9,_\-\*]/g, '').replace(/^\s+|\s+$/g, '').split(',');
         
     | 
| 
      
 11 
     | 
    
         
            +
                var new_ary = [];
         
     | 
| 
      
 12 
     | 
    
         
            +
                $.each(ary, function() {
         
     | 
| 
      
 13 
     | 
    
         
            +
                  if (this != '') {
         
     | 
| 
      
 14 
     | 
    
         
            +
                    new_ary.push($.trim(this));
         
     | 
| 
      
 15 
     | 
    
         
            +
                  }
         
     | 
| 
      
 16 
     | 
    
         
            +
                });
         
     | 
| 
      
 17 
     | 
    
         
            +
                return new_ary.join(',');
         
     | 
| 
      
 18 
     | 
    
         
            +
              };
         
     | 
| 
      
 19 
     | 
    
         
            +
              // Click function for all HUP icons
         
     | 
| 
      
 20 
     | 
    
         
            +
              $(".HUP").click(function() {
         
     | 
| 
      
 21 
     | 
    
         
            +
                var host = $(this).attr("id").replace('-HUP', '');
         
     | 
| 
      
 22 
     | 
    
         
            +
                $.post('/sliders/' + host, { reload: true }, function(data) {
         
     | 
| 
      
 23 
     | 
    
         
            +
                  // FIXME
         
     | 
| 
      
 24 
     | 
    
         
            +
                  // this should just show the alert icon
         
     | 
| 
      
 25 
     | 
    
         
            +
                  window.location.reload();
         
     | 
| 
      
 26 
     | 
    
         
            +
                });
         
     | 
| 
      
 27 
     | 
    
         
            +
              });
         
     | 
| 
      
 28 
     | 
    
         
            +
              $('.new_form').submit(function() {
         
     | 
| 
      
 29 
     | 
    
         
            +
                var queue = sanitize_input($("#new_queue").val());
         
     | 
| 
      
 30 
     | 
    
         
            +
                var host = $(this).attr("id");
         
     | 
| 
      
 31 
     | 
    
         
            +
                $.post('/sliders/' + host, { quantity: 1, queue: queue }, function(data) {
         
     | 
| 
      
 32 
     | 
    
         
            +
                  // do something here on success
         
     | 
| 
      
 33 
     | 
    
         
            +
                });
         
     | 
| 
      
 34 
     | 
    
         
            +
              });
         
     | 
| 
      
 35 
     | 
    
         
            +
              $("#plus-one").click(function() {
         
     | 
| 
      
 36 
     | 
    
         
            +
                $('.new_form').submit();
         
     | 
| 
      
 37 
     | 
    
         
            +
              });
         
     | 
| 
      
 38 
     | 
    
         
            +
              // make each slider, get input from div content passed from erb
         
     | 
| 
      
 39 
     | 
    
         
            +
              $(".slider").each(function() {
         
     | 
| 
      
 40 
     | 
    
         
            +
                var slidy = $(this);
         
     | 
| 
      
 41 
     | 
    
         
            +
                var max_childs = parseInt($("#max").text());
         
     | 
| 
      
 42 
     | 
    
         
            +
                if (max_childs) { max_childs = max_childs; }
         
     | 
| 
      
 43 
     | 
    
         
            +
                else { max_childs = 50; }
         
     | 
| 
      
 44 
     | 
    
         
            +
                var value = parseInt( slidy.text() );
         
     | 
| 
      
 45 
     | 
    
         
            +
                var queue = slidy.attr("id").replace("-slider", "").replace(/:/g, ",").replace(/^\s+|\s+$/g, '');
         
     | 
| 
      
 46 
     | 
    
         
            +
                var host = window.location.pathname.split('/').slice(-1);
         
     | 
| 
      
 47 
     | 
    
         
            +
                slidy.prev().find("input").val( value );
         
     | 
| 
      
 48 
     | 
    
         
            +
                slidy.empty().slider({
         
     | 
| 
      
 49 
     | 
    
         
            +
                  range: "min",
         
     | 
| 
      
 50 
     | 
    
         
            +
                  value: value,
         
     | 
| 
      
 51 
     | 
    
         
            +
                  min: 0,
         
     | 
| 
      
 52 
     | 
    
         
            +
                  max: max_childs,
         
     | 
| 
      
 53 
     | 
    
         
            +
                  slide: function( event, ui ) {
         
     | 
| 
      
 54 
     | 
    
         
            +
                    slidy.prev().find("input").val( ui.value );
         
     | 
| 
      
 55 
     | 
    
         
            +
                    set_total();
         
     | 
| 
      
 56 
     | 
    
         
            +
                  },
         
     | 
| 
      
 57 
     | 
    
         
            +
                  change: function( event, ui ) {
         
     | 
| 
      
 58 
     | 
    
         
            +
                    $.post('/sliders/' + host, { quantity: ui.value, queue: queue }, function(data) {
         
     | 
| 
      
 59 
     | 
    
         
            +
                    });
         
     | 
| 
      
 60 
     | 
    
         
            +
                  },
         
     | 
| 
      
 61 
     | 
    
         
            +
                });
         
     | 
| 
      
 62 
     | 
    
         
            +
              });
         
     | 
| 
      
 63 
     | 
    
         
            +
              set_total(); // do this initially
         
     | 
| 
      
 64 
     | 
    
         
            +
            });
         
     | 
| 
         @@ -0,0 +1,59 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <% @subtabs = @sliders.all_hosts unless @sliders.all_hosts.length == 1 %>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            <h1>Sliders</h1>
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            <div id="sliders">
         
     | 
| 
      
 6 
     | 
    
         
            +
              <link href="/sliders?css=sliders.css" rel="stylesheet" type="text/css" />
         
     | 
| 
      
 7 
     | 
    
         
            +
              <link href="/sliders?css=jqueryui-1.8.16/blitzer/jquery-ui.custom.css" rel="stylesheet" type="text/css" />
         
     | 
| 
      
 8 
     | 
    
         
            +
              <script src="/sliders?js=jquery-ui-1.8.16.custom.min.js" type="text/javascript"></script>
         
     | 
| 
      
 9 
     | 
    
         
            +
              <script src="/sliders?js=sliders.js" type="text/javascript"></script>
         
     | 
| 
      
 10 
     | 
    
         
            +
            <% if params[:host] || @sliders.all_hosts.length == 1 %>
         
     | 
| 
      
 11 
     | 
    
         
            +
              <% host = params[:host] || @sliders.all_hosts.first %>
         
     | 
| 
      
 12 
     | 
    
         
            +
              <% max = @sliders.max_children(host) || 'Not running' %>
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              <h2><%= "#{host} (Total: <span id=\"total\"></span> Max: <span id=\"max\">#{max}</span>)" %>
         
     | 
| 
      
 15 
     | 
    
         
            +
                <span id="<%= host %>-HUP" class="ui-icon ui-icon-refresh ui-corner-all ui-state-default corner HUP"></span>
         
     | 
| 
      
 16 
     | 
    
         
            +
                <% if @sliders.reload?(host) %>
         
     | 
| 
      
 17 
     | 
    
         
            +
                <span class="ui-icon ui-icon-alert corner"></span>
         
     | 
| 
      
 18 
     | 
    
         
            +
                <% end %>
         
     | 
| 
      
 19 
     | 
    
         
            +
              </h2>
         
     | 
| 
      
 20 
     | 
    
         
            +
              <% @sliders.queue_values(host).each_pair do |queue,value| %>
         
     | 
| 
      
 21 
     | 
    
         
            +
                <p>
         
     | 
| 
      
 22 
     | 
    
         
            +
                  <label for="value"><%= queue %>: </label>
         
     | 
| 
      
 23 
     | 
    
         
            +
                  <input type="text" id="<%= queue.gsub(',', ':') %>-value" class="values" />
         
     | 
| 
      
 24 
     | 
    
         
            +
                </p>
         
     | 
| 
      
 25 
     | 
    
         
            +
                <div id="<%= queue.gsub(',', ':') %>-slider" class="slider"><%= value %></div>
         
     | 
| 
      
 26 
     | 
    
         
            +
              <% end %>
         
     | 
| 
      
 27 
     | 
    
         
            +
                <form id="<%= host %>" class="new_form">
         
     | 
| 
      
 28 
     | 
    
         
            +
                  <input type="text" id="new_queue" />
         
     | 
| 
      
 29 
     | 
    
         
            +
                  <span id="plus-one" type="submit" class="ui-icon ui-icon-plus ui-corner-all ui-state-default" /></span>
         
     | 
| 
      
 30 
     | 
    
         
            +
                </form>
         
     | 
| 
      
 31 
     | 
    
         
            +
            <% else %>
         
     | 
| 
      
 32 
     | 
    
         
            +
              <table class="hosts">
         
     | 
| 
      
 33 
     | 
    
         
            +
                <tr>
         
     | 
| 
      
 34 
     | 
    
         
            +
                  <th>Hostname</th>
         
     | 
| 
      
 35 
     | 
    
         
            +
                  <th>Current / Max Workers</th>
         
     | 
| 
      
 36 
     | 
    
         
            +
                  <th>HUP</th>
         
     | 
| 
      
 37 
     | 
    
         
            +
                </tr>
         
     | 
| 
      
 38 
     | 
    
         
            +
                <% @sliders.all_hosts.each do |host| %>
         
     | 
| 
      
 39 
     | 
    
         
            +
                <tr>
         
     | 
| 
      
 40 
     | 
    
         
            +
                  <td><a href="/sliders/<%= host %>"><%= host %></a></td>
         
     | 
| 
      
 41 
     | 
    
         
            +
                  <td><% if @sliders.stale_hosts.include?(host) %>
         
     | 
| 
      
 42 
     | 
    
         
            +
                  Not Checked in (Stale)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  <% else %>
         
     | 
| 
      
 44 
     | 
    
         
            +
                  <%= [@sliders.current_children(host), @sliders.max_children(host)].compact.join(' / ') %>
         
     | 
| 
      
 45 
     | 
    
         
            +
                  <% end %>
         
     | 
| 
      
 46 
     | 
    
         
            +
                  </td>
         
     | 
| 
      
 47 
     | 
    
         
            +
                  <td>
         
     | 
| 
      
 48 
     | 
    
         
            +
                    <ul>
         
     | 
| 
      
 49 
     | 
    
         
            +
                      <li class="icons"><span id="<%= host %>-HUP" class="ui-icon ui-icon-refresh ui-corner-all ui-state-default HUP"></span></li>
         
     | 
| 
      
 50 
     | 
    
         
            +
                      <% if @sliders.reload?(host) %>
         
     | 
| 
      
 51 
     | 
    
         
            +
                      <li class="icons"><span class="ui-icon ui-icon-alert"></span></li>
         
     | 
| 
      
 52 
     | 
    
         
            +
                      <% end %>
         
     | 
| 
      
 53 
     | 
    
         
            +
                    </ul>
         
     | 
| 
      
 54 
     | 
    
         
            +
                  </td>
         
     | 
| 
      
 55 
     | 
    
         
            +
                </tr>
         
     | 
| 
      
 56 
     | 
    
         
            +
                <% end %>
         
     | 
| 
      
 57 
     | 
    
         
            +
              </table>
         
     | 
| 
      
 58 
     | 
    
         
            +
            <% end %>
         
     | 
| 
      
 59 
     | 
    
         
            +
            </div>
         
     | 
| 
         @@ -0,0 +1,71 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Resque
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Plugins
         
     | 
| 
      
 3 
     | 
    
         
            +
                module ResqueSliders
         
     | 
| 
      
 4 
     | 
    
         
            +
                  module Server
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                    VIEW_PATH = File.join(File.dirname(__FILE__), 'server', 'views')
         
     | 
| 
      
 7 
     | 
    
         
            +
                    PUBLIC_PATH = File.join(File.dirname(__FILE__), 'server', 'public')
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def self.registered(app)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                      app.get '/sliders' do
         
     | 
| 
      
 12 
     | 
    
         
            +
                        case params.keys.to_s
         
     | 
| 
      
 13 
     | 
    
         
            +
                        when 'js'
         
     | 
| 
      
 14 
     | 
    
         
            +
                          public_view(params[:js], 'js')
         
     | 
| 
      
 15 
     | 
    
         
            +
                        when 'css'
         
     | 
| 
      
 16 
     | 
    
         
            +
                          public_view(params[:css], 'css')
         
     | 
| 
      
 17 
     | 
    
         
            +
                        when 'img'
         
     | 
| 
      
 18 
     | 
    
         
            +
                          public_view(params[:img], 'images')
         
     | 
| 
      
 19 
     | 
    
         
            +
                        else
         
     | 
| 
      
 20 
     | 
    
         
            +
                          @sliders = Commander.new
         
     | 
| 
      
 21 
     | 
    
         
            +
                          slider_view :index
         
     | 
| 
      
 22 
     | 
    
         
            +
                        end
         
     | 
| 
      
 23 
     | 
    
         
            +
                      end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                      app.get '/sliders/:host' do
         
     | 
| 
      
 26 
     | 
    
         
            +
                        @sliders = Commander.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                        slider_view :index
         
     | 
| 
      
 28 
     | 
    
         
            +
                      end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                      app.post '/sliders/:host' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                        if params[:quantity] && params[:queue]
         
     | 
| 
      
 32 
     | 
    
         
            +
                          sliders = Commander.new
         
     | 
| 
      
 33 
     | 
    
         
            +
                          queue = params[:queue].split.first
         
     | 
| 
      
 34 
     | 
    
         
            +
                          quantity = params[:quantity].to_i
         
     | 
| 
      
 35 
     | 
    
         
            +
                          if quantity.zero?
         
     | 
| 
      
 36 
     | 
    
         
            +
                            sliders.delete(params[:host], queue)
         
     | 
| 
      
 37 
     | 
    
         
            +
                          else
         
     | 
| 
      
 38 
     | 
    
         
            +
                            sliders.change(params[:host], queue, quantity)
         
     | 
| 
      
 39 
     | 
    
         
            +
                          end
         
     | 
| 
      
 40 
     | 
    
         
            +
                        elsif params[:reload]
         
     | 
| 
      
 41 
     | 
    
         
            +
                          sliders = Commander.new
         
     | 
| 
      
 42 
     | 
    
         
            +
                          sliders.reload(params[:host])
         
     | 
| 
      
 43 
     | 
    
         
            +
                        end
         
     | 
| 
      
 44 
     | 
    
         
            +
                      end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                      app.helpers do
         
     | 
| 
      
 47 
     | 
    
         
            +
                        def slider_view(filename, options={}, locals={})
         
     | 
| 
      
 48 
     | 
    
         
            +
                          erb(File.read(File.join(VIEW_PATH, "#{filename}.erb")), options, locals)
         
     | 
| 
      
 49 
     | 
    
         
            +
                        end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                        def public_view(filename, dir='')
         
     | 
| 
      
 52 
     | 
    
         
            +
                          begin
         
     | 
| 
      
 53 
     | 
    
         
            +
                            cache_control :public, :max_age => 1800
         
     | 
| 
      
 54 
     | 
    
         
            +
                            file = File.join(PUBLIC_PATH, dir, filename)
         
     | 
| 
      
 55 
     | 
    
         
            +
                            send_file file, :last_modified => File.mtime(file)
         
     | 
| 
      
 56 
     | 
    
         
            +
                          rescue Errno::ENOENT
         
     | 
| 
      
 57 
     | 
    
         
            +
                            404
         
     | 
| 
      
 58 
     | 
    
         
            +
                          end
         
     | 
| 
      
 59 
     | 
    
         
            +
                        end
         
     | 
| 
      
 60 
     | 
    
         
            +
                      end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                      app.tabs << "Sliders"
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
            end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            Resque::Server.register Resque::Plugins::ResqueSliders::Server
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            $:.push File.expand_path("../lib", __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "resque-sliders/version"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 6 
     | 
    
         
            +
              s.name        = "resque-sliders"
         
     | 
| 
      
 7 
     | 
    
         
            +
              s.version     = Resque::Plugins::ResqueSliders::Version
         
     | 
| 
      
 8 
     | 
    
         
            +
              s.authors     = "Kevin Mullin"
         
     | 
| 
      
 9 
     | 
    
         
            +
              s.email       = "kevin@kpmullin.com"
         
     | 
| 
      
 10 
     | 
    
         
            +
              s.date        = Time.now.strftime('%Y-%m-%d')
         
     | 
| 
      
 11 
     | 
    
         
            +
              s.homepage    = "https://github.com/kmullin/resque-sliders"
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.summary     = %q{Resque-Sliders: a plugin for resque that controls which resque workers are running on each host, from within Resque-web}
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              s.add_runtime_dependency 'resque', '~> 1.15.0'
         
     | 
| 
      
 15 
     | 
    
         
            +
              s.extra_rdoc_files = ["README.md", "MIT-LICENSE"]
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              s.files         = `git ls-files`.split("\n")
         
     | 
| 
      
 18 
     | 
    
         
            +
              s.files        -= ['.rvmrc', '.gitignore']
         
     | 
| 
      
 19 
     | 
    
         
            +
              s.files        -= `git ls-files -- {misc,helpers}/*`.split("\n")
         
     | 
| 
      
 20 
     | 
    
         
            +
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         
     | 
| 
      
 21 
     | 
    
         
            +
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         
     | 
| 
      
 22 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 23 
     | 
    
         
            +
              s.description = <<description
         
     | 
| 
      
 24 
     | 
    
         
            +
                Resque-Sliders is a plugin for Resque that enables you to control multiple hosts'
         
     | 
| 
      
 25 
     | 
    
         
            +
                running resque workers with a monitor PID watching over them.  From the resque-web UI, you
         
     | 
| 
      
 26 
     | 
    
         
            +
                can add/delete/change which queues are running on each host running the monitor PID.
         
     | 
| 
      
 27 
     | 
    
         
            +
                Sliders are in the UI and allow you to adjust how many workers on either host should be running.
         
     | 
| 
      
 28 
     | 
    
         
            +
            description
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,115 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Redis configuration file example
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # By default Redis does not run as a daemon. Use 'yes' if you need it.
         
     | 
| 
      
 4 
     | 
    
         
            +
            # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
         
     | 
| 
      
 5 
     | 
    
         
            +
            daemonize yes
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            # When run as a daemon, Redis write a pid file in /var/run/redis.pid by default.
         
     | 
| 
      
 8 
     | 
    
         
            +
            # You can specify a custom pid file location here.
         
     | 
| 
      
 9 
     | 
    
         
            +
            pidfile ./test/redis-test.pid
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            # Accept connections on the specified port, default is 6379
         
     | 
| 
      
 12 
     | 
    
         
            +
            port 9736
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            # If you want you can bind a single interface, if the bind option is not
         
     | 
| 
      
 15 
     | 
    
         
            +
            # specified all the interfaces will listen for connections.
         
     | 
| 
      
 16 
     | 
    
         
            +
            #
         
     | 
| 
      
 17 
     | 
    
         
            +
            # bind 127.0.0.1
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            # Close the connection after a client is idle for N seconds (0 to disable)
         
     | 
| 
      
 20 
     | 
    
         
            +
            timeout 300
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            # Save the DB on disk:
         
     | 
| 
      
 23 
     | 
    
         
            +
            #
         
     | 
| 
      
 24 
     | 
    
         
            +
            #   save <seconds> <changes>
         
     | 
| 
      
 25 
     | 
    
         
            +
            #
         
     | 
| 
      
 26 
     | 
    
         
            +
            #   Will save the DB if both the given number of seconds and the given
         
     | 
| 
      
 27 
     | 
    
         
            +
            #   number of write operations against the DB occurred.
         
     | 
| 
      
 28 
     | 
    
         
            +
            #
         
     | 
| 
      
 29 
     | 
    
         
            +
            #   In the example below the behaviour will be to save:
         
     | 
| 
      
 30 
     | 
    
         
            +
            #   after 900 sec (15 min) if at least 1 key changed
         
     | 
| 
      
 31 
     | 
    
         
            +
            #   after 300 sec (5 min) if at least 10 keys changed
         
     | 
| 
      
 32 
     | 
    
         
            +
            #   after 60 sec if at least 10000 keys changed
         
     | 
| 
      
 33 
     | 
    
         
            +
            save 900 1
         
     | 
| 
      
 34 
     | 
    
         
            +
            save 300 10
         
     | 
| 
      
 35 
     | 
    
         
            +
            save 60 10000
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            # The filename where to dump the DB
         
     | 
| 
      
 38 
     | 
    
         
            +
            dbfilename dump.rdb
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            # For default save/load DB in/from the working directory
         
     | 
| 
      
 41 
     | 
    
         
            +
            # Note that you must specify a directory not a file name.
         
     | 
| 
      
 42 
     | 
    
         
            +
            dir ./test/
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            # Set server verbosity to 'debug'
         
     | 
| 
      
 45 
     | 
    
         
            +
            # it can be one of:
         
     | 
| 
      
 46 
     | 
    
         
            +
            # debug (a lot of information, useful for development/testing)
         
     | 
| 
      
 47 
     | 
    
         
            +
            # notice (moderately verbose, what you want in production probably)
         
     | 
| 
      
 48 
     | 
    
         
            +
            # warning (only very important / critical messages are logged)
         
     | 
| 
      
 49 
     | 
    
         
            +
            loglevel debug
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            # Specify the log file name. Also 'stdout' can be used to force
         
     | 
| 
      
 52 
     | 
    
         
            +
            # the demon to log on the standard output. Note that if you use standard
         
     | 
| 
      
 53 
     | 
    
         
            +
            # output for logging but daemonize, logs will be sent to /dev/null
         
     | 
| 
      
 54 
     | 
    
         
            +
            logfile stdout
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            # Set the number of databases. The default database is DB 0, you can select
         
     | 
| 
      
 57 
     | 
    
         
            +
            # a different one on a per-connection basis using SELECT <dbid> where
         
     | 
| 
      
 58 
     | 
    
         
            +
            # dbid is a number between 0 and 'databases'-1
         
     | 
| 
      
 59 
     | 
    
         
            +
            databases 16
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            ################################# REPLICATION #################################
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            # Master-Slave replication. Use slaveof to make a Redis instance a copy of
         
     | 
| 
      
 64 
     | 
    
         
            +
            # another Redis server. Note that the configuration is local to the slave
         
     | 
| 
      
 65 
     | 
    
         
            +
            # so for example it is possible to configure the slave to save the DB with a
         
     | 
| 
      
 66 
     | 
    
         
            +
            # different interval, or to listen to another port, and so on.
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            # slaveof <masterip> <masterport>
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            ################################## SECURITY ###################################
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            # Require clients to issue AUTH <PASSWORD> before processing any other
         
     | 
| 
      
 73 
     | 
    
         
            +
            # commands.  This might be useful in environments in which you do not trust
         
     | 
| 
      
 74 
     | 
    
         
            +
            # others with access to the host running redis-server.
         
     | 
| 
      
 75 
     | 
    
         
            +
            #
         
     | 
| 
      
 76 
     | 
    
         
            +
            # This should stay commented out for backward compatibility and because most
         
     | 
| 
      
 77 
     | 
    
         
            +
            # people do not need auth (e.g. they run their own servers).
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
            # requirepass foobared
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
            ################################### LIMITS ####################################
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            # Set the max number of connected clients at the same time. By default there
         
     | 
| 
      
 84 
     | 
    
         
            +
            # is no limit, and it's up to the number of file descriptors the Redis process
         
     | 
| 
      
 85 
     | 
    
         
            +
            # is able to open. The special value '0' means no limts.
         
     | 
| 
      
 86 
     | 
    
         
            +
            # Once the limit is reached Redis will close all the new connections sending
         
     | 
| 
      
 87 
     | 
    
         
            +
            # an error 'max number of clients reached'.
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            # maxclients 128
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            # Don't use more memory than the specified amount of bytes.
         
     | 
| 
      
 92 
     | 
    
         
            +
            # When the memory limit is reached Redis will try to remove keys with an
         
     | 
| 
      
 93 
     | 
    
         
            +
            # EXPIRE set. It will try to start freeing keys that are going to expire
         
     | 
| 
      
 94 
     | 
    
         
            +
            # in little time and preserve keys with a longer time to live.
         
     | 
| 
      
 95 
     | 
    
         
            +
            # Redis will also try to remove objects from free lists if possible.
         
     | 
| 
      
 96 
     | 
    
         
            +
            #
         
     | 
| 
      
 97 
     | 
    
         
            +
            # If all this fails, Redis will start to reply with errors to commands
         
     | 
| 
      
 98 
     | 
    
         
            +
            # that will use more memory, like SET, LPUSH, and so on, and will continue
         
     | 
| 
      
 99 
     | 
    
         
            +
            # to reply to most read-only commands like GET.
         
     | 
| 
      
 100 
     | 
    
         
            +
            #
         
     | 
| 
      
 101 
     | 
    
         
            +
            # WARNING: maxmemory can be a good idea mainly if you want to use Redis as a
         
     | 
| 
      
 102 
     | 
    
         
            +
            # 'state' server or cache, not as a real DB. When Redis is used as a real
         
     | 
| 
      
 103 
     | 
    
         
            +
            # database the memory usage will grow over the weeks, it will be obvious if
         
     | 
| 
      
 104 
     | 
    
         
            +
            # it is going to use too much memory in the long run, and you'll have the time
         
     | 
| 
      
 105 
     | 
    
         
            +
            # to upgrade. With maxmemory after the limit is reached you'll start to get
         
     | 
| 
      
 106 
     | 
    
         
            +
            # errors for write operations, and this may even lead to DB inconsistency.
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            # maxmemory <bytes>
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            ############################### ADVANCED CONFIG ###############################
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            # Glue small output buffers together in order to send small replies in a
         
     | 
| 
      
 113 
     | 
    
         
            +
            # single TCP packet. Uses a bit more CPU but most of the times it is a win
         
     | 
| 
      
 114 
     | 
    
         
            +
            # in terms of number of queries per second. Use 'yes' if unsure.
         
     | 
| 
      
 115 
     | 
    
         
            +
            glueoutputbuf yes
         
     | 
    
        data/test/test_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Mostly copied from Resque in order to have similar test environment.
         
     | 
| 
      
 2 
     | 
    
         
            +
            # https://github.com/defunkt/resque/blob/master/test/test_helper.rb
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            dir = File.dirname(File.expand_path(__FILE__))
         
     | 
| 
      
 5 
     | 
    
         
            +
            $LOAD_PATH.unshift dir + '/../lib'
         
     | 
| 
      
 6 
     | 
    
         
            +
            $TESTING = true
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'resque'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            begin
         
     | 
| 
      
 12 
     | 
    
         
            +
              require 'leftright'
         
     | 
| 
      
 13 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
      
 15 
     | 
    
         
            +
            require 'resque'
         
     | 
| 
      
 16 
     | 
    
         
            +
            require 'resque-sliders'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            #
         
     | 
| 
      
 19 
     | 
    
         
            +
            # make sure we can run redis
         
     | 
| 
      
 20 
     | 
    
         
            +
            #
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            if !system("which redis-server")
         
     | 
| 
      
 23 
     | 
    
         
            +
              puts '', "** can't find `redis-server` in your path"
         
     | 
| 
      
 24 
     | 
    
         
            +
              puts "** try running `sudo rake install`"
         
     | 
| 
      
 25 
     | 
    
         
            +
              abort ''
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            #
         
     | 
| 
      
 30 
     | 
    
         
            +
            # start our own redis when the tests start,
         
     | 
| 
      
 31 
     | 
    
         
            +
            # kill it when they end
         
     | 
| 
      
 32 
     | 
    
         
            +
            #
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            at_exit do
         
     | 
| 
      
 35 
     | 
    
         
            +
              next if $!
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              if defined?(MiniTest)
         
     | 
| 
      
 38 
     | 
    
         
            +
                exit_code = MiniTest::Unit.new.run(ARGV)
         
     | 
| 
      
 39 
     | 
    
         
            +
              else
         
     | 
| 
      
 40 
     | 
    
         
            +
                exit_code = Test::Unit::AutoRunner.run
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              pid = `ps -A -o pid,command | grep [r]edis-test`.split(" ")[0]
         
     | 
| 
      
 44 
     | 
    
         
            +
              puts "Killing test redis server..."
         
     | 
| 
      
 45 
     | 
    
         
            +
              `rm -f #{dir}/dump.rdb`
         
     | 
| 
      
 46 
     | 
    
         
            +
              Process.kill("KILL", pid.to_i)
         
     | 
| 
      
 47 
     | 
    
         
            +
              exit exit_code
         
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            puts "Starting redis for testing at localhost:9736..."
         
     | 
| 
      
 51 
     | 
    
         
            +
            `redis-server #{dir}/redis-test.conf`
         
     | 
| 
      
 52 
     | 
    
         
            +
            Resque.redis = 'localhost:9736'
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            ##
         
     | 
| 
      
 56 
     | 
    
         
            +
            # test/spec/mini 3
         
     | 
| 
      
 57 
     | 
    
         
            +
            # http://gist.github.com/25455
         
     | 
| 
      
 58 
     | 
    
         
            +
            # chris@ozmm.org
         
     | 
| 
      
 59 
     | 
    
         
            +
            # file:lib/test/spec/mini.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            #
         
     | 
| 
      
 61 
     | 
    
         
            +
            def context(*args, &block)
         
     | 
| 
      
 62 
     | 
    
         
            +
              return super unless (name = args.first) && block
         
     | 
| 
      
 63 
     | 
    
         
            +
              require 'test/unit'
         
     | 
| 
      
 64 
     | 
    
         
            +
              klass = Class.new(defined?(ActiveSupport::TestCase) ? ActiveSupport::TestCase : Test::Unit::TestCase) do
         
     | 
| 
      
 65 
     | 
    
         
            +
                def self.test(name, &block)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  define_method("test_#{name.gsub(/\W/,'_')}", &block) if block
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
                def self.xtest(*args) end
         
     | 
| 
      
 69 
     | 
    
         
            +
                def self.setup(&block) define_method(:setup, &block) end
         
     | 
| 
      
 70 
     | 
    
         
            +
                def self.teardown(&block) define_method(:teardown, &block) end
         
     | 
| 
      
 71 
     | 
    
         
            +
              end
         
     | 
| 
      
 72 
     | 
    
         
            +
              (class << klass; self end).send(:define_method, :name) { name.gsub(/\W/,'_') }
         
     | 
| 
      
 73 
     | 
    
         
            +
              klass.class_eval &block
         
     | 
| 
      
 74 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,117 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: resque-sliders
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 23
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: 
         
     | 
| 
      
 6 
     | 
    
         
            +
              segments: 
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 4
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.0.4
         
     | 
| 
      
 11 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 12 
     | 
    
         
            +
            authors: 
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Kevin Mullin
         
     | 
| 
      
 14 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 15 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 16 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2012-01-05 00:00:00 -08:00
         
     | 
| 
      
 19 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 20 
     | 
    
         
            +
            dependencies: 
         
     | 
| 
      
 21 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 22 
     | 
    
         
            +
              name: resque
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 24 
     | 
    
         
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 25 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 26 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 27 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 29 
     | 
    
         
            +
                    hash: 43
         
     | 
| 
      
 30 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 31 
     | 
    
         
            +
                    - 1
         
     | 
| 
      
 32 
     | 
    
         
            +
                    - 15
         
     | 
| 
      
 33 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 34 
     | 
    
         
            +
                    version: 1.15.0
         
     | 
| 
      
 35 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: *id001
         
     | 
| 
      
 37 
     | 
    
         
            +
            description: "    Resque-Sliders is a plugin for Resque that enables you to control multiple hosts'\n    running resque workers with a monitor PID watching over them.  From the resque-web UI, you\n    can add/delete/change which queues are running on each host running the monitor PID.\n    Sliders are in the UI and allow you to adjust how many workers on either host should be running.\n"
         
     | 
| 
      
 38 
     | 
    
         
            +
            email: kevin@kpmullin.com
         
     | 
| 
      
 39 
     | 
    
         
            +
            executables: 
         
     | 
| 
      
 40 
     | 
    
         
            +
            - kewatcher
         
     | 
| 
      
 41 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            extra_rdoc_files: 
         
     | 
| 
      
 44 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 45 
     | 
    
         
            +
            - MIT-LICENSE
         
     | 
| 
      
 46 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 47 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 48 
     | 
    
         
            +
            - MIT-LICENSE
         
     | 
| 
      
 49 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 50 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 51 
     | 
    
         
            +
            - bin/kewatcher
         
     | 
| 
      
 52 
     | 
    
         
            +
            - config/config_example.yml
         
     | 
| 
      
 53 
     | 
    
         
            +
            - lib/resque-sliders.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - lib/resque-sliders/commander.rb
         
     | 
| 
      
 55 
     | 
    
         
            +
            - lib/resque-sliders/helpers.rb
         
     | 
| 
      
 56 
     | 
    
         
            +
            - lib/resque-sliders/kewatcher.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
            - lib/resque-sliders/server.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - lib/resque-sliders/server/public/css/jqueryui-1.8.16/blitzer/jquery-ui.custom.css
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/resque-sliders/server/public/css/sliders.css
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_dots-small_65_a6a6a6_2x2.png
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_flat_0_333333_40x100.png
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_flat_65_ffffff_40x100.png
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_flat_75_ffffff_40x100.png
         
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_glass_55_fbf8ee_1x400.png
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_highlight-hard_100_eeeeee_1x100.png
         
     | 
| 
      
 67 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png
         
     | 
| 
      
 68 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-bg_highlight-soft_15_cc0000_1x100.png
         
     | 
| 
      
 69 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-icons_004276_256x240.png
         
     | 
| 
      
 70 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-icons_cc0000_256x240.png
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib/resque-sliders/server/public/images/ui-icons_ffffff_256x240.png
         
     | 
| 
      
 72 
     | 
    
         
            +
            - lib/resque-sliders/server/public/js/jquery-ui-1.8.16.custom.min.js
         
     | 
| 
      
 73 
     | 
    
         
            +
            - lib/resque-sliders/server/public/js/sliders.js
         
     | 
| 
      
 74 
     | 
    
         
            +
            - lib/resque-sliders/server/views/index.erb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - lib/resque-sliders/version.rb
         
     | 
| 
      
 76 
     | 
    
         
            +
            - resque-sliders.gemspec
         
     | 
| 
      
 77 
     | 
    
         
            +
            - test/redis-test.conf
         
     | 
| 
      
 78 
     | 
    
         
            +
            - test/resque-sliders_test.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - test/test_helper.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
            has_rdoc: true
         
     | 
| 
      
 81 
     | 
    
         
            +
            homepage: https://github.com/kmullin/resque-sliders
         
     | 
| 
      
 82 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 85 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 88 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 89 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 90 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 91 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 92 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 93 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 94 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 95 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 96 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 97 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 98 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 99 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 100 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 101 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 102 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 103 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 104 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 105 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 106 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 107 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 110 
     | 
    
         
            +
            rubygems_version: 1.5.2
         
     | 
| 
      
 111 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 112 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 113 
     | 
    
         
            +
            summary: "Resque-Sliders: a plugin for resque that controls which resque workers are running on each host, from within Resque-web"
         
     | 
| 
      
 114 
     | 
    
         
            +
            test_files: 
         
     | 
| 
      
 115 
     | 
    
         
            +
            - test/redis-test.conf
         
     | 
| 
      
 116 
     | 
    
         
            +
            - test/resque-sliders_test.rb
         
     | 
| 
      
 117 
     | 
    
         
            +
            - test/test_helper.rb
         
     |