예제 #1
0
def gen_xes_log_dev(events_lists):
    traces = [([{
        "concept:name": e,
        "org:resource": "actor",
        "lifecycle:transition": "complete"
    } for e in events_list], d) for events_list, d in events_lists]

    startTime = datetime.datetime.now(datetime.timezone.utc)

    log = xes.Log()
    for i, (trace, deviance) in enumerate(traces):
        t = gen_trace(trace, deviance)

        t.add_attribute(
            xes.Attribute(type="string",
                          key="concept:name",
                          value="trace_" + str(i)))

        t.add_attribute(
            xes.Attribute(type="int",
                          key="Label",
                          value=str(1) if deviance else str(0)))
        log.add_trace(t)

    log.add_global_event_attribute(
        xes.Attribute(type="date",
                      key="time:timestamp",
                      value=startTime.astimezone().isoformat()))
    log.add_global_trace_attributes(
        xes.Attribute(type="int", key="Label", value="0"))

    open("multi.xes", "w").write(str(log))
예제 #2
0
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
예제 #3
0
 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
예제 #4
0
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])
예제 #5
0
 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
예제 #6
0
def create_xes_log(config):
    xes_log = xes.Log()
    # Add log attributes
    xes_log.add_global_event_attribute(
        xes.Attribute(type="date",
                      key="time:timestamp",
                      value=datetime.datetime.now().astimezone().isoformat()))
    #xes_log.add_global_trace_attributes(xes.Attribute(type="int", key="Label", value="0")) # For deviant, nondeviant case.
    xes_log.add_global_trace_attributes(
        xes.Attribute(
            type=config["type"],
            key=config["label"],
            value=config["nondeviant"]))  # For deviant, nondeviant case.

    return xes_log
예제 #7
0
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
예제 #8
0
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
예제 #9
0
    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
예제 #10
0
def generate_XES(events=None, log_path='log.xes'):
    # Borrow from the XES example at https://github.com/maxsumrall/xes
    log = xes.Log()

    global action_log
    if events is None:
        events = copy(action_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

    for ev_index in range(len(events)):
        event_set = events[ev_index]
        trace = xes.Trace()
        trace.add_attribute(
            xes.Attribute(type="int", key="trace_id", value=str(ev_index + 1)))
        [
            trace.add_event(makeEvent(logged_event))
            for logged_event in event_set
        ]
        log.add_trace(trace)

    log.classifiers = [
        xes.Classifier(name="org:resource", keys="org:resource"),
        xes.Classifier(name="concept:name", keys="concept:name")
    ]

    with open(log_path, 'w') as log_file:
        log_file.write(str(log))
예제 #11
0
파일: g2xes.py 프로젝트: wsgan001/PMTools
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()
예제 #12
0
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))