public static Log ParseLog(LogStandard logStandard, string xml) { var log = new Log(); XNamespace ns = logStandard.Namespace; XDocument doc = XDocument.Parse(xml); int eventId = 0; foreach (XElement traceElement in doc.Root.Elements(ns + logStandard.TraceIdentifier).Where(element => element.HasElements)) { var trace = new LogTrace() {Id = traceElement.GetValue(ns, logStandard.TraceIdIdentifier) }; foreach (XElement eventElement in traceElement.Elements(ns + logStandard.EventIdentifier).Where(element => element.HasElements)) { trace.Add(new LogEvent(eventElement.GetValue(ns, logStandard.EventIdIdentifier), eventElement.GetValue(ns, logStandard.EventNameIdentifier)) { EventId = eventId++.ToString(), ActorName = string.IsNullOrEmpty(logStandard.ActorNameIdentifier.Name) ? "" : eventElement.GetValue(ns, logStandard.ActorNameIdentifier) }); } log.AddTrace(trace); } return log; }
public LogTrace TraceGenerator() { var trace = new LogTrace(); trace.Id = Guid.NewGuid().ToString(); //reset the graph. DcrGraph graph = _inputGraph.Copy(); graph.Running = true; var id = 0; while (true) { var runnables = graph.GetRunnableActivities(); if (runnables.Count == 0) break; //run a random activity and add it to the log. var name = RunRandomActivity(runnables, graph); trace.Add(new LogEvent(name,name) {EventId = id++.ToString()}); //if we can stop and if(graph.IsFinalState() && _rnd.Next(100) < _terminationIndex) break; if (trace.Events.Count >= 10000) { throw new InvalidDataException("The graph is unhealthy, so it is not possible to generate a log."); } } trace.IsFinished = true; return trace; }
public LogTrace Copy() { var copy = new LogTrace { Id = Id, IsFinished = IsFinished }; foreach (var logEvent in Events) { copy.Add(new LogEvent(logEvent.IdOfActivity, logEvent.Name) { EventId = logEvent.EventId, ActorName = logEvent.ActorName, RoleName = logEvent.RoleName, TimeOfExecution = logEvent.TimeOfExecution }); } return copy; }
public void ExhaustiveWithBigDataLog() { var activities = new HashSet<Activity>(); for (char ch = 'A'; ch <= 'Z'; ch++) { activities.Add(new Activity("" + ch, "somename " + ch)); } var rnd = new Random(); var inputLog = new Log(); var traceId = 1000; var currentTrace = new LogTrace() {Id = traceId.ToString()}; while (inputLog.Traces.Count < 100000) { currentTrace.Add(new LogEvent(activities.ElementAt(rnd.Next(activities.Count)).Id, "")); if (currentTrace.Events.Count == 8) { inputLog.AddTrace(currentTrace); traceId++; currentTrace = (new LogTrace() {Id = traceId.ToString()}); } } var exAl = new ContradictionApproach(activities); foreach (var trace in inputLog.Traces) { exAl.AddTrace(trace); } Assert.IsTrue(true); }
public void ExhaustiveTest() { var traceId = 1000; var activities = new HashSet<Activity>(); for (char ch = 'A'; ch <= 'G'; ch++) { activities.Add(new Activity("" + ch, "somename " + ch)); } var inputLog = new Log(); var currentTrace = new LogTrace() {Id = traceId++.ToString()}; inputLog.Traces.Add(currentTrace); var exAl = new ContradictionApproach(activities); int id = 0; while (true) { var input = Console.ReadLine(); switch (input) { case "STOP": exAl.Stop(); currentTrace = currentTrace.Copy(); currentTrace = new LogTrace() { Id = traceId++.ToString() }; inputLog.Traces.Add(currentTrace); break; case "AUTOLOG": Console.WriteLine("Please input a termination index between 0 - 100 : \n"); var logGen = new LogGenerator9001(Convert.ToInt32(Console.ReadLine()), exAl.Graph); Console.WriteLine("Please input number of desired traces to generate : \n"); List<LogTrace> log = logGen.GenerateLog(Convert.ToInt32(Console.ReadLine())); foreach (var trace in log) { Console.WriteLine(trace); } break; case "REDUNDANCY": exAl.Graph = new RedundancyRemover().RemoveRedundancy(exAl.Graph); break; case "POST": exAl.Graph = ContradictionApproach.PostProcessing(exAl.Graph); break; case "NESTED": exAl.Graph = ContradictionApproach.CreateNests(exAl.Graph); break; case "CHANGE TRACE": inputLog.Traces.Add(currentTrace); var newId = Console.ReadLine(); currentTrace = inputLog.Traces.Find(x => x.Id == newId) ?? new LogTrace() { Id = newId}; break; default: if (exAl.Graph.GetActivities().Any(a => a.Id == input)) { exAl.AddEvent(input, currentTrace.Id); currentTrace.Add(new LogEvent(input, "somename" + input) {EventId = "" + id++}); } break; } Console.WriteLine("Current trace id: " + currentTrace.Id); Console.WriteLine(exAl.Graph); //the quality probably suffers because the traces contains unfinished traces. Console.WriteLine(QualityDimensionRetriever.Retrieve(exAl.Graph, inputLog)); } }
public List<long> DataTimingTest(int alphabeth, int traces, int traceLength, int timesToRun) { var activities = new HashSet<Activity>(); for (int i = 0; i < alphabeth; i++) { activities.Add(new Activity("" + i, "" + i)); } var times = new List<long>(); for (int j = 0; j < timesToRun; j++) { var rnd = new Random(); var inputLog = new Log(); var traceId = 1000; var currentTrace = new LogTrace() {Id = traceId.ToString()}; while (inputLog.Traces.Count < traces) { currentTrace.Add(new LogEvent(activities.ElementAt(rnd.Next(activities.Count)).Id, "")); if (currentTrace.Events.Count == traceLength) { inputLog.AddTrace(currentTrace); traceId++; currentTrace = (new LogTrace() {Id = traceId.ToString()}); } } // var watch = new Stopwatch(); watch.Start(); var exAl = new ContradictionApproach(activities); foreach (var trace in inputLog.Traces) { exAl.AddTrace(trace); } watch.Stop(); times.Add(watch.ElapsedMilliseconds); Console.Write("."); } return times; }