@@ -81,9 +81,10 @@ public static IResourceBuilder<SurrealDbServerResource> AddSurrealServer(
81
81
: SurrealDbContainerImageTags . Tag ;
82
82
83
83
var surrealServer = new SurrealDbServerResource ( name , userName ? . Resource , passwordParameter ) ;
84
-
84
+
85
85
return builder . AddResource ( surrealServer )
86
86
. WithEndpoint ( port : port , targetPort : SurrealDbPort , name : SurrealDbServerResource . PrimaryEndpointName )
87
+ . WithHttpEndpoint ( port : port , targetPort : SurrealDbPort , name : SurrealDbServerResource . SecondaryEndpointName )
87
88
. WithImage ( SurrealDbContainerImageTags . Image , imageTag )
88
89
. WithImageRegistry ( SurrealDbContainerImageTags . Registry )
89
90
. WithEnvironment ( context =>
@@ -93,6 +94,7 @@ public static IResourceBuilder<SurrealDbServerResource> AddSurrealServer(
93
94
} )
94
95
. WithEntrypoint ( "/surreal" )
95
96
. WithArgs ( [ .. args ] )
97
+ . WithHttpHealthCheck ( "/health" )
96
98
. OnResourceReady ( async ( _ , @event , ct ) =>
97
99
{
98
100
if ( ! strictMode )
@@ -106,33 +108,44 @@ public static IResourceBuilder<SurrealDbServerResource> AddSurrealServer(
106
108
throw new DistributedApplicationException ( $ "ResourceReadyEvent was published for the '{ surrealServer . Name } ' resource but the connection string was null.") ;
107
109
}
108
110
109
- var options = new SurrealDbOptionsBuilder ( ) . FromConnectionString ( connectionString ) . Build ( ) ;
110
- await using var surrealClient = new SurrealDbClient ( options ) ;
111
+ await EnsuresNsDbCreated ( builder , connectionString , surrealServer , @event . Services , ct ) ;
112
+ } ) ;
113
+ }
114
+
115
+ private static async Task EnsuresNsDbCreated (
116
+ IDistributedApplicationBuilder builder ,
117
+ string connectionString ,
118
+ SurrealDbServerResource surrealServer ,
119
+ IServiceProvider services ,
120
+ CancellationToken ct
121
+ )
122
+ {
123
+ var options = new SurrealDbOptionsBuilder ( ) . FromConnectionString ( connectionString ) . Build ( ) ;
124
+ await using var surrealClient = new SurrealDbClient ( options ) ;
111
125
112
- foreach ( var nsResourceName in surrealServer . Namespaces . Keys )
113
- {
114
- if ( builder . Resources . FirstOrDefault ( n =>
115
- string . Equals ( n . Name , nsResourceName , StringComparison . OrdinalIgnoreCase ) ) is
116
- SurrealDbNamespaceResource surrealDbNamespace )
117
- {
118
- await CreateNamespaceAsync ( surrealClient , surrealDbNamespace , @event . Services , ct )
119
- . ConfigureAwait ( false ) ;
126
+ foreach ( var nsResourceName in surrealServer . Namespaces . Keys )
127
+ {
128
+ if ( builder . Resources . FirstOrDefault ( n =>
129
+ string . Equals ( n . Name , nsResourceName , StringComparison . OrdinalIgnoreCase ) ) is
130
+ SurrealDbNamespaceResource surrealDbNamespace )
131
+ {
132
+ await CreateNamespaceAsync ( surrealClient , surrealDbNamespace , services , ct )
133
+ . ConfigureAwait ( false ) ;
120
134
121
- await surrealClient . Use ( surrealDbNamespace . NamespaceName , null ! , ct ) . ConfigureAwait ( false ) ;
135
+ await surrealClient . Use ( surrealDbNamespace . NamespaceName , null ! , ct ) . ConfigureAwait ( false ) ;
122
136
123
- foreach ( var dbResourceName in surrealDbNamespace . Databases . Keys )
124
- {
125
- if ( builder . Resources . FirstOrDefault ( n =>
126
- string . Equals ( n . Name , dbResourceName , StringComparison . OrdinalIgnoreCase ) ) is
127
- SurrealDbDatabaseResource surrealDbDatabase )
128
- {
129
- await CreateDatabaseAsync ( surrealClient , surrealDbDatabase , @event . Services , ct )
130
- . ConfigureAwait ( false ) ;
131
- }
132
- }
133
- }
134
- }
135
- } ) ;
137
+ foreach ( var dbResourceName in surrealDbNamespace . Databases . Keys )
138
+ {
139
+ if ( builder . Resources . FirstOrDefault ( n =>
140
+ string . Equals ( n . Name , dbResourceName , StringComparison . OrdinalIgnoreCase ) ) is
141
+ SurrealDbDatabaseResource surrealDbDatabase )
142
+ {
143
+ await CreateDatabaseAsync ( surrealClient , surrealDbDatabase , services , ct )
144
+ . ConfigureAwait ( false ) ;
145
+ }
146
+ }
147
+ }
148
+ }
136
149
}
137
150
138
151
/// <summary>
@@ -234,24 +247,10 @@ public static IResourceBuilder<SurrealDbDatabaseResource> AddDatabase(
234
247
235
248
SurrealDbClient ? surrealDbClient = null ;
236
249
237
- builder . ApplicationBuilder . Eventing . Subscribe < ConnectionStringAvailableEvent > ( surrealServerDatabase , async ( @event , ct ) =>
238
- {
239
- var connectionString = await surrealServerDatabase . ConnectionStringExpression . GetValueAsync ( ct ) . ConfigureAwait ( false ) ;
240
- if ( connectionString is null )
241
- {
242
- throw new DistributedApplicationException ( $ "ConnectionStringAvailableEvent was published for the '{ surrealServerDatabase } ' resource but the connection string was null.") ;
243
- }
244
-
245
- var options = new SurrealDbOptionsBuilder ( ) . FromConnectionString ( connectionString ) . Build ( ) ;
246
- surrealDbClient = new SurrealDbClient ( options ) ;
247
- } ) ;
248
-
249
250
string namespaceName = builder . Resource . Name ;
250
251
string serverName = builder . Resource . Parent . Name ;
251
252
252
253
string healthCheckKey = $ "{ serverName } _{ namespaceName } _{ name } _check";
253
- // TODO : Bug to be fixed
254
- //builder.ApplicationBuilder.Services.AddHealthChecks().AddSurreal(_ => surrealDbClient!, healthCheckKey);
255
254
builder . ApplicationBuilder . Services . AddHealthChecks ( ) . Add ( new HealthCheckRegistration (
256
255
name : healthCheckKey ,
257
256
_ => new SurrealDbHealthCheck ( surrealDbClient ! ) ,
@@ -261,7 +260,17 @@ public static IResourceBuilder<SurrealDbDatabaseResource> AddDatabase(
261
260
) ;
262
261
263
262
return builder . ApplicationBuilder . AddResource ( surrealServerDatabase )
264
- . WithHealthCheck ( healthCheckKey ) ;
263
+ . WithHealthCheck ( healthCheckKey )
264
+ . OnConnectionStringAvailable ( async ( _ , _ , ct ) => {
265
+ var connectionString = await surrealServerDatabase . ConnectionStringExpression . GetValueAsync ( ct ) . ConfigureAwait ( false ) ;
266
+ if ( connectionString is null )
267
+ {
268
+ throw new DistributedApplicationException ( $ "ConnectionStringAvailableEvent was published for the '{ surrealServerDatabase } ' resource but the connection string was null.") ;
269
+ }
270
+
271
+ var options = new SurrealDbOptionsBuilder ( ) . FromConnectionString ( connectionString ) . Build ( ) ;
272
+ surrealDbClient = new SurrealDbClient ( options ) ;
273
+ } ) ;
265
274
}
266
275
267
276
/// <summary>
0 commit comments