コード例 #1
0
        private AddOrUpdateLoadtestsResponse AddOrUpdateLoadtests(AddOrUpdateLoadtestsRequest addOrUpdateLoadtestsRequest)
        {
            AddOrUpdateLoadtestsResponse resp = new AddOrUpdateLoadtestsResponse();

            try
            {
                //assign ID if not present, assume to be insertion
                foreach (LoadtestViewModel ltvm in addOrUpdateLoadtestsRequest.Loadtests)
                {
                    if (ltvm.Id == null || ltvm.Id == default(Guid))
                    {
                        ltvm.Id = Guid.NewGuid();
                    }
                }
                List <LoadtestViewModel> sortedByDate    = addOrUpdateLoadtestsRequest.Loadtests.OrderBy(lt => lt.StartDateUtc).ToList();
                LoadtestViewModel        last            = sortedByDate.Last();
                IList <Loadtest>         loadtests       = _timetableRepository.GetLoadtestsForTimePeriod(sortedByDate.First().StartDateUtc, last.StartDateUtc.AddSeconds(last.DurationSec));
                Timetable        timetable               = new Timetable(loadtests);
                IList <Loadtest> loadtestsAddedOrUpdated = _timetableViewModelRepository.ConvertToDomain(addOrUpdateLoadtestsRequest.Loadtests);
                AddOrUpdateLoadtestsValidationResult validationResult = timetable.AddOrUpdateLoadtests(loadtestsAddedOrUpdated);
                _timetableRepository.AddOrUpdateLoadtests(validationResult);
                resp.AddOrUpdateLoadtestsValidationResult = validationResult;
            }
            catch (Exception ex)
            {
                resp.Exception = ex;
            }
            return(resp);
        }
コード例 #2
0
        public void AddOrUpdateLoadtests(AddOrUpdateLoadtestsValidationResult addOrUpdateLoadtestsValidationResult)
        {
            LoadTestingContext context = new LoadTestingContext(_options);

            if (addOrUpdateLoadtestsValidationResult.ValidationComplete)
            {
                if (addOrUpdateLoadtestsValidationResult.ToBeInserted.Any())
                {
                    foreach (Loadtest toBeInserted in addOrUpdateLoadtestsValidationResult.ToBeInserted)
                    {
                        context.Entry <Loadtest>(toBeInserted).State = EntityState.Added;
                    }
                }

                if (addOrUpdateLoadtestsValidationResult.ToBeUpdated.Any())
                {
                    foreach (Loadtest toBeUpdated in addOrUpdateLoadtestsValidationResult.ToBeUpdated)
                    {
                        context.Entry <Loadtest>(toBeUpdated).State = EntityState.Modified;
                    }
                }
            }
            else
            {
                throw new InvalidOperationException("Validation is not complete. You have to call the AddOrUpdateLoadtests method of the Timetable class first.");
            }
            context.SaveChanges();
        }
コード例 #3
0
 public TimetableChangedEventArgs(AddOrUpdateLoadtestsValidationResult addOrUpdateLoadtestsValidationResult)
 {
     if (addOrUpdateLoadtestsValidationResult == null)
     {
         throw new ArgumentNullException("AddOrUpdateLoadtestsValidationResult");
     }
     _addOrUpdateLoadtestsValidationResult = addOrUpdateLoadtestsValidationResult;
 }
コード例 #4
0
        static void Main(string[] args)
        {
            ITimetableRepository repo = new TimetableRepository(new WebConfigConnectionStringRepository());
            IList <Loadtest>     loadtestsInPeriod = repo.GetLoadtestsForTimePeriod(DateTime.UtcNow.AddYears(-1), DateTime.UtcNow.AddYears(1));
            List <Loadtest>      toBeInserted      = new List <Loadtest>();
            List <Loadtest>      toBeUpdated       = new List <Loadtest>();
            Loadtest             ltNewOne          = new Loadtest
                                                         (Guid.NewGuid(),
                                                         new LoadtestParameters(DateTime.UtcNow.AddDays(1), 100, 90),
                                                         Guid.Parse("52d4e276-193d-4ff3-a40e-c45381969d24"),
                                                         Guid.Parse("cb5c3463-d1cb-4c1c-b667-f1c6a065edd1"),
                                                         Guid.Parse("c1cf1179-98a7-4c58-bcaa-a0e7c697293f"),
                                                         Guid.Parse("612cf872-3967-41e7-a30d-28e26df66dcc"),
                                                         Guid.Parse("c3d79996-7045-4bce-a6cd-fcf398717ae5"),
                                                         Guid.Parse("4d27ad00-14d8-4c1c-98b9-64556e957daf"));
            Loadtest ltNewTwo = new Loadtest
                                    (Guid.NewGuid(),
                                    new LoadtestParameters(DateTime.UtcNow.AddDays(5), 500, 300),
                                    Guid.Parse("b9b42875-414f-46b9-8dd2-417668e23e83"),
                                    Guid.Parse("f966ccf4-7802-4796-8767-637611b611de"),
                                    Guid.Parse("a4ae54f4-e662-4922-a2ce-4df9af9d23c8"),
                                    Guid.Parse("95202f85-0c8e-426b-b0ea-ed74f4d1ccbc"),
                                    Guid.Parse("1e4871ba-de8b-4e2c-98f4-3364b9d82558"),
                                    Guid.Parse("4d27ad00-14d8-4c1c-98b9-64556e957daf"));

            toBeInserted.Add(ltNewOne);
            toBeInserted.Add(ltNewTwo);

            Loadtest ltUpdOne = new Loadtest
                                    (Guid.Parse("71b29573-8f67-49ab-8ee0-f8dd0bbceefd"),
                                    new LoadtestParameters(DateTime.UtcNow.AddDays(14), 50, 300),
                                    Guid.Parse("52d4e276-193d-4ff3-a40e-c45381969d24"),
                                    Guid.Parse("5b16880e-b0dd-4d66-bff9-f79eba6490ec"),
                                    Guid.Parse("40ccb6aa-c9a6-466d-be02-c73122d6edca"),
                                    Guid.Parse("612cf872-3967-41e7-a30d-28e26df66dcc"),
                                    Guid.Parse("e2caa1f0-2ee9-4e8f-86a0-51de8aba4eca"),
                                    Guid.Parse("4d27ad00-14d8-4c1c-98b9-64556e957daf"));

            toBeUpdated.Add(ltUpdOne);

            AddOrUpdateLoadtestsValidationResult validationRes = new AddOrUpdateLoadtestsValidationResult(toBeInserted, toBeUpdated,
                                                                                                          new List <Loadtest>(), "Validation summary");

            repo.AddOrUpdateLoadtests(validationRes);

            //TestSelectWithWhereClause();
            //TestReplacement();
            //Seed();

            /*
             * string mongoDbConnectionString = "mongodb://localhost:27017";
             * MongoClient mongoClient = new MongoClient(mongoDbConnectionString);
             * IMongoDatabase testDatabase = mongoClient.GetDatabase("Cartoons");
             * Task t = testDatabase.CreateCollectionAsync("Disney");
             * Task.WaitAll(t);
             * //Task.Run(() => testDatabase.CreateCollectionAsync("Disney"));*/
        }
コード例 #5
0
        public void Handle(EventArgs eventArgs)
        {
            TimetableChangedEventArgs e = eventArgs as TimetableChangedEventArgs;

            if (e != null)
            {
                AddOrUpdateLoadtestsValidationResult addOrUpdateValidationResult = e.AddOrUpdateLoadtestsValidationResult;
                if ((addOrUpdateValidationResult.ToBeInserted.Any() || addOrUpdateValidationResult.ToBeUpdated.Any()) &&
                    !addOrUpdateValidationResult.Failed.Any())
                {
                    EmailArguments args = new EmailArguments("Load tests added or updated", "Load tests added or updated", "The Boss", "The developer", "123.456.678");
                    _emailService.SendEmail(args);
                }
            }
        }
コード例 #6
0
        public async Task <AddOrUpdateLoadtestsResponse> AddOrUpdateLoadtestsAsync(AddOrUpdateLoadtestsRequest addOrUpdateLoadtestsRequest)
        {
            AddOrUpdateLoadtestsResponse resp = await _innerTimetableService.AddOrUpdateLoadtestsAsync(addOrUpdateLoadtestsRequest);

            if (resp.Exception == null)
            {
                AddOrUpdateLoadtestsValidationResult addOrUpdateValidationResult = resp.AddOrUpdateLoadtestsValidationResult;
                if ((addOrUpdateValidationResult.ToBeInserted.Any() || addOrUpdateValidationResult.ToBeUpdated.Any()) &&
                    !addOrUpdateValidationResult.Failed.Any())
                {
                    EmailArguments args = new EmailArguments("Load tests added or updated", "Load tests added or updated", "The Boss", "The developer", "123.456.678");
                    _emailService.SendEmail(args);
                }
            }
            return(resp);
        }
コード例 #7
0
        public void Handle(EventArgs eventArgs)
        {
            TimetableChangedEventArgs e = eventArgs as TimetableChangedEventArgs;

            if (e != null)
            {
                AddOrUpdateLoadtestsValidationResult addOrUpdateValidationResult = e.AddOrUpdateLoadtestsValidationResult;
                if ((addOrUpdateValidationResult.ToBeInserted.Any() || addOrUpdateValidationResult.ToBeUpdated.Any()) &&
                    !addOrUpdateValidationResult.Failed.Any())
                {
                    IConnection      connection      = GetRabbitMqConnection();
                    IModel           model           = connection.CreateModel();
                    string           message         = addOrUpdateValidationResult.OperationResultSummary;
                    IBasicProperties basicProperties = model.CreateBasicProperties();
                    byte[]           messageBytes    = Encoding.UTF8.GetBytes(message);
                    string           queue           = _configurationRepository.GetConfigurationValue <string>("LoadtestEventMessageQueueName", "LoadtestEventMessageQueue");
                    model.BasicPublish("", queue, basicProperties, messageBytes);
                }
            }
        }
コード例 #8
0
        public void AddOrUpdateLoadtests(AddOrUpdateLoadtestsValidationResult addOrUpdateLoadtestsValidationResult)
        {
            LoadTestingContext context = LoadTestingContext.Create(base.ConnectionStringRepository);

            if (addOrUpdateLoadtestsValidationResult.ValidationComplete)
            {
                if (addOrUpdateLoadtestsValidationResult.ToBeInserted.Any())
                {
                    IEnumerable <LoadtestMongoDb> toBeInserted = addOrUpdateLoadtestsValidationResult.ToBeInserted.PrepareAllForInsertion();
                    context.Loadtests.InsertMany(toBeInserted);
                }

                if (addOrUpdateLoadtestsValidationResult.ToBeUpdated.Any())
                {
                    foreach (Loadtest toBeUpdated in addOrUpdateLoadtestsValidationResult.ToBeUpdated)
                    {
                        Guid            existingLoadtestId = toBeUpdated.Id;
                        var             loadtestInDbQuery  = context.Loadtests.Find <LoadtestMongoDb>(lt => lt.DomainId == existingLoadtestId);
                        LoadtestMongoDb loadtestInDb       = loadtestInDbQuery.SingleOrDefault();
                        loadtestInDb.AgentId        = toBeUpdated.AgentId;
                        loadtestInDb.CustomerId     = toBeUpdated.CustomerId;
                        loadtestInDb.EngineerId     = toBeUpdated.EngineerId;
                        loadtestInDb.LoadtestTypeId = toBeUpdated.LoadtestTypeId;
                        LoadtestParameters ltDomainParameters = toBeUpdated.Parameters;
                        loadtestInDb.Parameters.DurationSec        = ltDomainParameters.DurationSec;
                        loadtestInDb.Parameters.ExpectedEndDateUtc = ltDomainParameters.StartDateUtc.AddSeconds(ltDomainParameters.DurationSec);
                        loadtestInDb.Parameters.StartDateUtc       = ltDomainParameters.StartDateUtc;
                        loadtestInDb.Parameters.UserCount          = ltDomainParameters.UserCount;
                        loadtestInDb.ProjectId  = toBeUpdated.ProjectId;
                        loadtestInDb.ScenarioId = toBeUpdated.ScenarioId;
                        context.Loadtests.FindOneAndReplace <LoadtestMongoDb>(lt => lt.DbObjectId == loadtestInDb.DbObjectId, loadtestInDb);
                    }
                }
            }
            else
            {
                throw new InvalidOperationException("Validation is not complete. You have to call the AddOrUpdateLoadtests method of the Timetable class first.");
            }
        }