/// <summary> /// Default constructor. /// </summary> /// <param name="parseLogLevel">Indicates that the <b>LOG-LEVEL</b> environment variable should be parsed (defaults to <c>true</c>).</param> /// <param name="version"> /// Optionally specifies the semantic version of the current program. This can be a somewhat arbitrary /// string that matches this regex: <b>"[0-9a-zA-Z\.-_/]+"</b>. This defaults to <c>null</c>. /// </param> /// <param name="logFilter"> /// Optionally specifies a filter predicate to be used for filtering log entries. This examines /// the <see cref="LogEvent"/> and returns <c>true</c> if the event should be logged or <c>false</c> /// when it is to be ignored. All events will be logged when this is <c>null</c>. /// </param> /// <param name="isLogEnabledFunc"> /// Optionally specifies a function that will be called at runtime to /// determine whether to event logging is actually enabled. This defaults /// to <c>null</c> which will always log events. /// </param> /// <param name="name"> /// Optionally specifies the logr manager's name. This can be useful when debugging the /// log manager itself. /// </param> /// <param name="writer">Optionally specifies the output writer. This defaults to <see cref="Console.Error"/>.</param> public LogManager(bool parseLogLevel = true, string version = null, Func <LogEvent, bool> logFilter = null, Func <bool> isLogEnabledFunc = null, TextWriter writer = null, string name = null) { this.Name = name; if (parseLogLevel && !Enum.TryParse <LogLevel>(Environment.GetEnvironmentVariable("LOG_LEVEL"), true, out logLevel)) { logLevel = LogLevel.Info; } if (!string.IsNullOrEmpty(version) && VersionRegex.IsMatch(version)) { this.Version = version; } else { this.Version = "unknown"; } this.logFilter = logFilter; this.isLogEnabledFunc = isLogEnabledFunc; this.writer = writer; // $hack(jefflill): // // On Linux, we're going to initialize the [emitCount] to the index persisted to // the [/dev/shm/log-index] file if this is present and parsable. This will // align the .NET logging index with any event written via startup scripts. // // https://github.com/nforgeio/neonKUBE/issues/578 emitCount = 0; if (NeonHelper.IsLinux) { try { emitCount = long.Parse(File.ReadAllText("/dev/shm/log-index").Trim()); } catch { // Ignore any exceptions; we'll just start the index at 0. } } }
public bool Validate(out IList <string> messages) { messages = ( from k in Vars.Keys where ValidVarRegex.IsMatch(k) == false select "Vars has key '" + k + "' which contains invalid characters. Allowed: Aa-Zz 0-9 - _" ).ToList(); if (string.IsNullOrWhiteSpace(Project)) { messages.Add("A project name must be specified in the configuration."); } if (VersionRegex.IsMatch(Version) == false) { messages.Add("A valid version number in the format YY.MM.DD.II must be provided."); } return(messages.Count == 0); }
public static bool IsManyToMany(TableSchema table) { // Bypass logic if table contains Extended Property for ManyToMany if (table.ExtendedProperties.Contains(ExtendedPropertyManyToMany)) { bool manyToMany; if (Boolean.TryParse(table.ExtendedProperties[ExtendedPropertyManyToMany].Value.ToString(), out manyToMany)) { return(manyToMany); } } // 1) Table must have Two ForeignKeys. // a) Must be two unique tables. // 2) All columns must be either... // a) Member of the Primary Key. // b) Member of a Foreign Key. // c) A DateTime stamp (CreateDate, EditDate, etc). // d) Name matches Version Regex. if (table.ForeignKeys.Count != 2) { return(false); } bool result = true; List <TableSchema> foreignTables = new List <TableSchema>(); foreach (ColumnSchema column in table.Columns) { if (!(column.IsForeignKeyMember || column.IsPrimaryKeyMember || column.SystemType.Equals(typeof(DateTime)) || VersionRegex.IsMatch(column.Name))) { result = false; break; } else if (column.IsForeignKeyMember) { foreach (TableKeySchema tks in column.Table.ForeignKeys) { if (tks.ForeignKeyMemberColumns.Contains(column)) { if (!foreignTables.Contains(tks.PrimaryKeyTable)) { foreignTables.Add(tks.PrimaryKeyTable); } break; } } } } if (foreignTables.Count != 2) { result = false; } return(result); }