
- Re-factor - Remove code for notifications - Remove addons - Remove travis-core gem. - Ignore logs directory only - Move core tests to spec/lib
55 lines
1.5 KiB
Ruby
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
|