# 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