#!/bin/sh -e # # rcs_cost: approximate Rackspace Cloud Server cost (USD) of the current instance # # Copyright (C) 2009-2010 Jon Bernard # Copyright (C) 2011-2014 Dustin Kirkland # # Author(s): Jon Bernard # Dustin Kirkland # # Derived from byobu's ec2_cost written by Dustin Kirkland, see # Byobu's project page: http://byobu.co for more information # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . __rcs_cost_detail() { DETAIL=1 __rcs_cost } __rcs_cost() { # Approximate Instance Cost Basis # Memory US # 256MB $0.015/h # 512MB $0.030/h # 1024MB $0.060/h # 2048MB $0.120/h # 4096MB $0.240/h # 8192MB $0.480/h # 15872MB $0.960/h # Instance memory memory=`grep "^MemTotal:" /proc/meminfo | awk '{print $2}'` # Round memory down to the nearest multiple of 64MB memory=$((${memory} - (${memory} % (64 * 1024)))) # Apply the going rate INCREMENTS="256 512 1024 2048 4096 8192 16384 32768 65536" for X in ${INCREMENTS}; do test "$((${X} * 1024 + 65536))" -ge ${memory} && break done MEMORY_RATE=`printf "%s" "$X" | awk '{printf "%f", $1 / 256 * 15 / 1000}'` # Data Transfer Cost Basis # Incoming $0.08/GB # Outgoing $0.22/GB RX_RATE="0.08" TX_RATE="0.22" # Auto detect network interface [ -r "/proc/net/route" ] || return IF=$(tail -n1 /proc/net/route | awk '{print $1}') ifconfig_out=`LC_ALL=C /sbin/ifconfig "$IF"` # Calculate bandwidth cost tx_gb=${ifconfig_out#*RX bytes:} tx_gb=$(printf "%s" ${tx_gb%% *} | awk '{ printf "%f", $1 / 1024 / 1024 / 1024 }') rx_gb=${ifconfig_out#*TX bytes:} rx_gb=$(printf "%s" ${rx_gb%% *} | awk '{ printf "%f", $1 / 1024 / 1024 / 1024 }') network_cost=`printf "%s" "$tx_gb" "$TX_RATE" "$rx_gb" "$RX_RATE" | awk '{printf "%f %f", $1*$2, $3*$4}' | awk '{printf "%f", $1 + $2}'` # Calculate uptime cost hours=$(((`date +%s` - `stat --printf %Z /etc/hostname`) / 60 / 60 + 1)) uptime_cost=`printf "%s" "$hours" | awk "{printf \"%f\", "$MEMORY_RATE" * $hours}"` total_cost=`printf "%s %s" "$network_cost" "$uptime_cost" | awk '{printf "%.2f", $1 + $2}'` if [ "$DETAIL" = "1" ]; then echo "==========================================================" echo "Estimated cost in Rackspace Cloud Server since last reboot" echo "==========================================================" echo " Network sent: $tx_gb GB @ \$$RX_RATE/GB" echo " Network recv: $rx_gb GB @ \$$TX_RATE/GB" echo " Network cost: \$$network_cost" echo "----------------------------------------------------------" echo " Uptime: $hours hr @ \$$MEMORY_RATE/hr" echo " Uptime cost: \$$uptime_cost" echo "----------------------------------------------------------" echo "Total cost: ~\$$total_cost" echo "==========================================================" return fi [ -n "$total_cost" ] || return color K G; printf "R\$%s"; color -; color b K G; printf "%s" "$total_cost"; color -- } # vi: syntax=sh ts=4 noexpandtab