private static void ConfigureEurekaServices(IServiceCollection services, IConfiguration config, IServiceInfo info, InetOptions netOptions)
        {
            var einfo         = info as EurekaServiceInfo;
            var clientSection = config.GetSection(EurekaClientOptions.EUREKA_CLIENT_CONFIGURATION_PREFIX);

            services.Configure <EurekaClientOptions>(clientSection);
            services.PostConfigure <EurekaClientOptions>((options) =>
            {
                EurekaPostConfigurer.UpdateConfiguration(config, einfo, options);
            });

            var instSection = config.GetSection(EurekaInstanceOptions.EUREKA_INSTANCE_CONFIGURATION_PREFIX);

            services.Configure <EurekaInstanceOptions>(instSection);
            services.PostConfigure <EurekaInstanceOptions>((options) =>
            {
                IApplicationInstanceInfo appInfo = null;
                if (einfo?.ApplicationInfo == null)
                {
                    appInfo = services.GetApplicationInstanceInfo();
                }

                options.NetUtils = new InetUtils(netOptions);
                options.ApplyNetUtils();
                EurekaPostConfigurer.UpdateConfiguration(config, einfo, options, einfo?.ApplicationInfo ?? appInfo);
            });
        }
示例#2
0
        public TracingOptions(IApplicationInstanceInfo appInfo, IConfiguration config)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            var section = config.GetSection(CONFIG_PREFIX);

            if (section != null)
            {
                section.Bind(this);
            }

            _applicationInstanceInfo = appInfo;

            if (string.IsNullOrEmpty(IngressIgnorePattern))
            {
                IngressIgnorePattern = DEFAULT_INGRESS_IGNORE_PATTERN;
            }

            if (string.IsNullOrEmpty(EgressIgnorePattern))
            {
                EgressIgnorePattern = DEFAULT_EGRESS_IGNORE_PATTERN;
            }
        }
示例#3
0
        private static void ConfigureEurekaServices(IServiceCollection services, IConfiguration config, IServiceInfo info)
        {
            var einfo         = info as EurekaServiceInfo;
            var clientSection = config.GetSection(EurekaClientOptions.EUREKA_CLIENT_CONFIGURATION_PREFIX);

            services.Configure <EurekaClientOptions>(clientSection);
            services.PostConfigure <EurekaClientOptions>((options) =>
            {
                EurekaPostConfigurer.UpdateConfiguration(config, einfo, options);
            });

            var instSection = config.GetSection(EurekaInstanceOptions.EUREKA_INSTANCE_CONFIGURATION_PREFIX);

            services.Configure <EurekaInstanceOptions>(instSection);
            services.PostConfigure <EurekaInstanceOptions>((options) =>
            {
                IApplicationInstanceInfo appInfo = null;
                if (einfo?.ApplicationInfo == null)
                {
                    appInfo = services.BuildServiceProvider().GetService <IApplicationInstanceInfo>() ?? new ApplicationInstanceInfo(config);
                }

                EurekaPostConfigurer.UpdateConfiguration(config, einfo, options, einfo?.ApplicationInfo ?? appInfo);
            });
        }
示例#4
0
        private static void ConfigureEurekaServices(IServiceCollection services, IConfiguration config, IServiceInfo info, InetOptions netOptions)
        {
            var einfo         = info as EurekaServiceInfo;
            var clientSection = config.GetSection(EurekaClientOptions.EUREKA_CLIENT_CONFIGURATION_PREFIX);

            services.Configure <EurekaClientOptions>(clientSection);
            services.PostConfigure <EurekaClientOptions>((options) =>
            {
                EurekaPostConfigurer.UpdateConfiguration(config, einfo, options);
            });

            var instSection = config.GetSection(EurekaInstanceOptions.EUREKA_INSTANCE_CONFIGURATION_PREFIX);

            services.Configure <EurekaInstanceOptions>(instSection);
            services.PostConfigure <EurekaInstanceOptions>((options) =>
            {
                IApplicationInstanceInfo appInfo = null;
                if (einfo?.ApplicationInfo == null)
                {
                    appInfo = services.GetApplicationInstanceInfo();
                }

                options.NetUtils = new InetUtils(netOptions);
                options.ApplyNetUtils();
                EurekaPostConfigurer.UpdateConfiguration(config, einfo, options, einfo?.ApplicationInfo ?? appInfo);
            });
            services.TryAddSingleton(serviceProvider =>
            {
                var clientOptions = serviceProvider.GetRequiredService <IOptions <EurekaClientOptions> >();
                return(new DistributedCacheEntryOptions {
                    AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(clientOptions.Value.CacheTTL)
                });
            });
        }
示例#5
0
        internal static string GetInstanceId(ConsulDiscoveryOptions options, IApplicationInstanceInfo applicationInfo)
        {
            if (string.IsNullOrEmpty(options.InstanceId))
            {
                return(NormalizeForConsul(GetDefaultInstanceId(applicationInfo)));
            }

            return(NormalizeForConsul(options.InstanceId));
        }
示例#6
0
        public ServiceInfo(string id, IApplicationInstanceInfo info)
        {
            if (string.IsNullOrEmpty(id))
            {
                throw new ArgumentNullException(nameof(id));
            }

            Id = id;
            ApplicationInfo = info;
        }
示例#7
0
        internal static string GetDefaultInstanceId(IApplicationInstanceInfo applicationInfo)
        {
            var appName    = applicationInfo.ApplicationNameInContext(SteeltoeComponent.Discovery, ConsulDiscoveryOptions.CONSUL_DISCOVERY_CONFIGURATION_PREFIX + ":serviceName");
            var instanceId = applicationInfo.InstanceId;

            if (string.IsNullOrEmpty(instanceId))
            {
                var rand = new Random();
                instanceId = rand.Next().ToString();
            }

            return(appName + ":" + instanceId);
        }
示例#8
0
        public BootAdminClientOptions(IConfiguration config, IApplicationInstanceInfo appInfo = null)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            var section = config.GetSection(PREFIX);

            if (section != null)
            {
                section.Bind(this);
            }

            BasePath ??= GetBasePath(config);
            appInfo ??= new ApplicationInstanceInfo(config);
            ApplicationName ??= appInfo.ApplicationName;
        }
        public TraceExporterOptions(IApplicationInstanceInfo appInfo, IConfiguration config)
            : this()
        {
            if (appInfo is null)
            {
                throw new ArgumentNullException(nameof(appInfo));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            var section = config.GetSection(CONFIG_PREFIX);

            if (section != null)
            {
                section.Bind(this);
            }

            _applicationInstanceInfo = appInfo;
            ServiceName ??= _applicationInstanceInfo.ApplicationNameInContext(SteeltoeComponent.Management, CONFIG_PREFIX + ":serviceName");
        }
        public SpringBootAdminClientOptions(IConfiguration config, IApplicationInstanceInfo appInfo)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            if (appInfo is null)
            {
                throw new ArgumentNullException(nameof(appInfo));
            }

            var section = config.GetSection(PREFIX);

            if (section != null)
            {
                section.Bind(this);
            }

            // Require base path to be supplied directly, in the config, or in the app instance info
            BasePath ??= GetBasePath(config) ?? appInfo?.Uris?.FirstOrDefault() ?? throw new NullReferenceException($"Please set {PREFIX}:BasePath in order to register with Spring Boot Admin");
            ApplicationName ??= appInfo.ApplicationName;
        }
        public CloudFoundryForwarderOptions(IApplicationInstanceInfo appInfo, IServicesInfo serviceInfo, IConfiguration config)
        {
            if (appInfo is null)
            {
                throw new ArgumentNullException(nameof(appInfo));
            }

            if (serviceInfo is null)
            {
                throw new ArgumentNullException(nameof(serviceInfo));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            applicationInstanceInfo = appInfo;

            var section = config.GetSection(CONFIG_PREFIX);

            if (section != null)
            {
                section.Bind(this);
            }

            var servOptions = serviceInfo.GetInstancesOfType(FORWARDER_NAME);

            if (servOptions.Any())
            {
                ConfigureServiceCredentials(servOptions.First().Credentials);
            }

            ApplicationId ??= applicationInstanceInfo.ApplicationId;
            InstanceId ??= applicationInstanceInfo.InstanceId;
            InstanceIndex ??= applicationInstanceInfo.InstanceIndex.ToString();
        }
示例#12
0
        /// <summary>
        /// Create a Consul registration
        /// </summary>
        /// <param name="options">configuration options to use</param>
        /// <param name="applicationInfo">Info about this app instance</param>
        /// <returns>a registration</returns>
        public static ConsulRegistration CreateRegistration(ConsulDiscoveryOptions options, IApplicationInstanceInfo applicationInfo)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            var service = new AgentServiceRegistration();

            service.ID = GetInstanceId(options, applicationInfo);

            if (!options.PreferAgentAddress)
            {
                service.Address = options.HostName;
            }

            var appName = applicationInfo.ApplicationNameInContext(SteeltoeComponent.Discovery, ConsulDiscoveryOptions.CONSUL_DISCOVERY_CONFIGURATION_PREFIX + ":serviceName");

            service.Name = NormalizeForConsul(appName);
            service.Tags = CreateTags(options);
            if (options.Port != 0)
            {
                service.Port = options.Port;
                SetCheck(service, options);
            }

            return(new ConsulRegistration(service, options));
        }
示例#13
0
        public static void UpdateConfiguration(IConfiguration config, EurekaInstanceOptions options, IApplicationInstanceInfo instanceInfo)
        {
            var defaultId = options.GetHostName(false) + ":" + EurekaInstanceOptions.Default_Appname + ":" + EurekaInstanceOptions.Default_NonSecurePort;

            if (EurekaInstanceOptions.Default_Appname.Equals(options.AppName))
            {
                var springAppName = instanceInfo?.ApplicationNameInContext(SteeltoeComponent.Discovery);

                // this is a bit of a hack, but depending on how we got here, ApplicationNameInContext may or may not know about VCAP
                if (Platform.IsCloudFoundry && springAppName == System.Reflection.Assembly.GetEntryAssembly().GetName().Name&& !string.IsNullOrEmpty(instanceInfo?.ApplicationName))
                {
                    options.AppName = instanceInfo.ApplicationName;
                }
                else if (!string.IsNullOrEmpty(springAppName))
                {
                    options.AppName = springAppName;
                }
            }

            if (string.IsNullOrEmpty(options.VirtualHostName))
            {
                options.VirtualHostName = options.AppName;
            }

            if (string.IsNullOrEmpty(options.SecureVirtualHostName))
            {
                options.SecureVirtualHostName = options.AppName;
            }

            if (string.IsNullOrEmpty(options.RegistrationMethod))
            {
                var springRegMethod = config.GetValue <string>(SPRING_CLOUD_DISCOVERY_REGISTRATIONMETHOD_KEY);
                if (!string.IsNullOrEmpty(springRegMethod))
                {
                    options.RegistrationMethod = springRegMethod;
                }
            }

            // try to pull some values out of server config to override defaults, but only if registration method hasn't been set
            // if registration method has been set, the user probably wants to define their own behavior
            var urls = config["urls"];

            if (!string.IsNullOrEmpty(urls) && string.IsNullOrEmpty(options.RegistrationMethod))
            {
                var addresses = urls.Split(";");
                foreach (var address in addresses)
                {
                    if (!Uri.TryCreate(address, UriKind.Absolute, out var uri) &&
                        (address.Contains("*") || address.Contains("::")))
                    {
                        Uri.TryCreate(address.Replace("*", WILDCART_HOST).Replace("::", $"{WILDCART_HOST}:"), UriKind.Absolute, out uri);
                    }

                    SetOptionsFromUrls(options, uri);
                }
            }

            if (defaultId.Equals(options.InstanceId))
            {
                var springInstanceId = instanceInfo?.InstanceId;
                if (!string.IsNullOrEmpty(springInstanceId))
                {
                    options.InstanceId = springInstanceId;
                }
                else
                {
                    if (options.SecurePortEnabled)
                    {
                        options.InstanceId = options.GetHostName(false) + ":" + options.AppName + ":" + options.SecurePort;
                    }
                    else
                    {
                        options.InstanceId = options.GetHostName(false) + ":" + options.AppName + ":" + options.NonSecurePort;
                    }
                }
            }
        }
示例#14
0
        public static void UpdateConfiguration(IConfiguration config, EurekaInstanceOptions options, IApplicationInstanceInfo instanceInfo)
        {
            var defaultId = options.GetHostName(false) + ":" + EurekaInstanceOptions.Default_Appname + ":" + EurekaInstanceOptions.Default_NonSecurePort;

            if (EurekaInstanceOptions.Default_Appname.Equals(options.AppName))
            {
                var springAppName = instanceInfo?.ApplicationNameInContext(SteeltoeComponent.Discovery);

                // this is a bit of a hack, but depending on how we got here, ApplicationNameInContext may or may not know about VCAP
                if (Platform.IsCloudFoundry && springAppName == System.Reflection.Assembly.GetEntryAssembly().GetName().Name&& !string.IsNullOrEmpty(instanceInfo?.ApplicationName))
                {
                    options.AppName = instanceInfo.ApplicationName;
                }
                else if (!string.IsNullOrEmpty(springAppName))
                {
                    options.AppName = springAppName;
                }
            }

            if (string.IsNullOrEmpty(options.VirtualHostName))
            {
                options.VirtualHostName = options.AppName;
            }

            if (string.IsNullOrEmpty(options.SecureVirtualHostName))
            {
                options.SecureVirtualHostName = options.AppName;
            }

            if (defaultId.Equals(options.InstanceId))
            {
                var springInstanceId = instanceInfo?.InstanceId;
                if (!string.IsNullOrEmpty(springInstanceId))
                {
                    options.InstanceId = springInstanceId;
                }
                else
                {
                    options.InstanceId = options.GetHostName(false) + ":" + options.AppName + ":" + options.NonSecurePort;
                }
            }

            if (string.IsNullOrEmpty(options.RegistrationMethod))
            {
                string springRegMethod = config.GetValue <string>(SPRING_CLOUD_DISCOVERY_REGISTRATIONMETHOD_KEY);
                if (!string.IsNullOrEmpty(springRegMethod))
                {
                    options.RegistrationMethod = springRegMethod;
                }
            }
        }
示例#15
0
 public IndexModel(IApplicationInstanceInfo applicationInstanceInfo, IConfiguration configuration, ILogger <IndexModel> logger)
 {
     _applicationInstanceInfo = applicationInstanceInfo;
     _configuration           = configuration;
     _logger = logger;
 }
示例#16
0
 public TestServiceInfo(string id, IApplicationInstanceInfo info)
     : base(id, info)
 {
 }
示例#17
0
        public static void UpdateConfiguration(IConfiguration config, EurekaServiceInfo si, EurekaInstanceOptions instOptions, IApplicationInstanceInfo appInfo)
        {
            if (instOptions == null)
            {
                return;
            }

            UpdateConfiguration(config, instOptions, appInfo);

            if (si == null)
            {
                return;
            }

            if (EurekaInstanceOptions.Default_Appname.Equals(instOptions.AppName))
            {
                instOptions.AppName = si.ApplicationInfo.ApplicationName;
            }

            if (string.IsNullOrEmpty(instOptions.RegistrationMethod) ||
                ROUTE_REGISTRATIONMETHOD.Equals(instOptions.RegistrationMethod, StringComparison.OrdinalIgnoreCase))
            {
                UpdateWithDefaultsForRoute(si, instOptions);
                return;
            }

            if (DIRECT_REGISTRATIONMETHOD.Equals(instOptions.RegistrationMethod, StringComparison.OrdinalIgnoreCase))
            {
                UpdateWithDefaultsForDirect(si, instOptions);
                return;
            }

            if (HOST_REGISTRATIONMETHOD.Equals(instOptions.RegistrationMethod, StringComparison.OrdinalIgnoreCase))
            {
                UpdateWithDefaultsForHost(si, instOptions, instOptions.HostName);
            }
        }