Skip to content

Commit ca01994

Browse files
authored
[APIPUB-76] - Adds Sonar Analyzer - Log as json where appropiate. (Ed-Fi-Alliance-OSS#83)
* Adds Sonar Analyzer - Log as json when appropiate. * Build fix * Remove unnecessary using * Trying to undo program.cs
1 parent 50559ff commit ca01994

10 files changed

Lines changed: 354 additions & 361 deletions

File tree

src/EdFi.Tools.ApiPublisher.Cli/Program.cs

Lines changed: 313 additions & 314 deletions
Large diffs are not rendered by default.

src/EdFi.Tools.ApiPublisher.Connections.Api/DependencyResolution/ApiSourceResourceItemProvider.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,16 @@ public ApiSourceResourceItemProvider(ISourceEdFiApiClientProvider sourceEdFiApiC
9191
}
9292
else
9393
{
94-
_logger.Warning("GET request from source API for '{ResourceItemUrl}' reference failed with status '{StatusCode}': {ResponseContent}",
95-
resourceItemUrl, getByIdResponse.StatusCode, responseContent);
94+
var message = $"GET request from source API for '{resourceItemUrl}' reference failed with status '{getByIdResponse.StatusCode}': {responseContent}";
95+
_logger.Warning(message);
9696

9797
return (false, null);
9898
}
9999
}
100100
catch (RateLimitRejectedException ex)
101101
{
102-
_logger.Fatal(ex, "{DataManagementApiSegment}{ResourceItemUrl}: Rate limit exceeded. Please try again later.",
103-
sourceEdFiApiClient.DataManagementApiSegment, resourceItemUrl);
102+
var message = $"{sourceEdFiApiClient.DataManagementApiSegment}{resourceItemUrl}: Rate limit exceeded. Please try again later.";
103+
_logger.Fatal(ex, message);
104104
return (false, null);
105105
}
106106
//----------------------------------------------------------------------------------------------

src/EdFi.Tools.ApiPublisher.Connections.Api/Metadata/Dependencies/EdFiApiGraphMLDependencyMetadataProvider.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ public EdFiApiGraphMLDependencyMetadataProvider(IEdFiApiClientProvider edFiApiCl
4343

4444
if (!dependencyResponse.IsSuccessStatusCode)
4545
{
46-
_logger.Error("Ed-Fi ODS API request for dependencies to '{RequestUri}' returned '{StatusCode}' with content:{NewLine}{DependencyResponseContent}",
47-
dependencyRequest.RequestUri, dependencyResponse.StatusCode, Environment.NewLine, dependencyResponseContent);
46+
var message = $"Ed-Fi ODS API request for dependencies to '{dependencyRequest.RequestUri}' returned '{dependencyResponse.StatusCode}' with content:{Environment.NewLine}{dependencyResponseContent}";
47+
_logger.Error(message);
4848
throw new Exception("Resource dependencies could not be obtained.");
4949
}
5050

@@ -57,8 +57,8 @@ public EdFiApiGraphMLDependencyMetadataProvider(IEdFiApiClientProvider edFiApiCl
5757
}
5858
catch (Exception ex)
5959
{
60-
_logger.Error(ex, "Unable to parse dependency response as GraphML: {DependencyResponseContent}{NewLine}{Ex}",
61-
dependencyResponseContent, Environment.NewLine, ex);
60+
var message = $"Unable to parse dependency response as GraphML: {dependencyResponseContent}{Environment.NewLine}{ex}";
61+
_logger.Error(ex, message);
6262
throw new Exception("Resource dependencies could not be obtained.");
6363
}
6464
}

src/EdFi.Tools.ApiPublisher.Connections.Api/Processing/Source/Counting/EdFiApiSourceTotalCountProvider.cs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
44
// See the LICENSE and NOTICES files in the project root for more information.
55

6+
using System;
67
using System.Net;
78
using System.Threading.Tasks.Dataflow;
89
using EdFi.Tools.ApiPublisher.Connections.Api.ApiClientManagement;
@@ -116,12 +117,8 @@ CancellationToken cancellationToken
116117

117118
if (!apiResponse.IsSuccessStatusCode)
118119
{
119-
_logger.Error(
120-
"{Url}: Count request returned {StatusCode}\r{Content}",
121-
resourceUrl,
122-
apiResponse.StatusCode,
123-
responseContent
124-
);
120+
var messge = $"{resourceUrl}: Count request returned {apiResponse.StatusCode}\r{responseContent}";
121+
_logger.Error(messge);
125122

126123
await HandleResourceCountRequestErrorAsync(resourceUrl, errorHandlingBlock, apiResponse)
127124
.ConfigureAwait(false);
@@ -198,6 +195,7 @@ HttpResponseMessage apiResponse
198195
)
199196
{
200197
string responseContent = await apiResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
198+
string message = string.Empty;
201199

202200
// Was this an authorization failure?
203201
var authFailure = apiResponse.StatusCode == HttpStatusCode.Forbidden;
@@ -207,18 +205,14 @@ HttpResponseMessage apiResponse
207205
// Being denied read access to descriptors is potentially problematic, but is not considered
208206
// to be breaking in its own right for change processing. We'll fail downstream
209207
// POSTs if descriptors haven't been initialized correctly on the target.
210-
_logger.Warning(
211-
"{Url}: {StatusCode} - Unable to obtain total count for descriptor due to authorization failure. Descriptor values will not be published to the target, but processing will continue.\rResponse content: {Content}",
212-
resourceUrl, apiResponse.StatusCode, responseContent
213-
);
208+
message = $"{resourceUrl}: {apiResponse.StatusCode} - Unable to obtain total count for descriptor due to authorization failure. Descriptor values will not be published to the target, but processing will continue.\rResponse content: {responseContent}";
209+
_logger.Warning(message);
214210

215211
return;
216212
}
217213

218-
_logger.Error(
219-
"{Url}: {StatusCode} - Unable to obtain total count due to request failure. This resource will not be processed. Downstream failures are possible.\rResponse content: {Content}",
220-
resourceUrl, apiResponse.StatusCode, responseContent
221-
);
214+
message = $"{resourceUrl}: {apiResponse.StatusCode} - Unable to obtain total count due to request failure. This resource will not be processed. Downstream failures are possible.\rResponse content: {responseContent}";
215+
_logger.Error(message);
222216

223217
// Publish an error for the resource to allow processing to continue, but to force failure.
224218
errorHandlingBlock.Post(

src/EdFi.Tools.ApiPublisher.Connections.Api/Processing/Source/Isolation/EdFiApiSourceIsolationApplicator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ private async Task<string> GetSourceSnapshotIdentifierAsync(EdFiApiClient source
135135

136136
string errorResponseText = await snapshotsResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
137137

138-
_logger.Error("Unable to get snapshot identifier from API at '{BaseAddress}{SnapshotsRelativePath}'. Request for available snapshots returned status '{StatusCode}' with message body: {ErrorResponseText}",
139-
sourceApiClient.HttpClient.BaseAddress, snapshotsRelativePath, snapshotsResponse.StatusCode, errorResponseText);
138+
var message = $"Unable to get snapshot identifier from API at '{sourceApiClient.HttpClient.BaseAddress}{snapshotsRelativePath}'. Request for available snapshots returned status '{snapshotsResponse.StatusCode}' with message body: {errorResponseText}";
139+
_logger.Error(message);
140140

141141
return null;
142142
}

src/EdFi.Tools.ApiPublisher.Connections.Api/Processing/Source/MessageHandlers/EdFiApiStreamResourcePageMessageHandler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,8 @@ public async Task<IEnumerable<TProcessDataMessage>> HandleStreamResourcePageAsyn
171171
// Publish the failure
172172
errorHandlingBlock.Post(error);
173173

174-
_logger.Error(ex, "{ResourceUrl}: JSON parsing of source page data failed: {Ex}{NewLine}{ResponseContent}",
175-
message.ResourceUrl, ex, Environment.NewLine, responseContent);
174+
var logMessage = $"{message.ResourceUrl}: JSON parsing of source page data failed: {ex}{Environment.NewLine}{responseContent}";
175+
_logger.Error(ex, logMessage);
176176

177177
break;
178178
}

src/EdFi.Tools.ApiPublisher.Connections.Api/Processing/Source/Versioning/EdFiApiSourceCurrentChangeVersionProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public EdFiApiSourceCurrentChangeVersionProvider(ISourceEdFiApiClientProvider so
4141

4242
string versionResponseText = await versionResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
4343

44-
_logger.Debug("Available change versions request from {BaseAddress}{AvailableChangeVersionsRelativePath} returned {StatusCode}: {VersionResponseText}",
45-
sourceApiClient.HttpClient.BaseAddress, availableChangeVersionsRelativePath, versionResponse.StatusCode, versionResponseText);
44+
var message = $"Available change versions request from {sourceApiClient.HttpClient.BaseAddress}{availableChangeVersionsRelativePath} returned {versionResponse.StatusCode}: {versionResponseText}";
45+
_logger.Debug(message);
4646

4747
try
4848
{

src/EdFi.Tools.ApiPublisher.Connections.Api/Processing/Target/Blocks/ChangeResourceKeyProcessingBlocksFactory.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ private TransformManyBlock<GetItemForKeyChangeMessage, ChangeKeyMessage> CreateG
134134
// Failure
135135
if (!apiResponse.IsSuccessStatusCode)
136136
{
137-
_logger.Error("{ResourceUrl} (source id: {SourceId}): GET by key returned {StatusCode}{NewLine}{ResponseContent}",
138-
message.ResourceUrl, sourceId, apiResponse.StatusCode, Environment.NewLine, responseContent);
137+
var logMessage = $"{message.ResourceUrl} (source id: {sourceId}): GET by key returned {apiResponse.StatusCode}{Environment.NewLine}{responseContent}";
138+
_logger.Error(logMessage);
139139

140140
var error = new ErrorItemMessage
141141
{
@@ -337,9 +337,8 @@ private TransformManyBlock<ChangeKeyMessage, ErrorItemMessage> CreateChangeKeyBl
337337
{
338338
string responseContent = await apiResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
339339

340-
_logger.Error(
341-
"{ResourceUrl} (source id: {SourceId}): PUT returned {StatusCode}{NewLine}{ResponseContent}",
342-
msg.ResourceUrl, sourceId, apiResponse.StatusCode, Environment.NewLine, responseContent);
340+
var message = $"{msg.ResourceUrl} (source id: {sourceId}): PUT returned {apiResponse.StatusCode}{Environment.NewLine}{responseContent}";
341+
_logger.Error(message);
343342

344343
// Publish the failure
345344
var error = new ErrorItemMessage

src/EdFi.Tools.ApiPublisher.Connections.Api/Processing/Target/Blocks/DeleteResourceProcessingBlocksFactory.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ private TransformManyBlock<GetItemForDeletionMessage, DeleteItemMessage> CreateG
127127

128128
if (!apiResponse.IsSuccessStatusCode)
129129
{
130-
_logger.Error("{ResourceUrl} (source id: {Id}): GET by key returned {StatusCode}{NewLine}{ResponseContent}",
131-
msg.ResourceUrl, id, apiResponse.StatusCode, Environment.NewLine, responseContent);
130+
var message = $"{msg.ResourceUrl} (source id: {id}): GET by key returned {apiResponse.StatusCode}{Environment.NewLine}{responseContent}";
131+
_logger.Error(message);
132132

133133
var error = new ErrorItemMessage
134134
{
@@ -282,8 +282,8 @@ private TransformManyBlock<DeleteItemMessage, ErrorItemMessage> CreateDeleteReso
282282
{
283283
string responseContent = await apiResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
284284

285-
_logger.Error("{ResourceUrl} (source id: {SourceId}): DELETE returned {StatusCode}{NewLine}{ResponseContent}",
286-
msg.ResourceUrl, sourceId, apiResponse.StatusCode, Environment.NewLine, responseContent);
285+
var message = $"{msg.ResourceUrl} (source id: {sourceId}): DELETE returned {apiResponse.StatusCode}{Environment.NewLine}{responseContent}";
286+
_logger.Error(message);
287287

288288
// Publish the failure
289289
var error = new ErrorItemMessage

src/EdFi.Tools.ApiPublisher.Connections.Api/Processing/Target/Blocks/PostResourceProcessingBlocksFactory.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ private async Task<IEnumerable<ErrorItemMessage>> HandlePostItemMessage(
207207
remediationResult.ModifiedRequestBody,
208208
new JsonSerializerOptions { WriteIndented = true });
209209

210-
_logger.Debug("{ResourceUrl} (source id: {Id}): Remediation plan provided a modified request body: {ModifiedRequestBodyJson} ",
211-
postItemMessage.ResourceUrl, id, modifiedRequestBodyJson);
210+
var message = $"{postItemMessage.ResourceUrl} (source id: {id}): Remediation plan provided a modified request body: {modifiedRequestBodyJson}";
211+
_logger.Debug(message);
212212
}
213213

214214
ctx["ModifiedRequestBody"] = remediationResult.ModifiedRequestBody;
@@ -224,8 +224,8 @@ private async Task<IEnumerable<ErrorItemMessage>> HandlePostItemMessage(
224224
{
225225
string responseContent = await result.Result.Content.ReadAsStringAsync().ConfigureAwait(false);
226226

227-
_logger.Warning("{ResourceUrl} (source id: {Id}): POST attempt #{Attempts} failed with status '{StatusCode}'. Retrying... (retry #{RetryAttempt} of {MaxRetryAttempts} with {TotalSeconds:N1}s delay):{NewLine}{ResponseContent}",
228-
postItemMessage.ResourceUrl, id, attempts, result.Result.StatusCode, retryAttempt, options.MaxRetryAttempts, ts.TotalSeconds, Environment.NewLine, responseContent);
227+
var message = $"{postItemMessage.ResourceUrl} (source id: {id}): POST attempt #{attempts} failed with status '{result.Result.StatusCode}'. Retrying... (retry #{retryAttempt} of {options.MaxRetryAttempts} with {ts.TotalSeconds:N1}s delay):{Environment.NewLine}{responseContent}";
228+
_logger.Warning(message);
229229
}
230230
});
231231
IAsyncPolicy<HttpResponseMessage> policy = isRateLimitingEnabled ? Policy.WrapAsync(_rateLimiter?.GetRateLimitingPolicy(), retryPolicy) : retryPolicy;
@@ -352,24 +352,25 @@ await HandlePostItemMessage(
352352
}
353353

354354
string responseContent = await apiResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
355+
var message = string.Empty;
355356

356357
// If the failure is Forbidden, and we should treat it as a warning
357358
if (apiResponse.StatusCode == HttpStatusCode.Forbidden
358359
&& postItemMessage.PostAuthorizationFailureRetry == null
359360
&& targetEdFiApiClient.ConnectionDetails?.TreatForbiddenPostAsWarning == true)
360361
{
361362
// Warn and ignore all future data for this resource
362-
_logger.Warning("{ResourceUrl} (source id: {Id}): Authorization failed on POST of resource with no authorization failure handling defined. Remaining resource items will be ignored. Response status: {StatusCode}{NewLine}{ResponseContent}",
363-
postItemMessage.ResourceUrl, id, apiResponse.StatusCode, Environment.NewLine, responseContent);
363+
message = $"{postItemMessage.ResourceUrl} (source id: {id}): Authorization failed on POST of resource with no authorization failure handling defined. Remaining resource items will be ignored. Response status: {apiResponse.StatusCode}{Environment.NewLine}{responseContent}";
364+
_logger.Warning(message);
364365

365366
ignoredResourceByUrl.TryAdd(postItemMessage.ResourceUrl, true);
366367

367368
return Enumerable.Empty<ErrorItemMessage>();
368369
}
369370

370371
// Error is final, log it and indicate failure for processing
371-
_logger.Error("{ResourceUrl} (source id: {Id}): POST attempt #{Attempts} failed with status '{StatusCode}':{NewLine}{ResponseContent}",
372-
postItemMessage.ResourceUrl, id, attempts, apiResponse.StatusCode, Environment.NewLine, responseContent);
372+
message = $"{postItemMessage.ResourceUrl} (source id: {id}): POST attempt #{attempts} failed with status '{apiResponse.StatusCode}':{Environment.NewLine}{responseContent}";
373+
_logger.Error(message);
373374

374375
// Publish the failed data
375376
var error = new ErrorItemMessage
@@ -677,8 +678,8 @@ private async Task<RemediationResult> TryRemediateFailureAsync(
677678

678679
if (_logger.IsEnabled(LogEventLevel.Debug))
679680
{
680-
_logger.Debug("{ResourceUrl} (source id: {SourceId}): Remediating request with POST request to '{RemediationRequestResource}' on target API: {RemediationRequestBodyJson}",
681-
resourceUrl, sourceId, remediationRequest.resource, remediationRequestBodyJson);
681+
var message = $"{resourceUrl} (source id: {sourceId}): Remediating request with POST request to '{remediationRequest.resource}' on target API: {remediationRequestBodyJson}";
682+
_logger.Debug(message);
682683
}
683684

684685
var remediationResponse = await RequestHelpers.SendPostRequestAsync(

0 commit comments

Comments
 (0)