def replay_prediction(replay_job: Job, training_initial_job: Job, trace_id) -> list: """The function create a set with timestamps of events, then create a list of requests simulating the log in the time passing :param trace_id: :param replay_job: job dictionary :param training_initial_job: job dictionary :return: List of requests """ split = replay_job.split log = get_log(split.train_log) requests_list = list() eventlog = EventLog() trace = log[int(trace_id)] for key in log.attributes.keys(): eventlog.attributes[key] = log.attributes[key] for index in range(len(trace)): new_trace = Trace(trace[0:index]) for key in trace.attributes: new_trace.attributes[key] = trace.attributes[key] eventlog.append(new_trace) replay_job.case_id = trace_id replay_job.event_number = len(trace) replay_job.save() try: logger.error("Sending request for replay_prediction task.") r = requests.post( url="http://127.0.0.1:8000/runtime/replay_prediction/", data=export_log_as_string(eventlog), params={ 'jobId': replay_job.id, 'training_job': training_initial_job.id }, headers={ 'Content-Type': 'text/plain', 'charset': 'UTF-8' }) requests_list.append(str(r)) except Exception as e: requests_list.append(str(e)) logger.warning(str(e)) return requests_list
def replay_prediction_task(replay_prediction_job: Job, training_initial_job: Job, log: Log): """ The function create a replat prediction task to ask a single prediction to the server for a portion of a trace :param replay_prediction_job: job dictionary :param training_initial_job: job dictionary :param log: job dictionary """ logger.info("Start replay_prediction task ID {}".format(replay_prediction_job.id)) try: replay_prediction_job.status = JobStatuses.RUNNING.value replay_prediction_job.save() max_len = max(len(trace) for trace in log) if replay_prediction_job.encoding.prefix_length != max_len: prediction_job = create_prediction_job(training_initial_job, max_len) prediction_task(prediction_job.id) prediction_job.refresh_from_db() new_replay_prediction_job = duplicate_orm_row(prediction_job) new_replay_prediction_job.split = Split.objects.filter(pk=replay_prediction_job.split.id)[0] new_replay_prediction_job.type = JobTypes.REPLAY_PREDICT.value new_replay_prediction_job.parent_job = replay_prediction_job.parent_job new_replay_prediction_job.status = JobStatuses.CREATED.value replay_prediction_task(new_replay_prediction_job, prediction_job, log) return result_dict, events_for_trace = replay_prediction_calculate(replay_prediction_job, log) replay_prediction_job.results = dict(result_dict) replay_prediction_job.event_number = dict(events_for_trace) replay_prediction_job.status = JobStatuses.COMPLETED.value replay_prediction_job.error = '' except Exception as e: logger.error(e) replay_prediction_job.status = JobStatuses.ERROR.value replay_prediction_job.error = str(e.__repr__()) raise e finally: replay_prediction_job.save() publish(replay_prediction_job)
def replay_prediction_task(replay_prediction_job: Job, training_initial_job: Job, log: Log): """ The function create a replat prediction task to ask a single prediction to the server for a portion of a trace :param replay_prediction_job: job dictionary :param training_initial_job: job dictionary :param log: job dictionary """ logger.info("Start replay_prediction task ID {}".format( replay_prediction_job.id)) try: replay_prediction_job.status = JobStatuses.RUNNING.value replay_prediction_job.save() max_len = max(len(trace) for trace in log) if replay_prediction_job.encoding.prefix_length != max_len: prediction_job = create_prediction_job(training_initial_job, max_len) prediction_task(prediction_job.id) prediction_job.refresh_from_db() # new_replay_prediction_job = duplicate_orm_row(prediction_job) #todo: replace with simple CREATE new_replay_prediction_job = Job.objects.create( created_date=prediction_job.created_date, modified_date=prediction_job.modified_date, error=prediction_job.error, status=prediction_job.status, type=prediction_job.type, create_models=prediction_job.create_models, case_id=prediction_job.case_id, event_number=prediction_job.event_number, gold_value=prediction_job.gold_value, results=prediction_job.results, parent_job=prediction_job.parent_job, split=prediction_job.split, encoding=prediction_job.encoding, labelling=prediction_job.labelling, clustering=prediction_job.clustering, predictive_model=prediction_job.predictive_model, evaluation=prediction_job.evaluation, hyperparameter_optimizer=prediction_job. hyperparameter_optimizer, incremental_train=prediction_job.incremental_train) new_replay_prediction_job.split = Split.objects.filter( pk=replay_prediction_job.split.id)[0] new_replay_prediction_job.type = JobTypes.REPLAY_PREDICT.value new_replay_prediction_job.parent_job = replay_prediction_job.parent_job new_replay_prediction_job.status = JobStatuses.CREATED.value replay_prediction_task(new_replay_prediction_job, prediction_job, log) return result_dict, events_for_trace = replay_prediction_calculate( replay_prediction_job, log) replay_prediction_job.results = dict(result_dict) replay_prediction_job.event_number = dict(events_for_trace) replay_prediction_job.status = JobStatuses.COMPLETED.value replay_prediction_job.error = '' except Exception as e: logger.error(e) replay_prediction_job.status = JobStatuses.ERROR.value replay_prediction_job.error = str(e.__repr__()) raise e finally: replay_prediction_job.save() publish(replay_prediction_job)
def replay_core(replay_job: Job, training_initial_job: Job) -> list: """The function create a set with timestamps of events, then create a list of requests simulating the log in the time passing :param replay_job: job dictionary :param training_initial_job: job dictionary :return: List of requests """ split = replay_job.split log = get_log(split.train_log) requests_list = list() eventlog = EventLog() for key in log.attributes.keys(): eventlog.attributes[key] = log.attributes[key] for trace in log: new_trace = Trace(trace) for key in trace.attributes: new_trace.attributes[key] = trace.attributes[key] eventlog.append(new_trace) times = sorted( set([event['time:timestamp'] for trace in eventlog for event in trace])) for t in times[2::int((len(times) - 2) / 5)]: filtered_eventlog = timestamp_filter.apply_events( eventlog, times[0].replace(tzinfo=None), t.replace(tzinfo=None)) trace_list = list() event_number = dict() for trace in filtered_eventlog: trace_list.append(trace.attributes['concept:name']) event_number[trace.attributes['concept:name']] = len(trace) replay_job.case_id = trace_list replay_job.event_number = event_number replay_job.save() try: #TODO check logger usage logger.info("Sending request for replay_prediction task.") r = requests.post( url="http://server:8000/runtime/replay_prediction/", data=export_log_as_string(filtered_eventlog), params={ 'jobId': replay_job.id, 'training_job': training_initial_job.id }, headers={ 'Content-Type': 'text/plain', 'charset': 'UTF-8' }) requests_list.append(str(r)) except Exception as e: requests_list.append(str(e)) logger.warning(str(e)) training_log, test_log, additional_columns = get_train_test_log( replay_job.split) training_df, _ = encode_label_logs(training_log, test_log, replay_job, additional_columns=additional_columns) gold_values = dict(zip(training_df['trace_id'], training_df['label'])) parent_id = replay_job.id # final_job = duplicate_orm_row(replay_job) #todo: replace with simple CREATE final_job = Job.objects.create( created_date=replay_job.created_date, modified_date=replay_job.modified_date, error=replay_job.error, status=replay_job.status, type=replay_job.type, create_models=replay_job.create_models, case_id=replay_job.case_id, event_number=replay_job.event_number, gold_value=replay_job.gold_value, results=replay_job.results, parent_job=replay_job.parent_job, split=replay_job.split, encoding=replay_job.encoding, labelling=replay_job.labelling, clustering=replay_job.clustering, predictive_model=replay_job.predictive_model, evaluation=replay_job.evaluation, hyperparameter_optimizer=replay_job.hyperparameter_optimizer, incremental_train=replay_job.incremental_train) final_job.parent_job = Job.objects.filter(pk=parent_id)[0] final_job.gold_value = gold_values final_job.type = JobTypes.REPLAY_PREDICT.value final_job.save() return requests_list