diff --git a/src/Tgstation.Server.Client/RateLimitException.cs b/src/Tgstation.Server.Client/RateLimitException.cs index c42a9b69af..acef0d769e 100644 --- a/src/Tgstation.Server.Client/RateLimitException.cs +++ b/src/Tgstation.Server.Client/RateLimitException.cs @@ -31,7 +31,7 @@ namespace Tgstation.Server.Client var secondsString = values.FirstOrDefault(); if (UInt32.TryParse(secondsString, out var seconds)) - RetryAfter = DateTimeOffset.Now.AddSeconds(seconds); + RetryAfter = DateTimeOffset.UtcNow.AddSeconds(seconds); } /// diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs index 629b39382c..4b60ad50fb 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/DiscordProvider.cs @@ -461,7 +461,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers var completionString = errorMessage == null ? "Succeeded" : "Failed"; builder.Footer.Text = completionString; builder.Color = errorMessage == null ? Color.Green : Color.Red; - builder.Timestamp = DateTimeOffset.Now; + builder.Timestamp = DateTimeOffset.UtcNow; builder.Description = errorMessage == null ? "The deployment completed successfully and will be available at the next server reboot." : "The deployment failed."; diff --git a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs index 2767163710..a554d12637 100644 --- a/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs +++ b/src/Tgstation.Server.Host/Components/Chat/Providers/IrcProvider.cs @@ -619,7 +619,7 @@ namespace Tgstation.Server.Host.Components.Chat.Providers ? byondVersion.ToString() : $"{byondVersion.Major}.{byondVersion.Minor}", estimatedCompletionTime.HasValue - ? $" ETA: {estimatedCompletionTime - DateTimeOffset.Now}" + ? $" ETA: {estimatedCompletionTime - DateTimeOffset.UtcNow}" : String.Empty), cancellationToken).ConfigureAwait(false); diff --git a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs index ac78dd6fe4..874de6b9a6 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DmbFactory.cs @@ -270,7 +270,7 @@ namespace Tgstation.Server.Host.Components.Deployment // It constitutes an API violation if it's returned by the DreamDaemonController so just set it here // Bit of a hack, but it works out to be nearly if not the same value that's put in the DB logger.LogTrace("Setting missing StoppedAt for CompileJob.Job #{0}...", compileJob.Job.Id); - compileJob.Job.StoppedAt = DateTimeOffset.Now; + compileJob.Job.StoppedAt = DateTimeOffset.UtcNow; } var providerSubmitted = false; diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs index 4d9f1aa9b4..7b2d5f1b07 100644 --- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs +++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs @@ -807,7 +807,7 @@ namespace Tgstation.Server.Host.Components.Deployment currentChatCallback = chatManager.QueueDeploymentMessage( revisionInformation, byondLock.Version, - DateTimeOffset.Now + estimatedDuration, + DateTimeOffset.UtcNow + estimatedDuration, repository.RemoteRepositoryOwner, repository.RemoteRepositoryName, localCommitExistsOnRemote); diff --git a/src/Tgstation.Server.Host/Components/Repository/Repository.cs b/src/Tgstation.Server.Host/Components/Repository/Repository.cs index e04c113935..3ab698c381 100644 --- a/src/Tgstation.Server.Host/Components/Repository/Repository.cs +++ b/src/Tgstation.Server.Host/Components/Repository/Repository.cs @@ -293,7 +293,7 @@ namespace Tgstation.Server.Host.Components.Repository MergeResult result = null; - var sig = new Signature(new Identity(committerName, committerEmail), DateTimeOffset.Now); + var sig = new Signature(new Identity(committerName, committerEmail), DateTimeOffset.UtcNow); await Task.Factory.StartNew(() => { try @@ -576,7 +576,7 @@ namespace Tgstation.Server.Host.Components.Repository trackedBranch.FriendlyName, committerName, committerEmail); - result = libGitRepo.Merge(trackedBranch, new Signature(committerName, committerEmail, DateTimeOffset.Now), new MergeOptions + result = libGitRepo.Merge(trackedBranch, new Signature(committerName, committerEmail, DateTimeOffset.UtcNow), new MergeOptions { CommitOnSuccess = true, FailOnConflict = true, @@ -748,7 +748,7 @@ namespace Tgstation.Server.Host.Components.Repository new Signature( DefaultCommitterName, DefaultCommitterEmail, - DateTimeOffset.Now), + DateTimeOffset.UtcNow), new MergeOptions { FastForwardStrategy = FastForwardStrategy.FastForwardOnly, diff --git a/src/Tgstation.Server.Host/Components/Session/SessionController.cs b/src/Tgstation.Server.Host/Components/Session/SessionController.cs index b064a63c73..1462b6cd50 100644 --- a/src/Tgstation.Server.Host/Components/Session/SessionController.cs +++ b/src/Tgstation.Server.Host/Components/Session/SessionController.cs @@ -300,7 +300,7 @@ namespace Tgstation.Server.Host.Components.Session bool reattached, bool apiValidate) { - var startTime = DateTimeOffset.Now; + var startTime = DateTimeOffset.UtcNow; var useBridgeRequestForLaunchResult = !reattached && (apiValidate || DMApiAvailable); var startupTask = useBridgeRequestForLaunchResult ? initialBridgeRequestTcs.Task @@ -320,7 +320,7 @@ namespace Tgstation.Server.Host.Components.Session var result = new LaunchResult { ExitCode = process.Lifetime.IsCompleted ? (int?)await process.Lifetime.ConfigureAwait(false) : null, - StartupTime = startupTask.IsCompleted ? (TimeSpan?)(DateTimeOffset.Now - startTime) : null + StartupTime = startupTask.IsCompleted ? (TimeSpan?)(DateTimeOffset.UtcNow - startTime) : null }; logger.LogTrace("Launch result: {0}", result); diff --git a/src/Tgstation.Server.Host/Components/Watchdog/WatchdogBase.cs b/src/Tgstation.Server.Host/Components/Watchdog/WatchdogBase.cs index cf873601f4..5a24b01076 100644 --- a/src/Tgstation.Server.Host/Components/Watchdog/WatchdogBase.cs +++ b/src/Tgstation.Server.Host/Components/Watchdog/WatchdogBase.cs @@ -980,7 +980,7 @@ namespace Tgstation.Server.Host.Components.Watchdog var dumpFileName = diagnosticsIOManager.ResolvePath( diagnosticsIOManager.ConcatPath( DumpDirectory, - $"DreamDaemon-{DateTimeOffset.Now.ToFileStamp()}.dmp")); + $"DreamDaemon-{DateTimeOffset.UtcNow.ToFileStamp()}.dmp")); var session = GetActiveController(); if (session?.Lifetime.IsCompleted != false) diff --git a/src/Tgstation.Server.Host/Controllers/ApiController.cs b/src/Tgstation.Server.Host/Controllers/ApiController.cs index 2f2aee2b8a..2d7fd10387 100644 --- a/src/Tgstation.Server.Host/Controllers/ApiController.cs +++ b/src/Tgstation.Server.Host/Controllers/ApiController.cs @@ -143,7 +143,7 @@ namespace Tgstation.Server.Host.Controllers throw new ArgumentNullException(nameof(rateLimitException)); Logger.LogWarning(rateLimitException, "Exceeded GitHub rate limit!"); - var secondsString = Math.Ceiling((rateLimitException.Reset - DateTimeOffset.Now).TotalSeconds).ToString(CultureInfo.InvariantCulture); + var secondsString = Math.Ceiling((rateLimitException.Reset - DateTimeOffset.UtcNow).TotalSeconds).ToString(CultureInfo.InvariantCulture); Response.Headers.Add(HeaderNames.RetryAfter, secondsString); return StatusCode(HttpStatusCode.TooManyRequests, new ErrorMessage(ErrorCode.GitHubApiRateLimit)); } diff --git a/src/Tgstation.Server.Host/Controllers/RepositoryController.cs b/src/Tgstation.Server.Host/Controllers/RepositoryController.cs index 1a900e812f..c76b40682b 100644 --- a/src/Tgstation.Server.Host/Controllers/RepositoryController.cs +++ b/src/Tgstation.Server.Host/Controllers/RepositoryController.cs @@ -815,7 +815,7 @@ namespace Tgstation.Server.Host.Controllers { Author = ex.Message, BodyAtMerge = ex.Message, - MergedAt = DateTimeOffset.Now, + MergedAt = DateTimeOffset.UtcNow, TitleAtMerge = ex.Message, Comment = I.Comment, Number = I.Number, diff --git a/src/Tgstation.Server.Host/Controllers/UserController.cs b/src/Tgstation.Server.Host/Controllers/UserController.cs index c1d14a5d49..f0f3c80888 100644 --- a/src/Tgstation.Server.Host/Controllers/UserController.cs +++ b/src/Tgstation.Server.Host/Controllers/UserController.cs @@ -250,7 +250,7 @@ namespace Tgstation.Server.Host.Controllers if (model.Enabled.HasValue) { if (originalUser.Enabled.Value && !model.Enabled.Value) - originalUser.LastPasswordUpdate = DateTimeOffset.Now; + originalUser.LastPasswordUpdate = DateTimeOffset.UtcNow; originalUser.Enabled = model.Enabled.Value; } @@ -431,7 +431,7 @@ namespace Tgstation.Server.Host.Controllers return new Models.User { - CreatedAt = DateTimeOffset.Now, + CreatedAt = DateTimeOffset.UtcNow, CreatedBy = AuthenticationContext.User, Enabled = model.Enabled ?? false, PermissionSet = permissionSet, diff --git a/src/Tgstation.Server.Host/Database/DatabaseSeeder.cs b/src/Tgstation.Server.Host/Database/DatabaseSeeder.cs index 9b5816ab16..9e1c6afd79 100644 --- a/src/Tgstation.Server.Host/Database/DatabaseSeeder.cs +++ b/src/Tgstation.Server.Host/Database/DatabaseSeeder.cs @@ -83,7 +83,7 @@ namespace Tgstation.Server.Host.Database bool alreadyExists = tgsUser != null; tgsUser ??= new User() { - CreatedAt = DateTimeOffset.Now, + CreatedAt = DateTimeOffset.UtcNow, CanonicalName = User.CanonicalizeName(User.TgsSystemUserName), }; @@ -111,7 +111,7 @@ namespace Tgstation.Server.Host.Database AdministrationRights = RightsHelper.AllRights(), InstanceManagerRights = RightsHelper.AllRights(), }, - CreatedAt = DateTimeOffset.Now, + CreatedAt = DateTimeOffset.UtcNow, Name = Api.Models.User.AdminName, CanonicalName = User.CanonicalizeName(Api.Models.User.AdminName), Enabled = true, diff --git a/src/Tgstation.Server.Host/Jobs/JobManager.cs b/src/Tgstation.Server.Host/Jobs/JobManager.cs index 891d4bc409..afd47a3b6b 100644 --- a/src/Tgstation.Server.Host/Jobs/JobManager.cs +++ b/src/Tgstation.Server.Host/Jobs/JobManager.cs @@ -147,7 +147,7 @@ namespace Tgstation.Server.Host.Jobs }; databaseContext.Jobs.Attach(attachedJob); - attachedJob.StoppedAt = DateTimeOffset.Now; + attachedJob.StoppedAt = DateTimeOffset.UtcNow; attachedJob.ExceptionDetails = job.ExceptionDetails; attachedJob.ErrorCode = job.ErrorCode; attachedJob.Cancelled = job.Cancelled; @@ -177,7 +177,7 @@ namespace Tgstation.Server.Host.Jobs if (operation == null) throw new ArgumentNullException(nameof(operation)); - job.StartedAt = DateTimeOffset.Now; + job.StartedAt = DateTimeOffset.UtcNow; job.Cancelled = false; job.Instance = new Models.Instance @@ -238,7 +238,7 @@ namespace Tgstation.Server.Host.Jobs var job = new Job { Id = I }; databaseContext.Jobs.Attach(job); job.Cancelled = true; - job.StoppedAt = DateTimeOffset.Now; + job.StoppedAt = DateTimeOffset.UtcNow; } await databaseContext.Save(cancellationToken).ConfigureAwait(false); diff --git a/src/Tgstation.Server.Host/Security/CryptographySuite.cs b/src/Tgstation.Server.Host/Security/CryptographySuite.cs index 979ca8b5df..491d245ecd 100644 --- a/src/Tgstation.Server.Host/Security/CryptographySuite.cs +++ b/src/Tgstation.Server.Host/Security/CryptographySuite.cs @@ -46,7 +46,7 @@ namespace Tgstation.Server.Host.Security throw new ArgumentNullException(nameof(newPassword)); user.PasswordHash = passwordHasher.HashPassword(user, newPassword); if (!newUser) - user.LastPasswordUpdate = DateTimeOffset.Now; + user.LastPasswordUpdate = DateTimeOffset.UtcNow; } /// diff --git a/src/Tgstation.Server.Host/Security/IdentityCacheObject.cs b/src/Tgstation.Server.Host/Security/IdentityCacheObject.cs index 9b54996f93..1684935a6c 100644 --- a/src/Tgstation.Server.Host/Security/IdentityCacheObject.cs +++ b/src/Tgstation.Server.Host/Security/IdentityCacheObject.cs @@ -41,9 +41,9 @@ namespace Tgstation.Server.Host.Security if (onExpiry == null) throw new ArgumentNullException(nameof(onExpiry)); - var now = DateTimeOffset.Now; + var now = DateTimeOffset.UtcNow; if (expiry < now) - throw new ArgumentOutOfRangeException(nameof(expiry), expiry, "expiry must be greater than DateTimeOffset.Now!"); + throw new ArgumentOutOfRangeException(nameof(expiry), expiry, "expiry must be greater than DateTimeOffset.UtcNow!"); cancellationTokenSource = new CancellationTokenSource(); diff --git a/src/Tgstation.Server.Host/Security/OAuth/TGForumsOAuthValidator.cs b/src/Tgstation.Server.Host/Security/OAuth/TGForumsOAuthValidator.cs index 4e6028987e..3024e61001 100644 --- a/src/Tgstation.Server.Host/Security/OAuth/TGForumsOAuthValidator.cs +++ b/src/Tgstation.Server.Host/Security/OAuth/TGForumsOAuthValidator.cs @@ -56,7 +56,7 @@ namespace Tgstation.Server.Host.Security.OAuth /// public override async Task GetProviderInfo(CancellationToken cancellationToken) { - var expiredSessions = sessions.RemoveAll(x => x.Item2.AddMinutes(SessionRetentionMinutes) < DateTimeOffset.Now); + var expiredSessions = sessions.RemoveAll(x => x.Item2.AddMinutes(SessionRetentionMinutes) < DateTimeOffset.UtcNow); if (expiredSessions > 0) Logger.LogTrace("Expired {0} sessions", expiredSessions); @@ -86,7 +86,7 @@ namespace Tgstation.Server.Host.Security.OAuth sessions.Add( Tuple.Create( newSession, - DateTimeOffset.Now)); + DateTimeOffset.UtcNow)); return new OAuthProviderInfo { ClientId = newSession.SessionPublicToken, diff --git a/src/Tgstation.Server.Host/Security/TokenFactory.cs b/src/Tgstation.Server.Host/Security/TokenFactory.cs index 2c9a86df45..d4deedbb62 100644 --- a/src/Tgstation.Server.Host/Security/TokenFactory.cs +++ b/src/Tgstation.Server.Host/Security/TokenFactory.cs @@ -81,7 +81,7 @@ namespace Tgstation.Server.Host.Security if (user == null) throw new ArgumentNullException(nameof(user)); - var now = DateTimeOffset.Now; + var now = DateTimeOffset.UtcNow; var nowUnix = now.ToUnixTimeSeconds(); // this prevents validation conflicts down the line diff --git a/src/Tgstation.Server.Host/Swarm/SwarmService.cs b/src/Tgstation.Server.Host/Swarm/SwarmService.cs index 2da4d811a2..29f9d2da45 100644 --- a/src/Tgstation.Server.Host/Swarm/SwarmService.cs +++ b/src/Tgstation.Server.Host/Swarm/SwarmService.cs @@ -728,7 +728,7 @@ namespace Tgstation.Server.Host.Swarm { logger.LogInformation("Sucessfully registered with ID {0}", requestedRegistrationId); controllerRegistration = requestedRegistrationId; - lastControllerHealthCheck = DateTimeOffset.Now; + lastControllerHealthCheck = DateTimeOffset.UtcNow; return SwarmRegistrationResult.Success; } @@ -906,7 +906,7 @@ namespace Tgstation.Server.Host.Swarm var delay = swarmController ? TimeSpan.FromMinutes(ControllerHealthCheckIntervalMinutes) : lastControllerHealthCheck.HasValue - ? (lastControllerHealthCheck.Value.AddMinutes(NodeHealthCheckIntervalMinutes) - DateTimeOffset.Now) + ? (lastControllerHealthCheck.Value.AddMinutes(NodeHealthCheckIntervalMinutes) - DateTimeOffset.UtcNow) : TimeSpan.FromMinutes(NodeHealthCheckIntervalMinutes); await asyncDelayer.Delay( delay, @@ -921,7 +921,7 @@ namespace Tgstation.Server.Host.Swarm continue; // unregistered } - if ((DateTimeOffset.Now - lastControllerHealthCheck.Value).TotalMinutes < NodeHealthCheckIntervalMinutes) + if ((DateTimeOffset.UtcNow - lastControllerHealthCheck.Value).TotalMinutes < NodeHealthCheckIntervalMinutes) { logger.LogTrace("Controller seems to be active, skipping health check."); continue; @@ -960,7 +960,7 @@ namespace Tgstation.Server.Host.Swarm if (registrationId != controllerRegistration) return false; - lastControllerHealthCheck = DateTimeOffset.Now; + lastControllerHealthCheck = DateTimeOffset.UtcNow; return true; } diff --git a/src/Tgstation.Server.Host/Transfer/FileTransferService.cs b/src/Tgstation.Server.Host/Transfer/FileTransferService.cs index 812e2c11f7..08c2649b86 100644 --- a/src/Tgstation.Server.Host/Transfer/FileTransferService.cs +++ b/src/Tgstation.Server.Host/Transfer/FileTransferService.cs @@ -127,12 +127,12 @@ namespace Tgstation.Server.Host.Transfer async Task ExpireAsync() { - var expireAt = DateTimeOffset.Now + TimeSpan.FromMinutes(TicketValidityMinutes); + var expireAt = DateTimeOffset.UtcNow + TimeSpan.FromMinutes(TicketValidityMinutes); try { await oldExpireTask.WithToken(disposeCts.Token).ConfigureAwait(false); - var now = DateTimeOffset.Now; + var now = DateTimeOffset.UtcNow; if (now < expireAt) await asyncDelayer.Delay(expireAt - now, disposeCts.Token).ConfigureAwait(false); } diff --git a/tests/Tgstation.Server.Client.Tests/Components/TestDreamDaemonClient.cs b/tests/Tgstation.Server.Client.Tests/Components/TestDreamDaemonClient.cs index a70423e97c..60d40191ad 100644 --- a/tests/Tgstation.Server.Client.Tests/Components/TestDreamDaemonClient.cs +++ b/tests/Tgstation.Server.Client.Tests/Components/TestDreamDaemonClient.cs @@ -1,4 +1,4 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using System; using System.Collections.Generic; @@ -19,7 +19,7 @@ namespace Tgstation.Server.Client.Components.Tests var example = new Job { Id = 347, - StartedAt = DateTimeOffset.Now + StartedAt = DateTimeOffset.UtcNow }; var inst = new Instance diff --git a/tests/Tgstation.Server.Tests/IntegrationTest.cs b/tests/Tgstation.Server.Tests/IntegrationTest.cs index bb105f31fb..77fd0425a3 100644 --- a/tests/Tgstation.Server.Tests/IntegrationTest.cs +++ b/tests/Tgstation.Server.Tests/IntegrationTest.cs @@ -122,7 +122,7 @@ namespace Tgstation.Server.Tests async Task CreateAdminClient(Uri url, CancellationToken cancellationToken) { - var giveUpAt = DateTimeOffset.Now.AddSeconds(60); + var giveUpAt = DateTimeOffset.UtcNow.AddSeconds(60); for(var I = 1; ; ++I) { try @@ -139,14 +139,14 @@ namespace Tgstation.Server.Tests catch (HttpRequestException) { //migrating, to be expected - if (DateTimeOffset.Now > giveUpAt) + if (DateTimeOffset.UtcNow > giveUpAt) throw; await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } catch (ServiceUnavailableException) { // migrating, to be expected - if (DateTimeOffset.Now > giveUpAt) + if (DateTimeOffset.UtcNow > giveUpAt) throw; await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } @@ -227,7 +227,7 @@ namespace Tgstation.Server.Tests var user = new Host.Models.User { Name = TestUserName, - CreatedAt = DateTimeOffset.Now, + CreatedAt = DateTimeOffset.UtcNow, OAuthConnections = new List(), CanonicalName = Host.Models.User.CanonicalizeName(TestUserName), Enabled = false, @@ -350,7 +350,7 @@ namespace Tgstation.Server.Tests } catch (Exception ex) { - Console.WriteLine($"[{DateTimeOffset.Now}] TEST ERROR: {ex}"); + Console.WriteLine($"[{DateTimeOffset.UtcNow}] TEST ERROR: {ex}"); serverCts.Cancel(); throw; } @@ -396,7 +396,7 @@ namespace Tgstation.Server.Tests await Task.WhenAny(serverTask, Task.Delay(TimeSpan.FromMinutes(1), cancellationToken)); Assert.IsTrue(serverTask.IsCompleted); - var preStartupTime = DateTimeOffset.Now; + var preStartupTime = DateTimeOffset.UtcNow; serverTask = server.Run(cancellationToken); using (var adminClient = await CreateAdminClient(server.Url, cancellationToken)) @@ -440,7 +440,7 @@ namespace Tgstation.Server.Tests await Task.WhenAny(serverTask, Task.Delay(TimeSpan.FromMinutes(1), cancellationToken)); Assert.IsTrue(serverTask.IsCompleted); - preStartupTime = DateTimeOffset.Now; + preStartupTime = DateTimeOffset.UtcNow; serverTask = server.Run(cancellationToken); using (var adminClient = await CreateAdminClient(server.Url, cancellationToken)) { @@ -481,12 +481,12 @@ namespace Tgstation.Server.Tests } catch(ApiException ex) { - Console.WriteLine($"[{DateTimeOffset.Now}] TEST ERROR: {ex.ErrorCode}: {ex.Message}\n{ex.AdditionalServerData}"); + Console.WriteLine($"[{DateTimeOffset.UtcNow}] TEST ERROR: {ex.ErrorCode}: {ex.Message}\n{ex.AdditionalServerData}"); throw; } catch (Exception ex) { - Console.WriteLine($"[{DateTimeOffset.Now}] TEST ERROR: {ex}"); + Console.WriteLine($"[{DateTimeOffset.UtcNow}] TEST ERROR: {ex}"); throw; } finally