public static async Task <IDictionary <ActorId, ActorInformation> > GetFromAllActors <TActorType>(IPartitionEnumerationManager partitionEnumerationManager, IActorProxyFactory actorProxyFactory,
                                                                                                          Uri serviceUri, CancellationToken cancellationToken = default(CancellationToken), int maxResults = 100)
            where TActorType : IActor
        {
            var servicePartitionKeysAsync = await ServiceContextExtensions.GetServicePartitionKeysAsync(partitionEnumerationManager, serviceUri);

            var result  = new Dictionary <ActorId, ActorInformation>();
            var results = 0;

            foreach (var partitionInformation in servicePartitionKeysAsync)
            {
                var actorServiceProxy = actorProxyFactory.CreateActorServiceProxy <IActorService>(serviceUri, partitionInformation.LowKey);

                ContinuationToken continuationToken = null;
                do
                {
                    var page = await actorServiceProxy.GetActorsAsync(continuationToken, cancellationToken);

                    foreach (var actor in page.Items)
                    {
                        result.Add(actor.ActorId, actor);
                        results++;
                    }
                    if (results >= maxResults)
                    {
                        return(result);
                    }
                    continuationToken = page.ContinuationToken;
                }while (continuationToken != null);
            }
            return(result);
        }
 /// <summary>
 /// Convert a base64 string to a continuation token.
 /// </summary>
 /// <param name="query">The <see cref="IContinuationQuery"/> to use.</param>
 /// <returns>A <see cref="LimitOffsetContinuationToken"/>.</returns>
 public static LimitOffsetContinuationToken FromContinuationQuery(IContinuationQuery query)
 {
     return(ContinuationToken.FromContinuationToken <LimitOffsetContinuationToken>(query.ContinuationToken)
            ?? new LimitOffsetContinuationToken {
         Limit = query.Limit
     });
 }
 /// <summary>
 /// Get the next page token.
 /// </summary>
 /// <returns>A bse64 encoded next page token.</returns>
 public string GetNextPageContinuationToken()
 {
     return(ContinuationToken.ToContinuationToken(
                new LimitOffsetContinuationToken {
         Offset = Offset + Limit, Limit = Limit
     }));
 }
        /// <inheritdoc />
        public Task <PagedData <BackupEntity> > GetAllEntitiesBackedUpByPolicyAsync(
            string backupPolicyName,
            ContinuationToken continuationToken = default(ContinuationToken),
            long?maxResults    = 0,
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            backupPolicyName.ThrowIfNull(nameof(backupPolicyName));
            maxResults?.ThrowIfLessThan("maxResults", 0);
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId = Guid.NewGuid().ToString();
            var url       = "BackupRestore/BackupPolicies/{backupPolicyName}/$/GetBackupEnabledEntities";

            url = url.Replace("{backupPolicyName}", Uri.EscapeDataString(backupPolicyName));
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            maxResults?.AddToQueryParameters(queryParams, $"MaxResults={maxResults}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.2-preview");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, BackupEntityConverter.Deserialize, requestId, cancellationToken));
        }
        /// <inheritdoc />
        public Task <PagedData <BackupConfigurationInfo> > GetServiceBackupConfigurationInfoAsync(
            string serviceId,
            ContinuationToken continuationToken = default(ContinuationToken),
            long?maxResults    = 0,
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            serviceId.ThrowIfNull(nameof(serviceId));
            maxResults?.ThrowIfLessThan("maxResults", 0);
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId = Guid.NewGuid().ToString();
            var url       = "Services/{serviceId}/$/GetBackupConfigurationInfo";

            url = url.Replace("{serviceId}", serviceId);
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            maxResults?.AddToQueryParameters(queryParams, $"MaxResults={maxResults}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.2-preview");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, BackupConfigurationInfoConverter.Deserialize, requestId, cancellationToken));
        }
示例#6
0
    public override string ToString()
    {
        var  sb      = new StringBuilder("GetJoinedSquareChatsRequest(");
        bool __first = true;

        if (ContinuationToken != null && __isset.continuationToken)
        {
            if (!__first)
            {
                sb.Append(", ");
            }
            __first = false;
            sb.Append("ContinuationToken: ");
            ContinuationToken.ToString(sb);
        }
        if (__isset.limit)
        {
            if (!__first)
            {
                sb.Append(", ");
            }
            __first = false;
            sb.Append("Limit: ");
            Limit.ToString(sb);
        }
        sb.Append(")");
        return(sb.ToString());
    }
        /// <inheritdoc />
        public Task <PagedData <LoadedPartitionInformationResult> > GetLoadedPartitionInfoListAsync(
            string metricName,
            string serviceName = default(string),
            Ordering?ordering  = Ordering.Desc,
            long?maxResults    = 0,
            ContinuationToken continuationToken = default(ContinuationToken),
            CancellationToken cancellationToken = default(CancellationToken))
        {
            metricName.ThrowIfNull(nameof(metricName));
            maxResults?.ThrowIfLessThan("maxResults", 0);
            var requestId   = Guid.NewGuid().ToString();
            var url         = "$/GetLoadedPartitionInfoList";
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            metricName?.AddToQueryParameters(queryParams, $"MetricName={metricName}");
            serviceName?.AddToQueryParameters(queryParams, $"ServiceName={serviceName}");
            ordering?.AddToQueryParameters(queryParams, $"Ordering={ordering.ToString()}");
            maxResults?.AddToQueryParameters(queryParams, $"MaxResults={maxResults}");
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            queryParams.Add("api-version=8.0");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, LoadedPartitionInformationResultConverter.Deserialize, requestId, cancellationToken));
        }
示例#8
0
        static void Main(string[] args)
        {
            FabricClient         fabricClient  = new FabricClient("localhost:19000");
            ServicePartitionList partitionList = fabricClient.QueryManager.GetPartitionListAsync(new Uri("fabric:/Codit.Core.Application/DeviceActorService")).Result;

            ContinuationToken continuationToken  = null;
            var cancellationTokenSource          = new CancellationTokenSource();
            List <ActorInformation> activeActors = new List <ActorInformation>();

            foreach (var partition in partitionList)
            {
                var           key = partition.PartitionInformation as Int64RangePartitionInformation;
                IActorService actorServiceProxy = ActorServiceProxy.Create(new Uri("fabric:/Codit.Core.Application/DeviceActorService"), key.LowKey);

                do
                {
                    PagedResult <ActorInformation> page = actorServiceProxy.GetActorsAsync(continuationToken, cancellationTokenSource.Token).Result;
                    activeActors.AddRange(page.Items.Where(x => x.IsActive));
                    continuationToken = page.ContinuationToken;
                }while (continuationToken != null);
            }

            foreach (var actor in activeActors)
            {
                Console.WriteLine($"Active Actor: {actor.ActorId.ToString()}");
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadLine();
        }
        public async Task <IEnumerable <int> > GetCountsAsync(CancellationToken cancellationToken)
        {
            ContinuationToken continuationToken = null;

            var result = new List <int>();

            do
            {
                var page = await StateProvider.GetActorsAsync(10000, continuationToken, cancellationToken);

                foreach (var actorId in page.Items)
                {
                    var state = await StateProvider.LoadStateAsync <int>(
                        actorId : actorId,
                        stateName : "count",
                        cancellationToken : cancellationToken);

                    result.Add(state);
                }

                continuationToken = page.ContinuationToken;
            } while (continuationToken != null);

            return(result);
        }
        public void ItShouldThrowOnMalformedTokens()
        {
            var    malformedToken = new Faker().Random.Hash();
            Action act            = () => ContinuationToken.FromContinuationToken <DeserializedToken>(malformedToken);

            act.Should().Throw <System.ComponentModel.DataAnnotations.ValidationException>().WithMessage($"*{malformedToken}*");
        }
示例#11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="kpuIdSearchFor"></param>
        /// <returns></returns>
        public Task <IToHActor> GetActorFromKpuId(string kpuIdSearchFor)
        {
            CancellationTokenSource source            = new CancellationTokenSource();
            CancellationToken       cancellationToken = source.Token;

            int partitionKey = 0;

            IActorService actorServiceProxy = ActorServiceProxy.Create(new Uri("fabric:/CWF.Fabric.Services/ToHActorService"), 0);

            ContinuationToken       continuationToken = null;
            List <ActorInformation> activeActors      = new List <ActorInformation>();

            do
            {
                Task <PagedResult <ActorInformation> > pageTask = actorServiceProxy.GetActorsAsync(continuationToken, cancellationToken);

                PagedResult <ActorInformation> page = pageTask.Result;
                activeActors.AddRange(page.Items.Where(x => x.IsActive));

                continuationToken = page.ContinuationToken;
            }while (continuationToken != null);

            foreach (ActorInformation info in activeActors)
            {
                var           proxy = ActorProxy.Create <IToHActor>(info.ActorId, "fabric:/CWF.Fabric.Services");
                Task <string> kpuId = proxy.GetKpuId();
                var           kpuid = kpuId.Result;
                if (kpuid.CompareTo(kpuIdSearchFor) == 0)
                {
                    return(Task.FromResult <IToHActor>(proxy));
                }
            }
            return(null);
        }
示例#12
0
        /// <inheritdoc />
        public Task <PagedData <string> > GetSubNameInfoListAsync(
            string nameId,
            bool?recursive = false,
            ContinuationToken continuationToken = default(ContinuationToken),
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            nameId.ThrowIfNull(nameof(nameId));
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId = Guid.NewGuid().ToString();
            var url       = "Names/{nameId}/$/GetSubNames";

            url = url.Replace("{nameId}", nameId);
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            recursive?.AddToQueryParameters(queryParams, $"Recursive={recursive}");
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.0");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, JsonReaderExtensions.ReadValueAsString, requestId, cancellationToken));
        }
        public static async Task <IDictionary <ActorId, TResult> > GetFromAllActors <TActorType, TResult>(IPartitionEnumerationManager partitionEnumerationManager,
                                                                                                          IActorProxyFactory actorProxyFactory, Uri serviceUri, Func <TActorType, Task <KeyValuePair <ActorId, TResult> > > onEachActor, CancellationToken cancellationToken = default(CancellationToken))
            where TActorType : IActor
        {
            var servicePartitionKeysAsync = await ServiceContextExtensions.GetServicePartitionKeysAsync(partitionEnumerationManager, serviceUri);

            var activeActors = new List <ActorInformation>();

            foreach (var partitionInformation in servicePartitionKeysAsync)
            {
                var actorServiceProxy = actorProxyFactory.CreateActorServiceProxy <IActorService>(serviceUri, partitionInformation.LowKey);


                ContinuationToken continuationToken = null;
                do
                {
                    var page = await actorServiceProxy.GetActorsAsync(continuationToken, cancellationToken);

                    activeActors.AddRange(page.Items);

                    continuationToken = page.ContinuationToken;
                } while (continuationToken != null);
            }

            var tasks = activeActors.Select(activeActor => actorProxyFactory.CreateActorProxy <TActorType>(activeActor.ActorId)).Select(onEachActor).ToList();

            return((await Task.WhenAll(tasks)).ToDictionary(task => task.Key, task => task.Value));
        }
示例#14
0
        public async Task <IActionResult> GetAsync()
        {
            string serviceUri = this.serviceContext.CodePackageActivationContext.ApplicationName + "/" + this.configSettings.ActorBackendServiceName;

            ServicePartitionList partitions = await this.fabricClient.QueryManager.GetPartitionListAsync(new Uri(serviceUri));

            long count = 0;

            foreach (Partition partition in partitions)
            {
                long          partitionKey      = ((Int64RangePartitionInformation)partition.PartitionInformation).LowKey;
                IActorService actorServiceProxy = ActorServiceProxy.Create(new Uri(serviceUri), partitionKey);

                // https://docs.microsoft.com/it-it/azure/service-fabric/service-fabric-reliable-actors-enumerate
                // Gli Actors sono ranged partitioned stateful service, quindi l'enumeration è fatta per partizione.
                // Ogni partizione contiene più attori, e il risultato è un loop su un elenco di "pagine".
                ContinuationToken continuationToken = null;

                do
                {
                    PagedResult <ActorInformation> page = await actorServiceProxy.GetActorsAsync(continuationToken, CancellationToken.None);

                    count += page.Items.Where(x => x.IsActive).LongCount();

                    continuationToken = page.ContinuationToken;
                }while (continuationToken != null);
            }

            return(this.Json(new CountViewModel()
            {
                Count = count
            }));
        }
示例#15
0
        public async Task <IReadOnlyList <IPackageSearchMetadata> > GetAllPackagesAsync(CancellationToken cancellationToken)
        {
            // Go off the UI thread to perform non-UI operations
            await TaskScheduler.Default;

            ActivityCorrelationId.StartNew();

            var packages = new List <IPackageSearchMetadata>();
            ContinuationToken nextToken = null;

            do
            {
                var searchResult = await SearchAsync(nextToken, cancellationToken);

                while (searchResult.RefreshToken != null)
                {
                    searchResult = await _packageFeed.RefreshSearchAsync(searchResult.RefreshToken, cancellationToken);
                }

                nextToken = searchResult.NextToken;

                packages.AddRange(searchResult.Items);
            } while (nextToken != null);

            return(packages);
        }
示例#16
0
        /// <inheritdoc />
        public Task <PagedData <ComposeDeploymentStatusInfo> > GetComposeDeploymentStatusListAsync(
            ContinuationToken continuationToken = default(ContinuationToken),
            long?maxResults    = 0,
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            maxResults?.ThrowIfLessThan("maxResults", 0);
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId   = Guid.NewGuid().ToString();
            var url         = "ComposeDeployments";
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            maxResults?.AddToQueryParameters(queryParams, $"MaxResults={maxResults}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.0-preview");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, ComposeDeploymentStatusInfoConverter.Deserialize, requestId, cancellationToken));
        }
        /// <inheritdoc />
        public Task <ChaosEventsSegment> GetChaosEventsAsync(
            ContinuationToken continuationToken = default(ContinuationToken),
            string startTimeUtc = default(string),
            string endTimeUtc   = default(string),
            long?maxResults     = 0,
            long?serverTimeout  = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            maxResults?.ThrowIfLessThan("maxResults", 0);
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId   = Guid.NewGuid().ToString();
            var url         = "Tools/Chaos/Events";
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            startTimeUtc?.AddToQueryParameters(queryParams, $"StartTimeUtc={startTimeUtc}");
            endTimeUtc?.AddToQueryParameters(queryParams, $"EndTimeUtc={endTimeUtc}");
            maxResults?.AddToQueryParameters(queryParams, $"MaxResults={maxResults}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.2");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponse(RequestFunc, url, ChaosEventsSegmentConverter.Deserialize, requestId, cancellationToken));
        }
示例#18
0
        public async Task <IActionResult> GetAsync()
        {
            string serviceUri = this.serviceContext.CodePackageActivationContext.ApplicationName + "/" + this.configSettings.ActorBackendServiceName;

            ServicePartitionList partitions = await this.fabricClient.QueryManager.GetPartitionListAsync(new Uri(serviceUri));

            long count = 0;

            foreach (Partition partition in partitions)
            {
                long          partitionKey      = ((Int64RangePartitionInformation)partition.PartitionInformation).LowKey;
                IActorService actorServiceProxy = ActorServiceProxy.Create(new Uri(serviceUri), partitionKey);

                ContinuationToken continuationToken = null;

                do
                {
                    PagedResult <ActorInformation> page = await actorServiceProxy.GetActorsAsync(continuationToken, CancellationToken.None);

                    count += page.Items.Where(x => x.IsActive).LongCount();

                    continuationToken = page.ContinuationToken;
                }while (continuationToken != null);
            }

            return(this.Json(new { Count = count, Date = DateTime.Now }));
        }
        public async Task<SearchResult<IPackageSearchMetadata>> ContinueSearchAsync(ContinuationToken continuationToken, CancellationToken cancellationToken)
        {
            var searchToken = continuationToken as AggregatedContinuationToken;

            if (searchToken?.SourceSearchCursors == null)
            {
                throw new InvalidOperationException("Invalid token");
            }

            var searchTokens = _sourceRepositories
                .Join(searchToken.SourceSearchCursors,
                    r => r.PackageSource.Name,
                    c => c.Key,
                    (r, c) => new { Repository = r, NextToken = c.Value });

            var searchTasks = TaskCombinators.ObserveErrorsAsync(
                searchTokens,
                j => j.Repository.PackageSource.Name,
                (j, t) => j.Repository.SearchAsync(j.NextToken, PageSize, t),
                LogError,
                cancellationToken);

            return await WaitForCompletionOrBailOutAsync(
                searchToken.SearchString,
                searchTasks,
                searchToken.TelemetryState?.NextPage(),
                cancellationToken);
        }
        /// <inheritdoc />
        public Task <PagedData <ReplicaInfo> > GetReplicaInfoListAsync(
            PartitionId partitionId,
            ContinuationToken continuationToken = default(ContinuationToken),
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            partitionId.ThrowIfNull(nameof(partitionId));
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId = Guid.NewGuid().ToString();
            var url       = "Partitions/{partitionId}/$/GetReplicas";

            url = url.Replace("{partitionId}", partitionId.ToString());
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.0");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, ReplicaInfoConverter.Deserialize, requestId, cancellationToken));
        }
示例#21
0
        protected override async Task RunAsync(CancellationToken cancellationToken)
        {
            await base.RunAsync(cancellationToken);

            ContinuationToken continuationToken = null;

            try
            {
                do
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    var actors = await this.StateProvider.GetActorsAsync(MaxItemsToReturn, continuationToken, cancellationToken);

                    foreach (var actorId in actors.Items)
                    {
                        var nodeName            = actorId.GetStringId();
                        var aliveContainerValue = await this.StateProvider.LoadStateAsync <int>(actorId, nodeName);

                        containerLivenessCounter.ReportAlive(nodeName, aliveContainerValue);
                    }

                    continuationToken = actors.ContinuationToken;
                } while (continuationToken != null);
            }
            catch (FabricNotPrimaryException)
            {
                // Swallow
            }
        }
        /// <inheritdoc />
        public Task <PagedData <ApplicationTypeInfo> > GetApplicationTypeInfoListAsync(
            int?applicationTypeDefinitionKindFilter = 0,
            bool?excludeApplicationParameters       = false,
            ContinuationToken continuationToken     = default(ContinuationToken),
            long?maxResults    = 0,
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            maxResults?.ThrowIfLessThan("maxResults", 0);
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId   = Guid.NewGuid().ToString();
            var url         = "ApplicationTypes";
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            applicationTypeDefinitionKindFilter?.AddToQueryParameters(queryParams, $"ApplicationTypeDefinitionKindFilter={applicationTypeDefinitionKindFilter}");
            excludeApplicationParameters?.AddToQueryParameters(queryParams, $"ExcludeApplicationParameters={excludeApplicationParameters}");
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            maxResults?.AddToQueryParameters(queryParams, $"MaxResults={maxResults}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.0");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, ApplicationTypeInfoConverter.Deserialize, requestId, cancellationToken));
        }
示例#23
0
        public async Task <IDictionary <string, Person> > GetPersons(CancellationToken cancellationToken)
        {
            ContinuationToken continuationToken = null;
            //var actors = await this.StateProvider.GetActorsAsync(100, continuationToken, cancellationToken);

            var results    = 0;
            var maxResults = 500;
            var result     = new Dictionary <string, Person>();

            do
            {
                var page = await this.StateProvider.GetActorsAsync(100, continuationToken, cancellationToken);

                foreach (var actor in page.Items)
                {
                    var actorState = await this.StateProvider.LoadStateAsync <Person>(actor, "state", cancellationToken);

                    result.Add(actor.GetStringId(), actorState);
                    results++;
                }
                if (results >= maxResults)
                {
                    return(result);
                }
                continuationToken = page.ContinuationToken;
            } while (continuationToken != null);

            return(result);
        }
        /// <inheritdoc />
        public Task <PagedData <NodeInfo> > GetNodeInfoListAsync(
            ContinuationToken continuationToken = default(ContinuationToken),
            NodeStatusFilter?nodeStatusFilter   = NodeStatusFilter.Default,
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId   = Guid.NewGuid().ToString();
            var url         = "Nodes";
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            nodeStatusFilter?.AddToQueryParameters(queryParams, $"NodeStatusFilter={nodeStatusFilter.ToString()}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=6.0");
            url += "?" + string.Join("&", queryParams);

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method = HttpMethod.Get,
                };

                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, NodeInfoConverter.Deserialize, requestId, cancellationToken));
        }
示例#25
0
        private static async Task <TableQuerySegment <AnalysisEntity> > GetAsync(HttpRequest req, CloudTable table)
        {
            TableContinuationToken token = null;
            var tokenParam = (string)req.Query["t"];

            if (!string.IsNullOrEmpty(tokenParam))
            {
                token = ContinuationToken.Unzip(tokenParam);
            }

            var idParam = (string)req.Query["id"];

            if (string.IsNullOrEmpty(idParam))
            {
                throw new ArgumentException("id is empty");
            }

            var args    = idParam.Split('|');
            var partKey = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, args[0]);
            var rowKey  = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, args[1]);

            var query = new TableQuery <AnalysisEntity>
            {
                TakeCount    = 10,
                FilterString = TableQuery.CombineFilters(partKey, TableOperators.And, rowKey)
            };

            return(await table.ExecuteQuerySegmentedAsync(query, token));
        }
示例#26
0
        public async Task <PagedQueryResult <KeyValuePair <Key, Value>, Continuation> > Query(Range <string> partitionRange, Range <string> rowRange,
                                                                                              int?pageSize = null, Continuation continuationToken = null)
        {
            if ((pageSize ?? 1) <= 0)
            {
                throw new ArgumentOutOfRangeException(paramName: nameof(pageSize));
            }
            if ((PageSizeLimit ?? int.MaxValue) < (pageSize ?? 1))
            {
                throw new ArgumentOutOfRangeException(paramName: nameof(pageSize), message: "Too many records requested");
            }

            var filter = TableQuery.CombineFilters(
                RangeFilter(nameof(ITableEntity.RowKey), rowRange),
                TableOperators.And,
                RangeFilter(nameof(ITableEntity.PartitionKey), partitionRange));

            var query = new TableQuery <DynamicTableEntity> {
                TakeCount = pageSize,
            }.Where(filter);

            var actualToken = ContinuationToken.Deserialize(continuationToken);

            var page = await this.table.ExecuteQuerySegmentedAsync(query, actualToken).ConfigureAwait(false);

            var results = page.Results.Select(entity => new KeyValuePair <Key, Value>(
                                                  key: new Key(partition: KeyDecode(entity.PartitionKey), row: KeyDecode(entity.RowKey)),
                                                  value: ParseValue(entity)
                                                  )).ToArray();
            var serializedContinuation = ContinuationToken.Serialize(page.ContinuationToken);

            return(new PagedQueryResult <KeyValuePair <Key, Value>, Continuation>(results, serializedContinuation));
        }
    public override int GetHashCode()
    {
        int hashcode = 157;

        unchecked {
            if (__isset.squares)
            {
                hashcode = (hashcode * 397) + TCollections.GetHashCode(Squares);
            }
            if (__isset.squareStatuses)
            {
                hashcode = (hashcode * 397) + TCollections.GetHashCode(SquareStatuses);
            }
            if (__isset.myMemberships)
            {
                hashcode = (hashcode * 397) + TCollections.GetHashCode(MyMemberships);
            }
            if (__isset.continuationToken)
            {
                hashcode = (hashcode * 397) + ContinuationToken.GetHashCode();
            }
            if (__isset.noteStatuses)
            {
                hashcode = (hashcode * 397) + TCollections.GetHashCode(NoteStatuses);
            }
        }
        return(hashcode);
    }
示例#28
0
        public override Result <IEnumerable <ArdCategoryInfoDto> > GetCategories(string targetUrl, ContinuationToken continuationToken = null)
        {
            continuationToken ??= new ContinuationToken()
            {
                { _categoryLevel, 0 }
            };

            var currentLevel = continuationToken.GetValueOrDefault(_categoryLevel) as int? ?? 0;

            Log.Debug($"GetCategories current Level: {currentLevel}");

            var json          = WebClient.GetWebData <JObject>(targetUrl, proxy: WebRequest.GetSystemWebProxy());
            var categoryInfos = currentLevel switch
            {
                0 => CategoryDeserializer.ParseWidgets(json, hasSubCategories: true), // load A - Z
                1 => LoadCategoriesWithDetails(json),                                 // load e.g. Abendschau - skip level, (load infos from nextlevel) for each category load url and read synopsis
                //2 => categoryDeserializer.ParseTeasers(json), // videos...
                _ => throw new ArgumentOutOfRangeException(),
            };

            var newToken = new ContinuationToken(continuationToken);

            newToken[_categoryLevel] = currentLevel + 1;
            return(new Result <IEnumerable <ArdCategoryInfoDto> >
            {
                ContinuationToken = newToken,
                Value = categoryInfos
            });
        }
        /// <inheritdoc/>
        public override async Task <DialogTurnResult> BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default)
        {
            if (options is CancellationToken)
            {
                throw new ArgumentException($"{nameof(options)} cannot be a cancellation token");
            }

            if (Disabled != null && Disabled.GetValue(dc.State))
            {
                return(await dc.EndDialogAsync(cancellationToken : cancellationToken).ConfigureAwait(false));
            }

            if (dc.Context.Activity.ChannelId != Channels.Msteams)
            {
                throw new InvalidOperationException($"{Kind} works only on the Teams channel.");
            }

            string continuationToken = ContinuationToken.GetValueOrNull(dc.State);
            int?   pageSize          = PageSize.GetValueOrNull(dc.State);

            var result = await TeamsInfo.GetPagedMembersAsync(dc.Context, pageSize, continuationToken, cancellationToken : cancellationToken).ConfigureAwait(false);

            if (Property != null)
            {
                dc.State.SetValue(Property.GetValue(dc.State), result);
            }

            return(await dc.EndDialogAsync(result, cancellationToken : cancellationToken).ConfigureAwait(false));
        }
示例#30
0
        // NOTE: Prerequsites for running this sample:
        // 1. Create SampleTable in your SQL database:
        //      CREATE TABLE SampleTable
        //      (
        //          Id int NOT NULL,
        //          Text nvarchar(10) NULL
        //          CONSTRAINT PK_Id PRIMARY KEY(Id)
        //      )
        // 2. Provide valid endpoint, scheme, accessToken values
        // in the connection string below.
        private static async Task TableClientTestAsync()
        {
            const string connectionStringFormat = "endpoint={0};scheme={1};accesstoken={2}";

            var connectionString = string.Format(connectionStringFormat,
                                                 "Valid endpoint goes here",
                                                 "Valid scheme goes here",
                                                 "Valid accessToken goes here");

            var connection  = new Connection(connectionString);
            var tableClient = connection.CreateTableClient();

            var datasetsSegment = await tableClient.ListDataSetsAsync();

            foreach (var dataset in datasetsSegment.Items)
            {
                Console.WriteLine(dataset.DataSetName);

                var tablesSegment = await dataset.ListTablesAsync();

                foreach (var table in tablesSegment.Items)
                {
                    Console.WriteLine(table.TableName);

                    var metadata = await table.GetMetadataAsync();

                    Console.WriteLine(metadata.Schema.ToString());

                    ContinuationToken continuationToken = null;
                    do
                    {
                        var entitiesSegment = await table.ListEntitiesAsync(
                            continuationToken : continuationToken);

                        foreach (var entity in entitiesSegment.Items)
                        {
                            foreach (var kvp in entity)
                            {
                                Console.WriteLine(kvp.Key + ": " + kvp.Value);
                            }
                        }

                        continuationToken = entitiesSegment.ContinuationToken;
                    }while (continuationToken != null);

                    var newEntity = new JObject();
                    newEntity["Id"]   = 2;
                    newEntity["Text"] = "foo";

                    //await table.CreateEntityAsync(newEntity);

                    //await table.UpdateEntityAsync("2", newEntity);

                    //await table.DeleteEntityAsync("2");
                }
            }

            //var table1 = tableClient.GetDataSetReference().GetTableReference<SampleEntity>("SampleTable");
            //var entity1 = await table1.GetEntityAsync("1");
        }
		public Task<SearchResult<IPackageSearchMetadata>> ContinueSearchAsync (ContinuationToken continuationToken, CancellationToken cancellationToken)
		{
			var results =  new SearchResult<IPackageSearchMetadata> ();
			results.SourceSearchStatus = new Dictionary<string, LoadingStatus> {
				{ "Test", LoadingStatus.NoMoreItems }
			};
			return Task.FromResult (results);
		}
		public static async Task<SearchResult<IPackageSearchMetadata>> SearchAsync(
			this SourceRepository sourceRepository, ContinuationToken continuationToken, int pageSize, CancellationToken cancellationToken)
		{
			var searchToken = continuationToken as FeedSearchContinuationToken;
			if (searchToken == null)
			{
				throw new InvalidOperationException("Invalid token");
			}

			var searchResource = await sourceRepository.GetResourceAsync<PackageSearchResource>(cancellationToken);

			IEnumerable<IPackageSearchMetadata> searchResults = null;
			if (searchResource != null) {
				searchResults = await searchResource.SearchAsync(
				searchToken.SearchString,
				searchToken.SearchFilter,
				searchToken.StartIndex,
				pageSize + 1,
				Logging.NullLogger.Instance,
				cancellationToken);
			}

			var items = searchResults?.ToArray() ?? new IPackageSearchMetadata[] { };

			var hasMoreItems = items.Length > pageSize;
			if (hasMoreItems)
			{
				items = items.Take(items.Length - 1).ToArray();
			}

			var result = SearchResult.FromItems(items);

			var loadingStatus = hasMoreItems
				? LoadingStatus.Ready
			                   : items.Length == 0
			                   ? LoadingStatus.NoItemsFound
			                   : LoadingStatus.NoMoreItems;
			result.SourceSearchStatus = new Dictionary<string, LoadingStatus>
			{
				{ sourceRepository.PackageSource.Name, loadingStatus }
			};

			if (hasMoreItems)
			{
				result.NextToken = new FeedSearchContinuationToken
				{
					SearchString = searchToken.SearchString,
					SearchFilter = searchToken.SearchFilter,
					StartIndex = searchToken.StartIndex + items.Length
				};
			}

			return result;
		}
		public async Task<SearchResult<IPackageSearchMetadata>> ContinueSearchAsync(ContinuationToken continuationToken, CancellationToken cancellationToken)
		{
			var searchToken = continuationToken as AggregatedContinuationToken;

			if (searchToken?.SourceSearchCursors == null)
			{
				throw new InvalidOperationException("Invalid token");
			}

			var searchTokens = _sourceRepositories
				.Join(searchToken.SourceSearchCursors,
				      r => r.PackageSource.Name,
				      c => c.Key,
				      (r, c) => new { Repository = r, NextToken = c.Value });

			var searchTasks = TaskCombinators.ObserveErrorsAsync(
				searchTokens,
				j => j.Repository.PackageSource.Name,
				(j, t) => j.Repository.SearchAsync(j.NextToken, PageSize, t),
				LogError,
				cancellationToken);

			return await WaitForCompletionOrBailOutAsync(searchToken.SearchString, searchTasks, cancellationToken);
		}