3
# ec2_cost: approximate EC2 cost (USD) of the current instance
4
# Copyright (C) 2008 Canonical Ltd.
6
# Authors: Dustin Kirkland <kirkland@canonical.com>
8
# This program is free software: you can redistribute it and/or modify
9
# it under the terms of the GNU General Public License as published by
10
# the Free Software Foundation, version 3 of the License.
12
# This program is distributed in the hope that it will be useful,
13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU General Public License for more details.
17
# You should have received a copy of the GNU General Public License
18
# along with this program. If not, see <http://www.gnu.org/licenses/>.
31
# Approximate Instance Cost Basis
33
# Small (1cpu, 32bit) $0.10/h $0.11/h
34
# Medium (2cpu, 32bit) $0.20/h $0.22/h
35
# Large (4cpu, 64bit) $0.40/h $0.44/h
36
# XLarge (8cpu, 64bit) $0.80/h $0.88/h
39
cpu_count=`grep -c "^processor.*:" /proc/cpuinfo`
40
[ -z "$cpu_count" ] && cpu_count=1
41
# Apply the going rate
42
CPU_RATE=`echo "$cpu_count" | awk '{printf "%f", 0.10*$1}'`
43
# BUG: Some logic needed here to add 10% cost for Europe instances?
45
# Data Transfer Cost Basis
48
# (This gets more complex if you use >1TB/mo)
52
# Auto detect network interface
53
IF=`tail -n1 /proc/net/route | awk '{print $1}'`
55
ifconfig_out=`/sbin/ifconfig "$IF"`
57
# Calculate bandwidth cost
58
tx_gb=`echo "$ifconfig_out" | grep "TX bytes:" | sed "s/^.*TX bytes://" | awk '{ printf "%f", $1 / 1024 / 1024 / 1024 }'`
59
rx_gb=`echo "$ifconfig_out" | grep "RX bytes:" | sed "s/^.*RX bytes://" | awk '{ printf "%f", $1 / 1024 / 1024 / 1024 }'`
60
network_cost=`echo "$tx_gb" "$TX_RATE" "$rx_gb" "$RX_RATE" | awk '{printf "%f %f", $1*$2, $3*$4}' | awk '{printf "%f", $1 + $2}'`
62
# Calculate uptime cost
63
# BUG: This will only calculate uptime since boot!
64
# Some additional input will be required to account for reboots!!!
65
hours=`awk '{printf "%f", 1 + $1 / 60 / 60 }' /proc/uptime | sed 's/\..*$//' `
66
uptime_cost=`echo "$hours" | awk "{printf \"%f\", "$CPU_RATE" * $hours}"`
67
total_cost=`echo "$network_cost" "$uptime_cost" | awk '{printf "%.2f", $1 + $2}'`
69
if [ "$DETAIL" = "1" ]; then
70
echo "================================================"
71
echo "Estimated cost in Amazon's EC2 since last reboot"
72
echo "================================================"
73
echo " Network sent: $tx_gb GB @ \$$RX_RATE/GB"
74
echo " Network recv: $rx_gb GB @ \$$TX_RATE/GB"
75
echo " Network cost: \$$network_cost"
76
echo "------------------------------------------------"
77
echo " Uptime: $hours hr @ \$$CPU_RATE/hr"
78
echo " Uptime cost: \$$uptime_cost"
79
echo "------------------------------------------------"
80
echo "Total cost: ~\$$total_cost"
81
echo "================================================"
85
printf "\005{= KG}~\$\005{-}\005{=b KG}%s\005{-} " $total_cost