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