cdn_manager_pcache_probe 0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +38 -0
- data/README.md +14 -0
- data/Rakefile +1 -0
- data/bin/get_pcache_probe +12 -0
- data/cdn-manager_pcache-probe.gemspec +36 -0
- data/lib/cdn_manager_pcache_probe/cli.rb +62 -0
- data/lib/cdn_manager_pcache_probe/connector.rb +64 -0
- data/lib/cdn_manager_pcache_probe/version.rb +3 -0
- metadata +125 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 04aa90fc7326a3f4b18f8afc498804ebb90f9222
|
4
|
+
data.tar.gz: 3b1992a834abdc5496e9be3bd69b96fcc2e2960d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 82515443d9c165798bada808274b6fee2f47a2e08e0ed8ca78c56026fc147f68ee9f6988a947bb9bee71d7231d6062602be7b2f64120264be27b67fef70d30bf
|
7
|
+
data.tar.gz: 0ff333b3e5119a407e3f59ef4db60d2a78375d351dbf36a4b16756d815f0e6005ee9e205cda85462f79d20abb17b2d10ebc9441ade36122f701b095e56ea2fa1
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
cdn_manager_pcache_probe (0.2)
|
5
|
+
json (~> 1.8.3)
|
6
|
+
rest-client (~> 1.8.0)
|
7
|
+
thor (~> 0.19.1)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
domain_name (0.5.25)
|
13
|
+
unf (>= 0.0.5, < 1.0.0)
|
14
|
+
http-cookie (1.0.2)
|
15
|
+
domain_name (~> 0.5)
|
16
|
+
json (1.8.3)
|
17
|
+
mime-types (2.99)
|
18
|
+
netrc (0.11.0)
|
19
|
+
rake (10.4.2)
|
20
|
+
rest-client (1.8.0)
|
21
|
+
http-cookie (>= 1.0.2, < 2.0)
|
22
|
+
mime-types (>= 1.16, < 3.0)
|
23
|
+
netrc (~> 0.7)
|
24
|
+
thor (0.19.1)
|
25
|
+
unf (0.1.4)
|
26
|
+
unf_ext
|
27
|
+
unf_ext (0.0.7.1)
|
28
|
+
|
29
|
+
PLATFORMS
|
30
|
+
ruby
|
31
|
+
|
32
|
+
DEPENDENCIES
|
33
|
+
bundler (~> 1.10)
|
34
|
+
cdn_manager_pcache_probe!
|
35
|
+
rake (~> 10.0)
|
36
|
+
|
37
|
+
BUNDLED WITH
|
38
|
+
1.11.2
|
data/README.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# cdn-manager_pcache-probe
|
2
|
+
Pcache load probe for cdn-manager using ElasticSearch data.
|
3
|
+
|
4
|
+
# Usage
|
5
|
+
|
6
|
+
Get overall usage for last 3 minutes:
|
7
|
+
```bash
|
8
|
+
bin/get_pcache_probe collect --url http://indexer.swisstxt.ch:9200/_all/pcache/_search --interval 3
|
9
|
+
```
|
10
|
+
|
11
|
+
Limit usage to volume_key "blick.simplex.ch":
|
12
|
+
```bash
|
13
|
+
bin/get_pcache_probe collect --url http://indexer.swisstxt.ch:9200/_all/pcache/_search --key blick.simplex.ch
|
14
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
# resolve bin path, ignoring symlinks
|
5
|
+
# resolve path, ignoring symlinks
|
6
|
+
require "pathname"
|
7
|
+
$:.unshift File.expand_path(
|
8
|
+
"../../lib", Pathname.new(__FILE__).realpath
|
9
|
+
)
|
10
|
+
|
11
|
+
require 'cdn_manager_pcache_probe/cli'
|
12
|
+
CdnManagerPcacheProbe::Cli.start(ARGV)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "cdn_manager_pcache_probe/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "cdn_manager_pcache_probe"
|
8
|
+
spec.version = CdnManagerPcacheProbe::VERSION
|
9
|
+
spec.authors = ["niwo"]
|
10
|
+
spec.email = ["nik.wolfgramm@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Pcache load probe for cdn-manager.}
|
13
|
+
spec.description = %q{Pcache load probe for cdn-manager using ElasticSearch data.}
|
14
|
+
spec.homepage = "https://github.com/swisstxt/cdn-manager_pcache-probe"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
18
|
+
# delete this section to allow pushing this gem to any host.
|
19
|
+
# if spec.respond_to?(:metadata)
|
20
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
# else
|
22
|
+
# raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
23
|
+
# end
|
24
|
+
|
25
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
+
spec.bindir = "bin"
|
27
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_runtime_dependency "thor", "~> 0.19.1"
|
31
|
+
spec.add_runtime_dependency "rest-client", "~> 1.8.0"
|
32
|
+
spec.add_runtime_dependency"json", "~> 1.8.3"
|
33
|
+
|
34
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
35
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
36
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "cdn_manager_pcache_probe/version"
|
3
|
+
require "cdn_manager_pcache_probe/connector"
|
4
|
+
|
5
|
+
module CdnManagerPcacheProbe
|
6
|
+
class Cli < Thor
|
7
|
+
package_name "cdn_manager_pcache_probe"
|
8
|
+
include Thor::Actions
|
9
|
+
|
10
|
+
# catch control-c and exit
|
11
|
+
trap("SIGINT") {
|
12
|
+
puts " bye"
|
13
|
+
exit!
|
14
|
+
}
|
15
|
+
|
16
|
+
# exit with return code 1 in case of an error
|
17
|
+
def self.exit_on_failure?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "version", "print cdn_manager_pcache_probe version number"
|
22
|
+
def version
|
23
|
+
say "cdn_manager_pcache_probe v#{VERSION}"
|
24
|
+
end
|
25
|
+
map %w(-v --version) => :version
|
26
|
+
|
27
|
+
desc "collect", "probe pcache elasticsearch"
|
28
|
+
option :url,
|
29
|
+
desc: "ElasticSearch URL",
|
30
|
+
required: true
|
31
|
+
option :key,
|
32
|
+
desc: "Limit query on a specific voluem_key"
|
33
|
+
option :interval,
|
34
|
+
desc: "probe inteval in minutes",
|
35
|
+
default: 3,
|
36
|
+
type: :numeric
|
37
|
+
option :delay,
|
38
|
+
desc: "data delay - give elasticsearch some time to receive the logs",
|
39
|
+
default: 5,
|
40
|
+
type: :numeric
|
41
|
+
option :debug,
|
42
|
+
desc: "print debug output",
|
43
|
+
type: :boolean
|
44
|
+
def collect
|
45
|
+
bytes_sent = CdnManagerPcacheProbe::Connector.new(
|
46
|
+
options[:url]
|
47
|
+
).get_probe(options)
|
48
|
+
|
49
|
+
usage = (bytes_sent / (options[:interval] * 60) * 8 / 1024**3).round(3)
|
50
|
+
if options[:key]
|
51
|
+
say "Usage for #{options[:key]} ", :yellow
|
52
|
+
else
|
53
|
+
say "Overall usage ", :yellow
|
54
|
+
end
|
55
|
+
say "over #{options[:interval]} min (#{options[:delay]} min delay):", :yellow
|
56
|
+
puts "Total volume sent: #{(bytes_sent / 1024**3).round(3)} GB"
|
57
|
+
puts "Average bandwidth: #{usage} Gbit/s"
|
58
|
+
end
|
59
|
+
|
60
|
+
end # class
|
61
|
+
|
62
|
+
end # module cli
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module CdnManagerPcacheProbe
|
5
|
+
class Connector
|
6
|
+
def initialize(url, options = {})
|
7
|
+
@url = url
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_live_probe
|
12
|
+
get_probe(Time.now)
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_probe(options = {})
|
16
|
+
probe = JSON.parse(
|
17
|
+
RestClient.get(
|
18
|
+
@url, params: { source: query(options) }
|
19
|
+
)
|
20
|
+
)
|
21
|
+
puts "Response: \n" + JSON.pretty_generate(probe) if options[:debug]
|
22
|
+
probe["aggregations"]["bytes_sent"]["value"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def query(options = {})
|
26
|
+
interval = (options[:interval] || 5).to_i
|
27
|
+
delay = (options[:delay] || 5).to_i
|
28
|
+
volume_key_filter = "\"volume_key.raw\": \"#{options[:key]}\"" if options[:key]
|
29
|
+
query = %Q({
|
30
|
+
"size": 0,
|
31
|
+
"query": {
|
32
|
+
"filtered": {
|
33
|
+
"filter": {
|
34
|
+
"bool": {
|
35
|
+
"must": [
|
36
|
+
{ "range": {
|
37
|
+
"@timestamp": {
|
38
|
+
"gt": "now-#{interval + delay}m",
|
39
|
+
"lt": "now-#{delay}m"
|
40
|
+
}
|
41
|
+
}},
|
42
|
+
{ "term": {
|
43
|
+
"type": "pcache"
|
44
|
+
#{", " + volume_key_filter if options[:key]}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
]
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
},
|
52
|
+
"aggs": {
|
53
|
+
"bytes_sent": {
|
54
|
+
"sum": {
|
55
|
+
"field": "body_bytes_sent"
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}).gsub(/\A[[:space:]]+/, '').gsub(/[[:space:]]+\z/, '').gsub(/[[:space:]]+/, ' ')
|
60
|
+
puts "Query: \n" + JSON.pretty_generate(JSON.parse(query)) if options[:debug]
|
61
|
+
query
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cdn_manager_pcache_probe
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.2'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- niwo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.19.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.19.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.8.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.8.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.8.3
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.8.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
description: Pcache load probe for cdn-manager using ElasticSearch data.
|
84
|
+
email:
|
85
|
+
- nik.wolfgramm@gmail.com
|
86
|
+
executables:
|
87
|
+
- get_pcache_probe
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- Gemfile
|
93
|
+
- Gemfile.lock
|
94
|
+
- README.md
|
95
|
+
- Rakefile
|
96
|
+
- bin/get_pcache_probe
|
97
|
+
- cdn-manager_pcache-probe.gemspec
|
98
|
+
- lib/cdn_manager_pcache_probe/cli.rb
|
99
|
+
- lib/cdn_manager_pcache_probe/connector.rb
|
100
|
+
- lib/cdn_manager_pcache_probe/version.rb
|
101
|
+
homepage: https://github.com/swisstxt/cdn-manager_pcache-probe
|
102
|
+
licenses:
|
103
|
+
- MIT
|
104
|
+
metadata: {}
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 2.5.1
|
122
|
+
signing_key:
|
123
|
+
specification_version: 4
|
124
|
+
summary: Pcache load probe for cdn-manager.
|
125
|
+
test_files: []
|