protected virtual async Task SaveLogAsync(AuditLogInfo auditInfo) { using var uow = UnitOfWorkManager.Begin(true); await AuditLogRepository.InsertAsync(await Converter.ConvertAsync(auditInfo)); await uow.CompleteAsync(); }
protected virtual async Task SaveLogAsync(AuditLogInfo auditInfo) { using (var uow = UnitOfWorkManager.Begin(true)) { await AuditLogRepository.InsertAsync(new AuditLog (GuidGenerator, auditInfo)); await uow.SaveChangesAsync(); } }
public async Task GetSpecifiedEntityChangeListAsync() { // Arrange var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var ipAddress = "153.1.7.61"; var firstComment = "first Comment"; var deletedEntityChangeTime = new DateTime(2000, 05, 05, 05, 05, 05); var createdEntityChangeTime = new DateTime(2005, 05, 05, 05, 05, 05); var updatedEntityChangeTime = new DateTime(2010, 05, 05, 05, 05, 05); var log1 = new AuditLogInfo { UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, UserName = "******", EntityChanges = { new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", ChangeType = EntityChangeType.Deleted, ChangeTime = deletedEntityChangeTime, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } }, new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", ChangeType = EntityChangeType.Created, ChangeTime = createdEntityChangeTime, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; var log2 = new AuditLogInfo { UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, HttpStatusCode = (int?)HttpStatusCode.BadGateway, EntityChanges = { new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", ChangeType = EntityChangeType.Updated, ChangeTime = updatedEntityChangeTime, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(changeType : EntityChangeType.Created); entityChanges.ShouldNotBeNull(); entityChanges.Count.ShouldBe(1); }
public async Task GetAverageExecutionDurationPerDayAsync() { // Arrange var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var ipAddress = "153.1.7.61"; var firstComment = "first Comment"; var log1 = new AuditLogInfo { UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.SpecifyKind(DateTime.Parse("2020-01-01 01:00:00"), DateTimeKind.Utc), ExecutionDuration = 45, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, UserName = "******", EntityChanges = { new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity", ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } }, new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity", ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; var log2 = new AuditLogInfo { UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.SpecifyKind(DateTime.Parse("2020-01-01 03:00:00"), DateTimeKind.Utc), ExecutionDuration = 55, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, HttpStatusCode = (int?)HttpStatusCode.BadGateway, EntityChanges = { new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity", ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert var date = DateTime.Parse("2020-01-01"); var results = await AuditLogRepository.GetAverageExecutionDurationPerDayAsync(date, date); results.Count.ShouldBe(1); results.Values.First().ShouldBe(50); // (45 + 55) / 2 }
public async Task GetListAsync() { // Arrange var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var ipAddress = "153.1.7.61"; var firstComment = "first Comment"; var log1 = new AuditLogInfo { UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, UserName = "******", EntityChanges = { new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity", ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } }, new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity", ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; var log2 = new AuditLogInfo { UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, HttpStatusCode = (int?)HttpStatusCode.BadGateway, EntityChanges = { new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity", ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)).ConfigureAwait(false); await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)).ConfigureAwait(false); //Assert var logs = await AuditLogRepository.GetListAsync().ConfigureAwait(false); logs.ShouldNotBeNull(); logs.ShouldContain(x => x.UserId == userId); logs.ShouldContain(x => x.UserId == userId2); }
public async Task GetEntityChangeWithUsernameAsync() { // Arrange var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var ipAddress = "153.1.7.61"; var firstComment = "first Comment"; var log1 = new AuditLogInfo { UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, UserName = "******", EntityChanges = { new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", ChangeType = EntityChangeType.Deleted, ChangeTime = new DateTime(1995, 3, 27), PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } }, new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; var log2 = new AuditLogInfo { UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, HttpStatusCode = (int?)HttpStatusCode.BadGateway, UserName = "******", EntityChanges = { new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", ChangeType = EntityChangeType.Updated, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(); var entityHistory = await AuditLogRepository.GetEntityChangeWithUsernameAsync(entityChanges.First().Id); entityHistory.EntityChange.ChangeTime.ShouldBe(entityChanges.First().ChangeTime); entityHistory.UserName.ShouldNotBeNull(); }
public async Task GetEntityChangesWithUsernameAsync() { // Arrange var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); var ipAddress = "153.1.7.61"; var firstComment = "first Comment"; var firstUser = "******"; var secondUser = "******"; var entityId = Guid.NewGuid().ToString(); var entityType = "Volo.Abp.AuditLogging.TestEntity"; var log1 = new AuditLogInfo { UserId = userId, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, UserName = firstUser, EntityChanges = { new EntityChangeInfo { EntityId = entityId, EntityTypeFullName = entityType, ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } }, new EntityChangeInfo { EntityId = Guid.NewGuid().ToString(), EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity", ChangeType = EntityChangeType.Created, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; var log2 = new AuditLogInfo { UserId = userId2, ImpersonatorUserId = Guid.NewGuid(), ImpersonatorTenantId = Guid.NewGuid(), ExecutionTime = DateTime.Today, ExecutionDuration = 42, ClientIpAddress = ipAddress, ClientName = "MyDesktop", BrowserInfo = "Chrome", Comments = new List <string> { firstComment, "Second Comment" }, HttpStatusCode = (int?)HttpStatusCode.Accepted, UserName = secondUser, EntityChanges = { new EntityChangeInfo { EntityId = entityId, EntityTypeFullName = entityType, ChangeType = EntityChangeType.Updated, ChangeTime = DateTime.Now, PropertyChanges = new List <EntityPropertyChangeInfo> { new EntityPropertyChangeInfo { PropertyTypeFullName = typeof(string).FullName, PropertyName = "Name", NewValue = "New value", OriginalValue = null } } } } }; await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert var entityHistory = await AuditLogRepository.GetEntityChangesWithUsernameAsync(entityId, entityType); entityHistory.Count.ShouldBe(2); var firstUserChange = entityHistory.First(x => x.UserName == firstUser); firstUserChange.ShouldNotBeNull(); firstUserChange.EntityChange.ShouldNotBeNull(); firstUserChange.EntityChange.ChangeType.ShouldBe(EntityChangeType.Created); var secondUserChange = entityHistory.First(x => x.UserName == secondUser); secondUserChange.ShouldNotBeNull(); secondUserChange.EntityChange.ShouldNotBeNull(); secondUserChange.EntityChange.ChangeType.ShouldBe(EntityChangeType.Updated); }