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 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
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in cdn-manager_web-api.gemspec
4
+ gemspec
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
@@ -0,0 +1,3 @@
1
+ module CdnManagerPcacheProbe
2
+ VERSION = "0.2"
3
+ 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: []