Beispiel #1
0
        /// <summary>
        /// Describes a Cadence domain by UUID.
        /// </summary>
        /// <param name="uuid">The domain ID.</param>
        /// <returns>The <see cref="DomainDescription"/>.</returns>
        public async Task <DomainDescription> DescribeDomainByIdAsync(string uuid)
        {
            await SyncContext.Clear;

            Covenant.Requires <ArgumentNullException>(!string.IsNullOrEmpty(uuid), nameof(uuid));
            EnsureNotDisposed();

            var domainDescribeRequest =
                new DomainDescribeRequest()
            {
                Uuid = uuid,
            };

            var reply = (DomainDescribeReply) await CallProxyAsync(domainDescribeRequest);

            reply.ThrowOnError();

            return(new DomainDescription()
            {
                DomainInfo = new DomainInfo()
                {
                    Description = reply.DomainInfoDescription,
                    Name = reply.DomainInfoName,
                    OwnerEmail = reply.DomainInfoOwnerEmail,
                    Status = reply.DomainInfoStatus
                },

                Configuration = new DomainConfiguration()
                {
                    EmitMetrics = reply.ConfigurationEmitMetrics,
                    RetentionDays = reply.ConfigurationRetentionDays
                },
            });
        }
        /// <summary>
        /// Describes the named Cadence domain.
        /// </summary>
        /// <param name="name">The domain name.</param>
        /// <returns>The <see cref="DomainDescription"/>.</returns>
        /// <exception cref="CadenceEntityNotExistsException">Thrown if the named domain does not exist.</exception>
        /// <exception cref="CadenceBadRequestException">Thrown when the request is invalid.</exception>
        /// <exception cref="CadenceInternalServiceException">Thrown for internal Cadence cluster problems.</exception>
        /// <exception cref="CadenceServiceBusyException">Thrown when Cadence is too busy.</exception>
        public async Task <DomainDescription> DescribeDomainAsync(string name)
        {
            Covenant.Requires <ArgumentNullException>(!string.IsNullOrEmpty(name));

            var domainDescribeRequest =
                new DomainDescribeRequest()
            {
                Name = name,
            };

            var reply = (DomainDescribeReply) await CallProxyAsync(domainDescribeRequest);

            reply.ThrowOnError();

            return(new DomainDescription()
            {
                DomainInfo = new DomainInfo()
                {
                    Description = reply.DomainInfoDescription,
                    Name = reply.DomainInfoName,
                    OwnerEmail = reply.DomainInfoOwnerEmail,
                    Status = reply.DomainInfoStatus
                },

                Configuration = new DomainOptions()
                {
                    EmitMetrics = reply.ConfigurationEmitMetrics,
                    RetentionDays = reply.ConfigurationRetentionDays
                },
            });
        }
Beispiel #3
0
        /// <summary>
        /// Handles emulated <see cref="DomainDescribeRequest"/> messages.
        /// </summary>
        /// <param name="request">The received message.</param>
        /// <returns>The tracking <see cref="Task"/>.</returns>
        private async Task OnEmulatedDomainDescribeRequestAsync(DomainDescribeRequest request)
        {
            var reply  = new DomainDescribeReply();
            var domain = (EmulatedCadenceDomain)null;

            if (string.IsNullOrEmpty(request.Name))
            {
                reply.Error = new CadenceEntityNotExistsException("Invalid name.").ToCadenceError();

                await EmulatedLibraryClient.SendReplyAsync(request, reply);

                return;
            }

            using (await emulationMutex.AcquireAsync())
            {
                if (!emulatedDomains.TryGetValue(request.Name, out domain))
                {
                    domain = null;
                }
            }

            if (domain == null)
            {
                reply.Error = new CadenceEntityNotExistsException($"Domain [name={request.Name}] does not exist.").ToCadenceError();
            }
            else
            {
                reply.DomainInfoName             = domain.Name;
                reply.DomainInfoOwnerEmail       = domain.OwnerEmail;
                reply.DomainInfoStatus           = domain.Status;
                reply.DomainInfoDescription      = domain.Description;
                reply.ConfigurationEmitMetrics   = domain.EmitMetrics;
                reply.ConfigurationRetentionDays = domain.RetentionDays;
            }

            await EmulatedLibraryClient.SendReplyAsync(request, reply);
        }