trogdir_models 0.7.4 → 0.7.5

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: 7378d7cbfd3494afdaaf326d28ce63a46d4dde00
4
- data.tar.gz: 9effcfc1f4372689e5d38231342d05a292d72a8d
3
+ metadata.gz: d24c65d59c98428bcf8092f1e79d424ce0491a9e
4
+ data.tar.gz: c3a079f9aebb8f516fa9817aa7848c5b1b9b430e
5
5
  SHA512:
6
- metadata.gz: ab7605d78c0f946250a9ad743d016e6d1138652dc8ef1d1f719c68e8d363ab51a1bbf8295cfddb02e3e0eceb6b216ce922c04cf35a4da41a2c81b2c56577b483
7
- data.tar.gz: 8670018feccee0d3877dc03da6504f4b4ad4594ea075a4831780f228e9005d59c268adf8ad32d571436db32c4584878471998d8c8bbd458465fc9af744911afb
6
+ metadata.gz: e4c2dcb2c74c129126d9d5ccfe3a03e8080809bed745a5d0829923efe279fcbb138a1c8ba8938de79a5419ec2538a004c4bfb61032550d761663d71f4d2b98d0
7
+ data.tar.gz: d68d55c5199ca5a0a589424bcccda851010bb151ddbe525cc9bdea5399054497a1d76873e3b41fc528cf75b68123db94f917927fd1e0a338c694169ea52673c3
@@ -4,4 +4,5 @@ class ChangeSync
4
4
  embedded_in :changeset
5
5
  belongs_to :syncinator
6
6
  embeds_many :sync_logs
7
- end
7
+ field :run_after, type: Time, default: -> { Time.now - 1 }
8
+ end
@@ -11,6 +11,9 @@ class SyncLog
11
11
 
12
12
  validates :started_at, presence: true
13
13
 
14
+ before_save :update_change_sync
15
+ after_save :save_change_sync
16
+
14
17
  delegate :changeset, :syncinator, to: :change_sync
15
18
 
16
19
  def self.find_through_parents(id)
@@ -19,4 +22,21 @@ class SyncLog
19
22
  change_sync = changeset.change_syncs.find_by('sync_logs._id' => id)
20
23
  change_sync.sync_logs.find(id)
21
24
  end
25
+
26
+ private
27
+
28
+ def update_change_sync
29
+ change_sync.run_after = if succeeded_at_changed?
30
+ nil
31
+ elsif errored_at_changed?
32
+ # wait exponentially longer between retries the more it fails
33
+ errored_at + (change_sync.sync_logs.length**4).minutes
34
+ elsif started_at_changed?
35
+ started_at + 1.hour
36
+ end
37
+ end
38
+
39
+ def save_change_sync
40
+ change_sync.save! if change_sync.run_after_changed?
41
+ end
22
42
  end
@@ -23,14 +23,15 @@ class Syncinator
23
23
  name
24
24
  end
25
25
 
26
- def startable_changesets(retry_after = nil)
27
- retry_after ||= 1.hour.ago
28
-
29
- Changeset.nor(
30
- :change_syncs.elem_match => {syncinator_id: id, :'sync_logs.succeeded_at'.ne => nil}
31
- ).or(
32
- {:change_syncs.elem_match => {syncinator_id: id, :sync_logs.in => [nil, []]}},
33
- {:change_syncs.elem_match => {syncinator_id: id, :sync_logs.elem_match => {:started_at.lt => retry_after, succeeded_at: nil}}}
26
+ def unfinished_changesets
27
+ Changeset.where(
28
+ :change_syncs.elem_match => {syncinator_id: id, :run_after.ne => nil}
29
+ ).order_by(created_at: :asc)
30
+ end
31
+
32
+ def startable_changesets
33
+ Changeset.where(
34
+ :change_syncs.elem_match => {syncinator_id: id, :run_after.lt => Time.now }
34
35
  ).order_by(created_at: :asc)
35
36
  end
36
37
 
@@ -1,3 +1,3 @@
1
1
  module TrogdirModels
2
- VERSION = '0.7.4'
2
+ VERSION = '0.7.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trogdir_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Crownoble