Improve log handling
* don't fetch log content on Travis.Log init * use timeout in ChunkBuffer instead of Ember.run.later * remove timeout when log is finalized
This commit is contained in:
parent
5d049fd7de
commit
f1adbf8f20
|
@ -8,7 +8,6 @@ require 'travis/chunk_buffer'
|
||||||
|
|
||||||
init: ->
|
init: ->
|
||||||
@setParts()
|
@setParts()
|
||||||
@fetch()
|
|
||||||
|
|
||||||
setParts: ->
|
setParts: ->
|
||||||
#@set 'parts', Ember.ArrayProxy.create(content: [])
|
#@set 'parts', Ember.ArrayProxy.create(content: [])
|
||||||
|
@ -35,8 +34,7 @@ require 'travis/chunk_buffer'
|
||||||
|
|
||||||
loadText: (text) ->
|
loadText: (text) ->
|
||||||
console.log 'log model: load text' if Log.DEBUG
|
console.log 'log model: load text' if Log.DEBUG
|
||||||
number = -1
|
@append(number: 1, content: text, final: true)
|
||||||
@append(number: 1, content: text)
|
|
||||||
@set('isLoaded', true)
|
@set('isLoaded', true)
|
||||||
|
|
||||||
Travis.Log.Request = Em.Object.extend
|
Travis.Log.Request = Em.Object.extend
|
||||||
|
|
|
@ -81,7 +81,7 @@ Travis.Store = DS.Store.extend
|
||||||
console.log 'store: received job:log event', data if Log.DEBUG
|
console.log 'store: received job:log event', data if Log.DEBUG
|
||||||
data = data.job
|
data = data.job
|
||||||
job = @find(Travis.Job, data.id)
|
job = @find(Travis.Job, data.id)
|
||||||
job.appendLog(number: parseInt(data.number), content: data._log)
|
job.appendLog(number: parseInt(data.number), content: data._log, final: data.final)
|
||||||
else if data[type.singularName()]
|
else if data[type.singularName()]
|
||||||
@_loadOne(this, type, data)
|
@_loadOne(this, type, data)
|
||||||
else if data[type.pluralName()]
|
else if data[type.pluralName()]
|
||||||
|
|
|
@ -165,7 +165,9 @@ Travis.reopen
|
||||||
|
|
||||||
didInsertElement: ->
|
didInsertElement: ->
|
||||||
job = @get('job')
|
job = @get('job')
|
||||||
job.subscribe() if job && !job.get('isFinished')
|
if job && !job.get('isFinished')
|
||||||
|
job.get('log').fetch()
|
||||||
|
job.subscribe()
|
||||||
|
|
||||||
willDestroyElement: ->
|
willDestroyElement: ->
|
||||||
job = @get('job')
|
job = @get('job')
|
||||||
|
|
|
@ -2,7 +2,7 @@ get = Ember.get
|
||||||
|
|
||||||
Travis.ChunkBuffer = Em.ArrayProxy.extend
|
Travis.ChunkBuffer = Em.ArrayProxy.extend
|
||||||
timeout: 5000
|
timeout: 5000
|
||||||
checkTimeoutFrequency: 1000
|
checkTimeoutFrequency: 5000
|
||||||
start: 1
|
start: 1
|
||||||
next: 1
|
next: 1
|
||||||
|
|
||||||
|
@ -48,7 +48,6 @@ Travis.ChunkBuffer = Em.ArrayProxy.extend
|
||||||
console.log 'Added log parts with numbers:', addedObjects.map( (element) -> get(element, 'number') )+'', 'current', @get('next')
|
console.log 'Added log parts with numbers:', addedObjects.map( (element) -> get(element, 'number') )+'', 'current', @get('next')
|
||||||
queue.pushObjects addedObjects
|
queue.pushObjects addedObjects
|
||||||
@check()
|
@check()
|
||||||
@inserted()
|
|
||||||
|
|
||||||
check: ->
|
check: ->
|
||||||
queue = @get('queue')
|
queue = @get('queue')
|
||||||
|
@ -60,11 +59,13 @@ Travis.ChunkBuffer = Em.ArrayProxy.extend
|
||||||
while queue.get('firstObject.number') <= next
|
while queue.get('firstObject.number') <= next
|
||||||
element = queue.shiftObject()
|
element = queue.shiftObject()
|
||||||
if get(element, 'number') == next
|
if get(element, 'number') == next
|
||||||
|
@finalize() if get(element, 'final')
|
||||||
toPush.pushObject get(element, 'content')
|
toPush.pushObject get(element, 'content')
|
||||||
next += 1
|
next += 1
|
||||||
|
|
||||||
if toPush.length
|
if toPush.length
|
||||||
arrangedContent.pushObjects toPush
|
arrangedContent.pushObjects toPush
|
||||||
|
@inserted()
|
||||||
|
|
||||||
@set('next', next)
|
@set('next', next)
|
||||||
|
|
||||||
|
@ -72,14 +73,17 @@ Travis.ChunkBuffer = Em.ArrayProxy.extend
|
||||||
now = @now()
|
now = @now()
|
||||||
@lastInsert = now
|
@lastInsert = now
|
||||||
|
|
||||||
|
finalize: ->
|
||||||
|
clearTimeout @get('runLaterId')
|
||||||
|
|
||||||
checkTimeout: ->
|
checkTimeout: ->
|
||||||
now = @now()
|
now = @now()
|
||||||
if now - @lastInsert > @get('timeout')
|
if now - @lastInsert > @get('timeout')
|
||||||
@giveUpOnMissingParts()
|
@giveUpOnMissingParts()
|
||||||
@set 'runLaterId', Ember.run.later(this, @checkTimeout, @get('checkTimeoutFrequency'))
|
@set 'runLaterId', setTimeout((=> @checkTimeout()), @get('checkTimeoutFrequency'))
|
||||||
|
|
||||||
willDestroy: ->
|
willDestroy: ->
|
||||||
Ember.run.cancel @get('runLaterId')
|
@finalize()
|
||||||
@_super.apply this, arguments
|
@_super.apply this, arguments
|
||||||
|
|
||||||
now: ->
|
now: ->
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
createChunk = (number, content) ->
|
createChunk = (number, content, options) ->
|
||||||
Em.Object.create(number: number, content: content)
|
Em.Object.create(number: number, content: content, final: options?.final)
|
||||||
|
|
||||||
describe 'Travis.ChunkBuffer', ->
|
describe 'Travis.ChunkBuffer', ->
|
||||||
it 'waits for parts to be in order before revealing them', ->
|
it 'waits for parts to be in order before revealing them', ->
|
||||||
|
@ -91,3 +91,23 @@ describe 'Travis.ChunkBuffer', ->
|
||||||
it 'sets next to start if start is given at init', ->
|
it 'sets next to start if start is given at init', ->
|
||||||
buffer = Travis.ChunkBuffer.create(content: [], start: 5)
|
buffer = Travis.ChunkBuffer.create(content: [], start: 5)
|
||||||
expect(buffer.get('next')).toEqual(5)
|
expect(buffer.get('next')).toEqual(5)
|
||||||
|
|
||||||
|
it 'runs finalize after getting final element', ->
|
||||||
|
finalizeRuns = 0
|
||||||
|
buffer = Travis.ChunkBuffer.extend({
|
||||||
|
finalize: ->
|
||||||
|
@_super.apply this, arguments
|
||||||
|
finalizeRuns += 1
|
||||||
|
}).create(content: [])
|
||||||
|
|
||||||
|
buffer.pushObject createChunk(1, "foo")
|
||||||
|
buffer.pushObject createChunk(2, "bar")
|
||||||
|
buffer.pushObject createChunk(3, "baz")
|
||||||
|
|
||||||
|
expect(finalizeRuns).toEqual(0)
|
||||||
|
|
||||||
|
buffer.pushObject createChunk(4, "qux", final: true)
|
||||||
|
|
||||||
|
expect(buffer.get('length')).toEqual(4)
|
||||||
|
|
||||||
|
expect(finalizeRuns).toEqual(1)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user