in Amazon.KinesisTap.DiagnosticTool.Core/ConfigValidator.cs [117:194]
private bool LoadSources(IDictionary<string, string> sources, IConfigurationRoot config, IList<string> messages)
{
var sourcesSection = config.GetSection("Sources");
var sourceSections = sourcesSection.GetChildren();
foreach (var sourceSection in sourceSections)
{
string id = sourceSection["Id"];
string sourceType = sourceSection["SourceType"];
string initialPosition = sourceSection["InitialPosition"];
ISourceValidator sourceValidator;
if (sourceType.Equals("DirectorySource"))
{
if (_sourceValidators.TryGetValue("DirectorySource", out sourceValidator))
{
if (!sourceValidator.ValidateSource(sourceSection, id, messages))
{
return false;
}
}
}
else if (sourceType.Equals("WindowsEventLogSource"))
{
if (_sourceValidators.TryGetValue("WindowsEventLogSource", out sourceValidator))
{
if (!sourceValidator.ValidateSource(sourceSection, id, messages))
{
return false;
}
}
}
else if (sourceType.Equals("WindowsPerformanceCounterSource"))
{
if (_sourceValidators.TryGetValue("WindowsPerformanceCounterSource", out sourceValidator))
{
if (!sourceValidator.ValidateSource(sourceSection, id, messages))
{
return false;
}
}
}
if (!string.IsNullOrEmpty(initialPosition))
{
initialPosition = initialPosition.ToLower();
if (!_initialPositions.Contains(initialPosition))
{
messages.Add($"{initialPosition} is not a valid InitialPosition in source ID: {id}.");
return false;
}
if (initialPosition.Equals("timestamp"))
{
string initialPositionTimestamp = sourceSection["InitialPositionTimestamp"];
if (string.IsNullOrEmpty(initialPositionTimestamp))
{
messages.Add($"InitialPosition 'Timestamp' is required in source ID: {id}.");
return false;
}
else
{
string timestampFormat = "yyyy-MM-dd HH:mm:ss.ffff";
if (!DateTime.TryParseExact(initialPositionTimestamp, timestampFormat, new CultureInfo("en-US"),
DateTimeStyles.None, out DateTime expectedDate))
{
messages.Add($"Timestamp doesn't match the DateTime format: {timestampFormat} in source {id}.");
return false;
}
}
}
}
sources.Add(id, sourceType);
}
return true;
}