#!/bin/bash

# Copyright (C) 2015 NIWA Hideyuki

LIBDIR="/var/lib/fulcon/"

CPUDIR="/sys/fs/cgroup/cpu"
if [ -d $CPUDIR/system.slice/docker.service/docker ]; then
	CPUDIR=$CPUDIR/system.slice/docker.service/docker
	CPUSUFFIX=""
elif [ -d $CPUDIR/docker ]; then
	CPUDIR=$CPUDIR/docker
	CPUSUFFIX=""
else
	CPUDIR=$CPUDIR/system.slice
	CPUSUFFIX="docker-"
fi

if [ $# -ne 2 -a $# -ne 1 ]; then
	echo "usage: cpu CONTAINER_NAME [VALUE]"
	exit 1
fi

if [ ! -d $CPUDIR ]; then
	echo "error:" $CPUDIR "is not exist"
	exit 1
fi

ARGN=$#

NAME=$1
if [ $ARGN -eq 1 ]; then
	if [ -f $LIBDIR/container/$NAME/resource/cpu ]; then
		cat $LIBDIR/container/$NAME/resource/cpu | \
			awk '{printf "CPU    : %3.1f %%\n",$1/1000}'
	fi
elif [ $ARGN -eq 2 ]; then
	VAL=$2
	USEDCPU=`echo $VAL | \
		awk '{if(($1 >= 1) && ($1 <= 100)){print int($1*1000)}else{print "-1"}}'`

	if [ $USEDCPU -lt 0 ]; then
		echo "error: VALUE must be [1-100]"
		exit 1
	fi
	if [ -f $LIBDIR/container/$NAME/resource/cpu ]; then
		echo $USEDCPU > $LIBDIR/container/$NAME/resource/cpu 
	fi

fi

STATUS=`fulcon list | awk '{if ($1 == "'$NAME'")print $2}'`
if [ x"$STATUS" == x"STOPPED" ]; then
	exit 0
fi

DID=`find-id $NAME`
if [ $? -ne 0 ]; then
	echo "error: can't find a container :" $NAME
	exit -1
fi

cd $CPUDIR
ls ${CPUSUFFIX}${DID}*  >& /dev/null
if [ $? -ne 0 ]; then
	exit 0
fi

for i in ${CPUSUFFIX}${DID}*
do
	if [ $ARGN -eq 2 ]; then
		echo 100000 > $i/cpu.cfs_period_us
		echo $USEDCPU > $i/cpu.cfs_quota_us
		cat $i/cpu.cfs_quota_us > $LIBDIR/container/$NAME/resource/cpu
	fi
done 
exit 0

