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.
@@ -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
@@ -0,0 +1,3 @@
1
+ module MailRunner
2
+ VERSION = "0.1.0"
3
+ end
@@ -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
+
@@ -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