public void Should_notice_queue_level()
        {
            var brokerModel = new Broker {
                Id        = 101,
                Url       = "http://mybroker/",
                Active    = true,
                ContactOK = true
            };

            var brokerStatus = new Messages.BrokerStatus {
                BrokerId     = 101,
                Url          = "http://mybroker/",
                IsResponding = true
            };

            brokerModel.VHosts.Add(new VHost {
                Id   = 666,
                Name = "/"
            });
            brokerModel.VHosts [0].Queues.Add(new Queue {
                Id   = 898,
                Name = "My.Queue"
            });
            brokerStatus.VHosts.Add(new QueueSpy.Messages.VHost {
                Name = "/"
            });
            brokerStatus.VHosts [0].Queues.Add(new QueueSpy.Messages.Queue {
                Name = "My.Queue"
            });

            analyser.VisitUnchanged(brokerModel, brokerStatus, context);

            context.Bus.AssertWasCalled(x => x.Send(Arg <string> .Is.Anything, Arg <Messages.QueueLevel> .Is.Anything));
        }
        public void Should_notice_delted_queue()
        {
            var brokerModel = new Broker {
                Id        = 101,
                Url       = "http://mybroker/",
                Active    = true,
                ContactOK = true
            };

            var brokerStatus = new Messages.BrokerStatus {
                BrokerId     = 101,
                Url          = "http://mybroker/",
                IsResponding = true
            };

            brokerModel.VHosts.Add(new VHost {
                Id   = 666,
                Name = "/"
            });
            brokerStatus.VHosts.Add(new QueueSpy.Messages.VHost {
                Name = "/"
            });
            brokerModel.VHosts [0].Queues.Add(new Queue {
                Id   = 898,
                Name = "My.Queue"
            });

            analyser.VisitUnchanged(brokerModel, brokerStatus, context);
            Assert.AreEqual(EventType.QueueDeleted, brokerEventMessages [0]);
        }
        public void Should_notice_lost_connection()
        {
            var brokerModel = new Broker {
                Id        = 101,
                Url       = "http://mybroker/",
                Active    = true,
                ContactOK = true
            };

            var brokerStatus = new Messages.BrokerStatus {
                BrokerId     = 101,
                Url          = "http://mybroker/",
                IsResponding = true
            };

            brokerModel.VHosts.Add(new VHost {
                Id   = 666,
                Name = "/"
            });
            brokerStatus.VHosts.Add(new QueueSpy.Messages.VHost {
                Name = "/"
            });
            brokerModel.VHosts [0].Connections.Add(new Connection {
                Id   = 1024,
                Name = "my_connection"
            });

            analyser.VisitUnchanged(brokerModel, brokerStatus, context);
            Assert.AreEqual(EventType.ConnectionLost, brokerEventMessages [0]);
        }
Example #4
0
        public void OnTimer(object state)
        {
            var brokers = dbReader.Get <Broker> ("Active = TRUE");

            foreach (var broker in brokers)
            {
                logger.Log("Querying broker: {0}", broker.Url);

                var status = new Messages.BrokerStatus {
                    BrokerId     = broker.Id,
                    UserId       = broker.UserId,
                    Url          = broker.Url,
                    SampledAtUtc = DateTime.UtcNow
                };

                try {
                    var part   = BuildBrokerUrl(broker.Url);
                    var client = new ManagementClient(part.HostPart, broker.Username, broker.Password, part.Port, true);

                    try {
                        var overview = client.GetOverview();
                        status.IsResponding    = true;
                        status.RabbitMQVersion = overview.ManagementVersion;

                        var connections = client.GetConnections();
                        var channels    = client.GetChannels();

                        foreach (var connection in connections)
                        {
                            var connectionMessage = new Messages.Connection {
                                Name = connection.Name
                            };
                            foreach (var property in connection.ClientProperties.PropertiesDictionary)
                            {
                                connectionMessage.ClientProperties.Add(new Messages.ClientProperty {
                                    Key   = property.Key,
                                    Value = property.Value.ToString()
                                });
                            }
                            AddConsumersToConnection(client, channels, connectionMessage);
                            status.GetOrCreateVHost(connection.Vhost).Connections.Add(connectionMessage);
                        }

                        AddQueuesToBroker(client, status);
                    } catch (Exception e) {
                        logger.Log("Exception in Harvester: {0}", e);
                        status.IsResponding = false;
                        status.ErrorMessage = string.Format("{0}: {1}", e.GetType().Name, e.Message);
                    }
                } catch (UrlParseException ex) {
                    logger.Log("UrlParseException in Harvester: {0}", ex);
                    status.IsResponding = false;
                    status.ErrorMessage = string.Format("{0}", ex.Message);
                }

                bus.Publish(status);
            }
        }
        public void Should_notice_broker_contact_lost()
        {
            var brokerModel = new Broker {
                Id        = 101,
                Url       = "http://mybroker/",
                Active    = true,
                ContactOK = true
            };

            var brokerStatus = new Messages.BrokerStatus {
                BrokerId     = 101,
                Url          = "http://mybroker/",
                IsResponding = false
            };

            analyser.VisitUnchanged(brokerModel, brokerStatus, context);
            Assert.AreEqual(EventType.BrokerContactLost, brokerEventMessages [0]);
        }
        public void Should_notice_new_VHost()
        {
            var brokerModel = new Broker {
                Id        = 101,
                Url       = "http://mybroker/",
                Active    = true,
                ContactOK = true
            };

            var brokerStatus = new Messages.BrokerStatus {
                BrokerId     = 101,
                Url          = "http://mybroker/",
                IsResponding = true
            };

            brokerStatus.VHosts.Add(new Messages.VHost {
                Name = "/"
            });

            analyser.VisitUnchanged(brokerModel, brokerStatus, context);
            Assert.AreEqual(EventType.VHostCreated, brokerEventMessages [0]);
        }