mms-api 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,5 @@
1
1
  module MMS
2
-
3
2
  class Client
4
-
5
3
  attr_accessor :username
6
4
  attr_accessor :apikey
7
5
  attr_accessor :url
@@ -28,6 +26,19 @@ module MMS
28
26
  _request(Net::HTTP::Post, @url + path, @username, @apikey, data)
29
27
  end
30
28
 
29
+ # @param [String] path
30
+ # @return [Hash]
31
+ def delete(path)
32
+ _request(Net::HTTP::Delete, @url + path, @username, @apikey, nil)
33
+ end
34
+
35
+ # @param [String] path
36
+ # @param [Hash] data
37
+ # @return [Hash]
38
+ def patch(path, data)
39
+ _request(Net::HTTP::Patch, @url + path, @username, @apikey, data)
40
+ end
41
+
31
42
  private
32
43
 
33
44
  # @param [Net::HTTPRequest] http_method
@@ -37,22 +48,21 @@ module MMS
37
48
  # @param [Hash] data
38
49
  # @return [Hash]
39
50
  def _request(http_method, path, username, password, data = nil)
40
-
41
51
  digest_auth = Net::HTTP::DigestAuth.new
42
52
  digest_auth.next_nonce
43
53
 
44
54
  uri = URI.parse path
45
- uri.user= CGI.escape(username)
46
- uri.password= CGI.escape(password)
55
+ uri.user = CGI.escape(username)
56
+ uri.password = CGI.escape(password)
47
57
 
48
58
  http = Net::HTTP.new uri.host, uri.port
49
59
  http.use_ssl = (uri.scheme == 'https')
50
60
 
51
- req = http_method.new(uri.request_uri, {'Content-Type' => 'application/json'})
61
+ req = http_method.new(uri.request_uri, 'Content-Type' => 'application/json')
52
62
  res = http.request req
53
63
 
54
- raise 'Invalid method' unless http_method.kind_of? Class and http_method < Net::HTTPRequest
55
- req = http_method.new(uri.request_uri, {'Content-Type' => 'application/json'})
64
+ fail 'Invalid method' unless http_method.is_a?(Class) && http_method < Net::HTTPRequest
65
+ req = http_method.new(uri.request_uri, 'Content-Type' => 'application/json')
56
66
  method_name = http_method.name.split('::').last.upcase
57
67
  auth = digest_auth.auth_header(uri, res['WWW-Authenticate'], method_name)
58
68
  req.add_field 'Authorization', auth
@@ -61,16 +71,15 @@ module MMS
61
71
  response = http.request req
62
72
  response_json = JSON.parse response.body
63
73
 
64
- unless response.code == 200 or response_json['error'].nil?
74
+ unless response.code == 200 || response_json['error'].nil?
65
75
  msg = "http 'get' error for url `#{url}`"
66
76
  msg = response_json['detail'] unless response_json['detail'].nil?
67
77
 
68
- raise MMS::AuthError.new(msg, req, response) if response.code == '401'
69
- raise MMS::ApiError.new(msg, req, response)
78
+ fail MMS::AuthError.new(msg, req, response) if response.code == '401'
79
+ fail MMS::ApiError.new(msg, req, response)
70
80
  end
71
81
 
72
- (response_json.nil? or response_json['results'].nil?) ? response_json : response_json['results']
82
+ (response_json.nil? || response_json['results'].nil?) ? response_json : response_json['results']
73
83
  end
74
-
75
84
  end
76
85
  end
@@ -1,57 +1,28 @@
1
1
  module MMS
2
-
3
2
  class Config
4
-
5
3
  default = {
6
- username: proc {
7
- nil
8
- },
9
- apikey: proc {
10
- nil
11
- },
12
- apiurl: proc {
13
- [api_protocol, '://', api_host, ':', api_port, api_path, '/', api_version].join.to_s
14
- },
15
- limit: proc {
16
- 10
17
- },
18
- api_protocol: proc {
19
- 'https'
20
- },
21
- api_host: proc {
22
- 'mms.mongodb.com'
23
- },
24
- api_port: proc {
25
- '443'
26
- },
27
- api_path: proc {
28
- '/api/public'
29
- },
30
- api_version: proc {
31
- 'v1.0'
32
- },
33
- default_group_id: proc {
34
- nil
35
- },
36
- default_cluster_id: proc {
37
- nil
38
- },
39
- config_path: proc {
40
- Dir.home + '/.mms-api'
41
- }
4
+ username: proc { nil },
5
+ apikey: proc { nil },
6
+ apiurl: proc { [api_protocol, '://', api_host, ':', api_port, api_path, '/', api_version].join.to_s },
7
+ limit: proc { 10 },
8
+ api_protocol: proc { 'https' },
9
+ api_host: proc { 'mms.mongodb.com' },
10
+ api_port: proc { '443' },
11
+ api_path: proc { '/api/public' },
12
+ api_version: proc { 'v1.0' },
13
+ default_group_id: proc { nil },
14
+ default_cluster_id: proc { nil },
15
+ config_path: proc { Dir.home + '/.mms-api' }
42
16
  }
43
17
 
44
18
  default.each do |key, value|
45
19
  define_method(key) do
46
- if default[key].equal?(value)
47
- default[key] = instance_eval(&value)
48
- end
20
+ default[key] = instance_eval(&value) if default[key].equal?(value)
49
21
  default[key]
50
22
  end
51
- define_method("#{key}=") do |value|
52
- default[key] = value
23
+ define_method("#{key}=") do |val|
24
+ default[key] = val
53
25
  end
54
26
  end
55
-
56
27
  end
57
28
  end
@@ -1,7 +1,5 @@
1
1
  module MMS
2
-
3
- class RuntimeError < StandardError;
4
-
2
+ class RuntimeError < StandardError
5
3
  # @param [String] message
6
4
  # @param [Net::HTTPRequest] request
7
5
  # @param [Net::HTTPResponse] response
@@ -14,11 +12,9 @@ module MMS
14
12
 
15
13
  attr_reader :request
16
14
  attr_reader :response
17
-
18
15
  end
19
16
 
20
17
  class ResourceError < StandardError
21
-
22
18
  # @param [String] message
23
19
  # @param [MMS::Resource] resource
24
20
  def initialize(message, resource)
@@ -28,19 +24,15 @@ module MMS
28
24
  end
29
25
 
30
26
  attr_reader :resource
31
-
32
27
  end
33
28
 
34
29
  class ApiError < RuntimeError
35
-
36
- def initialize(message, request, response)
30
+ def initialize(_message, request, response)
37
31
  super("API Response error! Code: #{response.code}, body: #{response.body}", request, response)
38
32
  end
39
-
40
33
  end
41
34
 
42
35
  class AuthError < RuntimeError; end
43
36
 
44
37
  class ConfigError < StandardError; end
45
-
46
38
  end
@@ -1,19 +1,18 @@
1
1
  module MMS
2
-
3
2
  class Resource
4
-
5
3
  attr_accessor :id
6
4
  attr_accessor :data
7
5
 
8
6
  attr_accessor :client
7
+ attr_writer :client
9
8
 
10
9
  # @param [MMS::Client] client
11
- def set_client(client)
10
+ def client(client)
12
11
  @client = client
13
12
  end
14
13
 
15
14
  # @param [Hash] data
16
- def set_data(data)
15
+ def data(data)
17
16
  @data = data
18
17
  from_hash(data)
19
18
  MMS::Cache.instance.set(cache_key(@id), data)
@@ -33,31 +32,31 @@ module MMS
33
32
 
34
33
  # @return [Array<String>]
35
34
  def table_row
36
- raise("`#{__method__}` is not implemented for `#{self.class.name}`")
35
+ fail("`#{__method__}` is not implemented for `#{self.class.name}`")
37
36
  end
38
37
 
39
38
  # @return [Array]
40
39
  def table_section
41
- raise("`#{__method__}` is not implemented for `#{self.class.name}`")
40
+ fail("`#{__method__}` is not implemented for `#{self.class.name}`")
42
41
  end
43
42
 
44
43
  # @return [Array<String>]
45
44
  def self.table_header
46
- raise("`#{__method__}` is not implemented for `#{self.class.name}`")
45
+ fail("`#{__method__}` is not implemented for `#{self.class.name}`")
47
46
  end
48
47
 
49
- def _load(id)
50
- raise("`#{__method__}` is not implemented for `#{self.class.name}`")
48
+ def _load(_id)
49
+ fail("`#{__method__}` is not implemented for `#{self.class.name}`")
51
50
  end
52
51
 
53
- # @param [Hash] data
54
- def _from_hash(data)
55
- raise("`#{__method__}` is not implemented for `#{self.class.name}`")
52
+ # @param [Hash] _data
53
+ def _from_hash(_data)
54
+ fail("`#{__method__}` is not implemented for `#{self.class.name}`")
56
55
  end
57
56
 
58
57
  # @return [Hash]
59
58
  def _to_hash
60
- raise("`#{__method__}` is not implemented for `#{self.class.name}`")
59
+ fail("`#{__method__}` is not implemented for `#{self.class.name}`")
61
60
  end
62
61
 
63
62
  def invalidate_cache
@@ -65,18 +64,17 @@ module MMS
65
64
  end
66
65
 
67
66
  # @param [MMS::Client] client
68
- # @param arguments...
67
+ # @param [Hash] arguments
69
68
  # @return self
70
69
  def self.find(client, *arguments)
71
- cache_key = self.cache_key(arguments.last())
70
+ cache_key = self.cache_key(arguments.last)
72
71
  data = MMS::Cache.instance.get(cache_key)
73
- unless data
74
- data = self._find(client, *arguments)
75
- end
76
72
 
77
- resource = self.new
78
- resource.set_client(client)
79
- resource.set_data(data)
73
+ data = _find(client, *arguments) unless data
74
+
75
+ resource = new
76
+ resource.client(client)
77
+ resource.data(data)
80
78
  resource
81
79
  end
82
80
 
@@ -87,8 +85,7 @@ module MMS
87
85
  end
88
86
 
89
87
  def self.cache_key(id)
90
- "Class::#{self.name}:#{id}"
88
+ "Class::#{name}:#{id}"
91
89
  end
92
-
93
90
  end
94
91
  end
@@ -1,7 +1,5 @@
1
1
  module MMS
2
-
3
2
  class Resource::Alert < Resource
4
-
5
3
  attr_accessor :name
6
4
 
7
5
  attr_accessor :type_name
@@ -19,14 +17,13 @@ module MMS
19
17
  MMS::Resource::Group.find(@client, @data['groupId'])
20
18
  end
21
19
 
22
-
23
20
  # @param [Time, Integer] time
24
21
  # @param [String] description
25
22
  # @return [TrueClass, FalseClass]
26
23
  def ack(time, description)
27
24
  data = {
28
- :acknowledgedUntil => time.to_i,
29
- :acknowledgementComment => description
25
+ acknowledgedUntil: time.to_i,
26
+ acknowledgementComment: description
30
27
  }
31
28
  alert = @client.post '/groups/' + group.id + '/alerts/' + @id, data
32
29
  !alert.nil?
@@ -39,7 +36,7 @@ module MMS
39
36
  def table_section
40
37
  rows = []
41
38
  rows << table_row
42
- rows << [{:value => "AlertId: #{@id} GroupId: #{group.id}", :colspan => 9, :alignment => :left}]
39
+ rows << [{ value: "AlertId: #{@id} GroupId: #{group.id}", colspan: 9, alignment: :left }]
43
40
  rows << :separator
44
41
  rows
45
42
  end
@@ -75,6 +72,5 @@ module MMS
75
72
  def _to_hash
76
73
  @data
77
74
  end
78
-
79
75
  end
80
76
  end
@@ -1,9 +1,7 @@
1
1
  require 'date'
2
2
 
3
3
  module MMS
4
-
5
4
  class Resource::BackupConfig < Resource
6
-
7
5
  attr_accessor :cluster_id
8
6
  attr_accessor :excluded_namespaces
9
7
  attr_accessor :group_id
@@ -60,6 +58,5 @@ module MMS
60
58
  def _to_hash
61
59
  @data
62
60
  end
63
-
64
61
  end
65
62
  end
@@ -1,7 +1,5 @@
1
1
  module MMS
2
-
3
2
  class Resource::Cluster < Resource
4
-
5
3
  attr_accessor :name
6
4
  attr_accessor :shard_name
7
5
  attr_accessor :replicaset_name
@@ -24,12 +22,12 @@ module MMS
24
22
  MMS::Resource::Snapshot.find(@client, group.id, @id, nil, id)
25
23
  end
26
24
 
27
- def snapshots(page = 1, limit = 1000)
25
+ def snapshots(page = 1, limit = 100)
28
26
  if @snapshots.empty?
29
27
  @client.get('/groups/' + group.id + '/clusters/' + @id + '/snapshots?pageNum=' + page.to_s + '&itemsPerPage=' + limit.to_s).each do |snapshot|
30
28
  s = MMS::Resource::Snapshot.new
31
- s.set_client(@client)
32
- s.set_data(snapshot)
29
+ s.client(@client)
30
+ s.data(snapshot)
33
31
 
34
32
  @snapshots.push s
35
33
  end
@@ -41,16 +39,15 @@ module MMS
41
39
  MMS::Resource::SnapshotSchedule.find(@client, group.id, @id)
42
40
  end
43
41
 
44
- def restorejobs(page = 1, limit = 1000)
42
+ def restorejobs(page = 1, limit = 100)
45
43
  if @restorejobs.empty?
46
44
  @client.get('/groups/' + group.id + '/clusters/' + @id + '/restoreJobs?pageNum=' + page.to_s + '&itemsPerPage=' + limit.to_s).each do |job|
47
-
48
45
  job['clusterId'] = @id
49
46
  job['groupId'] = group.id
50
47
 
51
48
  j = MMS::Resource::RestoreJob.new
52
- j.set_client(@client)
53
- j.set_data(job)
49
+ j.client(@client)
50
+ j.data(job)
54
51
 
55
52
  @restorejobs.push j
56
53
  end
@@ -70,13 +67,13 @@ module MMS
70
67
  job_data_list = @client.post('/groups/' + group.id + '/clusters/' + @id + '/restoreJobs', data)
71
68
 
72
69
  if job_data_list.nil?
73
- raise MMS::ResourceError.new("Cannot create job from snapshot `#{self.id}`", self)
70
+ fail MMS::ResourceError.new("Cannot create job from snapshot `#{id}`", self)
74
71
  end
75
72
 
76
73
  job_data_list.map do |job_data|
77
74
  j = MMS::Resource::RestoreJob.new
78
- j.set_client(@client)
79
- j.set_data(job_data)
75
+ j.client(@client)
76
+ j.data(job_data)
80
77
  j
81
78
  end
82
79
  end
@@ -97,8 +94,6 @@ module MMS
97
94
  client.get('/groups/' + group_id + '/clusters/' + id)
98
95
  end
99
96
 
100
- private
101
-
102
97
  def _from_hash(data)
103
98
  @name = data['clusterName']
104
99
  @shard_name = data['shardName']
@@ -110,6 +105,5 @@ module MMS
110
105
  def _to_hash
111
106
  @data
112
107
  end
113
-
114
108
  end
115
109
  end
@@ -1,7 +1,5 @@
1
1
  module MMS
2
-
3
2
  class Resource::Group < Resource
4
-
5
3
  attr_reader :name
6
4
  attr_reader :active_agent_count
7
5
  attr_reader :replicaset_count
@@ -18,12 +16,12 @@ module MMS
18
16
  # @param [Integer] page
19
17
  # @param [Integer] limit
20
18
  # @return [Array<MMS::Resource::Host>]
21
- def hosts(page = 1, limit = 1000)
19
+ def hosts(page = 1, limit = 100)
22
20
  host_list = []
23
21
  @client.get('/groups/' + @id + '/hosts?pageNum=' + page.to_s + '&itemsPerPage=' + limit.to_s).each do |host|
24
22
  h = MMS::Resource::Host.new
25
- h.set_client(@client)
26
- h.set_data(host)
23
+ h.client(@client)
24
+ h.data(host)
27
25
 
28
26
  host_list.push h
29
27
  end
@@ -34,12 +32,12 @@ module MMS
34
32
  # @param [Integer] limit
35
33
  # @param [String] status
36
34
  # @return [Array<MMS::Resource::Alert>]
37
- def alerts(page = 1, limit = 1000, status = 'OPEN')
35
+ def alerts(page = 1, limit = 100, status = 'OPEN')
38
36
  alert_list = []
39
37
  @client.get('/groups/' + @id + '/alerts?status=' + status + '&pageNum=' + page.to_s + '&itemsPerPage=' + limit.to_s).each do |alert|
40
38
  a = MMS::Resource::Alert.new
41
- a.set_client(@client)
42
- a.set_data(alert)
39
+ a.client(@client)
40
+ a.data(alert)
43
41
 
44
42
  alert_list.push a
45
43
  end
@@ -55,12 +53,12 @@ module MMS
55
53
  # @param [Integer] page
56
54
  # @param [Integer] limit
57
55
  # @return [Array<MMS::Resource::Cluster>]
58
- def clusters(page = 1, limit = 1000)
56
+ def clusters(page = 1, limit = 100)
59
57
  if @clusters.empty?
60
58
  @client.get('/groups/' + @id + '/clusters?pageNum=' + page.to_s + '&itemsPerPage=' + limit.to_s).each do |cluster|
61
59
  c = MMS::Resource::Cluster.new
62
- c.set_client(@client)
63
- c.set_data(cluster)
60
+ c.client(@client)
61
+ c.data(cluster)
64
62
 
65
63
  @clusters.push c
66
64
  end
@@ -78,8 +76,8 @@ module MMS
78
76
  if @backup_configs.empty?
79
77
  @client.get('/groups/' + @id + '/backupConfigs').each do |backup_config|
80
78
  bc = MMS::Resource::BackupConfig.new
81
- bc.set_client(@client)
82
- bc.set_data(backup_config)
79
+ bc.client(@client)
80
+ bc.data(backup_config)
83
81
 
84
82
  @backup_configs.push bc
85
83
  end
@@ -95,7 +93,7 @@ module MMS
95
93
  begin
96
94
  snapshot = cluster.snapshot(id)
97
95
  break unless snapshot.nil?
98
- rescue MMS::ApiError => e
96
+ rescue MMS::ApiError => _e
99
97
  # Snapshot is not available on this cluster. Skip it!
100
98
  end
101
99
  end
@@ -104,7 +102,7 @@ module MMS
104
102
  begin
105
103
  snapshot = host.snapshot(id)
106
104
  break unless snapshot.nil?
107
- rescue MMS::ApiError => e
105
+ rescue MMS::ApiError => _e
108
106
  # Snapshot is not available on this host. Skip it!
109
107
  end
110
108
  end