Beispiel #1
0
        public async Task <MicrowaveServiceNode> GetConsumingServiceNodes()
        {
            var eventLocation = await _statusRepository.GetEventLocation();

            return(MicrowaveServiceNode.ReachableMicrowaveServiceNode(new ServiceEndPoint(null, _configuration.ServiceName),
                                                                      eventLocation.Services.Select(s => s.ServiceEndPoint)));
        }
Beispiel #2
0
        private void SetDomainEventLocation(MicrowaveServiceNode microwaveServiceNodePublishStuff)
        {
            var servicesWithoutAddedService = Services.Where(s => s.ServiceEndPoint.ServiceBaseAddress != microwaveServiceNodePublishStuff.ServiceEndPoint.ServiceBaseAddress);
            var services = servicesWithoutAddedService.Append(microwaveServiceNodePublishStuff);

            Services = services;
        }
Beispiel #3
0
        public async Task <MicrowaveServiceNode> GetDependantServices(Uri serviceAddress)
        {
            var client = await _factory.GetClient(serviceAddress);

            try
            {
                var response = await client.GetAsync("Dicovery/ServiceDependencies");

                _logger.LogTrace($"Response for Servicedependencies was {response.StatusCode}");
                if (!response.IsSuccessStatusCode)
                {
                    return(MicrowaveServiceNode.UnreachableMicrowaveServiceNode(new ServiceEndPoint(serviceAddress), new List <ServiceEndPoint>()));
                }
                var content = await response.Content.ReadAsStringAsync();

                var remoteNode = JsonConvert.DeserializeObject <MicrowaveServiceNodeDto>(content);
                var newNode    = MicrowaveServiceNode.ReachableMicrowaveServiceNode(
                    new ServiceEndPoint(serviceAddress, remoteNode.ServiceEndPoint.Name),
                    remoteNode.ConnectedServices);
                return(newNode);
            }
            catch (HttpRequestException)
            {
                return(MicrowaveServiceNode.UnreachableMicrowaveServiceNode(new ServiceEndPoint(serviceAddress), new List <ServiceEndPoint>()));
            }
        }
Beispiel #4
0
        public async Task <ServiceMap> GetServiceMap()
        {
            var mongoCollection = _database.GetCollection <ServiceMapDbo>(StatusDbName);
            var mapDbo          = await mongoCollection.FindSync(e => e.Id == nameof(ServiceMap)).SingleOrDefaultAsync();

            var services = mapDbo?.Services.Select(s =>
                                                   s.IsReachable
                    ? MicrowaveServiceNode.ReachableMicrowaveServiceNode(s.ServiceEndPoint, s.Services)
                    : MicrowaveServiceNode.UnreachableMicrowaveServiceNode(s.ServiceEndPoint, s.Services));

            return(mapDbo == null ? null : new ServiceMap(services));
        }
Beispiel #5
0
        public void GetNodesAndEdges()
        {
            var discoMock = new Mock <IDiscoveryHandler>();
            var map       = new ServiceMap(new List <MicrowaveServiceNode>
            {
                MicrowaveServiceNode.ReachableMicrowaveServiceNode(new ServiceEndPoint(new Uri("http://12.de"), "Name"),
                                                                   new List <ServiceEndPoint>
                {
                    new ServiceEndPoint(new Uri("http://123.de"), "Name"),
                    new ServiceEndPoint(new Uri("http://1234.de"), "Name")
                }),
                MicrowaveServiceNode.ReachableMicrowaveServiceNode(new ServiceEndPoint(new Uri("http://123.de"), "Name2"),
                                                                   new List <ServiceEndPoint>
                {
                    new ServiceEndPoint(new Uri("http://12.de"), "Name2"),
                    new ServiceEndPoint(new Uri("http://1234.de"), "Name")
                }),
                MicrowaveServiceNode.ReachableMicrowaveServiceNode(new ServiceEndPoint(new Uri("http://1234.de"), "MostFrequentService"),
                                                                   new List <ServiceEndPoint>())
            });

            discoMock.Setup(m => m.GetServiceMap()).ReturnsAsync(map);
            var serviceMapPage = new ServiceMapPage(discoMock.Object, null);

            serviceMapPage.OnGetAsync().Wait();
            var nodes = serviceMapPage.OrderedNodes.ToList();

            Assert.AreEqual(3, nodes.Count);
            Assert.AreEqual("http://1234.de/", nodes[0].serviceAddress);
            Assert.AreEqual("MostFrequentService", nodes[0].label);
            Assert.AreEqual("http://1234.de/", nodes[0].id);
            Assert.AreEqual(0, nodes[0].x);
            Assert.AreEqual(0, nodes[0].y);
            Assert.AreEqual(new Uri("http://123.de"), nodes[1].serviceAddress);
            Assert.AreEqual(new Uri("http://12.de"), nodes[2].serviceAddress);
            Assert.AreEqual(0, nodes[2].x);
            Assert.AreEqual(1, nodes[2].y);

            var edges = serviceMapPage.Edges.ToList();

            Assert.AreEqual(4, edges.Count);
            Assert.AreEqual("http://12.de/", edges[0].source);
            Assert.AreEqual("http://123.de/", edges[0].target);
            Assert.AreEqual("http://12.de/", edges[1].source);
            Assert.AreEqual("http://1234.de/", edges[1].target);
            Assert.AreEqual("http://123.de/", edges[2].source);
            Assert.AreEqual("http://12.de/", edges[2].target);
            Assert.AreEqual("http://123.de/", edges[3].source);
            Assert.AreEqual("http://1234.de/", edges[3].target);
        }
Beispiel #6
0
        public EventLocation(IEnumerable <EventsPublishedByService> allServices, EventsSubscribedByService eventsSubscribedByService)
        {
            var readModels        = eventsSubscribedByService.ReadModelSubcriptions.ToList();
            var handleAsyncEvents = eventsSubscribedByService.Events.ToList();

            UnresolvedEventSubscriptions    = handleAsyncEvents;
            UnresolvedReadModeSubscriptions = readModels;

            foreach (var service in allServices)
            {
                var relevantEventsOfService = handleAsyncEvents.Where(ev => service.PublishedEventTypes.Contains(ev)).ToList();
                var relevantEvents          = relevantEventsOfService.Select(relevantEvent =>
                {
                    var notFoundProperties = GetDiffOfProperties(relevantEvent, service);
                    return(new EventSchema(relevantEvent.Name, notFoundProperties));
                }).ToList();

                var relevantReadModelsService = readModels.Where(r => service.PublishedEventTypes.Contains(r.GetsCreatedOn)).ToList();
                var relevantReadModels        = relevantReadModelsService.Select(readModel =>
                {
                    var createdEvent       = readModel.GetsCreatedOn;
                    var notFoundProperties = GetDiffOfProperties(createdEvent, service);

                    return(new ReadModelSubscription(
                               readModel.ReadModelName,
                               new EventSchema(createdEvent.Name, notFoundProperties)));
                }).ToList();

                if (!relevantEvents.Any() && !relevantReadModels.Any())
                {
                    continue;
                }

                SetDomainEventLocation(MicrowaveServiceNode.Create(service.ServiceEndPoint,
                                                                   relevantEvents,
                                                                   relevantReadModels));

                UnresolvedEventSubscriptions    = UnresolvedEventSubscriptions.Except(relevantEvents);
                UnresolvedReadModeSubscriptions = UnresolvedReadModeSubscriptions.Except(relevantReadModels);
            }
        }
Beispiel #7
0
 public EventLocationFake() : base(new List <MicrowaveServiceNode>
 {
     MicrowaveServiceNode.Create(new ServiceEndPoint(new Uri("http://luls.de/")),
                                 new List <EventSchema>
     {
         new EventSchema(nameof(Ev1))
     }, new List <ReadModelSubscription>()),
     MicrowaveServiceNode.Create(new ServiceEndPoint(new Uri("http://troll.de/")),
                                 new List <EventSchema>
     {
         new EventSchema(nameof(Ev2))
     }, new List <ReadModelSubscription>()),
     MicrowaveServiceNode.Create(new ServiceEndPoint(new Uri("http://troll2.de/")),
                                 new List <EventSchema>(),
                                 new List <ReadModelSubscription>
     {
         new ReadModelSubscription(nameof(IdQuery), new EventSchema(nameof(Ev2)))
     })
 }, new List <EventSchema>(), new List <ReadModelSubscription>())
 {
 }
Beispiel #8
0
        public async Task GetServiceDependencies()
        {
            var serviceNodeWithDependentServicesDto = MicrowaveServiceNode.ReachableMicrowaveServiceNode(new ServiceEndPoint(null, "ServiceName"),
                                                                                                         new List <ServiceEndPoint>
            {
                new ServiceEndPoint(new Uri("http://remoteservice1.de"), "RemoteName1"),
                new ServiceEndPoint(new Uri("http://remoteservice2.de"), "RemoteName2"),
            });

            var mockHttp        = new MockHttpMessageHandler();
            var serializeObject = JsonConvert.SerializeObject(serviceNodeWithDependentServicesDto);

            mockHttp.When("http://localhost:5000/Dicovery/ServiceDependencies")
            .Respond("application/json", serializeObject);

            var client = new HttpClient(mockHttp);

            client.BaseAddress = new Uri("http://localhost:5000/");

            var mock = new Mock <IDiscoveryClientFactory>();

            mock.Setup(m => m.GetClient(It.IsAny <Uri>())).ReturnsAsync(client);
            var serviceDiscoveryRepository = new DiscoveryRepository(mock.Object, new MicrowaveLogger <DiscoveryRepository>());
            var serviceAddress             = new Uri("http://localhost:5000/");

            var serviceNode = await serviceDiscoveryRepository.GetDependantServices(serviceAddress);

            var dependantServices = serviceNode.ConnectedServices.ToList();

            Assert.AreEqual(2, dependantServices.Count);
            Assert.AreEqual("ServiceName", serviceNode.ServiceEndPoint.Name);
            Assert.AreEqual(new Uri("http://localhost:5000/"), serviceNode.ServiceEndPoint.ServiceBaseAddress);
            Assert.AreEqual("RemoteName1", dependantServices[0].Name);
            Assert.AreEqual("RemoteName2", dependantServices[1].Name);
            Assert.AreEqual(new Uri("http://remoteservice1.de"), dependantServices[0].ServiceBaseAddress);
            Assert.AreEqual(new Uri("http://remoteservice2.de"), dependantServices[1].ServiceBaseAddress);
        }
        public async Task SaveAndLoadServiceMap(PersistenceLayerProvider layerProvider)
        {
            var statusRepository = layerProvider.StatusRepository;

            var map = new ServiceMap(new List <MicrowaveServiceNode>
            {
                MicrowaveServiceNode.ReachableMicrowaveServiceNode(new ServiceEndPoint(new Uri("http://123.de"), "Name"),
                                                                   new List <ServiceEndPoint>
                {
                    new ServiceEndPoint(new Uri("http://www.uri1.de"), "Name")
                }),
                MicrowaveServiceNode.ReachableMicrowaveServiceNode(new ServiceEndPoint(new Uri("http://123.de"), "Name2"),
                                                                   new List <ServiceEndPoint>
                {
                    new ServiceEndPoint(new Uri("http://www.uri2.de"), "Name2"),
                    new ServiceEndPoint(new Uri("http://www.uri1.de"), "Name")
                }),
                MicrowaveServiceNode.UnreachableMicrowaveServiceNode(new ServiceEndPoint(new Uri("http://123.de")),
                                                                     new List <ServiceEndPoint>())
            });
            await statusRepository.SaveServiceMap(map);

            var mapLoaded = await statusRepository.GetServiceMap();

            var serviceDependenciesDtos = mapLoaded.AllServices.ToList();

            Assert.AreEqual("Name", serviceDependenciesDtos[0].ServiceEndPoint.Name);
            Assert.AreEqual("Name2", serviceDependenciesDtos[1].ServiceEndPoint.Name);
            Assert.IsTrue(serviceDependenciesDtos[1].IsReachable);
            Assert.IsFalse(serviceDependenciesDtos[2].IsReachable);
            Assert.AreEqual(new Uri("http://www.uri1.de"), serviceDependenciesDtos[0].ConnectedServices.First().ServiceBaseAddress);
            Assert.AreEqual(new Uri("http://www.uri2.de"), serviceDependenciesDtos[1].ConnectedServices.First().ServiceBaseAddress);
            Assert.AreEqual(new Uri("http://www.uri1.de"), serviceDependenciesDtos[1].ConnectedServices.Skip(1).First().ServiceBaseAddress);
            Assert.AreEqual("Name", serviceDependenciesDtos[0].ConnectedServices.First().Name);
            Assert.AreEqual("Name2", serviceDependenciesDtos[1].ConnectedServices.First().Name);
            Assert.AreEqual("Name", serviceDependenciesDtos[1].ConnectedServices.Skip(1).First().Name);
        }
Beispiel #10
0
        public async Task <EventLocation> GetEventLocation()
        {
            if (_cache.HasValue)
            {
                return(_cache.GetValue());
            }
            var mongoCollection = _database.GetCollection <EventLocationDbo>(StatusDbName);
            var location        = await mongoCollection.FindSync(e => e.Id == nameof(EventLocation)).SingleOrDefaultAsync();

            return(location == null?EventLocation.Default() : new EventLocation(location.Services.Select(s =>
                                                                                                         MicrowaveServiceNode.Create(s.ServiceEndPoint, s.SubscribedEvents, s.ReadModels)), location
                                                                                .UnresolvedEventSubscriptions, location.UnresolvedReadModeSubscriptions));
        }