@@ -23,6 +23,18 @@ def get_monthly_cost(config, aws_profile_name):
2323 forecast = resp ['Budgets' ][0 ]['CalculatedSpend' ]['ForecastedSpend' ]['Amount' ]
2424 return (float (cost ), float (forecast ))
2525
26+ def get_server_stats (config , aws_profile_name ):
27+ # TODO Define AWSUsage() class to factor out the boilarplate.
28+ session = boto3 .Session (profile_name = aws_profile_name )
29+ client = session .client ("ec2" )
30+ resp = client .describe_instances ()
31+ nserver = 0
32+ for resv in resp ["Reservations" ]:
33+ for inst in resv ['Instances' ]:
34+ if inst ['State' ]['Name' ] != 'terminated' :
35+ nserver += 1
36+ return nserver
37+
2638def send_message (config , message ):
2739 client = zulip .Client (site = config ['zulip' ]['site' ],
2840 email = config ['zulip' ]['email' ],
@@ -35,16 +47,17 @@ def send_message(config, message):
3547 'content' : message
3648 })
3749
38- def format_message (config , cost , forecast ):
50+ def format_message (config , cost , forecast , nserver ):
3951 today = datetime .date .today ()
4052 template = config ['zulip' ]['message' ]
4153 return template .format (year = today .year , month = today .month , day = today .day ,
42- cost = cost , forecast = forecast )
54+ cost = cost , forecast = forecast , nserver = nserver )
4355
4456def main (aws_profile_name = "default" , dryrun = False ):
4557 config = load_config ()
4658 cost , forecast = get_monthly_cost (config , aws_profile_name )
47- message = format_message (config , cost , forecast )
59+ nserver = get_server_stats (config , aws_profile_name )
60+ message = format_message (config , cost , forecast , nserver )
4861 if dryrun :
4962 print (message )
5063 else :
0 commit comments