
This piece of code was used in order to load repos associated to jobs when the latter were loaded from pusher. This was needed because jobs events do not have repository record passed in pusher payload, so when job was added with pusher and link to the job was displayed in "Running Jobs" or in workers on right sidebar, Ember was loading missing repos. We don't need this code anymore as there is no right sidebar. Additionally after changes in Ember.js, it's possible to pass primitives to linkTo. Previously the link to record needed to be constructed as following: {{#linkTo "job" job.repo job}}Link to repo{{/linkTo}} The drawback of such code is that repo would have been instantiated in such case. Now, we can do something like this: {{#linkTo "job" job.repositorySlug job}}Link to repo{{/linkTo}} so as long as we have information about repository slug in the job data, such hacks are not be needed.
128 lines
3.2 KiB
CoffeeScript
128 lines
3.2 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(Number)
|
|
startedAt: Ember.attr('string')
|
|
finishedAt: Ember.attr('string')
|
|
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')
|
|
|
|
_config: Ember.attr('object', key: 'config')
|
|
|
|
log: ( ->
|
|
@set('isLogAccessed', true)
|
|
Travis.Log.create(job: this)
|
|
).property()
|
|
|
|
repoSlug: (->
|
|
@get('repositorySlug')
|
|
).property('repositorySlug')
|
|
|
|
config: (->
|
|
Travis.Helpers.compact(@get('_config'))
|
|
).property('_config')
|
|
|
|
isFinished: (->
|
|
@get('state') in ['passed', 'failed', 'errored', 'canceled']
|
|
).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('state') == 'created' || @get('state') == 'queued' # TODO
|
|
).property('state')
|
|
|
|
cancel: (->
|
|
Travis.ajax.post "/jobs/#{@get('id')}", _method: 'delete'
|
|
)
|
|
|
|
requeue: ->
|
|
Travis.ajax.post '/requests', job_id: @get('id')
|
|
|
|
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')
|
|
|
|
@Travis.Job.reopenClass
|
|
queued: (queue) ->
|
|
@find()
|
|
Ember.FilteredRecordArray.create(
|
|
modelClass: Travis.Job
|
|
filterFunction: (job) ->
|
|
queued = ['created', 'queued'].indexOf(job.get('state')) != -1
|
|
# TODO: why queue is sometimes just common instead of build.common?
|
|
queued && (!queue || job.get('queue') == "builds.#{queue}" || job.get('queue') == queue)
|
|
|
|
filterProperties: ['state', 'queue']
|
|
)
|
|
|
|
running: ->
|
|
@find(state: 'started')
|
|
Ember.FilteredRecordArray.create(
|
|
modelClass: Travis.Job
|
|
filterFunction: (job) ->
|
|
job.get('state') == 'started'
|
|
filterProperties: ['state']
|
|
)
|
|
|
|
|