Skip to content

Commit

Permalink
Store the event initiator in MiqEvent object.
Browse files Browse the repository at this point in the history
  • Loading branch information
lfu committed Oct 27, 2017
1 parent 16c96f7 commit 940e569
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 6 deletions.
11 changes: 10 additions & 1 deletion app/models/miq_event.rb
Expand Up @@ -79,7 +79,16 @@ def process_evm_event(inputs = {})
end

def self.build_evm_event(event, target)
MiqEvent.create(:event_type => event, :target => target, :source => 'POLICY', :timestamp => Time.now.utc)
user = User.current_user
MiqEvent.create(
:event_type => event,
:target => target,
:source => 'POLICY',
:timestamp => Time.now.utc,
:user_id => user.try(:id),
:group_id => user.try(:current_group).try(:id),
:tenant_id => user.try(:current_tenant).try(:id)
)
end

def update_with_policy_result(result = {})
Expand Down
20 changes: 16 additions & 4 deletions app/models/mixins/process_tasks_mixin.rb
Expand Up @@ -11,16 +11,20 @@ def process_tasks(options)
task_audit_event(:success, options, :message => msg)
else
assert_known_task(options)
options[:userid] ||= "system"
options[:userid] ||= User.current_user.try(:userid) || "system"
invoke_tasks_queue(options)
end
end

def invoke_tasks_queue(options)
user = User.current_user
MiqQueue.submit_job(
:class_name => name,
:method_name => "invoke_tasks",
:args => [options]
:args => [options],
:user_id => user.id,
:group_id => user.current_group.id,
:tenant_id => user.current_tenant.id
)
end

Expand Down Expand Up @@ -74,11 +78,15 @@ def invoke_tasks_remote(options)

$log.error("An error occurred while invoking remote tasks...Requeueing for 1 minute from now.")
$log.log_backtrace(err)
user = User.current_user
MiqQueue.submit_job(
:class_name => name,
:method_name => 'invoke_tasks_remote',
:args => [remote_options],
:deliver_on => Time.now.utc + 1.minute
:deliver_on => Time.now.utc + 1.minute,
:user_id => user.id,
:group_id => user.current_group.id,
:tenant_id => user.current_tenant.id
)
next
end
Expand Down Expand Up @@ -131,6 +139,7 @@ def task_arguments(options)

# default implementation, can be overridden
def invoke_task_local(task, instance, options, args)
user = User.current_user
cb = {
:class_name => task.class.to_s,
:instance_id => task.id,
Expand All @@ -143,7 +152,10 @@ def invoke_task_local(task, instance, options, args)
:instance_id => instance.id,
:method_name => options[:task],
:args => args,
:miq_callback => cb
:miq_callback => cb,
:user_id => user.id,
:group_id => user.current_group.id,
:tenant_id => user.current_tenant.id
)
end

Expand Down
7 changes: 7 additions & 0 deletions app/models/vm_or_template.rb
Expand Up @@ -427,6 +427,7 @@ def powerops_callback(task_id, status, msg, result, queue_item)

# override
def self.invoke_task_local(task, vm, options, args)
user = User.current_user
cb = nil
if task
cb =
Expand Down Expand Up @@ -454,6 +455,9 @@ def self.invoke_task_local(task, vm, options, args)
:method_name => options[:task],
:args => args,
:miq_callback => cb,
:user_id => user.id,
:group_id => user.current_group.id,
:tenant_id => user.current_tenant.id
)
else
MiqQueue.submit_job(
Expand All @@ -464,6 +468,9 @@ def self.invoke_task_local(task, vm, options, args)
:method_name => options[:task],
:args => args,
:miq_callback => cb,
:user_id => user.id,
:group_id => user.current_group.id,
:tenant_id => user.current_tenant.id
)
end
end
Expand Down
14 changes: 14 additions & 0 deletions spec/models/miq_event_spec.rb
Expand Up @@ -102,6 +102,20 @@
expect(MiqAeEvent).not_to receive(:raise_evm_event)
MiqEvent.raise_evm_event(@miq_server, "evm_server_start")
end

it "will create miq_event object with username" do
user = FactoryGirl.create(:user_with_group, :userid => "test")
vm = FactoryGirl.create(:vm_vmware)
event = 'request_vm_start'
FactoryGirl.create(:miq_event_definition, :name => event)

User.with_user(user) do
event_obj = MiqEvent.raise_evm_event(vm, event)
expect(event_obj.user_id).to eq(user.id)
expect(event_obj.group_id).to eq(user.current_group.id)
expect(event_obj.tenant_id).to eq(user.current_tenant.id)
end
end
end

context "#process_evm_event" do
Expand Down
6 changes: 5 additions & 1 deletion spec/models/mixins/process_tasks_mixin_spec.rb
Expand Up @@ -28,6 +28,7 @@ def test_method

it "queues a message for the specified task" do
EvmSpecHelper.create_guid_miq_server_zone
allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "admin"))
test_class.process_tasks(:task => "test_method", :ids => [5], :userid => "admin")

message = MiqQueue.first
Expand All @@ -42,6 +43,7 @@ def test_method

it "defaults the userid to system in the queue message" do
EvmSpecHelper.create_guid_miq_server_zone
allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "admin"))
test_class.process_tasks(:task => "test_method", :ids => [5])

message = MiqQueue.first
Expand All @@ -50,7 +52,7 @@ def test_method
message.args.each do |h|
expect(h[:task]).to eq("test_method")
expect(h[:ids]).to eq([5])
expect(h[:userid]).to eq("system")
expect(h[:userid]).to eq("admin")
end
end

Expand Down Expand Up @@ -98,6 +100,7 @@ def test_method
end

it "requeues invoke_tasks_remote when invoke_api_tasks fails" do
allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "admin"))
expect(InterRegionApiMethodRelay).to receive(:api_client_connection_for_region)
expect(test_class).to receive(:invoke_api_tasks).and_raise(RuntimeError)
test_class.invoke_tasks_remote(test_options)
Expand All @@ -118,6 +121,7 @@ def test_method
end

it "requeues if the server does not have an address" do
allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "admin"))
test_class.invoke_tasks_remote(test_options)

expect(MiqQueue.first).to have_attributes(
Expand Down
1 change: 1 addition & 0 deletions spec/models/vm_spec.rb
Expand Up @@ -117,6 +117,7 @@
EvmSpecHelper.create_guid_miq_server_zone
@host = FactoryGirl.create(:host)
@vm = FactoryGirl.create(:vm_vmware, :host => @host)
allow(User).to receive(:current_user).and_return(FactoryGirl.create(:user_with_group, :userid => "Freddy"))
end

it "sets up standard callback for non Power Operations" do
Expand Down

0 comments on commit 940e569

Please sign in to comment.