public IVisitSimulator CreateSimulator() { var parser = new XGenParser(RootUrl); if (Specification["Segments"].Any()) { var segments = parser.ParseSegments(Specification["Segments"], Type); return(new SegmentBasedSimulator(segments)); } return(new ContactBasedSimulator(parser.ParseContacts(Specification["Contacts"], Type))); }
public static void Outcomes() { var segments = new JObject(); var seg = segments["Default"] = new JObject(); var outcomes = seg["Outcomes"] = new JObject(); seg["StartDate"] = "2010-01-01"; seg["EndDate"] = "2010-01-02"; outcomes["{75D53206-47B3-4391-BD48-75C42E5FC2CE}"] = .5; outcomes["{F4830B80-1BB1-4746-89C7-96EFE40DA572}"] = .5; var parser = new XGenParser("http://sc80rev150427"); var sim = new SegmentBasedSimulator(parser.ParseSegments(segments, JobType.Visits)); var counts = new Dictionary <Guid, int>(); var visits = 0; foreach (var visitor in sim.NextVisitors(1)) { foreach (var visit in visitor.Commit()) { ++visits; foreach (var req in visit.Requests) { var oc = req.GetVariable <IEnumerable <TriggerOutcomeData> >("TriggerOutcomes"); if (oc != null) { foreach (var o in oc) { //System.Console.Out.WriteLine(o.DefinitionId); counts[o.DefinitionId] = counts.GetOrDefault(o.DefinitionId) + 1; } } } } } System.Console.Out.WriteLine("{0} visits", visits); foreach (var c in counts) { System.Console.Out.WriteLine("{0}: {1}", c.Key, c.Value); } }
static void Parser2() { var emea = GeoRegion.Regions.First(area => area.Id == "amer"); var geodata = GeoData.FromResource(); var country = emea.Selector(geodata); var freqs = Enumerable.Range(0, 10000).Select(i => country()).GroupBy(c => c.Country.Name) .ToDictionary(g => g.Key, g => g.Count()); File.WriteAllLines(@"C:\Temp\Countries.txt", new[] { "Country\tCount" }.Concat(freqs.OrderByDescending(kv => kv.Value).Select(kv => kv.Key + "\t" + kv.Value))); return; Randomness.Seed(1337); var json = File.ReadAllText(@"C:\Temp\Xerox2.js"); var def = JObject.Parse(json); var parser = new XGenParser("http://sc80rev150427/api/xgen/"); //var vars = new[]{""} var sw = Stopwatch.StartNew(); var visits = 0; var id = 0; var contactId = 0; using (var f = File.CreateText(@"C:\Temp\XeroxOut2.txt")) { f.Write("Contact\tId\tVisitIndex\tStart\tEnd\tHour\tDuration\tPageViews\tCampaign\tCountry\tTimeZone\tContinent\tReferrer\tLandingPage\tSite"); f.WriteLine(); var threads = Enumerable.Range(0, 25).Select(i => { var t = new Thread(() => { Randomness.Seed(1337 + i); var segments = parser.ParseSegments(def["Segments"], JobType.Visits); var sim = new SegmentBasedSimulator(segments); foreach (var v in sim.NextVisitors(80)) { var myId = Interlocked.Increment(ref contactId); System.Console.Out.WriteLine("Visitor at {0}", v.Start); try { var visitIndex = 0; foreach (var visit in v.Segment.Behavior().Commit(v)) { Interlocked.Increment(ref visits); System.Console.Out.WriteLine(" - Visit at {0}", visit.Start); //foreach (var req in visit.Requests) //{ // System.Console.Out.WriteLine(" " + req.Url); //} //var visit = v.AddVisit(); //visit.AddRequest(""); lock (f) { f.Write("Contact" + myId); f.Write("\t"); f.Write("Visit" + Interlocked.Increment(ref id)); f.Write("\t"); f.Write(++visitIndex); f.Write("\t"); f.Write(v.Start.Date.ToString("yyyy-MM-dd")); f.Write("\t"); f.Write(v.End.Date.ToString("yyyy-MM-dd")); f.Write("\t"); f.Write(v.Start.Hour); f.Write("\t"); f.Write((v.End - v.Start).TotalSeconds); f.Write("\t"); f.Write(visit.GetVariable <double>("PageViews")); f.Write("\t"); f.Write(visit.GetVariable("Campaign", "")); f.Write("\t"); f.Write(visit.GetVariable("Country", "")); f.Write("\t"); f.Write(visit.GetVariable("TimeZone", "")); f.Write("\t"); f.Write(visit.GetVariable("Continent", "")); f.Write("\t"); f.Write(visit.GetVariable("Referrer", "")); f.Write("\t"); f.Write(visit.GetVariable("LandingPage", "")); f.Write("\t"); f.Write(visit.GetVariable("Site", "")); f.WriteLine(); } } } catch (Exception ex) { System.Console.Out.WriteLine("Error: " + ex); } System.Console.Out.WriteLine("{0:N0} visits ({1:N2} visits per second)", visits, visits / sw.Elapsed.TotalSeconds); } }); t.Start(); return(t); }).ToArray(); foreach (var t in threads) { t.Join(); } System.Console.Out.WriteLine("{0:N0} visits in {1:N2} seconds", visits, sw.Elapsed.TotalSeconds); } }