private async Task <SearchResult <IPackageSearchMetadata> > WaitForCompletionOrBailOutAsync(
            string searchText,
            IDictionary <string, Task <SearchResult <IPackageSearchMetadata> > > searchTasks,
            CancellationToken cancellationToken)
        {
            if (searchTasks.Count == 0)
            {
                return(SearchResult.Empty <IPackageSearchMetadata>());
            }

            var aggregatedTask = Task.WhenAll(searchTasks.Values);

            RefreshToken refreshToken = null;

            if (aggregatedTask != await Task.WhenAny(aggregatedTask, Task.Delay(DefaultTimeout)))
            {
                refreshToken = new AggregatedRefreshToken
                {
                    SearchString = searchText,
                    SearchTasks  = searchTasks,
                    RetryAfter   = DefaultTimeout
                };
            }

            var partitionedTasks = searchTasks
                                   .ToLookup(t => t.Value.Status == TaskStatus.RanToCompletion);

            var completedOnly = partitionedTasks[true];

            SearchResult <IPackageSearchMetadata> aggregated;

            if (completedOnly.Any())
            {
                var results = await Task.WhenAll(completedOnly.Select(kv => kv.Value));

                aggregated = await AggregateSearchResultsAsync(searchText, results);
            }
            else
            {
                aggregated = SearchResult.Empty <IPackageSearchMetadata>();
            }

            aggregated.RefreshToken = refreshToken;

            var notCompleted = partitionedTasks[false];

            if (notCompleted.Any())
            {
                aggregated.SourceSearchStatus
                .AddRange(notCompleted
                          .ToDictionary(kv => kv.Key, kv => GetLoadingStatus(kv.Value.Status)));
            }

            // Observe the aggregate task exception to prevent an unhandled exception.
            // The individual task exceptions are logged in LogError and will be reported
            // in the Add Packages dialog.
            var ex = aggregatedTask.Exception;

            return(aggregated);
        }
示例#2
0
 public MessageContext(Guid eventId, StreamContext streamContext, IDictionary <string, object> metadata)
 {
     EventId        = eventId;
     StreamContext  = streamContext;
     MetadataLookup = metadata
                      .ToLookup(keyIs => keyIs.Key, valueIs => valueIs.Value);
 }
示例#3
0
 private NormalizationData(IDictionary <DataKey, DataValue> data)
 {
     _data          = data;
     _medianMedians = data.ToLookup(keyValuePair => Tuple.Create(keyValuePair.Key.SampleType, keyValuePair.Key.IsotopeLabelType),
                                    kvp => kvp.Value)
                      .ToDictionary(grouping => grouping.Key,
                                    grouping => grouping.Select(dataValue => dataValue.Median).Median());
 }
        /// <summary>
        /// Creates a new Assertion with the supplied principal name and Assertion attributes,
        /// a ValidFromDate of now, and no ValidUntilDate.
        /// </summary>
        /// <param name="principalName">the Principal name associated with this Assertion.</param>
        /// <param name="attributes">
        /// the key/value pairs for the attributes to associate with this Assertion.
        /// </param>
        public Assertion(string principalName, IDictionary<string, IList<string>> attributes)
        {
            CommonUtils.AssertNotNull(principalName, "principalName cannot be null.");
            CommonUtils.AssertNotNull(attributes, "attributes cannot be null.");

            this.PrincipalName = principalName;
            this.ValidFromDate = DateTime.Now;
            this.Attributes = attributes.ToLookup(x => x.Key, x => x.Value);
        }
        private async Task <SearchResult <IPackageSearchMetadata> > WaitForCompletionOrBailOutAsync(
            string searchText,
            IDictionary <string, Task <SearchResult <IPackageSearchMetadata> > > searchTasks,
            CancellationToken cancellationToken)
        {
            if (searchTasks.Count == 0)
            {
                return(SearchResult.Empty <IPackageSearchMetadata>());
            }

            var aggregatedTask = Task.WhenAll(searchTasks.Values);

            RefreshToken refreshToken = null;

            if (aggregatedTask != await Task.WhenAny(aggregatedTask, Task.Delay(DefaultTimeout)))
            {
                refreshToken = new AggregatedRefreshToken
                {
                    SearchString = searchText,
                    SearchTasks  = searchTasks,
                    RetryAfter   = DefaultTimeout
                };
            }

            var partitionedTasks = searchTasks
                                   .ToLookup(t => t.Value.Status == TaskStatus.RanToCompletion);

            var completedOnly = partitionedTasks[true];

            SearchResult <IPackageSearchMetadata> aggregated;

            if (completedOnly.Any())
            {
                var results = await Task.WhenAll(completedOnly.Select(kv => kv.Value));

                aggregated = await AggregateSearchResultsAsync(searchText, results);
            }
            else
            {
                aggregated = SearchResult.Empty <IPackageSearchMetadata>();
            }

            aggregated.RefreshToken = refreshToken;

            var notCompleted = partitionedTasks[false];

            if (notCompleted.Any())
            {
                aggregated.SourceSearchStatus
                .AddRange(notCompleted
                          .ToDictionary(kv => kv.Key, kv => GetLoadingStatus(kv.Value.Status)));
            }

            return(aggregated);
        }
示例#6
0
        public static Dictionary <string, string> ToHeaders(IDictionary <string,  string[]> headers, bool debug)
        {
            var copyHeaders = new Dictionary <string, string>();

            try
            {
                copyHeaders = headers.ToLookup(k => k.Key, k => string.Join(",", k.Value.Distinct()), StringComparer.OrdinalIgnoreCase)
                              .ToDictionary(k => k.Key, k => string.Join(",", k.ToList().Distinct()), StringComparer.OrdinalIgnoreCase);
            }
            catch (Exception inst)
            {
                LogDebugMessage(debug, "Error encountered while copying header");
            }
            return(copyHeaders);
        }
示例#7
0
        public static void PrintResult(IDictionary <string, PlatformResult> dict)
        {
            if (dict.All(it => it.Value.Result != null))
            {
                if (AppVeyor)
                {
                    PostTestResultToAppveyor(dict);
                }

                var result = dict.Select(it => it.Value.Result).First();
                if (TeamCity)
                {
                    Console.WriteLine("##teamcity[testStarted name='{2}.{1}.{0}' captureStandardOutput='true']",
                                      result.Test.Name.TeamCityEncode(),
                                      result.Test.Fixture.Name.TeamCityEncode(),
                                      result.Test.Fixture.Assembly.Name.TeamCityEncode());
                }
                else if (Verbose)
                {
                    Console.Write(result.Test.Fixture.Assembly.Name + ".");
                    Console.Write(result.Test.Fixture.Name + ".");
                }
                if (TeamCity || Verbose)
                {
                    Console.WriteLine(result.Test.Name);
                }
                foreach (var grpResult in dict.GroupBy(it => it.Value.Result.Kind))
                {
                    if (Verbose || TeamCity)
                    {
                        Console.Write("{0}:", grpResult.Key);
                        foreach (var keyValuePair in grpResult)
                        {
                            Console.Write(" ");
                            Console.Write(keyValuePair.Value.Platform);
                        }
                    }
                    if (TeamCity)
                    {
                        switch (grpResult.Key)
                        {
                        case ResultKind.Fail:
                        case ResultKind.Error:
                            Console.WriteLine(
                                "##teamcity[testFailed name='{2}.{1}.{0}' message='See log or details']",
                                result.Test.Name.TeamCityEncode(),
                                result.Test.Fixture.Name.TeamCityEncode(),
                                result.Test.Fixture.Assembly.Name.TeamCityEncode());
                            break;

                        case ResultKind.Ignore:
                            Console.WriteLine(
                                "##teamcity[testIgnored name='{2}.{1}.{0}' message='See log or details']",
                                result.Test.Name.TeamCityEncode(),
                                result.Test.Fixture.Name.TeamCityEncode(),
                                result.Test.Fixture.Assembly.Name.TeamCityEncode());
                            break;
                        }
                    }
                    if (Verbose || TeamCity)
                    {
                        Console.WriteLine();
                    }
                }
                if (Verbose || TeamCity)
                {
                    var span = new TimeSpan();
                    foreach (var r in dict.Select(it => it.Value.Result))
                    {
                        span += (r.EndTime - r.StartTime);
                    }
                    Console.WriteLine("avg time:{0}", new TimeSpan(span.Ticks / dict.Count));
                }

                if (Verbose || TeamCity)
                {
                    foreach (var lup in dict.ToLookup(it => it.Value.Result.Output))
                    {
                        var name = String.Join(",", lup.Select(it => it.Value.Platform));

                        Console.WriteLine("{0}:", name);
                        Console.WriteLine(lup.Key);
                    }
                }

                if (TeamCity)
                {
                    Console.WriteLine("##teamcity[testFinished name='{2}.{1}.{0}' duration='{3}']",
                                      result.Test.Name.TeamCityEncode(),
                                      result.Test.Fixture.Name.TeamCityEncode(),
                                      result.Test.Fixture.Assembly.Name.TeamCityEncode(),
                                      (result.EndTime - result.StartTime).TotalMilliseconds);
                }
                else
                {
                    if (dict.Any(it => it.Value.Result.Kind == ResultKind.Fail))
                    {
                        if (Verbose)
                        {
                            Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!");
                        }
                        else if (dict.All(it => it.Value.Result.Kind == ResultKind.Fail))
                        {
                            Console.Write("!  ");
                        }
                        else
                        {
                            Console.Write("!{0} ", dict.Where(it => it.Value.Result.Kind == ResultKind.Fail).Count());
                        }
                    }
                    else if (dict.Any(it => it.Value.Result.Kind == ResultKind.Error))
                    {
                        if (Verbose)
                        {
                            Console.WriteLine("EEEEEEEEEEEEEEEEEEEEEEEEE");
                        }
                        else if (dict.All(it => it.Value.Result.Kind == ResultKind.Error))
                        {
                            Console.Write("E  ");
                        }
                        else
                        {
                            Console.Write("E{0} ", dict.Where(it => it.Value.Result.Kind == ResultKind.Error).Count());
                        }
                    }
                    else if (dict.Any(it => it.Value.Result.Kind == ResultKind.Ignore))
                    {
                        if (Verbose)
                        {
                            Console.WriteLine("?????????????????????????");
                        }
                        else if (dict.All(it => it.Value.Result.Kind == ResultKind.Ignore))
                        {
                            Console.Write("?  ");
                        }
                        else
                        {
                            Console.Write("?{0} ", dict.Where(it => it.Value.Result.Kind == ResultKind.Ignore).Count());
                        }
                    }
                    else if (dict.All(it => it.Value.Result.Kind == ResultKind.Success))
                    {
                        if (Verbose)
                        {
                            Console.WriteLine("-------------------------");
                        }
                        else
                        {
                            Console.Write(".  ");
                        }
                    }
                    else
                    {
                        if (Verbose)
                        {
                            Console.WriteLine(".........................");
                        }
                        else if (dict.All(it => it.Value.Result.Kind == ResultKind.NoError))
                        {
                            Console.Write("_  ");
                        }
                        else
                        {
                            Console.Write("_{0} ", dict.Where(it => it.Value.Result.Kind == ResultKind.NoError).Count());
                        }
                    }
                    if (Verbose || ++_resultCount % 26 == 0)
                    {
                        Console.WriteLine(String.Empty);
                    }
                }
            }
        }
示例#8
0
 static Entities()
 {
     LOOKUP = ESCAPES.ToLookup(pair => pair.Value, pair => pair.Key);
 }
示例#9
0
 public static ILookup <TKey, TValue> ToLookup <TKey, TValue>(
     this IDictionary <TKey, IList <TValue> > dictionary,
     IEqualityComparer <TKey> comparer = null)
 {
     return(dictionary.ToLookup <TKey, IList <TValue>, TValue>(comparer));
 }
 public void Assign(IDictionary <ITemplateVariant, ProjectVariantAssignmentSettings> assignments)
 {
     Assign(assignments.ToLookup(x => x.Key, x => x.Value));
 }
示例#11
0
 public static ILookup <TValue, TKey> Inverse <TKey, TValue>(this IDictionary <TKey, TValue> dictionary)
 {
     return(dictionary.ToLookup(kvp => kvp.Value, kvp => kvp.Key));
 }
示例#12
0
        public static void PrintResult(IDictionary<string, PlatformResult> dict)
        {
            if (dict.All(it => it.Value.Result != null))
            {

                if (AppVeyor)
                {
                    PostTestResultToAppveyor(dict);
                }

                var result = dict.Select(it => it.Value.Result).First();
                if (TeamCity)
                {
                    Console.WriteLine("##teamcity[testStarted name='{2}.{1}.{0}' captureStandardOutput='true']",
                                      result.Test.Name.TeamCityEncode(),
                                      result.Test.Fixture.Name.TeamCityEncode(),
                                      result.Test.Fixture.Assembly.Name.TeamCityEncode());
                }
                else if(Verbose)
                {
                    Console.Write(result.Test.Fixture.Assembly.Name + ".");
                    Console.Write(result.Test.Fixture.Name + ".");
                }
                if (TeamCity || Verbose) {
                  Console.WriteLine (result.Test.Name);
                }
                foreach (var grpResult in dict.GroupBy(it => it.Value.Result.Kind))
                {
                  if (Verbose || TeamCity) {
                    Console.Write ("{0}:", grpResult.Key);
                    foreach (var keyValuePair in grpResult) {
                      Console.Write (" ");
                      Console.Write (keyValuePair.Value.Platform);
                    }
                  }
                    if (TeamCity)
                    {
                        switch (grpResult.Key)
                        {
                            case ResultKind.Fail:
                            case ResultKind.Error:
                                Console.WriteLine(
                                    "##teamcity[testFailed name='{2}.{1}.{0}' message='See log or details']",
                                      result.Test.Name.TeamCityEncode(),
                                      result.Test.Fixture.Name.TeamCityEncode(),
                                      result.Test.Fixture.Assembly.Name.TeamCityEncode());
                                break;
                            case ResultKind.Ignore:
                                Console.WriteLine(
                                    "##teamcity[testIgnored name='{2}.{1}.{0}' message='See log or details']",
                                      result.Test.Name.TeamCityEncode(),
                                      result.Test.Fixture.Name.TeamCityEncode(),
                                      result.Test.Fixture.Assembly.Name.TeamCityEncode());
                                break;
                        }

                    }
                  if (Verbose || TeamCity) {
                    Console.WriteLine ();
                  }
                }
            if (Verbose || TeamCity) {
              var span = new TimeSpan ();
              foreach (var r in dict.Select(it => it.Value.Result)) {
            span += (r.EndTime - r.StartTime);
              }
              Console.WriteLine ("avg time:{0}", new TimeSpan (span.Ticks / dict.Count));
            }

            if (Verbose || TeamCity) {

                    foreach (var lup in dict.ToLookup(it => it.Value.Result.Output)) {
                        var name = String.Join (",", lup.Select (it => it.Value.Platform));

                        Console.WriteLine ("{0}:", name);
                        Console.WriteLine (lup.Key);
                    }
                }

                if (TeamCity)
                {
                    Console.WriteLine("##teamcity[testFinished name='{2}.{1}.{0}' duration='{3}']",
                         result.Test.Name.TeamCityEncode(),
                         result.Test.Fixture.Name.TeamCityEncode(),
                         result.Test.Fixture.Assembly.Name.TeamCityEncode(),
                        (result.EndTime - result.StartTime).TotalMilliseconds);
                }
                else
                {

                    if (dict.Any(it => it.Value.Result.Kind == ResultKind.Fail))
                    {
                        if (Verbose)
                            Console.WriteLine ("!!!!!!!!!!!!!!!!!!!!!!!!!");
                        else if (dict.All(it => it.Value.Result.Kind == ResultKind.Fail))
                            Console.Write("!  ");
                        else
                            Console.Write ("!{0} ", dict.Where (it => it.Value.Result.Kind == ResultKind.Fail).Count ());
                    }
                    else if (dict.Any(it => it.Value.Result.Kind == ResultKind.Error))
                    {
                        if (Verbose)
                            Console.WriteLine("EEEEEEEEEEEEEEEEEEEEEEEEE");
                        else if (dict.All(it => it.Value.Result.Kind == ResultKind.Error))
                            Console.Write("E  ");
                        else
                            Console.Write ("E{0} ", dict.Where (it => it.Value.Result.Kind == ResultKind.Error).Count ());

                    }
                    else if (dict.Any(it => it.Value.Result.Kind == ResultKind.Ignore))
                    {
                        if (Verbose)
                            Console.WriteLine("?????????????????????????");
                        else if (dict.All(it => it.Value.Result.Kind == ResultKind.Ignore))
                            Console.Write("?  ");
                        else
                            Console.Write ("?{0} ", dict.Where (it => it.Value.Result.Kind == ResultKind.Ignore).Count ());
                    }
                    else if (dict.All(it => it.Value.Result.Kind == ResultKind.Success))
                    {
                        if (Verbose)
                            Console.WriteLine("-------------------------");
                        else
                            Console.Write(".  ");
                    }
                    else
                    {
                        if (Verbose)
                            Console.WriteLine (".........................");
                        else if (dict.All (it => it.Value.Result.Kind == ResultKind.NoError))
                            Console.Write ("_  ");
                        else
                            Console.Write ("_{0} ", dict.Where (it => it.Value.Result.Kind == ResultKind.NoError).Count ());
                    }
                    if (Verbose || ++_resultCount % 26 == 0 )
                        Console.WriteLine(String.Empty);

                }
            }
        }
示例#13
0
 private static Player GetTopPlayerByScore(IDictionary<Player, int> scores)
 {
     return GetTopPlayerByScore(scores.ToLookup(kvp => kvp.Value, kvp => kvp.Key));
 }
		private async Task<SearchResult<IPackageSearchMetadata>> WaitForCompletionOrBailOutAsync(
			string searchText,
			IDictionary<string, Task<SearchResult<IPackageSearchMetadata>>> searchTasks,
			CancellationToken cancellationToken)
		{
			if (searchTasks.Count == 0)
			{
				return SearchResult.Empty<IPackageSearchMetadata>();
			}

			var aggregatedTask = Task.WhenAll(searchTasks.Values);

			RefreshToken refreshToken = null;
			if (aggregatedTask != await Task.WhenAny(aggregatedTask, Task.Delay(DefaultTimeout)))
			{
				refreshToken = new AggregatedRefreshToken
				{
					SearchString = searchText,
					SearchTasks = searchTasks,
					RetryAfter = DefaultTimeout
				};
			}

			var partitionedTasks = searchTasks
				.ToLookup(t => t.Value.Status == TaskStatus.RanToCompletion);

			var completedOnly = partitionedTasks[true];

			SearchResult<IPackageSearchMetadata> aggregated;

			if (completedOnly.Any())
			{
				var results = await Task.WhenAll(completedOnly.Select(kv => kv.Value));
				aggregated = await AggregateSearchResultsAsync(searchText, results);
			}
			else
			{
				aggregated = SearchResult.Empty<IPackageSearchMetadata>();
			}

			aggregated.RefreshToken = refreshToken;

			var notCompleted = partitionedTasks[false];

			if (notCompleted.Any())
			{
				aggregated.SourceSearchStatus
				          .AddRange(notCompleted
				              .ToDictionary(kv => kv.Key, kv => GetLoadingStatus(kv.Value.Status)));
			}

			return aggregated;
		}
示例#15
0
 public ValueReferenceInverseDictionary(IDictionary <TKey, TValue> dictionary)
 {
     _valueReferenceToKeyLookup = dictionary.ToLookup(kv => Reference.For(kv.Value), kv => kv.Key);
 }
 /// <summary>
 /// Stores custom parameters to be included in the validation URL.
 /// </summary>
 /// <param name="customParameters">custom parameters for the validation</param>
 public void setCustomParameters(IDictionary<string, string> customParameters)
 {
   this.customParameters = customParameters.ToLookup(x => x.Key, x => x.Value);
 }
示例#17
0
        private async Task <SearchResult <IPackageSearchMetadata> > WaitForCompletionOrBailOutAsync(
            string searchText,
            IDictionary <string, Task <SearchResult <IPackageSearchMetadata> > > searchTasks,
            TelemetryState telemetryState,
            CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (searchTasks.Count == 0)
            {
                return(SearchResult.Empty <IPackageSearchMetadata>());
            }

            var aggregatedTask = Task.WhenAll(searchTasks.Values);

            RefreshToken refreshToken = null;

            if (aggregatedTask != await Task.WhenAny(aggregatedTask, Task.Delay(DefaultTimeout)))
            {
                refreshToken = new AggregatedRefreshToken
                {
                    TelemetryState = telemetryState,
                    SearchString   = searchText,
                    SearchTasks    = searchTasks,
                    RetryAfter     = DefaultTimeout
                };
            }

            var partitionedTasks = searchTasks
                                   .ToLookup(t => t.Value.Status == TaskStatus.RanToCompletion);

            var completedOnly = partitionedTasks[true];

            SearchResult <IPackageSearchMetadata> aggregated;
            IEnumerable <TimeSpan> timings = null;
            var timeAggregation            = new Stopwatch();

            if (completedOnly.Any())
            {
                var results = await Task.WhenAll(completedOnly.Select(kv => kv.Value));

                timings = results.Select(e => e.Duration);
                timeAggregation.Start();
                aggregated = await AggregateSearchResultsAsync(searchText, results, telemetryState);

                timeAggregation.Stop();
            }
            else
            {
                timings    = Enumerable.Empty <TimeSpan>();
                aggregated = SearchResult.Empty <IPackageSearchMetadata>();
            }

            aggregated.OperationId  = telemetryState?.OperationId;
            aggregated.RefreshToken = refreshToken;

            var notCompleted = partitionedTasks[false];

            if (notCompleted.Any())
            {
                var statuses = notCompleted.ToDictionary(
                    kv => kv.Key,
                    kv => GetLoadingStatus(kv.Value.Status));

                foreach (var item in statuses)
                {
                    aggregated.SourceSearchStatus.Add(item);
                }

                var exceptions = notCompleted
                                 .Where(kv => kv.Value.Exception != null)
                                 .ToDictionary(
                    kv => kv.Key,
                    kv => (Exception)kv.Value.Exception);

                foreach (var item in exceptions)
                {
                    aggregated.SourceSearchException.Add(item);
                }
            }

            if (_telemetryService != null &&
                aggregated.SourceSearchStatus != null &&
                aggregated.SourceSearchStatus.Values != null &&
                telemetryState != null)
            {
                var loadingStatus = aggregated.SourceSearchStatus.Values.Aggregate();
                if (loadingStatus != LoadingStatus.Loading &&
                    telemetryState.ShouldEmit)
                {
                    telemetryState.Duration.Stop();
                    _telemetryService.EmitTelemetryEvent(new SearchPageTelemetryEvent(
                                                             telemetryState.OperationId,
                                                             telemetryState.PageIndex,
                                                             aggregated.Items?.Count ?? 0,
                                                             telemetryState.Duration.Elapsed,
                                                             timings,
                                                             timeAggregation.Elapsed,
                                                             loadingStatus));
                }
            }

            return(aggregated);
        }
示例#18
0
 /// <summary>
 ///     Converts an <see cref="IDictionary{TKey,TValue}" /> to an <see cref="ILookup{TKey,TElement}" /> by swapping the
 ///     keys and values.
 /// </summary>
 /// <typeparam name="TKey"></typeparam>
 /// <typeparam name="TValue"></typeparam>
 /// <param name="dictionary">The dictionary to convert.</param>
 /// <returns>An <see cref="ILookup{TKey,TElement}" /> created by using the dictionary values as lookup keys and the dictionary keys as values.</returns>
 public static ILookup <TValue, TKey> ToLookup <TKey, TValue>(this IDictionary <TKey, TValue> dictionary)
 {
     return(dictionary.ToLookup(x => x.Value, x => x.Key));
 }