public async Task Test_AuditLogger_WriteLog()
        {
            // Arrange - Ensure the audit table exists before starting.
            var tableExists = _tableStorage.CheckTableExists(_tableStorage.AuditTableName).GetAwaiter().GetResult();

            Assert.True(tableExists);
            Thread.Sleep(2000);

            // Act - write audit logs.
            _auditLogger.WriteLog("eventName1", "message1").GetAwaiter().GetResult();
            _auditLogger.WriteLog("eventName2", "message2", "source1", 1).GetAwaiter().GetResult();
            _auditLogger.WriteLog("eventName3", "message3", "source2", 0, 2).GetAwaiter().GetResult();
            _auditLogger.WriteLog("eventName4", "message4", "useridentifier1").GetAwaiter().GetResult();
            _auditLogger.WriteLog("eventName5", "message5", "userIdentifier2", "source3", 3).GetAwaiter().GetResult();
            _auditLogger.WriteLog("eventName6", "message6", "useridentifier3", 5).GetAwaiter().GetResult();
            _auditLogger.WriteLog("eventName6", "message7", "useridentifier4", 5, 10).GetAwaiter().GetResult();

            Thread.Sleep(1000);

            var count = await _tableStorage.CountItemsQuery(_tableStorage.AuditTableName, $"Timestamp ge datetime'{DateTime.Now.AddDays(-1):yyyy-MM-ddThh:mm:ss}'");

            var countEvent1 = await _tableStorage.CountItems(_tableStorage.AuditTableName, "eventName1");

            // Assert
            Assert.True(count >= 0);
            Assert.True(countEvent1 > 0);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Auditing to permanent storage is done using some common controller action info.
        /// </summary>
        /// <param name="context">Action execution context.</param>
        public void OnActionExecuting(ActionExecutingContext context)
        {
            //Audit info
            var eventType     = context.ActionDescriptor.AttributeRouteInfo.Name.SetDefaultIfNullOrEmpty("No Route Name Supplied");
            var eventTargetId = context.ActionArguments.FirstOrDefault(x => x.Key.Equals("id", StringComparison.OrdinalIgnoreCase)).Value ?? "No id Parameter Supplied";
            var eventSource   = context.ActionDescriptor.DisplayName; // This is the full assembly name including controller and action

            string userId  = context.HttpContext.GetUserId();
            string referer = context.HttpContext.GetRequestReferer();

            // default if the user is not set.
            if (userId.IsNullOrDefault())
            {
                userId = AppDomain.CurrentDomain.FriendlyName.ToUpperInvariant();
            }

            var auditInfo = new Dictionary <string, string>
            {
                { "EventType", eventType },
                { "EventTargetId", eventTargetId.ToString() }
            };

            // Append referer url to the audit info if we have any.
            if (!referer.IsNullOrEmpty())
            {
                auditInfo.Add("Referer", referer);
            }

            // Create the Audit log.
            _auditLogger.WriteLog(_eventName, _eventMessage, userId, eventSource, auditInfo);
        }