Skip to content

Commit 42d7047

Browse files
committed
gh-61 address additional warnings/messages reported by code analyzer
Signed-off-by: Victor Chang <[email protected]>
1 parent 3e789e7 commit 42d7047

27 files changed

+214
-136
lines changed

src/CLI/Commands/ConfigCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ private async Task<int> InitHandlerAsync(IHost host, bool verbose, bool yes, Can
151151

152152
try
153153
{
154-
await configService.Initialize(cancellationToken);
154+
await configService.Initialize(cancellationToken).ConfigureAwait(false);
155155
}
156156
catch (Exception ex)
157157
{

src/CLI/Logging/ConsoleLogger.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
3535
return;
3636
}
3737

38-
string message = formatter(state, exception);
38+
var message = formatter(state, exception);
3939

4040
if (exception != null)
4141
{

src/CLI/Logging/ConsoleLoggerProvider.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class ConsoleLoggerProvider : ILoggerProvider
1111
{
1212
private readonly ConcurrentDictionary<string, ConsoleLogger> _loggers;
1313
private readonly ConsoleLoggerConfiguration _configuration;
14+
private bool _disposedValue;
1415

1516
public ConsoleLoggerProvider(IOptions<ConsoleLoggerConfiguration> configuration)
1617
{
@@ -21,9 +22,25 @@ public ConsoleLoggerProvider(IOptions<ConsoleLoggerConfiguration> configuration)
2122
public ILogger CreateLogger(string categoryName)
2223
=> _loggers.GetOrAdd(categoryName, name => new ConsoleLogger(name, _configuration));
2324

25+
protected virtual void Dispose(bool disposing)
26+
{
27+
if (!_disposedValue)
28+
{
29+
if (disposing)
30+
{
31+
_loggers.Clear();
32+
33+
}
34+
35+
_disposedValue = true;
36+
}
37+
}
38+
2439
public void Dispose()
2540
{
26-
_loggers.Clear();
41+
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
42+
Dispose(disposing: true);
43+
System.GC.SuppressFinalize(this);
2744
}
2845
}
2946
}

src/CLI/Services/DockerRunner.cs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,18 @@ public async Task<RunnerState> IsApplicationRunning(ImageVersion imageVersion, C
3535
Guard.Against.Null(imageVersion, nameof(imageVersion));
3636

3737
_logger.Log(LogLevel.Debug, $"Checking for existing {Strings.ApplicationName} ({imageVersion.Version}) containers...");
38-
var parameters = new ContainersListParameters();
39-
parameters.Filters = new Dictionary<string, IDictionary<string, bool>>
38+
var parameters = new ContainersListParameters
4039
{
41-
["ancestor"] = new Dictionary<string, bool>
40+
Filters = new Dictionary<string, IDictionary<string, bool>>
4241
{
43-
[imageVersion.Id] = true
42+
["ancestor"] = new Dictionary<string, bool>
43+
{
44+
[imageVersion.Id] = true
45+
}
4446
}
4547
};
46-
var matches = await _dockerClient.Containers.ListContainersAsync(parameters, cancellationToken);
47-
if (matches is null || matches.Count() == 0)
48+
var matches = await _dockerClient.Containers.ListContainersAsync(parameters, cancellationToken).ConfigureAwait(false);
49+
if (matches is null || matches.Count == 0)
4850
{
4951
return new RunnerState { IsRunning = false };
5052
}
@@ -53,34 +55,36 @@ public async Task<RunnerState> IsApplicationRunning(ImageVersion imageVersion, C
5355
}
5456

5557
public async Task<ImageVersion> GetLatestApplicationVersion(CancellationToken cancellationToken = default)
56-
=> await GetLatestApplicationVersion(_configurationService.Configurations.DockerImagePrefix, cancellationToken);
58+
=> await GetLatestApplicationVersion(_configurationService.Configurations.DockerImagePrefix, cancellationToken).ConfigureAwait(false);
5759

5860
public async Task<ImageVersion> GetLatestApplicationVersion(string version, CancellationToken cancellationToken = default)
5961
{
6062
Guard.Against.NullOrWhiteSpace(version, nameof(version));
6163

62-
var results = await GetApplicationVersions(version, cancellationToken);
64+
var results = await GetApplicationVersions(version, cancellationToken).ConfigureAwait(false);
6365
return results?.OrderByDescending(p => p.Created).FirstOrDefault();
6466
}
6567

6668
public async Task<IList<ImageVersion>> GetApplicationVersions(CancellationToken cancellationToken = default)
67-
=> await GetApplicationVersions(_configurationService.Configurations.DockerImagePrefix, cancellationToken);
69+
=> await GetApplicationVersions(_configurationService.Configurations.DockerImagePrefix, cancellationToken).ConfigureAwait(false);
6870

6971
public async Task<IList<ImageVersion>> GetApplicationVersions(string label, CancellationToken cancellationToken = default)
7072
{
7173
Guard.Against.NullOrWhiteSpace(label, nameof(label));
7274

7375
_logger.Log(LogLevel.Debug, "Connecting to Docker...");
74-
var parameters = new ImagesListParameters();
75-
parameters.Filters = new Dictionary<string, IDictionary<string, bool>>
76+
var parameters = new ImagesListParameters
7677
{
77-
["reference"] = new Dictionary<string, bool>
78+
Filters = new Dictionary<string, IDictionary<string, bool>>
7879
{
79-
[label] = true
80+
["reference"] = new Dictionary<string, bool>
81+
{
82+
[label] = true
83+
}
8084
}
8185
};
8286
_logger.Log(LogLevel.Debug, "Retrieving images from Docker...");
83-
var images = await _dockerClient.Images.ListImagesAsync(parameters, cancellationToken);
87+
var images = await _dockerClient.Images.ListImagesAsync(parameters, cancellationToken).ConfigureAwait(false);
8488
return images?.Select(p => new ImageVersion { Version = p.RepoTags.First(), Id = p.ID, Created = p.Created }).ToList();
8589
}
8690

@@ -118,7 +122,7 @@ public async Task<bool> StartApplication(ImageVersion imageVersion, Cancellation
118122
_fileSystem.Directory.CreateDirectoryIfNotExists(_configurationService.Configurations.HostLogsStorageMount);
119123
createContainerParams.HostConfig.Mounts.Add(new Mount { Type = "bind", ReadOnly = false, Source = _configurationService.Configurations.HostLogsStorageMount, Target = _configurationService.Configurations.LogStoragePath });
120124

121-
var response = await _dockerClient.Containers.CreateContainerAsync(createContainerParams, cancellationToken);
125+
var response = await _dockerClient.Containers.CreateContainerAsync(createContainerParams, cancellationToken).ConfigureAwait(false);
122126
_logger.Log(LogLevel.Debug, $"{Strings.ApplicationName} created with container ID {response.ID.Substring(0, 12)}");
123127
if (response.Warnings.Any())
124128
{
@@ -127,7 +131,7 @@ public async Task<bool> StartApplication(ImageVersion imageVersion, Cancellation
127131

128132
_logger.Log(LogLevel.Debug, $"Starting container {response.ID.Substring(0, 12)}...");
129133
var containerStartParams = new ContainerStartParameters();
130-
if (!await _dockerClient.Containers.StartContainerAsync(response.ID, containerStartParams, cancellationToken))
134+
if (!await _dockerClient.Containers.StartContainerAsync(response.ID, containerStartParams, cancellationToken).ConfigureAwait(false))
131135
{
132136
_logger.Log(LogLevel.Error, $"Error starting container {response.ID.Substring(0, 12)}");
133137
return false;
@@ -144,7 +148,7 @@ public async Task<bool> StopApplication(RunnerState runnerState, CancellationTok
144148
Guard.Against.Null(runnerState, nameof(runnerState));
145149

146150
_logger.Log(LogLevel.Debug, $"Stopping {Strings.ApplicationName} with container ID {runnerState.IdShort}.");
147-
var result = await _dockerClient.Containers.StopContainerAsync(runnerState.Id, new ContainerStopParameters() { WaitBeforeKillSeconds = 60 }, cancellationToken);
151+
var result = await _dockerClient.Containers.StopContainerAsync(runnerState.Id, new ContainerStopParameters() { WaitBeforeKillSeconds = 60 }, cancellationToken).ConfigureAwait(false);
148152
_logger.Log(LogLevel.Information, $"{Strings.ApplicationName} with container ID {runnerState.IdShort} stopped.");
149153
return result;
150154
}

src/CLI/Test/.editorconfig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# editorconfig.org
2+
3+
# top-most EditorConfig file
4+
root = false
5+
6+
7+
[*.cs]
8+
9+
# Default severity for all analyzer diagnostics
10+
dotnet_analyzer_diagnostic.severity = none

src/CLI/Test/DockerRunnerTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ public async Task GetApplicationVersions()
4747
var runner = new DockerRunner(_logger.Object, _configurationService.Object, _fileSystem.Object, _dockerClient.Object);
4848
var data = new List<ImagesListResponse>
4949
{
50-
new ImagesListResponse{ RepoTags = new List<string>{ "123"}, ID = $"sha256:{Guid.NewGuid().ToString("N")}", Created = DateTime.Now },
51-
new ImagesListResponse{ RepoTags = new List<string>{ "456"}, ID = $"sha256:{Guid.NewGuid().ToString("N")}", Created = DateTime.Now }
50+
new ImagesListResponse{ RepoTags = new List<string>{ "123"}, ID = $"sha256:{Guid.NewGuid():N}", Created = DateTime.Now },
51+
new ImagesListResponse{ RepoTags = new List<string>{ "456"}, ID = $"sha256:{Guid.NewGuid():N}", Created = DateTime.Now }
5252
};
5353

5454
_configurationService.SetupGet(p => p.Configurations.DockerImagePrefix).Returns("PREFIX");

src/Client/Test/InformaticsGatewayClientTest.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ public InformaticsGatewayClientTest()
2424
[Fact(DisplayName = "Contructor configures all services")]
2525
public void Contructor()
2626
{
27-
var baseUri = new Uri("http://localhost:5000");
2827
var client = new InformaticsGatewayClient(_httpClient, _logger.Object);
2928

3029
Assert.NotNull(client.MonaiScpAeTitle);

src/DicomWebClient/API/MimeMappings.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static class MimeMappings
2929
{
3030
public const string MultiPartRelated = "multipart/related";
3131

32-
public static readonly Dictionary<MimeType, string> MimeTypeMappings = new Dictionary<MimeType, string>()
32+
public static readonly Dictionary<MimeType, string> MimeTypeMappings = new()
3333
{
3434
{ MimeType.Dicom, "application/dicom" },
3535
{ MimeType.DicomJson, "application/dicom+json" },
@@ -46,7 +46,7 @@ public static class MimeMappings
4646
{ MimeType.VideoMpeg2, "video/mpeg2" },
4747
};
4848

49-
public static readonly Dictionary<DicomUID, MimeType> SupportedMediaTypes = new Dictionary<DicomUID, MimeType>()
49+
public static readonly Dictionary<DicomUID, MimeType> SupportedMediaTypes = new()
5050
{
5151
{ DicomUID.ExplicitVRLittleEndian, MimeType.Dicom },
5252
{ DicomUID.RLELossless, MimeType.Dicom },
@@ -71,8 +71,8 @@ public static class MimeMappings
7171
{ DicomUID.HEVCM10P51, MimeType.Dicom }
7272
};
7373

74-
public static readonly MediaTypeWithQualityHeaderValue MediaTypeApplicationDicom = new MediaTypeWithQualityHeaderValue(MimeTypeMappings[MimeType.Dicom]);
75-
public static readonly MediaTypeWithQualityHeaderValue MediaTypeApplicationDicomJson = new MediaTypeWithQualityHeaderValue(MimeTypeMappings[MimeType.DicomJson]);
74+
public static readonly MediaTypeWithQualityHeaderValue MediaTypeApplicationDicom = new(MimeTypeMappings[MimeType.Dicom]);
75+
public static readonly MediaTypeWithQualityHeaderValue MediaTypeApplicationDicomJson = new(MimeTypeMappings[MimeType.DicomJson]);
7676

7777
public static bool IsValidMediaType(DicomTransferSyntax transferSyntax)
7878
{

src/DicomWebClient/Test/.editorconfig

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# editorconfig.org
2+
3+
# top-most EditorConfig file
4+
root = false
5+
6+
7+
[*.cs]
8+
9+
# Default severity for all analyzer diagnostics
10+
dotnet_analyzer_diagnostic.severity = none

src/DicomWebClient/Test/DicomFileGeneratorFixture.cs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class DicomFileGeneratorFixture
1919
{
2020
public const string MimeApplicationDicomJson = "application/dicom+json";
2121

22-
internal async Task<HttpContent> GenerateInstances(
22+
internal static async Task<HttpContent> GenerateInstances(
2323
int count,
2424
DicomUID studyUid,
2525
DicomUID seriesUid = null,
@@ -35,7 +35,7 @@ internal async Task<HttpContent> GenerateInstances(
3535
return multipartContent;
3636
}
3737

38-
internal HttpContent GenerateInstancesAsJson(
38+
internal static HttpContent GenerateInstancesAsJson(
3939
int count,
4040
DicomUID studyUid,
4141
DicomUID seriesUid = null,
@@ -50,7 +50,7 @@ internal HttpContent GenerateInstancesAsJson(
5050
return new StringContent(jsonArray.ToString(Formatting.Indented), Encoding.UTF8, MimeApplicationDicomJson);
5151
}
5252

53-
internal List<DicomFile> GenerateDicomFiles(int count, DicomUID studyUid)
53+
internal static List<DicomFile> GenerateDicomFiles(int count, DicomUID studyUid)
5454
{
5555
var files = new List<DicomFile>();
5656

@@ -62,13 +62,13 @@ internal List<DicomFile> GenerateDicomFiles(int count, DicomUID studyUid)
6262
return files;
6363
}
6464

65-
private string GenerateInstancesAsJson(DicomUID studyUid, DicomUID seriesUid = null, DicomUID instanceUid = null)
65+
private static string GenerateInstancesAsJson(DicomUID studyUid, DicomUID seriesUid = null, DicomUID instanceUid = null)
6666
{
6767
var dicomDataset = GenerateDicomDataset(studyUid, seriesUid, instanceUid, null);
6868
return DicomJson.ConvertDicomToJson(dicomDataset);
6969
}
7070

71-
private async Task<byte[]> GenerateInstance(DicomUID studyUid, DicomUID seriesUid = null, DicomUID instanceUid = null, DicomTransferSyntax transferSynx = null)
71+
private static async Task<byte[]> GenerateInstance(DicomUID studyUid, DicomUID seriesUid = null, DicomUID instanceUid = null, DicomTransferSyntax transferSynx = null)
7272
{
7373
var dicomDataset = GenerateDicomDataset(studyUid, seriesUid, instanceUid, transferSynx);
7474
var dicomFile = new DicomFile(dicomDataset);
@@ -97,16 +97,18 @@ private static DicomDataset GenerateDicomDataset(DicomUID studyUid, DicomUID ser
9797
transferSynx = DicomTransferSyntax.ExplicitVRLittleEndian;
9898
}
9999

100-
var dicomDataset = new DicomDataset(transferSynx ?? DicomTransferSyntax.ExplicitVRLittleEndian);
101-
dicomDataset.Add(DicomTag.PatientID, "TEST");
102-
dicomDataset.Add(DicomTag.SOPClassUID, DicomUID.CTImageStorage);
103-
dicomDataset.Add(DicomTag.StudyInstanceUID, studyUid);
104-
dicomDataset.Add(DicomTag.SeriesInstanceUID, seriesUid);
105-
dicomDataset.Add(DicomTag.SOPInstanceUID, instanceUid);
100+
var dicomDataset = new DicomDataset(transferSynx ?? DicomTransferSyntax.ExplicitVRLittleEndian)
101+
{
102+
{ DicomTag.PatientID, "TEST" },
103+
{ DicomTag.SOPClassUID, DicomUID.CTImageStorage },
104+
{ DicomTag.StudyInstanceUID, studyUid },
105+
{ DicomTag.SeriesInstanceUID, seriesUid },
106+
{ DicomTag.SOPInstanceUID, instanceUid }
107+
};
106108
return dicomDataset;
107109
}
108110

109-
internal HttpContent GenerateByteData()
111+
internal static HttpContent GenerateByteData()
110112
{
111113
var multipartContent = new MultipartContent("related");
112114

src/DicomWebClient/Test/HttpMessageExtensionTest.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class HttpMessageExtensionsTest
1919
{
2020
private const string PatientName = "DOE^JOHN";
2121

22-
private readonly byte[] ByteData = new byte[]
22+
private readonly byte[] _byteData = new byte[]
2323
{
2424
0x01, 0x02, 0x03, 0x04, 0x05
2525
};
@@ -120,12 +120,14 @@ public async Task ToDicomAsyncEnumerable_Ok()
120120
Assert.Equal(PatientName, result.First().Dataset.GetString(DicomTag.PatientName));
121121
}
122122

123-
private async Task AddDicomFileContent(MultipartContent multipartContent)
123+
private static async Task AddDicomFileContent(MultipartContent multipartContent)
124124
{
125-
var dicomDataset = new DicomDataset(DicomTransferSyntax.ExplicitVRLittleEndian);
126-
dicomDataset.Add(DicomTag.PatientName, PatientName);
127-
dicomDataset.Add(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage);
128-
dicomDataset.Add(DicomTag.SOPInstanceUID, DicomUID.Generate());
125+
var dicomDataset = new DicomDataset(DicomTransferSyntax.ExplicitVRLittleEndian)
126+
{
127+
{ DicomTag.PatientName, PatientName },
128+
{ DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage },
129+
{ DicomTag.SOPInstanceUID, DicomUID.Generate() }
130+
};
129131
var dicomFile = new DicomFile(dicomDataset);
130132

131133
using (var ms = new MemoryStream())
@@ -157,14 +159,14 @@ public async Task ToBinaryData_Ok()
157159
AddByteArrayContent(multipartContent);
158160
message.Content = multipartContent;
159161

160-
var result = await message.ToBinaryData();
162+
var result = await message.ToBinaryData().ConfigureAwait(false);
161163

162-
Assert.Equal(ByteData, result);
164+
Assert.Equal(_byteData, result);
163165
}
164166

165167
private void AddByteArrayContent(MultipartContent multipartContent)
166168
{
167-
multipartContent.Add(new ByteArrayContent(ByteData));
169+
multipartContent.Add(new ByteArrayContent(_byteData));
168170
}
169171

170172
#endregion ToBinaryData Test

src/DicomWebClient/Test/QidoServiceTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public async Task SearchForStudies_AllStudies()
3636
var response = new HttpResponseMessage
3737
{
3838
StatusCode = HttpStatusCode.OK,
39-
Content = _fixture.GenerateInstancesAsJson(1, studyUid),
39+
Content = DicomFileGeneratorFixture.GenerateInstancesAsJson(1, studyUid),
4040
};
4141

4242
GenerateHttpClient(response, out var handlerMock, out var httpClient);
@@ -68,7 +68,7 @@ public async Task SearchForStudies_WithQueryParameters()
6868
var response = new HttpResponseMessage
6969
{
7070
StatusCode = HttpStatusCode.OK,
71-
Content = _fixture.GenerateInstancesAsJson(1, studyUid),
71+
Content = DicomFileGeneratorFixture.GenerateInstancesAsJson(1, studyUid),
7272
};
7373

7474
GenerateHttpClient(response, out var handlerMock, out var httpClient);
@@ -106,7 +106,7 @@ public async Task SearchForStudies_WithQueryParametersAndFields()
106106
var response = new HttpResponseMessage
107107
{
108108
StatusCode = HttpStatusCode.OK,
109-
Content = _fixture.GenerateInstancesAsJson(1, studyUid),
109+
Content = DicomFileGeneratorFixture.GenerateInstancesAsJson(1, studyUid),
110110
};
111111

112112
GenerateHttpClient(response, out var handlerMock, out var httpClient);
@@ -149,7 +149,7 @@ public async Task SearchForStudies_AllArguments()
149149
var response = new HttpResponseMessage
150150
{
151151
StatusCode = HttpStatusCode.OK,
152-
Content = _fixture.GenerateInstancesAsJson(1, studyUid),
152+
Content = DicomFileGeneratorFixture.GenerateInstancesAsJson(1, studyUid),
153153
};
154154

155155
GenerateHttpClient(response, out var handlerMock, out var httpClient);

0 commit comments

Comments
 (0)