Skip to content

Commit 49be179

Browse files
authored
[AC-225] - Sends Ods DB connection string to Admin Api on Instance completed (#40)
* Sends Ods DB connection string to Admin Api on Instance completed * Some fixes
1 parent 26c0ba0 commit 49be179

File tree

10 files changed

+52
-47
lines changed

10 files changed

+52
-47
lines changed

src/EdFi.AdminConsole.InstanceManagementWorker/Application.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public async Task CreateInstances()
7373

7474
await _instanceProvisioner.AddDbInstanceAsync(instanceName, DbInstanceType.Minimal);
7575

76-
if (!await _adminApiCaller.CompleteInstanceAsync(instance.Id, instance.TenantName))
76+
if (!await _adminApiCaller.CompleteInstanceAsync(instance.Id, instance.TenantName, new CompleteInstanceRequest() { ConnectionString = _instanceProvisioner.GetOdsConnectionString(instanceName) }))
7777
_logger.LogError("Not able to complete instance.");
7878

7979
_logger.LogInformation("Completed processing instance with name: {InstanceName}", instanceName);

src/EdFi.AdminConsole.InstanceMgrWorker.Core/Features/AdminApi/AdminApiCaller.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public interface IAdminApiCaller
1717

1818
Task<IEnumerable<AdminConsoleInstance>> GetInstancesAsync(string? tenant, string status = nameof(InstanceStatus.Pending));
1919

20-
Task<bool> CompleteInstanceAsync(int instanceId, string? tenant);
20+
Task<bool> CompleteInstanceAsync(int instanceId, string? tenant, CompleteInstanceRequest request);
2121

2222
Task<bool> DeletedInstanceAsync(int instanceId, string? tenant);
2323

@@ -68,7 +68,7 @@ public async Task<IEnumerable<AdminConsoleTenant>> GetTenantsAsync()
6868
else
6969
{
7070
_logger.LogError("AdminApi Settings has not been set properly.");
71-
return new List<AdminConsoleTenant>();
71+
return [];
7272
}
7373
}
7474

@@ -110,15 +110,15 @@ public async Task<IEnumerable<AdminConsoleInstance>> GetInstancesAsync(string? t
110110
else
111111
{
112112
_logger.LogError("AdminApi Settings has not been set properly.");
113-
return new List<AdminConsoleInstance>();
113+
return [];
114114
}
115115
}
116116

117-
public async Task<bool> CompleteInstanceAsync(int instanceId, string? tenant)
117+
public async Task<bool> CompleteInstanceAsync(int instanceId, string? tenant, CompleteInstanceRequest request)
118118
{
119119
if (AdminApiConnectionDataValidator.IsValid(_logger, _adminApiOptions))
120120
{
121-
var response = await _adminApiClient.AdminApiPost(string.Format(_adminApiOptions.AdminConsoleCompleteInstancesURL, instanceId), tenant);
121+
var response = await _adminApiClient.AdminApiPost(string.Format(_adminApiOptions.AdminConsoleCompleteInstancesURL, instanceId), tenant, request);
122122

123123
return (response.StatusCode is System.Net.HttpStatusCode.NoContent or System.Net.HttpStatusCode.OK);
124124
}

src/EdFi.AdminConsole.InstanceMgrWorker.Core/Features/AdminApi/AdminApiClient.cs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using EdFi.AdminConsole.InstanceMgrWorker.Core.Infrastructure;
1010
using Microsoft.Extensions.Logging;
1111
using Microsoft.Extensions.Options;
12+
using Newtonsoft.Json;
1213
using Newtonsoft.Json.Linq;
1314

1415
namespace EdFi.AdminConsole.InstanceMgrWorker.Core.Features.AdminApi;
@@ -17,27 +18,19 @@ public interface IAdminApiClient
1718
{
1819
Task<ApiResponse> AdminApiGet(string url, string? tenant);
1920

20-
Task<ApiResponse> AdminApiPost(string url, string? tenant);
21+
Task<ApiResponse> AdminApiPost(string url, string? tenant, object? body = null);
2122
}
2223

23-
public class AdminApiClient : IAdminApiClient
24+
public class AdminApiClient(
25+
IAppHttpClient appHttpClient,
26+
ILogger logger,
27+
IOptions<AdminApiSettings> adminApiOptions
28+
) : IAdminApiClient
2429
{
25-
private readonly IAppHttpClient _appHttpClient;
26-
protected readonly ILogger _logger;
27-
private readonly IAdminApiSettings _adminApiOptions;
28-
private string _accessToken;
29-
30-
public AdminApiClient(
31-
IAppHttpClient appHttpClient,
32-
ILogger logger,
33-
IOptions<AdminApiSettings> adminApiOptions
34-
)
35-
{
36-
_appHttpClient = appHttpClient;
37-
_logger = logger;
38-
_adminApiOptions = adminApiOptions.Value;
39-
_accessToken = string.Empty;
40-
}
30+
private readonly IAppHttpClient _appHttpClient = appHttpClient;
31+
protected readonly ILogger _logger = logger;
32+
private readonly AdminApiSettings _adminApiOptions = adminApiOptions.Value;
33+
private string _accessToken = string.Empty;
4134

4235
public async Task<ApiResponse> AdminApiGet(string url, string? tenant)
4336
{
@@ -79,18 +72,18 @@ public async Task<ApiResponse> AdminApiGet(string url, string? tenant)
7972
return response;
8073
}
8174

82-
public async Task<ApiResponse> AdminApiPost(string url, string? tenant)
75+
public async Task<ApiResponse> AdminApiPost(string url, string? tenant, object? body = null)
8376
{
8477
ApiResponse response = new ApiResponse(HttpStatusCode.InternalServerError, "Unknown error.");
8578
await GetAccessToken();
8679

8780
const int RetryAttempts = 3;
8881
var currentAttempt = 0;
8982

90-
StringContent? content = null;
83+
StringContent? content = new StringContent(body != null ? JsonConvert.SerializeObject(body) : string.Empty, Encoding.UTF8, "application/json");
84+
9185
if (!string.IsNullOrEmpty(tenant))
9286
{
93-
content = new StringContent(string.Empty, Encoding.UTF8, "application/json");
9487
content.Headers.Add("tenant", tenant);
9588
}
9689

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// Licensed to the Ed-Fi Alliance under one or more agreements.
3+
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
4+
// See the LICENSE and NOTICES files in the project root for more information.
5+
6+
namespace EdFi.AdminConsole.InstanceMgrWorker.Core.Features.AdminApi;
7+
public class CompleteInstanceRequest
8+
{
9+
public string ConnectionString { get; set; } = string.Empty;
10+
}

src/EdFi.AdminConsole.InstanceMgrWorker.Provisioner/Provisioners/ConfigConnectionStringsProvider.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,10 @@
77

88
namespace EdFi.AdminConsole.InstanceMgrWorker.Configuration.Provisioners
99
{
10-
public class ConfigConnectionStringsProvider : IMgrWorkerConfigConnectionStringsProvider
10+
public class ConfigConnectionStringsProvider(IConfiguration config) : IMgrWorkerConfigConnectionStringsProvider
1111
{
12-
private string _tenant;
13-
private readonly IConfiguration _config;
14-
15-
public ConfigConnectionStringsProvider(IConfiguration config)
16-
{
17-
_tenant = string.Empty;
18-
_config = config;
19-
}
12+
private string _tenant = string.Empty;
13+
private readonly IConfiguration _config = config;
2014

2115
public int Count => ConnectionStringProviderByName.Keys.Count;
2216

src/EdFi.AdminConsole.InstanceMgrWorker.Provisioner/Provisioners/IInstanceProvisioner.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public interface IInstanceProvisioner
2121

2222
string[] GetInstancesDatabases();
2323

24+
string GetOdsConnectionString(string instanceName);
25+
2426
string Tenant { get; set; }
2527

2628
Task AddDbInstanceAsync(string instanceName, DbInstanceType instanceType);

src/EdFi.AdminConsole.InstanceMgrWorker.Provisioner/Provisioners/InstanceDatabaseNameBuilder.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
using EdFi.Ods.Common.Database;
77
using EdFi.Ods.Common.Extensions;
8-
using Microsoft.EntityFrameworkCore.Metadata.Internal;
98

109
namespace EdFi.AdminConsole.InstanceMgrWorker.Configuration.Provisioners
1110
{

src/EdFi.AdminConsole.InstanceMgrWorker.Provisioner/Provisioners/InstanceProvisionerBase.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
// See the LICENSE and NOTICES files in the project root for more information.
55

66
using System.Data.Common;
7-
using EdFi.Admin.DataAccess.Utils;
87
using EdFi.Ods.Common.Extensions;
98
using Microsoft.Extensions.Configuration;
109

@@ -45,6 +44,14 @@ public string Tenant
4544
}
4645
}
4746

47+
public string GetOdsConnectionString(string instanceName)
48+
{
49+
if (string.IsNullOrEmpty(instanceName))
50+
throw new ArgumentNullException(nameof(instanceName));
51+
52+
return string.Format(_connectionStringsProvider.GetConnectionString("EdFi_Ods"), _databaseNameBuilder.OdsDatabaseName(null, instanceName));
53+
}
54+
4855
public string[] GetInstancesDatabases() => GetInstancesDatabasesAsync().GetResultSafely();
4956

5057
public void AddDbInstance(string instanceName, DbInstanceType instanceType)

src/EdFi.AdminConsole.InstanceMgrWorker.Provisioner/Provisioners/PostgresInstanceProvisioner.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,14 @@
55

66
using System.Data.Common;
77
using Dapper;
8-
using EdFi.Admin.DataAccess.Utils;
98
using Microsoft.Extensions.Configuration;
109
using Npgsql;
1110

1211
namespace EdFi.AdminConsole.InstanceMgrWorker.Configuration.Provisioners
1312
{
14-
public class PostgresInstanceProvisioner : InstanceProvisionerBase
13+
public class PostgresInstanceProvisioner(IConfiguration configuration,
14+
IMgrWorkerConfigConnectionStringsProvider connectionStringsProvider, IMgrWorkerIDatabaseNameBuilder databaseNameBuilder) : InstanceProvisionerBase(configuration, connectionStringsProvider, databaseNameBuilder)
1515
{
16-
public PostgresInstanceProvisioner(IConfiguration configuration,
17-
IMgrWorkerConfigConnectionStringsProvider connectionStringsProvider, IMgrWorkerIDatabaseNameBuilder databaseNameBuilder)
18-
: base(configuration, connectionStringsProvider, databaseNameBuilder) { }
19-
2016
public override async Task RenameDbInstancesAsync(string oldName, string newName)
2117
{
2218
using (var conn = CreateConnection())

src/InstanceMgrWorker.Core.UnitTests/Features/AdminApi/AdminApiCallerTests.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,11 @@ public class When_instances_are_completed : Given_an_admin_api
109109
private ILogger<When_instances_are_returned_from_api> _logger;
110110
private IAdminApiCaller _adminApiCaller;
111111
private IAdminApiClient _adminApiClient;
112-
private int instanceId = 1;
112+
private readonly int instanceId = 1;
113+
private readonly CompleteInstanceRequest completeInstanceRequest = new CompleteInstanceRequest()
114+
{
115+
ConnectionString = ""
116+
};
113117

114118
[SetUp]
115119
public void SetUp()
@@ -118,7 +122,7 @@ public void SetUp()
118122

119123
_adminApiClient = A.Fake<IAdminApiClient>();
120124

121-
A.CallTo(() => _adminApiClient.AdminApiPost(string.Format(Testing.GetAdminApiSettings().Value.AdminConsoleCompleteInstancesURL, instanceId), null))
125+
A.CallTo(() => _adminApiClient.AdminApiPost(string.Format(Testing.GetAdminApiSettings().Value.AdminConsoleCompleteInstancesURL, instanceId), null, completeInstanceRequest))
122126
.Returns(new ApiResponse(HttpStatusCode.OK, string.Empty));
123127

124128
_adminApiCaller = new AdminApiCaller(_logger, _adminApiClient, Testing.GetAdminApiSettings());
@@ -127,7 +131,7 @@ public void SetUp()
127131
[Test]
128132
public async Task should_return_successfully()
129133
{
130-
var result = await _adminApiCaller.CompleteInstanceAsync(1, null);
134+
var result = await _adminApiCaller.CompleteInstanceAsync(1, null, completeInstanceRequest);
131135

132136
result.ShouldBe(true);
133137
}

0 commit comments

Comments
 (0)