#!/usr/bin/python

# http://www.pcworld.com/article/3027446/hardware/irate-comcast-subscriber-turns-raspberry-pi-into-a-watchdog-for-slow-internet-speeds.html
# http://pastebin.com/WMEh802V
# https://github.com/sivel/speedtest-cli
# https://twitter.com/A_Comcast_User

# import sys
import os
import csv
import datetime
import time
import twitter


def test():

        # run speedtest-cli
        print 'running test'
        a = os.popen("python /home/pi/speedtest/speedtest-cli --simple").read()
        print 'ran'
        # split the 3 line result (ping,down,up)
        lines = a.split('\n')
        print a
        ts = time.time()
        date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
        # if speedtest could not connect set the speeds to 0
        if "Cannot" in a:
                p = 100
                d = 0
                u = 0
        # extract the values for ping down and up values
        else:
                p = lines[0][6:11]
                d = lines[1][10:14]
                u = lines[2][8:12]
        print date, p, d, u
        # save the data to file for local network plotting
        out_file = open('/home/pi/speedtest.csv', 'a')
        writer = csv.writer(out_file)
        writer.writerow((ts * 1000, p, d, u))
        out_file.close()

        # connect to twitter
        TOKEN = ""
        TOKEN_KEY = ""
        CON_SEC = ""
        CON_SEC_KEY = ""

        my_auth = twitter.OAuth(TOKEN, TOKEN_KEY, CON_SEC, CON_SEC_KEY)
        twit = twitter.Twitter(auth=my_auth)

        # try to tweet if speedtest couldnt even connet. Probably wont work if the internet is down
        if "Cannot" in a:
                try:
                        tweet = "Hey @TWC @TWC_Help why is my internet down? I pay for 100down\\10up in #Westchester #NY? #twcoutage #TWC"
                        twit.statuses.update(status=tweet)
                except:
                        pass

        # tweet if down speed is less than whatever I set
        elif eval(d) < 50:
                print "trying to tweet"
                try:
                        # i know there must be a better way than to do (str(int(eval())))
                        tweet = "Hey @TWC why is my internet speed " + str(int(eval(d))) + "down\\" + str(int(eval(u))) + "up when I pay for 100down\\10up in #Westchester #NY? @TWC_Help @TWC_NYNJ #TWC #slow #speedtest"
                        twit.statuses.update(status=tweet)
                except Exception, e:
                        print str(e)
                        pass
        return

if __name__ == '__main__':
        test()
        print 'completed'

@@ -4,16 +4,20 @@
 usr/bin/
+env 
 python%0D%0A

fix shebang