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); }
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(); }
public TimetableChangedEventArgs(AddOrUpdateLoadtestsValidationResult addOrUpdateLoadtestsValidationResult) { if (addOrUpdateLoadtestsValidationResult == null) { throw new ArgumentNullException("AddOrUpdateLoadtestsValidationResult"); } _addOrUpdateLoadtestsValidationResult = addOrUpdateLoadtestsValidationResult; }
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"));*/ }
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); } } }
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); }
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); } } }
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."); } }