snapshoter: add recovery (generate past plots)

master
agp8x 2018-08-02 20:13:40 +02:00
parent c641eda6f6
commit 90f302e39e
2 changed files with 31 additions and 10 deletions

View File

@ -0,0 +1,19 @@
from datetime import date, timedelta, datetime as dt
import snapshot
def update(start, end):
auth = snapshot.auth_from_env()
config = snapshot.ssh_from_env()
offset = timedelta(days=1)
while start <= end:
print(start)
day = snapshot.today(today=start)
print(day)
snapshot._update(auth, config, day=day)
start += offset
if __name__ == "__main__":
start = dt(2018, 8 , 1)
end = dt(2018, 8 , 1)
update(start, end)

View File

@ -1,5 +1,6 @@
from collections import namedtuple from collections import namedtuple
from datetime import date, timedelta, datetime as dt from datetime import date, timedelta, datetime as dt
import logging
import os import os
import shutil import shutil
import tempfile import tempfile
@ -7,24 +8,24 @@ import tempfile
import fs import fs
import requests import requests
Day = namedtuple("Day", ["start", "end"]) log = logging
Day = namedtuple("Day", ["start", "end", "str"])
SSHConfig = namedtuple("SSHConfig", ["user", "password", "host", "port", "dir"]) SSHConfig = namedtuple("SSHConfig", ["user", "password", "host", "port", "dir"])
URL = 'http://192.168.2.30:3000/render/d-solo/j4171pFmk/in-vs-outdoor?orgId=1&panelId=2&from={start}&to={to}&width=1000&height=500&tz=Europe%2FBerlin' URL = 'http://192.168.2.30:3000/render/d-solo/j4171pFmk/in-vs-outdoor?orgId=1&panelId=2&from={start}&to={to}&width=1000&height=500&tz=Europe%2FBerlin'
def today_str():
return date.today().strftime("temp_%d.%m.%Y.png")
def today(): def today(today=dt.today()):
today = dt.today()
t = today.timetuple() t = today.timetuple()
delta = timedelta(hours=t.tm_hour, minutes=t.tm_min, seconds=t.tm_sec) delta = timedelta(hours=t.tm_hour, minutes=t.tm_min, seconds=t.tm_sec)
start = today - delta start = today - delta
end = start + timedelta(days=1) end = start + timedelta(days=1)
print(start, end) log.debug(f"{start}, {end}")
name = start.strftime("temp_%d.%m.%Y.png")
start = int(start.timestamp() * 1000) start = int(start.timestamp() * 1000)
end = int(end.timestamp() * 1000) end = int(end.timestamp() * 1000)
return Day(start=start, end=end) return Day(start=start, end=end, str=name)
def download(url, target, **kwargs): def download(url, target, **kwargs):
response = requests.get(url, stream=True, **kwargs) response = requests.get(url, stream=True, **kwargs)
@ -37,12 +38,13 @@ def upload(local_file, filename, config):
with fs.open_fs(url) as remote: with fs.open_fs(url) as remote:
return fs.copy.copy_file("/", local_file, remote, filename) return fs.copy.copy_file("/", local_file, remote, filename)
def _update(auth, ssh_config): def _update(auth, ssh_config, day=today()):
day = today()
url = URL.format(start=day.start, to=day.end) url = URL.format(start=day.start, to=day.end)
log.debug(url)
with tempfile.NamedTemporaryFile() as tmp: with tempfile.NamedTemporaryFile() as tmp:
download(url, tmp.name, auth=auth) download(url, tmp.name, auth=auth)
upload(tmp.name, today_str(), ssh_config) result = upload(tmp.name, day.str, ssh_config)
log.debug(f"{day.str}, {result}")
def auth_from_env(): def auth_from_env():
return (os.getenv("USER"), os.getenv("PASSWORD")) return (os.getenv("USER"), os.getenv("PASSWORD"))