97 строки
2.7 KiB
C#
97 строки
2.7 KiB
C#
using BenchmarkLogGenerator.Data;
|
|
using BenchmarkLogGenerator.Flows;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BenchmarkLogGenerator
|
|
{
|
|
using Step = Scheduler.Step;
|
|
using Event = Scheduler.Event;
|
|
|
|
public static class Gen
|
|
{
|
|
public static void TraceInfo(string node, string level, string component, string cid, string message, string properties)
|
|
{
|
|
/* - TODO check if we need to generate the strings as invariant format */
|
|
var gen = Generator.Current;
|
|
var now = gen.Now;
|
|
Generator.Current.LogWriter.Write(
|
|
now,
|
|
Generator.Current.Source,
|
|
node,
|
|
level,
|
|
component,
|
|
cid,
|
|
message,
|
|
properties);
|
|
}
|
|
|
|
public static void CloseTracer()
|
|
{
|
|
Generator.Current.LogWriter.Close();
|
|
}
|
|
|
|
public static Step Sleep(TimeSpan duration)
|
|
{
|
|
return Generator.Current.Scheduler.DelayFlow(duration);
|
|
}
|
|
|
|
public static Event Spawn(IEnumerable<Step> steps)
|
|
{
|
|
return Generator.Current.Scheduler.ScheduleNewFlow(steps);
|
|
}
|
|
}
|
|
|
|
public sealed class Generator
|
|
{
|
|
public Scheduler Scheduler { get; private set; }
|
|
|
|
public int Seed { get; set; }
|
|
|
|
public int SessionCount { get; set; }
|
|
|
|
public Random Rng { get; private set; }
|
|
|
|
public LogWriter LogWriter { get; private set; }
|
|
|
|
public string Source;
|
|
|
|
public DateTime Now
|
|
{
|
|
get { return Scheduler.Now; }
|
|
}
|
|
|
|
[ThreadStatic] static Generator s_current;
|
|
|
|
public static Generator Current => s_current;
|
|
|
|
public static void Run(int index, LogWriter writer, int logsPerSessionFactor, int numSessionsFactor)
|
|
{
|
|
var gen = new Generator(index, writer);
|
|
gen.SetOnThread();
|
|
Gen.Spawn(IngestionFlow.Generate(index, logsPerSessionFactor, numSessionsFactor, gen.Source));
|
|
gen.Scheduler.Run();
|
|
Gen.CloseTracer();
|
|
}
|
|
|
|
public Generator(int seed, LogWriter writer)
|
|
{
|
|
Scheduler = new Scheduler(new DateTime(2014, 3, 8, 0, 0, 0, DateTimeKind.Utc));
|
|
Rng = new Random(5546548 + seed % 100);
|
|
Seed = seed;
|
|
Source = Names.Sources[seed % 1610] + seed;
|
|
LogWriter = writer;
|
|
LogWriter.Source = Source;
|
|
}
|
|
|
|
private void SetOnThread()
|
|
{
|
|
s_current = this;
|
|
}
|
|
}
|
|
}
|