trifle-stats 0.3.2 → 1.0.0
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 +4 -4
- data/.devcontainer.json +6 -0
- data/.devops/docker/codespaces/Dockerfile +1 -0
- data/.devops/docker/codespaces/docker-compose.yml +28 -0
- data/.devops/docker/environment/.p10k.zsh +1626 -0
- data/.devops/docker/environment/.zshrc +13 -0
- data/.devops/docker/environment/Dockerfile +54 -0
- data/{.gitpod → .devops/docker/gitpod}/Dockerfile +0 -0
- data/{.gitpod → .devops/docker/gitpod}/base/Dockerfile +0 -0
- data/.github/workflows/ruby.yml +16 -17
- data/.gitpod.yml +1 -1
- data/Gemfile.lock +9 -5
- data/README.md +67 -9
- data/lib/trifle/stats/driver/README.md +2 -2
- data/lib/trifle/stats/driver/mongo.rb +62 -0
- data/lib/trifle/stats/driver/postgres.rb +7 -5
- data/lib/trifle/stats/driver/process.rb +6 -4
- data/lib/trifle/stats/driver/redis.rb +7 -5
- data/lib/trifle/stats/operations/timeseries/values.rb +8 -7
- data/lib/trifle/stats/version.rb +1 -1
- data/lib/trifle/stats.rb +2 -1
- data/trifle-stats.gemspec +6 -3
- metadata +49 -27
@@ -0,0 +1,13 @@
|
|
1
|
+
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
|
2
|
+
# Initialization code that may require console input (password prompts, [y/n]
|
3
|
+
# confirmations, etc.) must go above this block; everything else may go below.
|
4
|
+
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
5
|
+
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
6
|
+
fi
|
7
|
+
|
8
|
+
source /root/powerlevel10k/powerlevel10k.zsh-theme
|
9
|
+
|
10
|
+
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
|
11
|
+
[[ ! -f /root/.p10k.zsh ]] || source /root/.p10k.zsh
|
12
|
+
|
13
|
+
POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true
|
@@ -0,0 +1,54 @@
|
|
1
|
+
FROM debian:latest
|
2
|
+
|
3
|
+
ENV TZ=Europe/Bratislava
|
4
|
+
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
5
|
+
|
6
|
+
# install ubuntu packages
|
7
|
+
RUN apt-get update -q \
|
8
|
+
&& apt-get install -y \
|
9
|
+
build-essential \
|
10
|
+
apt-transport-https \
|
11
|
+
zsh \
|
12
|
+
libpq-dev \
|
13
|
+
git \
|
14
|
+
curl \
|
15
|
+
wget \
|
16
|
+
unzip \
|
17
|
+
gpg \
|
18
|
+
gnupg2 \
|
19
|
+
locales \
|
20
|
+
autoconf \
|
21
|
+
libssl-dev \
|
22
|
+
libreadline-dev \
|
23
|
+
zlib1g-dev \
|
24
|
+
tmux \
|
25
|
+
htop \
|
26
|
+
vim \
|
27
|
+
&& apt-get clean
|
28
|
+
|
29
|
+
#set the locale
|
30
|
+
RUN locale-gen en_US.UTF-8
|
31
|
+
ENV LANG en_US.UTF-8
|
32
|
+
ENV LANGUAGE en_US:en
|
33
|
+
ENV LC_ALL en_US.UTF-8
|
34
|
+
|
35
|
+
RUN wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh || true
|
36
|
+
RUN git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /root/powerlevel10k
|
37
|
+
COPY .zshrc /root/.zshrc
|
38
|
+
COPY .p10k.zsh /root/p10k.zsh
|
39
|
+
|
40
|
+
#install asdf
|
41
|
+
ENV ASDF_ROOT /root/.asdf
|
42
|
+
ENV PATH "${ASDF_ROOT}/bin:${ASDF_ROOT}/shims:$PATH"
|
43
|
+
RUN git clone https://github.com/asdf-vm/asdf.git ${ASDF_ROOT} --branch v0.10.0
|
44
|
+
|
45
|
+
RUN asdf plugin-add ruby https://github.com/asdf-vm/asdf-ruby.git
|
46
|
+
|
47
|
+
# install ruby
|
48
|
+
ENV RUBY_VERSION 3.0.0
|
49
|
+
RUN ASDF_RUBY_BUILD_VERSION=v20201225 asdf install ruby ${RUBY_VERSION} \
|
50
|
+
&& asdf global ruby ${RUBY_VERSION}
|
51
|
+
|
52
|
+
RUN gem install bundler
|
53
|
+
|
54
|
+
CMD ["zsh"]
|
File without changes
|
File without changes
|
data/.github/workflows/ruby.yml
CHANGED
@@ -9,29 +9,28 @@ name: Ruby
|
|
9
9
|
|
10
10
|
on:
|
11
11
|
push:
|
12
|
-
branches: [
|
12
|
+
branches: [main]
|
13
13
|
pull_request:
|
14
|
-
branches: [
|
14
|
+
branches: [main]
|
15
15
|
|
16
16
|
jobs:
|
17
17
|
test:
|
18
|
-
|
19
18
|
runs-on: ubuntu-latest
|
20
19
|
strategy:
|
21
20
|
matrix:
|
22
|
-
ruby-version: [
|
21
|
+
ruby-version: ["3.0"]
|
23
22
|
|
24
23
|
steps:
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
24
|
+
- uses: actions/checkout@v2
|
25
|
+
- name: Set up Ruby
|
26
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
27
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
28
|
+
# uses: ruby/setup-ruby@v1
|
29
|
+
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
|
30
|
+
with:
|
31
|
+
ruby-version: ${{ matrix.ruby-version }}
|
32
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
33
|
+
- name: Rspec
|
34
|
+
run: bundle exec rspec
|
35
|
+
- name: Rubocop
|
36
|
+
run: bundle exec rubocop
|
data/.gitpod.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,26 +1,27 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
trifle-stats (0.
|
5
|
-
pg (>= 1.2)
|
6
|
-
redis (>= 4.2)
|
4
|
+
trifle-stats (1.0.0)
|
7
5
|
tzinfo (~> 2.0)
|
8
6
|
|
9
7
|
GEM
|
10
8
|
remote: https://rubygems.org/
|
11
9
|
specs:
|
12
10
|
ast (2.4.2)
|
11
|
+
bson (4.12.1)
|
13
12
|
byebug (11.1.3)
|
14
|
-
concurrent-ruby (1.1.
|
13
|
+
concurrent-ruby (1.1.10)
|
15
14
|
diff-lcs (1.4.4)
|
16
15
|
dotenv (2.7.6)
|
16
|
+
mongo (2.14.0)
|
17
|
+
bson (>= 4.8.2, < 5.0.0)
|
17
18
|
parallel (1.20.1)
|
18
19
|
parser (3.0.0.0)
|
19
20
|
ast (~> 2.4.1)
|
20
21
|
pg (1.2.3)
|
21
22
|
rainbow (3.0.0)
|
22
23
|
rake (12.3.3)
|
23
|
-
redis (4.
|
24
|
+
redis (4.3.1)
|
24
25
|
regexp_parser (2.0.3)
|
25
26
|
rexml (3.2.4)
|
26
27
|
rspec (3.10.0)
|
@@ -60,7 +61,10 @@ DEPENDENCIES
|
|
60
61
|
bundler (~> 2.1)
|
61
62
|
byebug
|
62
63
|
dotenv
|
64
|
+
mongo (>= 2.14.0)
|
65
|
+
pg (>= 1.2)
|
63
66
|
rake (~> 12.0)
|
67
|
+
redis (>= 4.2)
|
64
68
|
rspec (~> 3.0)
|
65
69
|
rubocop (= 1.0.0)
|
66
70
|
trifle-stats!
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ Simple analytics backed by Redis, Postgres, MongoDB, Google Analytics, Segment,
|
|
8
8
|
|
9
9
|
`Trifle::Stats` is a _way too_ simple timeline analytics that helps you track custom metrics. Automatically increments counters for each enabled range. It supports timezones and different week beginning.
|
10
10
|
|
11
|
-
[^1]: TBH only Redis for now 💔.
|
11
|
+
[^1]: TBH only Redis, Postgres and MongoDB for now 💔.
|
12
12
|
|
13
13
|
## Documentation
|
14
14
|
|
@@ -24,11 +24,22 @@ gem 'trifle-stats'
|
|
24
24
|
|
25
25
|
And then execute:
|
26
26
|
|
27
|
-
|
27
|
+
```sh
|
28
|
+
$ bundle install
|
29
|
+
```
|
28
30
|
|
29
31
|
Or install it yourself as:
|
30
32
|
|
31
|
-
|
33
|
+
```sh
|
34
|
+
$ gem install trifle-stats
|
35
|
+
```
|
36
|
+
|
37
|
+
Depending on driver you would like to use, make sure you add required gems into your `Gemfile`.
|
38
|
+
```ruby
|
39
|
+
gem 'mongo', '>= 2.14.0'
|
40
|
+
gem 'pg', '>= 1.2'
|
41
|
+
gem 'redis', '>= 4.2'
|
42
|
+
```
|
32
43
|
|
33
44
|
## Usage
|
34
45
|
|
@@ -45,25 +56,72 @@ end
|
|
45
56
|
|
46
57
|
### Track values
|
47
58
|
|
48
|
-
|
59
|
+
Track your first metrics
|
49
60
|
|
50
|
-
Now track your first metrics
|
51
61
|
```ruby
|
52
62
|
Trifle::Stats.track(key: 'event::logs', at: Time.now, values: {count: 1, duration: 2, lines: 241})
|
53
63
|
=> [{2021-01-25 16:00:00 +0100=>{:count=>1, :duration=>2, :lines=>241}}, {2021-01-25 00:00:00 +0100=>{:count=>1, :duration=>2, :lines=>241}}]
|
54
|
-
|
64
|
+
```
|
65
|
+
|
66
|
+
Then do it few more times
|
67
|
+
|
68
|
+
```ruby
|
55
69
|
Trifle::Stats.track(key: 'event::logs', at: Time.now, values: {count: 1, duration: 1, lines: 56})
|
56
70
|
=> [{2021-01-25 16:00:00 +0100=>{:count=>1, :duration=>1, :lines=>56}}, {2021-01-25 00:00:00 +0100=>{:count=>1, :duration=>1, :lines=>56}}]
|
57
71
|
Trifle::Stats.track(key: 'event::logs', at: Time.now, values: {count: 1, duration: 5, lines: 361})
|
58
72
|
=> [{2021-01-25 16:00:00 +0100=>{:count=>1, :duration=>5, :lines=>361}}, {2021-01-25 00:00:00 +0100=>{:count=>1, :duration=>5, :lines=>361}}]
|
59
73
|
```
|
60
74
|
|
61
|
-
|
75
|
+
You can also store nested counters like
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
Trifle::Stats.track(key: 'event::logs', at: Time.now, values: {
|
79
|
+
count: 1,
|
80
|
+
duration: {
|
81
|
+
parsing: 21,
|
82
|
+
compression: 8,
|
83
|
+
upload: 1
|
84
|
+
},
|
85
|
+
lines: 25432754
|
86
|
+
})
|
87
|
+
```
|
88
|
+
|
89
|
+
#### Get values
|
90
|
+
|
91
|
+
Retrieve your values for specific `range`. Adding increments above will return sum of all the values you've tracked.
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
Trifle::Stats.values(key: 'event::logs', from: Time.now, to: Time.now, range: :day)
|
95
|
+
=> {:at=>[2021-01-25 00:00:00 +0200], :values=>[{"count"=>3, "duration"=>8, "lines"=>658}]}
|
96
|
+
```
|
97
|
+
|
98
|
+
### Assert values
|
99
|
+
|
100
|
+
Asserting values works same way like incrementing, but instead of increment, it sets the value. Duh.
|
101
|
+
|
102
|
+
Set your first metrics
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
Trifle::Stats.assert(key: 'event::logs', at: Time.now, values: {count: 1, duration: 2, lines: 241})
|
106
|
+
=> [{2021-01-25 16:00:00 +0100=>{:count=>1, :duration=>2, :lines=>241}}, {2021-01-25 00:00:00 +0100=>{:count=>1, :duration=>2, :lines=>241}}]
|
107
|
+
```
|
108
|
+
|
109
|
+
Then do it few more times
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
Trifle::Stats.assert(key: 'event::logs', at: Time.now, values: {count: 1, duration: 1, lines: 56})
|
113
|
+
=> [{2021-01-25 16:00:00 +0100=>{:count=>1, :duration=>1, :lines=>56}}, {2021-01-25 00:00:00 +0100=>{:count=>1, :duration=>1, :lines=>56}}]
|
114
|
+
Trifle::Stats.assert(key: 'event::logs', at: Time.now, values: {count: 1, duration: 5, lines: 361})
|
115
|
+
=> [{2021-01-25 16:00:00 +0100=>{:count=>1, :duration=>5, :lines=>361}}, {2021-01-25 00:00:00 +0100=>{:count=>1, :duration=>5, :lines=>361}}]
|
116
|
+
```
|
117
|
+
|
118
|
+
#### Get values
|
119
|
+
|
120
|
+
Retrieve your values for specific `range`. As you just used `assert` above, it will return latest value you've asserted.
|
62
121
|
|
63
|
-
Retrieve your values for specific `range`.
|
64
122
|
```ruby
|
65
123
|
Trifle::Stats.values(key: 'event::logs', from: Time.now, to: Time.now, range: :day)
|
66
|
-
=> [
|
124
|
+
=> {:at=>[2021-01-25 00:00:00 +0200], :values=>[{"count"=>1, "duration"=>5, "lines"=>361}]}
|
67
125
|
```
|
68
126
|
|
69
127
|
## Contributing
|
@@ -2,9 +2,9 @@
|
|
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
|
5
|
+
- `inc(key:, **values)` method increment values
|
6
6
|
- `set(key:, **values)` method set values
|
7
|
-
- `get(
|
7
|
+
- `get(keys:)` method to retrieve values
|
8
8
|
|
9
9
|
## Documentation
|
10
10
|
|
@@ -0,0 +1,62 @@
|
|
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(keys:)
|
47
|
+
pkeys = keys.map { |key| key.join(separator) }
|
48
|
+
data = collection.find(key: { '$in' => pkeys })
|
49
|
+
map = data.inject({}) { |o, d| o.merge(d['key'] => d['data']) }
|
50
|
+
|
51
|
+
pkeys.map { |pkey| map[pkey] || {} }
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def collection
|
57
|
+
client[collection_name]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -44,13 +44,15 @@ module Trifle
|
|
44
44
|
client.exec(query)
|
45
45
|
end
|
46
46
|
|
47
|
-
def get(
|
48
|
-
|
47
|
+
def get(keys:)
|
48
|
+
keys.map do |key|
|
49
|
+
pkey = key.join(separator)
|
49
50
|
|
50
|
-
|
51
|
-
|
51
|
+
data = _get(key: pkey)
|
52
|
+
return {} if data.nil?
|
52
53
|
|
53
|
-
|
54
|
+
self.class.unpack(hash: data)
|
55
|
+
end
|
54
56
|
end
|
55
57
|
|
56
58
|
def _get(key:)
|
@@ -28,10 +28,12 @@ module Trifle
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
def get(
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
def get(keys:)
|
32
|
+
keys.map do |key|
|
33
|
+
self.class.unpack(
|
34
|
+
hash: @data.fetch(key.join(@separator), {})
|
35
|
+
)
|
36
|
+
end
|
35
37
|
end
|
36
38
|
end
|
37
39
|
end
|
@@ -30,12 +30,14 @@ module Trifle
|
|
30
30
|
client.hmset(pkey, *self.class.pack(hash: values))
|
31
31
|
end
|
32
32
|
|
33
|
-
def get(
|
34
|
-
|
33
|
+
def get(keys:)
|
34
|
+
keys.map do |key|
|
35
|
+
pkey = ([prefix] + key).join(separator)
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
37
|
+
self.class.unpack(
|
38
|
+
hash: client.hgetall(pkey)
|
39
|
+
)
|
40
|
+
end
|
39
41
|
end
|
40
42
|
end
|
41
43
|
end
|
@@ -24,13 +24,14 @@ module Trifle
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def perform
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
{
|
28
|
+
at: timeline,
|
29
|
+
values: config.driver.get(
|
30
|
+
keys: timeline.map do |at|
|
31
|
+
[key, range, at.to_i]
|
32
|
+
end
|
33
|
+
)
|
34
|
+
}
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
data/lib/trifle/stats/version.rb
CHANGED
data/lib/trifle/stats.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'trifle/stats/driver/
|
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'
|
data/trifle-stats.gemspec
CHANGED
@@ -12,7 +12,8 @@ Gem::Specification.new do |spec|
|
|
12
12
|
'that helps you track custom metrics. Automatically '\
|
13
13
|
'increments counters for each enabled range. '\
|
14
14
|
'It supports timezones and different week beginning.'
|
15
|
-
spec.homepage =
|
15
|
+
spec.homepage = 'https://trifle.io'
|
16
|
+
spec.licenses = ['MIT']
|
16
17
|
spec.required_ruby_version = Gem::Requirement.new('>= 2.6')
|
17
18
|
|
18
19
|
spec.metadata['homepage_uri'] = spec.homepage
|
@@ -30,10 +31,12 @@ Gem::Specification.new do |spec|
|
|
30
31
|
spec.add_development_dependency('bundler', '~> 2.1')
|
31
32
|
spec.add_development_dependency('byebug', '>= 0')
|
32
33
|
spec.add_development_dependency('dotenv')
|
34
|
+
spec.add_development_dependency('mongo', '>= 2.14.0')
|
35
|
+
spec.add_development_dependency('pg', '>= 1.2')
|
33
36
|
spec.add_development_dependency('rake', '~> 13.0')
|
37
|
+
spec.add_development_dependency('redis', '>= 4.2')
|
34
38
|
spec.add_development_dependency('rspec', '~> 3.2')
|
35
39
|
spec.add_development_dependency('rubocop', '1.0.0')
|
36
|
-
|
37
|
-
spec.add_runtime_dependency('pg', '>= 1.2')
|
40
|
+
|
38
41
|
spec.add_runtime_dependency('tzinfo', '~> 2.0')
|
39
42
|
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.
|
4
|
+
version: 1.0.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:
|
11
|
+
date: 2022-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -53,47 +53,47 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: mongo
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 2.14.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 2.14.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: pg
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '1.2'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '1.2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '13.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: '13.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: redis
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,7 +101,7 @@ dependencies:
|
|
101
101
|
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '4.2'
|
104
|
-
type: :
|
104
|
+
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
@@ -109,19 +109,33 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '4.2'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
118
|
-
type: :
|
117
|
+
version: '3.2'
|
118
|
+
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '3.2'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.0.0
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 1.0.0
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: tzinfo
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,11 +159,17 @@ executables: []
|
|
145
159
|
extensions: []
|
146
160
|
extra_rdoc_files: []
|
147
161
|
files:
|
162
|
+
- ".devcontainer.json"
|
163
|
+
- ".devops/docker/codespaces/Dockerfile"
|
164
|
+
- ".devops/docker/codespaces/docker-compose.yml"
|
165
|
+
- ".devops/docker/environment/.p10k.zsh"
|
166
|
+
- ".devops/docker/environment/.zshrc"
|
167
|
+
- ".devops/docker/environment/Dockerfile"
|
168
|
+
- ".devops/docker/gitpod/Dockerfile"
|
169
|
+
- ".devops/docker/gitpod/base/Dockerfile"
|
148
170
|
- ".github/workflows/ruby.yml"
|
149
171
|
- ".gitignore"
|
150
172
|
- ".gitpod.yml"
|
151
|
-
- ".gitpod/Dockerfile"
|
152
|
-
- ".gitpod/base/Dockerfile"
|
153
173
|
- ".rspec"
|
154
174
|
- ".rubocop.yml"
|
155
175
|
- ".ruby-version"
|
@@ -164,6 +184,7 @@ files:
|
|
164
184
|
- lib/trifle/stats.rb
|
165
185
|
- lib/trifle/stats/configuration.rb
|
166
186
|
- lib/trifle/stats/driver/README.md
|
187
|
+
- lib/trifle/stats/driver/mongo.rb
|
167
188
|
- lib/trifle/stats/driver/postgres.rb
|
168
189
|
- lib/trifle/stats/driver/process.rb
|
169
190
|
- lib/trifle/stats/driver/redis.rb
|
@@ -175,7 +196,8 @@ files:
|
|
175
196
|
- lib/trifle/stats/version.rb
|
176
197
|
- trifle-stats.gemspec
|
177
198
|
homepage: https://trifle.io
|
178
|
-
licenses:
|
199
|
+
licenses:
|
200
|
+
- MIT
|
179
201
|
metadata:
|
180
202
|
homepage_uri: https://trifle.io
|
181
203
|
source_code_uri: https://github.com/trifle-io/trifle-stats
|