#!/bin/bash
meta_url='http://169.254.169.254'
AWS_REGION=$(curl --silent $meta_url/latest/dynamic/instance-identity/document | jq -r .region)
INSTANCE_ID=$(curl --silent $meta_url/latest/meta-data/instance-id)
ASG_NAME=$(aws autoscaling describe-auto-scaling-instances \
--instance-ids $INSTANCE_ID \
--region $AWS_REGION \
| jq -r '.[] | .[] | .AutoScalingGroupName')
# modified: jibri exposes metrics on 2222, tested on a docker container
JIBRI_STATUS=$(curl --silent "http://localhost:2222/jibri/api/v1.0/health"| jq -j '.status.busyStatus')
JIBRI_HEALTH=$(curl --silent "http://localhost:2222/jibri/api/v1.0/health"| jq -j '.status.health.healthStatus')
## set/unset instance protection flag for asg
## args: no-protected-from-scale-in, protected-from-scale-in
protect_instance(){
protection_flag=$1
aws autoscaling set-instance-protection \
--instance-ids $INSTANCE_ID \
--auto-scaling-group-name $ASG_NAME \
--${protection_flag} \
--region $AWS_REGION
}
## report custom metric to cloudwatch
## args: 0|1; 0-BUSY, 1-IDLE
report_to_coudwatch(){
CLOUDWATCH_METRIC_NAME="jibri_available"
aws cloudwatch put-metric-data \
--metric-name $CLOUDWATCH_METRIC_NAME \
--dimensions app="jibri" \
--namespace "Custom" \
--value $1 \
--region $AWS_REGION
}
function check_health(){
# if jibri is unhealthy
if [ "$JIBRI_HEALTH" = "UNHEALTHY" ]
then
logger "shutdown_server, jibri is unhealthy, might be dead, recycing server"
# systemctl shutdown
exit 1;
fi
}
function main(){
# check state
if [ "$JIBRI_STATUS" = "IDLE" ]
then
logger "reporting jibri is idle"
report_to_coudwatch 1
protect_instance no-protected-from-scale-in
fi
if [ "$JIBRI_STATUS" = "BUSY" ]
then
logger "reporting jibri is BUSY"
report_to_coudwatch 0
protect_instance protected-from-scale-in
fi
}
check_health
main
view raw jibri_cron.sh hosted with ❤ by GitHub