aws_status 1.0.1

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.
data/lib/AwsStatus.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'httparty'
2
+ require_relative './src/DataCenters'
3
+
4
+ class AwsStatus
5
+ attr_reader :status
6
+
7
+ def initialize(rest_client)
8
+ @status = DataCenters.new(rest_client)
9
+ end
10
+
11
+ def self.create
12
+ AwsStatus.new(RestClient)
13
+ end
14
+ end
15
+
16
+ class RestClient
17
+ def self.get(uri)
18
+ HTTParty.get(uri).to_s
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ require_relative 'ServiceStatusResponse'
2
+
3
+ class DataCenter
4
+ require_relative 'Services'
5
+
6
+ AWS_STATUS_RSS_ROOT = 'http://status.aws.amazon.com/rss'
7
+
8
+ def initialize(rest_client, location)
9
+ @location = location
10
+ @rest_client = rest_client
11
+ end
12
+
13
+ SERVICES.each do |service_name, rss_name|
14
+ define_method service_name do
15
+ status_for rss_name
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def status_for(component)
22
+ feedHtml = @rest_client.get("#{AWS_STATUS_RSS_ROOT}/#{component}-#{@location}.rss")
23
+ ServiceStatusResponse.create(feedHtml)
24
+ end
25
+ end
26
+
@@ -0,0 +1,25 @@
1
+ require_relative 'DataCenter'
2
+
3
+ class DataCenters
4
+ DATA_CENTERS = {
5
+ :eu_west_1 => 'eu-west-1',
6
+ :eu_central_1 => 'eu-central-1',
7
+ :us_east_1 => 'us-east-1',
8
+ :us_west_1 => 'us-west-1',
9
+ :us_west_2 => 'us-west-2',
10
+ :sa_east_1 => 'sa-east-1',
11
+ :ap_northeast_1 => 'ap-northeast-1',
12
+ :ap_southeast_1 => 'ap-southeast-1',
13
+ :ap_southeast_2 => 'ap-southeast-2'
14
+ }
15
+
16
+ def initialize(rest_client)
17
+ @rest_client = rest_client
18
+ end
19
+
20
+ DATA_CENTERS.each do |data_center_name, rss_name|
21
+ define_method data_center_name do
22
+ DataCenter.new(@rest_client, rss_name)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ class OperatingNormallySpecification
2
+ RESOLVED_EVENT_EXPRESSION = /RESOLVED/
3
+
4
+ def self.is_satisified_by?(service_events)
5
+ service_events.empty? || service_events.first[:title] =~ RESOLVED_EVENT_EXPRESSION
6
+ end
7
+ end
@@ -0,0 +1,39 @@
1
+ require 'simple-rss'
2
+ require_relative './OperatingNormallySpecification'
3
+
4
+ class ServiceStatusResponse
5
+ attr_reader :message, :state
6
+
7
+ def initialize(message, state)
8
+ @message = message
9
+ @state = state
10
+ end
11
+
12
+ def self.create(feedHtml)
13
+ return NoServiceStatusResponse.new if feedHtml.nil?
14
+ rssFeed = SimpleRSS.parse(feedHtml)
15
+ if OperatingNormallySpecification.is_satisified_by? rssFeed.items
16
+ ServiceOkayResponse.new
17
+ else
18
+ ServiceErrorResponse.new(rssFeed.items.first[:title])
19
+ end
20
+ end
21
+ end
22
+
23
+ class ServiceOkayResponse < ServiceStatusResponse
24
+ def initialize
25
+ super(message='Service Operating Normally', state=:okay)
26
+ end
27
+ end
28
+
29
+ class ServiceErrorResponse < ServiceStatusResponse
30
+ def initialize(message)
31
+ super(message, state=:error)
32
+ end
33
+ end
34
+
35
+ class NoServiceStatusResponse < ServiceStatusResponse
36
+ def initialize
37
+ super(message='Cannot retrieve service status', state=:warning)
38
+ end
39
+ end
@@ -0,0 +1,30 @@
1
+ SERVICES = {
2
+ :cloudsearch => 'cloudsearch',
3
+ :cloudwatch => 'cloudwatch',
4
+ :dynamodb => 'dynamodb',
5
+ :elastic_compute_cloud => 'ec2',
6
+ :elastic_load_balancer => 'elb',
7
+ :elastic_map_reduce => 'emr',
8
+ :elasticache => 'elasticache',
9
+ :glacier => 'glacier',
10
+ :kinesis => 'kinesis',
11
+ :redshift => 'redshift',
12
+ :relational_database_service => 'rds',
13
+ :simple_email_service => 'ses',
14
+ :simple_queue_service => 'sqs',
15
+ :simple_notification_service => 'sns',
16
+ :simple_storage_service => 's3',
17
+ :simple_workflow_service => 'swf',
18
+ :simpledb => 'simpledb',
19
+ :virtual_private_cloud =>'vpc',
20
+ :auto_scaling => 'autoscaling',
21
+ :cloudformation => 'cloudformation',
22
+ :cloudhsm => 'cloudhsm',
23
+ :cloudtrail => 'cloudtrail',
24
+ :config => 'config',
25
+ :direct_connect => 'directconnect',
26
+ :elastic_beanstalk => 'elasticbeanstalk',
27
+ :identity_and_access => 'iam',
28
+ :key_management_service => 'kms',
29
+ :storage_gateway => 'storagegateway'
30
+ }
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aws_status
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - iainjmitchell
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-05-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httparty
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: simple-rss
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description:
47
+ email: iainjmitchell@gmail.com
48
+ executables: []
49
+ extensions: []
50
+ extra_rdoc_files: []
51
+ files:
52
+ - lib/AwsStatus.rb
53
+ - lib/src/DataCenter.rb
54
+ - lib/src/DataCenters.rb
55
+ - lib/src/OperatingNormallySpecification.rb
56
+ - lib/src/Services.rb
57
+ - lib/src/ServiceStatusResponse.rb
58
+ homepage: https://github.com/iainjmitchell/aws_status
59
+ licenses:
60
+ - MIT
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 1.8.23
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: Retrieve status of aws services
83
+ test_files: []