Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions jobs/loggr-system-metrics-agent/monit
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
<% if p("enabled") %>
<% if p("use_bpm") %>
check process loggr-system-metrics-agent
with pidfile /var/vcap/sys/run/bpm/loggr-system-metrics-agent/loggr-system-metrics-agent.pid
start program "/var/vcap/jobs/bpm/bin/bpm start loggr-system-metrics-agent"
stop program "/var/vcap/jobs/bpm/bin/bpm stop loggr-system-metrics-agent"
group vcap
<% else %>
check process system-metrics-agent
with pidfile /var/vcap/sys/run/system-metrics-agent/system-metrics-agent.pid
start program "/var/vcap/jobs/loggr-system-metrics-agent/bin/ctl start"
stop program "/var/vcap/jobs/loggr-system-metrics-agent/bin/ctl stop"
group vcap
<% end %>
<% end %>
8 changes: 8 additions & 0 deletions jobs/loggr-system-metrics-agent/spec
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ name: loggr-system-metrics-agent

templates:
bpm.yml.erb: config/bpm.yml
ctl.erb: bin/ctl
system_metrics_agent_ca.crt.erb: config/certs/system_metrics_agent_ca.crt
system_metrics_agent.crt.erb: config/certs/system_metrics_agent.crt
system_metrics_agent.key.erb: config/certs/system_metrics_agent.key
Expand Down Expand Up @@ -40,3 +41,10 @@ properties:
description: "TLS certificate for system metrics agent signed by the loggregator CA"
key:
description: "TLS private key for system metrics agent signed by the loggregator CA"

use_bpm:
description: >
When true, run this job under BPM. BPM is required on Resolute Raccoon
stemcells; support for running without BPM will be removed in a future
version.
default: false

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if using a default of false is a good idea here. Especially since you mention non-bpm will be dropped in a future release.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice. You've thought about not breaking the current behavior <3

68 changes: 68 additions & 0 deletions jobs/loggr-system-metrics-agent/templates/ctl.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/bash -e
<%
deployment = spec.deployment
job = spec.job.name
index = spec.id || spec.index.to_s
ip = spec.ip
%>

RUN_DIR=/var/vcap/sys/run/system-metrics-agent
LOG_DIR=/var/vcap/sys/log/system-metrics-agent
PIDFILE=$RUN_DIR/system-metrics-agent.pid

mkdir -p $RUN_DIR
mkdir -p $LOG_DIR

case $1 in

start)
set +e
killall -15 system-metrics-agent
killall -9 system-metrics-agent
killall -2 system-metrics-agent
killall -3 system-metrics-agent
set -e

exec >>$LOG_DIR/system-metrics-agent.stdout.log \
2>>$LOG_DIR/system-metrics-agent.stderr.log

chown -R vcap:vcap $LOG_DIR

SAMPLE_INTERVAL=<%= p('sample_interval') %> \
METRIC_PORT=<%= p('metrics_port') %> \
DEBUG_PORT=<%= p('debug_port') %> \
DEPLOYMENT=<%= deployment %> \
JOB=<%= job %> \
INDEX=<%= index %> \
IP=<%= ip %> \
LIMITED_METRICS=<%= p('bosh_metrics_forwarder_metrics_only') %> \
CA_CERT_PATH="/var/vcap/jobs/loggr-system-metrics-agent/config/certs/system_metrics_agent_ca.crt" \
CERT_PATH="/var/vcap/jobs/loggr-system-metrics-agent/config/certs/system_metrics_agent.crt" \
KEY_PATH="/var/vcap/jobs/loggr-system-metrics-agent/config/certs/system_metrics_agent.key" \
chpst -u vcap:vcap /var/vcap/packages/system-metrics-agent/system-metrics-agent &

echo $! > $PIDFILE

;;

stop)
echo "$(date "+%Y/%m/%d %T") attempting to stop system-metrics-agent" >> $LOG_DIR/system-metrics-agent.stderr.log
exec 2>>$LOG_DIR/system-metrics-agent.stderr.log

kill "$(cat $PIDFILE)"
set +e
echo "$(date "+%Y/%m/%d %T") additional killall for system-metrics-agent: errors expected" >> $LOG_DIR/system-metrics-agent.stderr.log
killall -15 system-metrics-agent
killall -9 system-metrics-agent
killall -2 system-metrics-agent
killall -3 system-metrics-agent
set -e

;;

*)
echo "Usage: ctl {start|stop}"

;;

esac
38 changes: 38 additions & 0 deletions spec/jobs/loggr_system_metrics_agent_spec.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
require 'bosh/template/test'
require 'yaml'

def render_system_metrics_monit(properties = {})
job_dir = File.join(File.dirname(__FILE__), '../../jobs/loggr-system-metrics-agent')
spec = YAML.safe_load(File.read(File.join(job_dir, 'spec')))
Bosh::Template::Test::Template.new(spec, File.join(job_dir, 'monit')).render(properties)
end

describe 'loggr-system-metrics-agent' do
let(:release) { Bosh::Template::Test::ReleaseDir.new(File.join(File.dirname(__FILE__), '../..')) }
let(:job) { release.job('loggr-system-metrics-agent') }
Expand Down Expand Up @@ -34,4 +40,36 @@
expect(process['env']['SAMPLE_INTERVAL']).to eq('15s')
end
end

describe 'monit' do
context 'when enabled is true (default) and use_bpm is false (default)' do
let(:rendered) { render_system_metrics_monit({}) }

it 'uses the ctl script pidfile and start/stop programs' do
expect(rendered).to include('with pidfile /var/vcap/sys/run/system-metrics-agent/system-metrics-agent.pid')
expect(rendered).to include('start program "/var/vcap/jobs/loggr-system-metrics-agent/bin/ctl start"')
expect(rendered).to include('stop program "/var/vcap/jobs/loggr-system-metrics-agent/bin/ctl stop"')
expect(rendered).not_to include('/var/vcap/jobs/bpm/bin/bpm')
end
end

context 'when enabled is true and use_bpm is true' do
let(:rendered) { render_system_metrics_monit({'use_bpm' => true}) }

it 'uses the bpm pidfile and start/stop programs' do
expect(rendered).to include('with pidfile /var/vcap/sys/run/bpm/loggr-system-metrics-agent/loggr-system-metrics-agent.pid')
expect(rendered).to include('start program "/var/vcap/jobs/bpm/bin/bpm start loggr-system-metrics-agent"')
expect(rendered).to include('stop program "/var/vcap/jobs/bpm/bin/bpm stop loggr-system-metrics-agent"')
expect(rendered).not_to include('/bin/ctl')
end
end

context 'when enabled is false' do
let(:rendered) { render_system_metrics_monit({'enabled' => false}) }

it 'renders an empty monit file' do
expect(rendered.strip).to be_empty
end
end
end
end
Loading