kronos-ruby 0.1.1 → 0.2.0.alpha.4

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: 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