public static async Task Main()

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++;
                    }
                }
            }
        }