16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/forest_admin_agent/services/sse_cache_invalidation.rb', line 16
def self.run
uri = "#{Facades::Container.config_from_cache[:forest_server_url]}/liana/v4/subscribe-to-events"
= {
'forest-secret-key' => Facades::Container.config_from_cache[:env_secret],
'Accept' => 'text/event-stream'
}
begin
SSE::Client.new(uri, headers: ) do |client|
client.on_event do |event|
next if event.type == :heartbeat
MESSAGE_CACHE_KEYS[event.type]&.each do |cache_key|
Permissions.invalidate_cache(cache_key)
ForestAdminAgent::Facades::Container.logger.log(
'Info',
"invalidate cache #{MESSAGE_CACHE_KEYS[event.type]} for event #{event.type}"
)
end
ForestAdminAgent::Facades::Container.logger.log(
'Info',
"SSECacheInvalidation: unhandled message from server: #{event.type}"
)
end
end
rescue StandardError => e
ForestAdminAgent::Facades::Container.logger.log(
'Debug',
'SSE connection to forestadmin server'
)
ForestAdminAgent::Facades::Container.logger.log(
'Warning',
'SSE connection to forestadmin server closed unexpectedly, retrying.'
)
raise ServiceUnavailableError.new(
'Failed to reach SSE data from ForestAdmin server',
details: { error: e.message },
cause: e
)
end
end
|