Readded Gnuplot and image upload functions
This commit is contained in:
parent
2750440c29
commit
ac40f61695
2 changed files with 106 additions and 0 deletions
|
|
@ -7,6 +7,7 @@ import time
|
|||
# TODO: Still need functions.data ?
|
||||
from collections import OrderedDict
|
||||
from functions.data import *
|
||||
from functions.png_graph import *
|
||||
from functions.osticket import *
|
||||
from functions.sensors import *
|
||||
from functions.tmux import *
|
||||
|
|
|
|||
105
.bin/Scripts/functions/png_graph.py
Normal file
105
.bin/Scripts/functions/png_graph.py
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
# Wizard Kit: Functions - PNG graph for I/O Benchmark
|
||||
|
||||
import base64
|
||||
import Gnuplot
|
||||
import math
|
||||
|
||||
from functions.common import *
|
||||
|
||||
# Functions
|
||||
def export_png_graph(name, dev):
|
||||
"""Exports PNG graph using gnuplot, returns file path as str."""
|
||||
max_rate = max(TESTS['iobenchmark']['Data'][name]['Read Rates'])
|
||||
max_rate /= (1024**2)
|
||||
max_rate = max(800, max_rate)
|
||||
out_path = '{}/iobenchmark-{}.png'.format(global_vars['LogDir'], name)
|
||||
plot_data = '{}/iobenchmark-{}-raw.log'.format(global_vars['LogDir'], name)
|
||||
|
||||
# Adjust Y-axis range to either 1000 or roughly max rate + 200
|
||||
## Round up to the nearest 100 and then add 200
|
||||
y_range = (math.ceil(max_rate/100)*100) + 200
|
||||
|
||||
# Run gnuplot commands
|
||||
g = Gnuplot.Gnuplot()
|
||||
g('reset')
|
||||
g('set output "{}"'.format(out_path))
|
||||
g('set terminal png large size 660,300 truecolor font "Noto Sans,11"')
|
||||
g('set title "I/O Benchmark"')
|
||||
g('set yrange [0:{}]'.format(y_range))
|
||||
g('set style data lines')
|
||||
g('plot "{data}" title "{size} ({tran}) {model} {serial}"'.format(
|
||||
data=plot_data,
|
||||
size=dev['lsblk'].get('size', '???b'),
|
||||
tran=dev['lsblk'].get('tran', '???'),
|
||||
model=dev['lsblk'].get('model', 'Unknown Model'),
|
||||
serial=dev['lsblk'].get('serial', 'Unknown Serial'),
|
||||
))
|
||||
|
||||
# Cleanup
|
||||
g.close()
|
||||
del(g)
|
||||
|
||||
return out_path
|
||||
|
||||
def upload_to_imgur(image_path):
|
||||
"""Upload image to Imgur and return image url as str."""
|
||||
image_data = None
|
||||
image_link = None
|
||||
|
||||
# Bail early
|
||||
if not image_path:
|
||||
raise GenericError
|
||||
|
||||
# Read image file and convert to base64 then convert to str
|
||||
with open(image_path, 'rb') as f:
|
||||
image_data = base64.b64encode(f.read()).decode()
|
||||
|
||||
# POST image
|
||||
url = "https://api.imgur.com/3/image"
|
||||
boundary = '----WebKitFormBoundary7MA4YWxkTrZu0gW'
|
||||
payload = ('--{boundary}\r\nContent-Disposition: form-data; '
|
||||
'name="image"\r\n\r\n{data}\r\n--{boundary}--')
|
||||
payload = payload.format(boundary=boundary, data=image_data)
|
||||
headers = {
|
||||
'content-type': 'multipart/form-data; boundary={}'.format(boundary),
|
||||
'Authorization': 'Client-ID {}'.format(IMGUR_CLIENT_ID),
|
||||
}
|
||||
response = requests.request("POST", url, data=payload, headers=headers)
|
||||
|
||||
# Return image link
|
||||
if response.ok:
|
||||
json_data = json.loads(response.text)
|
||||
image_link = json_data['data']['link']
|
||||
return image_link
|
||||
|
||||
def upload_to_nextcloud(image_path, ticket_number, dev_name):
|
||||
"""Upload image to Nextcloud server and return folder url as str."""
|
||||
image_data = None
|
||||
|
||||
# Bail early
|
||||
if not image_path:
|
||||
raise GenericError
|
||||
|
||||
# Read image file and convert to base64
|
||||
with open(image_path, 'rb') as f:
|
||||
image_data = f.read()
|
||||
|
||||
# PUT image
|
||||
url = '{base_url}/{ticket_number}_iobenchmark_{dev_name}_{date}.png'.format(
|
||||
base_url=BENCHMARK_SERVER['Url'],
|
||||
ticket_number=ticket_number,
|
||||
dev_name=dev_name,
|
||||
date=global_vars.get('Date-Time', 'Unknown Date-Time'))
|
||||
requests.put(
|
||||
url,
|
||||
data=image_data,
|
||||
headers = {'X-Requested-With': 'XMLHttpRequest'},
|
||||
auth = (BENCHMARK_SERVER['User'], BENCHMARK_SERVER['Pass']))
|
||||
|
||||
# Return folder link
|
||||
return BENCHMARK_SERVER['Short Url']
|
||||
|
||||
if __name__ == '__main__':
|
||||
print("This file is not meant to be called directly.")
|
||||
|
||||
# vim: sts=2 sw=2 ts=2
|
||||
Loading…
Reference in a new issue