Skip to content

Instantly share code, notes, and snippets.

@lociii
Created August 16, 2018 20:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lociii/cf42958ade78f6bb69debb5fb4d69ab2 to your computer and use it in GitHub Desktop.
Save lociii/cf42958ade78f6bb69debb5fb4d69ab2 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import twitter
import datetime
import csv
import requests
class OfflineTimer(object):
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
OFFLINE_SINCE = '/tmp/offline_since.txt'
OFFLINE_TIMER = '/tmp/offline_timer.csv'
def run(self):
# create file if not exists
with open(self.OFFLINE_SINCE, 'a'):
pass
now = datetime.datetime.now()
response_time = self.get_response_time()
offline_since = self.get_offline_since()
# write to csv
self.write_to_csv(now, response_time, offline_since)
# we're back online, send tweet
if offline_since is not None and response_time is not None:
self.send_tweet(now, offline_since)
self.reset_timer()
return
if offline_since is None and response_time is None:
self.save_offline_time(now)
return
def get_offline_since(self):
with open(self.OFFLINE_SINCE, 'r') as file:
# get last offline date
offline_since = file.readline().strip()
if len(offline_since):
return datetime.datetime.strptime(offline_since, self.DATETIME_FORMAT)
return None
def reset_timer(self):
with open(self.OFFLINE_SINCE, 'w') as file:
file.truncate(0)
def save_offline_time(self, now):
with open(self.OFFLINE_SINCE, 'w') as file:
file.write(now.strftime(self.DATETIME_FORMAT))
def get_response_time(self):
try:
response = requests.get('https://www.unitymedia.de/', timeout=5)
if response.status_code == 200:
return response.elapsed.total_seconds()
except requests.exceptions.Timeout:
pass
except requests.exceptions.RequestException:
pass
return None
def write_to_csv(self, now, response_time, offline_since):
with open(self.OFFLINE_TIMER, 'ab+') as f:
writer = csv.writer(f)
writer.writerow([now, response_time, offline_since])
def send_tweet(self, now, offline_since):
consumer_key = 'xxx'
consumer_secret = 'xxx'
access_token_key = 'xxx'
access_token_secret = 'xxx'
message = 'Ausfallzeit: {} (von {} bis {}) #unitymedia #werbrauchtschoninternet #sichernursporadisch'.format(
self.get_duration_string(begin=offline_since, end=now), offline_since.strftime('%H:%M'), now.strftime('%H:%M'))
api = twitter.Api(consumer_key, consumer_secret, access_token_key, access_token_secret)
api.PostUpdate(message)
def get_duration_string(self, begin, end):
duration = (end - begin).total_seconds()
minutes = int(duration / 60)
duration_string = ''
if minutes == 0:
duration_string += 'weniger als eine Minute'
elif minutes > 1:
duration_string += '{} Minuten'.format(minutes)
else:
duration_string += '{} Minute'.format(minutes)
return duration_string
o = OfflineTimer()
o.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment