40 lines
1.1 KiB
Ruby
40 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class SystemdNotifier
|
|
require_relative 'method_executor'
|
|
public
|
|
|
|
@notify_socket = ENV["NOTIFY_SOCKET"]
|
|
@watchdog_usec = (ENV["WATCHDOG_USEC"] || '0').to_i
|
|
|
|
unless @notify_socket && File.socket?(@notify_socket)
|
|
MethodExecutor.record("error", "heartbeat", "NOTIFY_SOCKET is not set or is not a socket, am I a service?")
|
|
@enable_heartbeat = false
|
|
else
|
|
MethodExecutor.record("debug", "heartbeat", "Found NOTIFY_SOCKET, enabling heartbeat")
|
|
@enable_heartbeat = true
|
|
@socket = UNIXSocket.new(@notify_socket)
|
|
MethodExecutor.record("debug", "heartbeat", "Heartbeat socket opened")
|
|
end
|
|
|
|
def enabled?
|
|
@enable_heartbeat
|
|
end
|
|
|
|
def notify_heartbeat(message)
|
|
return unless @enable_heartbeat
|
|
|
|
begin
|
|
@socket.send(message, 0)
|
|
MethodExecutor.record("debug", "heartbeat", "Heartbeat sent: #{message}")
|
|
rescue => e
|
|
MethodExecutor.error("heartbeat", "Failed to send heartbeat: #{e}")
|
|
@enable_heartbeat = false
|
|
end
|
|
end
|
|
|
|
def self.notify(message)
|
|
MethodExecutor.record("info", "systemd", message)
|
|
end
|
|
end
|