Files
kamal/lib/mrsk/commands/auditor.rb
Kevin McConnell 828e56912e Allow customizing audit broadcast with env
When invoking the audit broadcast command, provide a few environment
variables so that people can customize the format of the message if they
want.

We currently provide `MRSK_PERFORMER`, `MRSK_ROLE`, `MRSK_DESTINATION` and
`MRSK_EVENT`.

Also adds the destination to the default message, which we continue to
send as the first argument as before.
2023-04-13 17:54:25 +01:00

75 lines
1.4 KiB
Ruby

require "active_support/core_ext/time/conversions"
class Mrsk::Commands::Auditor < Mrsk::Commands::Base
attr_reader :role
def initialize(config, role: nil)
super(config)
@role = role
end
# Runs remotely
def record(line)
append \
[ :echo, tagged_record_line(line) ],
audit_log_file
end
# Runs locally
def broadcast(line)
if broadcast_cmd = config.audit_broadcast_cmd
[ broadcast_cmd, tagged_broadcast_line(line) ]
end
end
def broadcast_environment(line)
{
"MRSK_PERFORMER" => performer,
"MRSK_ROLE" => role,
"MRSK_DESTINATION" => config.destination,
"MRSK_EVENT" => line
}
end
def reveal
[ :tail, "-n", 50, audit_log_file ]
end
private
def audit_log_file
[ "mrsk", config.service, config.destination, "audit.log" ].compact.join("-")
end
def tagged_record_line(line)
tagged_line recorded_at_tag, performer_tag, role_tag, line
end
def tagged_broadcast_line(line)
tagged_line performer_tag, role_tag, destination_tag, line
end
def tagged_line(*tags_and_line)
"'#{tags_and_line.compact.join(" ")}'"
end
def recorded_at_tag
"[#{Time.now.to_fs(:db)}]"
end
def performer
`whoami`.strip
end
def performer_tag
"[#{performer}]"
end
def role_tag
"[#{role}]" if role
end
def destination_tag
"[#{config.destination}]" if config.destination
end
end