Beispiel #1
0
        public void InitializedWithDefaults()
        {
            var opts = new ManagementEndpointOptions();

            Assert.False(opts.Enabled.HasValue);
            Assert.Equal("/actuator", opts.Path);
        }
Beispiel #2
0
        public async Task SpringBootAdminClient_RegistersAndDeletes()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:endpoints:path"]        = "/management",
                ["management:endpoints:health:path"] = "myhealth",
                ["URLS"] = "http://localhost:8080;https://localhost:8082",
                ["spring:boot:admin:client:url"] = "http://springbootadmin:9090",
                ["spring:application:name"]      = "MySteeltoeApplication",
            };

            var config             = new ConfigurationBuilder().AddInMemoryCollection(appsettings).Build();
            var appInfo            = new ApplicationInstanceInfo(config);
            var sbaOptions         = new SpringBootAdminClientOptions(config, appInfo);
            var mgmtOptions        = new ManagementEndpointOptions(config);
            var healthOptions      = new HealthEndpointOptions(config);
            var httpMessageHandler = new MockHttpMessageHandler();

            httpMessageHandler
            .Expect(HttpMethod.Post, "http://springbootadmin:9090/instances")
            .Respond("application/json", "{\"Id\":\"1234567\"}");
            httpMessageHandler
            .Expect(HttpMethod.Delete, "http://springbootadmin:9090/instances/1234567")
            .Respond(req => new HttpResponseMessage(HttpStatusCode.NoContent));

            Assert.Null(SpringBootAdminClientHostedService.RegistrationResult);
            var service = new SpringBootAdminClientHostedService(sbaOptions, mgmtOptions, healthOptions, httpMessageHandler.ToHttpClient());
            await service.StartAsync(default);
 public SpringBootAdminClientHostedService(SpringBootAdminClientOptions options, ManagementEndpointOptions mgmtOptions, HealthEndpointOptions healthOptions, HttpClient httpClient = null, ILogger logger = null)
 {
     _options       = options;
     _mgmtOptions   = mgmtOptions;
     _healthOptions = healthOptions;
     _httpClient    = httpClient ?? HttpClientHelper.GetHttpClient(_options.ValidateCertificates, _options.ConnectionTimeoutMS);
     _logger        = logger ?? NullLogger.Instance;
 }
Beispiel #4
0
        public void BindsConfigurationCorrectly()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:endpoints:enabled"]      = "false",
                ["management:endpoints:path"]         = "/management",
                ["management:endpoints:info:enabled"] = "true",
                ["management:endpoints:info:id"]      = "/infomanagement"
            };
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var opts = new ManagementEndpointOptions(config);

            Assert.False(opts.Enabled);
            Assert.Equal("/management", opts.Path);
        }
        /// <summary>
        /// Register the application with a Spring-Boot-Admin server
        /// </summary>
        /// <param name="builder"><see cref="IApplicationBuilder"/></param>
        /// <param name="configuration">App configuration. Will be retrieved from builder.ApplicationServices if not provided</param>
        /// <param name="httpClient">A customized HttpClient. [Bring your own auth]</param>
        public static void RegisterWithSpringBootAdmin(this IApplicationBuilder builder, IConfiguration configuration = null, HttpClient httpClient = null)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (configuration is null)
            {
                configuration = builder.ApplicationServices.GetRequiredService <IConfiguration>();
            }

            var logger        = builder.ApplicationServices.GetService <ILogger <SpringBootAdminClientOptions> >();
            var appInfo       = builder.ApplicationServices.GetApplicationInstanceInfo();
            var options       = new SpringBootAdminClientOptions(configuration, appInfo);
            var mgmtOptions   = new ManagementEndpointOptions(configuration);
            var healthOptions = new HealthEndpointOptions(configuration);
            var basePath      = options.BasePath.TrimEnd('/');

            httpClient ??= HttpClientHelper.GetHttpClient(options.ValidateCertificates, ConnectionTimeoutMs);

            var app = new Application()
            {
                Name          = options.ApplicationName ?? "Steeltoe",
                HealthUrl     = new Uri($"{basePath}{mgmtOptions.Path}/{healthOptions.Path}"),
                ManagementUrl = new Uri($"{basePath}{mgmtOptions.Path}"),
                ServiceUrl    = new Uri($"{basePath}/"),
                Metadata      = new Dictionary <string, object> {
                    { "startup", DateTime.Now }
                },
            };

            app.Metadata.Merge(options.Metadata);

            var lifetime = builder.ApplicationServices.GetService <IHostApplicationLifetime>();

            lifetime.ApplicationStarted.Register(() =>
            {
                logger?.LogInformation("Registering with Spring Boot Admin Server at {0}", options.Url);

                var result = httpClient.PostAsJsonAsync($"{options.Url}/instances", app).GetAwaiter().GetResult();
                if (result.IsSuccessStatusCode)
                {
                    RegistrationResult = result.Content.ReadFromJsonAsync <RegistrationResult>().GetAwaiter().GetResult();
                }
                else
                {
                    logger.LogError($"Error registering with SpringBootAdmin {result}");
                }
            });

            lifetime.ApplicationStopped.Register(() =>
            {
                if (RegistrationResult == null || string.IsNullOrEmpty(RegistrationResult.Id))
                {
                    return;
                }

                _ = httpClient.DeleteAsync($"{options.Url}/instances/{RegistrationResult.Id}").GetAwaiter().GetResult();
            });
        }