redimap 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6528b99d1b6dcd904c2c60b2e2a292cc6c88210
4
- data.tar.gz: 1937d909847c35c540556241434fac179782280d
3
+ metadata.gz: 7aae1058590d80f17e8db74f6958c9f6f4298e2f
4
+ data.tar.gz: 7210171c97d686c2621c0c80c8d95e3e4bb9e7c7
5
5
  SHA512:
6
- metadata.gz: 5138560b0e28a1b78f7cd0abfefd95d19bca1fa73a7ade2ca86cf925f08576daca78e9169e06e024f851c922594bc139275c864dc1b2838c9165a12d66a248b3
7
- data.tar.gz: 4279f416c647a13cad78b80e149e4974e1aca47e8ba17fb75413d5ea697f3ce744939b356ff19f110f77df460e69e06a3efd0252a9a05c7e605a36d1107bb1cb
6
+ metadata.gz: d577b5997aaab61c5d2671b500c1f7a537e4b3cd747e659979c369eaf3a69f8504527f69f53ed918ba1c481ddab124b7936cef620cdcc8e24c0882bff4545e33
7
+ data.tar.gz: 90a755ebb2374c138f8008de02053e5a0a8649b37a0481fbac9559ccaf4146b668e483e99d0e54dcf229621d284d5def22171d7fe4f091f763c076b1a2ab2964
data/README.md CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  Redimap provides a simple executable for polling mailboxes
4
4
  within an IMAP account. It keeps track of what it's seen using Redis. For new
5
- messages, the mailbox and uid are queued in Redis. The format used should be
6
- compatible with Resque.
5
+ messages, the mailbox and uid are queued in Redis. The queue format should be
6
+ compatible with [Resque](https://github.com/resque/resque) and
7
+ [Sidekiq](https://github.com/mperham/sidekiq).
7
8
 
8
9
  More sleep lost by [tiredpixel](http://www.tiredpixel.com).
9
10
 
@@ -4,6 +4,8 @@ require 'optparse'
4
4
 
5
5
  require File.expand_path(File.dirname(__FILE__) + '/../lib/redimap')
6
6
 
7
+ @logger = Redimap.logger
8
+
7
9
 
8
10
  # = Parse opts
9
11
 
@@ -25,5 +27,7 @@ loop do
25
27
 
26
28
  break unless options[:eternal]
27
29
 
30
+ @logger.debug { "Snoring for #{Redimap.config.polling_interval} s" }
31
+
28
32
  sleep Redimap.config.polling_interval # Sleep awhile.
29
33
  end
@@ -1,3 +1,6 @@
1
+ require 'logger'
2
+
3
+
1
4
  module Redimap
2
5
 
3
6
  def self.config
@@ -5,22 +8,47 @@ module Redimap
5
8
  end
6
9
 
7
10
  def self.configure
8
- yield @config
11
+ yield self.config
12
+ end
13
+
14
+ def self.logger
15
+ unless @logger
16
+ @logger = Logger.new($stdout)
17
+
18
+ @logger.level = Logger.const_get(ENV['LOG_LEVEL'] || 'INFO')
19
+ @logger.progname = :Redimap
20
+ end
21
+
22
+ @logger
9
23
  end
10
24
 
11
25
  def self.queue_new_mailboxes_uids
26
+ @logger = Redimap.logger
27
+
28
+ @logger.info { "Queueing new mailboxes UIDs" }
29
+
12
30
  Redimap::ImapConn.new do |imap|
13
31
  Redimap::RedisConn.new do |redis|
14
- Redimap.config.imap_mailboxes.each do |mailbox|
15
- last_seen_uid = redis.get_mailbox_uid(mailbox)
16
-
17
- unseen_uids = imap.read_mailbox(mailbox, last_seen_uid)
18
-
19
- unseen_uids.each do |uid|
20
- redis.queue_mailbox_uid(mailbox, uid)
32
+ begin
33
+ Redimap.config.imap_mailboxes.each do |mailbox|
34
+ last_seen_uid = redis.get_mailbox_uid(mailbox)
21
35
 
22
- redis.set_mailbox_uid(mailbox, uid)
36
+ @logger.debug { "Last saw #{mailbox}##{last_seen_uid}" }
37
+
38
+ unseen_uids = imap.read_mailbox(mailbox, last_seen_uid)
39
+
40
+ unseen_uids.each do |uid|
41
+ redis.queue_mailbox_uid(mailbox, uid)
42
+
43
+ redis.set_mailbox_uid(mailbox, uid)
44
+ end
45
+
46
+ @logger.info { "Queued #{unseen_uids.count} UIDs from #{mailbox}" }
23
47
  end
48
+ rescue Net::IMAP::Error, Redis::BaseError => e
49
+ @logger.error { e.to_s }
50
+
51
+ return
24
52
  end
25
53
  end
26
54
  end
@@ -18,6 +18,8 @@ module Redimap
18
18
  attr_accessor :polling_interval
19
19
 
20
20
  def initialize
21
+ @logger = Redimap.logger
22
+
21
23
  @imap_host = ENV['IMAP_HOST']
22
24
  @imap_port = ENV['IMAP_PORT'] || 993
23
25
  @imap_username = ENV['IMAP_USERNAME']
@@ -30,6 +32,24 @@ module Redimap
30
32
  @redis_ns_queue = ENV['REDIS_NS_QUEUE'] || "resque"
31
33
 
32
34
  @polling_interval = (ENV['POLLING_INTERVAL'] || 60).to_i
35
+
36
+ @logger.debug { "Initialized #{to_s}" }
37
+ end
38
+
39
+ def to_s
40
+ {
41
+ :imap_host => @imap_host,
42
+ :imap_port => @imap_port,
43
+ :imap_username => @imap_username,
44
+
45
+ :imap_mailboxes => @imap_mailboxes,
46
+
47
+ :redis_url => @redis_url,
48
+ :redis_ns_redimap => @redis_ns_redimap,
49
+ :redis_ns_queue => @redis_ns_queue,
50
+
51
+ :polling_interval => @polling_interval,
52
+ }
33
53
  end
34
54
 
35
55
  end
@@ -5,13 +5,19 @@ module Redimap
5
5
  class ImapConn
6
6
 
7
7
  def initialize
8
- @imap = Net::IMAP.new(Redimap.config.imap_host, {
9
- :port => Redimap.config.imap_port,
10
- :ssl => true
11
- })
8
+ @logger = Redimap.logger
12
9
 
13
- if @imap
10
+ begin
11
+ @imap = Net::IMAP.new(Redimap.config.imap_host, {
12
+ :port => Redimap.config.imap_port,
13
+ :ssl => true
14
+ })
15
+
14
16
  @imap.login(Redimap.config.imap_username, Redimap.config.imap_password)
17
+ rescue Net::IMAP::NoResponseError => e
18
+ @logger.error { e.to_s }
19
+
20
+ return
15
21
  end
16
22
 
17
23
  if block_given?
@@ -22,11 +28,9 @@ module Redimap
22
28
  end
23
29
 
24
30
  def close
25
- if @imap
26
- @imap.logout
27
-
28
- @imap.disconnect
29
- end
31
+ @imap.logout
32
+
33
+ @imap.disconnect
30
34
  end
31
35
 
32
36
  def read_mailbox(mailbox = "INBOX", last_seen_uid = 0)
@@ -10,7 +10,17 @@ module Redimap
10
10
  @@RESCUE_CLASS = 'RedimapJob'
11
11
 
12
12
  def initialize
13
- @redis = Redis.connect(:url => Redimap.config.redis_url)
13
+ @logger = Redimap.logger
14
+
15
+ begin
16
+ @redis = Redis.connect(:url => Redimap.config.redis_url)
17
+
18
+ @redis.ping
19
+ rescue Redis::CannotConnectError => e
20
+ @logger.error { e.to_s }
21
+
22
+ return
23
+ end
14
24
 
15
25
  @KEYS = {
16
26
  :redimap_mailboxes => "#{Redimap.config.redis_ns_redimap}:mailboxes",
@@ -26,9 +36,7 @@ module Redimap
26
36
  end
27
37
 
28
38
  def close
29
- if @redis
30
- @redis.quit
31
- end
39
+ @redis.quit
32
40
  end
33
41
 
34
42
  def get_mailbox_uid(mailbox)
@@ -1,5 +1,5 @@
1
1
  module Redimap
2
2
 
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
 
5
5
  end
@@ -10,10 +10,10 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["tp@tiredpixel.com"]
11
11
  spec.description = %q{Redimap provides a simple executable for polling mailboxes
12
12
  within an IMAP account. It keeps track of what it's seen using Redis. For new
13
- messages, the mailbox and uid are queued in Redis. The format used should be
14
- compatible with Resque.}
13
+ messages, the mailbox and uid are queued in Redis. The queue format should be
14
+ compatible with Resque and Sidekiq.}
15
15
  spec.summary = %q{Redimap polls IMAP account mailboxes and queues in Redis.}
16
- spec.homepage = ""
16
+ spec.homepage = "https://github.com/tiredpixel/redimap"
17
17
  spec.license = "MIT"
18
18
 
19
19
  spec.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redimap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tiredpixel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-12 00:00:00.000000000 Z
11
+ date: 2013-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -69,8 +69,8 @@ dependencies:
69
69
  description: |-
70
70
  Redimap provides a simple executable for polling mailboxes
71
71
  within an IMAP account. It keeps track of what it's seen using Redis. For new
72
- messages, the mailbox and uid are queued in Redis. The format used should be
73
- compatible with Resque.
72
+ messages, the mailbox and uid are queued in Redis. The queue format should be
73
+ compatible with Resque and Sidekiq.
74
74
  email:
75
75
  - tp@tiredpixel.com
76
76
  executables:
@@ -97,7 +97,7 @@ files:
97
97
  - spec/lib/redimap/core_spec.rb
98
98
  - spec/lib/redimap/imap_conn_spec.rb
99
99
  - spec/spec_helper.rb
100
- homepage: ''
100
+ homepage: https://github.com/tiredpixel/redimap
101
101
  licenses:
102
102
  - MIT
103
103
  metadata: {}