travis-api/lib/travis/model/log.rb
Aakriti Gupta 65f1a29d86 Move travis-core files from /vendor to /lib.
- Re-factor
- Remove code for notifications
- Remove addons
- Remove travis-core gem.
- Ignore logs directory only
- Move core tests to spec/lib
2016-07-20 11:22:25 +02:00

55 lines
1.5 KiB
Ruby

require 'metriks'
require 'active_support/core_ext/string/filters'
require 'travis/model'
class Log < Travis::LogsModel
require 'travis/model/log/part'
AGGREGATE_PARTS_SELECT_SQL = <<-sql.squish
SELECT array_to_string(array_agg(log_parts.content ORDER BY number, id), '')
FROM log_parts
WHERE log_id = ?
sql
class << self
def aggregated_content(id)
Metriks.timer('logs.read_aggregated').time do
connection.select_value(sanitize_sql([AGGREGATE_PARTS_SELECT_SQL, id])) || ''
end
end
end
include Travis::Event
belongs_to :job
belongs_to :removed_by, class_name: 'User', foreign_key: :removed_by
has_many :parts, class_name: 'Log::Part', foreign_key: :log_id, :dependent => :destroy
def content
content = read_attribute(:content) || ''
content = [content, self.class.aggregated_content(id)].join unless aggregated?
content
end
def aggregated?
!!aggregated_at
end
def clear!
update_column(:content, '') # TODO why in the world does update_attributes not set content to ''
update_column(:aggregated_at, nil) # TODO why in the world does update_attributes not set aggregated_at to nil?
update_column(:archived_at, nil)
update_column(:archive_verified, nil)
Log::Part.where(log_id: id).delete_all
parts.reload
end
def archived?
archived_at && archive_verified?
end
def to_json
{ 'log' => attributes.slice(*%w(id content created_at job_id updated_at)) }.to_json
end
end