sidekiq 5.2.1 → 6.0.7

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq might be problematic. Click here for more details.

Files changed (86) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +60 -0
  3. data/.gitignore +1 -1
  4. data/.standard.yml +20 -0
  5. data/6.0-Upgrade.md +72 -0
  6. data/COMM-LICENSE +11 -9
  7. data/Changes.md +209 -0
  8. data/Ent-2.0-Upgrade.md +37 -0
  9. data/Ent-Changes.md +36 -1
  10. data/Gemfile +19 -9
  11. data/Gemfile.lock +208 -0
  12. data/Pro-5.0-Upgrade.md +25 -0
  13. data/Pro-Changes.md +44 -1
  14. data/README.md +19 -31
  15. data/Rakefile +6 -4
  16. data/bin/sidekiq +19 -0
  17. data/bin/sidekiqload +33 -25
  18. data/bin/sidekiqmon +8 -0
  19. data/lib/generators/sidekiq/templates/worker_test.rb.erb +1 -1
  20. data/lib/generators/sidekiq/worker_generator.rb +21 -13
  21. data/lib/sidekiq/api.rb +240 -214
  22. data/lib/sidekiq/cli.rb +167 -219
  23. data/lib/sidekiq/client.rb +61 -46
  24. data/lib/sidekiq/delay.rb +5 -6
  25. data/lib/sidekiq/exception_handler.rb +10 -12
  26. data/lib/sidekiq/extensions/action_mailer.rb +10 -20
  27. data/lib/sidekiq/extensions/active_record.rb +9 -7
  28. data/lib/sidekiq/extensions/class_methods.rb +9 -7
  29. data/lib/sidekiq/extensions/generic_proxy.rb +4 -4
  30. data/lib/sidekiq/fetch.rb +11 -12
  31. data/lib/sidekiq/job_logger.rb +47 -9
  32. data/lib/sidekiq/job_retry.rb +79 -58
  33. data/lib/sidekiq/launcher.rb +86 -54
  34. data/lib/sidekiq/logger.rb +165 -0
  35. data/lib/sidekiq/manager.rb +10 -12
  36. data/lib/sidekiq/middleware/chain.rb +14 -4
  37. data/lib/sidekiq/middleware/i18n.rb +5 -7
  38. data/lib/sidekiq/monitor.rb +133 -0
  39. data/lib/sidekiq/paginator.rb +18 -14
  40. data/lib/sidekiq/processor.rb +113 -79
  41. data/lib/sidekiq/rails.rb +24 -29
  42. data/lib/sidekiq/redis_connection.rb +42 -24
  43. data/lib/sidekiq/scheduled.rb +28 -29
  44. data/lib/sidekiq/sd_notify.rb +149 -0
  45. data/lib/sidekiq/systemd.rb +24 -0
  46. data/lib/sidekiq/testing/inline.rb +2 -1
  47. data/lib/sidekiq/testing.rb +34 -23
  48. data/lib/sidekiq/util.rb +17 -16
  49. data/lib/sidekiq/version.rb +2 -1
  50. data/lib/sidekiq/web/action.rb +14 -10
  51. data/lib/sidekiq/web/application.rb +79 -69
  52. data/lib/sidekiq/web/helpers.rb +89 -71
  53. data/lib/sidekiq/web/router.rb +17 -16
  54. data/lib/sidekiq/web.rb +41 -49
  55. data/lib/sidekiq/worker.rb +134 -91
  56. data/lib/sidekiq.rb +69 -44
  57. data/sidekiq.gemspec +16 -18
  58. data/web/assets/javascripts/application.js +22 -19
  59. data/web/assets/javascripts/dashboard.js +16 -25
  60. data/web/assets/stylesheets/application-dark.css +122 -0
  61. data/web/assets/stylesheets/application.css +44 -2
  62. data/web/assets/stylesheets/bootstrap.css +1 -1
  63. data/web/locales/ar.yml +1 -0
  64. data/web/locales/de.yml +14 -2
  65. data/web/locales/en.yml +3 -0
  66. data/web/locales/fr.yml +2 -2
  67. data/web/locales/ja.yml +4 -1
  68. data/web/locales/lt.yml +83 -0
  69. data/web/locales/vi.yml +83 -0
  70. data/web/views/_job_info.erb +2 -1
  71. data/web/views/_nav.erb +3 -17
  72. data/web/views/busy.erb +4 -1
  73. data/web/views/dead.erb +2 -2
  74. data/web/views/layout.erb +1 -0
  75. data/web/views/morgue.erb +4 -1
  76. data/web/views/queue.erb +11 -1
  77. data/web/views/queues.erb +9 -1
  78. data/web/views/retries.erb +8 -1
  79. data/web/views/retry.erb +2 -2
  80. data/web/views/scheduled.erb +4 -1
  81. metadata +37 -27
  82. data/.travis.yml +0 -14
  83. data/bin/sidekiqctl +0 -99
  84. data/lib/sidekiq/core_ext.rb +0 -1
  85. data/lib/sidekiq/logging.rb +0 -122
  86. data/lib/sidekiq/middleware/server/active_record.rb +0 -23
@@ -16,10 +16,8 @@ var gridSize=(this.orientation=="right"?1:-1)*this.graph.width;this.graph.vis.ap
16
16
  var nodes=vis.selectAll("path").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:rect").attr("x",function(d){return graph.x(d.x)+barXOffset}).attr("y",function(d){return graph.y(d.y0+Math.abs(d.y))*(d.y<0?-1:1)}).attr("width",seriesBarWidth).attr("height",function(d){return graph.y.magnitude(Math.abs(d.y))}).attr("opacity",series.opacity).attr("transform",transform);Array.prototype.forEach.call(nodes[0],function(n){n.setAttribute("fill",series.color)});if(this.unstack)barXOffset+=seriesBarWidth},this)},_frequentInterval:function(data){var intervalCounts={};for(var i=0;i<data.length-1;i++){var interval=data[i+1].x-data[i].x;intervalCounts[interval]=intervalCounts[interval]||0;intervalCounts[interval]++}var frequentInterval={count:0,magnitude:1};var keysSorted=Rickshaw.keys(intervalCounts).sort(function asc(a,b){return Number(a)-Number(b)});keysSorted.forEach(function(i){if(frequentInterval.count<intervalCounts[i]){frequentInterval={count:intervalCounts[i],magnitude:i}}});return frequentInterval}});Rickshaw.namespace("Rickshaw.Graph.Renderer.Area");Rickshaw.Graph.Renderer.Area=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"area",defaults:function($super){return Rickshaw.extend($super(),{unstack:false,fill:false,stroke:false})},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.area().x(function(d){return graph.x(d.x)}).y0(function(d){return graph.y(d.y0)}).y1(function(d){return graph.y(d.y+d.y0)}).interpolate(graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory},seriesStrokeFactory:function(){var graph=this.graph;var factory=d3.svg.line().x(function(d){return graph.x(d.x)}).y(function(d){return graph.y(d.y+d.y0)}).interpolate(graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;vis.selectAll("*").remove();var method=this.unstack?"append":"insert";var data=series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});var nodes=vis.selectAll("path").data(data).enter()[method]("svg:g","g");nodes.append("svg:path").attr("d",this.seriesPathFactory()).attr("class","area");if(this.stroke){nodes.append("svg:path").attr("d",this.seriesStrokeFactory()).attr("class","line")}var i=0;series.forEach(function(series){if(series.disabled)return;series.path=nodes[0][i++];this._styleSeries(series)},this)},_styleSeries:function(series){if(!series.path)return;d3.select(series.path).select(".area").attr("fill",series.color);if(this.stroke){d3.select(series.path).select(".line").attr("fill","none").attr("stroke",series.stroke||d3.interpolateRgb(series.color,"black")(.125)).attr("stroke-width",this.strokeWidth)}if(series.className){series.path.setAttribute("class",series.className)}}});Rickshaw.namespace("Rickshaw.Graph.Renderer.ScatterPlot");Rickshaw.Graph.Renderer.ScatterPlot=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"scatterplot",defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:true,stroke:false,padding:{top:.01,right:.01,bottom:.01,left:.01},dotSize:4})},initialize:function($super,args){$super(args)},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;var dotSize=this.dotSize;vis.selectAll("*").remove();series.forEach(function(series){if(series.disabled)return;var opacity=series.opacity?series.opacity:1;var nodes=vis.selectAll("path").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:circle").attr("cx",function(d){return graph.x(d.x)}).attr("cy",function(d){return graph.y(d.y)}).attr("r",function(d){return"r"in d?d.r:dotSize}).attr("opacity",function(d){return"opacity"in d?d.opacity:opacity});if(series.className){nodes.classed(series.className,true)}Array.prototype.forEach.call(nodes[0],function(n){n.setAttribute("fill",series.color)})},this)}});Rickshaw.namespace("Rickshaw.Graph.Renderer.Multi");Rickshaw.Graph.Renderer.Multi=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"multi",initialize:function($super,args){$super(args)},defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:false,stroke:true})},configure:function($super,args){args=args||{};this.config=args;$super(args)},domain:function($super){this.graph.stackData();var domains=[];var groups=this._groups();this._stack(groups);groups.forEach(function(group){var data=group.series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});if(!data.length)return;var domain=null;if(group.renderer&&group.renderer.domain){domain=group.renderer.domain(data)}else{domain=$super(data)}domains.push(domain)});var xMin=d3.min(domains.map(function(d){return d.x[0]}));var xMax=d3.max(domains.map(function(d){return d.x[1]}));var yMin=d3.min(domains.map(function(d){return d.y[0]}));var yMax=d3.max(domains.map(function(d){return d.y[1]}));return{x:[xMin,xMax],y:[yMin,yMax]}},_groups:function(){var graph=this.graph;var renderGroups={};graph.series.forEach(function(series){if(series.disabled)return;if(!renderGroups[series.renderer]){var ns="http://www.w3.org/2000/svg";var vis=document.createElementNS(ns,"g");graph.vis[0][0].appendChild(vis);var renderer=graph._renderers[series.renderer];var config={};var defaults=[this.defaults(),renderer.defaults(),this.config,this.graph];defaults.forEach(function(d){Rickshaw.extend(config,d)});renderer.configure(config);renderGroups[series.renderer]={renderer:renderer,series:[],vis:d3.select(vis)}}renderGroups[series.renderer].series.push(series)},this);var groups=[];Object.keys(renderGroups).forEach(function(key){var group=renderGroups[key];groups.push(group)});return groups},_stack:function(groups){groups.forEach(function(group){var series=group.series.filter(function(series){return!series.disabled});var data=series.map(function(series){return series.stack});if(!group.renderer.unstack){var layout=d3.layout.stack();var stackedData=Rickshaw.clone(layout(data));series.forEach(function(series,index){series._stack=Rickshaw.clone(stackedData[index])})}},this);return groups},render:function(){this.graph.series.forEach(function(series){if(!series.renderer){throw new Error("Each series needs a renderer for graph 'multi' renderer")}});this.graph.vis.selectAll("*").remove();var groups=this._groups();groups=this._stack(groups);groups.forEach(function(group){var series=group.series.filter(function(series){return!series.disabled});series.active=function(){return series};group.renderer.render({series:series,vis:group.vis});series.forEach(function(s){s.stack=s._stack||s.stack||s.data})})}});Rickshaw.namespace("Rickshaw.Graph.Renderer.LinePlot");Rickshaw.Graph.Renderer.LinePlot=Rickshaw.Class.create(Rickshaw.Graph.Renderer,{name:"lineplot",defaults:function($super){return Rickshaw.extend($super(),{unstack:true,fill:false,stroke:true,padding:{top:.01,right:.01,bottom:.01,left:.01},dotSize:3,strokeWidth:2})},seriesPathFactory:function(){var graph=this.graph;var factory=d3.svg.line().x(function(d){return graph.x(d.x)}).y(function(d){return graph.y(d.y)}).interpolate(this.graph.interpolation).tension(this.tension);factory.defined&&factory.defined(function(d){return d.y!==null});return factory},render:function(args){args=args||{};var graph=this.graph;var series=args.series||graph.series;var vis=args.vis||graph.vis;var dotSize=this.dotSize;vis.selectAll("*").remove();var data=series.filter(function(s){return!s.disabled}).map(function(s){return s.stack});var nodes=vis.selectAll("path").data(data).enter().append("svg:path").attr("d",this.seriesPathFactory());var i=0;series.forEach(function(series){if(series.disabled)return;series.path=nodes[0][i++];this._styleSeries(series)},this);series.forEach(function(series){if(series.disabled)return;var nodes=vis.selectAll("x").data(series.stack.filter(function(d){return d.y!==null})).enter().append("svg:circle").attr("cx",function(d){return graph.x(d.x)}).attr("cy",function(d){return graph.y(d.y)}).attr("r",function(d){return"r"in d?d.r:dotSize});Array.prototype.forEach.call(nodes[0],function(n){if(!n)return;n.setAttribute("data-color",series.color);n.setAttribute("fill","white");n.setAttribute("stroke",series.color);n.setAttribute("stroke-width",this.strokeWidth)}.bind(this))},this)}});Rickshaw.namespace("Rickshaw.Graph.Smoother");Rickshaw.Graph.Smoother=Rickshaw.Class.create({initialize:function(args){this.graph=args.graph;this.element=args.element;this.aggregationScale=1;this.build();this.graph.stackData.hooks.data.push({name:"smoother",orderPosition:50,f:this.transformer.bind(this)})},build:function(){var self=this;var $=jQuery;if(this.element){$(function(){$(self.element).slider({min:1,max:100,slide:function(event,ui){self.setScale(ui.value)}})})}},setScale:function(scale){if(scale<1){throw"scale out of range: "+scale}this.aggregationScale=scale;this.graph.update()},transformer:function(data){if(this.aggregationScale==1)return data;var aggregatedData=[];data.forEach(function(seriesData){var aggregatedSeriesData=[];while(seriesData.length){var avgX=0,avgY=0;var slice=seriesData.splice(0,this.aggregationScale);slice.forEach(function(d){avgX+=d.x/slice.length;avgY+=d.y/slice.length});aggregatedSeriesData.push({x:avgX,y:avgY})}aggregatedData.push(aggregatedSeriesData)}.bind(this));return aggregatedData}});Rickshaw.namespace("Rickshaw.Graph.Socketio");Rickshaw.Graph.Socketio=Rickshaw.Class.create(Rickshaw.Graph.Ajax,{request:function(){var socket=io.connect(this.dataURL);var self=this;socket.on("rickshaw",function(data){self.success(data)})}});Rickshaw.namespace("Rickshaw.Series");Rickshaw.Series=Rickshaw.Class.create(Array,{initialize:function(data,palette,options){options=options||{};this.palette=new Rickshaw.Color.Palette(palette);this.timeBase=typeof options.timeBase==="undefined"?Math.floor((new Date).getTime()/1e3):options.timeBase;var timeInterval=typeof options.timeInterval=="undefined"?1e3:options.timeInterval;this.setTimeInterval(timeInterval);if(data&&typeof data=="object"&&Array.isArray(data)){data.forEach(function(item){this.addItem(item)},this)}},addItem:function(item){if(typeof item.name==="undefined"){throw"addItem() needs a name"}item.color=item.color||this.palette.color(item.name);item.data=item.data||[];if(item.data.length===0&&this.length&&this.getIndex()>0){this[0].data.forEach(function(plot){item.data.push({x:plot.x,y:0})})}else if(item.data.length===0){item.data.push({x:this.timeBase-(this.timeInterval||0),y:0})}this.push(item);if(this.legend){this.legend.addLine(this.itemByName(item.name))}},addData:function(data,x){var index=this.getIndex();Rickshaw.keys(data).forEach(function(name){if(!this.itemByName(name)){this.addItem({name:name})}},this);this.forEach(function(item){item.data.push({x:x||(index*this.timeInterval||1)+this.timeBase,y:data[item.name]||0})},this)},getIndex:function(){return this[0]&&this[0].data&&this[0].data.length?this[0].data.length:0},itemByName:function(name){for(var i=0;i<this.length;i++){if(this[i].name==name)return this[i]}},setTimeInterval:function(iv){this.timeInterval=iv/1e3},setTimeBase:function(t){this.timeBase=t},dump:function(){var data={timeBase:this.timeBase,timeInterval:this.timeInterval,items:[]};this.forEach(function(item){var newItem={color:item.color,name:item.name,data:[]};item.data.forEach(function(plot){newItem.data.push({x:plot.x,y:plot.y})});data.items.push(newItem)});return data},load:function(data){if(data.timeInterval){this.timeInterval=data.timeInterval}if(data.timeBase){this.timeBase=data.timeBase}if(data.items){data.items.forEach(function(item){this.push(item);if(this.legend){this.legend.addLine(this.itemByName(item.name))}},this)}}});Rickshaw.Series.zeroFill=function(series){Rickshaw.Series.fill(series,0)};Rickshaw.Series.fill=function(series,fill){var x;var i=0;var data=series.map(function(s){return s.data});while(i<Math.max.apply(null,data.map(function(d){return d.length}))){x=Math.min.apply(null,data.filter(function(d){return d[i]}).map(function(d){return d[i].x}));data.forEach(function(d){if(!d[i]||d[i].x!=x){d.splice(i,0,{x:x,y:fill})}});i++}};Rickshaw.namespace("Rickshaw.Series.FixedDuration");Rickshaw.Series.FixedDuration=Rickshaw.Class.create(Rickshaw.Series,{initialize:function(data,palette,options){options=options||{};if(typeof options.timeInterval==="undefined"){throw new Error("FixedDuration series requires timeInterval")}if(typeof options.maxDataPoints==="undefined"){throw new Error("FixedDuration series requires maxDataPoints")}this.palette=new Rickshaw.Color.Palette(palette);this.timeBase=typeof options.timeBase==="undefined"?Math.floor((new Date).getTime()/1e3):options.timeBase;this.setTimeInterval(options.timeInterval);if(this[0]&&this[0].data&&this[0].data.length){this.currentSize=this[0].data.length;this.currentIndex=this[0].data.length}else{this.currentSize=0;this.currentIndex=0}this.maxDataPoints=options.maxDataPoints;if(data&&typeof data=="object"&&Array.isArray(data)){data.forEach(function(item){this.addItem(item)},this);this.currentSize+=1;this.currentIndex+=1}this.timeBase-=(this.maxDataPoints-this.currentSize)*this.timeInterval;if(typeof this.maxDataPoints!=="undefined"&&this.currentSize<this.maxDataPoints){for(var i=this.maxDataPoints-this.currentSize-1;i>1;i--){this.currentSize+=1;this.currentIndex+=1;this.forEach(function(item){item.data.unshift({x:((i-1)*this.timeInterval||1)+this.timeBase,y:0,i:i})},this)}}},addData:function($super,data,x){$super(data,x);this.currentSize+=1;this.currentIndex+=1;if(this.maxDataPoints!==undefined){while(this.currentSize>this.maxDataPoints){this.dropData()}}},dropData:function(){this.forEach(function(item){item.data.splice(0,1)});this.currentSize-=1},getIndex:function(){return this.currentIndex}});return Rickshaw});
17
17
 
18
18
  var poller;
19
-
20
19
  var realtimeGraph = function(updatePath) {
21
20
  var timeInterval = parseInt(localStorage.timeInterval || '5000');
22
-
23
21
  var graphElement = document.getElementById("realtime");
24
22
 
25
23
  var graph = new Rickshaw.Graph( {
@@ -29,9 +27,9 @@ var realtimeGraph = function(updatePath) {
29
27
  renderer: 'line',
30
28
  interpolation: 'linear',
31
29
 
32
- series: new Rickshaw.Series.FixedDuration([{ name: graphElement.dataset.failedLabel, color: '#B1003E' }, { name: graphElement.dataset.processedLabel, color: '#006f68' }], undefined, {
33
- timeInterval: timeInterval,
34
- maxDataPoints: 100,
30
+ series: new Rickshaw.Series.FixedDuration([{ name: graphElement.dataset.failedLabel, color: '#af0014' }, { name: graphElement.dataset.processedLabel, color: '#006f68' }], undefined, {
31
+ timeInterval: timeInterval,
32
+ maxDataPoints: 100,
35
33
  })
36
34
  });
37
35
 
@@ -46,7 +44,6 @@ var realtimeGraph = function(updatePath) {
46
44
  var legend = document.querySelector('#realtime-legend');
47
45
  var Hover = Rickshaw.Class.create(Rickshaw.Graph.HoverDetail, {
48
46
  render: function(args) {
49
-
50
47
  legend.innerHTML = "";
51
48
 
52
49
  var timestamp = document.createElement('div');
@@ -68,7 +65,6 @@ var realtimeGraph = function(updatePath) {
68
65
 
69
66
  line.appendChild(swatch);
70
67
  line.appendChild(label);
71
-
72
68
  legend.appendChild(line);
73
69
 
74
70
  var dot = document.createElement('div');
@@ -77,11 +73,8 @@ var realtimeGraph = function(updatePath) {
77
73
  dot.style.borderColor = d.series.color;
78
74
 
79
75
  this.element.appendChild(dot);
80
-
81
76
  dot.className = 'dot active';
82
-
83
77
  this.show();
84
-
85
78
  }, this );
86
79
  }
87
80
  });
@@ -90,7 +83,6 @@ var realtimeGraph = function(updatePath) {
90
83
  var i = 0;
91
84
  poller = setInterval(function() {
92
85
  $.getJSON($("#history").data("update-url"), function(data) {
93
-
94
86
  if (i === 0) {
95
87
  var processed = data.sidekiq.processed;
96
88
  var failed = data.sidekiq.failed;
@@ -133,7 +125,7 @@ var historyGraph = function() {
133
125
  interpolation: 'linear',
134
126
  series: [
135
127
  {
136
- color: "#B1003E",
128
+ color: "#af0014",
137
129
  data: failed,
138
130
  name: graphElement.dataset.failedLabel
139
131
  }, {
@@ -144,7 +136,6 @@ var historyGraph = function() {
144
136
  ]
145
137
  } );
146
138
  var x_axis = new Rickshaw.Graph.Axis.Time( { graph: graph } );
147
-
148
139
  var y_axis = new Rickshaw.Graph.Axis.Y({
149
140
  graph: graph,
150
141
  tickFormat: Rickshaw.Fixtures.Number.formatKMBT,
@@ -156,7 +147,6 @@ var historyGraph = function() {
156
147
  var legend = document.querySelector('#history-legend');
157
148
  var Hover = Rickshaw.Class.create(Rickshaw.Graph.HoverDetail, {
158
149
  render: function(args) {
159
-
160
150
  legend.innerHTML = "";
161
151
 
162
152
  var timestamp = document.createElement('div');
@@ -178,7 +168,6 @@ var historyGraph = function() {
178
168
 
179
169
  line.appendChild(swatch);
180
170
  line.appendChild(label);
181
-
182
171
  legend.appendChild(line);
183
172
 
184
173
  var dot = document.createElement('div');
@@ -187,11 +176,8 @@ var historyGraph = function() {
187
176
  dot.style.borderColor = d.series.color;
188
177
 
189
178
  this.element.appendChild(dot);
190
-
191
179
  dot.className = 'dot active';
192
-
193
180
  this.show();
194
-
195
181
  }, this );
196
182
  }
197
183
  });
@@ -216,7 +202,6 @@ var updateStatsSummary = function(data) {
216
202
  $('ul.summary li.retries span.count').html(data.retries.numberWithDelimiter())
217
203
  $('ul.summary li.enqueued span.count').html(data.enqueued.numberWithDelimiter())
218
204
  $('ul.summary li.dead span.count').html(data.dead.numberWithDelimiter())
219
-
220
205
  }
221
206
 
222
207
  var updateRedisStats = function(data) {
@@ -277,7 +262,6 @@ $(function(){
277
262
  $(document).on('mousemove', 'div.interval-slider input', function(){
278
263
  setSliderLabel($(this).val());
279
264
  });
280
-
281
265
  });
282
266
 
283
267
  // Reset graphs
@@ -298,8 +282,15 @@ var debounce = function(fn, timeout)
298
282
  }
299
283
  };
300
284
 
301
- window.onresize = debounce(function() {
302
- clearInterval(poller);
303
- resetGraphs();
304
- renderGraphs();
305
- }, 125);
285
+ window.onresize = function() {
286
+ var prevWidth = window.innerWidth;
287
+ return debounce(function () {
288
+ var currWidth = window.innerWidth;
289
+ if (prevWidth !== currWidth) {
290
+ prevWidth = currWidth;
291
+ clearInterval(poller);
292
+ resetGraphs();
293
+ renderGraphs();
294
+ }
295
+ }, 125);
296
+ }();
@@ -0,0 +1,122 @@
1
+ body {
2
+ background-color: #000;
3
+ color: #ccc;
4
+ }
5
+
6
+ a,
7
+ .title,
8
+ .summary_bar ul .count,
9
+ .navbar .navbar-brand {
10
+ color: #af0014;
11
+ }
12
+
13
+ .navbar .navbar-brand:hover {
14
+ color: #ccc;
15
+ }
16
+
17
+ .navbar .navbar-brand .status {
18
+ color: #ccc;
19
+ }
20
+
21
+ .navbar-inverse {
22
+ background-color: #000;
23
+ border-color: #333;
24
+ }
25
+
26
+ table.table-white {
27
+ background-color: #111;
28
+ }
29
+
30
+ .table-striped > tbody > tr:nth-of-type(odd) {
31
+ background-color: #222;
32
+ }
33
+
34
+ .table-bordered,
35
+ .table-bordered > tbody > tr > td,
36
+ .table-bordered > tbody > tr > th,
37
+ .table-bordered > tfoot > tr > td,
38
+ .table-bordered > tfoot > tr > th,
39
+ .table-bordered > thead > tr > td,
40
+ .table-bordered > thead > tr > th {
41
+ border: 1px solid #333;
42
+ }
43
+
44
+ .table-hover > tbody > tr:hover {
45
+ background-color: #333;
46
+ }
47
+
48
+ .alert {
49
+ border: none;
50
+ color: #ccc;
51
+ }
52
+
53
+ .alert-success {
54
+ background-color: #000;
55
+ }
56
+
57
+ a:link,
58
+ a:active,
59
+ a:hover,
60
+ a:visited {
61
+ color: #63798c;
62
+ }
63
+
64
+ a.btn {
65
+ color: #000;
66
+ }
67
+
68
+ .summary_bar .summary {
69
+ background-color: #000;
70
+ border: 1px solid #333;
71
+ }
72
+
73
+ .navbar-default {
74
+ background-color: #000;
75
+ border-color: #3d3d3d;
76
+ }
77
+
78
+ .navbar-default .navbar-nav > .active > a,
79
+ .navbar-default .navbar-nav > .active > a:focus,
80
+ .navbar-default .navbar-nav > .active > a:hover {
81
+ color: #ccc;
82
+ background-color: #282828;
83
+ }
84
+
85
+ .navbar-default .navbar-nav > li > a:hover {
86
+ color: #ccc;
87
+ }
88
+
89
+ .pagination > li > a,
90
+ .pagination > li > a:hover,
91
+ .pagination > li > span {
92
+ color: #ccc;
93
+ background-color: #282828;
94
+ border-color: #353535;
95
+ }
96
+ .pagination > .disabled > a,
97
+ .pagination > .disabled > a:focus,
98
+ .pagination > .disabled > a:hover,
99
+ .pagination > .disabled > span,
100
+ .pagination > .disabled > span:focus,
101
+ .pagination > .disabled > span:hover {
102
+ color: #a5a5a5;
103
+ background-color: #282828;
104
+ border-color: #353535;
105
+ }
106
+
107
+ .stat {
108
+ border: 1px solid rgba(255, 255, 255, 0.1);
109
+ }
110
+
111
+ #live-poll {
112
+ color: #ccc;
113
+ }
114
+
115
+ .btn-warn {
116
+ color: #333;
117
+ }
118
+
119
+ .rickshaw_graph .y_ticks.glow text {
120
+ fill: #ccc;
121
+ color: #ccc;
122
+ }
@@ -126,7 +126,7 @@ header.row .pagination {
126
126
  text-align: center;
127
127
  width: 14%;
128
128
  }
129
- @media (max-width: 767px) and (min-width: 400px) {
129
+ @media (max-width: 767px) and (min-width: 200px) {
130
130
  .summary_bar ul li {
131
131
  width: 100%;
132
132
  }
@@ -201,6 +201,15 @@ td form {
201
201
  padding: 0;
202
202
  }
203
203
 
204
+ .jobtag a {
205
+ color: white;
206
+ }
207
+
208
+ .jobtag a:hover {
209
+ color: white;
210
+ text-decoration: underline;
211
+ }
212
+
204
213
  table .table-checkbox label {
205
214
  height: 100%;
206
215
  width: 100%;
@@ -219,6 +228,29 @@ table .table-checkbox label {
219
228
  color: #585454;
220
229
  }
221
230
 
231
+
232
+ .nav.navbar-nav{
233
+ display: flex;
234
+ width: 100%;
235
+ }
236
+
237
+ .navbar-livereload{
238
+ margin-left: auto;
239
+ white-space: nowrap;
240
+ }
241
+
242
+ .navbar-livereload .poll-wrapper a:last-child{
243
+ margin-left: 8px;
244
+ }
245
+
246
+ .navbar-right{
247
+ margin-right: 0;
248
+ }
249
+
250
+ .navbar-collapse.collapse{
251
+ overflow-x: auto !important;
252
+ }
253
+
222
254
  @media (max-width: 768px) {
223
255
  .navbar .navbar-header .navbar-livereload {
224
256
  border: none;
@@ -234,13 +266,19 @@ table .table-checkbox label {
234
266
  display: none;
235
267
  }
236
268
 
269
+ .nav.navbar-nav{
270
+ display: block;
271
+ width: auto;
272
+ }
273
+
237
274
  .navbar.navbar-fixed-top ul {
238
275
  margin-right: -15px!important;
239
276
  }
240
277
 
241
278
  .navbar .nav a {
242
279
  text-align: center;
243
- }
280
+ }
281
+
244
282
  }
245
283
 
246
284
  @media (width: 768px) {
@@ -645,6 +683,10 @@ div.interval-slider input {
645
683
  margin-right: 0;
646
684
  }
647
685
 
686
+ .navbar #navbar-menu{
687
+ display: none;
688
+ }
689
+
648
690
  .poll-wrapper {
649
691
  width: 100%;
650
692
  text-align: center;