Audit details * Audit logs and broadcasts accept `details` whose values are included as log tags and MRSK_* env vars passed to the broadcast command * Commands may return execution options to the CLI in their args list * Introduce `mrsk broadcast` helper for sending audit broadcasts * Report UTC time, not local time, in audit logs. Standardize on ISO 8601 format
64 lines
1.2 KiB
Ruby
64 lines
1.2 KiB
Ruby
require "active_support/duration"
|
|
require "time"
|
|
|
|
class Mrsk::Commands::Lock < Mrsk::Commands::Base
|
|
def acquire(message, version)
|
|
combine \
|
|
[:mkdir, lock_dir],
|
|
write_lock_details(message, version)
|
|
end
|
|
|
|
def release
|
|
combine \
|
|
[:rm, lock_details_file],
|
|
[:rm, "-r", lock_dir]
|
|
end
|
|
|
|
def status
|
|
combine \
|
|
stat_lock_dir,
|
|
read_lock_details
|
|
end
|
|
|
|
private
|
|
def write_lock_details(message, version)
|
|
write \
|
|
[:echo, "\"#{Base64.encode64(lock_details(message, version))}\""],
|
|
lock_details_file
|
|
end
|
|
|
|
def read_lock_details
|
|
pipe \
|
|
[:cat, lock_details_file],
|
|
[:base64, "-d"]
|
|
end
|
|
|
|
def stat_lock_dir
|
|
write \
|
|
[:stat, lock_dir],
|
|
"/dev/null"
|
|
end
|
|
|
|
def lock_dir
|
|
:mrsk_lock
|
|
end
|
|
|
|
def lock_details_file
|
|
[lock_dir, :details].join("/")
|
|
end
|
|
|
|
def lock_details(message, version)
|
|
<<~DETAILS.strip
|
|
Locked by: #{locked_by} at #{Time.now.utc.iso8601}
|
|
Version: #{version}
|
|
Message: #{message}
|
|
DETAILS
|
|
end
|
|
|
|
def locked_by
|
|
`git config user.name`.strip
|
|
rescue Errno::ENOENT
|
|
"Unknown"
|
|
end
|
|
end
|