
Duration on job was not specified, beacuse we actually don't return duration from the API, it's always calculated based on startedAt and finishedAt, that's why it's obsolete. It doesn't hurt to have it defined on the Job model, but there's no need to do it.
159 lines
3.9 KiB
CoffeeScript
159 lines
3.9 KiB
CoffeeScript
require 'travis/model'
|
|
|
|
@Travis.Job = Travis.Model.extend Travis.DurationCalculations,
|
|
repoId: Ember.attr('string', key: 'repository_id')
|
|
buildId: Ember.attr('string')
|
|
commitId: Ember.attr('string')
|
|
logId: Ember.attr('string')
|
|
|
|
queue: Ember.attr('string')
|
|
state: Ember.attr('string')
|
|
number: Ember.attr('string')
|
|
_startedAt: Ember.attr('string', key: 'started_at')
|
|
_finishedAt: Ember.attr('string', key: 'finished_at')
|
|
allowFailure: Ember.attr('boolean')
|
|
|
|
repositorySlug: Ember.attr('string')
|
|
repo: Ember.belongsTo('Travis.Repo', key: 'repository_id')
|
|
build: Ember.belongsTo('Travis.Build')
|
|
commit: Ember.belongsTo('Travis.Commit')
|
|
|
|
annotations: Ember.hasMany('Travis.Annotation')
|
|
|
|
_config: Ember.attr('object', key: 'config')
|
|
|
|
log: ( ->
|
|
@set('isLogAccessed', true)
|
|
Travis.Log.create(job: this)
|
|
).property()
|
|
|
|
startedAt: (->
|
|
unless @get('notStarted')
|
|
@get('_startedAt')
|
|
).property('_startedAt', 'notStarted')
|
|
|
|
finishedAt: (->
|
|
unless @get('notStarted')
|
|
@get('_finishedAt')
|
|
).property('_finishedAt', 'notStarted')
|
|
|
|
repoSlug: (->
|
|
@get('repositorySlug')
|
|
).property('repositorySlug')
|
|
|
|
config: (->
|
|
Travis.Helpers.compact(@get('_config'))
|
|
).property('_config')
|
|
|
|
isFinished: (->
|
|
@get('state') in ['passed', 'failed', 'errored', 'canceled']
|
|
).property('state')
|
|
|
|
notStarted: (->
|
|
@get('state') in ['queued', 'created']
|
|
).property('state')
|
|
|
|
clearLog: ->
|
|
# This is needed if we don't want to fetch log just to clear it
|
|
if @get('isLogAccessed')
|
|
@get('log').clear()
|
|
|
|
sponsor: (->
|
|
{
|
|
name: "Blue Box"
|
|
url: "http://bluebox.net"
|
|
}
|
|
).property()
|
|
|
|
configValues: (->
|
|
config = @get('config')
|
|
keys = @get('build.rawConfigKeys')
|
|
|
|
if config && keys
|
|
keys.map (key) -> config[key]
|
|
else
|
|
[]
|
|
).property('config', 'build.rawConfigKeys.length')
|
|
|
|
canCancel: (->
|
|
!@get('isFinished')
|
|
).property('state')
|
|
|
|
cancel: (->
|
|
Travis.ajax.post "/jobs/#{@get('id')}/cancel"
|
|
)
|
|
|
|
requeue: ->
|
|
Travis.ajax.post "/jobs/#{@get('id')}/restart"
|
|
|
|
appendLog: (part) ->
|
|
@get('log').append part
|
|
|
|
subscribe: ->
|
|
return if @get('subscribed')
|
|
@set('subscribed', true)
|
|
if Travis.pusher
|
|
Travis.pusher.subscribe "job-#{@get('id')}"
|
|
|
|
unsubscribe: ->
|
|
return unless @get('subscribed')
|
|
@set('subscribed', false)
|
|
if Travis.pusher
|
|
Travis.pusher.unsubscribe "job-#{@get('id')}"
|
|
|
|
onStateChange: (->
|
|
if @get('state') == 'finished' && Travis.pusher
|
|
Travis.pusher.unsubscribe "job-#{@get('id')}"
|
|
).observes('state')
|
|
|
|
isPropertyLoaded: (key) ->
|
|
if ['_finishedAt'].contains(key) && !@get('isFinished')
|
|
return true
|
|
else if key == '_startedAt' && @get('state') == 'created'
|
|
return true
|
|
else
|
|
@_super(key)
|
|
|
|
isFinished: (->
|
|
@get('state') in ['passed', 'failed', 'errored', 'canceled']
|
|
).property('state')
|
|
|
|
# TODO: such formattings should be done in controller, but in order
|
|
# to use it there easily, I would have to refactor job and build
|
|
# controllers
|
|
formattedFinishedAt: (->
|
|
if finishedAt = @get('finishedAt')
|
|
moment(finishedAt).format('lll')
|
|
).property('finishedAt')
|
|
|
|
@Travis.Job.reopenClass
|
|
queued: ->
|
|
filtered = Ember.FilteredRecordArray.create(
|
|
modelClass: Travis.Job
|
|
filterFunction: (job) ->
|
|
['created', 'queued'].indexOf(job.get('state')) != -1
|
|
filterProperties: ['state', 'queue']
|
|
)
|
|
|
|
@fetch().then (array) ->
|
|
filtered.updateFilter()
|
|
filtered.set('isLoaded', true)
|
|
|
|
filtered
|
|
|
|
running: ->
|
|
filtered = Ember.FilteredRecordArray.create(
|
|
modelClass: Travis.Job
|
|
filterFunction: (job) ->
|
|
job.get('state') == 'started'
|
|
filterProperties: ['state']
|
|
)
|
|
|
|
@fetch(state: 'started').then (array) ->
|
|
filtered.updateFilter()
|
|
filtered.set('isLoaded', true)
|
|
|
|
filtered
|
|
|
|
|