131 lines
3.7 KiB
Python
Raw Normal View History

2023-07-06 05:15:23 +00:00
import sys
import json
import base64
import requests
import random
import os
from mega import Mega
mega = Mega()
m = mega.login('email', 'password')
payload = json.loads(base64.b64decode(sys.argv[1]))
try:
servers = ["http://solr1:8983/solr/BigData/select"]
# If export count is a string convert to int
if isinstance(payload['exportCount'], str):
payload['exportCount'] = int(payload['exportCount'])
print(f"Exporting {payload['exportCount']} records")
if payload['exportCount'] < 1000:
# Get random server
server = random.choice(servers)
print(f"Exporting {payload['exportCount']} from {server}: {payload['query']}")
# Query the server for the data (payload.query)
r = requests.get(server, params={
'q': payload['query'],
'rows': payload['exportCount'],
'wt': 'csv'
})
print(r.text)
print(f"Exported {len(r.text)} bytes")
if len(r.text) == 0 or len(r.text) == 1:
raise "bad length"
# Write to payload['jobid].csv
with open('exports/'+payload['jobid'] + '.csv', 'w') as f:
f.write(r.text)
print(f"Exported to {payload['jobid']}.csv")
payload['status'] = "success"
print(f"Uploading to mega.nz")
# replace 'myfile.txt' with your file
file = m.upload('exports/'+payload['jobid'] + '.csv')
# Share the file so anyone with the link can view it
print(f"Uploaded to mega.nz")
# Get the link
link = m.get_upload_link(file)
print(f"Link: {link}")
payload['status'] = "complete"
payload['link'] = str(link)
try:
requests.post('http://127.0.0.1:3000/exports/callbacks/a-unique-id/exportCb', json=payload, timeout=5)
# Timeout
except:
# Delete the file
os.remove('exports/'+payload['jobid'] + '.csv')
exit()
else:
# Create a folder for the jobid
os.mkdir('exports/'+payload['jobid'])
current = 0
chunks = 1000
while current < payload['exportCount']:
print(f"Exporting chunk {current}/{payload['exportCount']}")
# Get random server
server = random.choice(servers)
# Query the server for the data (payload.query)
r = requests.get(server, params={
'q': payload['query'],
'rows': chunks,
'start': current,
'wt': 'csv'
})
# Write to payload['jobid].csv
with open('exports/'+payload['jobid'] + '/' + str(current) + '.csv', 'w') as f:
f.write(r.text)
current += chunks
# Zip the folder
os.system(f"zip -r exports/{payload['jobid']}.zip exports/{payload['jobid']}")
print(f"Exported to {payload['jobid']}.zip")
# Upload to mega.nz
file = m.upload('exports/'+payload['jobid'] + '.zip')
# Share the file so anyone with the link can view it
print(f"Uploaded to mega.nz")
# Get the link
link = m.get_upload_link(file)
print(f"Link: {link}")
payload['status'] = "complete"
payload['link'] = str(link)
try:
requests.post('http://127.0.0.1:3000/exports/callbacks/a-unique-id/exportCb', json=payload, timeout=5)
# Timeout
except:
# Delete the files
os.remove('exports/'+payload['jobid'] + '.zip')
os.system(f"rm -rf exports/{payload['jobid']}")
exit()
except SystemExit:
exit()
except:
print("Unexpected error:", sys.exc_info()[0])
payload['status'] = "failed"
requests.post('http://127.0.0.1:3000/exports/callbacks/a-unique-id/exportCb', json=payload)