X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/bb3b70b2435a0886b4a2ace9070e24903b04c8a9..32002eb6e87a391d1fad2b1b206dbc74d6659fc5:/services/api/app/models/log.rb?ds=sidebyside diff --git a/services/api/app/models/log.rb b/services/api/app/models/log.rb index 17d6ec42db..39f789e69f 100644 --- a/services/api/app/models/log.rb +++ b/services/api/app/models/log.rb @@ -1,38 +1,48 @@ class Log < ArvadosModel - include AssignUuid + include HasUuid include KindAndEtag include CommonApiTemplate serialize :properties, Hash before_validation :set_default_event_at - before_save { self.owner_uuid = self.system_user_uuid } - attr_accessor :object + attr_accessor :object, :object_kind + after_save :send_notify api_accessible :user, extend: :common do |t| - t.add :object_kind + t.add :id t.add :object_uuid - t.add :object, :if => :object + t.add :object_owner_uuid + t.add :object_kind t.add :event_at t.add :event_type t.add :summary t.add :properties end - def self.start_from(thing, event_type) - self.new do |log| - log.event_type = event_type - log.properties = { - 'old_etag' => nil, - 'old_attributes' => nil, - } - log.seed_basics_from thing + def object_kind + if k = ArvadosModel::resource_class_for_uuid(object_uuid) + k.kind + end + end + + def fill_object(thing) + self.object_uuid ||= thing.uuid + if respond_to? :object_owner_uuid= + # Skip this if the object_owner_uuid migration hasn't happened + # yet, i.e., we're in the process of migrating an old database. + self.object_owner_uuid = thing.owner_uuid end + self.summary ||= "#{self.event_type} of #{thing.uuid}" + self + end + + def fill_properties(age, etag_prop, attrs_prop) + self.properties.merge!({"#{age}_etag" => etag_prop, + "#{age}_attributes" => attrs_prop}) end def update_to(thing) - self.seed_basics_from thing - self.properties["new_etag"] = thing.andand.etag - self.properties["new_attributes"] = thing.andand.attributes - case self.event_type + fill_properties('new', thing.andand.etag, thing.andand.logged_attributes) + case event_type when "create" self.event_at = thing.created_at when "update" @@ -40,14 +50,7 @@ class Log < ArvadosModel when "destroy" self.event_at = Time.now end - end - - def seed_basics_from(thing) - if not thing.nil? - self.object_kind ||= thing.kind - self.object_uuid ||= thing.uuid - self.summary ||= "#{self.event_type} of #{thing.uuid}" - end + self end protected @@ -65,4 +68,21 @@ class Log < ArvadosModel def set_default_event_at self.event_at ||= Time.now end + + def log_start_state + # don't log start state on logs + end + + def log_change(event_type) + # Don't log changes to logs. + end + + def ensure_valid_uuids + # logs can have references to deleted objects + end + + def send_notify + connection.execute "NOTIFY logs, '#{self.id}'" + end + end