Пример #1
0
 public void MetadataUpdate(DiscoveryMetadata metadata)
 {
     if (!String.IsNullOrWhiteSpace(metadata.Value))
     {
         if (HostMetadata != null)
         {
             if (HostMetadata.Contains(metadata))
             {
                 try
                 {
                     Predicate <DiscoveryMetadata> finder = (DiscoveryMetadata m) => { return(m.Name == metadata.Name); };
                     DiscoveryMetadata             data   = HostMetadata.Find(finder);
                     data.Value = metadata.Value;
                     EndpointDiscoveryBehavior behavior = HostEndpoint.Behaviors.Find <EndpointDiscoveryBehavior>();
                     foreach (XElement element in behavior.Extensions.Elements <XElement>())
                     {
                         if (element.Name.Equals(metadata.Name.ToString()))
                         {
                             element.SetValue(metadata.Value);
                         }
                     }
                 }
                 catch (Exception ex)
                 {
                     Debug.WriteLine(ex.ToString());
                     throw ex;
                 }
             }
         }
     }
 }
Пример #2
0
 public void MetadataSet(DiscoveryMetadata metadata)
 {
     if (HostMetadata == null)
     {
         HostMetadata = new List <DiscoveryMetadata>();
     }
     HostMetadata.Add(metadata);
 }
Пример #3
0
        HostMetadata GetHostMetadata()
        {
            HostMetadata hostMetadata = new HostMetadata()
            {
                HostName    = _HostName,
                Instance    = _Instance,
                HostAddress = _HostAddress + (_HostAddress.EndsWith("/") ? "" : "/")
            };

            return(hostMetadata);
        }
        public void CanParseMalformedKernels(
            string fullVersion,
            string expectedKernel,
            string expectedRelease,
            string expectedVersion)
        {
            HostMetadata.ParseKernel(fullVersion, out var kernel, out var release, out var version);

            using var scope = new AssertionScope();
            kernel.Should().Be(expectedKernel);
            release.Should().Be(expectedRelease);
            version.Should().Be(expectedVersion);
        }
        public IActionResult Deregister(HttpRequestMessage request, string name, string instance)
        {
            lock (Hub.Hosts)
            {
                HostMetadata host = Hub.Hosts.FirstOrDefault(item => item.HostName.ToLower() == name.ToLower() &&
                                                             item.Instance.ToLower() == instance.ToLower());
                if (host != null)
                {
                    Hub.Hosts.Remove(host);
                }
            }

            return(new ObjectResult("OK"));
        }
        public IActionResult Register(HttpRequestMessage request, [FromBody] HostMetadata host)
        {
            lock (Hub.Hosts)
            {
                if (Hub.Hosts == null)
                {
                    Hub.Hosts = new List <HostMetadata>();
                }

                HostMetadata existingHost = Hub.Hosts.FirstOrDefault(item => item.HostAddress.ToLower() == host.HostAddress.ToLower() &&
                                                                     item.Instance.ToLower() == host.Instance.ToLower());
                if (existingHost == null)
                {
                    Hub.Hosts.Add(host);
                }
            }

            return(new ObjectResult("OK"));
        }
Пример #7
0
        public HostMetadata Connect(string url)
        {
            var host = new HostMetadata();

            using (var client = new HttpClient())
            {
                var referer = ConfigurationSettings.AppSettings.Get("Referer");
                var strs    = referer.Split(':');
                client.DefaultRequestHeaders.Referrer = new Uri(referer);
                AddHostResponce responce = null;
                var             task     = client.GetAsync(url + "/api/host/add?host=" + strs[0] + "&port=" + strs[1]).ContinueWith((taskwithresponse) =>
                {
                    var response   = taskwithresponse.Result;
                    var jsonString = response.Content.ReadAsStringAsync();
                    jsonString.Wait();
                    responce = JsonConvert.DeserializeObject <AddHostResponce>(jsonString.Result);
                });
                task.Wait();
                var markedStr = MarkString(responce.VerificationString);
                var r         = new AddHostVerificationRequest()
                {
                    EncodedString = markedStr, RequestId = responce.RequestId, Host = strs[0], Port = strs[1]
                };
                var buffer      = System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(r));
                var byteContent = new ByteArrayContent(buffer);
                byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                HttpStatusCode result = HttpStatusCode.BadRequest;
                task = client.PostAsync(url + "/api/host/Verify", byteContent).ContinueWith((taskwithresponse) =>
                {
                    var response = taskwithresponse.Result;
                    result       = response.StatusCode;
                });
                task.Wait();
                if (result != HttpStatusCode.OK)
                {
                    throw new Exception(result.ToString());
                }
            }
            return(host);
        }
Пример #8
0
        public void Start()
        {
            IConfigurationBuilder configBuilder = new ConfigurationBuilder();

            configBuilder.AddJsonFile("host.json");
            IConfigurationRoot configuration = configBuilder.Build();

            _HostName = configuration["hostName"];
            _Instance = GenerateUniqueInstanceIdentifier();

            _WebHost.Start();
            _DiscoveryMetadata  = GetDiscoveryMetadata();
            _EventSubscriptions = GetEventSubscriptions();
            _HostMetadata       = GetHostMetadata();

            // discovery hub

            _DiscoveryHubTimer          = new Timer(5000);
            _DiscoveryHubTimer.Elapsed += (s, e) =>
            {
                _DiscoveryHubTimer.Stop();

                if (!_ConnectedToDiscoveryHub)
                {
                    _ConnectedToDiscoveryHub = ConnectToDiscoveryHub();
                    OnDiscoveryHubConnect(_ConnectedToDiscoveryHub);
                }
                else
                {
                    _ConnectedToDiscoveryHub = PingDiscoveryHub();
                }

                _DiscoveryHubTimer.Start();
            };

            _DiscoveryHubTimer.Start();

            // event hub

            _EventHubTimer          = new Timer(5000);
            _EventHubTimer.Elapsed += (s, e) =>
            {
                _EventHubTimer.Stop();

                if (!_SubscribedToEvents)
                {
                    _SubscribedToEvents = SubscribeToEvents();
                    OnEventHubSubscribed(_SubscribedToEvents);
                }
                else
                {
                    _SubscribedToEvents = PingEventHub();
                }

                _EventHubTimer.Start();
            };

            _EventHubTimer.Start();


            // monitor hub

            _MonitorHubTimer          = new Timer(5000);
            _MonitorHubTimer.Elapsed += (s, e) =>
            {
                _MonitorHubTimer.Stop();

                if (!_RegisteredWithMonitorHub)
                {
                    _RegisteredWithMonitorHub = RegisterWithMonitorHub();
                    OnMonitorHubRegistered(_RegisteredWithMonitorHub);
                }
                else
                {
                    _RegisteredWithMonitorHub = PingMonitorHub();
                }

                _MonitorHubTimer.Start();
            };

            _MonitorHubTimer.Start();
        }