added download_worker to pulling download jobs from db
parent
fbfbb70f83
commit
ea2c59d810
|
@ -11,4 +11,5 @@ flask_session/
|
||||||
git-version.txt
|
git-version.txt
|
||||||
settings.py
|
settings.py
|
||||||
*.db
|
*.db
|
||||||
|
videos/*
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import glob
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
from multiprocessing import Process, Pool
|
||||||
|
|
||||||
|
import logging
|
||||||
|
logger = logging.getLogger()
|
||||||
|
logger.setLevel('DEBUG')
|
||||||
|
|
||||||
|
from EagleEyev3 import *
|
||||||
|
from settings import config
|
||||||
|
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
con = sqlite3.connect('instance/project.db')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def run(args):
|
||||||
|
args = [([i], args[1], args[2]) for i in args[0]]
|
||||||
|
print(pool.map(download, args, 1))
|
||||||
|
|
||||||
|
|
||||||
|
def download(args):
|
||||||
|
|
||||||
|
row = args[0][0]
|
||||||
|
|
||||||
|
fname = f"videos/{row[2]}/{row[2]}_{row[3]}-{row[4]}.mp4"
|
||||||
|
|
||||||
|
save_result = args[2].save_video_to_file(url=row[1], filename=fname)
|
||||||
|
|
||||||
|
match save_result['response_http_status']:
|
||||||
|
case 200:
|
||||||
|
save_status = 'done'
|
||||||
|
case 400 | 404 | 409:
|
||||||
|
save_status = 'client failure'
|
||||||
|
case 401 | 403:
|
||||||
|
save_status = 'auth failure'
|
||||||
|
case 500 | 502 | 503 | 504:
|
||||||
|
save_status = 'cloud failure'
|
||||||
|
case _:
|
||||||
|
save_status = 'unknown failure'
|
||||||
|
|
||||||
|
new_cur = con.cursor()
|
||||||
|
new_cur.execute("update download set status = ?, error = ? where download.id == ?;", (save_status, save_result['response_http_status'], row[0]))
|
||||||
|
con.commit()
|
||||||
|
|
||||||
|
return (save_result['response_http_status'], row[0])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
pool = Pool(4)
|
||||||
|
print("starting up...")
|
||||||
|
|
||||||
|
|
||||||
|
een = EagleEyev3(config)
|
||||||
|
logging.info(f"EagleEyev3 version: {een.__version__}")
|
||||||
|
|
||||||
|
|
||||||
|
cur = con.cursor()
|
||||||
|
|
||||||
|
|
||||||
|
if een:
|
||||||
|
if een.refresh_token == None or een.refresh_token == '':
|
||||||
|
# if you get out of sync, pull the refresh_token from the db to get the loop started
|
||||||
|
result = cur.execute("select user.refresh_token from user where user.email = ?;", ("mcotton@mcottondesign.com",))
|
||||||
|
|
||||||
|
for row in result:
|
||||||
|
een.refresh_token = row[0]
|
||||||
|
else:
|
||||||
|
# een object and refresh_token appear to be good
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
logging.error('een object is None')
|
||||||
|
|
||||||
|
|
||||||
|
een.login_tokens(code=None, cascade=True, refresh_token=een.refresh_token)
|
||||||
|
|
||||||
|
result = cur.execute("select user.refresh_token, user.id from user where user.email = ?;", (een.current_user['email'],))
|
||||||
|
|
||||||
|
for row in result:
|
||||||
|
print(f"found user {een.current_user['email']}, updating refresh_token")
|
||||||
|
print(row)
|
||||||
|
print(een.refresh_token)
|
||||||
|
print(f"update user set refresh_token = {een.refresh_token} where id == {row[1]};")
|
||||||
|
cur.execute("update user set refresh_token = ? where id == ?;", (een.refresh_token, row[1]))
|
||||||
|
con.commit()
|
||||||
|
|
||||||
|
|
||||||
|
een.get_list_of_cameras()
|
||||||
|
|
||||||
|
r2d2 = een.cameras[3]
|
||||||
|
|
||||||
|
# r2d2.get_list_of_videos(start_timestamp=een.time_before(hours=24*1), end_timestamp=een.time_now())
|
||||||
|
|
||||||
|
sql = '''SELECT
|
||||||
|
download.id,
|
||||||
|
download.url,
|
||||||
|
camera.device_id,
|
||||||
|
download.start_timestamp,
|
||||||
|
download.end_timestamp,
|
||||||
|
download.status
|
||||||
|
FROM
|
||||||
|
camera
|
||||||
|
JOIN download ON download.camera_id = camera.id
|
||||||
|
JOIN USER ON camera.user_id = user.id
|
||||||
|
WHERE
|
||||||
|
download.status == ?
|
||||||
|
AND camera.id == ?
|
||||||
|
LIMIT 500;'''
|
||||||
|
|
||||||
|
|
||||||
|
results = cur.execute(sql, ('new', 4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
run([results, een, r2d2])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pool.close()
|
||||||
|
print("Shutting down...")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue