mail_runner 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/README.md +149 -0
- data/Rakefile +9 -0
- data/bin/mail_runner +6 -0
- data/lib/mail_runner/bot_helpers/helpers.rb +95 -0
- data/lib/mail_runner/bot_helpers/runner.rb +53 -0
- data/lib/mail_runner/bot_helpers/tests.rb +43 -0
- data/lib/mail_runner/cli.rb +115 -0
- data/lib/mail_runner/head_manager_bot.rb +102 -0
- data/lib/mail_runner/inbound_manager_bot.rb +45 -0
- data/lib/mail_runner/logging.rb +33 -0
- data/lib/mail_runner/queue_manager_bot.rb +53 -0
- data/lib/mail_runner/stats.rb +25 -0
- data/lib/mail_runner/version.rb +3 -0
- data/lib/mail_runner.rb +22 -0
- data/mail_runner.gemspec +36 -0
- data/test/helper.rb +16 -0
- data/test/test_assets/empty.txt +0 -0
- data/test/test_assets/inline_attachments.email +9684 -0
- data/test/test_assets/test.email +59 -0
- data/test/test_assets/test.json +1 -0
- data/test/test_assets/test_config.yml +19 -0
- data/test/test_assets/with_attachments.email +10360 -0
- data/test/test_bot_helpers.rb +158 -0
- data/test/test_cli.rb +139 -0
- data/test/test_inbound_manager_bot.rb +70 -0
- data/test/test_mail_runner.rb +59 -0
- data/test/test_queue_manager_bot.rb +76 -0
- metadata +215 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
module MailRunner
|
2
|
+
|
3
|
+
module QueueManagerBot
|
4
|
+
|
5
|
+
def self.add_to_mail_queue(webhook,parcel)
|
6
|
+
que_packet = [webhook,parcel]
|
7
|
+
$redis.lpush("mail_room", que_packet.to_json)
|
8
|
+
$logger.info("QueueManagerBot") { "#add_to_mail_queue:: email added to queue for processing later."}
|
9
|
+
return true
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.queue_length
|
13
|
+
return $redis.llen("mail_room")
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.process_queue
|
17
|
+
$logger.info("QueueManagerBot") { "Queue Length:: #{queue_length}"}
|
18
|
+
while queue_length > 0
|
19
|
+
$logger.info("QueueManagerBot") { "#process_queue:: Processing queue item:#{queue_length}"}
|
20
|
+
webhook, json_packet = pop_packet_from_queue
|
21
|
+
|
22
|
+
deliver_mail(webhook, json_packet)
|
23
|
+
|
24
|
+
#archive call
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.pop_packet_from_queue
|
29
|
+
# Pop from Queue & organize
|
30
|
+
key, que_packet = $redis.blpop("mail_room", :timeout => 5)
|
31
|
+
#timeout unnecessary in production because of while condition, but needed for MockRedis in Testing Env.
|
32
|
+
$logger.info("QueueManagerBot") { "#item popped from Queue for processing"}
|
33
|
+
data = JSON::parse(que_packet)
|
34
|
+
|
35
|
+
webhook = data[0]
|
36
|
+
json_packet = data[1]
|
37
|
+
|
38
|
+
return webhook, json_packet
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def self.deliver_mail(webhook, json_packet)
|
43
|
+
begin
|
44
|
+
BotHelpers::Runner.post_to_hook(webhook, json_packet)
|
45
|
+
rescue
|
46
|
+
$logger.error("QueueManagerBot") { "#deliver_mail::ERROR: \nServer appears to be down. Make sure the server is running."}
|
47
|
+
queued = self.add_to_mail_queue(webhook, json_packet)
|
48
|
+
raise ArgumentError
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module MailRunner
|
2
|
+
module MadStatter
|
3
|
+
|
4
|
+
#get_stats
|
5
|
+
def get_stat(stat)
|
6
|
+
case stat
|
7
|
+
when "session number"
|
8
|
+
$redis.get("MR::sessions")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
def self.incr_stat(stat)
|
12
|
+
case stat
|
13
|
+
###Totals###
|
14
|
+
when "mail delivered"
|
15
|
+
$redis.incr("MR::mail_processed")
|
16
|
+
when "runner launched"
|
17
|
+
$redis.incr("MR::sessions")
|
18
|
+
#errors
|
19
|
+
#added_queue
|
20
|
+
#removed_queue
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/lib/mail_runner.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Dir[File.dirname(__FILE__) + '/mail_runner/*.rb'].each {|file| require file }
|
2
|
+
|
3
|
+
module MailRunner
|
4
|
+
$redis = Redis.new(:host => 'localhost')
|
5
|
+
|
6
|
+
def self.set_globals
|
7
|
+
$logger = MailRunner::Logging.logger
|
8
|
+
$mad_statter = MailRunner::MadStatter
|
9
|
+
$logger.debug { "Mailrunner initialized in debug mode." }
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.manager_bot
|
13
|
+
defined?(@manager_bot) ? @manager_bot : initialize_manager_bot
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.initialize_manager_bot
|
17
|
+
@manager_bot = MailRunner::ManagerBot.new
|
18
|
+
$logger.debug { "ManagerBot initialized."}
|
19
|
+
return @manager_bot
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
data/mail_runner.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "mail_runner/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "mail_runner"
|
7
|
+
s.version = MailRunner::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Kert Heinecke"]
|
10
|
+
s.email = ["kert@sakuru.io"]
|
11
|
+
s.homepage = "https://github.com/kert-io/mailRunner"
|
12
|
+
s.summary = %q{Gem for inbound mail via Postfix MTA. Creates separate worker process for delivery to app.}
|
13
|
+
s.description = %q{Gem for inbound mail via Postfix MTA. Creates separate worker process for delivery to app.}
|
14
|
+
s.license = 'MIT'
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n") #only works once committed to git
|
17
|
+
#s.files = ["lib/mail_runner.rb", "lib/mail_runner/mail_getter_bot.rb", "lib/mail_runner/mail_getter_bot/*"]
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
s.add_dependency "mail", "~> 2.5.4"
|
25
|
+
s.add_dependency "json", "~> 1.8.1"
|
26
|
+
s.add_dependency "rest-client", "~> 1.8.0"
|
27
|
+
|
28
|
+
|
29
|
+
s.add_development_dependency 'rake', "~> 10.3.2"
|
30
|
+
s.add_development_dependency 'minitest/autorun', "~> 5.4.0"
|
31
|
+
s.add_development_dependency 'minitest/spec', "~> 5.4.0"
|
32
|
+
s.add_development_dependency 'minitest/reporters', "~> 1.1.2"
|
33
|
+
s.add_development_dependency 'minitest-spec-context', "~> 0.0.3"
|
34
|
+
s.add_development_dependency 'rake/testtask'
|
35
|
+
s.add_development_dependency 'mock_redis', '~> 0.15.3'
|
36
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
ENV['RACK_ENV'] = ENV['RAILS_ENV'] = 'test'
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/spec'
|
5
|
+
require "minitest/reporters"
|
6
|
+
require 'minitest-spec-context'
|
7
|
+
require 'mock_redis'
|
8
|
+
require_relative '../lib/mail_runner.rb'
|
9
|
+
|
10
|
+
#Use Mock Redis during testing - Can't use any blocking methods!!
|
11
|
+
$redis = MockRedis.new(:host => 'localhost')
|
12
|
+
$mad_statter = MailRunner::MadStatter
|
13
|
+
$logger = MailRunner::Logging.logger #needed or causes errors in tests
|
14
|
+
$logger.level = Logger::FATAL #turn off logging info during tests
|
15
|
+
|
16
|
+
Minitest::Reporters.use! [Minitest::Reporters::SpecReporter.new(:color => true)]
|
File without changes
|