tally 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +217 -0
  3. data/Rakefile +32 -0
  4. data/app/assets/config/tally_manifest.js +2 -0
  5. data/app/assets/javascripts/tally/application.js +15 -0
  6. data/app/assets/stylesheets/tally/application.css +15 -0
  7. data/app/controllers/tally/application_controller.rb +17 -0
  8. data/app/controllers/tally/days_controller.rb +19 -0
  9. data/app/controllers/tally/keys_controller.rb +19 -0
  10. data/app/controllers/tally/records_controller.rb +21 -0
  11. data/app/helpers/tally/application_helper.rb +4 -0
  12. data/app/helpers/tally/increment_helper.rb +15 -0
  13. data/app/jobs/tally/application_job.rb +4 -0
  14. data/app/jobs/tally/calculator_runner_job.rb +12 -0
  15. data/app/models/tally/application_record.rb +7 -0
  16. data/app/models/tally/record.rb +30 -0
  17. data/app/presenters/tally/record_presenter.rb +29 -0
  18. data/bin/annotate +29 -0
  19. data/bin/appraisal +29 -0
  20. data/bin/bundle +114 -0
  21. data/bin/coderay +29 -0
  22. data/bin/htmldiff +29 -0
  23. data/bin/ldiff +29 -0
  24. data/bin/nokogiri +29 -0
  25. data/bin/pry +29 -0
  26. data/bin/rackup +29 -0
  27. data/bin/rails +14 -0
  28. data/bin/rake +29 -0
  29. data/bin/rspec +29 -0
  30. data/bin/rubocop +29 -0
  31. data/bin/ruby-parse +29 -0
  32. data/bin/ruby-rewrite +29 -0
  33. data/bin/sprockets +29 -0
  34. data/bin/thor +29 -0
  35. data/config/routes.rb +12 -0
  36. data/db/migrate/20181016172358_create_tally_records.rb +15 -0
  37. data/lib/tally.rb +77 -0
  38. data/lib/tally/archiver.rb +64 -0
  39. data/lib/tally/calculator.rb +30 -0
  40. data/lib/tally/calculator_runner.rb +56 -0
  41. data/lib/tally/calculators.rb +29 -0
  42. data/lib/tally/countable.rb +23 -0
  43. data/lib/tally/daily.rb +64 -0
  44. data/lib/tally/engine.rb +28 -0
  45. data/lib/tally/increment.rb +25 -0
  46. data/lib/tally/key_finder.rb +123 -0
  47. data/lib/tally/key_finder/entry.rb +66 -0
  48. data/lib/tally/keyable.rb +55 -0
  49. data/lib/tally/record_searcher.rb +110 -0
  50. data/lib/tally/sweeper.rb +46 -0
  51. data/lib/tally/version.rb +5 -0
  52. data/lib/tasks/tally_tasks.rake +16 -0
  53. metadata +256 -0
@@ -0,0 +1,46 @@
1
+ module Tally
2
+ class Sweeper
3
+
4
+ def initialize(key: nil, day: "*", record: nil, type: nil)
5
+ @key = key
6
+ @day = day
7
+ @record = record
8
+ @type = type
9
+ end
10
+
11
+ def purge_date
12
+ @purge_date ||= 3.days.ago.beginning_of_day.to_date
13
+ end
14
+
15
+ def purgeable_keys
16
+ @purgeable_keys ||= finder.entries.map do |entry|
17
+ if entry.date <= purge_date
18
+ entry.raw_key
19
+ end
20
+ end.compact
21
+ end
22
+
23
+ def sweep!
24
+ Tally.redis do |conn|
25
+ purgeable_keys.in_groups_of(25, fill_with = nil).each do |group|
26
+ conn.pipelined do
27
+ group.each do |key|
28
+ conn.del(key)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ def self.sweep!(*args)
36
+ new(*args).sweep!
37
+ end
38
+
39
+ private
40
+
41
+ def finder
42
+ @key_finder ||= KeyFinder.new(key: @key, day: @day, record: @record, type: @type)
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,5 @@
1
+ module Tally
2
+
3
+ VERSION = "1.0.0.beta1"
4
+
5
+ end
@@ -0,0 +1,16 @@
1
+ namespace :tally do
2
+ desc "Sweep all outdated keys from the data store"
3
+ task :sweep => :environment do
4
+ Tally::Sweeper.sweep!
5
+ end
6
+
7
+ desc "Archive today's temporary keys into record entries in the database"
8
+ task :archive => :environment do
9
+ Tally::Archiver.archive!
10
+ end
11
+
12
+ desc "Archive yesterday's temporary keys into record entries in the database"
13
+ task "archive:yesterday" => :environment do
14
+ Tally::Archiver.archive! day: 1.day.ago
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,256 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tally
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.beta1
5
+ platform: ruby
6
+ authors:
7
+ - John D. Tornow
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.2.4.1
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '7'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 5.2.4.1
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '7'
33
+ - !ruby/object:Gem::Dependency
34
+ name: redis
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '4.1'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '4.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: kaminari-activerecord
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.1'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.1'
61
+ - !ruby/object:Gem::Dependency
62
+ name: zeitwerk
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.2'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.2'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec-rails
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.7'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.7'
89
+ - !ruby/object:Gem::Dependency
90
+ name: factory_bot_rails
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '5.1'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '5.1'
103
+ - !ruby/object:Gem::Dependency
104
+ name: shoulda-matchers
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '4.2'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '4.2'
117
+ - !ruby/object:Gem::Dependency
118
+ name: simplecov
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.11'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0.11'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rspec_junit_formatter
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '0.2'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.2'
145
+ - !ruby/object:Gem::Dependency
146
+ name: timecop
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.9'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.9'
159
+ - !ruby/object:Gem::Dependency
160
+ name: appraisal
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ description: Tally is a simple Rails engine for capturing counts of various activities
174
+ around an app. These counts are quickly captured in Redis then are archived periodically
175
+ within the app’s default relational database.
176
+ email:
177
+ - john@johntornow.com
178
+ executables: []
179
+ extensions: []
180
+ extra_rdoc_files: []
181
+ files:
182
+ - README.md
183
+ - Rakefile
184
+ - app/assets/config/tally_manifest.js
185
+ - app/assets/javascripts/tally/application.js
186
+ - app/assets/stylesheets/tally/application.css
187
+ - app/controllers/tally/application_controller.rb
188
+ - app/controllers/tally/days_controller.rb
189
+ - app/controllers/tally/keys_controller.rb
190
+ - app/controllers/tally/records_controller.rb
191
+ - app/helpers/tally/application_helper.rb
192
+ - app/helpers/tally/increment_helper.rb
193
+ - app/jobs/tally/application_job.rb
194
+ - app/jobs/tally/calculator_runner_job.rb
195
+ - app/models/tally/application_record.rb
196
+ - app/models/tally/record.rb
197
+ - app/presenters/tally/record_presenter.rb
198
+ - bin/annotate
199
+ - bin/appraisal
200
+ - bin/bundle
201
+ - bin/coderay
202
+ - bin/htmldiff
203
+ - bin/ldiff
204
+ - bin/nokogiri
205
+ - bin/pry
206
+ - bin/rackup
207
+ - bin/rails
208
+ - bin/rake
209
+ - bin/rspec
210
+ - bin/rubocop
211
+ - bin/ruby-parse
212
+ - bin/ruby-rewrite
213
+ - bin/sprockets
214
+ - bin/thor
215
+ - config/routes.rb
216
+ - db/migrate/20181016172358_create_tally_records.rb
217
+ - lib/tally.rb
218
+ - lib/tally/archiver.rb
219
+ - lib/tally/calculator.rb
220
+ - lib/tally/calculator_runner.rb
221
+ - lib/tally/calculators.rb
222
+ - lib/tally/countable.rb
223
+ - lib/tally/daily.rb
224
+ - lib/tally/engine.rb
225
+ - lib/tally/increment.rb
226
+ - lib/tally/key_finder.rb
227
+ - lib/tally/key_finder/entry.rb
228
+ - lib/tally/keyable.rb
229
+ - lib/tally/record_searcher.rb
230
+ - lib/tally/sweeper.rb
231
+ - lib/tally/version.rb
232
+ - lib/tasks/tally_tasks.rake
233
+ homepage: https://github.com/jdtornow/tally
234
+ licenses:
235
+ - MIT
236
+ metadata: {}
237
+ post_install_message:
238
+ rdoc_options: []
239
+ require_paths:
240
+ - lib
241
+ required_ruby_version: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: 2.5.7
246
+ required_rubygems_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: 1.8.11
251
+ requirements: []
252
+ rubygems_version: 3.1.2
253
+ signing_key:
254
+ specification_version: 4
255
+ summary: Stats collection and reporting
256
+ test_files: []