Exemple #1
0
        /// <summary>
        /// Gets active consumers of channel
        /// </summary>
        public async Task GetChannelConsumers(MqClient client, TmqMessage message)
        {
            if (_server.AdminAuthorization == null)
            {
                if (message.ResponseRequired)
                {
                    await client.SendAsync(MessageBuilder.ResponseStatus(message, KnownContentTypes.Unauthorized));
                }

                return;
            }

            Channel channel = _server.FindChannel(message.Target);

            //if auto creation active, try to create channel
            if (channel == null && _server.Options.AutoChannelCreation)
            {
                channel = _server.FindOrCreateChannel(message.Target);
            }

            if (channel == null)
            {
                if (message.ResponseRequired)
                {
                    await client.SendAsync(MessageBuilder.ResponseStatus(message, KnownContentTypes.NotFound));
                }

                return;
            }

            bool grant = await _server.AdminAuthorization.CanReceiveChannelConsumers(client, channel);

            if (!grant)
            {
                if (message.ResponseRequired)
                {
                    await client.SendAsync(MessageBuilder.ResponseStatus(message, KnownContentTypes.Unauthorized));
                }

                return;
            }

            List <ClientInformation> list = new List <ClientInformation>();

            foreach (ChannelClient cc in channel.ClientsClone)
            {
                list.Add(new ClientInformation
                {
                    Id              = cc.Client.UniqueId,
                    Name            = cc.Client.Name,
                    Type            = cc.Client.Type,
                    IsAuthenticated = cc.Client.IsAuthenticated,
                    Online          = cc.JoinDate.LifetimeMilliseconds(),
                });
            }

            TmqMessage response = message.CreateResponse();

            message.ContentType = KnownContentTypes.ChannelConsumers;
            await response.SetJsonContent(list);

            await client.SendAsync(response);
        }
Exemple #2
0
        /// <summary>
        /// Finds all queues in channel
        /// </summary>
        private async Task GetQueueList(MqClient client, TmqMessage message)
        {
            if (_server.AdminAuthorization == null)
            {
                if (message.ResponseRequired)
                {
                    await client.SendAsync(MessageBuilder.ResponseStatus(message, KnownContentTypes.Unauthorized));
                }

                return;
            }

            Channel channel = _server.FindChannel(message.Target);

            if (channel == null)
            {
                await client.SendAsync(MessageBuilder.ResponseStatus(message, KnownContentTypes.NotFound));

                return;
            }

            bool grant = await _server.AdminAuthorization.CanReceiveChannelQueues(client, channel);

            if (!grant)
            {
                if (message.ResponseRequired)
                {
                    await client.SendAsync(MessageBuilder.ResponseStatus(message, KnownContentTypes.Unauthorized));
                }

                return;
            }

            List <QueueInformation> list = new List <QueueInformation>();

            foreach (ChannelQueue queue in channel.QueuesClone)
            {
                if (queue == null)
                {
                    continue;
                }

                list.Add(new QueueInformation
                {
                    Channel = channel.Name,
                    Id      = queue.Id,
                    Status  = queue.Status.ToString().ToLower(),
                    InQueueHighPriorityMessages = queue.HighPriorityLinkedList.Count,
                    InQueueRegularMessages      = queue.RegularLinkedList.Count,
                    OnlyFirstAcquirer           = channel.Options.SendOnlyFirstAcquirer,
                    RequestAcknowledge          = channel.Options.RequestAcknowledge,
                    AcknowledgeTimeout          = Convert.ToInt32(channel.Options.AcknowledgeTimeout.TotalMilliseconds),
                    MessageTimeout      = Convert.ToInt32(channel.Options.MessageTimeout.TotalMilliseconds),
                    WaitForAcknowledge  = channel.Options.WaitForAcknowledge,
                    HideClientNames     = channel.Options.HideClientNames,
                    ReceivedMessages    = queue.Info.ReceivedMessages,
                    SentMessages        = queue.Info.SentMessages,
                    Deliveries          = queue.Info.Deliveries,
                    Unacknowledges      = queue.Info.Unacknowledges,
                    Acknowledges        = queue.Info.Acknowledges,
                    TimeoutMessages     = queue.Info.TimedOutMessages,
                    SavedMessages       = queue.Info.MessageSaved,
                    RemovedMessages     = queue.Info.MessageRemoved,
                    Errors              = queue.Info.ErrorCount,
                    LastMessageReceived = queue.Info.GetLastMessageReceiveUnix(),
                    LastMessageSent     = queue.Info.GetLastMessageSendUnix(),
                    MessageLimit        = queue.Options.MessageLimit,
                    MessageSizeLimit    = queue.Options.MessageSizeLimit
                });
            }

            TmqMessage response = message.CreateResponse();

            message.ContentType = KnownContentTypes.QueueList;
            await response.SetJsonContent(list);

            await client.SendAsync(response);
        }
        /// <summary>
        /// Gets connected instance list
        /// </summary>
        private async Task GetInstanceList(MqClient client, TmqMessage message)
        {
            if (_server.AdminAuthorization == null)
            {
                if (message.ResponseRequired)
                {
                    await client.SendAsync(MessageBuilder.ResponseStatus(message, KnownContentTypes.Unauthorized));
                }

                return;
            }

            bool grant = await _server.AdminAuthorization.CanManageInstances(client, message);

            if (!grant)
            {
                if (message.ResponseRequired)
                {
                    await client.SendAsync(MessageBuilder.ResponseStatus(message, KnownContentTypes.Unauthorized));
                }

                return;
            }

            List <InstanceInformation> list = new List <InstanceInformation>();

            //slave instances
            List <SlaveInstance> slaves = _server.SlaveInstances.GetAsClone();

            foreach (SlaveInstance slave in slaves)
            {
                list.Add(new InstanceInformation
                {
                    IsSlave     = true,
                    Host        = slave.RemoteHost,
                    IsConnected = slave.Client.IsConnected,
                    Id          = slave.Client.UniqueId,
                    Name        = slave.Client.Name,
                    Lifetime    = slave.ConnectedDate.LifetimeMilliseconds()
                });
            }

            //master instances
            foreach (TmqStickyConnector connector in _server.InstanceConnectors)
            {
                InstanceOptions options = connector.Tag as InstanceOptions;
                TmqClient       c       = connector.GetClient();

                list.Add(new InstanceInformation
                {
                    IsSlave     = false,
                    Host        = options?.Host,
                    IsConnected = connector.IsConnected,
                    Id          = c.ClientId,
                    Name        = options?.Name,
                    Lifetime    = Convert.ToInt64(connector.Lifetime.TotalMilliseconds)
                });
            }

            TmqMessage response = message.CreateResponse();

            message.ContentType = KnownContentTypes.InstanceList;
            await response.SetJsonContent(list);

            await client.SendAsync(response);
        }