exprc 0.0.8 → 0.0.9
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.
- data/Gemfile +1 -2
- data/Gemfile.lock +11 -3
- data/Rakefile +2 -0
- data/Readme.md +13 -0
- data/bin/exprc +37 -10
- data/exprc.gemspec +6 -1
- data/lib/exprc.rb +1 -0
- data/lib/exprc/version.rb +3 -0
- metadata +46 -5
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,16 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
exprc (0.0.9)
|
5
|
+
json (= 1.6.6)
|
6
|
+
rest-client (= 1.6.7)
|
7
|
+
|
1
8
|
GEM
|
2
9
|
remote: http://rubygems.org/
|
3
10
|
specs:
|
4
11
|
json (1.6.6)
|
5
|
-
mime-types (1.
|
12
|
+
mime-types (1.19)
|
13
|
+
rake (0.9.2.2)
|
6
14
|
rest-client (1.6.7)
|
7
15
|
mime-types (>= 1.16)
|
8
16
|
|
@@ -10,5 +18,5 @@ PLATFORMS
|
|
10
18
|
ruby
|
11
19
|
|
12
20
|
DEPENDENCIES
|
13
|
-
|
14
|
-
|
21
|
+
exprc!
|
22
|
+
rake
|
data/Rakefile
ADDED
data/Readme.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
1
|
## exprc
|
2
2
|
|
3
3
|
Command line client to [exprd](https://github.com/heroku/exprd).
|
4
|
+
|
5
|
+
``` bash
|
6
|
+
API_KEY=`heroku sudo config:get API_PASSWORD -a exprd-core-production`
|
7
|
+
|
8
|
+
export EXPRD_API_URL=https://:$API_KEY@exprd-core-production.herokuapp.com
|
9
|
+
|
10
|
+
bin/exprc create --name api.production.jobs.queue-count.last \
|
11
|
+
--type last \
|
12
|
+
--window 60 \
|
13
|
+
--predicate '["?", "background_job_queue_check"]' \
|
14
|
+
--value count
|
15
|
+
* creating metric api.production.jobs.queue-count.last... done
|
16
|
+
```
|
data/bin/exprc
CHANGED
@@ -8,6 +8,22 @@ require "optparse"
|
|
8
8
|
require "uri"
|
9
9
|
require "rest-client"
|
10
10
|
require "json"
|
11
|
+
require "exprc"
|
12
|
+
|
13
|
+
def dump(name, info)
|
14
|
+
print("exprc create ")
|
15
|
+
print("--name '#{name}' ")
|
16
|
+
print("--type '#{info["type"]}' ")
|
17
|
+
print("--window '#{info["window"]}' ")
|
18
|
+
print("--predicate '#{info["predicate"]}' ") if info["predicate"]
|
19
|
+
print("--predicate2 '#{info["predicate2"]}' ") if info["predicate2"]
|
20
|
+
print("--value '#{info["value"]}' ") if info["value"]
|
21
|
+
print("--key '#{info["key"]}' ") if info["key"]
|
22
|
+
print("--divisor '#{info["divisor"]}' ") if info["divisor"]
|
23
|
+
print("--percentile '#{info["percentile"]}' ") if info["percentile"]
|
24
|
+
print("--frequency: '#{info["frequency"]}' ")
|
25
|
+
print("\n")
|
26
|
+
end
|
11
27
|
|
12
28
|
ARGV.options do |o|
|
13
29
|
action = nil
|
@@ -22,7 +38,7 @@ ARGV.options do |o|
|
|
22
38
|
percentile = nil
|
23
39
|
frequency = nil
|
24
40
|
|
25
|
-
o.banner = "usage: exprc list|show|explain|test|create|destroy|version [options]"
|
41
|
+
o.banner = "usage: exprc list|show|dump|dumpall|explain|test|create|destroy|version [options]"
|
26
42
|
o.on("-n", "--name n", String, "name of metric") { |n| name = n }
|
27
43
|
o.on("-t", "--type t", String, "type of metric") { |t| type = t }
|
28
44
|
o.on("-w", "--window w", Integer, "window of metric in seconds") { |w| window = w }
|
@@ -37,6 +53,7 @@ ARGV.options do |o|
|
|
37
53
|
o.parse!
|
38
54
|
action = ARGV.shift
|
39
55
|
exprd_api_url = ENV["EXPRD_API_URL"]
|
56
|
+
exprc_version = Exprc::VERSION
|
40
57
|
|
41
58
|
params = {
|
42
59
|
"type" => type,
|
@@ -50,7 +67,7 @@ ARGV.options do |o|
|
|
50
67
|
"frequency" => frequency}
|
51
68
|
|
52
69
|
abort("! error: an action is required (e.g list).\n\n#{o}") if (!action || action.empty?)
|
53
|
-
abort("! error: unrecognized action #{action}.") if !%w{list show explain test create update destroy version}.include?(action)
|
70
|
+
abort("! error: unrecognized action #{action}.") if !%w{list show dump dumpall explain test create update destroy version}.include?(action)
|
54
71
|
abort("! error: missing EXPRD_API_URL.\n\n#{o}") if (!exprd_api_url || exprd_api_url.empty?)
|
55
72
|
abort("! error: --dealy is no longer required and should be omitted.") if (ARGV.include?("-d") || ARGV.include?("--delay"))
|
56
73
|
abort("! error: unrecognized args: #{ARGV.join(" ")}.") if !ARGV.empty?
|
@@ -58,15 +75,15 @@ ARGV.options do |o|
|
|
58
75
|
begin
|
59
76
|
case action
|
60
77
|
when "version"
|
61
|
-
puts(
|
78
|
+
puts(exprc_version)
|
62
79
|
when "list"
|
63
|
-
names = JSON.parse(RestClient.get("#{exprd_api_url}/metrics"))
|
80
|
+
names = JSON.parse(RestClient.get("#{exprd_api_url}/metrics", :exprc_version => exprc_version))
|
64
81
|
names.each do |name|
|
65
82
|
puts("- #{name}")
|
66
83
|
end
|
67
84
|
when "show"
|
68
85
|
abort("! error: missing --name.\n\n#{o}") if (!name || name.empty?)
|
69
|
-
info = JSON.parse(RestClient.get("#{exprd_api_url}/metrics/#{name}"))
|
86
|
+
info = JSON.parse(RestClient.get("#{exprd_api_url}/metrics/#{name}", :exprc_version => exprc_version))
|
70
87
|
puts("= name: #{name}")
|
71
88
|
puts("= type: #{info["type"]}")
|
72
89
|
puts("= window: #{info["window"]}")
|
@@ -77,22 +94,32 @@ ARGV.options do |o|
|
|
77
94
|
puts("= divisor: #{info["divisor"]}") if info["divisor"]
|
78
95
|
puts("= percentile: #{info["percentile"]}") if info["percentile"]
|
79
96
|
puts("= frequency: #{info["frequency"]}")
|
97
|
+
when "dumpall"
|
98
|
+
names = JSON.parse(RestClient.get("#{exprd_api_url}/metrics", :exprc_version => exprc_version))
|
99
|
+
names.each do |name|
|
100
|
+
info = JSON.parse(RestClient.get("#{exprd_api_url}/metrics/#{name}", :exprc_version => exprc_version))
|
101
|
+
dump(name, info)
|
102
|
+
end
|
103
|
+
when "dump"
|
104
|
+
abort("! error: missing --name.\n\n#{o}") if (!name || name.empty?)
|
105
|
+
info = JSON.parse(RestClient.get("#{exprd_api_url}/metrics/#{name}", :exprc_version => exprc_version))
|
106
|
+
dump(name, info)
|
80
107
|
when "explain"
|
81
108
|
abort("! error: missing --name.\n\n#{o}") if (!name || name.empty?)
|
82
109
|
|
83
110
|
if type
|
84
111
|
# we are sending the params
|
85
|
-
info = JSON.parse(RestClient.put("#{exprd_api_url}/metrics/#{name}/tests", JSON.dump(params)))
|
112
|
+
info = JSON.parse(RestClient.put("#{exprd_api_url}/metrics/#{name}/tests", JSON.dump(params), :exprc_version => exprc_version))
|
86
113
|
else
|
87
114
|
# we are getting a known metric
|
88
|
-
info = JSON.parse(RestClient.get("#{exprd_api_url}/metrics/#{name}"))
|
115
|
+
info = JSON.parse(RestClient.get("#{exprd_api_url}/metrics/#{name}", :exprc_version => exprc_version))
|
89
116
|
end
|
90
117
|
puts("= name: #{name}")
|
91
118
|
puts("= compiled:\n#{info["compiled"]}")
|
92
119
|
when "test"
|
93
120
|
abort("! error: missing --name.\n\n#{o}") if (!name || name.empty?)
|
94
121
|
$stdout.print("* testing metric #{name}...")
|
95
|
-
results = JSON.parse(RestClient.put("#{exprd_api_url}/metrics/#{name}/tests", JSON.dump(params)))
|
122
|
+
results = JSON.parse(RestClient.put("#{exprd_api_url}/metrics/#{name}/tests", JSON.dump(params), :exprc_version => exprc_version))
|
96
123
|
puts(" done")
|
97
124
|
puts("= name: #{name}")
|
98
125
|
puts("= value: #{results["value"]}")
|
@@ -100,12 +127,12 @@ ARGV.options do |o|
|
|
100
127
|
when "create"
|
101
128
|
abort("! error: missing --name.\n\n#{o}") if (!name || name.empty?)
|
102
129
|
$stdout.print("* creating metric #{name}...")
|
103
|
-
RestClient.put("#{exprd_api_url}/metrics/#{name}", JSON.dump(params))
|
130
|
+
RestClient.put("#{exprd_api_url}/metrics/#{name}", JSON.dump(params), :exprc_version => exprc_version)
|
104
131
|
puts(" done")
|
105
132
|
when "destroy"
|
106
133
|
abort("! error: missing --name.\n\n#{o}") if (!name || name.empty?)
|
107
134
|
$stdout.print("* destroying metric #{name}...")
|
108
|
-
RestClient.delete("#{exprd_api_url}/metrics/#{name}")
|
135
|
+
RestClient.delete("#{exprd_api_url}/metrics/#{name}", :exprc_version => exprc_version)
|
109
136
|
puts(" done")
|
110
137
|
end
|
111
138
|
rescue => e
|
data/exprc.gemspec
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require File.expand_path("../lib/exprc/version", __FILE__)
|
2
|
+
|
1
3
|
Gem::Specification.new do |gem|
|
2
4
|
gem.authors = ["Mark McGranaghan"]
|
3
5
|
gem.email = ["mark@heroku.com"]
|
@@ -9,5 +11,8 @@ Gem::Specification.new do |gem|
|
|
9
11
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
10
12
|
gem.name = "exprc"
|
11
13
|
gem.require_paths = ["lib"]
|
12
|
-
gem.version =
|
14
|
+
gem.version = Exprc::VERSION
|
15
|
+
gem.add_dependency("json", "1.6.6")
|
16
|
+
gem.add_dependency("rest-client", "1.6.7")
|
17
|
+
gem.add_development_dependency("rake")
|
13
18
|
end
|
data/lib/exprc.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "exprc/version"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exprc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,41 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-10-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
requirement: &70259532955900 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.6.6
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70259532955900
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rest-client
|
27
|
+
requirement: &70259532954440 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - =
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.6.7
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70259532954440
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
requirement: &70259532952280 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70259532952280
|
14
47
|
description: CLI to exprd.
|
15
48
|
email:
|
16
49
|
- mark@heroku.com
|
@@ -22,9 +55,12 @@ files:
|
|
22
55
|
- .gitignore
|
23
56
|
- Gemfile
|
24
57
|
- Gemfile.lock
|
58
|
+
- Rakefile
|
25
59
|
- Readme.md
|
26
60
|
- bin/exprc
|
27
61
|
- exprc.gemspec
|
62
|
+
- lib/exprc.rb
|
63
|
+
- lib/exprc/version.rb
|
28
64
|
homepage: https://github.com/heroku/exprc
|
29
65
|
licenses: []
|
30
66
|
post_install_message:
|
@@ -37,17 +73,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
37
73
|
- - ! '>='
|
38
74
|
- !ruby/object:Gem::Version
|
39
75
|
version: '0'
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
hash: 2485921414130932160
|
40
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
80
|
none: false
|
42
81
|
requirements:
|
43
82
|
- - ! '>='
|
44
83
|
- !ruby/object:Gem::Version
|
45
84
|
version: '0'
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
hash: 2485921414130932160
|
46
88
|
requirements: []
|
47
89
|
rubyforge_project:
|
48
|
-
rubygems_version: 1.8.
|
90
|
+
rubygems_version: 1.8.10
|
49
91
|
signing_key:
|
50
92
|
specification_version: 3
|
51
93
|
summary: CLI to exprd.
|
52
94
|
test_files: []
|
53
|
-
has_rdoc:
|