Class: EY::InstanceAPIClient::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/ey_instance_api_client/connection.rb

Defined Under Namespace

Classes: AlreadyFinished, InvalidCredentials, NotFound, UnexpectedStatus

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_url, instance_id, token) ⇒ Connection

Returns a new instance of Connection.



4
5
6
7
8
9
10
11
# File 'lib/ey_instance_api_client/connection.rb', line 4

def initialize(base_url, instance_id, token)
  unless base_url.match(/\/$/)
    base_url += '/'
  end
  @base_url = base_url
  @instance_id = instance_id
  @token = token
end

Instance Attribute Details

#base_urlObject (readonly)

Returns the value of attribute base_url.



12
13
14
# File 'lib/ey_instance_api_client/connection.rb', line 12

def base_url
  @base_url
end

Instance Method Details

#api_call(full_url, expects) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/ey_instance_api_client/connection.rb', line 72

def api_call(full_url, expects)
  RestClient::Resource.new(full_url.to_s) do |response, request, raw|
    case response.code
    when 403
      raise InvalidCredentials
    when 404
      raise NotFound
    when 409
      raise AlreadyFinished
    when expects
      JSON.parse(response)
    else
      raise UnexpectedStatus, "request to #{full_url} failed with #{response.code}"
    end
  end
end

#database_url(database_id) ⇒ Object



54
55
56
# File 'lib/ey_instance_api_client/connection.rb', line 54

def database_url(database_id)
  URI.join(@base_url, "databases/#{database_id}/backups").to_s
end

#finish_backup(finished_url) ⇒ Object



58
59
60
61
# File 'lib/ey_instance_api_client/connection.rb', line 58

def finish_backup(finished_url)
  r = api_call(finished_url, 200)
  r.put(params, :accept => "application/json")
end

#get_services(app_name) ⇒ Object



39
40
41
42
# File 'lib/ey_instance_api_client/connection.rb', line 39

def get_services(app_name)
  r = api_call(services_url(app_name), 200)
  r.get(:params => params, :accept => "application/json")
end

#list_backups(database_id) ⇒ Object



27
28
29
30
31
# File 'lib/ey_instance_api_client/connection.rb', line 27

def list_backups(database_id)
  r = api_call(database_url(database_id), 200)
  data = r.get(:params => params, :accept => "application/json")
  data["backups"].collect{ |b| Backup.new(self, b) }
end

#list_snapshotsObject

PUBLIC API:



16
17
18
19
20
# File 'lib/ey_instance_api_client/connection.rb', line 16

def list_snapshots
  r = api_call(snapshots_url, 200)
  data = r.get(:params => params, :accept => "application/json")
  data["snapshots"].collect{ |s| Snapshot.new(s) }
end

#paramsObject



63
64
65
# File 'lib/ey_instance_api_client/connection.rb', line 63

def params
  {:token => @token, :instance_id => @instance_id}
end

#request_snapshotObject



22
23
24
25
# File 'lib/ey_instance_api_client/connection.rb', line 22

def request_snapshot
  r = api_call(snapshots_url, 201)
  r.post(params, :accept => "application/json")
end

#services_url(app_name) ⇒ Object

SORTA-PRIVATE stuff:



46
47
48
# File 'lib/ey_instance_api_client/connection.rb', line 46

def services_url(app_name)
  URI.join(@base_url, "services/app/", app_name).to_s
end

#snapshots_urlObject



50
51
52
# File 'lib/ey_instance_api_client/connection.rb', line 50

def snapshots_url
  URI.join(@base_url, "volumes/all/snapshots").to_s
end

#start_backup(database_id, extension, part_count) ⇒ Object



33
34
35
36
37
# File 'lib/ey_instance_api_client/connection.rb', line 33

def start_backup(database_id, extension, part_count)
  r = api_call(database_url(database_id), 201)
  data = r.post(params.merge(:extension => extension, :part_count => part_count), :accept => "application/json")
  Backup.new(self, data["backup"])
end