rscalr 0.0.8 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,10 @@
1
1
  require 'rscalr/api/scalr'
2
2
  require 'rscalr/model/dashboard'
3
+ require 'rscalr/model/environment'
3
4
  require 'rscalr/model/farm'
4
5
  require 'rscalr/model/farm_role'
6
+ require 'rscalr/model/log'
7
+ require 'rscalr/model/log_list'
5
8
  require 'rscalr/model/role'
6
9
  require 'rscalr/model/script'
7
10
  require 'rscalr/model/server'
@@ -357,5 +357,10 @@ class ScalrResponse < REXML::Document
357
357
  root.elements['Message'].text
358
358
  end
359
359
  end
360
+
361
+ # Convenience method to output a repsonse to a stream in a human readable format
362
+ def pretty_print(dest=$stdout)
363
+ write(dest, 1)
364
+ end
360
365
  end
361
366
 
@@ -1,10 +1,8 @@
1
- require 'rscalr/model/farm'
2
- require 'rscalr/model/script'
3
-
4
1
  class Dashboard
5
-
2
+
6
3
  def initialize client
7
4
  @client = client
5
+ @env_id = @client.env_id
8
6
  end
9
7
 
10
8
  def get_farm(name)
@@ -15,7 +13,7 @@ class Dashboard
15
13
  end
16
14
 
17
15
  def load_farms
18
- @farms = {} if @farms == nil
16
+ @farms = {}
19
17
 
20
18
  scalr_response = @client.farms_list
21
19
  scalr_response.root.each_element('FarmSet/Item') { |row|
@@ -66,4 +64,31 @@ class Dashboard
66
64
 
67
65
  @scripts
68
66
  end
67
+
68
+ def get_environment(name)
69
+ if @environments.nil?
70
+ load_environments
71
+ end
72
+ @environments[name]
73
+ end
74
+
75
+ def load_environments
76
+ @environments = {}
77
+
78
+ scalr_response = @client.environments_list
79
+ scalr_response.root.each_element('EnvironmentSet/Item') { |row|
80
+ environment = Environment.new
81
+
82
+ row.each_element { |prop|
83
+ if "ID" == prop.name
84
+ environment.id = prop.text
85
+ elsif "Name" == prop.name
86
+ environment.name = prop.text
87
+ end
88
+ }
89
+ @environments[environment.name] = environment
90
+ }
91
+
92
+ @environments
93
+ end
69
94
  end
@@ -0,0 +1,3 @@
1
+ class Environment
2
+ attr_accessor :id, :name
3
+ end
@@ -57,6 +57,43 @@ class Farm
57
57
  @farm_roles
58
58
  end
59
59
 
60
+ # Loads a Loglist of Log entries for the farm, given the specified parameters
61
+ def load_logs(server_id=nil, start=nil, limit=nil)
62
+ scalr_response = @client.logs_list(@id, server_id, start, limit)
63
+ loglist = LogList.new
64
+
65
+ scalr_response.root.each_element do |element|
66
+ if "TotalRecords" == element.name
67
+ loglist.total_records = element.text.to_i
68
+ elsif "StartFrom" == element.name
69
+ loglist.start = element.text.to_i
70
+ elsif "RecordsLimit" == element.name
71
+ loglist.limit = element.text.to_i
72
+ elsif "LogSet" == element.name
73
+ element.each_element do |item|
74
+ log = Log.new
75
+
76
+ item.each_element do |prop|
77
+ if "ServerID" == prop.name
78
+ log.server_id = prop.text
79
+ elsif "Message" == prop.name
80
+ log.message = prop.text
81
+ elsif "Severity" == prop.name
82
+ log.severity = prop.text.to_i
83
+ elsif "Timestamp" == prop.name
84
+ log.timestamp = prop.text.to_i
85
+ elsif "Source" == prop.name
86
+ server.source = prop.text
87
+ end
88
+ end
89
+ loglist << log
90
+ end
91
+ end
92
+ end
93
+
94
+ loglist
95
+ end
96
+
60
97
  def to_s
61
98
  "{ type: \"farm\", id: #{@id}, name: \"#{@name}\", status: #{@status} }"
62
99
  end
@@ -0,0 +1,7 @@
1
+ class Log
2
+ attr_accessor :server_id, :message, :severity, :timestamp, :source
3
+
4
+ def to_s
5
+ "{ type: \"log\", server_id: \"#{@server_id}\", message: \"#{@message}\", severity: #{@severity}, timestamp: #{@timestamp}, source: \"#{@source}\" }"
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ class LogList
2
+ attr_accessor :total_records, :start, :limit
3
+ attr_reader :logs
4
+
5
+ def initialize
6
+ @logs = []
7
+ end
8
+
9
+ def <<(log)
10
+ @logs << log if log.is_a? Log
11
+ end
12
+
13
+ def to_s
14
+ "{ type: \"loglist\", total_records: #{@total_records}, start: \"#{@message}\", limit: #{@severity}, logs: [ #{@logs.each do |log| log.to_s + ',' end} ] }"
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module Rscalr
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -0,0 +1,20 @@
1
+ require 'rscalr'
2
+ require 'test/unit'
3
+
4
+ class TestSig < Test::Unit::TestCase
5
+
6
+ def test_set_and_get_env
7
+ scalr = Scalr.new({ :key_id => '123', :key_secret => '123abc' })
8
+
9
+ assert_equal(nil, scalr.env_id, "env_id should default to nil if not specified")
10
+
11
+ scalr = Scalr.new({ :key_id => '123', :key_secret => '123abc', :env_id => 456 })
12
+
13
+ assert_equal(456, scalr.env_id, "env_id not set correctly from config in ctor")
14
+
15
+ scalr.env_id = 789
16
+
17
+ assert_equal(789, scalr.env_id, "env_id not set correctly from setter")
18
+ end
19
+
20
+ end
@@ -0,0 +1,24 @@
1
+ require 'rscalr'
2
+ require 'test/unit'
3
+
4
+ class TestObjEnvironments < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @scalr = Scalr.new({
8
+ :key_id => ENV['SCALR_TEST_API_KEY'],
9
+ :key_secret => ENV['SCALR_TEST_API_SECRET'],
10
+ :env_id => ENV['SCALR_TEST_ENV_ID']
11
+ })
12
+
13
+ @dashboard = Dashboard.new @scalr
14
+ end
15
+
16
+ def test_list_launch_details_terminate
17
+ environment = @dashboard.get_environment(ENV['SCALR_TEST_ENV_NAME'])
18
+
19
+ assert_not_nil(environment, "Test environment not found by name")
20
+ assert_equal(ENV['SCALR_TEST_ENV_ID'], environment.id)
21
+ assert_equal(ENV['SCALR_TEST_ENV_NAME'], environment.name)
22
+ end
23
+
24
+ end
@@ -0,0 +1,30 @@
1
+ require 'rscalr'
2
+ require 'test/unit'
3
+
4
+ class TestObjLogs < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @scalr = Scalr.new({
8
+ :key_id => ENV['SCALR_TEST_API_KEY'],
9
+ :key_secret => ENV['SCALR_TEST_API_SECRET'],
10
+ :env_id => ENV['SCALR_TEST_ENV_ID']
11
+ })
12
+
13
+ @dashboard = Dashboard.new @scalr
14
+
15
+ @farm_test1_name = 'test1'
16
+ end
17
+
18
+ def test_list_launch_details_terminate
19
+ farm = @dashboard.get_farm(@farm_test1_name)
20
+
21
+ assert_not_nil(farm, "Test farm not found by name")
22
+
23
+ loglist = farm.load_logs
24
+
25
+ assert_not_nil(loglist, "Log list could not be loaded")
26
+ assert_equal(0, loglist.total_records, "Test farm 1 should not have any logs associated with it")
27
+
28
+ end
29
+
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rscalr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-05 00:00:00.000000000 -08:00
13
- default_executable:
12
+ date: 2013-02-15 00:00:00.000000000 Z
14
13
  dependencies: []
15
14
  description: Rscalr is a Ruby implementation of the Scalr API, written to interface
16
15
  cleanly with Chef and other internal release management tasks.
@@ -25,16 +24,21 @@ files:
25
24
  - lib/rscalr.rb
26
25
  - lib/rscalr/api/scalr.rb
27
26
  - lib/rscalr/model/dashboard.rb
27
+ - lib/rscalr/model/environment.rb
28
28
  - lib/rscalr/model/farm.rb
29
29
  - lib/rscalr/model/farm_role.rb
30
+ - lib/rscalr/model/log.rb
31
+ - lib/rscalr/model/log_list.rb
30
32
  - lib/rscalr/model/role.rb
31
33
  - lib/rscalr/model/script.rb
32
34
  - lib/rscalr/model/server.rb
33
35
  - lib/rscalr/version.rb
34
36
  - rscalr.gemspec
37
+ - test/test_env_id.rb
35
38
  - test/test_sig.rb
36
39
  - test_integration/test_client_farms.rb
37
- has_rdoc: true
40
+ - test_integration/test_obj_environments.rb
41
+ - test_integration/test_obj_logs.rb
38
42
  homepage:
39
43
  licenses: []
40
44
  post_install_message:
@@ -55,10 +59,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
59
  version: '0'
56
60
  requirements: []
57
61
  rubyforge_project:
58
- rubygems_version: 1.6.2
62
+ rubygems_version: 1.8.25
59
63
  signing_key:
60
64
  specification_version: 3
61
65
  summary: Ruby implementation of the Scalr API
62
66
  test_files:
67
+ - test/test_env_id.rb
63
68
  - test/test_sig.rb
64
69
  - test_integration/test_client_farms.rb
70
+ - test_integration/test_obj_environments.rb
71
+ - test_integration/test_obj_logs.rb