Compare commits

..

5 Commits

Author SHA1 Message Date
David Heinemeier Hansson
e37e5f7d09 Bump version for 0.7.2 2023-02-18 18:23:28 +01:00
David Heinemeier Hansson
7f1191bf59 Change broadcast cmd to just take an argument instead of STDIN
Simpler
2023-02-18 18:22:46 +01:00
David Heinemeier Hansson
0c03216fdf Bump version for 0.7.1 2023-02-18 16:33:28 +01:00
David Heinemeier Hansson
1973f55c58 Don't include recorded_at with broadcast line
Receiving end will already add that
2023-02-18 16:33:12 +01:00
David Heinemeier Hansson
0a51cd0899 Update for healthcheck config 2023-02-18 16:28:31 +01:00
6 changed files with 17 additions and 20 deletions

View File

@@ -1,7 +1,7 @@
PATH PATH
remote: . remote: .
specs: specs:
mrsk (0.7.0) mrsk (0.7.2)
activesupport (>= 7.0) activesupport (>= 7.0)
dotenv (~> 2.8) dotenv (~> 2.8)
sshkit (~> 1.21) sshkit (~> 1.21)

View File

@@ -348,7 +348,7 @@ If you need separate env variables for different destinations, you can set them
### Using audit broadcasts ### Using audit broadcasts
If you'd like to broadcast audits of deploys, rollbacks, etc to a chatroom or elsewhere, you can configure the `audit_broadcast_cmd` setting with the path to a bin file that reads the audit line from STDIN, and then does whatever with it: If you'd like to broadcast audits of deploys, rollbacks, etc to a chatroom or elsewhere, you can configure the `audit_broadcast_cmd` setting with the path to a bin file that will be passed the audit line as the first argument:
```yaml ```yaml
audit_broadcast_cmd: audit_broadcast_cmd:
@@ -359,14 +359,13 @@ The broadcast command could look something like:
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
read curl -q -d content="[My App] ${1}" https://3.basecamp.com/XXXXX/integrations/XXXXX/buckets/XXXXX/chats/XXXXX/lines
curl -q -d content="[My app] ${REPLY}" https://3.basecamp.com/XXXXX/integrations/XXXXX/buckets/XXXXX/chats/XXXXX/lines
``` ```
That'll post a line like follows to a preconfigured chatbot in Basecamp: That'll post a line like follows to a preconfigured chatbot in Basecamp:
``` ```
[My App] [2023-02-18 11:29:52] [dhh] Rolled back to version d264c4e92470ad1bd18590f04466787262f605de [My App] [dhh] Rolled back to version d264c4e92470ad1bd18590f04466787262f605de
``` ```
### Using custom healthcheck path or port ### Using custom healthcheck path or port

View File

@@ -4,16 +4,14 @@ class Mrsk::Commands::Auditor < Mrsk::Commands::Base
# Runs remotely # Runs remotely
def record(line) def record(line)
append \ append \
[ :echo, tagged_line(line) ], [ :echo, tagged_record_line(line) ],
audit_log_file audit_log_file
end end
# Runs locally # Runs locally
def broadcast(line) def broadcast(line)
if broadcast_cmd = config.audit_broadcast_cmd if broadcast_cmd = config.audit_broadcast_cmd
pipe \ [ broadcast_cmd, tagged_broadcast_line(line) ]
[ :echo, tagged_line(line) ],
broadcast_cmd
end end
end end
@@ -26,19 +24,19 @@ class Mrsk::Commands::Auditor < Mrsk::Commands::Base
"mrsk-#{config.service}-audit.log" "mrsk-#{config.service}-audit.log"
end end
def tagged_line(line) def tagged_record_line(line)
"'#{tags} #{line}'" "'#{recorded_at_tag} #{performer_tag} #{line}'"
end end
def tags def tagged_broadcast_line(line)
"[#{recorded_at}] [#{performer}]" "'#{performer_tag} #{line}'"
end end
def performer def performer_tag
@performer ||= `whoami`.strip "[#{`whoami`.strip}]"
end end
def recorded_at def recorded_at_tag
Time.now.to_fs(:db) "[#{Time.now.to_fs(:db)}]"
end end
end end

View File

@@ -1,3 +1,3 @@
module Mrsk module Mrsk
VERSION = "0.7.0" VERSION = "0.7.2"
end end

View File

@@ -16,7 +16,7 @@ class CommandsAuditorTest < ActiveSupport::TestCase
test "broadcast" do test "broadcast" do
assert_match \ assert_match \
/echo '.* app removed container' \| bin\/audit_broadcast/, /bin\/audit_broadcast '\[.*\] app removed container'/,
new_command.broadcast("app removed container").join(" ") new_command.broadcast("app removed container").join(" ")
end end

View File

@@ -181,6 +181,6 @@ class ConfigurationTest < ActiveSupport::TestCase
end end
test "to_h" do test "to_h" do
assert_equal({ :roles=>["web"], :hosts=>["1.1.1.1", "1.1.1.2"], :primary_host=>"1.1.1.1", :version=>"missing", :repository=>"dhh/app", :absolute_image=>"dhh/app:missing", :service_with_version=>"app-missing", :env_args=>["-e", "REDIS_URL=redis://x/y"], :ssh_options=>{:user=>"root", :auth_methods=>["publickey"]}, :volume_args=>["--volume", "/local/path:/container/path"] }, @config.to_h) assert_equal({ :roles=>["web"], :hosts=>["1.1.1.1", "1.1.1.2"], :primary_host=>"1.1.1.1", :version=>"missing", :repository=>"dhh/app", :absolute_image=>"dhh/app:missing", :service_with_version=>"app-missing", :env_args=>["-e", "REDIS_URL=redis://x/y"], :ssh_options=>{:user=>"root", :auth_methods=>["publickey"]}, :volume_args=>["--volume", "/local/path:/container/path"], :healthcheck=>{"path"=>"/up", "port"=>3000 }}, @config.to_h)
end end
end end