コード例 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="WebDescriptorActor"/> class.
        /// </summary>
        public WebDescriptorActor()
        {
            var description = new WebDescriptionResponse();

            var config = Context?.System?.Settings?.Config;
            var servicesConfig = config?.GetConfig("ClusterKit.Web.Services");

            var services = new List<ServiceDescription>();

            if (servicesConfig != null)
            {
                foreach (var pair in servicesConfig.AsEnumerable())
                {
                    if (!pair.Value.IsObject())
                    {
                        Context.GetLogger().Error($"ClusterKit.Web.Services configuration is broken, {pair.Key} is not a valid configuration");
                        continue;
                    }

                    var serviceConfig = servicesConfig.GetConfig(pair.Key);
                    if (serviceConfig == null || serviceConfig.IsEmpty)
                    {
                        continue;
                    }

                    var serviceDescription = new ServiceDescription
                    {
                        ListeningPort = serviceConfig.GetInt("Port", 8080),
                        LocalHostName = serviceConfig.GetString("LocalHostName"),
                        PublicHostName = serviceConfig.GetString(
                                                             "PublicHostName",
                                                             "default"),
                        Route = serviceConfig.GetString("Route")
                    };

                    if (serviceDescription.Route == null)
                    {
                        Context.GetLogger().Error($"ClusterKit.Web.Services configuration is broken, {pair.Key} is not a valid configuration");
                        continue;
                    }

                    Context.GetLogger().Info($"Web publishing {pair.Key}: {serviceDescription.LocalHostName ?? "*"}:{serviceDescription.ListeningPort}/{serviceDescription.Route} for {serviceDescription.PublicHostName}");

                    services.Add(serviceDescription);
                }
            }

            description.Services = services.AsReadOnly();
            this.webDescription = description;
            this.Receive<WebDescriptionRequest>(m => this.Sender.Tell(this.webDescription));
        }
コード例 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="WebDescriptorActor"/> class.
        /// </summary>
        public WebDescriptorActor()
        {
            var description = new WebDescriptionResponse();

            var config         = Context?.System?.Settings?.Config;
            var servicesConfig = config?.GetConfig("KlusterKite.Web.Services");

            var services = new List <ServiceDescription>();

            if (servicesConfig != null)
            {
                foreach (var pair in servicesConfig.AsEnumerable())
                {
                    if (!pair.Value.IsObject())
                    {
                        Context.GetLogger().Error($"KlusterKite.Web.Services configuration is broken, {pair.Key} is not a valid configuration");
                        continue;
                    }

                    var serviceConfig = servicesConfig.GetConfig(pair.Key);
                    if (serviceConfig == null || serviceConfig.IsEmpty)
                    {
                        continue;
                    }

                    var serviceDescription = new ServiceDescription
                    {
                        ListeningPort  = serviceConfig.GetInt("Port", 8080),
                        LocalHostName  = serviceConfig.GetString("LocalHostName"),
                        PublicHostName = serviceConfig.GetString(
                            "PublicHostName",
                            "default"),
                        Route = serviceConfig.GetString("Route")
                    };

                    if (serviceDescription.Route == null)
                    {
                        Context.GetLogger().Error($"KlusterKite.Web.Services configuration is broken, {pair.Key} is not a valid configuration");
                        continue;
                    }

                    Context.GetLogger().Info($"Web publishing {pair.Key}: {serviceDescription.LocalHostName ?? "*"}:{serviceDescription.ListeningPort}/{serviceDescription.Route} for {serviceDescription.PublicHostName}");

                    services.Add(serviceDescription);
                }
            }

            description.Services = services.AsReadOnly();
            this.Receive <WebDescriptionRequest>(m => this.Sender.Tell(description));
        }
コード例 #3
0
        /// <summary>
        /// Applies node description to configuration
        /// </summary>
        /// <param name="description">The node description</param>
        private void OnNewNodeDescription(WebDescriptionResponse description)
        {
            var nodeAddress = this.Sender.Path.Address;
            if (nodeAddress.Host == null)
            {
                // supposed this is local address
                nodeAddress = Cluster.Get(Context.System).SelfAddress;
            }

            if (!this.KnownActiveNodes.Contains(nodeAddress))
            {
                // node managed to go down before it was initialized
                return;
            }

            if (this.NodePublishUrls.ContainsKey(nodeAddress))
            {
                // duplicate configuration info
                return;
            }

            this.NodePublishUrls[nodeAddress] = description;

            foreach (var serviceDescription in description.Services)
            {
                var nodeServiceDescription = new NodeServiceConfiguration
                {
                    NodeAddress = nodeAddress,
                    ServiceDescription = serviceDescription
                };
                var serviceConfiguration = this.Configuration[serviceDescription.PublicHostName][serviceDescription.Route];
                if (!serviceConfiguration.ActiveNodes.Contains(nodeServiceDescription))
                {
                    serviceConfiguration.ActiveNodes.Add(nodeServiceDescription);
                }
            }

            this.WriteConfiguration();
        }