rscalr 0.0.8 → 0.0.10

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.
@@ -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