sidekiq 5.2.9 → 6.1.2
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.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +20 -0
- data/.github/workflows/ci.yml +41 -0
- data/.gitignore +0 -2
- data/.standard.yml +20 -0
- data/6.0-Upgrade.md +72 -0
- data/Changes.md +184 -0
- data/Ent-2.0-Upgrade.md +37 -0
- data/Ent-Changes.md +44 -1
- data/Gemfile +12 -11
- data/Gemfile.lock +192 -0
- data/Pro-5.0-Upgrade.md +25 -0
- data/Pro-Changes.md +48 -2
- data/README.md +18 -34
- data/Rakefile +5 -4
- data/bin/sidekiq +26 -2
- data/bin/sidekiqload +32 -24
- data/bin/sidekiqmon +8 -0
- data/lib/generators/sidekiq/templates/worker_test.rb.erb +1 -1
- data/lib/generators/sidekiq/worker_generator.rb +21 -13
- data/lib/sidekiq/api.rb +242 -219
- data/lib/sidekiq/cli.rb +131 -180
- data/lib/sidekiq/client.rb +67 -47
- data/lib/sidekiq/delay.rb +5 -6
- data/lib/sidekiq/exception_handler.rb +10 -12
- data/lib/sidekiq/extensions/action_mailer.rb +13 -22
- data/lib/sidekiq/extensions/active_record.rb +13 -10
- data/lib/sidekiq/extensions/class_methods.rb +14 -11
- data/lib/sidekiq/extensions/generic_proxy.rb +4 -4
- data/lib/sidekiq/fetch.rb +29 -30
- data/lib/sidekiq/job_logger.rb +45 -7
- data/lib/sidekiq/job_retry.rb +61 -61
- data/lib/sidekiq/launcher.rb +88 -55
- data/lib/sidekiq/logger.rb +165 -0
- data/lib/sidekiq/manager.rb +11 -13
- data/lib/sidekiq/middleware/chain.rb +15 -5
- data/lib/sidekiq/middleware/i18n.rb +5 -7
- data/lib/sidekiq/monitor.rb +133 -0
- data/lib/sidekiq/paginator.rb +18 -14
- data/lib/sidekiq/processor.rb +71 -70
- data/lib/sidekiq/rails.rb +29 -37
- data/lib/sidekiq/redis_connection.rb +50 -48
- data/lib/sidekiq/scheduled.rb +28 -29
- data/lib/sidekiq/sd_notify.rb +149 -0
- data/lib/sidekiq/systemd.rb +24 -0
- data/lib/sidekiq/testing/inline.rb +2 -1
- data/lib/sidekiq/testing.rb +35 -24
- data/lib/sidekiq/util.rb +17 -16
- data/lib/sidekiq/version.rb +2 -1
- data/lib/sidekiq/web/action.rb +14 -10
- data/lib/sidekiq/web/application.rb +73 -71
- data/lib/sidekiq/web/csrf_protection.rb +158 -0
- data/lib/sidekiq/web/helpers.rb +85 -77
- data/lib/sidekiq/web/router.rb +18 -17
- data/lib/sidekiq/web.rb +53 -53
- data/lib/sidekiq/worker.rb +126 -102
- data/lib/sidekiq.rb +69 -44
- data/sidekiq.gemspec +15 -16
- data/web/assets/javascripts/application.js +25 -27
- data/web/assets/javascripts/dashboard.js +4 -23
- data/web/assets/stylesheets/application-dark.css +143 -0
- data/web/assets/stylesheets/application.css +16 -6
- data/web/locales/de.yml +14 -2
- data/web/locales/en.yml +2 -0
- data/web/locales/fr.yml +2 -2
- data/web/locales/ja.yml +4 -1
- data/web/locales/lt.yml +83 -0
- data/web/locales/pl.yml +4 -4
- data/web/locales/ru.yml +4 -0
- data/web/locales/vi.yml +83 -0
- data/web/views/_job_info.erb +2 -1
- data/web/views/busy.erb +6 -3
- data/web/views/dead.erb +2 -2
- data/web/views/layout.erb +1 -0
- data/web/views/morgue.erb +5 -2
- data/web/views/queue.erb +10 -1
- data/web/views/queues.erb +9 -1
- data/web/views/retries.erb +5 -2
- data/web/views/retry.erb +2 -2
- data/web/views/scheduled.erb +5 -2
- metadata +25 -43
- data/.circleci/config.yml +0 -61
- data/.github/issue_template.md +0 -11
- data/.travis.yml +0 -11
- data/bin/sidekiqctl +0 -20
- data/lib/sidekiq/core_ext.rb +0 -1
- data/lib/sidekiq/ctl.rb +0 -221
- data/lib/sidekiq/logging.rb +0 -122
- 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: '#
|
33
|
-
|
34
|
-
|
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: "#
|
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
|
@@ -300,13 +284,10 @@ var debounce = function(fn, timeout)
|
|
300
284
|
|
301
285
|
window.onresize = function() {
|
302
286
|
var prevWidth = window.innerWidth;
|
303
|
-
|
304
287
|
return debounce(function () {
|
305
288
|
var currWidth = window.innerWidth;
|
306
|
-
|
307
289
|
if (prevWidth !== currWidth) {
|
308
290
|
prevWidth = currWidth;
|
309
|
-
|
310
291
|
clearInterval(poller);
|
311
292
|
resetGraphs();
|
312
293
|
renderGraphs();
|
@@ -0,0 +1,143 @@
|
|
1
|
+
html, body {
|
2
|
+
background-color: #333 !important;
|
3
|
+
color: #ddd;
|
4
|
+
}
|
5
|
+
|
6
|
+
a,
|
7
|
+
.title,
|
8
|
+
.summary_bar ul .count,
|
9
|
+
span.current-interval,
|
10
|
+
.navbar .navbar-brand {
|
11
|
+
color: #c04;
|
12
|
+
}
|
13
|
+
|
14
|
+
.history-graph + .active,
|
15
|
+
.beacon .dot {
|
16
|
+
background-color: #c04;
|
17
|
+
}
|
18
|
+
|
19
|
+
.navbar .navbar-brand:hover {
|
20
|
+
color: #ddd;
|
21
|
+
}
|
22
|
+
|
23
|
+
.navbar .navbar-brand .status {
|
24
|
+
color: #ddd;
|
25
|
+
}
|
26
|
+
|
27
|
+
.navbar-default .navbar-nav > li > a {
|
28
|
+
color: #ddd;
|
29
|
+
}
|
30
|
+
|
31
|
+
.navbar-inverse {
|
32
|
+
background-color: #222;
|
33
|
+
border-color: #555;
|
34
|
+
}
|
35
|
+
|
36
|
+
table {
|
37
|
+
background-color: #282828;
|
38
|
+
}
|
39
|
+
|
40
|
+
.table-striped > tbody > tr:nth-of-type(odd) {
|
41
|
+
background-color: #333;
|
42
|
+
}
|
43
|
+
|
44
|
+
.table-bordered,
|
45
|
+
.table-bordered > tbody > tr > td,
|
46
|
+
.table-bordered > tbody > tr > th,
|
47
|
+
.table-bordered > tfoot > tr > td,
|
48
|
+
.table-bordered > tfoot > tr > th,
|
49
|
+
.table-bordered > thead > tr > td,
|
50
|
+
.table-bordered > thead > tr > th {
|
51
|
+
border: 1px solid #555;
|
52
|
+
}
|
53
|
+
|
54
|
+
.table-hover > tbody > tr:hover {
|
55
|
+
background-color: #444;
|
56
|
+
}
|
57
|
+
|
58
|
+
.alert {
|
59
|
+
border: none;
|
60
|
+
color: #ddd;
|
61
|
+
}
|
62
|
+
|
63
|
+
.alert-success {
|
64
|
+
background-color: #484;
|
65
|
+
}
|
66
|
+
|
67
|
+
a:link,
|
68
|
+
a:active,
|
69
|
+
a:hover,
|
70
|
+
a:visited {
|
71
|
+
color: #ddd;
|
72
|
+
}
|
73
|
+
|
74
|
+
a.btn {
|
75
|
+
color: #000;
|
76
|
+
}
|
77
|
+
|
78
|
+
.summary_bar .summary {
|
79
|
+
background-color: #222;
|
80
|
+
border: 1px solid #555;
|
81
|
+
|
82
|
+
-webkit-box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
|
83
|
+
-moz-box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
|
84
|
+
box-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
|
85
|
+
}
|
86
|
+
|
87
|
+
.navbar-default {
|
88
|
+
background-color: #222;
|
89
|
+
border-color: #555;
|
90
|
+
}
|
91
|
+
|
92
|
+
.navbar-default .navbar-nav > .active > a,
|
93
|
+
.navbar-default .navbar-nav > .active > a:focus,
|
94
|
+
.navbar-default .navbar-nav > .active > a:hover {
|
95
|
+
color: #ddd;
|
96
|
+
background-color: #333;
|
97
|
+
}
|
98
|
+
|
99
|
+
.navbar-default .navbar-nav > li > a:hover {
|
100
|
+
color: #ddd;
|
101
|
+
}
|
102
|
+
|
103
|
+
.pagination > li > a,
|
104
|
+
.pagination > li > a:hover,
|
105
|
+
.pagination > li > span {
|
106
|
+
color: #ddd;
|
107
|
+
background-color: #333;
|
108
|
+
border-color: #555;
|
109
|
+
}
|
110
|
+
.pagination > .disabled > a,
|
111
|
+
.pagination > .disabled > a:focus,
|
112
|
+
.pagination > .disabled > a:hover,
|
113
|
+
.pagination > .disabled > span,
|
114
|
+
.pagination > .disabled > span:focus,
|
115
|
+
.pagination > .disabled > span:hover {
|
116
|
+
color: #ddd;
|
117
|
+
background-color: #333;
|
118
|
+
border-color: #555;
|
119
|
+
}
|
120
|
+
|
121
|
+
.stat {
|
122
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
123
|
+
}
|
124
|
+
|
125
|
+
#live-poll {
|
126
|
+
color: #ddd;
|
127
|
+
}
|
128
|
+
|
129
|
+
.btn-warn {
|
130
|
+
color: #444;
|
131
|
+
}
|
132
|
+
|
133
|
+
.rickshaw_graph .detail {
|
134
|
+
background: rgba(255, 255, 255, .1)
|
135
|
+
}
|
136
|
+
.rickshaw_graph .x_tick {
|
137
|
+
border-color: rgba(255, 255, 255, .2);
|
138
|
+
}
|
139
|
+
|
140
|
+
.rickshaw_graph .y_ticks.glow text {
|
141
|
+
fill: #ddd;
|
142
|
+
color: #ddd;
|
143
|
+
}
|
@@ -177,10 +177,6 @@ header.row .pagination {
|
|
177
177
|
overflow: overlay;
|
178
178
|
}
|
179
179
|
|
180
|
-
table.table-white {
|
181
|
-
background-color: #fff;
|
182
|
-
}
|
183
|
-
|
184
180
|
.queues form {
|
185
181
|
margin: 0;
|
186
182
|
}
|
@@ -201,6 +197,15 @@ td form {
|
|
201
197
|
padding: 0;
|
202
198
|
}
|
203
199
|
|
200
|
+
.jobtag a {
|
201
|
+
color: white;
|
202
|
+
}
|
203
|
+
|
204
|
+
.jobtag a:hover {
|
205
|
+
color: white;
|
206
|
+
text-decoration: underline;
|
207
|
+
}
|
208
|
+
|
204
209
|
table .table-checkbox label {
|
205
210
|
height: 100%;
|
206
211
|
width: 100%;
|
@@ -460,6 +465,11 @@ span.current-interval {
|
|
460
465
|
|
461
466
|
div.interval-slider input {
|
462
467
|
width: 160px;
|
468
|
+
-webkit-appearance: none;
|
469
|
+
height: 3px;
|
470
|
+
margin-top: 5px;
|
471
|
+
border-radius: 2px;
|
472
|
+
background: currentcolor;
|
463
473
|
}
|
464
474
|
|
465
475
|
#realtime-legend,
|
@@ -748,7 +758,7 @@ div.interval-slider input {
|
|
748
758
|
font-family: Arial, sans-serif;
|
749
759
|
border-radius: 3px;
|
750
760
|
padding: 6px;
|
751
|
-
opacity: .
|
761
|
+
opacity: .7;
|
752
762
|
border: 1px solid #e0e0e0;
|
753
763
|
font-size: 12px;
|
754
764
|
position: absolute;
|
@@ -963,7 +973,7 @@ div.interval-slider input {
|
|
963
973
|
}
|
964
974
|
.rickshaw_graph .y_ticks text,
|
965
975
|
.rickshaw_graph .x_ticks_d3 text {
|
966
|
-
opacity: .
|
976
|
+
opacity: .7;
|
967
977
|
font-size: 12px;
|
968
978
|
pointer-events: none
|
969
979
|
}
|
data/web/locales/de.yml
CHANGED
@@ -13,7 +13,7 @@ de:
|
|
13
13
|
Retries: Versuche
|
14
14
|
Enqueued: In der Warteschlange
|
15
15
|
Worker: Arbeiter
|
16
|
-
LivePoll:
|
16
|
+
LivePoll: Echtzeitabfrage
|
17
17
|
StopPolling: Abfrage stoppen
|
18
18
|
Queue: Warteschlange
|
19
19
|
Class: Klasse
|
@@ -33,12 +33,13 @@ de:
|
|
33
33
|
NextRetry: Nächster Versuch
|
34
34
|
RetryCount: Anzahl der Versuche
|
35
35
|
RetryNow: Jetzt erneut versuchen
|
36
|
-
Kill:
|
36
|
+
Kill: Vernichten
|
37
37
|
LastRetry: Letzter Versuch
|
38
38
|
OriginallyFailed: Ursprünglich fehlgeschlagen
|
39
39
|
AreYouSure: Bist du sicher?
|
40
40
|
DeleteAll: Alle löschen
|
41
41
|
RetryAll: Alle erneut versuchen
|
42
|
+
KillAll: Alle vernichten
|
42
43
|
NoRetriesFound: Keine erneuten Versuche gefunden
|
43
44
|
Error: Fehler
|
44
45
|
ErrorClass: Fehlerklasse
|
@@ -67,3 +68,14 @@ de:
|
|
67
68
|
Thread: Thread
|
68
69
|
Threads: Threads
|
69
70
|
Jobs: Jobs
|
71
|
+
Paused: Pausiert
|
72
|
+
Stop: Stopp
|
73
|
+
Quiet: Leise
|
74
|
+
StopAll: Alle stoppen
|
75
|
+
QuietAll: Alle leise
|
76
|
+
PollingInterval: Abfrageintervall
|
77
|
+
Plugins: Erweiterungen
|
78
|
+
NotYetEnqueued: Noch nicht in der Warteschlange
|
79
|
+
CreatedAt: Erstellt
|
80
|
+
BackToApp: Zurück zur Anwendung
|
81
|
+
Latency: Latenz
|
data/web/locales/en.yml
CHANGED
data/web/locales/fr.yml
CHANGED
@@ -69,9 +69,9 @@ fr:
|
|
69
69
|
Jobs: Tâches
|
70
70
|
Paused: Mise en pause
|
71
71
|
Stop: Arrêter
|
72
|
-
Quiet:
|
72
|
+
Quiet: Clore
|
73
73
|
StopAll: Tout arrêter
|
74
|
-
QuietAll: Tout
|
74
|
+
QuietAll: Tout clore
|
75
75
|
PollingInterval: Interval de rafraîchissement
|
76
76
|
Plugins: Plugins
|
77
77
|
NotYetEnqueued: Pas encore en file d'attente
|
data/web/locales/ja.yml
CHANGED
@@ -33,11 +33,13 @@ ja:
|
|
33
33
|
NextRetry: 再試行
|
34
34
|
RetryCount: 再試行
|
35
35
|
RetryNow: 今すぐ再試行
|
36
|
+
Kill: 強制終了
|
36
37
|
LastRetry: 再試行履歴
|
37
38
|
OriginallyFailed: 失敗
|
38
39
|
AreYouSure: よろしいですか?
|
39
40
|
DeleteAll: 全て削除
|
40
41
|
RetryAll: 全て再試行
|
42
|
+
KillAll: 全て強制終了
|
41
43
|
NoRetriesFound: 再試行するジョブはありません
|
42
44
|
Error: エラー
|
43
45
|
ErrorClass: エラークラス
|
@@ -58,7 +60,6 @@ ja:
|
|
58
60
|
OneMonth: 1 ヶ月
|
59
61
|
ThreeMonths: 3 ヶ月
|
60
62
|
SixMonths: 6 ヶ月
|
61
|
-
Batches: バッチ
|
62
63
|
Failures: 失敗
|
63
64
|
DeadJobs: デッドジョブ
|
64
65
|
NoDeadJobsFound: デッドジョブはありません
|
@@ -78,3 +79,5 @@ ja:
|
|
78
79
|
CreatedAt: 作成日時
|
79
80
|
BackToApp: アプリに戻る
|
80
81
|
Latency: レイテンシ
|
82
|
+
Pause: 一時停止
|
83
|
+
Unpause: 一時停止を解除
|
data/web/locales/lt.yml
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# elements like %{queue} are variables and should not be translated
|
2
|
+
lt:
|
3
|
+
Dashboard: Valdymo skydas
|
4
|
+
Status: Būsena
|
5
|
+
Time: Laikas
|
6
|
+
Namespace: Vardų erdvė
|
7
|
+
Realtime: Realiu laiku
|
8
|
+
History: Istorija
|
9
|
+
Busy: Užimti
|
10
|
+
Processed: Įvykdyti
|
11
|
+
Failed: Nepavykę
|
12
|
+
Scheduled: Suplanuoti
|
13
|
+
Retries: Kartojami
|
14
|
+
Enqueued: Eilėje
|
15
|
+
Worker: Darbuotojas
|
16
|
+
LivePoll: Užklausti gyvai
|
17
|
+
StopPolling: Stabdyti užklausas
|
18
|
+
Queue: Eilė
|
19
|
+
Class: Klasė
|
20
|
+
Job: Darbas
|
21
|
+
Arguments: Parametrai
|
22
|
+
Extras: Papildomi
|
23
|
+
Started: Pradėti
|
24
|
+
ShowAll: Rodyti Visus
|
25
|
+
CurrentMessagesInQueue: Esami darbai eilėje <span class='title'>%{queue}</span>
|
26
|
+
Delete: Pašalinti
|
27
|
+
AddToQueue: Pridėti į eilę
|
28
|
+
AreYouSureDeleteJob: Ar tikrai norite pašalinti šį darbą?
|
29
|
+
AreYouSureDeleteQueue: Ar tikrai norite pašalinti šią eilę %{queue}?
|
30
|
+
Queues: Eilės
|
31
|
+
Size: Dydis
|
32
|
+
Actions: Veiksmai
|
33
|
+
NextRetry: Sekantis Kartojimas
|
34
|
+
RetryCount: Kartojimų Skaičius
|
35
|
+
RetryNow: Kartoti Dabar
|
36
|
+
Kill: Priverstinai Nutraukti
|
37
|
+
LastRetry: Paskutinis Kartojimas
|
38
|
+
OriginallyFailed: Iš pradžių Nepavykę
|
39
|
+
AreYouSure: Ar jūs įsitikinę?
|
40
|
+
DeleteAll: Pašalinti Visus
|
41
|
+
RetryAll: Kartoti Visus
|
42
|
+
KillAll: Priverstinai Nutraukti Visus
|
43
|
+
NoRetriesFound: Nerasta kartojimų
|
44
|
+
Error: Klaida
|
45
|
+
ErrorClass: Klaidos Klasė
|
46
|
+
ErrorMessage: Klaidos Žinutė
|
47
|
+
ErrorBacktrace: Klaidos Pėdsakai
|
48
|
+
GoBack: ← Atgal
|
49
|
+
NoScheduledFound: Planuojamų darbų nerasta
|
50
|
+
When: Kada
|
51
|
+
ScheduledJobs: Planuojami Darbai
|
52
|
+
idle: neveiksnus
|
53
|
+
active: aktyvus
|
54
|
+
Version: Versija
|
55
|
+
Connections: Ryšiai
|
56
|
+
MemoryUsage: Atminties Vartojimas
|
57
|
+
PeakMemoryUsage: Atminties Vartojimo Pikas
|
58
|
+
Uptime: Gyvavimo laikas (dienomis)
|
59
|
+
OneWeek: 1 savaitė
|
60
|
+
OneMonth: 1 mėnuo
|
61
|
+
ThreeMonths: 3 mėnesiai
|
62
|
+
SixMonths: 6 mėnesiai
|
63
|
+
Failures: Nesėkmingi vykdymai
|
64
|
+
DeadJobs: Negyvi Darbai
|
65
|
+
NoDeadJobsFound: Negyvų darbų nerasta
|
66
|
+
Dead: Negyvi
|
67
|
+
Processes: Procesai
|
68
|
+
Thread: Gija
|
69
|
+
Threads: Gijos
|
70
|
+
Jobs: Darbai
|
71
|
+
Paused: Pristabdytas
|
72
|
+
Stop: Sustabdyti
|
73
|
+
Quiet: Nutildyti
|
74
|
+
StopAll: Sustbadyti Visus
|
75
|
+
QuietAll: Nutildyti Visus
|
76
|
+
PollingInterval: Užklausimų intervalas
|
77
|
+
Plugins: Įskiepiai
|
78
|
+
NotYetEnqueued: Dar neįtraukti į eilę
|
79
|
+
CreatedAt: Sukurta
|
80
|
+
BackToApp: Atgal į Aplikaciją
|
81
|
+
Latency: Vėlavimas
|
82
|
+
Pause: Pristabdyti
|
83
|
+
Unpause: Pratęsti
|
data/web/locales/pl.yml
CHANGED
@@ -10,7 +10,7 @@ pl:
|
|
10
10
|
Processed: Ukończone
|
11
11
|
Failed: Nieudane
|
12
12
|
Scheduled: Zaplanowane
|
13
|
-
Retries:
|
13
|
+
Retries: Do ponowienia
|
14
14
|
Enqueued: Zakolejkowane
|
15
15
|
Worker: Worker
|
16
16
|
LivePoll: Wczytuj na żywo
|
@@ -29,15 +29,15 @@ pl:
|
|
29
29
|
Queues: Kolejki
|
30
30
|
Size: Rozmiar
|
31
31
|
Actions: Akcje
|
32
|
-
NextRetry:
|
33
|
-
RetryCount:
|
32
|
+
NextRetry: Następne ponowienie
|
33
|
+
RetryCount: Ilość ponowień
|
34
34
|
RetryNow: Ponów teraz
|
35
35
|
LastRetry: Ostatnie ponowienie
|
36
36
|
OriginallyFailed: Ostatnio nieudane
|
37
37
|
AreYouSure: Na pewno?
|
38
38
|
DeleteAll: Usuń wszystko
|
39
39
|
RetryAll: Powtórz wszystko
|
40
|
-
NoRetriesFound: Brak
|
40
|
+
NoRetriesFound: Brak zadań do ponowienia
|
41
41
|
Error: Błąd
|
42
42
|
ErrorClass: Klasa błędu
|
43
43
|
ErrorMessage: Wiadomosć błędu
|
data/web/locales/ru.yml
CHANGED
@@ -38,6 +38,7 @@ ru:
|
|
38
38
|
AreYouSure: Вы уверены?
|
39
39
|
DeleteAll: Удалить все
|
40
40
|
RetryAll: Повторить все
|
41
|
+
KillAll: Убить всё
|
41
42
|
NoRetriesFound: Нет попыток
|
42
43
|
Error: Ошибка
|
43
44
|
ErrorClass: Класс ошибки
|
@@ -76,3 +77,6 @@ ru:
|
|
76
77
|
NotYetEnqueued: Пока не в очереди
|
77
78
|
CreatedAt: Создан
|
78
79
|
BackToApp: Назад
|
80
|
+
Latency: Задержка
|
81
|
+
Pause: Пауза
|
82
|
+
Unpause: Возобновить
|
data/web/locales/vi.yml
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# elements like %{queue} are variables and should not be translated
|
2
|
+
vi: # <---- change this to your locale code
|
3
|
+
Dashboard: Bảng điều khiển
|
4
|
+
Status: Trạng thái
|
5
|
+
Time: Thời gian
|
6
|
+
Namespace: Không gian tên
|
7
|
+
Realtime: Thời gian thực
|
8
|
+
History: Lịch sử
|
9
|
+
Busy: Bận rộn
|
10
|
+
Processed: Đã xử lí
|
11
|
+
Failed: Đã thất bại
|
12
|
+
Scheduled: Đã lên lịch
|
13
|
+
Retries: Số lần thử
|
14
|
+
Enqueued: Đã xếp hàng đợi
|
15
|
+
Worker: Máy xử lí
|
16
|
+
LivePoll: Thăm dò trực tiếp
|
17
|
+
StopPolling: Ngừng thăm dò
|
18
|
+
Queue: Hàng đợi
|
19
|
+
Class: Lớp
|
20
|
+
Job: Tác vụ
|
21
|
+
Arguments: Tham số
|
22
|
+
Extras: Thêm
|
23
|
+
Started: Đã bắt đầu
|
24
|
+
ShowAll: Hiện tất cả
|
25
|
+
CurrentMessagesInQueue: Số lượng công việc trong <span class='title'>%{queue}</span>
|
26
|
+
Delete: Xóa
|
27
|
+
AddToQueue: Thêm vào hàng đợi
|
28
|
+
AreYouSureDeleteJob: Bạn có chắc là muốn xóa tác vụ này?
|
29
|
+
AreYouSureDeleteQueue: Bạn có chắc là muốn xóa %{queue} này?
|
30
|
+
Queues: Các hàng đợi
|
31
|
+
Size: Kích thước
|
32
|
+
Actions: Những hành động
|
33
|
+
NextRetry: Lần thử lại tiếp theo
|
34
|
+
RetryCount: Số lần thử lại
|
35
|
+
RetryNow: Thử lại ngay bây giờ
|
36
|
+
Kill: Giết
|
37
|
+
LastRetry: Lần thử cuối
|
38
|
+
OriginallyFailed: Đã thất bại từ đầu
|
39
|
+
AreYouSure: Bạn chắc chứ?
|
40
|
+
DeleteAll: Xóa hết
|
41
|
+
RetryAll: Thử lại tất cả
|
42
|
+
KillAll: Giết hết
|
43
|
+
NoRetriesFound: Không có lần thử nào được tìm thấy
|
44
|
+
Error: Lỗi
|
45
|
+
ErrorClass: Lớp lỗi
|
46
|
+
ErrorMessage: Tin nhắn lỗi
|
47
|
+
ErrorBacktrace: Dấu vết của lỗi
|
48
|
+
GoBack: ← Trở lại
|
49
|
+
NoScheduledFound: Không có tác vụ đã lên lịch nào được tìm thấy
|
50
|
+
When: Khi nào
|
51
|
+
ScheduledJobs: Những Tác Vụ Được Hẹn
|
52
|
+
idle: Đang chờ
|
53
|
+
active: Đang hoạt động
|
54
|
+
Version: Phiên bản
|
55
|
+
Connections: Các kết nối
|
56
|
+
MemoryUsage: Lượng bộ nhớ sử dụng
|
57
|
+
PeakMemoryUsage: Lượng bộ nhớ sử dụng đỉnh điểm
|
58
|
+
Uptime: Thời gian hệ thống đã online (days)
|
59
|
+
OneWeek: 1 tuần
|
60
|
+
OneMonth: 1 tháng
|
61
|
+
ThreeMonths: 3 tháng
|
62
|
+
SixMonths: 6 tháng
|
63
|
+
Failures: Các thất bại
|
64
|
+
DeadJobs: Những tác vụ đã chết
|
65
|
+
NoDeadJobsFound: Không có tác vụ đã chết nào được tìm thấy
|
66
|
+
Dead: Chết
|
67
|
+
Processes: Tiến trình xử lí
|
68
|
+
Thread: Luồng xử lí
|
69
|
+
Threads: Những luồng xử lí
|
70
|
+
Jobs: Các tác vụ
|
71
|
+
Paused: Đã tạm dừng
|
72
|
+
Stop: Dừng Lại
|
73
|
+
Quiet: Im lặng
|
74
|
+
StopAll: Dừng lại tất cả
|
75
|
+
QuietAll: Làm cho tất cả im lặng
|
76
|
+
PollingInterval: Khoảng thời gian giữa các lần thăm dò
|
77
|
+
Plugins: Hệ thống đính kèm
|
78
|
+
NotYetEnqueued: Chưa được bỏ vào hàng đợi
|
79
|
+
CreatedAt: Được tạo vào lúc
|
80
|
+
BackToApp: Trở về ứng dụng
|
81
|
+
Latency: Độ trễ
|
82
|
+
Pause: Tạm dừng
|
83
|
+
Unpause: Hủy tạm dừng
|
data/web/views/_job_info.erb
CHANGED
data/web/views/busy.erb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
</div>
|
15
15
|
|
16
16
|
<div class="table_container">
|
17
|
-
<table class="processes table table-hover table-bordered table-striped
|
17
|
+
<table class="processes table table-hover table-bordered table-striped">
|
18
18
|
<thead>
|
19
19
|
<th><%= t('Name') %></th>
|
20
20
|
<th><%= t('Started') %></th>
|
@@ -68,7 +68,7 @@
|
|
68
68
|
</div>
|
69
69
|
|
70
70
|
<div class="table_container">
|
71
|
-
<table class="workers table table-hover table-bordered table-striped
|
71
|
+
<table class="workers table table-hover table-bordered table-striped">
|
72
72
|
<thead>
|
73
73
|
<th><%= t('Process') %></th>
|
74
74
|
<th><%= t('TID') %></th>
|
@@ -87,7 +87,10 @@
|
|
87
87
|
<td>
|
88
88
|
<a href="<%= root_path %>queues/<%= msg['queue'] %>"><%= msg['queue'] %></a>
|
89
89
|
</td>
|
90
|
-
<td
|
90
|
+
<td>
|
91
|
+
<%= job.display_class %>
|
92
|
+
<%= display_tags(job, nil) %>
|
93
|
+
</td>
|
91
94
|
<td>
|
92
95
|
<div class="args"><%= display_args(job.display_args) %></div>
|
93
96
|
</td>
|