示例#1
0
        public override object InsertEvent(AuditEvent auditEvent)
        {
            var fileName = GetFullPath($"Log{Guid.NewGuid()}.json");

            File.WriteAllText(fileName, auditEvent.ToJson());
            return(fileName);
        }
        private void LogAudit(AuditEvent auditEvent, object eventId)
        {
            var logger = GetLogger(auditEvent);
            var level  = GetLogLevel(auditEvent);
            var value  = auditEvent.ToJson();

            switch (level)
            {
            case Microsoft.Extensions.Logging.LogLevel.Debug:
                logger.Debug(value);
                break;

            case Microsoft.Extensions.Logging.LogLevel.Warning:
                logger.Warning(value);
                break;

            case Microsoft.Extensions.Logging.LogLevel.Error:
                logger.Error(value);
                break;

            case Microsoft.Extensions.Logging.LogLevel.Critical:
                logger.Fatal(value);
                break;

            case Microsoft.Extensions.Logging.LogLevel.Information:
            default:
                logger.Information(value);
                break;
            }
        }
示例#3
0
 private byte[] SerializeEvent(AuditEvent auditEvent)
 {
     if (CustomSerializer != null)
     {
         return(CustomSerializer.Invoke(auditEvent));
     }
     return(Encoding.UTF8.GetBytes(auditEvent.ToJson()));
 }
示例#4
0
 public override async Task ReplaceEventAsync(object eventId, AuditEvent auditEvent)
 {
     var fileName = GetFullPath(eventId.ToString());
     await Task.Run(() =>
     {
         File.WriteAllText(fileName, auditEvent.ToJson());
     });
 }
示例#5
0
        // async implementation:
        public override async Task <object> InsertEventAsync(AuditEvent auditEvent)
        {
            var fileName = GetFullPath($"Log{Guid.NewGuid()}.json");
            await Task.Run(() =>
            {
                File.WriteAllText(fileName, auditEvent.ToJson());
            });

            return(fileName);
        }
        public override void ReplaceEvent(object eventId, AuditEvent auditEvent)
        {
            var json = auditEvent.ToJson();

            using (var ctx = new AuditContext(ConnectionStringBuilder?.Invoke(auditEvent)))
            {
                var cmdText = GetReplaceCommandText(auditEvent);
                ctx.Database.ExecuteSqlCommand(cmdText, new SqlParameter("@json", json), new SqlParameter("@eventId", eventId));
            }
        }
示例#7
0
        public override object InsertEvent(AuditEvent auditEvent)
        {
            var json = auditEvent.ToJson();

            using (var ctx = new Audit.SqlServer.Entities(_connectionString))
            {
                var cmdText = string.Format("INSERT INTO [{0}] ([{1}]) OUTPUT INSERTED.[{2}] VALUES (@json)", _tableName, _jsonColumnName, _idColumnName);
                var eventId = ctx.Database.SqlQuery <long>(cmdText, new SqlParameter("@json", json)).FirstOrDefault();
                return(eventId);
            }
        }
示例#8
0
        public override object InsertEvent(AuditEvent auditEvent)
        {
            var jsonParam = new MySqlParameter("@value", auditEvent.ToJson());

            using (var cnn = new MySqlConnection(_connectionString))
            {
                var    cmd = GetInsertCommand(cnn, jsonParam);
                object id  = cmd.ExecuteScalar();
                return(id);
            }
        }
示例#9
0
        public override async Task ReplaceEventAsync(object eventId, AuditEvent auditEvent)
        {
            var jsonParam = new MySqlParameter("@value", auditEvent.ToJson());
            var idParam   = new MySqlParameter("@id", eventId);

            using (var cnn = new MySqlConnection(_connectionString))
            {
                var cmd = GetReplaceCommand(cnn, jsonParam, idParam);
                await cmd.ExecuteNonQueryAsync();
            }
        }
        /// <summary>
        /// Asynchronously replaces an event into AmazonQLDB
        /// </summary>
        public override Task ReplaceEventAsync(object eventId, AuditEvent auditEvent)
        {
            var driver = QldbDriver.Value;

            var(insertDocumentId, tableName) = (ValueTuple <string, string>)eventId;
            return(driver.Execute(trx => trx.Execute(
                                      $@"UPDATE {tableName} AS e BY eid
                      SET e = ?
                      WHERE eid = ?",
                                      IonLoader.Default.Load(auditEvent.ToJson()), new ValueFactory().NewString(insertDocumentId))));
        }
 private Document CreateDocument(AuditEvent auditEvent, bool addCustomFields)
 {
     if (addCustomFields && CustomAttributes != null)
     {
         foreach (var attrib in CustomAttributes)
         {
             auditEvent.CustomFields[attrib.Key] = attrib.Value.Invoke(auditEvent);
         }
     }
     return(Document.FromJson(auditEvent.ToJson()));
 }
示例#12
0
 private object GetLogObject(AuditEvent auditEvent, object eventId)
 {
     if (LogMessageBuilder == null)
     {
         if (eventId != null)
         {
             auditEvent.CustomFields["EventId"] = eventId;
         }
         return(auditEvent.ToJson());
     }
     return(LogMessageBuilder.Invoke(auditEvent, eventId));
 }
示例#13
0
        public override void ReplaceEvent(object docId, AuditEvent auditEvent)
        {
            var      client = GetClient();
            var      docUri = UriFactory.CreateDocumentUri(_database, _collection, docId.ToString());
            Document doc;

            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(auditEvent.ToJson())))
            {
                doc    = JsonSerializable.LoadFrom <Document>(ms);
                doc.Id = docId.ToString();
            }
            client.ReplaceDocumentAsync(docUri, doc).Wait();
        }
示例#14
0
        public override void ReplaceEvent(object eventId, AuditEvent auditEvent)
        {
            var json = auditEvent.ToJson();

            using (var ctx = new AuditContext(_connectionString))
            {
                var ludScript = _lastUpdatedDateColumnName != null?string.Format(", [{0}] = GETUTCDATE()", _lastUpdatedDateColumnName) : string.Empty;

                var cmdText = string.Format("UPDATE {0} SET [{1}] = @json{2} WHERE [{3}] = @eventId",
                                            FullTableName, _jsonColumnName, ludScript, _idColumnName);
                ctx.Database.ExecuteSqlCommand(cmdText, new SqlParameter("@json", json), new SqlParameter("@eventId", eventId));
            }
        }
示例#15
0
        public override async Task ReplaceEventAsync(object docId, AuditEvent auditEvent)
        {
            var      client = GetClient(auditEvent);
            var      docUri = UriFactory.CreateDocumentUri(DatabaseBuilder?.Invoke(auditEvent), CollectionBuilder?.Invoke(auditEvent), docId.ToString());
            Document doc;

            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(auditEvent.ToJson())))
            {
                doc    = JsonSerializable.LoadFrom <Document>(ms);
                doc.Id = docId.ToString();
            }
            await client.ReplaceDocumentAsync(docUri, doc);
        }
        public override async Task ReplaceEventAsync(object eventId, AuditEvent auditEvent)
        {
            var json = auditEvent.ToJson();

            using (var ctx = new AuditContext(ConnectionStringBuilder?.Invoke(auditEvent)))
            {
                var cmdText = GetReplaceCommandText(auditEvent);
#if NETSTANDARD1_3
                await ctx.Database.ExecuteSqlCommandAsync(cmdText, default(CancellationToken), new SqlParameter("@json", json), new SqlParameter("@eventId", eventId));
#else
                await ctx.Database.ExecuteSqlCommandAsync(cmdText, new SqlParameter("@json", json), new SqlParameter("@eventId", eventId));
#endif
            }
        }
        private NpgsqlCommand GetInsertCommand(NpgsqlConnection cnn, AuditEvent auditEvent)
        {
            cnn.Open();
            var cmd    = cnn.CreateCommand();
            var schema = string.IsNullOrWhiteSpace(_schema) ? "" : (_schema + ".");
            var data   = string.IsNullOrWhiteSpace(_dataType) ? "@data" : $"CAST (@data AS {_dataType})";

            cmd.CommandText = $@"insert into {schema}""{_tableName}"" (""{_dataColumnName}"") values ({data}) RETURNING (""{_idColumnName}"")";
            var parameter = cmd.CreateParameter();

            parameter.ParameterName = "data";
            parameter.Value         = auditEvent.ToJson();
            cmd.Parameters.Add(parameter);
            return(cmd);
        }
示例#18
0
        public override object InsertEvent(AuditEvent auditEvent)
        {
            var jsonParam = new MySqlParameter("@value", auditEvent.ToJson());

            using (var cnn = new MySqlConnection(_connectionString))
            {
                var cmdText = string.Format("INSERT INTO `{0}` (`{1}`) VALUES(@value); SELECT LAST_INSERT_ID();", _tableName, _jsonColumnName);
                cnn.Open();
                var cmd = cnn.CreateCommand();
                cmd.CommandText = cmdText;
                cmd.Parameters.Add(jsonParam);
                object id = cmd.ExecuteScalar();
                return(id);
            }
        }
示例#19
0
        public override object InsertEvent(AuditEvent auditEvent)
        {
            var json = new SqlParameter("json", auditEvent.ToJson());

            using (var ctx = new AuditContext(_connectionString))
            {
                var cmdText = string.Format("INSERT INTO {0} ([{1}]) OUTPUT CONVERT(NVARCHAR(MAX), INSERTED.[{2}]) AS [Id] VALUES (@json)", FullTableName, _jsonColumnName, _idColumnName);
#if NET45
                var result = ctx.Database.SqlQuery <string>(cmdText, json);
                return(result.FirstOrDefault());
#elif NETCOREAPP1_0
                var result = ctx.FakeIdSet.FromSql(cmdText, json);
                return(result.FirstOrDefault().Id);
#endif
            }
        }
        public override async Task <object> InsertEventAsync(AuditEvent auditEvent)
        {
            var json = new SqlParameter("json", auditEvent.ToJson());

            using (var ctx = new AuditContext(ConnectionStringBuilder?.Invoke(auditEvent)))
            {
                var cmdText = GetInsertCommandText(auditEvent);
#if NET45
                var result = ctx.Database.SqlQuery <string>(cmdText, json);
                return(await result.FirstOrDefaultAsync());
#elif NETSTANDARD1_3 || NETSTANDARD2_0
                var result = ctx.FakeIdSet.FromSql(cmdText, json);
                return((await result.FirstOrDefaultAsync()).Id);
#endif
            }
        }
示例#21
0
        public override object InsertEvent(AuditEvent auditEvent)
        {
            var source  = _sourcePath;
            var logName = LogName;
            var json    = auditEvent.ToJson();

            if (!EventLog.SourceExists(source, _machineName))
            {
                EventLog.CreateEventSource(source, logName);
            }
            using (var eventLog = new EventLog(logName, _machineName, source))
            {
                eventLog.WriteEntry(json, auditEvent.Environment.Exception == null ? EventLogEntryType.Information : EventLogEntryType.Error);
            }
            return(null);
        }
示例#22
0
        public override async Task ReplaceEventAsync(object docId, AuditEvent auditEvent)
        {
            var      client = GetClient();
            var      docUri = UriFactory.CreateDocumentUri(DatabaseBuilder?.Invoke(), ContainerBuilder?.Invoke(), docId.ToString());
            Document doc;

            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(auditEvent.ToJson())))
            {
                doc = JsonSerializable.LoadFrom <Document>(ms);
            }
            doc.Id = docId.ToString();
            await client.ReplaceDocumentAsync(docUri, doc, new RequestOptions()
            {
                JsonSerializerSettings = Core.Configuration.JsonSettings
            });
        }
示例#23
0
        public override object InsertEvent(AuditEvent auditEvent)
        {
            var source  = SourcePath;
            var logName = LogName;
            var message = MessageBuilder != null?MessageBuilder.Invoke(auditEvent) : auditEvent.ToJson();

            if (!EventLog.SourceExists(source, MachineName))
            {
                EventLog.CreateEventSource(source, logName);
            }
            using (var eventLog = new EventLog(logName, MachineName, source))
            {
                eventLog.WriteEntry(message, auditEvent.Environment.Exception == null ? EventLogEntryType.Information : EventLogEntryType.Error);
            }
            return(null);
        }
示例#24
0
        public override void ReplaceEvent(object eventId, AuditEvent auditEvent)
        {
            var jsonParam = new MySqlParameter("@value", auditEvent.ToJson());
            var idParam   = new MySqlParameter("@id", eventId);

            using (var cnn = new MySqlConnection(_connectionString))
            {
                var cmdText = string.Format("UPDATE `{0}` SET `{1}` = @value WHERE `{2}` = @id;", _tableName, _jsonColumnName, _idColumnName);
                cnn.Open();
                var cmd = cnn.CreateCommand();
                cmd.CommandText = cmdText;
                cmd.Parameters.Add(jsonParam);
                cmd.Parameters.Add(idParam);
                int rows = cmd.ExecuteNonQuery();
            }
        }
 public override object InsertEvent(AuditEvent auditEvent)
 {
     using (var cnn = new NpgsqlConnection(_connectionString))
     {
         cnn.Open();
         var cmd    = cnn.CreateCommand();
         var schema = string.IsNullOrWhiteSpace(_schema) ? "" : (_schema + ".");
         var data   = string.IsNullOrWhiteSpace(_dataType) ? "@data" : $"CAST (@data AS {_dataType})";
         cmd.CommandText = $@"insert into {schema}""{_tableName}"" (""{_dataColumnName}"") values ({data}) RETURNING id";
         var parameter = cmd.CreateParameter();
         parameter.ParameterName = "data";
         parameter.Value         = auditEvent.ToJson();
         cmd.Parameters.Add(parameter);
         var id = cmd.ExecuteScalar();
         return(id);
     }
 }
示例#26
0
        private SqlParameter[] GetParametersForInsert(AuditEvent auditEvent)
        {
            var parameters = new List <SqlParameter>();

            if (JsonColumnNameBuilder != null)
            {
                parameters.Add(new SqlParameter("@json", auditEvent.ToJson()));
            }
            if (CustomColumns != null)
            {
                for (int i = 0; i < CustomColumns.Count; i++)
                {
                    parameters.Add(new SqlParameter($"@c{i}", CustomColumns[i].Value.Invoke(auditEvent)));
                }
            }
            return(parameters.ToArray());
        }
示例#27
0
        private List <MySqlParameter> GetParameterValues(AuditEvent auditEvent)
        {
            var parameters = new List <MySqlParameter>();

            if (_jsonColumnName != null)
            {
                parameters.Add(new MySqlParameter("@value", auditEvent.ToJson()));
            }
            if (CustomColumns != null)
            {
                for (int i = 0; i < CustomColumns.Count; i++)
                {
                    parameters.Add(new MySqlParameter($"@c{i}", CustomColumns[i].Value?.Invoke(auditEvent)));
                }
            }
            return(parameters);
        }
示例#28
0
        private SqlParameter[] GetParametersForReplace(object eventId, AuditEvent auditEvent)
        {
            var parameters = new List <SqlParameter>();

            if (JsonColumnNameBuilder != null)
            {
                parameters.Add(new SqlParameter("@json", auditEvent.ToJson()));
            }
            parameters.Add(new SqlParameter("@eventId", eventId));
            if (CustomColumns != null)
            {
                for (int i = 0; i < CustomColumns.Count; i++)
                {
                    parameters.Add(new SqlParameter($"@c{i}", CustomColumns[i].Value.Invoke(auditEvent) ?? DBNull.Value));
                }
            }
            return(parameters.ToArray());
        }
        private NpgsqlCommand GetReplaceCommand(NpgsqlConnection cnn, AuditEvent auditEvent, object eventId)
        {
            cnn.Open();
            var cmd       = cnn.CreateCommand();
            var schema    = string.IsNullOrWhiteSpace(_schema) ? "" : (_schema + ".");
            var data      = string.IsNullOrWhiteSpace(_dataType) ? "@data" : $"CAST (@data AS {_dataType})";
            var ludScript = string.IsNullOrWhiteSpace(_lastUpdatedDateColumnName) ? "" : $@", ""{_lastUpdatedDateColumnName}"" = CURRENT_TIMESTAMP";

            cmd.CommandText = $@"update {schema}""{_tableName}"" SET ""{_dataColumnName}"" = {data}{ludScript} WHERE ""{_idColumnName}"" = @id";
            var dataParameter = cmd.CreateParameter();

            dataParameter.ParameterName = "data";
            dataParameter.Value         = auditEvent.ToJson();
            cmd.Parameters.Add(dataParameter);
            var idParameter = cmd.CreateParameter();

            idParameter.ParameterName = "id";
            idParameter.Value         = eventId;
            cmd.Parameters.Add(idParameter);
            return(cmd);
        }
 public override void ReplaceEvent(object eventId, AuditEvent auditEvent)
 {
     using (var cnn = new NpgsqlConnection(_connectionString))
     {
         cnn.Open();
         var cmd       = cnn.CreateCommand();
         var schema    = string.IsNullOrWhiteSpace(_schema) ? "" : (_schema + ".");
         var data      = string.IsNullOrWhiteSpace(_dataType) ? "@data" : $"CAST (@data AS {_dataType})";
         var ludScript = string.IsNullOrWhiteSpace(_lastUpdatedDateColumnName) ? "" : $@", ""{_lastUpdatedDateColumnName}"" = CURRENT_TIMESTAMP";
         cmd.CommandText = $@"update {schema}""{_tableName}"" SET ""{_dataColumnName}"" = {data}{ludScript} WHERE ""{_idColumnName}"" = @id";
         var dataParameter = cmd.CreateParameter();
         dataParameter.ParameterName = "data";
         dataParameter.Value         = auditEvent.ToJson();
         cmd.Parameters.Add(dataParameter);
         var idParameter = cmd.CreateParameter();
         idParameter.ParameterName = "id";
         idParameter.Value         = eventId;
         cmd.Parameters.Add(idParameter);
         cmd.ExecuteNonQuery();
     }
 }