Skip to content

Commit 095e94c

Browse files
committed
Add JSON structured logging
[Ticket: CATDE-4664]
1 parent 97d4aca commit 095e94c

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

app/cloud_status_alerter.rb

+31-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
require 'json'
55
require 'logger'
6+
require 'ons-json-logger'
67
require 'rest-client'
78
require 'google/cloud/firestore'
89
require 'google/cloud/pubsub'
@@ -13,21 +14,32 @@ class CloudStatusAlerter
1314
FIRESTORE_COLLECTION = 'cloud-status-alerter-updates'
1415
THREE_SECONDS = 3
1516

17+
ERROR_LOGGER = Logger.new($stderr)
18+
LOGGER = Logger.new($stdout)
19+
JSON_LOGGER = JSONLogger.new(application: 'cloud-status-alerter', environment: 'development')
20+
1621
def self.providers
1722
@providers ||= []
1823
end
1924

2025
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+
2130
providers << instance
2231
end
2332

2433
def initialize
25-
@logger = Logger.new($stdout)
2634
initialize_firestore_client
2735
load_providers
2836
end
2937

3038
def load_providers
39+
LOGGER.info(JSON_LOGGER.log(level: 'INFO',
40+
message: "Loading providers",
41+
module_name: "cloud_status_alerter"))
42+
3143
Dir['./providers/*.rb'].each do |file|
3244
require_relative file
3345
klass = self.class.const_get(File.basename(file).gsub('.rb', '').split('_').map(&:capitalize).join).to_s
@@ -38,6 +50,11 @@ def load_providers
3850
def run
3951
self.class.providers.each do |provider|
4052
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+
4158
next if update.nil?
4259

4360
post_slack_message(provider.icon, provider.name, update) unless in_firestore?(provider, update)
@@ -96,9 +113,20 @@ def post_slack_message(icon, username, update)
96113

97114
begin
98115
sleep THREE_SECONDS # Avoid Slack's rate limits.
116+
99117
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"))
102130
end
103131

104132
# Stop the async_publisher to send all queued messages immediately.

0 commit comments

Comments
 (0)