#!/bin/bash

add_date() {
  echo "$(date) $@"
}

SIG=$1
PID=$2
NETNS=$(ip netns identify ${PID})

if [ "x${NETNS}" == "x" ]; then
  CLI="nsenter --all --preserve-credentials -t 1 podman"
  SIG=9
else
  CLI="nsenter --net=/run/netns/${NETNS} --preserve-credentials -m -t 1 podman"
fi

kill_container() {
  add_date "Stopping container $1 ($2)"
  $CLI stop $2
  delete_container $1 $2
}

signal_container() {
  SIGNAL=$3
  if [ -z "$SIGNAL" ]; then
      SIGNAL="HUP"
  fi
  add_date "Sending signal '$SIGNAL' to $1 ($2)"
  $CLI kill --signal $SIGNAL $2
}

delete_container() {
  add_date "Deleting container $1 ($2)"
  $CLI rm $2 || echo "Deleting container $1 ($2) failed"
}


if [ -f /proc/$PID/cgroup ]; then
  # Get container ID based on process cgroups
  CT_ID=$(awk 'BEGIN {FS=".scope|-"} /\/libpod-/ {if ($(NF-1)) print $(NF-1);exit}' /proc/$PID/cgroup)
  CT_NAME=$($CLI inspect -f '{{.Name}}' $CT_ID)

  case $SIG in
    HUP)
      signal_container $CT_NAME $CT_ID
      ;;
    9)
      kill_container $CT_NAME $CT_ID
      ;;
    15)
      signal_container $CT_NAME $CT_ID 15
      delete_container $CT_NAME $CT_ID
      ;;
    *)
      add_date "Unknown action ${SIG} for ${CT_NAME} ${CT_ID}"
      exit 1
      ;;
  esac

else
  add_date "No such PID: ${PID}"
  exit 1
fi
