xcflushd 1.0.0.rc2 → 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/Gemfile.lock +7 -7
- data/README.md +3 -3
- data/docs/design.md +2 -2
- data/lib/xcflushd/logger.rb +22 -0
- data/lib/xcflushd/runner.rb +8 -2
- data/lib/xcflushd/storage_keys.rb +6 -4
- data/lib/xcflushd/version.rb +1 -1
- data/xcflushd.gemspec +8 -4
- metadata +15 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99f1cb623f33f531541f29169d019be6f8cc16cc
|
4
|
+
data.tar.gz: 44ddf936023001785ab6f09a959bc56ad9ea401e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c15f4195eec039d97a9a1626a920b245496460253428ccd3f0117d6bc8153ca30f37c2aebfcb43d1c73f123b71941398950eca58829257277271636babe4990
|
7
|
+
data.tar.gz: 5a421824e1e674541a76206f183a7e5ca8af42e464eed2c537974a4ad522a5d2ee895b99a1b3f2f80eb6b11643ef6b4a28bcb5b949c8635b37a5f44ebc876a25
|
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
xcflushd (1.0.0
|
5
|
-
3scale_client (~> 2.10
|
4
|
+
xcflushd (1.0.0)
|
5
|
+
3scale_client (~> 2.10)
|
6
6
|
concurrent-ruby (= 1.0.2)
|
7
7
|
daemons (= 1.2.4)
|
8
8
|
gli (= 2.14.0)
|
9
9
|
hiredis (= 0.6.1)
|
10
10
|
net-http-persistent (= 2.9.4)
|
11
|
-
redis (= 3.3.
|
11
|
+
redis (= 3.3.2)
|
12
12
|
|
13
13
|
GEM
|
14
14
|
remote: https://rubygems.org/
|
@@ -33,13 +33,13 @@ GEM
|
|
33
33
|
ast (~> 2.2)
|
34
34
|
powerpack (0.1.1)
|
35
35
|
rainbow (2.1.0)
|
36
|
-
rake (11.
|
37
|
-
redis (3.3.
|
36
|
+
rake (11.3.0)
|
37
|
+
redis (3.3.2)
|
38
38
|
rspec (3.5.0)
|
39
39
|
rspec-core (~> 3.5.0)
|
40
40
|
rspec-expectations (~> 3.5.0)
|
41
41
|
rspec-mocks (~> 3.5.0)
|
42
|
-
rspec-core (3.5.
|
42
|
+
rspec-core (3.5.4)
|
43
43
|
rspec-support (~> 3.5.0)
|
44
44
|
rspec-expectations (3.5.0)
|
45
45
|
diff-lcs (>= 1.2.0, < 2.0)
|
@@ -66,7 +66,7 @@ PLATFORMS
|
|
66
66
|
ruby
|
67
67
|
|
68
68
|
DEPENDENCIES
|
69
|
-
bundler (~> 1.
|
69
|
+
bundler (~> 1.13)
|
70
70
|
fakeredis (~> 0.6.0)
|
71
71
|
rake (~> 11.0)
|
72
72
|
rspec (~> 3.0)
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
## Description
|
6
6
|
|
7
7
|
This is the daemon that flushes the data that the gateway side of XC like the
|
8
|
-
[apicast-xc](https://github.com/3scale/apicast-xc) module running on top of [
|
8
|
+
[apicast-xc](https://github.com/3scale/apicast-xc) module running on top of [APIcast](https://github.com/3scale/apicast), stores for reporting and authorizing to 3scale.
|
9
9
|
|
10
10
|
When you deploy 3scale to a gateway you usually have a request performed to
|
11
11
|
3scale for every request that needs authorization, which introduces latency and
|
@@ -68,7 +68,7 @@ $ docker run --rm xcflushd bundle exec xcflushd help run
|
|
68
68
|
|
69
69
|
You can send the options as params in the `xcflushd` command:
|
70
70
|
```
|
71
|
-
$ docker run --rm xcflushd bundle exec xcflushd run --auth-ttl 900 --provider-key my_provider_key --redis 127.0.0.1:6379 --frequency 300 --backend https://su1.3scale.net:443
|
71
|
+
$ docker run --rm -it xcflushd bundle exec xcflushd run --auth-ttl 900 --provider-key my_provider_key --redis 127.0.0.1:6379 --frequency 300 --backend https://su1.3scale.net:443
|
72
72
|
```
|
73
73
|
|
74
74
|
Please note that the help command will also show you abbreviated flags you can
|
@@ -88,7 +88,7 @@ $ bundle exec xcflushd help
|
|
88
88
|
|
89
89
|
### Openshift
|
90
90
|
|
91
|
-
If what you need is deploying Xcflushd together with
|
91
|
+
If what you need is deploying Xcflushd together with APIcast and XC, you can
|
92
92
|
follow the instructions provided in the [apicast-xc repo](https://github.com/3scale/apicast-xc).
|
93
93
|
|
94
94
|
|
data/docs/design.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
## Description
|
4
4
|
|
5
5
|
xcflushd is a daemon used together with [XC](https://github.com/3scale/apicast-xc),
|
6
|
-
which is a module for [
|
6
|
+
which is a module for [APIcast](https://github.com/3scale/apicast), 3scale's
|
7
7
|
API Gateway.
|
8
8
|
|
9
9
|
If you are not familiar with XC yet, we recommend you to start reading its
|
@@ -61,7 +61,7 @@ in the reports sent to 3scale's backend, and 2) do not have any limits defined.
|
|
61
61
|
The whole flushing process makes 2 calls to 3scale per application reported.
|
62
62
|
One call to send the report to 3scale, and another one to get the current
|
63
63
|
authorization status. Compare that to making one request for each one that
|
64
|
-
arrives to the proxy as in the case of
|
64
|
+
arrives to the proxy as in the case of APIcast. Imagine that you have 1k rps,
|
65
65
|
and 100 apps. If you define a period of 1 minute for the flushing process, you
|
66
66
|
will be making 200 requests to 3scale's backend per minute instead of 60k.
|
67
67
|
|
data/lib/xcflushd/logger.rb
CHANGED
@@ -3,6 +3,28 @@ require 'logger'
|
|
3
3
|
module Xcflushd
|
4
4
|
class Logger
|
5
5
|
def self.new(*args)
|
6
|
+
# Logging to a IO-like object.
|
7
|
+
#
|
8
|
+
# When the IO object is a TTY, Ruby sets line buffered mode, which is
|
9
|
+
# ok for logs. However, when it is not a TTY, Ruby sets up a buffer
|
10
|
+
# of unspecified size that causes applications that write few logs to
|
11
|
+
# appear as inactive in the log stream. This is a problem when trying
|
12
|
+
# to diagnose issues.
|
13
|
+
#
|
14
|
+
# Unfortunately Ruby only exposes a couple of limited ways to control
|
15
|
+
# the underlying buffering: IO#(f)sync and IO#flush. Apparently the C
|
16
|
+
# runtime stdio buffering is replaced by Ruby's own, so there is no
|
17
|
+
# point in trying to call setvbuf, and no point either in trying to
|
18
|
+
# control a TTY, since that case is fine.
|
19
|
+
#
|
20
|
+
# Since our logging stream activity is fairly low it's reasonable to
|
21
|
+
# use IO#sync for the non TTY case to have (hopefully) a behaviour
|
22
|
+
# similar to line-buffered standard I/O.
|
23
|
+
#
|
24
|
+
# More info on http://tuxdna.in/files/notes/ruby-io.html.
|
25
|
+
#
|
26
|
+
io = args[0]
|
27
|
+
io.sync = true unless io.tty?
|
6
28
|
::Logger.new(*args)
|
7
29
|
end
|
8
30
|
end
|
data/lib/xcflushd/runner.rb
CHANGED
@@ -97,6 +97,8 @@ module Xcflushd
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
@logger.info('Exiting')
|
100
|
+
rescue SignalException => e
|
101
|
+
@logger.fatal("Received unhandled signal #{e.cause}, shutting down")
|
100
102
|
rescue Exception => e
|
101
103
|
@logger.fatal("Unhandled exception #{e.class}, shutting down: #{e.cause} - #{e}")
|
102
104
|
ensure
|
@@ -157,8 +159,12 @@ module Xcflushd
|
|
157
159
|
|
158
160
|
def setup_sighandlers
|
159
161
|
@exit = false
|
160
|
-
|
161
|
-
|
162
|
+
['HUP', 'USR1', 'USR2'].each do |sig|
|
163
|
+
Signal.trap(sig, "SIG_IGN")
|
164
|
+
end
|
165
|
+
['EXIT', 'TERM', 'INT'].each do |sig|
|
166
|
+
Signal.trap(sig) { @exit = true }
|
167
|
+
end
|
162
168
|
end
|
163
169
|
end
|
164
170
|
end
|
@@ -80,10 +80,12 @@ module Xcflushd
|
|
80
80
|
# Returns an array of size 2 with a service and the credentials encoded
|
81
81
|
# given a key marked as 'to be flushed' and its suffix.
|
82
82
|
def service_and_creds(key_to_flush, suffix)
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
83
|
+
split_key = key_to_flush.sub("#{KEY_TO_FLUSH_PREFIX}#{REPORT_KEY_PREFIX}", '')
|
84
|
+
.sub(suffix, '')
|
85
|
+
.split(/(?<!\\),/)
|
86
|
+
|
87
|
+
escaped_service = split_key.first
|
88
|
+
escaped_creds = split_key[1..-1].join(','.freeze)
|
87
89
|
|
88
90
|
# escaped_service is a string with 'service_id:' followed by the escaped
|
89
91
|
# service ID. escaped_creds starts with 'credentials:' and is followed
|
data/lib/xcflushd/version.rb
CHANGED
data/xcflushd.gemspec
CHANGED
@@ -10,7 +10,11 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["support@3scale.net"]
|
11
11
|
|
12
12
|
spec.summary = %q{Daemon for flushing XC reports to 3scale.}
|
13
|
-
spec.description =
|
13
|
+
spec.description = "xcflushd is a daemon that connects to a Redis database " \
|
14
|
+
"containing 3scale's XC API Management data and flushes " \
|
15
|
+
"it to the 3scale service for cached reporting and " \
|
16
|
+
"authorizations. Check https://github.com/3scale/apicast-xc" \
|
17
|
+
" for an implementation of a 3scale's XC gateway."
|
14
18
|
spec.homepage = "https://github.com/3scale/xcflushd"
|
15
19
|
|
16
20
|
spec.license = "Apache-2.0"
|
@@ -22,15 +26,15 @@ Gem::Specification.new do |spec|
|
|
22
26
|
|
23
27
|
spec.required_ruby_version = '>= 2.1.0'
|
24
28
|
|
25
|
-
spec.add_runtime_dependency "3scale_client", "~> 2.10
|
29
|
+
spec.add_runtime_dependency "3scale_client", "~> 2.10"
|
26
30
|
spec.add_runtime_dependency "gli", "= 2.14.0"
|
27
|
-
spec.add_runtime_dependency "redis", "= 3.3.
|
31
|
+
spec.add_runtime_dependency "redis", "= 3.3.2"
|
28
32
|
spec.add_runtime_dependency "hiredis", "= 0.6.1"
|
29
33
|
spec.add_runtime_dependency "concurrent-ruby", "1.0.2"
|
30
34
|
spec.add_runtime_dependency "net-http-persistent", "2.9.4"
|
31
35
|
spec.add_runtime_dependency "daemons", "= 1.2.4"
|
32
36
|
|
33
|
-
spec.add_development_dependency "bundler", "~> 1.
|
37
|
+
spec.add_development_dependency "bundler", "~> 1.13"
|
34
38
|
spec.add_development_dependency "rake", "~> 11.0"
|
35
39
|
spec.add_development_dependency "rspec", "~> 3.0"
|
36
40
|
spec.add_development_dependency "fakeredis", "~> 0.6.0"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcflushd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alejandro Martinez Ruiz
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-03-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: 3scale_client
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.10
|
20
|
+
version: '2.10'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.10
|
27
|
+
version: '2.10'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: gli
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - '='
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 3.3.
|
48
|
+
version: 3.3.2
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - '='
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 3.3.
|
55
|
+
version: 3.3.2
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: hiredis
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,14 +115,14 @@ dependencies:
|
|
115
115
|
requirements:
|
116
116
|
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: '1.
|
118
|
+
version: '1.13'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '1.
|
125
|
+
version: '1.13'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rake
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,7 +193,10 @@ dependencies:
|
|
193
193
|
- - "~>"
|
194
194
|
- !ruby/object:Gem::Version
|
195
195
|
version: 0.46.0
|
196
|
-
description:
|
196
|
+
description: xcflushd is a daemon that connects to a Redis database containing 3scale's
|
197
|
+
XC API Management data and flushes it to the 3scale service for cached reporting
|
198
|
+
and authorizations. Check https://github.com/3scale/apicast-xc for an implementation
|
199
|
+
of a 3scale's XC gateway.
|
197
200
|
email:
|
198
201
|
- support@3scale.net
|
199
202
|
executables:
|
@@ -254,12 +257,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
254
257
|
version: 2.1.0
|
255
258
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
259
|
requirements:
|
257
|
-
- - "
|
260
|
+
- - ">="
|
258
261
|
- !ruby/object:Gem::Version
|
259
|
-
version:
|
262
|
+
version: '0'
|
260
263
|
requirements: []
|
261
264
|
rubyforge_project:
|
262
|
-
rubygems_version: 2.6.
|
265
|
+
rubygems_version: 2.6.8
|
263
266
|
signing_key:
|
264
267
|
specification_version: 4
|
265
268
|
summary: Daemon for flushing XC reports to 3scale.
|