Beispiel #1
0
        /// <summary>
        /// Starts a process that retrieves all entries with a partition key greater or equal than <paramref name="minTimestamp"/>
        /// </summary>
        /// <remarks>
        /// After 1000 elements are loaded this method will fire <see cref="EntriesReceived"/>.
        /// </remarks>
        /// <param name="table">The Azure WADLogs table to query against.</param>
        /// <param name="minTimestamp">The smallest WADLogs partition key to put into result.</param>
        /// <returns>All items from the WADLogs table inside the defined time.</returns>
        public async Task <IEnumerable <TTableItem> > GetEntriesAsync(CloudTable table, string minTimestamp)
        {
            var term  = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.GreaterThanOrEqual, minTimestamp);
            var query = new TableQuery <TTableItem>().Where(term);
            TableContinuationToken continuationToken = null;
            var result = new List <TTableItem>();

            do
            {
                var stopWatch = new Stopwatch();
                QueryStarted?.Invoke(null, EventArgs.Empty);
                stopWatch.Start();
                try
                {
                    var tableQueryResult = await table.ExecuteQuerySegmentedAsync(query, continuationToken);

                    stopWatch.Stop();
                    LastQueryTime = stopWatch.Elapsed;
                    QueryFinished?.Invoke(null, EventArgs.Empty);
                    continuationToken = tableQueryResult.ContinuationToken;
                    var entries = tableQueryResult.Results.ToList();
                    EntriesReceived?.Invoke(null, new TableEntityListEventArgs <TTableItem>(entries));
                    result.AddRange(entries);
                }
                catch (Exception ex)
                {
                    Trace.TraceError(ex.Message);
                }
            }while (continuationToken != null);
            return(result);
        }
Beispiel #2
0
        private void OnEntriesHandler(MemoryStream stream)
        {
            var entries = Schemes.Entries.DeserializeWithLengthPrefix(stream);

            EntriesReceived?.Invoke(this, new EntriesEventArgs(entries));
        }