in Amazon.KinesisTap.Core/Utility.cs [506:569]
public static DateTime GetUniformTimeStamp()
{
// if a valid unexpired ntp server time is available then just calculate the time based on that. The time expires in 12 hrs.
if (_baseNTPTime != DateTime.MinValue && _isCorrectNTPTime && _stopwatchForUniformTime.ElapsedMilliseconds < 43200000)
{
return _baseNTPTime.AddMilliseconds(_stopwatchForUniformTime.ElapsedMilliseconds);
}
DateTime baseNTPServerTime = DateTime.MinValue;
bool useLastServerTime = false;
var defaultProvider = new DefaultNetworkStatusProvider(NullLogger.Instance);
defaultProvider.StartAsync(default).AsTask().GetAwaiter().GetResult();
var networkstatus = new NetworkStatus(defaultProvider);
// Query NTP server only if network is available
if (networkstatus.IsAvailable())
{
if (GetElapsedMilliseconds() - _elapsedmsSinceFailure > 60000)
{
if (UniformTime == null)
UniformTime = new UniformServerTime();
// Get NTP server time.
baseNTPServerTime = UniformTime.GetNTPServerTime();
if (baseNTPServerTime == DateTime.MinValue)
{
_elapsedmsSinceFailure = GetElapsedMilliseconds();
}
}
}
if (baseNTPServerTime == DateTime.MinValue)
{
// Get time based on local system time in case of failure.
if (_baseNTPTime == DateTime.MinValue || !_isCorrectNTPTime)
{
baseNTPServerTime = DateTime.UtcNow;
}
else
{
_isCorrectNTPTime = true;
useLastServerTime = true;
}
}
else
{
_isCorrectNTPTime = true;
}
if (useLastServerTime == false)
{
_baseNTPTime = baseNTPServerTime;
_stopwatchForUniformTime.Stop();
_stopwatchForUniformTime = Stopwatch.StartNew();
}
else
{
baseNTPServerTime = _baseNTPTime.AddMilliseconds(_stopwatchForUniformTime.ElapsedMilliseconds);
}
return baseNTPServerTime;
}