/// <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)); }
/// <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)); }
/// <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(); }