fixed pep8 styling problems
This commit is contained in:
parent
78d7e02285
commit
14e3e12571
132
cluster_stats.py
132
cluster_stats.py
|
@ -1,5 +1,5 @@
|
||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
import sys
|
# import sys
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import datetime
|
import datetime
|
||||||
|
@ -16,47 +16,51 @@ import matplotlib
|
||||||
# https://matplotlib.org/tutorials/introductory/usage.html#what-is-a-backend
|
# https://matplotlib.org/tutorials/introductory/usage.html#what-is-a-backend
|
||||||
r = os.system('python -c "import matplotlib.pyplot as plt;plt.figure()"')
|
r = os.system('python -c "import matplotlib.pyplot as plt;plt.figure()"')
|
||||||
if r != 0:
|
if r != 0:
|
||||||
matplotlib.use('Agg') # use Anti Grain Geometry backend for non-interactive rendering into pngs, svg, etc...
|
matplotlib.use('Agg') # use Anti Grain Geometry backend for non-interactive rendering into pngs, svg, etc...
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
#import matplotlib.pyplot as plt
|
# import matplotlib.pyplot as plt
|
||||||
import matplotlib.dates
|
import matplotlib.dates
|
||||||
import abc
|
import abc
|
||||||
|
|
||||||
from SimpaDbUtil import SqlDatabaseReader, SqlFile
|
# from SimpaDbUtil import SqlDatabaseReader, SqlFile
|
||||||
from inventory import Inventory
|
# from inventory import Inventory
|
||||||
|
|
||||||
|
|
||||||
def is_cluster_node_name(name):
|
def is_cluster_node_name(name):
|
||||||
return re.match('^simpatix[0-9]+$', name) is not None or re.match('^physix[0-9]+$', name) is not None
|
return re.match('^simpatix[0-9]+$', name) is not None or re.match('^physix[0-9]+$', name) is not None
|
||||||
|
|
||||||
|
|
||||||
def get_investment_over_time(time_value, price, purchase_time):
|
def get_investment_over_time(time_value, price, purchase_time):
|
||||||
percent_decay_per_day = 0.0 # 1.0/(7.0*365.0)
|
percent_decay_per_day = 0.0 # 1.0/(7.0*365.0)
|
||||||
f1 = (purchase_time-time_value)*percent_decay_per_day+1.0
|
f1 = (purchase_time - time_value) * percent_decay_per_day + 1.0
|
||||||
f2 = np.where( f1 < 0.0, 0.0, f1 )
|
f2 = np.where(f1 < 0.0, 0.0, f1)
|
||||||
f3 = np.where( time_value < purchase_time, 0.0, f2 )
|
f3 = np.where(time_value < purchase_time, 0.0, f2)
|
||||||
|
|
||||||
return f3 * price
|
return f3 * price
|
||||||
|
|
||||||
|
|
||||||
def get_flops_over_time(inventory, time_value, computer_id, purchase_time):
|
def get_flops_over_time(inventory, time_value, computer_id, purchase_time):
|
||||||
"""
|
"""
|
||||||
:param Inventory inventory:
|
:param Inventory inventory:
|
||||||
"""
|
"""
|
||||||
return np.where( time_value < purchase_time, 0.0, inventory.get_computer_dflops(computer_id) )
|
return np.where(time_value < purchase_time, 0.0, inventory.get_computer_dflops(computer_id))
|
||||||
|
|
||||||
|
|
||||||
def get_flops_price_over_time(inventory, time_value):
|
def get_flops_price_over_time(inventory, time_value):
|
||||||
"""
|
"""
|
||||||
:param Inventory inventory: the inventory database
|
:param Inventory inventory: the inventory database
|
||||||
"""
|
"""
|
||||||
|
|
||||||
rows = inventory.query("SELECT * FROM machines")
|
rows = inventory.query("SELECT * FROM machines")
|
||||||
|
|
||||||
def get_key(item):
|
def get_key(item):
|
||||||
return item['time']
|
return item['time']
|
||||||
|
|
||||||
flops_prices = []
|
flops_prices = []
|
||||||
|
|
||||||
for row in rows:
|
for row in rows:
|
||||||
(name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number)=row
|
(name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number) = row
|
||||||
is_cluster_node = is_cluster_node_name(name)
|
is_cluster_node = is_cluster_node_name(name)
|
||||||
if is_cluster_node:
|
if is_cluster_node:
|
||||||
purchase_date = inventory.get_machine_purchase_date(name)
|
purchase_date = inventory.get_machine_purchase_date(name)
|
||||||
|
@ -64,20 +68,20 @@ def get_flops_price_over_time(inventory, time_value):
|
||||||
# print(name, price_ex_vat)
|
# print(name, price_ex_vat)
|
||||||
purchase_time = matplotlib.dates.date2num(purchase_date.date())
|
purchase_time = matplotlib.dates.date2num(purchase_date.date())
|
||||||
computer_flops = inventory.get_computer_dflops(name)
|
computer_flops = inventory.get_computer_dflops(name)
|
||||||
flops_price = ( price_ex_vat-inventory.get_computer_options_price(name) ) / computer_flops
|
flops_price = (price_ex_vat - inventory.get_computer_options_price(name)) / computer_flops
|
||||||
# print ( purchase_date, name, price_ex_vat, computer_flops, flops_price )
|
# print ( purchase_date, name, price_ex_vat, computer_flops, flops_price )
|
||||||
flops_prices.append({'time':purchase_time, 'flops_price':flops_price, 'purchase_date':purchase_date})
|
flops_prices.append({'time': purchase_time, 'flops_price': flops_price, 'purchase_date': purchase_date})
|
||||||
|
|
||||||
flops_prices = sorted(flops_prices, key=get_key)
|
flops_prices = sorted(flops_prices, key=get_key)
|
||||||
|
|
||||||
flops_price_over_time = np.where( True, 0.0, 0.0 )
|
flops_price_over_time = np.where(True, 0.0, 0.0)
|
||||||
for item in flops_prices:
|
for item in flops_prices:
|
||||||
# print(item)
|
# print(item)
|
||||||
flops_price_over_time = np.where( time_value < item['time'], flops_price_over_time, item['flops_price'])
|
flops_price_over_time = np.where(time_value < item['time'], flops_price_over_time, item['flops_price'])
|
||||||
|
|
||||||
|
|
||||||
return flops_price_over_time
|
return flops_price_over_time
|
||||||
|
|
||||||
|
|
||||||
def get_computer_value_over_time(inventory, computer_id, time_value, flops_price_over_time, purchase_time):
|
def get_computer_value_over_time(inventory, computer_id, time_value, flops_price_over_time, purchase_time):
|
||||||
# print('flops_price_over_time = ', flops_price_over_time)
|
# print('flops_price_over_time = ', flops_price_over_time)
|
||||||
computer_flops = inventory.get_computer_dflops(computer_id)
|
computer_flops = inventory.get_computer_dflops(computer_id)
|
||||||
|
@ -98,9 +102,9 @@ def get_computer_value_over_time(inventory, computer_id, time_value, flops_price
|
||||||
# plt.legend(list(y_signals.keys()))
|
# plt.legend(list(y_signals.keys()))
|
||||||
# else:
|
# else:
|
||||||
# colors = ['blue', 'orange', 'green', 'purple', 'yellow']
|
# colors = ['blue', 'orange', 'green', 'purple', 'yellow']
|
||||||
# # emulating missing Axes.stackplot method
|
# # emulating missing Axes.stackplot method
|
||||||
# y = np.row_stack(list(y_signals.itervalues()))
|
# y = np.row_stack(list(y_signals.itervalues()))
|
||||||
# # this call to 'cumsum' (cumulative sum), passing in your y data,
|
# # this call to 'cumsum' (cumulative sum), passing in your y data,
|
||||||
# # is necessary to avoid having to manually order the datasets
|
# # is necessary to avoid having to manually order the datasets
|
||||||
# y_stack = np.cumsum(y, axis=0) # a 3x10 array
|
# y_stack = np.cumsum(y, axis=0) # a 3x10 array
|
||||||
# for series_index in range(len(y_signals)):
|
# for series_index in range(len(y_signals)):
|
||||||
|
@ -110,6 +114,8 @@ def get_computer_value_over_time(inventory, computer_id, time_value, flops_price
|
||||||
# from_signal = y_stack[series_index-1,:]
|
# from_signal = y_stack[series_index-1,:]
|
||||||
# ax.fill_between(x_signal, from_signal, y_stack[series_index,:], color=colors[series_index], lw=0.0, label=y_signals.keys()[series_index])
|
# ax.fill_between(x_signal, from_signal, y_stack[series_index,:], color=colors[series_index], lw=0.0, label=y_signals.keys()[series_index])
|
||||||
# plt.legend()
|
# plt.legend()
|
||||||
|
|
||||||
|
|
||||||
def stackplot(ax, x_signal, y_signals):
|
def stackplot(ax, x_signal, y_signals):
|
||||||
"""
|
"""
|
||||||
:param matplotlib.Axes ax:
|
:param matplotlib.Axes ax:
|
||||||
|
@ -117,7 +123,7 @@ def stackplot(ax, x_signal, y_signals):
|
||||||
:param dict(str,numpy.array) y_signals:
|
:param dict(str,numpy.array) y_signals:
|
||||||
"""
|
"""
|
||||||
if 'stackplot' in dir(ax):
|
if 'stackplot' in dir(ax):
|
||||||
ax.stackplot(x_signal, list(y_signals.values()) )
|
ax.stackplot(x_signal, list(y_signals.values()))
|
||||||
plt.legend(list(y_signals.keys()))
|
plt.legend(list(y_signals.keys()))
|
||||||
else:
|
else:
|
||||||
# emulating missing Axes.stackplot method
|
# emulating missing Axes.stackplot method
|
||||||
|
@ -130,21 +136,22 @@ def stackplot(ax, x_signal, y_signals):
|
||||||
if series_index == 0:
|
if series_index == 0:
|
||||||
from_signal = 0
|
from_signal = 0
|
||||||
else:
|
else:
|
||||||
from_signal = y_stack[series_index-1,:]
|
from_signal = y_stack[series_index - 1, :]
|
||||||
ax.fill_between(x_signal, from_signal, y_stack[series_index,:], color=colors[series_index], lw=0.0)
|
ax.fill_between(x_signal, from_signal, y_stack[series_index, :], color=colors[series_index], lw=0.0)
|
||||||
p = plt.Rectangle((0, 0), 0, 0, color=colors[series_index])
|
p = plt.Rectangle((0, 0), 0, 0, color=colors[series_index])
|
||||||
ax.add_patch(p)
|
ax.add_patch(p)
|
||||||
plt.legend(list(y_signals.keys()))
|
plt.legend(list(y_signals.keys()))
|
||||||
|
|
||||||
|
|
||||||
def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type):
|
def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type):
|
||||||
time_value = matplotlib.dates.drange(dstart=from_date, dend=to_date, delta=datetime.timedelta(days=1))
|
time_value = matplotlib.dates.drange(dstart=from_date, dend=to_date, delta=datetime.timedelta(days=1))
|
||||||
flops_price_over_time = get_flops_price_over_time(inventory, time_value)
|
flops_price_over_time = get_flops_price_over_time(inventory, time_value)
|
||||||
cluster_value = {}
|
cluster_value = {}
|
||||||
|
|
||||||
rows = inventory.query("SELECT * FROM machines")
|
rows = inventory.query("SELECT * FROM machines")
|
||||||
|
|
||||||
for row in rows:
|
for row in rows:
|
||||||
(name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number)=row
|
(name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number) = row
|
||||||
is_cluster_node = is_cluster_node_name(name)
|
is_cluster_node = is_cluster_node_name(name)
|
||||||
if is_cluster_node:
|
if is_cluster_node:
|
||||||
purchase_date = inventory.get_machine_purchase_date(name)
|
purchase_date = inventory.get_machine_purchase_date(name)
|
||||||
|
@ -152,9 +159,9 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type
|
||||||
# print(name, price_ex_vat)
|
# print(name, price_ex_vat)
|
||||||
purchase_time = matplotlib.dates.date2num(purchase_date.date())
|
purchase_time = matplotlib.dates.date2num(purchase_date.date())
|
||||||
item_value_over_time = {
|
item_value_over_time = {
|
||||||
'cluster_cost_over_time':get_investment_over_time(time_value, price_ex_vat, purchase_time),
|
'cluster_cost_over_time': get_investment_over_time(time_value, price_ex_vat, purchase_time),
|
||||||
'cluster_value_over_time':get_computer_value_over_time(inventory, name, time_value, flops_price_over_time, purchase_time),
|
'cluster_value_over_time': get_computer_value_over_time(inventory, name, time_value, flops_price_over_time, purchase_time),
|
||||||
'cluster_dp_gflops_over_time':get_flops_over_time(inventory, time_value, name, purchase_time)}[graph_type]
|
'cluster_dp_gflops_over_time': get_flops_over_time(inventory, time_value, name, purchase_time)}[graph_type]
|
||||||
for ownership in inventory.get_item_ownership(name):
|
for ownership in inventory.get_item_ownership(name):
|
||||||
# print(ownership)
|
# print(ownership)
|
||||||
# print(ownership['owner'], ownership['owner_ratio'])
|
# print(ownership['owner'], ownership['owner_ratio'])
|
||||||
|
@ -165,7 +172,7 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type
|
||||||
if owner_dept in cluster_value.keys():
|
if owner_dept in cluster_value.keys():
|
||||||
cluster_value[owner_dept] += item_value_over_time
|
cluster_value[owner_dept] += item_value_over_time
|
||||||
else:
|
else:
|
||||||
cluster_value[owner_dept] = item_value_over_time # np.zeros_like(time_value)
|
cluster_value[owner_dept] = item_value_over_time # np.zeros_like(time_value)
|
||||||
|
|
||||||
# print(purchase_date)
|
# print(purchase_date)
|
||||||
# print(type(from_date))
|
# print(type(from_date))
|
||||||
|
@ -175,17 +182,17 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type
|
||||||
|
|
||||||
fig, ax = plt.subplots()
|
fig, ax = plt.subplots()
|
||||||
ax.set_title(graph_type)
|
ax.set_title(graph_type)
|
||||||
#for dept, cluster_value_for_dept in cluster_value.iteritems():
|
# for dept, cluster_value_for_dept in cluster_value.iteritems():
|
||||||
# ax.plot(time_value, cluster_value_for_dept)
|
# ax.plot(time_value, cluster_value_for_dept)
|
||||||
|
|
||||||
stackplot( ax, time_value, cluster_value)
|
stackplot(ax, time_value, cluster_value)
|
||||||
|
|
||||||
plt.xlabel('time')
|
plt.xlabel('time')
|
||||||
plt.ylabel(
|
plt.ylabel({
|
||||||
{'cluster_cost_over_time':u'cluster investment (€)',
|
'cluster_cost_over_time': u'cluster investment (€)',
|
||||||
'cluster_value_over_time':u'cluster value (€)',
|
'cluster_value_over_time': u'cluster value (€)',
|
||||||
'cluster_dp_gflops_over_time':u'double prec gflops'}[graph_type])
|
'cluster_dp_gflops_over_time': u'double prec gflops'}[graph_type])
|
||||||
|
|
||||||
years = matplotlib.dates.YearLocator() # every year
|
years = matplotlib.dates.YearLocator() # every year
|
||||||
months = matplotlib.dates.MonthLocator() # every month
|
months = matplotlib.dates.MonthLocator() # every month
|
||||||
yearsFmt = matplotlib.dates.DateFormatter('%Y')
|
yearsFmt = matplotlib.dates.DateFormatter('%Y')
|
||||||
|
@ -194,7 +201,7 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type
|
||||||
ax.xaxis.set_major_locator(years)
|
ax.xaxis.set_major_locator(years)
|
||||||
ax.xaxis.set_major_formatter(yearsFmt)
|
ax.xaxis.set_major_formatter(yearsFmt)
|
||||||
ax.xaxis.set_minor_locator(months)
|
ax.xaxis.set_minor_locator(months)
|
||||||
|
|
||||||
datemin = datetime.date(from_date.year, 1, 1)
|
datemin = datetime.date(from_date.year, 1, 1)
|
||||||
datemax = datetime.date(to_date.year + 1, 1, 1)
|
datemax = datetime.date(to_date.year + 1, 1, 1)
|
||||||
ax.set_xlim(datemin, datemax)
|
ax.set_xlim(datemin, datemax)
|
||||||
|
@ -203,18 +210,19 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type
|
||||||
# axes up to make room for them
|
# axes up to make room for them
|
||||||
# fig.autofmt_xdate()
|
# fig.autofmt_xdate()
|
||||||
ax.grid(True)
|
ax.grid(True)
|
||||||
|
|
||||||
#plt.plot()
|
# plt.plot()
|
||||||
# plt.plot(X,S)
|
# plt.plot(X,S)
|
||||||
return fig
|
return fig
|
||||||
|
|
||||||
|
|
||||||
def draw_dp_gflops_price_over_time_over_time_graph(inventory, from_date, to_date):
|
def draw_dp_gflops_price_over_time_over_time_graph(inventory, from_date, to_date):
|
||||||
"""
|
"""
|
||||||
:param Inventory inventory: the inventory database
|
:param Inventory inventory: the inventory database
|
||||||
:param datetime from_time:
|
:param datetime from_time:
|
||||||
:param datetime to_time:
|
:param datetime to_time:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
time_value = matplotlib.dates.drange(dstart=from_date, dend=to_date, delta=datetime.timedelta(days=1))
|
time_value = matplotlib.dates.drange(dstart=from_date, dend=to_date, delta=datetime.timedelta(days=1))
|
||||||
gflops_price_over_time = get_flops_price_over_time(inventory, time_value) * 1.0e9
|
gflops_price_over_time = get_flops_price_over_time(inventory, time_value) * 1.0e9
|
||||||
fig, ax = plt.subplots()
|
fig, ax = plt.subplots()
|
||||||
|
@ -223,7 +231,7 @@ def draw_dp_gflops_price_over_time_over_time_graph(inventory, from_date, to_date
|
||||||
ax.set_xlabel('time')
|
ax.set_xlabel('time')
|
||||||
ax.set_ylabel(u'double precision flops price (€/gflops)')
|
ax.set_ylabel(u'double precision flops price (€/gflops)')
|
||||||
ax.set_title('gflops_price_over_time')
|
ax.set_title('gflops_price_over_time')
|
||||||
|
|
||||||
years = matplotlib.dates.YearLocator() # every year
|
years = matplotlib.dates.YearLocator() # every year
|
||||||
months = matplotlib.dates.MonthLocator() # every month
|
months = matplotlib.dates.MonthLocator() # every month
|
||||||
yearsFmt = matplotlib.dates.DateFormatter('%Y')
|
yearsFmt = matplotlib.dates.DateFormatter('%Y')
|
||||||
|
@ -235,6 +243,7 @@ def draw_dp_gflops_price_over_time_over_time_graph(inventory, from_date, to_date
|
||||||
ax.grid(True)
|
ax.grid(True)
|
||||||
return fig
|
return fig
|
||||||
|
|
||||||
|
|
||||||
def draw_age_pyramid_graph(inventory):
|
def draw_age_pyramid_graph(inventory):
|
||||||
"""
|
"""
|
||||||
:param Inventory inventory: the inventory database
|
:param Inventory inventory: the inventory database
|
||||||
|
@ -246,12 +255,12 @@ def draw_age_pyramid_graph(inventory):
|
||||||
rows = inventory.query("SELECT * FROM machines")
|
rows = inventory.query("SELECT * FROM machines")
|
||||||
|
|
||||||
for row in rows:
|
for row in rows:
|
||||||
(name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number)=row
|
(name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number) = row
|
||||||
is_cluster_node = is_cluster_node_name(name)
|
is_cluster_node = is_cluster_node_name(name)
|
||||||
if is_cluster_node:
|
if is_cluster_node:
|
||||||
purchase_date = inventory.get_machine_purchase_date(name)
|
purchase_date = inventory.get_machine_purchase_date(name)
|
||||||
if purchase_date is not None:
|
if purchase_date is not None:
|
||||||
purchase_time = matplotlib.dates.date2num(purchase_date.date())
|
purchase_time = matplotlib.dates.date2num(purchase_date.date()) # noqa: F841
|
||||||
age = datetime.datetime.now() - purchase_date
|
age = datetime.datetime.now() - purchase_date
|
||||||
age_histogram[age.days / 365] += 1
|
age_histogram[age.days / 365] += 1
|
||||||
# print(name, age)
|
# print(name, age)
|
||||||
|
@ -260,10 +269,10 @@ def draw_age_pyramid_graph(inventory):
|
||||||
ax.bar(range(oldest_age), age_histogram)
|
ax.bar(range(oldest_age), age_histogram)
|
||||||
ax.set_xlabel('age (in years)')
|
ax.set_xlabel('age (in years)')
|
||||||
ax.set_xticks(range(oldest_age))
|
ax.set_xticks(range(oldest_age))
|
||||||
|
|
||||||
ax.set_ylabel(u'number of compute nodes')
|
ax.set_ylabel(u'number of compute nodes')
|
||||||
ax.set_title('compute_nodes_age_pyramid')
|
ax.set_title('compute_nodes_age_pyramid')
|
||||||
|
|
||||||
# format the ticks
|
# format the ticks
|
||||||
ax.grid(True)
|
ax.grid(True)
|
||||||
return fig
|
return fig
|
||||||
|
@ -273,14 +282,14 @@ class IFigureHandler(object):
|
||||||
"""
|
"""
|
||||||
specifies what to do with generated figures
|
specifies what to do with generated figures
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def on_figure_ended(self, fig):
|
def on_figure_ended(self, fig):
|
||||||
"""
|
"""
|
||||||
:param matplotlib.Figure fig:
|
:param matplotlib.Figure fig:
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def on_finalize(self):
|
def on_finalize(self):
|
||||||
"""
|
"""
|
||||||
|
@ -288,44 +297,45 @@ class IFigureHandler(object):
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ScreenFigureHandler(IFigureHandler):
|
class ScreenFigureHandler(IFigureHandler):
|
||||||
"""
|
"""
|
||||||
displays figures on screen
|
displays figures on screen
|
||||||
"""
|
"""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def on_figure_ended(self, fig):
|
def on_figure_ended(self, fig):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def on_finalize(self):
|
def on_finalize(self):
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
class SvgFigureHandler(IFigureHandler):
|
class SvgFigureHandler(IFigureHandler):
|
||||||
"""
|
"""
|
||||||
saves figures as svg files
|
saves figures as svg files
|
||||||
"""
|
"""
|
||||||
def __init__(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def __init__(self, out_svg_dir_path):
|
def __init__(self, out_svg_dir_path):
|
||||||
"""
|
"""
|
||||||
:param str out_svg_dir_path: where to save the svg files
|
:param str out_svg_dir_path: where to save the svg files
|
||||||
"""
|
"""
|
||||||
self._out_svg_dir_path = out_svg_dir_path
|
self._out_svg_dir_path = out_svg_dir_path
|
||||||
|
|
||||||
def on_figure_ended(self, fig):
|
def on_figure_ended(self, fig):
|
||||||
fig.savefig(self._out_svg_dir_path + '/' + fig.axes[0].get_title() + '.svg')
|
fig.savefig(self._out_svg_dir_path + '/' + fig.axes[0].get_title() + '.svg')
|
||||||
|
|
||||||
def on_finalize(self):
|
def on_finalize(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def draw_graphs(inventory, from_time, to_time, figure_handler):
|
def draw_graphs(inventory, from_time, to_time, figure_handler):
|
||||||
"""
|
"""
|
||||||
:param Inventory inventory: the inventory database
|
:param Inventory inventory: the inventory database
|
||||||
:param datetime from_time:
|
:param datetime from_time:
|
||||||
:param datetime to_time:
|
:param datetime to_time:
|
||||||
:param IFigureHandler figure_handler:
|
:param IFigureHandler figure_handler:
|
||||||
"""
|
"""
|
||||||
fig = draw_cluster_value_over_time_graph(inventory, from_time.date(), to_time.date(), 'cluster_value_over_time')
|
fig = draw_cluster_value_over_time_graph(inventory, from_time.date(), to_time.date(), 'cluster_value_over_time')
|
||||||
figure_handler.on_figure_ended(fig)
|
figure_handler.on_figure_ended(fig)
|
||||||
|
|
Loading…
Reference in New Issue