kronos-ruby 0.1.1 → 0.2.0.alpha.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13abdd6e69480f4bd7c7daed7d11aaeef64eb0a9
4
- data.tar.gz: bcca4759f653d84d477633aa5b65e75549aed2ce
3
+ metadata.gz: 587680a0ebf3039066a1088236a3398f675196f8
4
+ data.tar.gz: bced22e06a183cdb81ac1f58315d4dd55721e529
5
5
  SHA512:
6
- metadata.gz: 470e653590c7b057c4cea61da905d4b8eee22a0fc10f0741c58a189e1a30581ab5a0e7963a38f33e81402b096d65aba3967647679a4e4b151eb86903e898c1b3
7
- data.tar.gz: 56f1cbcd229386165c9e63c00cda473e9b0332a6d68117180e7bb2ba58eff19b7e3e3f7954d848170c9141fdd425cb289cac4ae37a02d60a4da2416992d8f69b
6
+ metadata.gz: 8a89c7f79a9d7f33c3ce82a7f3fe6d80e9d2b822fbcfc46aaed0807b0b6ef87710ba8dcf0ed3014a590293ee2d1fb4015c26a2d50f958142058a283cdece9f31
7
+ data.tar.gz: 864a2ae960966144e8902fc6a7c3fbf9ffb3f5a604aeb073418285778d536819f2e21360e4d23d6629e338a316c0a1997bebb43064d5919c65e5c3777d5d6652
@@ -4,6 +4,9 @@
4
4
 
5
5
  ### Unreleased
6
6
 
7
+ ### 0.2.0 [2017-09-22]
8
+ - [Added] Mongo Storage
9
+
7
10
  ### 0.1.1 [2017-09-21]
8
11
  - [Added] Logger structure (Stdout and Slack)
9
12
  - [Added] Storage structure (InMemory)
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency 'concurrent-ruby'
27
27
  spec.add_dependency 'chronic'
28
+ spec.add_dependency 'mongoid'
28
29
  spec.add_development_dependency 'bundler'
29
30
  spec.add_development_dependency 'coveralls'
30
31
  spec.add_development_dependency 'fasterer'
@@ -6,3 +6,4 @@ module Kronos
6
6
  end
7
7
 
8
8
  require 'kronos/storage/in_memory'
9
+ require 'kronos/storage/mongo_db'
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mongoid'
4
+
5
+ module Kronos
6
+ module Storage
7
+ module Mongo
8
+ module Model
9
+ class ReportModel
10
+ include Mongoid::Document
11
+ store_in collection: :kronos_reports
12
+
13
+ field :task_id, type: Symbol
14
+ field :metadata, type: Hash
15
+ field :timestamp, type: Time
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mongoid'
4
+
5
+ module Kronos
6
+ module Storage
7
+ module Mongo
8
+ module Model
9
+ class ScheduledTaskModel
10
+ include Mongoid::Document
11
+ store_in collection: :kronos_scheduled_tasks
12
+
13
+ field :task_id, type: Symbol
14
+ field :next_run, type: Time
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'kronos/storage/mongo/model/scheduled_task_model'
4
+ require 'kronos/storage/mongo/model/report_model'
5
+
6
+ module Kronos
7
+ module Storage
8
+ # :reek:UtilityFunction:
9
+ class MongoDb
10
+ SHEDULED_TASK_MODEL = Mongo::Model::ScheduledTaskModel
11
+ REPORT_MODEL = Mongo::Model::ReportModel
12
+
13
+ def scheduled_tasks
14
+ # Returns all current Kronos::ScheduledTask, resolved or pending
15
+ SHEDULED_TASK_MODEL.all
16
+ end
17
+
18
+ def schedule(scheduled_task)
19
+ # Removes any Kronos::ScheduledTask with same task ID and saves the one in parameter
20
+ remove(scheduled_task.task_id)
21
+ SHEDULED_TASK_MODEL.create(scheduled_task_params(scheduled_task))
22
+ end
23
+
24
+ def resolved_tasks
25
+ # Returns a list of task ids that where resolved (where scheduled_task.next_run <= Time.now)
26
+ SHEDULED_TASK_MODEL.where(:next_run.lte => Time.now).pluck(:task_id)
27
+ end
28
+
29
+ def remove(task_id)
30
+ # Removes scheduled tasks with task_id
31
+ SHEDULED_TASK_MODEL.where(task_id: task_id).destroy_all
32
+ end
33
+
34
+ def reports
35
+ # Returns all previous Kronos::Report that were saved using #register_report
36
+ REPORT_MODEL.all
37
+ end
38
+
39
+ def register_report(report)
40
+ # Removes any Kronos::Report with same task ID and saves the one in parameter
41
+ remove_reports_for(report.task_id)
42
+ REPORT_MODEL.create(report_params(report))
43
+ end
44
+
45
+ def remove_reports_for(task_id)
46
+ # Removes reports with task_id
47
+ REPORT_MODEL.where(task_id: task_id).destroy_all
48
+ end
49
+
50
+ def pending?(task)
51
+ # Checks if task has any pending scheduled task (where scheduled_task.next_run > Time.now)
52
+ query = SHEDULED_TASK_MODEL.where(task_id: task.id)
53
+ query.exists? && query.first.next_run > Time.now
54
+ end
55
+
56
+ private
57
+
58
+ def scheduled_task_params(scheduled_task)
59
+ {
60
+ task_id: scheduled_task.task_id,
61
+ next_run: scheduled_task.next_run
62
+ }
63
+ end
64
+
65
+ def report_params(report)
66
+ {
67
+ task_id: report.task_id,
68
+ metadata: report.metadata,
69
+ timestamp: report.timestamp
70
+ }
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kronos
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kronos-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0.alpha.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Teles
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mongoid
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -245,6 +259,9 @@ files:
245
259
  - lib/kronos/scheduled_task.rb
246
260
  - lib/kronos/storage.rb
247
261
  - lib/kronos/storage/in_memory.rb
262
+ - lib/kronos/storage/mongo/model/report_model.rb
263
+ - lib/kronos/storage/mongo/model/scheduled_task_model.rb
264
+ - lib/kronos/storage/mongo_db.rb
248
265
  - lib/kronos/task.rb
249
266
  - lib/kronos/version.rb
250
267
  - lib/kronos/web.rb
@@ -265,9 +282,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
265
282
  version: '0'
266
283
  required_rubygems_version: !ruby/object:Gem::Requirement
267
284
  requirements:
268
- - - ">="
285
+ - - ">"
269
286
  - !ruby/object:Gem::Version
270
- version: '0'
287
+ version: 1.3.1
271
288
  requirements: []
272
289
  rubyforge_project:
273
290
  rubygems_version: 2.4.8