3
3
4
4
require 'json'
5
5
require 'logger'
6
+ require 'ons-json-logger'
6
7
require 'rest-client'
7
8
require 'google/cloud/firestore'
8
9
require 'google/cloud/pubsub'
@@ -13,21 +14,32 @@ class CloudStatusAlerter
13
14
FIRESTORE_COLLECTION = 'cloud-status-alerter-updates'
14
15
THREE_SECONDS = 3
15
16
17
+ ERROR_LOGGER = Logger . new ( $stderr)
18
+ LOGGER = Logger . new ( $stdout)
19
+ JSON_LOGGER = JSONLogger . new ( application : 'cloud-status-alerter' , environment : 'development' )
20
+
16
21
def self . providers
17
22
@providers ||= [ ]
18
23
end
19
24
20
25
def self . register_provider ( instance )
26
+ LOGGER . info ( JSON_LOGGER . log ( level : 'INFO' ,
27
+ message : "Registering provider #{ instance . name } " ,
28
+ module_name : "cloud_status_alerter" ) )
29
+
21
30
providers << instance
22
31
end
23
32
24
33
def initialize
25
- @logger = Logger . new ( $stdout)
26
34
initialize_firestore_client
27
35
load_providers
28
36
end
29
37
30
38
def load_providers
39
+ LOGGER . info ( JSON_LOGGER . log ( level : 'INFO' ,
40
+ message : "Loading providers" ,
41
+ module_name : "cloud_status_alerter" ) )
42
+
31
43
Dir [ './providers/*.rb' ] . each do |file |
32
44
require_relative file
33
45
klass = self . class . const_get ( File . basename ( file ) . gsub ( '.rb' , '' ) . split ( '_' ) . map ( &:capitalize ) . join ) . to_s
@@ -38,6 +50,11 @@ def load_providers
38
50
def run
39
51
self . class . providers . each do |provider |
40
52
update = provider . latest_update
53
+
54
+ LOGGER . info ( JSON_LOGGER . log ( level : 'INFO' ,
55
+ message : "#{ provider . name } has update #{ update } " ,
56
+ module_name : "cloud_status_alerter" ) )
57
+
41
58
next if update . nil?
42
59
43
60
post_slack_message ( provider . icon , provider . name , update ) unless in_firestore? ( provider , update )
@@ -96,9 +113,20 @@ def post_slack_message(icon, username, update)
96
113
97
114
begin
98
115
sleep THREE_SECONDS # Avoid Slack's rate limits.
116
+
99
117
topic . publish_async payload do |result |
100
- raise "Failed to publish the message: #{ result . error } " unless result . succeeded?
101
- @logger . info ( "#{ username } message published successfully: #{ result . data } " )
118
+ unless result . succeeded?
119
+ ERROR_LOGGER . error ( JSON_LOGGER . log ( level : 'ERROR' ,
120
+ message : "#{ username } unable to publish message to Slack: #{ result . error } " ,
121
+ module_name : "cloud_status_alerter" ) )
122
+
123
+ raise "Failed to publish the message: #{ result . error } " unless result . succeeded?
124
+ end
125
+
126
+
127
+ LOGGER . info ( JSON_LOGGER . log ( level : 'INFO' ,
128
+ message : "#{ username } message published to Slack successfully: #{ result . data } " ,
129
+ module_name : "cloud_status_alerter" ) )
102
130
end
103
131
104
132
# Stop the async_publisher to send all queued messages immediately.
0 commit comments