travis-web/assets/scripts/app/models/log.coffee
Piotr Sarnacki 8124bc3780 Fix requires
2015-01-29 13:39:07 +01:00

101 lines
2.9 KiB
CoffeeScript

require 'travis/log-chunks'
Ajax = Travis.ajax
Request = Ember.Object.extend
HEADERS:
accept: 'application/json; chunked=true; version=2, text/plain; version=2'
run: ->
Ajax.ajax "/jobs/#{@id}/log?cors_hax=true", 'GET',
dataType: 'text'
headers: @HEADERS
success: (body, status, xhr) => Ember.run(this, -> @handle(body, status, xhr))
handle: (body, status, xhr) ->
if Travis.config.pro
@log.set('token', xhr.getResponseHeader('X-Log-Access-Token'))
if xhr.status == 204
$.ajax(url: @redirectTo(xhr), type: 'GET', success: @handlers.text)
else if @isJson(xhr, body)
@handlers.json(body)
else
@handlers.text(body)
redirectTo: (xhr) ->
# Firefox can't see the Location header on the xhr response due to the wrong
# status code 204. Should be some redirect code but that doesn't work with CORS.
xhr.getResponseHeader('Location')
isJson: (xhr, body) ->
# Firefox can't see the Content-Type header on the xhr response due to the wrong
# status code 204. Should be some redirect code but that doesn't work with CORS.
type = xhr.getResponseHeader('Content-Type') || ''
type.indexOf('json') > -1
Log = Ember.Object.extend
version: 0 # used to refresh log on requeue
isLoaded: false
length: 0
fetchMissingParts: (partNumbers, after) ->
return if @get('notStarted')
data = {}
data['part_numbers'] = partNumbers if partNumbers
data['after'] = after if after
Ajax.ajax "/jobs/#{@get('job.id')}/log", 'GET',
dataType: 'json'
headers:
accept: 'application/json; chunked=true; version=2'
data: data
success: (body, status, xhr) =>
Ember.run this, ->
if parts = body.log.parts
for part in parts
@append part
parts: (->
#if Travis.config.pusher_log_fallback
# Travis.LogChunks.create(content: [], missingPartsCallback: => @fetchMissingParts.apply(this, arguments))
#else
Ember.ArrayProxy.create(content: [])
).property()
clearParts: ->
parts = @get('parts')
parts.set('content', [])
fetch: ->
console.log 'log model: fetching log' if Log.DEBUG
@clearParts()
handlers =
json: (json) =>
if json['log']['removed_at']
@set('removed', true)
@loadParts(json['log']['parts'])
text: (text) => @loadText(text)
Request.create(id: id, handlers: handlers, log: this).run() if id = @get('job.id')
clear: ->
@clearParts()
@incrementProperty('version')
append: (part) ->
return if @get('parts').isDestroying || @get('parts').isDestroyed
@get('parts').pushObject(part)
loadParts: (parts) ->
console.log 'log model: load parts' if Log.DEBUG
@append(part) for part in parts
@set('isLoaded', true)
loadText: (text) ->
console.log 'log model: load text' if Log.DEBUG
@append(number: 1, content: text, final: true)
@set('isLoaded', true)
Travis.Log = Log