history: track and report total job statistics
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
f38cacd513
commit
4b13af4d86
|
@ -12,6 +12,16 @@ class History:
|
||||||
self.file_manager = self.server.lookup_component('file_manager')
|
self.file_manager = self.server.lookup_component('file_manager')
|
||||||
database = self.server.lookup_component("database")
|
database = self.server.lookup_component("database")
|
||||||
self.gcdb = database.wrap_namespace("gcode_metadata", parse_keys=False)
|
self.gcdb = database.wrap_namespace("gcode_metadata", parse_keys=False)
|
||||||
|
self.job_totals = database.get_item(
|
||||||
|
"moonraker", "history.job_totals",
|
||||||
|
{
|
||||||
|
'total_jobs': 0,
|
||||||
|
'total_time': 0.,
|
||||||
|
'total_print_time': 0.,
|
||||||
|
'total_filament_used': 0.,
|
||||||
|
'longest_job': 0.,
|
||||||
|
'longest_print': 0.
|
||||||
|
})
|
||||||
|
|
||||||
self.server.register_event_handler(
|
self.server.register_event_handler(
|
||||||
"server:klippy_ready", self._init_ready)
|
"server:klippy_ready", self._init_ready)
|
||||||
|
@ -27,6 +37,8 @@ class History:
|
||||||
"/server/history/job", ['GET', 'DELETE'], self._handle_job_request)
|
"/server/history/job", ['GET', 'DELETE'], self._handle_job_request)
|
||||||
self.server.register_endpoint(
|
self.server.register_endpoint(
|
||||||
"/server/history/list", ['GET'], self._handle_jobs_list)
|
"/server/history/list", ['GET'], self._handle_jobs_list)
|
||||||
|
self.server.register_endpoint(
|
||||||
|
"/server/history/totals", ['GET'], self._handle_job_totals)
|
||||||
|
|
||||||
database.register_local_namespace(HIST_NAMESPACE)
|
database.register_local_namespace(HIST_NAMESPACE)
|
||||||
self.history_ns = database.wrap_namespace(HIST_NAMESPACE,
|
self.history_ns = database.wrap_namespace(HIST_NAMESPACE,
|
||||||
|
@ -104,6 +116,9 @@ class History:
|
||||||
|
|
||||||
return {"count": end_num - start_num, "jobs": jobs}
|
return {"count": end_num - start_num, "jobs": jobs}
|
||||||
|
|
||||||
|
async def _handle_job_totals(self, web_request):
|
||||||
|
return {'job_totals': self.job_totals}
|
||||||
|
|
||||||
async def _status_update(self, data):
|
async def _status_update(self, data):
|
||||||
ps = data.get("print_stats", {})
|
ps = data.get("print_stats", {})
|
||||||
if "state" in ps:
|
if "state" in ps:
|
||||||
|
@ -171,6 +186,7 @@ class History:
|
||||||
# Regrab metadata incase metadata wasn't parsed yet due to file upload
|
# Regrab metadata incase metadata wasn't parsed yet due to file upload
|
||||||
self.grab_job_metadata()
|
self.grab_job_metadata()
|
||||||
self.save_current_job()
|
self.save_current_job()
|
||||||
|
self._update_job_totals()
|
||||||
self.send_history_event("finished")
|
self.send_history_event("finished")
|
||||||
self.current_job = None
|
self.current_job = None
|
||||||
self.current_job_id = None
|
self.current_job_id = None
|
||||||
|
@ -205,6 +221,22 @@ class History:
|
||||||
def save_current_job(self):
|
def save_current_job(self):
|
||||||
self.history_ns[self.current_job_id] = self.current_job.get_stats()
|
self.history_ns[self.current_job_id] = self.current_job.get_stats()
|
||||||
|
|
||||||
|
def _update_job_totals(self):
|
||||||
|
if self.current_job is None:
|
||||||
|
return
|
||||||
|
job = self.current_job
|
||||||
|
self.job_totals['total_jobs'] += 1
|
||||||
|
self.job_totals['total_time'] += job.get('total_duration')
|
||||||
|
self.job_totals['total_print_time'] += job.get('print_duration')
|
||||||
|
self.job_totals['total_filament_used'] += job.get('filament_used')
|
||||||
|
self.job_totals['longest_job'] = max(
|
||||||
|
self.job_totals['longest_job'], job.get('total_duration'))
|
||||||
|
self.job_totals['longest_print'] = max(
|
||||||
|
self.job_totals['longest_print'], job.get('print_duration'))
|
||||||
|
database = self.server.lookup_component("database")
|
||||||
|
database.insert_item(
|
||||||
|
"moonraker", "history.job_totals", self.job_totals)
|
||||||
|
|
||||||
def send_history_event(self, evt_action):
|
def send_history_event(self, evt_action):
|
||||||
job = self._prep_requested_job(
|
job = self._prep_requested_job(
|
||||||
self.current_job.get_stats(), self.current_job_id)
|
self.current_job.get_stats(), self.current_job_id)
|
||||||
|
|
Loading…
Reference in New Issue