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_MESSAGE" => 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
|