~jbernard/+junk/byobu

« back to all changes in this revision

Viewing changes to bin/rcs_cost

  • Committer: Jon Bernard
  • Date: 2009-11-25 15:10:35 UTC
  • Revision ID: bernardj@gmail.com-20091125151035-pzt6wx4hvd90vys5
Add rcs_cost, a rackspace cloud server instance cost estimator

rcs_cost, much like ec2_cost, calculates the the cost of a Rackspace Cloud
Server instance since the last reboot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
#
 
3
#    rcs_cost: approximate Rackspace Cloud Server cost (USD) of the current
 
4
#    instance
 
5
#    Copyright (C) 2009 Jon Bernard
 
6
#    Copyright (C) 2009 Nick Jones
 
7
#
 
8
#    Authors: Jon Bernard <bernardj@gmail.com>
 
9
#             Nick Jones <njones@twobit.net>
 
10
#
 
11
#    This program is free software: you can redistribute it and/or modify
 
12
#    it under the terms of the GNU General Public License as published by
 
13
#    the Free Software Foundation, version 3 of the License.
 
14
#
 
15
#    This program is distributed in the hope that it will be useful,
 
16
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
17
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
18
#    GNU General Public License for more details.
 
19
#
 
20
#    You should have received a copy of the GNU General Public License
 
21
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
22
 
 
23
DETAIL=0
 
24
PKG="byobu"
 
25
[ -r "/etc/$PKG/statusrc" ] && . "/etc/$PKG/statusrc"
 
26
 
 
27
for arg in "$@"; do
 
28
    case "$arg" in
 
29
        -d|--detail)
 
30
        DETAIL=1
 
31
        ;;
 
32
    esac
 
33
done
 
34
 
 
35
# Approximate Instance Cost Basis
 
36
# Memory        US
 
37
# 256MB         $0.015/h
 
38
# 512MB         $0.030/h
 
39
# 1024MB        $0.060/h
 
40
# 2048MB        $0.120/h
 
41
# 4096MB        $0.240/h
 
42
# 8192MB        $0.480/h
 
43
# 15872MB       $0.960/h
 
44
 
 
45
# Instance memory
 
46
memory=`grep "^MemTotal:" /proc/meminfo | awk '{print $2}'`
 
47
 
 
48
# Round memory down to the nearest multiple of 64MB
 
49
memory=$((${memory} - (${memory} % (64 * 1024))))
 
50
 
 
51
# Apply the going rate
 
52
INCREMENTS="256 512 1024 2048 4096 8192 16384 32768 65536"
 
53
for X in ${INCREMENTS}; do
 
54
    test "$((${X} * 1024 + 65536))" -ge ${memory} && break
 
55
done
 
56
MEMORY_RATE=`echo "$X" | awk '{printf "%f", $1 / 256 * 15 / 1000}'`
 
57
 
 
58
# Data Transfer Cost Basis
 
59
# Incoming      $0.08/GB
 
60
# Outgoing      $0.22/GB
 
61
RX_RATE="0.08"
 
62
TX_RATE="0.22"
 
63
 
 
64
# Auto detect network interface
 
65
IF=`tail -n1 /proc/net/route  | awk '{print $1}'`
 
66
 
 
67
ifconfig_out=`/sbin/ifconfig "$IF"`
 
68
 
 
69
# Calculate bandwidth cost
 
70
tx_gb=`echo "$ifconfig_out" | grep "TX bytes:" | sed "s/^.*TX bytes://" | awk '{ printf "%f", $1 / 1024 / 1024 / 1024 }'`
 
71
rx_gb=`echo "$ifconfig_out" | grep "RX bytes:" | sed "s/^.*RX bytes://" | awk '{ printf "%f", $1 / 1024 / 1024 / 1024 }'`
 
72
network_cost=`echo "$tx_gb" "$TX_RATE" "$rx_gb" "$RX_RATE" | awk '{printf "%f %f", $1*$2, $3*$4}' | awk '{printf "%f", $1 + $2}'`
 
73
 
 
74
# Calculate uptime cost
 
75
# BUG: This will only calculate uptime since boot!
 
76
#      Some additional input will be required to account for reboots!!!
 
77
hours=`awk '{printf "%f", 1 + $1 / 60 / 60 }' /proc/uptime | sed 's/\..*$//' `
 
78
uptime_cost=`echo "$hours" | awk "{printf \"%f\", "$MEMORY_RATE" * $hours}"`
 
79
total_cost=`echo "$network_cost" "$uptime_cost" | awk '{printf "%.2f", $1 + $2}'`
 
80
 
 
81
if [ "$DETAIL" = "1" ]; then
 
82
    echo "=========================================================="
 
83
    echo "Estimated cost in Rackspace Cloud Server since last reboot"
 
84
    echo "=========================================================="
 
85
    echo "  Network sent:  $tx_gb GB   @ \$$RX_RATE/GB"
 
86
    echo "  Network recv:  $rx_gb GB   @ \$$TX_RATE/GB"
 
87
    echo "  Network cost:  \$$network_cost"
 
88
    echo "----------------------------------------------------------"
 
89
    echo "  Uptime:        $hours hr  @ \$$MEMORY_RATE/hr"
 
90
    echo "  Uptime cost:   \$$uptime_cost"
 
91
    echo "----------------------------------------------------------"
 
92
    echo "Total cost:      ~\$$total_cost"
 
93
    echo "=========================================================="
 
94
    exit 0
 
95
fi
 
96
 
 
97
printf "$KG~\$$UNDO$bKG%s$UNDO " $total_cost