mms-api 0.1.3 → 0.1.4
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/README.md +32 -8
- data/lib/mms.rb +2 -0
- data/lib/mms/agent.rb +2 -2
- data/lib/mms/resource/backup_config.rb +65 -0
- data/lib/mms/resource/cluster.rb +1 -1
- data/lib/mms/resource/group.rb +24 -0
- data/lib/mms/resource/host.rb +36 -0
- data/lib/mms/resource/metric.rb +63 -0
- data/lib/mms/resource/restore_job.rb +18 -14
- data/lib/mms/resource/snapshot.rb +11 -3
- data/lib/mms/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa0051f575f3a3ae3a361221591a57fca40256b9
|
4
|
+
data.tar.gz: acda37863edf79ad4929c758dcf2cb60b5f7efef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f48f1b2cf25beef5d7b13e1361764548f4d77889cf2c7c9b7dea3462520386b72a5f8d2fa75a0115d89b6c2729e4bf089232a843ebdac924b246517642324949
|
7
|
+
data.tar.gz: 931ed08d4581148c0d4e191188524f9051af12b5b0b1df8ba33507a2124eb140c86e0992729cc48e61c77591db3d9ae31f4cb0cd375c65ba15b0f9a51b13ca99
|
data/README.md
CHANGED
@@ -12,14 +12,16 @@ API coverage
|
|
12
12
|
------------
|
13
13
|
The MMS Public API follows the principles of the REST architectural style to expose a number of internal resources which enable programmatic access to [MMS’s features](http://mms.mongodb.com/help/reference/api/). Current implementation support only a few of API features.
|
14
14
|
|
15
|
-
|Resource
|
16
|
-
|
17
|
-
|Groups
|
18
|
-
|Hosts
|
19
|
-
|Clusters
|
20
|
-
|Snapshots
|
21
|
-
|Alerts
|
22
|
-
|Restore Jobs
|
15
|
+
|Resource |Get All |Get One |Create |Update |Delete |
|
16
|
+
|:--------------|:------:|:------:|:-----:|:-----:|:-----:|
|
17
|
+
|Groups | + | + | | | |
|
18
|
+
|Hosts | + | + | | | |
|
19
|
+
|Clusters | + | + | | | |
|
20
|
+
|Snapshots | + | + | | | |
|
21
|
+
|Alerts | + | + | | | |
|
22
|
+
|Restore Jobs | + | + | + | | |
|
23
|
+
|Backup Configs | + | + | | | |
|
24
|
+
|Metrics | + | + | | | |
|
23
25
|
|
24
26
|
Library usage
|
25
27
|
-------------
|
@@ -73,6 +75,28 @@ group = MMS::Resource::Group.find(client, 'group_id')
|
|
73
75
|
hosts = group.hosts
|
74
76
|
```
|
75
77
|
|
78
|
+
#### Metrics
|
79
|
+
|
80
|
+
(Not available via CLI)
|
81
|
+
|
82
|
+
You can list the available metrics on each host. The list contains the resource type MMS::Resource::Metric. This can be used to see which performance metrics the host has.
|
83
|
+
|
84
|
+
In order to get the metric's data points you'll need to call the specific function.
|
85
|
+
|
86
|
+
Note - you can send a hash containing query parameter. With no input it uses MMS default.
|
87
|
+
|
88
|
+
The return value of the data points is the hash described in MMS's API reference docs.
|
89
|
+
```ruby
|
90
|
+
client = new MMS::Client.new('username', 'api_key')
|
91
|
+
host = MMS::Resource::Host.find(client, 'group_id', 'host_id')
|
92
|
+
metrics = host.metrics
|
93
|
+
options = {"granularity" => "HOUR", "period" => "P1DT12H" }
|
94
|
+
metrics.each do |m|
|
95
|
+
puts m.data_points(options)
|
96
|
+
end
|
97
|
+
```
|
98
|
+
In case of hardware or database metrics, the return value will be an array that each value contains the data points for the relevant device or database.
|
99
|
+
|
76
100
|
Cli usage
|
77
101
|
---------
|
78
102
|
|
data/lib/mms.rb
CHANGED
data/lib/mms/agent.rb
CHANGED
@@ -80,8 +80,8 @@ module MMS
|
|
80
80
|
if type_value.length == 24
|
81
81
|
find_group(group_id).cluster(cluster_id).snapshot(type_value).create_restorejob
|
82
82
|
elsif datetime = (type_value == 'now' ? DateTime.now : DateTime.parse(type_value))
|
83
|
-
raise('Invalid datetime. Correct `YYYY-MM-RRTH:m:
|
84
|
-
datetime_string = [[datetime.year, datetime.
|
83
|
+
raise('Invalid datetime. Correct `YYYY-MM-RRTH:m:sZ`') if datetime.nil?
|
84
|
+
datetime_string = [[datetime.year, datetime.month, datetime.day].join('-'), 'T', [datetime.hour, datetime.minute, datetime.second].join(':'), 'Z'].join
|
85
85
|
find_group(group_id).cluster(cluster_id).create_restorejob(datetime_string)
|
86
86
|
end
|
87
87
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module MMS
|
4
|
+
|
5
|
+
class Resource::BackupConfig < Resource
|
6
|
+
|
7
|
+
attr_accessor :cluster_id
|
8
|
+
attr_accessor :excluded_namespaces
|
9
|
+
attr_accessor :group_id
|
10
|
+
attr_accessor :links
|
11
|
+
attr_accessor :status_name
|
12
|
+
|
13
|
+
# @return [TrueClass, FalseClass]
|
14
|
+
def is_active
|
15
|
+
'STARTED'.eql? @status_name
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [String, NilClass]
|
19
|
+
def cluster_name
|
20
|
+
cluster.name if is_cluster
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [MMS::Resource::Cluster]
|
24
|
+
def cluster
|
25
|
+
MMS::Resource::Cluster.find(@client, @data['groupId'], @data['clusterId'])
|
26
|
+
end
|
27
|
+
|
28
|
+
def table_row
|
29
|
+
[cluster.group.name, cluster.name, @id, @excluded_namespaces, @group_id, @links, @status_name, @cluster_id]
|
30
|
+
end
|
31
|
+
|
32
|
+
def table_section
|
33
|
+
rows = []
|
34
|
+
rows << table_row
|
35
|
+
rows << :separator
|
36
|
+
rows
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.table_header
|
40
|
+
['Group', 'Cluster', 'BackupId', 'Excluded namespaces', 'Group Id', 'Links', 'Status name', 'Cluster id']
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param [MMS::Client] client
|
44
|
+
# @param [String] group_id
|
45
|
+
# @param [String] cluster_id
|
46
|
+
def self._find(client, group_id, cluster_id)
|
47
|
+
client.get('/groups/' + group_id + '/backupConfigs/' + cluster_id)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def _from_hash(data)
|
53
|
+
@cluster_id = data['clusterId']
|
54
|
+
@excluded_namespaces = data['excludedNamespaces']
|
55
|
+
@group_id = data['groupId']
|
56
|
+
@links = data['links']
|
57
|
+
@status_name = data['statusName']
|
58
|
+
end
|
59
|
+
|
60
|
+
def _to_hash
|
61
|
+
@data
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
data/lib/mms/resource/cluster.rb
CHANGED
data/lib/mms/resource/group.rb
CHANGED
@@ -12,6 +12,7 @@ module MMS
|
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
@clusters = []
|
15
|
+
@backup_configs = []
|
15
16
|
end
|
16
17
|
|
17
18
|
# @param [Integer] page
|
@@ -73,6 +74,19 @@ module MMS
|
|
73
74
|
MMS::Resource::Cluster.find(@client, @id, id)
|
74
75
|
end
|
75
76
|
|
77
|
+
def backup_configs
|
78
|
+
if @backup_configs.empty?
|
79
|
+
@client.get('/groups/' + @id + '/backupConfigs').each do |backup_config|
|
80
|
+
bc = MMS::Resource::BackupConfig.new
|
81
|
+
bc.set_client(@client)
|
82
|
+
bc.set_data(backup_config)
|
83
|
+
|
84
|
+
@backup_configs.push bc
|
85
|
+
end
|
86
|
+
end
|
87
|
+
@backup_configs
|
88
|
+
end
|
89
|
+
|
76
90
|
# @param [String] id
|
77
91
|
# @return [MMS::Resource::Snapshot, NilClass]
|
78
92
|
def find_snapshot(id)
|
@@ -85,6 +99,16 @@ module MMS
|
|
85
99
|
# Snapshot is not available on this cluster. Skip it!
|
86
100
|
end
|
87
101
|
end
|
102
|
+
if snapshot.nil?
|
103
|
+
hosts.each do |host|
|
104
|
+
begin
|
105
|
+
snapshot = host.snapshot(id)
|
106
|
+
break unless snapshot.nil?
|
107
|
+
rescue MMS::ApiError => e
|
108
|
+
# Snapshot is not available on this host. Skip it!
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
88
112
|
snapshot
|
89
113
|
end
|
90
114
|
|
data/lib/mms/resource/host.rb
CHANGED
@@ -17,11 +17,32 @@ module MMS
|
|
17
17
|
attr_accessor :profiler_enabled
|
18
18
|
attr_accessor :logs_enabled
|
19
19
|
|
20
|
+
def initialize
|
21
|
+
@metric_list = []
|
22
|
+
end
|
23
|
+
|
20
24
|
# @return [MMS::Resource::Group]
|
21
25
|
def group
|
22
26
|
MMS::Resource::Group.find(@client, @data['groupId'])
|
23
27
|
end
|
24
28
|
|
29
|
+
def snapshot(id)
|
30
|
+
MMS::Resource::Snapshot.find(@client, group.id, nil, @id, id)
|
31
|
+
end
|
32
|
+
|
33
|
+
def snapshots(page = 1, limit = 1000)
|
34
|
+
if @snapshots.empty?
|
35
|
+
@client.get('/groups/' + group.id + '/hosts/' + @id + '/snapshots?pageNum=' + page.to_s + '&itemsPerPage=' + limit.to_s).each do |snapshot|
|
36
|
+
s = MMS::Resource::Snapshot.new
|
37
|
+
s.set_client(@client)
|
38
|
+
s.set_data(snapshot)
|
39
|
+
|
40
|
+
@snapshots.push s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
@snapshots
|
44
|
+
end
|
45
|
+
|
25
46
|
def table_row
|
26
47
|
[group.name, @type_name, @name, @ip_address, @port, @last_ping, @alerts_enabled, @id, @shard_name, @replicaset_name]
|
27
48
|
end
|
@@ -37,10 +58,25 @@ module MMS
|
|
37
58
|
# @param [MMS::Client] client
|
38
59
|
# @param [String] group_id
|
39
60
|
# @param [String] id
|
61
|
+
# @returns [Hash]
|
40
62
|
def self._find(client, group_id, id)
|
41
63
|
client.get('/groups/' + group_id + '/hosts/' + id)
|
42
64
|
end
|
43
65
|
|
66
|
+
# @returns [Array<MMS::Resource::Metric>]
|
67
|
+
def metrics
|
68
|
+
if @metric_list.empty?
|
69
|
+
@client.get('/groups/' + group.id + '/hosts/' + @id + '/metrics').each do |metric|
|
70
|
+
m = MMS::Resource::Metric.new
|
71
|
+
m.set_client(@client)
|
72
|
+
m.set_data(metric)
|
73
|
+
|
74
|
+
@metric_list.push m
|
75
|
+
end
|
76
|
+
end
|
77
|
+
@metric_list
|
78
|
+
end
|
79
|
+
|
44
80
|
private
|
45
81
|
|
46
82
|
def _from_hash(data)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module MMS
|
2
|
+
|
3
|
+
class Resource::Metric < Resource
|
4
|
+
|
5
|
+
attr_accessor :name
|
6
|
+
attr_accessor :units
|
7
|
+
attr_accessor :granularity
|
8
|
+
attr_accessor :data_points
|
9
|
+
|
10
|
+
def host
|
11
|
+
MMS::Resource::Host.find(@client, @data['groupId'], @data['hostId'])
|
12
|
+
end
|
13
|
+
|
14
|
+
# @param [Hash] options
|
15
|
+
# @returns [Array<Hash>]
|
16
|
+
def data_points(options = {})
|
17
|
+
series = []
|
18
|
+
metric_data = get_metric_data(options)
|
19
|
+
if !metric_data.is_a?(Array)
|
20
|
+
series << metric_data
|
21
|
+
else
|
22
|
+
metric_data.each do |m|
|
23
|
+
d_name = (m['deviceName'] || '') + (m['databaseName'] || '')
|
24
|
+
series << get_metric_data(options, d_name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
series
|
28
|
+
end
|
29
|
+
|
30
|
+
# @param [MMS::Client] client
|
31
|
+
# @param [String] group_id
|
32
|
+
# @param [String] host_id
|
33
|
+
# @param [String] metric_name
|
34
|
+
# @returns [Hash]
|
35
|
+
def self._find(client, group_id, host_id, metric_name)
|
36
|
+
client.get('/groups/' + group_id + '/hosts/' + host_id + '/metrics/' + metric_name)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# @param [Hash] options
|
42
|
+
# @param [String] name
|
43
|
+
# @returns [Hash]
|
44
|
+
def get_metric_data(options = {}, d_name = '')
|
45
|
+
params = options.map { |k, v| "#{k}=#{v}" }.join('&')
|
46
|
+
ret = client.get("/groups/#{@data['groupId']}/hosts/#{@data['hostId']}/metrics/#{@data['metricName']}/#{d_name}?#{params}")
|
47
|
+
ret.delete("links")
|
48
|
+
ret
|
49
|
+
end
|
50
|
+
|
51
|
+
def _from_hash(data)
|
52
|
+
@name = data['metricName']
|
53
|
+
@units = data['units']
|
54
|
+
@granularity = data['granularity']
|
55
|
+
@data_points = data['dataPoints']
|
56
|
+
data.delete('links')
|
57
|
+
end
|
58
|
+
|
59
|
+
def _to_hash
|
60
|
+
@data
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -22,15 +22,24 @@ module MMS
|
|
22
22
|
|
23
23
|
attr_accessor :cluster_id
|
24
24
|
attr_accessor :group_id
|
25
|
+
attr_accessor :host_id
|
25
26
|
|
26
27
|
# @return [MMS::Resource::Cluster]
|
27
28
|
def cluster
|
28
29
|
MMS::Resource::Cluster.find(@client, @group_id, @cluster_id)
|
29
30
|
end
|
30
31
|
|
32
|
+
def host
|
33
|
+
MMS::Resource::Host.find(@client, @group_id, @host_id)
|
34
|
+
end
|
35
|
+
|
36
|
+
def has_host?
|
37
|
+
!@host_id.nil?
|
38
|
+
end
|
39
|
+
|
31
40
|
# @return [MMS::Resource::Snapshot, NilClass]
|
32
41
|
def snapshot
|
33
|
-
@
|
42
|
+
has_host? ? host.snapshot(@snapshot_id) : cluster.snapshot(@snapshot_id)
|
34
43
|
end
|
35
44
|
|
36
45
|
def table_row
|
@@ -53,22 +62,16 @@ module MMS
|
|
53
62
|
['Timestamp / RestoreId', 'SnapshotId / Cluster / Group', 'Name (created)', 'Status', 'Point in time', 'Delivery', 'Restore status']
|
54
63
|
end
|
55
64
|
|
56
|
-
def self._find(client, group_id, cluster_id, id)
|
57
|
-
|
58
|
-
client.get('/groups/' + group_id + '/clusters/' + cluster_id + '/restoreJobs/' + id)
|
59
|
-
rescue MMS::ApiError => e
|
60
|
-
# workaround for https://jira.mongodb.org/browse/DOCS-5017
|
61
|
-
self._find_from_list(client, group_id, cluster_id, id)
|
62
|
-
end
|
65
|
+
def self._find(client, group_id, cluster_id, host_id, id)
|
66
|
+
host_id.nil? ? self._find_by_cluster(client, group_id, cluster_id, id) : self._find_by_host(client, group_id, host_id, id)
|
63
67
|
end
|
64
68
|
|
65
|
-
def self.
|
66
|
-
|
67
|
-
|
68
|
-
job = cluster.restorejobs.find { |restorejob| restorejob.id == id }
|
69
|
-
raise("Cannot find RestoreJob id `#{id}`") if job.nil?
|
69
|
+
def self._find_by_host(client, group_id, host_id, id)
|
70
|
+
client.get('/groups/' + group_id + '/hosts/' + host_id + '/restoreJobs/' + id)
|
71
|
+
end
|
70
72
|
|
71
|
-
|
73
|
+
def self._find_by_cluster(client, group_id, cluster_id, id)
|
74
|
+
client.get('/groups/' + group_id + '/clusters/' + cluster_id + '/restoreJobs/' + id)
|
72
75
|
end
|
73
76
|
|
74
77
|
private
|
@@ -85,6 +88,7 @@ module MMS
|
|
85
88
|
@name = DateTime.parse(@created).strftime("%Y-%m-%d %H:%M:%S")
|
86
89
|
@cluster_id = data['clusterId']
|
87
90
|
@group_id = data['groupId']
|
91
|
+
@host_id = data['hostId']
|
88
92
|
end
|
89
93
|
|
90
94
|
def _to_hash
|
@@ -20,12 +20,12 @@ module MMS
|
|
20
20
|
|
21
21
|
# @return [TrueClass, FalseClass]
|
22
22
|
def is_config
|
23
|
-
@parts.length == 1 and @parts.first['typeName'] == '
|
23
|
+
@parts.length == 1 and @parts.first['typeName'] == 'REPLICA_SET' and !@parts.first['hostId'].nil?
|
24
24
|
end
|
25
25
|
|
26
26
|
# @return [TrueClass, FalseClass]
|
27
27
|
def is_replica
|
28
|
-
@parts.length == 1 and @parts.first['typeName'] == 'REPLICA_SET'
|
28
|
+
@parts.length == 1 and @parts.first['typeName'] == 'REPLICA_SET' and !@parts.first['clusterId'].nil?
|
29
29
|
end
|
30
30
|
|
31
31
|
# @return [String, NilClass]
|
@@ -101,10 +101,18 @@ module MMS
|
|
101
101
|
# @param [String] cluster_id
|
102
102
|
# @param [String] id
|
103
103
|
# @return [MMS::Resource::Snapshot]
|
104
|
-
def self._find(client, group_id, cluster_id, id)
|
104
|
+
def self._find(client, group_id, cluster_id, host_id, id)
|
105
|
+
host_id.nil? ? self._find_by_cluster(client, group_id, cluster_id, id) : self._find_by_host(client, group_id, host_id, id)
|
106
|
+
end
|
107
|
+
|
108
|
+
def self._find_by_cluster(client, group_id, cluster_id, id)
|
105
109
|
client.get('/groups/' + group_id + '/clusters/' + cluster_id + '/snapshots/' + id.to_s)
|
106
110
|
end
|
107
111
|
|
112
|
+
def self._find_by_host(client, group_id, host_id, id)
|
113
|
+
client.get('/groups/' + group_id + '/hosts/' + host_id + '/snapshots/' + id.to_s)
|
114
|
+
end
|
115
|
+
|
108
116
|
private
|
109
117
|
|
110
118
|
def _from_hash(data)
|
data/lib/mms/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mms-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cargo Media
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-09-28 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: net-http-digest_auth
|
@@ -115,9 +115,11 @@ files:
|
|
115
115
|
- lib/mms/errors.rb
|
116
116
|
- lib/mms/resource.rb
|
117
117
|
- lib/mms/resource/alert.rb
|
118
|
+
- lib/mms/resource/backup_config.rb
|
118
119
|
- lib/mms/resource/cluster.rb
|
119
120
|
- lib/mms/resource/group.rb
|
120
121
|
- lib/mms/resource/host.rb
|
122
|
+
- lib/mms/resource/metric.rb
|
121
123
|
- lib/mms/resource/restore_job.rb
|
122
124
|
- lib/mms/resource/snapshot.rb
|
123
125
|
- lib/mms/resource/snapshot_schedule.rb
|