smartdc 1.3.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -19
- data/.travis.yml +1 -1
- data/Gemfile +5 -11
- data/README.md +25 -40
- data/Rakefile +5 -5
- data/bin/sdc +4 -380
- data/config.ru +2 -0
- data/lib/smartdc.rb +23 -15
- data/lib/smartdc/api/analytics.rb +19 -36
- data/lib/smartdc/api/analytics/heatmap.rb +6 -15
- data/lib/smartdc/api/datacenters.rb +7 -16
- data/lib/smartdc/api/images.rb +11 -0
- data/lib/smartdc/api/keys.rb +13 -23
- data/lib/smartdc/api/machines.rb +26 -60
- data/lib/smartdc/api/machines/metadata.rb +15 -0
- data/lib/smartdc/api/machines/snapshots.rb +23 -0
- data/lib/smartdc/api/machines/tags.rb +19 -0
- data/lib/smartdc/api/packages.rb +7 -17
- data/lib/smartdc/auth.rb +39 -5
- data/lib/smartdc/cli.rb +65 -0
- data/lib/smartdc/cli/analytic.rb +52 -0
- data/lib/smartdc/cli/datacenter.rb +15 -0
- data/lib/smartdc/cli/image.rb +19 -0
- data/lib/smartdc/cli/key.rb +26 -0
- data/lib/smartdc/cli/machine.rb +79 -0
- data/lib/smartdc/cli/machine/metadata.rb +30 -0
- data/lib/smartdc/cli/machine/snapshot.rb +38 -0
- data/lib/smartdc/cli/machine/tag.rb +33 -0
- data/lib/smartdc/cli/package.rb +17 -0
- data/lib/smartdc/cli_configure.rb +81 -0
- data/lib/smartdc/cli_helper.rb +111 -0
- data/lib/smartdc/client.rb +33 -28
- data/lib/smartdc/configure.rb +30 -0
- data/lib/smartdc/default.rb +35 -0
- data/lib/smartdc/version.rb +1 -1
- data/smartdc.gemspec +20 -16
- data/spec/cassettes/analytics/create.yml +64 -0
- data/spec/cassettes/analytics/describe.yml +123 -0
- data/spec/cassettes/analytics/destroy.yml +56 -0
- data/spec/cassettes/analytics/index.yml +62 -0
- data/spec/cassettes/analytics/show.yml +62 -0
- data/spec/cassettes/analytics/value.yml +62 -0
- data/spec/cassettes/datacenters/index.yml +62 -0
- data/spec/cassettes/datacenters/show.yml +64 -0
- data/spec/cassettes/images/index.yml +519 -0
- data/spec/cassettes/images/show.yml +63 -0
- data/spec/cassettes/keys/create.yml +65 -0
- data/spec/cassettes/keys/destroy.yml +56 -0
- data/spec/cassettes/keys/index.yml +63 -0
- data/spec/cassettes/keys/show.yml +63 -0
- data/spec/cassettes/machines/create.yml +65 -0
- data/spec/cassettes/machines/destroy.yml +56 -0
- data/spec/cassettes/machines/index.yml +67 -0
- data/spec/cassettes/machines/metadata/destroy.yml +56 -0
- data/spec/cassettes/machines/metadata/index.yml +62 -0
- data/spec/cassettes/machines/metadata/update.yml +64 -0
- data/spec/cassettes/machines/reboot.yml +58 -0
- data/spec/cassettes/machines/show.yml +63 -0
- data/spec/cassettes/machines/snapshots/create.yml +62 -0
- data/spec/cassettes/machines/snapshots/destroy.yml +56 -0
- data/spec/cassettes/machines/snapshots/index.yml +62 -0
- data/spec/cassettes/machines/snapshots/show.yml +62 -0
- data/spec/cassettes/machines/snapshots/start.yml +58 -0
- data/spec/cassettes/machines/start.yml +58 -0
- data/spec/cassettes/machines/stop.yml +58 -0
- data/spec/cassettes/machines/tags/create.yml +64 -0
- data/spec/cassettes/machines/tags/destroy.yml +56 -0
- data/spec/cassettes/machines/tags/index.yml +62 -0
- data/spec/cassettes/machines/tags/show.yml +62 -0
- data/spec/cassettes/packages/index.yml +123 -0
- data/spec/cassettes/packages/show.yml +63 -0
- data/spec/fixtures/config/sdccfg +4 -0
- data/spec/fixtures/ssh/id_rsa +27 -0
- data/spec/fixtures/ssh/id_rsa.pub +1 -0
- data/spec/smartdc/api/analytics_spec.rb +47 -0
- data/spec/smartdc/api/datacenters_spec.rb +19 -0
- data/spec/smartdc/api/images_spec.rb +19 -0
- data/spec/smartdc/api/keys_spec.rb +34 -0
- data/spec/smartdc/api/machines/metadata_spec.rb +27 -0
- data/spec/smartdc/api/machines/snapshots_spec.rb +38 -0
- data/spec/smartdc/api/machines/tags_spec.rb +33 -0
- data/spec/smartdc/api/machines_spec.rb +59 -0
- data/spec/smartdc/api/packages_spec.rb +19 -0
- data/spec/smartdc/auth_spec.rb +25 -0
- data/spec/smartdc/cli_configure_spec.rb +32 -0
- data/spec/smartdc/client_spec.rb +11 -0
- data/spec/smartdc_spec.rb +44 -0
- data/spec/spec_helper.rb +25 -8
- metadata +176 -83
- data/lib/cli_helper.rb +0 -126
- data/lib/configure.rb +0 -125
- data/lib/smartdc/api/datasets.rb +0 -20
- data/lib/smartdc/api/machine/metadata.rb +0 -24
- data/lib/smartdc/api/machine/snapshots.rb +0 -35
- data/lib/smartdc/api/machine/tags.rb +0 -29
- data/lib/smartdc/error.rb +0 -35
- data/lib/smartdc/request.rb +0 -83
- data/lib/smartdc/response.rb +0 -25
- data/lib/smartdc/response/raise_error.rb +0 -38
- data/spec/fixtures/analytics.json +0 -26
- data/spec/fixtures/datacenter.json +0 -4
- data/spec/fixtures/datacenters.json +0 -3
- data/spec/fixtures/datasets.json +0 -38
- data/spec/fixtures/keys.json +0 -14
- data/spec/fixtures/machines.json +0 -36
- data/spec/fixtures/packages.json +0 -18
- data/spec/fixtures/snapshots.json +0 -8
- data/spec/fixtures/tag.json +0 -3
- data/spec/unit/smartdc/api/analytics_spec.rb +0 -48
- data/spec/unit/smartdc/api/datacenters_spec.rb +0 -28
- data/spec/unit/smartdc/api/datasets_spec.rb +0 -28
- data/spec/unit/smartdc/api/keys_spec.rb +0 -48
- data/spec/unit/smartdc/api/machine/metadata_spec.rb +0 -38
- data/spec/unit/smartdc/api/machine/snapshots_spec.rb +0 -48
- data/spec/unit/smartdc/api/machine/tags_spec.rb +0 -48
- data/spec/unit/smartdc/api/machines_spec.rb +0 -48
- data/spec/unit/smartdc/api/packages_spec.rb +0 -28
- data/spec/unit/smartdc/client_spec.rb +0 -40
- data/spec/unit/smartdc_spec.rb +0 -9
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Smartdc
|
4
|
+
module CliHelper
|
5
|
+
def use_machine(id)
|
6
|
+
if id.nil?
|
7
|
+
clicfg = Smartdc::CliConfigure.new
|
8
|
+
sdccfg = clicfg.read
|
9
|
+
sdccfg[:use_machine]
|
10
|
+
else
|
11
|
+
id
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def output(response, options={})
|
16
|
+
if options['raw']
|
17
|
+
puts response.body
|
18
|
+
else
|
19
|
+
if response.status < 300
|
20
|
+
if options[:table]
|
21
|
+
case options[:table]
|
22
|
+
when :horizontal, :h
|
23
|
+
puts horizontal(response.content, options)
|
24
|
+
when :vertical, :v
|
25
|
+
puts vertical(response.content, options)
|
26
|
+
end
|
27
|
+
else
|
28
|
+
if options[:message]
|
29
|
+
puts options[:message]
|
30
|
+
else
|
31
|
+
puts response.content[options[:only].to_s]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
else
|
35
|
+
puts vertical(response.content)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def horizontal(content, options={})
|
41
|
+
options[:include] ||= []
|
42
|
+
options[:exclude] ||= []
|
43
|
+
rows = []
|
44
|
+
headings = nil
|
45
|
+
|
46
|
+
content.each do |row|
|
47
|
+
options[:exclude].each do |col|
|
48
|
+
row.delete(col.to_s)
|
49
|
+
end
|
50
|
+
|
51
|
+
if !options[:include].empty?
|
52
|
+
cols = {}
|
53
|
+
options[:include].each do |col|
|
54
|
+
cols[col.to_s] = row[col.to_s] if row.key?(col.to_s)
|
55
|
+
end
|
56
|
+
row = cols
|
57
|
+
end
|
58
|
+
|
59
|
+
rows << row.values
|
60
|
+
headings = row.keys if headings.nil?
|
61
|
+
end
|
62
|
+
|
63
|
+
Terminal::Table.new :headings => headings, :rows => rows if !content.empty?
|
64
|
+
end
|
65
|
+
|
66
|
+
def vertical(content, options={})
|
67
|
+
options[:exclude] ||= []
|
68
|
+
options[:exclude].each do |col|
|
69
|
+
content.delete(col.to_s)
|
70
|
+
end
|
71
|
+
|
72
|
+
rows = []
|
73
|
+
content.to_a.each do |row|
|
74
|
+
rows << row
|
75
|
+
end
|
76
|
+
|
77
|
+
Terminal::Table.new :headings => ['key','value'], :rows => rows if !content.empty?
|
78
|
+
end
|
79
|
+
|
80
|
+
def describe(name, content, options)
|
81
|
+
if options['all'] or options['output'] == name
|
82
|
+
options[:exclude] ||= []
|
83
|
+
rows = []
|
84
|
+
|
85
|
+
content[name].each do |row|
|
86
|
+
cols = []
|
87
|
+
if options[:cols] == :all
|
88
|
+
options[:exclude].each do |col|
|
89
|
+
row.delete(col.to_s)
|
90
|
+
end
|
91
|
+
cols = row.values
|
92
|
+
else
|
93
|
+
options[:cols].each do |col|
|
94
|
+
if col == 'key'
|
95
|
+
cols << row[0]
|
96
|
+
else
|
97
|
+
cols << row[1][col]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
rows << cols
|
102
|
+
end
|
103
|
+
|
104
|
+
title = options['all'] ? name : nil
|
105
|
+
headings = options[:cols] == :all ? content[name][0].keys : options[:cols]
|
106
|
+
puts Terminal::Table.new :title => title, :headings => headings, :rows => rows
|
107
|
+
puts if options['all']
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/lib/smartdc/client.rb
CHANGED
@@ -1,40 +1,45 @@
|
|
1
|
-
require '
|
1
|
+
require 'cassette-rack'
|
2
|
+
require 'smartdc/auth'
|
2
3
|
require 'smartdc/api/datacenters'
|
3
|
-
require 'smartdc/api/
|
4
|
+
require 'smartdc/api/images'
|
4
5
|
require 'smartdc/api/packages'
|
6
|
+
require 'smartdc/api/keys'
|
5
7
|
require 'smartdc/api/machines'
|
8
|
+
require 'smartdc/api/machines/tags'
|
9
|
+
require 'smartdc/api/machines/metadata'
|
10
|
+
require 'smartdc/api/machines/snapshots'
|
6
11
|
require 'smartdc/api/analytics'
|
12
|
+
require 'smartdc/api/analytics/heatmap'
|
7
13
|
|
8
14
|
module Smartdc
|
9
15
|
class Client
|
10
|
-
|
16
|
+
include CassetteRack::Request
|
17
|
+
include Smartdc::Api::Datacenters
|
18
|
+
include Smartdc::Api::Images
|
19
|
+
include Smartdc::Api::Packages
|
20
|
+
include Smartdc::Api::Keys
|
21
|
+
include Smartdc::Api::Machines
|
22
|
+
include Smartdc::Api::Machines::Tags
|
23
|
+
include Smartdc::Api::Machines::Metadata
|
24
|
+
include Smartdc::Api::Machines::Snapshots
|
25
|
+
include Smartdc::Api::Analytics
|
26
|
+
include Smartdc::Api::Analytics::Heatmap
|
11
27
|
|
12
28
|
def initialize(options={})
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
def packages()
|
29
|
-
Smartdc::Api::Packages.new(options)
|
30
|
-
end
|
31
|
-
|
32
|
-
def machines()
|
33
|
-
Smartdc::Api::Machines.new(options)
|
34
|
-
end
|
35
|
-
|
36
|
-
def analytics()
|
37
|
-
Smartdc::Api::Analytics.new(options)
|
29
|
+
options = Smartdc.config.options.merge(options)
|
30
|
+
auth = Smartdc::Auth.new(options)
|
31
|
+
date = Time.now.gmtime.to_s
|
32
|
+
|
33
|
+
@request_options = {
|
34
|
+
builder: options[:middleware],
|
35
|
+
url: options[:url],
|
36
|
+
ssl: { verify: options[:ssl_verify] },
|
37
|
+
headers: {
|
38
|
+
date: date, authorization: auth.signature(date),
|
39
|
+
'content-type' => 'application/json', accept: 'application/json',
|
40
|
+
'x-api-version' => options[:version]
|
41
|
+
}
|
42
|
+
}
|
38
43
|
end
|
39
44
|
end
|
40
45
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Smartdc
|
2
|
+
module Configure
|
3
|
+
class << self
|
4
|
+
def attributes
|
5
|
+
@attributes ||= %i[
|
6
|
+
url version ssl_verify middleware
|
7
|
+
username use_key rsa_path
|
8
|
+
]
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup
|
12
|
+
attributes.each do |attribute|
|
13
|
+
if Smartdc::Default.respond_to?(attribute)
|
14
|
+
instance_variable_set(:"@#{attribute}", Smartdc::Default.send(attribute))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def options
|
20
|
+
Hash[
|
21
|
+
Smartdc::Configure.attributes.map do |attribute|
|
22
|
+
[attribute, instance_variable_get(:"@#{attribute}")]
|
23
|
+
end
|
24
|
+
]
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_accessor *Smartdc::Configure.attributes
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module Smartdc
|
4
|
+
module Default
|
5
|
+
URL = 'https://us-east-1.api.joyentcloud.com'.freeze
|
6
|
+
VERSION = '~7.0'.freeze
|
7
|
+
SSL_VERIFY = true.freeze
|
8
|
+
RSA_PATH = '~/.ssh'.freeze
|
9
|
+
MIDDLEWARE = Faraday::RackBuilder.new do |builder|
|
10
|
+
builder.adapter Faraday.default_adapter
|
11
|
+
end
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def url
|
15
|
+
URL
|
16
|
+
end
|
17
|
+
|
18
|
+
def version
|
19
|
+
VERSION
|
20
|
+
end
|
21
|
+
|
22
|
+
def ssl_verify
|
23
|
+
SSL_VERIFY
|
24
|
+
end
|
25
|
+
|
26
|
+
def rsa_path
|
27
|
+
RSA_PATH
|
28
|
+
end
|
29
|
+
|
30
|
+
def middleware
|
31
|
+
MIDDLEWARE
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/smartdc/version.rb
CHANGED
data/smartdc.gemspec
CHANGED
@@ -1,23 +1,27 @@
|
|
1
|
-
#
|
1
|
+
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
require 'smartdc/version'
|
5
5
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "smartdc"
|
8
|
+
spec.version = Smartdc::VERSION
|
9
|
+
spec.authors = ["ogom"]
|
10
|
+
spec.email = ["ogom@hotmail.co.jp"]
|
11
|
+
spec.summary = %q{Joyent CloudAPI client by Ruby.}
|
12
|
+
spec.description = %q{Joyent CloudAPI client and command line interface.}
|
13
|
+
spec.homepage = "http://github.com/ogom/ruby-smartdc"
|
14
|
+
spec.license = "MIT"
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
spec.add_dependency 'cassette-rack'
|
22
|
+
spec.add_dependency 'thor'
|
23
|
+
spec.add_dependency 'terminal-table'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler'
|
26
|
+
spec.add_development_dependency 'rake'
|
23
27
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://us-east-1.api.joyentcloud.com/my/analytics/instrumentations
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"module":"syscall","stat":"syscalls"}'
|
9
|
+
headers:
|
10
|
+
Date: ''
|
11
|
+
Authorization: ''
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept:
|
15
|
+
- application/json
|
16
|
+
X-Api-Version:
|
17
|
+
- "~7.0"
|
18
|
+
User-Agent:
|
19
|
+
- Faraday v0.9.1
|
20
|
+
Accept-Encoding:
|
21
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 200
|
25
|
+
message: OK
|
26
|
+
headers:
|
27
|
+
X-Api-Version:
|
28
|
+
- 7.2.0
|
29
|
+
Server:
|
30
|
+
- Joyent SmartDataCenter 7.2.0
|
31
|
+
Request-Id: ''
|
32
|
+
Content-Type:
|
33
|
+
- application/json
|
34
|
+
Access-Control-Expose-Headers:
|
35
|
+
- Api-Version, Request-Id, Response-Time
|
36
|
+
Strict-Transport-Security:
|
37
|
+
- max-age=6570000
|
38
|
+
Date: ''
|
39
|
+
X-Request-Id: ''
|
40
|
+
Location:
|
41
|
+
- "/<USERNAME>/analytics/instrumentations/256"
|
42
|
+
Content-Md5:
|
43
|
+
- vcSXwZ1T0mBEzB5VAzOrFg==
|
44
|
+
Access-Control-Allow-Origin:
|
45
|
+
- "*"
|
46
|
+
Response-Time: ''
|
47
|
+
X-Response-Time: ''
|
48
|
+
Connection:
|
49
|
+
- Keep-Alive
|
50
|
+
Access-Control-Allow-Headers:
|
51
|
+
- Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, Api-Version,
|
52
|
+
Response-Time
|
53
|
+
Access-Control-Allow-Methods:
|
54
|
+
- GET, HEAD, POST
|
55
|
+
Api-Version:
|
56
|
+
- 7.2.0
|
57
|
+
Content-Length:
|
58
|
+
- '382'
|
59
|
+
body:
|
60
|
+
encoding: UTF-8
|
61
|
+
string: '{"module":"syscall","stat":"syscalls","predicate":{},"decomposition":[],"value-dimension":1,"value-arity":"scalar","enabled":true,"retention-time":600,"idle-max":3600,"transformations":{},"nsources":0,"granularity":1,"persist-data":false,"crtime":1424000674378,"value-scope":"interval","id":"256","uris":[{"uri":"/<USERNAME>/analytics/instrumentations/256/value/raw","name":"value_raw"}]}'
|
62
|
+
http_version:
|
63
|
+
recorded_at: Sun, 15 Feb 2015 11:44:36 GMT
|
64
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,123 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://us-east-1.api.joyentcloud.com/my/analytics
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Date: ''
|
11
|
+
Authorization: ''
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept:
|
15
|
+
- application/json
|
16
|
+
X-Api-Version:
|
17
|
+
- "~7.0"
|
18
|
+
User-Agent:
|
19
|
+
- Faraday v0.9.1
|
20
|
+
Accept-Encoding:
|
21
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 200
|
25
|
+
message: OK
|
26
|
+
headers:
|
27
|
+
X-Api-Version:
|
28
|
+
- 7.2.0
|
29
|
+
Server:
|
30
|
+
- Joyent SmartDataCenter 7.2.0
|
31
|
+
Request-Id: ''
|
32
|
+
Content-Type:
|
33
|
+
- application/json
|
34
|
+
Access-Control-Expose-Headers:
|
35
|
+
- Api-Version, Request-Id, Response-Time
|
36
|
+
Strict-Transport-Security:
|
37
|
+
- max-age=6570000
|
38
|
+
Date: ''
|
39
|
+
X-Request-Id: ''
|
40
|
+
Content-Md5:
|
41
|
+
- XITArtu6vj84zHPuBiuzNQ==
|
42
|
+
Access-Control-Allow-Origin:
|
43
|
+
- "*"
|
44
|
+
Response-Time: ''
|
45
|
+
X-Response-Time: ''
|
46
|
+
Connection:
|
47
|
+
- Keep-Alive
|
48
|
+
Access-Control-Allow-Headers:
|
49
|
+
- Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, Api-Version,
|
50
|
+
Response-Time
|
51
|
+
Access-Control-Allow-Methods:
|
52
|
+
- GET, HEAD
|
53
|
+
Api-Version:
|
54
|
+
- 7.2.0
|
55
|
+
Content-Length:
|
56
|
+
- '11086'
|
57
|
+
body:
|
58
|
+
encoding: UTF-8
|
59
|
+
string: '{"modules":{"apache":{"label":"Apache"},"cpu":{"label":"CPU"},"ldapjs":{"label":"ldapjs"},"memory":{"label":"Memory"},"mysql":{"label":"MySQL"},"syscall":{"label":"System
|
60
|
+
calls"},"fs":{"label":"Filesystem"},"node":{"label":"Node.js 0.4.x"},"nic":{"label":"Network
|
61
|
+
interface"},"vm":{"label":"Virtual Machine"},"tcp":{"label":"TCP"},"zfs":{"label":"ZFS"},"unix":{"label":"OS"}},"fields":{"zonename":{"label":"zone
|
62
|
+
name","type":"string"},"pid":{"label":"process identifier","type":"string"},"execname":{"label":"application
|
63
|
+
name","type":"string"},"psargs":{"label":"process arguments","type":"string"},"ppid":{"label":"parent
|
64
|
+
process identifier","type":"string"},"pexecname":{"label":"parent application
|
65
|
+
name","type":"string"},"ppsargs":{"label":"parent process arguments","type":"string"},"raddr":{"label":"remote
|
66
|
+
IP address","type":"string"},"rport":{"label":"remote TCP port","type":"string"},"http_method":{"label":"method","type":"string"},"http_url":{"label":"URL","type":"string"},"http_path":{"label":"URL
|
67
|
+
path","type":"string"},"latency":{"label":"latency","type":"time"},"subsecond":{"label":"subsecond
|
68
|
+
offset","type":"subsecond"},"leavereason":{"label":"reason leaving CPU","type":"string"},"runtime":{"label":"time
|
69
|
+
on CPU","type":"time"},"cpumode":{"label":"CPU mode","type":"string"},"optype":{"label":"operation
|
70
|
+
type","type":"string"},"ldapbinddn":{"label":"bind DN","type":"string"},"ldaprequestdn":{"label":"request
|
71
|
+
DN","type":"string"},"status":{"label":"status","type":"string"},"ldapfilter":{"label":"search
|
72
|
+
filter","type":"string"},"ldapscope":{"label":"search scope","type":"string"},"user":{"label":"client
|
73
|
+
username","type":"string"},"client":{"label":"client hostname","type":"string"},"command":{"label":"command","type":"string"},"cputime":{"label":"CPU
|
74
|
+
time","type":"time"},"querysubstr":{"label":"query substring","type":"string"},"database":{"label":"database
|
75
|
+
name","type":"string"},"parsed":{"label":"parsed","type":"string"},"statement":{"label":"statement
|
76
|
+
type","type":"string"},"rowsmatched":{"label":"rows matched","type":"number"},"rowschanged":{"label":"rows
|
77
|
+
changed","type":"number"},"table":{"label":"table name","type":"string"},"syscall":{"label":"syscall","type":"string"},"fstype":{"label":"filesystem
|
78
|
+
type","type":"string"},"size":{"label":"size","type":"size"},"offset":{"label":"offset","type":"size"},"gctype":{"label":"GC
|
79
|
+
type","type":"string"},"http_origin":{"label":"reported origin IP","type":"string"},"buffered":{"label":"bytes
|
80
|
+
buffered on socket","type":"size"},"direction":{"label":"sent/received","type":"string"},"vmmmuctx":{"label":"VM
|
81
|
+
MMU context","type":"string"},"errno":{"label":"error code","type":"string"},"zdataset":{"label":"ZFS
|
82
|
+
dataset","type":"string"},"walltime":{"label":"process runtime","type":"time"},"rss":{"label":"resident
|
83
|
+
set size","type":"size"},"contract":{"label":"contract identifier","type":"string"},"pmodel":{"label":"process
|
84
|
+
model","type":"string"},"nthreads":{"label":"number of threads","type":"number"}},"types":{"string":{"name":"string","arity":"discrete","unit":""},"time":{"arity":"numeric","unit":"seconds","abbr":"s","base":10,"power":-9,"name":"time"},"subsecond":{"arity":"numeric","unit":"seconds","abbr":"s","base":10,"power":-3,"name":"subsecond"},"size":{"arity":"numeric","unit":"bytes","abbr":"B","base":2,"name":"size"},"number":{"arity":"numeric","name":"number","unit":""}},"metrics":[{"module":"apache","stat":"httpd_ops","label":"HTTP
|
85
|
+
requests","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","raddr","rport","http_method","http_url","http_path","latency"],"unit":"requests"},{"module":"cpu","stat":"thread_samples","label":"thread
|
86
|
+
samples","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","subsecond"],"unit":"samples"},{"module":"cpu","stat":"thread_executions","label":"thread
|
87
|
+
executions","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","leavereason","runtime","subsecond"],"unit":"operations"},{"module":"cpu","stat":"usage","label":"aggregated
|
88
|
+
CPU usage","interval":"point","fields":["zonename","cpumode"],"unit":"percent
|
89
|
+
of 1 CPU"},{"module":"cpu","stat":"waittime","label":"aggregated wait time","interval":"interval","fields":["zonename"],"type":"time"},{"module":"ldapjs","stat":"connections","label":"connections","interval":"interval","fields":["zonename","pid","execname","psargs","raddr"],"unit":"connections"},{"module":"ldapjs","stat":"ops","label":"all
|
90
|
+
operations","interval":"interval","fields":["zonename","pid","execname","psargs","raddr","optype","ldapbinddn","ldaprequestdn","status","latency"],"unit":"operations"},{"module":"ldapjs","stat":"search_ops","label":"search
|
91
|
+
operations","interval":"interval","fields":["zonename","pid","execname","psargs","raddr","ldapbinddn","ldaprequestdn","status","ldapfilter","ldapscope","latency"],"unit":"operations"},{"module":"memory","stat":"rss","label":"resident
|
92
|
+
set size","interval":"point","fields":["zonename"],"type":"size"},{"module":"memory","stat":"rss_limit","label":"maximum
|
93
|
+
resident set size","interval":"point","fields":["zonename"],"type":"size"},{"module":"memory","stat":"swap","label":"virtual
|
94
|
+
memory reserved","interval":"point","fields":["zonename"],"type":"size"},{"module":"memory","stat":"swap_limit","label":"maximum
|
95
|
+
virtual memory reserved","interval":"point","fields":["zonename"],"type":"size"},{"module":"memory","stat":"reclaimed_bytes","label":"excess
|
96
|
+
memory reclaimed","interval":"interval","fields":["zonename"],"type":"size"},{"module":"memory","stat":"pageins","label":"pages
|
97
|
+
paged in","interval":"interval","fields":["zonename"],"unit":"pages"},{"module":"mysql","stat":"connections","label":"connections","interval":"interval","fields":["zonename","pid","execname","psargs","user","client","latency"],"unit":"connections"},{"module":"mysql","stat":"commands","label":"commands","interval":"interval","fields":["zonename","pid","execname","psargs","command","user","client","status","latency","cputime"],"unit":"commands"},{"module":"mysql","stat":"queries","label":"queries","interval":"interval","fields":["zonename","pid","execname","psargs","querysubstr","database","user","client","parsed","status","latency","cputime"],"unit":"queries"},{"module":"mysql","stat":"statements","label":"statements","interval":"interval","fields":["zonename","pid","execname","psargs","statement","status","rowsmatched","rowschanged","latency","cputime"],"unit":"statements"},{"module":"mysql","stat":"filesort","label":"filesort","interval":"interval","fields":["zonename","pid","execname","psargs","database","table","latency","cputime"],"unit":"filesorts"},{"module":"syscall","stat":"syscalls","label":"system
|
98
|
+
calls","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","syscall","subsecond","latency","cputime"],"unit":"syscalls"},{"module":"fs","stat":"logical_ops","label":"logical
|
99
|
+
filesystem operations","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","fstype","optype","latency"],"unit":"operations"},{"module":"fs","stat":"logical_rwops","label":"logical
|
100
|
+
read/write operations","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","fstype","optype","size","offset","latency"],"unit":"operations"},{"module":"fs","stat":"logical_rwbytes","label":"logical
|
101
|
+
bytes read/written","interval":"interval","fields":["zonename","optype"],"type":"size"},{"module":"node","stat":"gc_ops","label":"garbage
|
102
|
+
collection operations","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","gctype","latency"],"unit":"operations"},{"module":"node","stat":"httpc_ops","label":"HTTP
|
103
|
+
client operations","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","raddr","rport","http_method","http_url","http_path","latency"],"unit":"operations"},{"module":"node","stat":"httpd_ops","label":"HTTP
|
104
|
+
server operations","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","http_origin","raddr","rport","http_method","http_url","http_path","latency"],"unit":"operations"},{"module":"node","stat":"socket_ops","label":"socket
|
105
|
+
operations","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","optype","raddr","rport","size","buffered"],"unit":"operations"},{"module":"nic","stat":"vnic_bytes","label":"VNIC
|
106
|
+
bytes sent and received","interval":"interval","fields":["zonename","direction"],"type":"size"},{"module":"nic","stat":"vnic_packets","label":"VNIC
|
107
|
+
packets sent and received","interval":"interval","fields":["zonename","direction"],"unit":"packets"},{"module":"vm","stat":"thread_samples","label":"thread
|
108
|
+
samples","interval":"interval","fields":["zonename","subsecond","vmmmuctx"],"unit":"samples"},{"module":"vm","stat":"physio_ops","label":"disk
|
109
|
+
I/O operations","interval":"interval","fields":["zonename","optype","latency","size","offset","errno"],"unit":"operations"},{"module":"vm","stat":"physio_bytes","label":"disk
|
110
|
+
bytes read and written","interval":"interval","fields":["zonename","optype"],"type":"size"},{"module":"tcp","stat":"accepts","label":"accepts","interval":"interval","fields":["zonename","pid","execname","psargs","ppid","pexecname","ppsargs","rport","raddr"],"unit":"accepts"},{"module":"zfs","stat":"arc_ops","label":"ARC
|
111
|
+
operations","interval":"interval","fields":["zonename","execname","psargs","pid","pexecname","ppsargs","ppid","optype"],"unit":"operations"},{"module":"zfs","stat":"dataset_unused_quota","label":"unused
|
112
|
+
quota","interval":"point","fields":["zdataset"],"type":"size"},{"module":"zfs","stat":"dataset_used","label":"used
|
113
|
+
space","interval":"point","fields":["zdataset"],"type":"size"},{"module":"zfs","stat":"dataset_quota","label":"quota
|
114
|
+
size","interval":"point","fields":["zdataset"],"type":"size"},{"module":"unix","stat":"proc_execs","label":"process
|
115
|
+
execs","interval":"interval","fields":["zonename","execname","subsecond","psargs","ppid","ppsargs","pexecname","pid"],"unit":"processes"},{"module":"unix","stat":"proc_forks","label":"process
|
116
|
+
forks","interval":"interval","fields":["zonename","execname","subsecond","psargs","ppid","pid"],"unit":"processes"},{"module":"unix","stat":"proc_exits","label":"process
|
117
|
+
exits","interval":"interval","fields":["zonename","execname","subsecond","psargs","ppsargs","pexecname","ppid","pid","walltime"],"unit":"processes"},{"module":"unix","stat":"thr_creates","label":"thread
|
118
|
+
creations","interval":"interval","fields":["zonename","execname","subsecond","psargs","ppsargs","pexecname","ppid","pid"],"unit":"threads"},{"module":"unix","stat":"processes","label":"processes","interval":"interval","fields":["zonename","execname","pid","ppid","rss","contract","psargs","pmodel","nthreads"],"unit":"processes"}],"transformations":{"geolocate":{"label":"geolocate
|
119
|
+
IP addresses","fields":["raddr"]},"reversedns":{"label":"reverse dns IP addresses
|
120
|
+
lookup","fields":["raddr"]}}}'
|
121
|
+
http_version:
|
122
|
+
recorded_at: Sun, 15 Feb 2015 11:37:46 GMT
|
123
|
+
recorded_with: VCR 2.9.3
|