Skip to content

Commit

Permalink
Merge pull request #391 from dmitry-sinina/1.7.10
Browse files Browse the repository at this point in the history
1.7.10
  • Loading branch information
dmitry-sinina committed Oct 21, 2018
2 parents cf913e8 + c2bb1c4 commit 4b6c7bd
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 22 deletions.
46 changes: 26 additions & 20 deletions app/jobs/jobs/event_processor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,14 @@ class EventProcessor < ::BaseJob


def execute

events.each do |ev|
begin
Event.transaction do
process_event(ev)
ev.destroy!
end
rescue StandardError => e
logger.warn e.message
logger.warn e.backtrace.join("\n")
ev.retries+=1
ev.last_error = e.message
ev.save!
processed_count = 0
events_count = events.count
events.find_each do |ev|
Event.transaction do
processed_count += 1 if safe_process_event(ev)
end
end
events.count
end

protected

def events
@events ||= Event.eager_load(:node).order('created_at')
logger.info "Job #{type} processed #{processed_count}/#{events_count} events."
end

def process_event(ev)
Expand All @@ -33,5 +19,25 @@ def process_event(ev)
ev.node.api.rpc_send(args.shift, args)
end

private

def events
@events ||= Event.preload(:node).order('created_at')
end

def safe_process_event(ev)
process_event(ev)
ev.destroy!
true
rescue StandardError => e
logger.warn { "Processing event ##{ev.id} was failed" }
logger.warn { "<#{e.class}>: #{e.message}" }
logger.warn { e.backtrace.join("\n") }
ev.retries += 1
ev.last_error = e.message
ev.save!
false
end

end
end
4 changes: 2 additions & 2 deletions app/mailers/yeti_mail.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ def email_message(log_id)
from: log.mail_from,
delivery_method_options: log.smtp_connection.delivery_options
) do |format|
format.html { render text: log.msg || ' ', content_type: 'text/html' }
format.html { render html: log.msg.try!(:html_safe) || ' ' }
end
end


end
end
45 changes: 45 additions & 0 deletions spec/mailers/yeti_mail_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
require 'spec_helper'

RSpec.describe YetiMail do
describe '.email_message' do
subject do
YetiMail.email_message(log_id)
end

before do
System::SmtpConnection.create!(
name: 'test',
host: 'smtp.example.com',
port: 25,
from_address: 'sender@example.com',
global: true
)
end
let(:log_id) { log.id }
let!(:log) do
Log::EmailLog.create!(
contact_id: contact.id,
smtp_connection_id: contact.smtp_connection.id,
mail_to: contact.email,
mail_from: 'rspec@example.com',
subject: 'test',
attachment_id: [attachment.id],
msg: '<h1>Hello</h1>'
)
end
let(:attachment) do
Notification::Attachment.create!(filename: 'test.txt', data: 'some data')
end
let(:contact) do
Billing::Contact.create!(email: 'test@example.com')
end


it 'renders the headers and body' do
expect(subject.subject).to eq('test')
expect(subject.to).to eq([log.mail_to])
expect(subject.from).to eq([log.mail_from])
expect(subject.body.encoded).to include(log.msg)
end
end
end
46 changes: 46 additions & 0 deletions spec/requests/api/rest/system/jobs_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
require 'spec_helper'

RSpec.describe Api::Rest::System::JobsController do
describe 'PUT /api/rest/system/jobs/:type/run' do
subject do
put "/api/rest/system/jobs/#{job_type}/run"
end

context 'when type is EventProcessor' do
let(:job_type) { 'EventProcessor' }

include_examples :responds_with_status, 204

context 'with events' do
before do
Event.reload_translations

allow_any_instance_of(YetisNode::JsonRpcTransport).to receive(:rpc_send).
with('request.router.translations.reload', []).and_return(nil)
end

it 'expects to delete success events' do
expect { subject }.to change { Event.count }.from(Node.count).to(0)
end

include_examples :responds_with_status, 204

context 'when one event failed' do
before do
expect_any_instance_of(Jobs::EventProcessor).to receive(:process_event).
exactly(Node.count).times.and_raise(StandardError.new('some error'))
end

it 'expects to not delete events' do
expect { subject }.to_not change { Event.count }
end

include_examples :responds_with_status, 204
end

end

end

end
end

0 comments on commit 4b6c7bd

Please sign in to comment.