/// <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); }
/// <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); }