/// <inheritdoc/>
        public async Task <SupervisorListModel> QuerySupervisorsAsync(
            SupervisorQueryModel query, bool onlyServerState, int?pageSize,
            CancellationToken ct)
        {
            var result = await _client.QuerySupervisorsAsync(query.ToApiModel(),
                                                             onlyServerState, pageSize, ct);

            return(result.ToServiceModel());
        }
        /// <inheritdoc/>
        public async Task <SupervisorListModel> QuerySupervisorsAsync(
            SupervisorQueryModel query, bool onlyServerState, int?pageSize)
        {
            var result = await _client.QuerySupervisorsAsync(
                Map <SupervisorQueryApiModel>(query),
                onlyServerState, pageSize);

            return(Map <SupervisorListModel>(result));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Query all supervisors
        /// </summary>
        /// <param name="service"></param>
        /// <param name="query"></param>
        /// <param name="onlyServerState"></param>
        /// <param name="ct"></param>
        /// <returns></returns>
        public static async Task <List <SupervisorModel> > QueryAllSupervisorsAsync(
            this ISupervisorRegistry service, SupervisorQueryModel query,
            bool onlyServerState = false, CancellationToken ct = default)
        {
            var supervisors = new List <SupervisorModel>();
            var result      = await service.QuerySupervisorsAsync(query, onlyServerState, null, ct);

            supervisors.AddRange(result.Items);
            while (result.ContinuationToken != null)
            {
                result = await service.ListSupervisorsAsync(result.ContinuationToken,
                                                            onlyServerState, null, ct);

                supervisors.AddRange(result.Items);
            }
            return(supervisors);
        }
        /// <inheritdoc/>
        public async Task <SupervisorListModel> QuerySupervisorsAsync(
            SupervisorQueryModel model, bool onlyServerState, int?pageSize, CancellationToken ct)
        {
            var query = "SELECT * FROM devices.modules WHERE " +
                        $"properties.reported.{TwinProperty.Type} = '{IdentityType.Supervisor}'";

            if (model?.SiteId != null)
            {
                // If site id provided, include it in search
                query += $"AND (properties.reported.{TwinProperty.SiteId} = " +
                         $"'{model.SiteId}' OR properties.desired.{TwinProperty.SiteId} = " +
                         $"'{model.SiteId}' OR deviceId = '{model.SiteId}') ";
            }

            if (EndpointInfoModelEx.IsEndpointId(model?.EndpointId))
            {
                // If endpoint id provided include in search
                query += $"AND IS_DEFINED(properties.desired.{model.EndpointId}) ";
            }

            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.Connected} != true) ";
                }
            }

            var queryResult = await _iothub.QueryDeviceTwinsAsync(query, null, pageSize, ct);

            return(new SupervisorListModel {
                ContinuationToken = queryResult.ContinuationToken,
                Items = queryResult.Items
                        .Select(t => t.ToSupervisorRegistration(onlyServerState))
                        .Select(s => s.ToServiceModel())
                        .ToList()
            });
        }
 /// <summary>
 /// Create from service model
 /// </summary>
 /// <param name="model"></param>
 public SupervisorQueryApiModel(SupervisorQueryModel model)
 {
     SiteId    = model.SiteId;
     Discovery = model.Discovery;
     Connected = model.Connected;
 }