#!/bin/bash
# User customizations
set -e
source_ip='<EC2 instance IP>'
target_ip='<Target IP to monitor latency>'

# Instance metadata
instance_region=$(curl -s "http://169.254.169.254/latest/meta-data/placement/region")
instance_id=$(curl -s "http://169.254.169.254/latest/meta-data/instance-id")

# Gather latency metrics for target
latency_output=`ping -I $source_ip $target_ip -c 5 | tail -n 1`
if [[ `echo $latency_output` == *\/* ]]
then
    latency_avg=`echo $latency_output | cut -d "/" -f5`
else
    latency_avg=0   
fi
aws cloudwatch put-metric-data --metric-name LatencyAverage --namespace EC2-VPN --value $latency_avg --region $instance_region --dimensions InstanceId=$instance_id,Target=$target_ip

# Gather and format BGP data
bgp_route_count=`ip route list | grep -c bgp`
aws cloudwatch put-metric-data --metric-name ReceivedBGPRouteCount --namespace EC2-VPN --value $bgp_route_count --region $instance_region --dimensions InstanceId=$instance_id
bgp_routes=`ip route list proto bgp | grep "/" | cut -d " " -s -f1`
epoch_now_ms=`date +%s%3N`
log_event_body={'"timestamp"':"$epoch_now_ms",'"message":"{''\"aggregate_cidr\"':\\"\"BGP routes received: $bgp_routes\\\"}\"},"

for cidr in $bgp_routes 
do
    epoch_now_ms=`date +%s%3N`
    log_message={'"timestamp"':"$epoch_now_ms",'"message":"{\"bgp_route\":\"'$cidr\\\"\}"\"}"
    log_event_body=`echo "$log_event_body$log_message"","`
done
log_event_body_json="[${log_event_body::-1}]"

echo $log_event_body_json > bgp_json.txt

# Add BGP data to CloudWatch Logs
DescribeLogStreamsOutput=$(aws logs describe-log-streams --log-group-name EC2-VPN-BGPRoutesReceived --log-stream-name-prefix $instance_id --region $instance_region --output text)
SequenceToken=`echo $DescribeLogStreamsOutput | cut -d " " -f9`

if [ -z "$SequenceToken" ]
then
    aws logs put-log-events --log-group-name EC2-VPN-BGPRoutesReceived --log-stream-name $instance_id --log-events file://bgp_json.txt --region $instance_region
else
    aws logs put-log-events --log-group-name EC2-VPN-BGPRoutesReceived --log-stream-name $instance_id --log-events file://bgp_json.txt --sequence-token $SequenceToken --region $instance_region
fi