{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/comments/87891910","pull_request_review_id":8485001,"id":87891910,"diff_hunk":"@@ -0,0 +1,295 @@\n+﻿namespace Microsoft.ApplicationInsights.Extensibility\n+{\n+    using System;\n+    using System.Collections.Concurrent;\n+    using System.Collections.Generic;\n+    using System.Globalization;\n+    using System.Threading;\n+    using System.Threading.Tasks;\n+\n+    using Microsoft.ApplicationInsights.Channel;\n+    using Microsoft.ApplicationInsights.DataContracts;\n+    using Microsoft.ApplicationInsights.Extensibility.Implementation;\n+    using Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing;\n+\n+#if CORE_PCL || NET45 || NET46\n+    using TaskEx = System.Threading.Tasks.Task;\n+#endif\n+\n+    /// <summary>\n+    /// Represents a hub for metric aggregation procedures.\n+    /// </summary>\n+    public sealed class MetricAggregatorManager : IDisposable\n+    {\n+        /// <summary>\n+        /// Name of the property added to aggregation results to indicate duration of the aggregation interval.\n+        /// </summary>\n+        private static string intervalDurationPropertyName = \"IntervalDurationMs\";\n+\n+        /// <summary>\n+        /// Reporting frequency.\n+        /// </summary>\n+        private static TimeSpan snapshotFrequency = TimeSpan.FromMinutes(1);\n+\n+        /// <summary>\n+        /// Telemetry client used to track resulting aggregated metrics.\n+        /// </summary>\n+        private readonly TelemetryClient telemetryClient;\n+\n+        /// <summary>\n+        /// Metric aggregator snapshotting task.\n+        /// </summary>\n+        private readonly TaskTimer snapshotTask;\n+\n+        /// <summary>\n+        /// Last time snapshot was initiated.\n+        /// </summary>\n+        private DateTimeOffset lastSnapshotStartDateTime;\n+\n+        /// <summary>\n+        /// Indicates whether the object was disposed.\n+        /// </summary>\n+        private bool disposed;\n+\n+        /// <summary>\n+        /// A dictionary of all metric aggregators instantiated via this manager.\n+        /// </summary>\n+        private ConcurrentDictionary<MetricAggregator, SimpleMetricStatisticsAggregator> aggregatorDictionary;\n+\n+        /// <summary>\n+        /// Initializes a new instance of the <see cref=\"MetricAggregatorManager\"/> class.\n+        /// </summary>\n+        public MetricAggregatorManager()\n+            : this(new TelemetryClient())\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes a new instance of the <see cref=\"MetricAggregatorManager\"/> class.\n+        /// </summary>\n+        /// <param name=\"client\">Telemetry client to use to output aggregated metric data.</param>\n+        public MetricAggregatorManager(TelemetryClient client)\n+        {\n+            this.telemetryClient = client ?? new TelemetryClient();\n+            this.aggregatorDictionary = new ConcurrentDictionary<MetricAggregator, SimpleMetricStatisticsAggregator>();\n+\n+            this.lastSnapshotStartDateTime = DateTimeOffset.UtcNow;\n+\n+            this.snapshotTask = new TaskTimer() { Delay = GetWaitTime() };\n+            this.snapshotTask.Start(this.SnapshotAndReschedule);\n+        }\n+\n+        /// <summary>\n+        /// Gets a list of metric processors associated\n+        /// with this instance of <see cref=\"MetricAggregatorManager\"/>.\n+        /// </summary>\n+        internal IList<IMetricProcessor> MetricProcessors\n+        {\n+            get\n+            {\n+                TelemetryConfiguration config = this.telemetryClient.TelemetryConfiguration;\n+\n+                return config.MetricProcessors;\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Creates single time series metric data aggregator.\n+        /// </summary>\n+        /// <param name=\"metricName\">Name of the metric.</param>\n+        /// <param name=\"dimensions\">Optional dimensions.</param>\n+        /// <returns>Value aggregator for the metric specified.</returns>\n+        public MetricAggregator CreateMetricAggregator(string metricName, IDictionary<string, string> dimensions = null)\n+        {\n+            if (this.disposed)\n+            {\n+                throw new ObjectDisposedException(nameof(MetricAggregatorManager));\n+            }\n+\n+            return new MetricAggregator(this, metricName, dimensions);\n+        }\n+\n+        /// <summary>\n+        /// Flushes the in-memory aggregation buffers.\n+        /// </summary>\n+        public void Flush()\n+        {\n+            if (this.disposed)\n+            {\n+                throw new ObjectDisposedException(nameof(MetricAggregatorManager));\n+            }\n+\n+            this.Flush(false);\n+        }\n+\n+        /// <summary>\n+        /// Disposes the object.\n+        /// </summary>\n+        public void Dispose()\n+        {\n+            this.disposed = true;\n+\n+            if (this.snapshotTask != null)\n+            {\n+                this.snapshotTask.Dispose();\n+            }\n+\n+            this.Flush(true);\n+        }\n+\n+        internal SimpleMetricStatisticsAggregator GetStatisticsAggregator(MetricAggregator aggregator)\n+        {\n+            if (this.disposed)\n+            {\n+                throw new ObjectDisposedException(nameof(MetricAggregatorManager));\n+            }\n+\n+            if (aggregator == null)\n+            {\n+                return null;\n+            }\n+\n+            return this.aggregatorDictionary.GetOrAdd(aggregator, (aid) => { return new SimpleMetricStatisticsAggregator(); });\n+        }\n+\n+        /// <summary>\n+        /// Calculates wait time until next snapshot of the aggregators.\n+        /// </summary>\n+        /// <returns>Wait time.</returns>\n+        private static TimeSpan GetWaitTime()\n+        {\n+            DateTimeOffset currentTime = DateTimeOffset.UtcNow;\n+\n+            double minutesFromZero = currentTime.Subtract(DateTimeOffset.MinValue).TotalMinutes;\n+\n+            // we want to wake up exactly at 1 second past minute\n+            // to make perceived system latency look smaller\n+            var nextWakeTime = DateTimeOffset.MinValue\n+                .AddMinutes((long)minutesFromZero)\n+                .Add(snapshotFrequency)\n+                .AddSeconds(1);\n+\n+            TimeSpan sleepTime = nextWakeTime - DateTimeOffset.UtcNow;\n+\n+            // adjust wait time to a bit longer than a minute if the wake up time is within few seconds from now\n+            return sleepTime < TimeSpan.FromSeconds(3) ? sleepTime.Add(snapshotFrequency) : sleepTime;\n+        }\n+\n+        /// <summary>\n+        /// Generates telemetry object based on the metric aggregator.\n+        /// </summary>\n+        /// <param name=\"aggregator\">Metric aggregator.</param>\n+        /// <param name=\"aggregatorStats\">Metric aggregator statistics calculated for a period of time.</param>\n+        /// <returns>Metric telemetry object resulting from aggregation.</returns>\n+        private static AggregatedMetricTelemetry CreateAggergatedMetricTelemetry(MetricAggregator aggregator, SimpleMetricStatisticsAggregator aggregatorStats)\n+        {\n+            if ((aggregator == null) || (aggregatorStats == null) || (aggregatorStats.Count <= 0))\n+            {\n+                return null;\n+            }\n+\n+            var telemetry = new AggregatedMetricTelemetry(\n+                aggregator.MetricName,\n+                aggregatorStats.Count,\n+                aggregatorStats.Sum,\n+                aggregatorStats.Min,\n+                aggregatorStats.Max,\n+                aggregatorStats.StandardDeviation);\n+\n+            if (aggregator.Dimensions != null)\n+            {\n+                foreach (KeyValuePair<string, string> property in aggregator.Dimensions)\n+                {\n+                    telemetry.Properties.Add(property);\n+                }\n+            }\n+\n+            return telemetry;\n+        }\n+\n+        private void Flush(bool disposing)\n+        {\n+            if ((!disposing) && this.disposed)\n+            {\n+                throw new ObjectDisposedException(nameof(MetricAggregatorManager));\n+            }\n+\n+            try\n+            {\n+                this.Snapshot();\n+                this.telemetryClient.Flush();\n+            }\n+            catch (Exception ex)\n+            {\n+                CoreEventSource.Log.FailedToFlushMetricAggregators(ex.ToString());\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Takes a snapshot of aggregators collected by this instance of the manager\n+        /// and schedules the next snapshot.\n+        /// </summary>\n+        private Task SnapshotAndReschedule()\n+        {\n+            return Task.Factory.StartNew(\n+                () =>\n+                {\n+                    try\n+                    {\n+                        this.Snapshot();\n+                    }\n+                    catch (Exception ex)\n+                    {\n+                        CoreEventSource.Log.FailedToSnapshotMetricAggregators(ex.ToString());\n+                    }\n+                    finally\n+                    {\n+                        this.snapshotTask.Delay = GetWaitTime();\n+                        this.snapshotTask.Start(this.SnapshotAndReschedule);\n+                    }\n+                });\n+        }\n+\n+        /// <summary>\n+        /// Takes snapshot of all active metric aggregators and turns results into metric telemetry.\n+        /// </summary>\n+        private void Snapshot()\n+        {\n+            ConcurrentDictionary<MetricAggregator, SimpleMetricStatisticsAggregator> aggregatorSnapshot =","path":"src/Core/Managed/Shared/Extensibility/MetricAggregatorManager.cs","position":null,"original_position":258,"commit_id":"016549107d65a7b25daaf885ef58947ba599da6d","original_commit_id":"ed9c740477d19f8f38052944c7efeaa3dbf68e5e","user":{"login":"vitalyf007","id":10007264,"avatar_url":"https://avatars.githubusercontent.com/u/10007264?v=3","gravatar_id":"","url":"https://api.github.com/users/vitalyf007","html_url":"https://github.com/vitalyf007","followers_url":"https://api.github.com/users/vitalyf007/followers","following_url":"https://api.github.com/users/vitalyf007/following{/other_user}","gists_url":"https://api.github.com/users/vitalyf007/gists{/gist_id}","starred_url":"https://api.github.com/users/vitalyf007/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vitalyf007/subscriptions","organizations_url":"https://api.github.com/users/vitalyf007/orgs","repos_url":"https://api.github.com/users/vitalyf007/repos","events_url":"https://api.github.com/users/vitalyf007/events{/privacy}","received_events_url":"https://api.github.com/users/vitalyf007/received_events","type":"User","site_admin":false},"body":"It is a little iffy, I think... The type is specified indirectly. Do you feel strongly about this?","created_at":"2016-11-14T21:02:22Z","updated_at":"2016-11-14T21:02:22Z","html_url":"https://github.com/Microsoft/ApplicationInsights-dotnet/pull/323#discussion_r87891910","pull_request_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/323","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/comments/87891910"},"html":{"href":"https://github.com/Microsoft/ApplicationInsights-dotnet/pull/323#discussion_r87891910"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/323"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/323","id":88319072,"html_url":"https://github.com/Microsoft/ApplicationInsights-dotnet/pull/323","diff_url":"https://github.com/Microsoft/ApplicationInsights-dotnet/pull/323.diff","patch_url":"https://github.com/Microsoft/ApplicationInsights-dotnet/pull/323.patch","issue_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues/323","number":323,"state":"open","locked":false,"title":"Metric aggregation public surface changes","user":{"login":"vitalyf007","id":10007264,"avatar_url":"https://avatars.githubusercontent.com/u/10007264?v=3","gravatar_id":"","url":"https://api.github.com/users/vitalyf007","html_url":"https://github.com/vitalyf007","followers_url":"https://api.github.com/users/vitalyf007/followers","following_url":"https://api.github.com/users/vitalyf007/following{/other_user}","gists_url":"https://api.github.com/users/vitalyf007/gists{/gist_id}","starred_url":"https://api.github.com/users/vitalyf007/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vitalyf007/subscriptions","organizations_url":"https://api.github.com/users/vitalyf007/orgs","repos_url":"https://api.github.com/users/vitalyf007/repos","events_url":"https://api.github.com/users/vitalyf007/events{/privacy}","received_events_url":"https://api.github.com/users/vitalyf007/received_events","type":"User","site_admin":false},"body":"This PR contains all proposed changes for AI SDK public surface to support metric aggregation.\n","created_at":"2016-10-06T18:48:10Z","updated_at":"2016-11-14T21:02:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a315e93aa69c2052349e1998081da5a377a999be","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/323/commits","review_comments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/323/comments","review_comment_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues/323/comments","statuses_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/statuses/016549107d65a7b25daaf885ef58947ba599da6d","head":{"label":"Microsoft:features/metric-agg.public-surface","ref":"features/metric-agg.public-surface","sha":"016549107d65a7b25daaf885ef58947ba599da6d","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":37284654,"name":"ApplicationInsights-dotnet","full_name":"Microsoft/ApplicationInsights-dotnet","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/ApplicationInsights-dotnet","description":"ApplicationInsights-dotnet","fork":false,"url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet","forks_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/forks","keys_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/teams","hooks_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/events","assignees_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/tags","blobs_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/languages","stargazers_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/subscription","commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/merges","archive_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/downloads","issues_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/deployments","created_at":"2015-06-11T20:34:21Z","updated_at":"2016-11-02T18:21:36Z","pushed_at":"2016-11-14T20:38:11Z","git_url":"git://github.com/Microsoft/ApplicationInsights-dotnet.git","ssh_url":"git@github.com:Microsoft/ApplicationInsights-dotnet.git","clone_url":"https://github.com/Microsoft/ApplicationInsights-dotnet.git","svn_url":"https://github.com/Microsoft/ApplicationInsights-dotnet","homepage":null,"size":4715,"stargazers_count":71,"watchers_count":71,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":49,"mirror_url":null,"open_issues_count":26,"forks":49,"open_issues":26,"watchers":71,"default_branch":"develop"}},"base":{"label":"Microsoft:features/metric-agg.main","ref":"features/metric-agg.main","sha":"00d7a7ac6eb2d33b4316a1c3fbec923136a516f9","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":37284654,"name":"ApplicationInsights-dotnet","full_name":"Microsoft/ApplicationInsights-dotnet","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/ApplicationInsights-dotnet","description":"ApplicationInsights-dotnet","fork":false,"url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet","forks_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/forks","keys_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/teams","hooks_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/events","assignees_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/tags","blobs_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/languages","stargazers_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/subscription","commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/merges","archive_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/downloads","issues_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/deployments","created_at":"2015-06-11T20:34:21Z","updated_at":"2016-11-02T18:21:36Z","pushed_at":"2016-11-14T20:38:11Z","git_url":"git://github.com/Microsoft/ApplicationInsights-dotnet.git","ssh_url":"git@github.com:Microsoft/ApplicationInsights-dotnet.git","clone_url":"https://github.com/Microsoft/ApplicationInsights-dotnet.git","svn_url":"https://github.com/Microsoft/ApplicationInsights-dotnet","homepage":null,"size":4715,"stargazers_count":71,"watchers_count":71,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":49,"mirror_url":null,"open_issues_count":26,"forks":49,"open_issues":26,"watchers":71,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/323"},"html":{"href":"https://github.com/Microsoft/ApplicationInsights-dotnet/pull/323"},"issue":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues/323"},"comments":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/issues/323/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/323/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/pulls/323/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/ApplicationInsights-dotnet/statuses/016549107d65a7b25daaf885ef58947ba599da6d"}}}}
{"actor":{"display_login":"vitalyf007"}}