def gen_trace(trace, deviant): startTime = datetime.datetime.now(datetime.timezone.utc) currentTime = startTime t = xes.Trace() for i, event in enumerate(trace): if (i == len(trace) - 1): if deviant: currentTime = startTime + datetime.timedelta(minutes=150) else: currentTime = startTime + datetime.timedelta(minutes=10) e = xes.Event() e.attributes = [ xes.Attribute(type="date", key="time:timestamp", value=currentTime.astimezone().isoformat()), xes.Attribute(type="string", key="concept:name", value=event["concept:name"]), xes.Attribute(type="string", key="org:resource", value=event["org:resource"]), xes.Attribute(type="string", key="lifecycle:transition", value=event["lifecycle:transition"]) ] t.add_event(e) return t
def event_post_liked(resource_id, post): e = xes.Event() e.attributes = [ xes.Attribute(type="string", key="concept:name", value="post_liked"), xes.Attribute(type="string", key="org:resource", value=str(resource_id)), xes.Attribute(type="string", key="post:id", value=str(post.id)), xes.Attribute(type="string", key="post:type", value=str(post.type)), xes.Attribute(type="string", key="post:is_ads", value=str(post.is_ads)), xes.Attribute(type="date", key="post:date", value=datetime.fromtimestamp(post.date).astimezone( timezone.utc).isoformat()), xes.Attribute(type="string", key="owner:id", value=str(post.owner_id)), xes.Attribute(type="date", key="time:timestamp", value=datetime.now(timezone.utc).isoformat()) ] return e
def create_xes_trace(trace_dict): xes_trace = xes.Trace() ## Add trace metadata trace_name = trace_dict["name"] deviant = trace_dict["deviant"] xes_trace.add_attribute(xes.Attribute(type="string", key="concept:name", value=trace_name)) xes_trace.add_attribute(xes.Attribute(type="int", key="Label", value=str(1) if deviant else str(0))) ## Add events events = trace_dict["events"] for event in events: event_timestamp = event["timestamp"] event_name = event["concept:name"] event_resource = event["org:resource"] event_lifecycle = event["lifecycle:transition"] xes_event = xes.Event() xes_event.attributes = [ xes.Attribute(type="date", key="time:timestamp", value=event_timestamp), xes.Attribute(type="string", key="concept:name", value=event_name), xes.Attribute(type="string", key="org:resource", value=event_resource), xes.Attribute(type="string", key="lifecycle:transition", value=event_lifecycle) ] xes_trace.add_event(xes_event) return xes_trace
def event_offline(resource_id): e = xes.Event() e.attributes = [ xes.Attribute(type="string", key="concept:name", value="offline"), xes.Attribute(type="string", key="org:resource", value=str(resource_id)), xes.Attribute(type="date", key="time:timestamp", value=datetime.now(timezone.utc).isoformat()) ] return e
def main(): for arg in sys.argv: print(arg) if len(sys.argv) < 6: print("Incorrect number of arguments: " + str(len(sys.argv))) usage() return 0 try: inputPath = sys.argv[1] resourceLabel = sys.argv[2].split("=")[1].strip() activityLabel = sys.argv[3].split("=")[1].strip() traceLabel = sys.argv[4].split("=")[1].strip() outputPath = sys.argv[5] #print(resourceLabel,inputPath,activityLabel,traceLabel,outputPath) open(inputPath, "r").close() traces = BuildTraces(inputPath, resourceLabel, activityLabel, traceLabel) log = xes.Log() #add the trace to the xes log, just like in the xes developer's github example for traceId in traces.keys(): t = xes.Trace() t.attributes = [ xes.Attribute(type="string", key="concept:name", value=traceId) ] #add the events to the trace for event in traces[traceId]: e = xes.Event() e.attributes = [ xes.Attribute(type="string", key="concept:name", value=event[1]), xes.Attribute(type="string", key="Activity", value=event[1]), xes.Attribute(type="string", key="org:resource", value=event[0]), xes.Attribute(type="string", key="Actor", value=event[0]) ] t.add_event(e) #add the trace log.add_trace(t) log.classifiers = [ xes.Classifier(name="org:resource", keys="org:resource"), xes.Classifier(name="concept:name", keys="concept:name") ] #write the log open(outputPath, "w+").write(str(log)) except IOError: print("Input file not found: " + sys.argv[1])
def BuildXesLog(traces): log = xes.Log() i = 0 for trace in traces: #the name of the trace is just the trace number traceName = str(trace[0]) #add the anomaly status of the trace; this likely won't be used by any ProM or process-discovery tools, but is worth preserving isAnomalous = str(trace[1]) #build the trace info t = xes.Trace() traceNameAttr = xes.Attribute(type="string", key="concept:name", value=traceName) traceIsAnomalousAttr = xes.Attribute(type="string", key="concept:isAnomalous", value=isAnomalous) #store both the trace name and the anomaly-status in the trace attributes t.attributes = [traceNameAttr, traceIsAnomalousAttr] #add the events to the trace; the event sequence is just an ordered sequence of characters with no other info for eventName in trace[2]: e = xes.Event() e.attributes = [ xes.Attribute(type="string", key="concept:name", value=eventName), xes.Attribute(type="string", key="Activity", value=eventName) #xes.Attribute(type="string", key="Activity", value=eventName) ] t.add_event(e) #add the trace log.add_trace(t) #print("here: "+str(i)+" of "+str(len(traces))) i += 1 #add the classifiers log.classifiers = [ #xes.Classifier(name="org:resource",keys="org:resource"), #xes.Classifier(name="concept:name",keys="concept:name") #xes.Classifier(name="concept:traceName",keys="concept:traceName"), #xes.Classifier(name="concept:isAnomalous",keys="concept:isAnomalous") xes.Classifier(name="Activity", keys="Activity"), xes.Classifier(name="concept:name", keys="concept:name") ] return log
def makeEvent(logged_event): event = xes.Event() event.attributes = [ xes.Attribute(type="string", key="concept:name", value=logged_event[1]), xes.Attribute(type="string", key="org:resource", value=logged_event[0]) ] if len(logged_event) == 4: event.attributes.append( xes.Attribute(type="string", key="concept:required_privileges_for_action", value=logged_event[2])) event.attributes.append( xes.Attribute(type="string", key="concept:actor_class", value=logged_event[3])) return event
def WriteXes(traces, outputPath): log = xes.Log() #print("TRACES: "+str(traces)) #add the trace to the xes log, just like in the xes developer's github example for trace in traces: t = xes.Trace() t.attributes = [ xes.Attribute(type="string", key="concept:name", value=trace[1]) ] #add the events to the trace for event in trace[2]: e = xes.Event() e.attributes = [ xes.Attribute(type="string", key="concept:name", value=event["concept:name"]), xes.Attribute(type="string", key="Activity", value=event["concept:name"]), xes.Attribute(type="string", key="org:resource", value=event["org:resource"]), xes.Attribute(type="string", key="Actor", value=event["org:resource"]) ] t.add_event(e) #add the trace log.add_trace(t) log.classifiers = [ xes.Classifier(name="org:resource", keys="org:resource"), xes.Classifier(name="concept:name", keys="concept:name") ] #write the log of = open(outputPath, "w+") of.write(str(log)) of.close()
def gen_xes_log(events_lists, deviant): traces = [[{ "concept:name": e, "org:resource": "actor" } for e in events_list] for events_list, _ in events_lists] startTime = datetime.datetime.now() log = xes.Log() for trace in traces: currentTime = startTime t = xes.Trace() for i, event in enumerate(trace): if event["concept:name"] == deviant: currentTime += datetime.timedelta(minutes=60) else: currentTime += datetime.timedelta(minutes=5) e = xes.Event() e.attributes = [ xes.Attribute(type="date", key="time:timestamp", value=currentTime.isoformat()), xes.Attribute(type="string", key="concept:name", value=event["concept:name"]), xes.Attribute(type="string", key="org:resource", value=event["org:resource"]), xes.Attribute(type="string", key="lifecycle:transition", value=event["lifecycle:transition"]) ] t.add_event(e) log.add_trace(t) open("example.xes", "w").write(str(log))