public override async Task<HealthCheckResultApiEndpoints> CheckHealthApiEndpoints()
var result = new HealthCheckResultApiEndpoints
SlowResponse = TimeSpan.FromSeconds(10),
VerySlowResponse = TimeSpan.FromSeconds(5),
Source = {SoftwareName = SoftwareName.BizWiz},
Destination = {SoftwareName = SoftwareName.BusinessCentral}
await GetSourceClientResource();
await GetDestinationClientResource();
await GetRandomNumberOfRecordsAsync(3,
_ => _.BcSystemId.HasValue && (_.LastSyncSuccessful ?? false));
var jobs = randomJobs as Job[] ?? randomJobs.ToArray();
stopwatch = Stopwatch.StartNew();
await _destinationClientResource.GetOne<BcApiResponse<BcJobDto>, Guid>("GetList",
result.Destination.ResponseTime = stopwatch.Elapsed;
if (bcJobsResponse.StatusCode != HttpStatusCode.OK)
result.Destination.EndpointResponsive = false;
result.Destination.Message =
$"{result.Destination.SoftwareName} {result.ApiGroupName} API Endpoint is Unreachable
with the following Response: {bcJobsResponse.StatusCode} -
{StringTools.ReturnMaxLengthString(bcJobsResponse.Content, 100)}";
result.Destination.EndpointResponsive = true;
if (bcJobsResponse.Content != null)
var missingBcJobFields = VerifyAllBcJobRequiredFields(bcJobsResponse.Content);
result.Destination.FieldsChecked = true;
if (missingBcJobFields != null)
result.Destination.MissingFields = missingBcJobFields.ToArray();
stopwatch = Stopwatch.StartNew();
var bwDtoResponse = await _sourceClientResource.GetOne<BwJobDto, int>("GetOne", 0);
result.Source.ResponseTime = stopwatch.Elapsed;
if (bwDtoResponse.StatusCode != HttpStatusCode.OK &&
bwDtoResponse.StatusCode != HttpStatusCode.NotFound)
result.Source.EndpointResponsive = false;
$"{result.Source.SoftwareName} {result.ApiGroupName} API Endpoint is Unreachable with
the following Response: {bwDtoResponse.StatusCode} -
{StringTools.ReturnMaxLengthString(bwDtoResponse.Content, 100)}";
result.Source.EndpointResponsive = true;
if (bwDtoResponse.StatusCode == HttpStatusCode.OK)
if (bwDtoResponse.Content != null)
var missingBwJobFields = VerifyAllBwJobRequiredFields(bcJobsResponse.Content);
result.Source.FieldsChecked = true;
if (missingBwJobFields != null)
result.Source.MissingFields = missingBwJobFields.ToArray();
foreach (var job in jobs)
if(!job.BcSystemId.HasValue)
stopwatch = Stopwatch.StartNew();
await _destinationClientResource.GetOne<BcJobDto, Guid>("GetOne",
result.Destination.ResponseTime = stopwatch.Elapsed;
if (bcJobsResponse.StatusCode != HttpStatusCode.Accepted &&
bcJobsResponse.StatusCode != HttpStatusCode.NotFound)
result.Destination.EndpointResponsive = false;
result.Destination.Message =
$"{result.Destination.SoftwareName} {result.ApiGroupName} API Endpoint is
Unreachable with the following Response: {bcJobsResponse.StatusCode} -
{StringTools.ReturnMaxLengthString(bcJobsResponse.Content, 100)}";
result.Destination.EndpointResponsive = true;
if (bcJobsResponse.StatusCode == HttpStatusCode.NotFound)
await Repository.UpdateAsync(job);
} else if (bcJobsResponse.Content != null)
var missingBcJobFields = VerifyAllBcJobRequiredFields(bcJobsResponse.Content);
result.Destination.FieldsChecked = true;
if (missingBcJobFields != null)
result.Destination.MissingFields = missingBcJobFields.ToArray();
stopwatch = Stopwatch.StartNew();
var bwDtoResponse = await _sourceClientResource.GetOne<BwJobDto, string>("GetOne",
result.Source.ResponseTime = stopwatch.Elapsed;
if (bwDtoResponse.StatusCode != HttpStatusCode.OK &&
bwDtoResponse.StatusCode != HttpStatusCode.NotFound)
result.Source.EndpointResponsive = false;
$"{result.Source.SoftwareName} {result.ApiGroupName} API Endpoint is Unreachable
with the following Response: {bwDtoResponse.StatusCode} -
{StringTools.ReturnMaxLengthString(bwDtoResponse.Content, 100)}";
result.Source.EndpointResponsive = true;
if (bwDtoResponse.StatusCode == HttpStatusCode.OK)
if (bwDtoResponse.Content != null)
var missingBwJobFields = VerifyAllBwJobRequiredFields(bcJobsResponse.Content);
result.Source.FieldsChecked = true;
if (missingBwJobFields != null)
result.Source.MissingFields = missingBwJobFields.ToArray();