static EntityPlugin() { DefaultConfiguration = new EntityPluginConfiguration { entitykey = new[] { FieldType.host, FieldType.process, FieldType.logger } }; }
/// <summary> /// Initializes a new instance of EntityPlugin /// </summary> public EntityPlugin() { _messageQueue = new FastFifoQueue <SyslogMessage>(QUEUE_SIZE); _tmrStatistics = new Timer(LogStatistics, null, new TimeSpan(0, 1, 0), new TimeSpan(0, 1, 0)); _workerThread = new Thread(WorkerLoop) { IsBackground = true, Name = "EntityPlugin.WorkerLoop" }; _workerThread.Start(); _entityTable = new DataTable("Entities"); _colHost = new DataColumn("Host", typeof(string)) { AllowDBNull = true, ReadOnly = true, Unique = false }; _colProc = new DataColumn("Process", typeof(string)) { AllowDBNull = true, ReadOnly = true, Unique = false }; _colLogger = new DataColumn("Logger", typeof(string)) { AllowDBNull = true, ReadOnly = true, Unique = false }; _colModule = new DataColumn("Module", typeof(string)) { AllowDBNull = true, ReadOnly = true, Unique = false }; _colClass = new DataColumn("Class", typeof(string)) { AllowDBNull = true, ReadOnly = true, Unique = false }; _colMethod = new DataColumn("Method", typeof(string)) { AllowDBNull = true, Unique = false, ReadOnly = true }; _colAppName = new DataColumn("AppName", typeof(string)) { AllowDBNull = true, ReadOnly = true, Unique = false }; _colFfda = new DataColumn("FFDA", typeof(bool)) { AllowDBNull = false, DefaultValue = false, ReadOnly = false, Unique = false }; _colLastAction = new DataColumn("LastAction", typeof(DateTime)) { AllowDBNull = false, ReadOnly = false, Unique = false, DateTimeMode = DataSetDateTime.Utc, }; _colLastHeartbeat = new DataColumn("LstHeartbeat", typeof(DateTime)) { AllowDBNull = true, ReadOnly = false, Unique = false, DateTimeMode = DataSetDateTime.Utc, }; _colChannelId = new DataColumn("ChannelId", typeof(string)) { AllowDBNull = true, ReadOnly = false, Unique = false }; _colFfdaChannelId = new DataColumn("FfdaChannelId", typeof(string)) { AllowDBNull = true, ReadOnly = false, Unique = false }; _entityTable.Columns.Add(_colHost); _entityTable.Columns.Add(_colProc); _entityTable.Columns.Add(_colLogger); _entityTable.Columns.Add(_colAppName); _entityTable.Columns.Add(_colFfda); _entityTable.Columns.Add(_colLastAction); _entityTable.Columns.Add(_colLastHeartbeat); _entityTable.Columns.Add(_colChannelId); _entityTable.Columns.Add(_colFfdaChannelId); try { _config = ConfigurationManager.GetSection("logbus-entityplugin") as EntityPluginConfiguration; } catch { } finally { if (_config == null || _config.entitykey == null || _config.entitykey.Length == 0) { _config = DefaultConfiguration; } } List <DataColumn> primaryKey = new List <DataColumn>(3); foreach (FieldType field in _config.entitykey) { switch (field) { case FieldType.host: { if (_isHostKey) { throw new InvalidOperationException("Primary key configuration broken"); } primaryKey.Add(_colHost); _isHostKey = true; break; } case FieldType.process: { if (_isProcessKey) { throw new InvalidOperationException("Primary key configuration broken"); } primaryKey.Add(_colProc); _isProcessKey = true; break; } case FieldType.logger: { if (_isLoggerKey) { throw new InvalidOperationException("Primary key configuration broken"); } primaryKey.Add(_colLogger); _isLoggerKey = true; break; } case FieldType.module: { if (_isModuleKey) { throw new InvalidOperationException("Primary key configuration broken"); } primaryKey.Add(_colModule); _isModuleKey = true; break; } case FieldType.@class: { if (_isClassKey) { throw new InvalidOperationException("Primary key configuration broken"); } primaryKey.Add(_colClass); _isClassKey = true; break; } case FieldType.method: { if (_isMethodKey) { throw new InvalidOperationException("Primary key configuration broken"); } primaryKey.Add(_colMethod); _isMethodKey = true; break; } } } _primaryKey = new UniqueConstraint("Primary", primaryKey.ToArray(), true); _entityTable.Constraints.Add(_primaryKey); }