Skip to content

Commit 051f75a

Browse files
committed
Prefix lines in seed log with worker id.
1 parent a72c9f3 commit 051f75a

3 files changed

Lines changed: 106 additions & 3 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Copyright Subatomix Research Inc.
2+
// SPDX-License-Identifier: MIT
3+
4+
namespace PSql.Deploy;
5+
6+
using static SqlMessageConstants;
7+
8+
[TestFixture]
9+
public class PrefixTextWriterSqlMessageLoggerTests
10+
{
11+
private readonly PrefixTextWriterSqlMessageLogger _logger;
12+
private readonly StringWriter _writer;
13+
14+
public PrefixTextWriterSqlMessageLoggerTests()
15+
{
16+
_writer = new();
17+
_logger = new(_writer, prefix: "Test>");
18+
}
19+
20+
[Test]
21+
public void Construct_NullWriter()
22+
{
23+
Should.Throw<ArgumentNullException>(() =>
24+
{
25+
_ = new PrefixTextWriterSqlMessageLogger(null!, "any");
26+
});
27+
}
28+
29+
[Test]
30+
public void Construct_NullPrefix()
31+
{
32+
Should.Throw<ArgumentNullException>(() =>
33+
{
34+
_ = new PrefixTextWriterSqlMessageLogger(_writer, null!);
35+
});
36+
}
37+
38+
[Test]
39+
public void Log_Information()
40+
{
41+
_logger.Log("foo", line: 42, number: 1337, MaxInformationalSeverity, message: "a");
42+
43+
_writer.ToString().ShouldBe("Test> a" + Environment.NewLine);
44+
}
45+
46+
[Test]
47+
public void Log_Error()
48+
{
49+
(11).ShouldBeGreaterThan(MaxInformationalSeverity);
50+
51+
_logger.Log("foo", line: 42, number: 1337, severity: 11, "a");
52+
53+
_writer.ToString().ShouldBe("Test> foo:42: E1337:11: a" + Environment.NewLine);
54+
}
55+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright Subatomix Research Inc.
2+
// SPDX-License-Identifier: MIT
3+
4+
namespace PSql.Deploy;
5+
6+
using static SqlMessageConstants;
7+
8+
/// <summary>
9+
/// An <see cref="ISqlMessageLogger"/> implementation that writes messages to
10+
/// a <see cref="TextWriter"/> with a prefix.
11+
/// </summary>
12+
public sealed class PrefixTextWriterSqlMessageLogger : ISqlMessageLogger
13+
{
14+
private readonly TextWriter _writer;
15+
private readonly string _prefix;
16+
17+
/// <summary>
18+
/// Initializes a new <see cref="PrefixTextWriterSqlMessageLogger"/>
19+
/// instance with the specified writer and prefix.
20+
/// </summary>
21+
/// <param name="writer">
22+
/// The writer to use to write messages.
23+
/// </param>
24+
/// <param name="prefix">
25+
/// The prefix to prepend to each message.
26+
/// </param>
27+
/// <exception cref="ArgumentNullException">
28+
/// <paramref name="writer"/> is <see langword="null"/>.
29+
/// </exception>
30+
public PrefixTextWriterSqlMessageLogger(TextWriter writer, string prefix)
31+
{
32+
ArgumentNullException.ThrowIfNull(writer);
33+
ArgumentNullException.ThrowIfNull(prefix);
34+
35+
_writer = writer;
36+
_prefix = prefix;
37+
}
38+
39+
/// <inheritdoc/>
40+
public void Log(string procedure, int line, int number, int severity, string? message)
41+
{
42+
if (severity <= MaxInformationalSeverity)
43+
_writer.WriteLine($"{_prefix} {message}");
44+
else
45+
_writer.WriteLine($"{_prefix} {procedure}:{line}: E{number}:{severity}: {message}");
46+
}
47+
}

PSql.Deploy.Engine/Seeds/SeedApplicator.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ private void Validate(DependencyQueue<SeedModule> queue)
195195

196196
private async Task SeedWorkerMainAsync(QueueContext context)
197197
{
198-
await using var connection = Connect();
198+
await using var connection = Connect(context);
199199

200200
await PrepareAsync(connection, context);
201201

@@ -207,11 +207,12 @@ bool CanTake(SeedModule module)
207207
await ExecuteAsync(module, connection, context);
208208
}
209209

210-
private ISeedTargetConnection Connect()
210+
private ISeedTargetConnection Connect(QueueContext context)
211211
{
212212
Assume.NotNull(_logWriter);
213213

214-
var logger = new TextWriterSqlMessageLogger(_logWriter);
214+
var prefix = $"{context.WorkerId}>";
215+
var logger = new PrefixTextWriterSqlMessageLogger(_logWriter, prefix);
215216

216217
return Session.Connect(Target, logger);
217218
}

0 commit comments

Comments
 (0)