in tools/scale-testing/PersonInstanceGenerator/Program.cs [130:224]
public static async Task Main(string[] args)
{
EnsureArg.IsNotNull(args, nameof(args));
var options = new SecretClientOptions()
{
Retry =
{
Delay = TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential,
},
};
var client = new SecretClient(new Uri(KnownApplicationUrls.KeyVaultUrl), new DefaultAzureCredential(), options);
KeyVaultSecret secret = await client.GetSecretAsync(KnownSecretNames.ServiceBusConnectionString);
s_serviceBusConnectionString = secret.Value;
s_rand = new Random();
var patientNames = File.ReadAllLines(args[0]);
var physiciansNames = File.ReadAllLines(args[1]);
string path = args[2];
s_topicClient = new TopicClient(s_serviceBusConnectionString, KnownTopics.StowRs);
int tracker = 0;
int totalCount = int.Parse(args[3]);
using StreamWriter sw = File.Exists(path) ? File.AppendText(path) : File.CreateText(path);
while (tracker < totalCount)
{
var patientName = patientNames.RandomElement();
var patientId = PatientId();
DateTime patientBirthDate = RandomDateTimeBefore1995();
var patientSex = Sex.RandomElement();
var patientOccupation = Occupation.RandomElement();
int studies = s_rand.Next(1, 5);
for (int i = 0; i < studies; i++)
{
var physicianName = physiciansNames.RandomElement();
DateTime studyDate = RandomDateTimeAfter1995();
var accession = AccessionNumber();
List<(string, (int, string), (int, string))> instances = InstanceGenerator();
(string, string) modality = Modalities.RandomElement();
var patientAge = Math.Round((decimal)(studyDate - patientBirthDate).Days / 365);
var patientWeight = s_rand.Next(50, 90);
foreach ((string, (int, string), (int, string)) inst in instances)
{
var pI = new PatientInstance
{
Name = patientName,
PatientId = patientId.ToString(),
PatientSex = patientSex,
PatientBirthDate = patientBirthDate.Date.Year.ToString() + patientBirthDate.Date.Month.ToString() + patientBirthDate.Date.Day.ToString(),
PatientAge = patientAge.ToString(),
PatientWeight = patientWeight.ToString(),
PatientOccupation = patientOccupation,
PhysicianName = physicianName,
StudyUid = inst.Item1,
SeriesUid = inst.Item2.Item2,
SeriesIndex = inst.Item2.Item1.ToString(),
InstanceUid = inst.Item3.Item2,
InstanceIndex = inst.Item3.Item1.ToString(),
Modality = modality.Item1,
AccessionNumber = accession.ToString(),
StudyDate = studyDate.Date.Year.ToString() + studyDate.Date.Month.ToString() + studyDate.Date.Day.ToString(),
StudyDescription = modality.Item2,
PerformedProcedureStepStartDate = studyDate.AddMinutes(s_rand.Next(1, 10)).ToString(),
};
var patient = JsonSerializer.Serialize(pI);
try
{
// Create a new message to send to the topic
var message = new Message(Encoding.UTF8.GetBytes(patient));
Console.WriteLine($" tracker = {tracker}");
// Send the message to the topic
await s_topicClient.SendAsync(message);
await sw.WriteLineAsync(patient);
}
catch (Exception exception)
{
Console.WriteLine($"{DateTime.Now} :: Exception: {exception.Message}");
}
tracker++;
}
}
}
}