def log(): log = XFactory.create_log() # add log classifier clf = XEventNameClassifier() log.get_classifiers().append(clf) # add global trace attributes glb_t_attr = XFactory.create_attribute_discrete('glb_t_attr', 0) log.get_global_trace_attributes().append(glb_t_attr) # add global event attributes glb_e_attr = XFactory.create_attribute_discrete('glb_e_attr', 0) log.get_global_event_attributes().append(glb_e_attr) # add log attributes str_attr = XFactory.create_attribute_literal('l_attr', 'UNKNOWN') log.get_attributes()['l_attr'] = str_attr # add extension meta_concept = XExtensionParser().parse( "http://www.xes-standard.org/meta_concept.xesext") log.get_extensions().add(meta_concept) # add a trace tracelen = 2 trace0 = XFactory.create_trace() # add some trace attributes bool_attr = XFactory.create_attribute_boolean('t_attr', True) # add some trace features trace0.get_attributes()['t_attr'] = bool_attr for i in range(tracelen): event = XFactory.create_event() # add an attribute int_attr = XFactory.create_attribute_discrete('e_attr', 0) event.get_attributes()['e_attr0'] = int_attr trace0.append(event) log.append(trace0) return log
def test_parsed_log_has_extensions(self): export_log(self.log, 'log.xes') # register new extension meta_concept = XExtensionParser().parse( "http://www.xes-standard.org/meta_concept.xesext") XExtensionManager().register(meta_concept) log = self.read_log('log.xes') exts = log.get_extensions() assert len(exts) == 1 ext = exts.pop() assert ext.get_name() == 'MetaData_Concept'
def load_extension_cache(self): """Loads all extensions stored in the local cache. Cached extensions which exceed the maximum caching age are discarded, and downloaded freshly. """ min_modified = (lambda: int(round(time.time() * 1000)))() - 2592000000 ext_folder = XRuntimeUtils().get_extension_cache_folder() ext_files = list(filter(os.path.isfile, os.listdir(ext_folder))) if len(ext_files) == 0: XLogging().log( "Extension caching disabled (Could not access cache" " directory)!", XLogging.Importance.WARNING) return for i in range(len(ext_files)): ext_file = ext_files[i] if ext_file.lower().endswith(".xesext"): file_name = ext_folder + os.path.sep + ext_file if os.path.getmtime(file_name) * 1000 < min_modified: if os.path.exists(file_name): os.remove(file_name) else: try: extension = XExtensionParser.parse(file_name) if extension.get_uri() not in self.__extension_map: self.__extension_map[ extension.get_uri()] = extension self.__extension_list.append(extension) XLogging().log( "Loaded XES extension \'" + extension.get_uri().geturl() + "\' from cache", XLogging.Importance.DEBUG) else: XLogging().log( "Skipping cached XES extension \'" + extension.get_uri().geturl() + "\' (already defined)", XLogging.Importance.DEBUG) except Exception as e: print("Exception error: {}".format(e))
# reference: https://github.com/opyenxes/OpyenXes/tree/2018-bpm-demo/example # outputs: case information # (1) case_id # (2) case_execution_time # (3) case_execution_time_seconds # (4) num_of_events import pandas as pd from opyenxes.extension.XExtensionParser import XExtensionParser from opyenxes.extension.XExtensionManager import XExtensionManager from opyenxes.data_in.XUniversalParser import XUniversalParser # We must parse the new extension, can be the link or the xml file print("[info] XExtensionParser starts the extension parsing") meta_general = XExtensionParser().parse("http://www.xes-standard.org/meta_general.xesext") meta_concept = XExtensionParser().parse("http://www.xes-standard.org/meta_concept.xesext") meta_time = XExtensionParser().parse("http://www.xes-standard.org/meta_time.xesext") ext_concept = XExtensionParser().parse("http://www.xes-standard.org/concept.xesext") ext_time = XExtensionParser().parse("http://www.xes-standard.org/time.xesext") ext_lifecycle = XExtensionParser().parse("http://www.xes-standard.org/lifecycle.xesext") print("[info] XExtensionParser completed the extension parsing") # Then we register the new extension print("[info] XExtensionManager starts the registration of extensions") XExtensionManager().register(meta_general) XExtensionManager().register(meta_concept) XExtensionManager().register(meta_time) XExtensionManager().register(ext_concept) XExtensionManager().register(ext_time) XExtensionManager().register(ext_lifecycle)
from opyenxes.data_in.XUniversalParser import XUniversalParser from opyenxes.extension.XExtensionParser import XExtensionParser from opyenxes.extension.XExtensionManager import XExtensionManager with open("xes_file/example_with_new_extension.xes") as file: logs = XUniversalParser().parse(file) # The console will print: """ > Unknown extension: http://www.xes-standard.org/meta_concept.xesext > Unknown extension: http://www.xes-standard.org/meta_general.xesext """ # We must parse the new extension, can be the link or the xml file meta_concept = XExtensionParser().parse( "http://www.xes-standard.org/meta_concept.xesext") meta_general = XExtensionParser().parse("xes_file/meta_general.xesext.xml") # Then we register the new extension XExtensionManager().register(meta_concept) XExtensionManager().register(meta_general) # Now we can parse again with open("xes_file/example_with_new_extension.xes") as file: logs = XUniversalParser().parse(file)