/// <inheritdoc/> public async Task <EndpointInfoListModel> QueryEndpointsAsync( EndpointRegistrationQueryModel query, bool onlyServerState, int?pageSize, CancellationToken ct) { var result = await _client.QueryEndpointsAsync(query.ToApiModel(), onlyServerState, pageSize, ct); return(result.ToServiceModel()); }
/// <inheritdoc/> public async Task <EndpointInfoListModel> QueryEndpointsAsync( EndpointRegistrationQueryModel query, bool onlyServerState, int?pageSize) { var result = await _client.QueryEndpointsAsync( Map <EndpointRegistrationQueryApiModel>(query), onlyServerState, pageSize); return(Map <EndpointInfoListModel>(result)); }
/// <summary> /// Create from service model /// </summary> /// <param name="model"></param> public EndpointRegistrationQueryApiModel(EndpointRegistrationQueryModel model) { Url = model.Url; UserAuthentication = model.UserAuthentication; Connected = model.Connected; Activated = model.Activated; EndpointState = model.EndpointState; Certificate = model.Certificate; SecurityPolicy = model.SecurityPolicy; SecurityMode = model.SecurityMode; IncludeNotSeenSince = model.IncludeNotSeenSince; }
/// <summary> /// Find endpoints using query /// </summary> /// <param name="service"></param> /// <param name="query"></param> /// <param name="onlyServerState"></param> /// <returns></returns> public static async Task <List <EndpointInfoModel> > QueryAllEndpointsAsync( this IEndpointRegistry service, EndpointRegistrationQueryModel query, bool onlyServerState = false) { var registrations = new List <EndpointInfoModel>(); var result = await service.QueryEndpointsAsync(query, onlyServerState); registrations.AddRange(result.Items); while (result.ContinuationToken != null) { result = await service.ListEndpointsAsync(result.ContinuationToken, onlyServerState); registrations.AddRange(result.Items); } return(registrations); }
/// <inheritdoc/> public async Task <EndpointInfoListModel> QueryEndpointsAsync( EndpointRegistrationQueryModel model, bool onlyServerState, int?pageSize, CancellationToken ct) { var query = "SELECT * FROM devices WHERE " + $"tags.{nameof(EntityRegistration.DeviceType)} = '{IdentityType.Endpoint}' "; if (!(model?.IncludeNotSeenSince ?? false)) { // Scope to non deleted twins query += $"AND NOT IS_DEFINED(tags.{nameof(EntityRegistration.NotSeenSince)}) "; } if (model?.Url != null) { // If Url provided, include it in search query += $"AND tags.{nameof(EndpointRegistration.EndpointUrlLC)} = " + $"'{model.Url.ToLowerInvariant()}' "; } if (model?.ApplicationId != null) { // If application id provided, include it in search query += $"AND tags.{nameof(EndpointRegistration.ApplicationId)} = " + $"'{model.ApplicationId}' "; } if (model?.SupervisorId != null) { // If supervisor provided, include it in search query += $"AND tags.{nameof(EndpointRegistration.SupervisorId)} = " + $"'{model.SupervisorId}' "; } if (model?.DiscovererId != null) { // If discoverer provided, include it in search query += $"AND tags.{nameof(EndpointRegistration.DiscovererId)} = " + $"'{model.DiscovererId}' "; } if (model?.SiteOrGatewayId != null) { // If site or gateway provided, include it in search query += $"AND tags.{nameof(EntityRegistration.SiteOrGatewayId)} = " + $"'{model.SiteOrGatewayId}' "; } if (model?.Certificate != null) { // If cert thumbprint provided, include it in search query += $"AND tags.{nameof(EndpointRegistration.Thumbprint)} = " + $"{model.Certificate} "; } if (model?.SecurityMode != null) { // If SecurityMode provided, include it in search query += $"AND properties.desired.{nameof(EndpointRegistration.SecurityMode)} = " + $"'{model.SecurityMode}' "; } if (model?.SecurityPolicy != null) { // If SecurityPolicy uri provided, include it in search query += $"AND properties.desired.{nameof(EndpointRegistration.SecurityPolicy)} = " + $"'{model.SecurityPolicy}' "; } if (model?.EndpointState != null && model?.Connected != false && model?.Activated != false) { query += $"AND properties.reported.{nameof(EndpointRegistration.State)} = " + $"'{model.EndpointState}' "; // Force query for activated and connected model.Connected = true; model.Activated = true; } if (model?.Activated != null) { // If flag provided, include it in search if (model.Activated.Value) { query += $"AND tags.{nameof(EndpointRegistration.Activated)} = true "; } else { query += $"AND (tags.{nameof(EndpointRegistration.Activated)} != true " + $"OR NOT IS_DEFINED(tags.{nameof(EndpointRegistration.Activated)})) "; } } if (model?.Connected != null) { // If flag provided, include it in search if (model.Connected.Value) { query += $"AND connectionState = 'Connected' "; } else { query += $"AND connectionState != 'Connected' "; } } var result = await _iothub.QueryDeviceTwinsAsync(query, null, pageSize, ct); return(new EndpointInfoListModel { ContinuationToken = result.ContinuationToken, Items = result.Items .Select(t => t.ToEndpointRegistration(onlyServerState)) .Select(s => s.ToServiceModel()) .ToList() }); }
/// <inheritdoc/> public Task <EndpointInfoListModel> QueryEndpointsAsync(EndpointRegistrationQueryModel query, bool onlyServerState, int?pageSize, CancellationToken ct) { return(Task.FromResult(new EndpointInfoListModel())); }
/// <inheritdoc/> public async Task <EndpointInfoListModel> QueryEndpointsAsync( EndpointRegistrationQueryModel model, bool onlyServerState, int?pageSize, CancellationToken ct) { var query = "SELECT * FROM devices WHERE " + $"tags.{nameof(EndpointRegistration.DeviceType)} = 'Endpoint' "; if (!(model?.IncludeNotSeenSince ?? false)) { // Scope to non deleted twins query += $"AND NOT IS_DEFINED(tags.{nameof(BaseRegistration.NotSeenSince)}) "; } if (model?.Url != null) { // If Url provided, include it in search query += $"AND tags.{nameof(EndpointRegistration.EndpointUrlLC)} = " + $"'{model.Url.ToLowerInvariant()}' "; } if (model?.Certificate != null) { // If cert provided, include it in search query += $"AND tags.{nameof(BaseRegistration.Thumbprint)} = " + $"{model.Certificate.ToSha1Hash()} "; } if (model?.SecurityMode != null) { // If SecurityMode provided, include it in search query += $"AND properties.desired.{nameof(EndpointRegistration.SecurityMode)} = " + $"'{model.SecurityMode}' "; } if (model?.SecurityPolicy != null) { // If SecurityPolicy uri provided, include it in search query += $"AND properties.desired.{nameof(EndpointRegistration.SecurityPolicy)} = " + $"'{model.SecurityPolicy}' "; } if (model?.UserAuthentication != null) { // If TokenType provided, include it in search if (model.UserAuthentication.Value != CredentialType.None) { query += $"AND properties.desired.{nameof(EndpointRegistration.CredentialType)} = " + $"'{model.UserAuthentication}' "; } else { query += $"AND (properties.desired.{nameof(EndpointRegistration.CredentialType)} = " + $"'{model.UserAuthentication}' " + $"OR NOT IS_DEFINED(tags.{nameof(EndpointRegistration.CredentialType)})) "; } } if (model?.Connected != null) { // If flag provided, include it in search if (model.Connected.Value) { query += $"AND connectionState = 'Connected' "; // Do not use connected property as module might have exited before updating. } else { query += $"AND (connectionState = 'Disconnected' " + $"OR properties.reported.{TwinProperty.kConnected} != true) "; } } if (model?.Activated != null) { // If flag provided, include it in search if (model.Activated.Value) { query += $"AND tags.{nameof(EndpointRegistration.Activated)} = true "; } else { query += $"AND (tags.{nameof(EndpointRegistration.Activated)} != true " + $"OR NOT IS_DEFINED(tags.{nameof(EndpointRegistration.Activated)})) "; } } if (model?.EndpointState != null) { query += $"AND properties.reported.{nameof(EndpointRegistration.State)} = " + $"'{model.EndpointState}' "; } var result = await _iothub.QueryDeviceTwinsAsync(query, null, pageSize, ct); return(new EndpointInfoListModel { ContinuationToken = result.ContinuationToken, Items = result.Items .Select(t => t.ToEndpointRegistration(onlyServerState)) .Select(s => s.ToServiceModel()) .ToList() }); }
public Task <EndpointInfoListModel> QueryEndpointsAsync(EndpointRegistrationQueryModel query, bool onlyServerState = false, int?pageSize = null, CancellationToken ct = default) { throw new NotImplementedException(); }