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.
75 lines
1.4 KiB
Ruby
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
|