/// <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));
        }
示例#3
0
 /// <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);
        }
示例#5
0
        /// <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()));
 }
示例#7
0
        /// <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()
            });
        }
示例#8
0
 public Task <EndpointInfoListModel> QueryEndpointsAsync(EndpointRegistrationQueryModel query, bool onlyServerState = false, int?pageSize = null, CancellationToken ct = default)
 {
     throw new NotImplementedException();
 }