private DiscoveryMetadata GetDiscoveryMetadata()
        {
            DiscoveryMetadata discoveryMetadata = new DiscoveryMetadata();

            discoveryMetadata.NSv11 = _inspireMonitoring.NumberOfDatasetsRegisteredInADiscoveryService; // Antall datasett som er registrert i en discovery service (Alle datasett)
            discoveryMetadata.NSv12 = _inspireMonitoring.NumberOfServicesRegisteredInADiscoveryService; // Antall tjenester som er registrert i en discovery service (Alle tjenester)
            return(discoveryMetadata);
        }
Exemple #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DiscoveryServer"/> class.
        /// </summary>
        /// <param name="responseMetadata">The response metadata.</param>
        /// <param name="port">The port to bind to.</param>
        /// <param name="localAddress">The local address to bind to.</param>
        public DiscoveryServer(DiscoveryMetadata responseMetadata, int port = DefaultDiscoveryPort, IPAddress localAddress = null)
        {
            if (responseMetadata == null)
            {
                throw new ArgumentNullException("responseMetadata", "Discovery response metadata is missing.");
            }

            Port                   = port;
            LocalAddress           = localAddress ?? IPAddress.Any;
            ResponseMetadata       = responseMetadata;
            ResponseMetadataPacket = DiscoveryMetadataHelper.Encode(ResponseMetadata);
        }
Exemple #3
0
        private void HandleResponse(DiscoveryMetadata response)
        {
            lock (lockObject)
            {
                if (response == null || Results.Contains(response))
                {
                    return;
                }

                Results.Add(response);
            }

            OnDiscovered(new DiscoveryEventArgs(response));
        }
Exemple #4
0
        public IActionResult Deregister(HttpRequestMessage request, string name, string instance)
        {
            lock (Hub.Hosts)
            {
                DiscoveryMetadata 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"));
        }
Exemple #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DiscoveryClient"/> class.
        /// </summary>
        /// <param name="requestMetadata">The request metadata.</param>
        /// <param name="port">The port of the discovery server.</param>
        public DiscoveryClient(DiscoveryMetadata requestMetadata, int port = DiscoveryServer.DefaultDiscoveryPort)
        {
            if (requestMetadata == null)
            {
                throw new ArgumentNullException("requestMetadata", "Discovery request metadata is missing.");
            }

            Port                  = port;
            RequestMetadata       = requestMetadata;
            RequestMetadataPacket = DiscoveryMetadataHelper.Encode(RequestMetadata);
            DestinationAddress    = IPAddress.Broadcast;
            DestinationEndpoint   = new IPEndPoint(DestinationAddress, Port);
            Results               = new HashSet <DiscoveryMetadata>();
            RetryTimeout          = TimeSpan.FromSeconds(1);
            RetryCount            = 10;
        }
Exemple #6
0
        public IActionResult Register(HttpRequestMessage request, [FromBody] DiscoveryMetadata host)
        {
            lock (Hub.Hosts)
            {
                if (Hub.Hosts == null)
                {
                    Hub.Hosts = new List <DiscoveryMetadata>();
                }

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

            return(new ObjectResult("OK"));
        }
Exemple #7
0
        DiscoveryMetadata GetDiscoveryMetadata()
        {
            List <Service> services = new List <Service>();

            foreach (Type controllerType in ControllerTypes)
            {
                Service service = ProcessService(controllerType);
                if (service != null)
                {
                    services.Add(service);
                }
            }

            DiscoveryMetadata discoveryMetadata = new DiscoveryMetadata()
            {
                HostName    = _HostName,
                Instance    = _Instance,
                HostAddress = _HostAddress + (_HostAddress.EndsWith("/") ? "" : "/"),
                Services    = services
            };

            return(discoveryMetadata);
        }
Exemple #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DiscoveryEventArgs"/> class.
 /// </summary>
 /// <param name="metadata">Discovery metadata.</param>
 public DiscoveryEventArgs(DiscoveryMetadata metadata)
 {
     Metadata = metadata;
 }
Exemple #9
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();
        }