Update build durations every 5s

Pusher updates usually don't update duration, so it needs to be
calculated from startedAt property and current time or finishedAt
property.
This commit is contained in:
Piotr Sarnacki 2012-08-09 14:07:07 +02:00
parent 1512f8d108
commit 071821c1d7
9 changed files with 39 additions and 18 deletions

View File

@ -3,6 +3,13 @@ Travis.RepositoriesController = Ember.ArrayController.extend
init: ->
@activate('recent')
Ember.run.later(@updateTimes.bind(this), Travis.INTERVALS.updateTimes)
updateTimes: ->
if content = @get('content')
content.forEach (r) -> r.updateTimes()
Ember.run.later(@updateTimes.bind(this), Travis.INTERVALS.updateTimes)
activate: (tab, params) ->
@set('tab', tab)

View File

@ -4,6 +4,17 @@ Travis.RepositoryController = Travis.Controller.extend
init: ->
@_super('builds', 'build', 'job')
Ember.run.later(@updateTimes.bind(this), Travis.INTERVALS.updateTimes)
updateTimes: ->
if builds = @get('builds')
builds.forEach (b) -> b.updateTimes()
if build = @get('build')
build.updateTimes()
build.get('jobs').forEach (j) -> j.updateTimes()
Ember.run.later(@updateTimes.bind(this), Travis.INTERVALS.updateTimes)
activate: (action, params) ->
@_unbind()

View File

@ -1,3 +1,4 @@
require 'models/extensions'
require 'models/artifact'
require 'models/branch'
require 'models/build'

View File

@ -1,6 +1,6 @@
require 'travis/model'
@Travis.Build = Travis.Model.extend
@Travis.Build = Travis.Model.extend Travis.DurationCalculations,
eventType: DS.attr('string')
repositoryId: DS.attr('number')
commitId: DS.attr('number')
@ -10,9 +10,9 @@ require 'travis/model'
branch: DS.attr('string')
message: DS.attr('string')
result: DS.attr('number')
duration: DS.attr('number')
startedAt: DS.attr('string')
finishedAt: DS.attr('string')
_duration: DS.attr('number', key: 'duration')
startedAt: DS.attr('string', key: 'started_at')
finishedAt: DS.attr('string', key: 'finished_at')
repository: DS.belongsTo('Travis.Repository')
commit: DS.belongsTo('Travis.Commit')
@ -41,10 +41,6 @@ require 'travis/model'
$.map(headers.concat(keys), (key) -> return $.camelize(key))
).property('config')
tick: ->
@notifyPropertyChange 'duration'
@notifyPropertyChange 'finished_at'
@Travis.Build.reopenClass
byRepositoryId: (id, parameters) ->
@find($.extend(parameters || {}, repository_id: id, orderBy: 'number DESC'))

View File

@ -0,0 +1,11 @@
Travis.DurationCalculations = Ember.Mixin.create
duration: (->
if duration = @get('_duration')
duration
else
Travis.Helpers.durationFrom(@get('startedAt'), @get('finishedAt'))
).property('_duration', 'finishedAt', 'startedAt')
updateTimes: ->
@notifyPropertyChange '_duration'
@notifyPropertyChange 'finished_at'

View File

@ -1,6 +1,6 @@
require 'travis/model'
@Travis.Job = Travis.Model.extend
@Travis.Job = Travis.Model.extend Travis.DurationCalculations,
repositoryId: DS.attr('number')
buildId: DS.attr('number')
commitId: DS.attr('number')
@ -10,7 +10,7 @@ require 'travis/model'
state: DS.attr('string')
number: DS.attr('string')
result: DS.attr('number')
duration: DS.attr('number')
_duration: DS.attr('number', key: 'duration')
startedAt: DS.attr('string')
finishedAt: DS.attr('string')
allowFailure: DS.attr('boolean', key: 'allow_failure')
@ -47,10 +47,6 @@ require 'travis/model'
Travis.app.pusher.unsubscribe "job-#{@get('id')}" if @get('state') == 'finished'
).observes('state')
tick: ->
@notifyPropertyChange 'duration'
@notifyPropertyChange 'finished_at'
@Travis.Job.reopenClass
queued: (queue) ->
@find()

View File

@ -59,9 +59,8 @@ require 'travis/model'
select: ->
Travis.Repository.select(self.get('id'))
tick: ->
updateTimes: ->
@notifyPropertyChange 'lastBuildDuration'
@notifyPropertyChange 'lastBuildFinishedAt'
@Travis.Repository.reopenClass
recent: ->

View File

@ -28,7 +28,7 @@ require 'ext/ember/namespace'
{ name: 'spree', display: 'Spree' }
]
INTERVALS: { sponsors: -1, times: -1 }
INTERVALS: { sponsors: -1, times: -1, updateTimes: 5000 }
run: (attrs) ->
@app = Travis.App.create(attrs || {})

File diff suppressed because one or more lines are too long