trifle-stats 0.3.2 → 0.4.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
  SHA256:
3
- metadata.gz: 1172a6216efbeaad062de0f482b9fd3b4bc19173326c9eb1f51c88c9d59889f2
4
- data.tar.gz: d971dafe8147352aa04162ea7437b88eaf3f94b4cbd7939bda187eb9a2bb0d9d
3
+ metadata.gz: 6a3916f479d04bbffdab357ec6562c37134f114bb74eb8274b8c8285256ace45
4
+ data.tar.gz: 30df5c2bf81b14fef07ad6fd5a31e130bec6183e589fbc6dd9b9e1a23e2f94bf
5
5
  SHA512:
6
- metadata.gz: 20e2bcef27f5a2cce12574ac3b92c13972e8fda1cae6437d6b1ced58fc4d877032048c9650080719d9da68fccd75643379021dddda8de375a380d334a2ae9ed3
7
- data.tar.gz: 4db1a6c31ec03fc22f519f5f6d508af8ce6ad44b2a9ec15b9b845808b038db297d8dc9551e298865401ee7fa837c9c1f50546c9bbdee710cfd7b64cd9ec218ce
6
+ metadata.gz: f1427bd400037791d86dd1890bd8dde7f91e5482dd65119f4223cc0f235cee7563af9675b4bbc8f15243fb4313dfea9a5d70d4e986f3c5ff91a58900430d60c4
7
+ data.tar.gz: 637dcd3e31689fa0b62ea583d8343fbc93943afbb285daaa8203f0e25eb87b43f3f4ed78217923be01316c2eeefeb6650988588ac14b6dd40d5caac47980250b
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trifle-stats (0.3.2)
4
+ trifle-stats (0.4.0)
5
+ mongo (>= 2.14.0)
5
6
  pg (>= 1.2)
6
7
  redis (>= 4.2)
7
8
  tzinfo (~> 2.0)
@@ -10,17 +11,20 @@ GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
13
  ast (2.4.2)
14
+ bson (4.12.1)
13
15
  byebug (11.1.3)
14
- concurrent-ruby (1.1.8)
16
+ concurrent-ruby (1.1.9)
15
17
  diff-lcs (1.4.4)
16
18
  dotenv (2.7.6)
19
+ mongo (2.14.0)
20
+ bson (>= 4.8.2, < 5.0.0)
17
21
  parallel (1.20.1)
18
22
  parser (3.0.0.0)
19
23
  ast (~> 2.4.1)
20
24
  pg (1.2.3)
21
25
  rainbow (3.0.0)
22
26
  rake (12.3.3)
23
- redis (4.2.5)
27
+ redis (4.3.1)
24
28
  regexp_parser (2.0.3)
25
29
  rexml (3.2.4)
26
30
  rspec (3.10.0)
data/lib/trifle/stats.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'trifle/stats/driver/redis'
3
+ require 'trifle/stats/driver/mongo'
4
4
  require 'trifle/stats/driver/postgres'
5
5
  require 'trifle/stats/driver/process'
6
+ require 'trifle/stats/driver/redis'
6
7
  require 'trifle/stats/mixins/packer'
7
8
  require 'trifle/stats/nocturnal'
8
9
  require 'trifle/stats/configuration'
@@ -2,7 +2,7 @@
2
2
 
3
3
  Driver is a wrapper class that persists and retrieves values from backend. It needs to implement:
4
4
 
5
- - `inc(key:, **values)` method add values
5
+ - `inc(key:, **values)` method increment values
6
6
  - `set(key:, **values)` method set values
7
7
  - `get(key:)` method to retrieve values
8
8
 
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mongo'
4
+ require_relative '../mixins/packer'
5
+
6
+ module Trifle
7
+ module Stats
8
+ module Driver
9
+ class Mongo
10
+ include Mixins::Packer
11
+ attr_accessor :client, :collection_name, :separator
12
+
13
+ def initialize(client, collection_name: 'trifle_stats')
14
+ @client = client
15
+ @collection_name = collection_name
16
+ @separator = '::'
17
+ end
18
+
19
+ def inc(key:, **values)
20
+ pkey = key.join(separator)
21
+
22
+ collection.bulk_write(
23
+ [upsert_operation('$inc', pkey: pkey, values: values)]
24
+ )
25
+ end
26
+
27
+ def set(key:, **values)
28
+ pkey = key.join(separator)
29
+
30
+ collection.bulk_write(
31
+ [upsert_operation('$set', pkey: pkey, values: values)]
32
+ )
33
+ end
34
+
35
+ def upsert_operation(operation, pkey:, values:)
36
+ data = self.class.pack(hash: { data: values })
37
+ {
38
+ update_many: {
39
+ filter: { key: pkey },
40
+ update: { operation => data },
41
+ upsert: true
42
+ }
43
+ }
44
+ end
45
+
46
+ def get(key:)
47
+ pkey = key.join(separator)
48
+
49
+ data = collection.find(key: pkey).limit(1).first
50
+ return {} if data.nil? || data['data'].nil?
51
+
52
+ data['data']
53
+ end
54
+
55
+ private
56
+
57
+ def collection
58
+ client[collection_name]
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Trifle
4
4
  module Stats
5
- VERSION = '0.3.2'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  end
data/trifle-stats.gemspec CHANGED
@@ -33,7 +33,9 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency('rake', '~> 13.0')
34
34
  spec.add_development_dependency('rspec', '~> 3.2')
35
35
  spec.add_development_dependency('rubocop', '1.0.0')
36
- spec.add_runtime_dependency('redis', '>= 4.2')
36
+
37
+ spec.add_runtime_dependency('mongo', '>= 2.14.0')
37
38
  spec.add_runtime_dependency('pg', '>= 1.2')
39
+ spec.add_runtime_dependency('redis', '>= 4.2')
38
40
  spec.add_runtime_dependency('tzinfo', '~> 2.0')
39
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trifle-stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jozef Vaclavik
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-20 00:00:00.000000000 Z
11
+ date: 2021-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -95,19 +95,19 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.0.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: redis
98
+ name: mongo
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '4.2'
103
+ version: 2.14.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '4.2'
110
+ version: 2.14.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: pg
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '1.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: redis
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '4.2'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '4.2'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: tzinfo
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +178,7 @@ files:
164
178
  - lib/trifle/stats.rb
165
179
  - lib/trifle/stats/configuration.rb
166
180
  - lib/trifle/stats/driver/README.md
181
+ - lib/trifle/stats/driver/mongo.rb
167
182
  - lib/trifle/stats/driver/postgres.rb
168
183
  - lib/trifle/stats/driver/process.rb
169
184
  - lib/trifle/stats/driver/redis.rb