{"action":"created","comment":{"url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/comments/52927773","id":52927773,"diff_hunk":"@@ -0,0 +1,134 @@\n+﻿using System;\n+using System.Collections.Generic;\n+using System.Diagnostics;\n+using System.Linq;\n+using System.Text;\n+using System.Threading.Tasks;\n+using Microsoft.WindowsAzure.Diagnostics;\n+using Microsoft.WindowsAzure.ServiceRuntime;\n+using Microsoft.WindowsAzure.Storage;\n+using Microsoft.WindowsAzure.Storage.Auth;\n+using Microsoft.WindowsAzure.Storage.Table;\n+using Ng.TraceListeners.Models;\n+\n+namespace Ng.TraceListeners\n+{\n+    /// <summary>\n+    /// Saves application status data to Azure table storage.\n+    /// Only messages in the following form are written to table storage.\n+    ///   #Status #Activity=Download packages #Status=Begin #Details=Download source http://foo/downloads\n+    /// Register the trace listener using the following. Specify the Azure table storage connection\n+    /// string using the tablestorage field. Note that this trace listener uses * as the field delimiter\n+    /// because the = character is used in the connection string.\n+    /// <add name=\"AzureTableStatus\" type=\"Ng.TraceListeners.AzureTableStorageStatusTraceListener, Ng.TraceListeners\" initializeData=\"tablestorage*connectionstring\" />\n+    /// </summary>\n+    public class AzureTableStorageStatusTraceListener : TraceListenerBase\n+    {\n+        CloudStorageAccount _storageAccount = null;\n+        CloudTableClient _tableClient = null;\n+        CloudTable _table = null;\n+\n+        public AzureTableStorageStatusTraceListener(String initializeData) : base(initializeData)\n+        {\n+            string connectionString = null;\n+            string tableName = \"status\";\n+\n+            if (initializeData != null)\n+            {\n+                foreach (String keyValuePair in initializeData.Split(','))\n+                {\n+                    String[] parts = keyValuePair.Split('*');\n+                    if (parts.Length == 2)\n+                    {\n+                        if (parts[0].Equals(\"tablestorage\", StringComparison.InvariantCultureIgnoreCase))\n+                        {\n+                            connectionString = parts[1].Trim();\n+                        }\n+                        else if (parts[0].Equals(\"table\", StringComparison.InvariantCultureIgnoreCase))\n+                        {\n+                            tableName = parts[1].Trim();\n+                        }\n+                    }\n+                }\n+            }\n+\n+            if (String.IsNullOrWhiteSpace(connectionString))\n+            {\n+                throw new ArgumentNullException(\"tablestorage\", \"The initializeData string must specify the Azure table storage connection string in the tablestorage field.\");\n+            }\n+\n+            this._storageAccount = CloudStorageAccount.Parse(connectionString);\n+            this._tableClient = this._storageAccount.CreateCloudTableClient();\n+            this._table = this._tableClient.GetTableReference(tableName);\n+            this._table.CreateIfNotExists();\n+        }\n+\n+        protected override void TraceSimpleEvent(DateTime eventTime, Int32 threadId, TraceEventType eventType, String message)\n+        {\n+            // Called by Trace.WriteLne(). Ignore.\n+        }\n+\n+        protected override void TraceSimpleEvent(DateTime eventTime, Int32 threadId, TraceEventType eventType, String message, Int32 eventId, TraceEventCache eventCache, String source)\n+        {\n+            if (_table != null)\n+            {\n+                if (message.StartsWith(\"#Status \") || message.StartsWith(\"#Status:\"))\n+                {\n+                    Status status = new Status(eventTime.ToUniversalTime());\n+                    status.Level = eventType.ToString();\n+                    status.ThreadId = threadId;\n+\n+                    string trimmedMessage = message.Substring(8);\n+\n+                    string[] parts = trimmedMessage.Split(new[] { '#' }, StringSplitOptions.RemoveEmptyEntries);\n+\n+                    foreach (string part in parts)\n+                    {\n+                        int propertyNameIndex = part.IndexOf('=');\n+\n+                        if (propertyNameIndex > 0)\n+                        {\n+                            string propertyName = part.Substring(0, propertyNameIndex);\n+                            string propertyValue = part.Substring(propertyNameIndex + 1);\n+\n+                            switch (propertyName.ToLowerInvariant())\n+                            {\n+                                case \"activity\":\n+                                    status.Activity = propertyValue;\n+                                    break;\n+                                case \"state\":\n+                                    status.State = propertyValue;\n+                                    break;\n+                                case \"result\":\n+                                    status.Result = propertyValue;\n+                                    break;\n+                                case \"details\":\n+                                    if (!string.IsNullOrWhiteSpace(status.Details))\n+                                    {\n+                                        status.Details += \"; \";\n+                                    }\n+\n+                                    status.Details += propertyValue;\n+                                    break;\n+                                default:\n+                                    throw new InvalidOperationException($\"Unknown trace property name: {propertyName}\");\n+                            }\n+                        }\n+                        else\n+                        {\n+                            if (!string.IsNullOrWhiteSpace(status.Details))\n+                            {\n+                                status.Details += \"; \";\n+                            }\n+\n+                            status.Details += part;\n+                        }\n+                    }\n+\n+                    TableOperation operation = TableOperation.Insert(status);","path":"src/Ng.TraceListeners/AzureTableStorageStatusTraceListener.cs","position":128,"original_position":128,"commit_id":"ca530680892b63a3f5c2a43181495c318f7cae6e","original_commit_id":"33e4efc28b7d1bb34a448980f88b016475f468a8","user":{"login":"rtaket","id":15946080,"avatar_url":"https://avatars.githubusercontent.com/u/15946080?v=3","gravatar_id":"","url":"https://api.github.com/users/rtaket","html_url":"https://github.com/rtaket","followers_url":"https://api.github.com/users/rtaket/followers","following_url":"https://api.github.com/users/rtaket/following{/other_user}","gists_url":"https://api.github.com/users/rtaket/gists{/gist_id}","starred_url":"https://api.github.com/users/rtaket/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rtaket/subscriptions","organizations_url":"https://api.github.com/users/rtaket/orgs","repos_url":"https://api.github.com/users/rtaket/repos","events_url":"https://api.github.com/users/rtaket/events{/privacy}","received_events_url":"https://api.github.com/users/rtaket/received_events","type":"User","site_admin":false},"body":"Yes, we currently log the following values to the table storage.\r\nThese ones that are set automatically. i.e. for the most part, you always get them.\r\n- Machine\r\n- EventTime\r\n- Application\r\n- ProcessId\r\n- ThreadId\r\n- Message Level (Information, Warning, Error)\r\n\r\nThese are the ones that are set by the trace message. i.e. they're freeform strings set in the trace message. BTW, I'm not sure these are the correct fields to include. But since they're freeform strings, they're ok for now. \r\n\r\n- Activity\r\n- State\r\n- Result\r\n- Details\r\n\r\nEventually, it would be nice if we had a concept of a RunId. i.e. a value that all the tools use for a particular run. That way we could view the logs for one run on one page.","created_at":"2016-02-15T17:56:44Z","updated_at":"2016-02-15T17:56:44Z","html_url":"https://github.com/jinujoseph/NuGet.Services.Metadata/pull/9#discussion_r52927773","pull_request_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/9","_links":{"self":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/comments/52927773"},"html":{"href":"https://github.com/jinujoseph/NuGet.Services.Metadata/pull/9#discussion_r52927773"},"pull_request":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/9"}}},"pull_request":{"url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/9","id":59236292,"html_url":"https://github.com/jinujoseph/NuGet.Services.Metadata/pull/9","diff_url":"https://github.com/jinujoseph/NuGet.Services.Metadata/pull/9.diff","patch_url":"https://github.com/jinujoseph/NuGet.Services.Metadata/pull/9.patch","issue_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues/9","number":9,"state":"open","locked":false,"title":"Custom trace listeners to make the logs easier to read","user":{"login":"rtaket","id":15946080,"avatar_url":"https://avatars.githubusercontent.com/u/15946080?v=3","gravatar_id":"","url":"https://api.github.com/users/rtaket","html_url":"https://github.com/rtaket","followers_url":"https://api.github.com/users/rtaket/followers","following_url":"https://api.github.com/users/rtaket/following{/other_user}","gists_url":"https://api.github.com/users/rtaket/gists{/gist_id}","starred_url":"https://api.github.com/users/rtaket/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rtaket/subscriptions","organizations_url":"https://api.github.com/users/rtaket/orgs","repos_url":"https://api.github.com/users/rtaket/repos","events_url":"https://api.github.com/users/rtaket/events{/privacy}","received_events_url":"https://api.github.com/users/rtaket/received_events","type":"User","site_admin":false},"body":"Here's the trace listener library I normally use. It has some features that make the log easier to read. For example, it will log the timestamp, machine name, thread id for the message. This helps for multithreaded apps or apps which are run on remote machines. It also creates a new log file per run and rolls over to a new file when the log file gets too large (for long running apps.)\r\nWe don't need to use all (or any) of these. But it might help...","created_at":"2016-02-12T21:51:55Z","updated_at":"2016-02-15T17:56:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a03f4157f2b689245d7969e41f2b3bb11a76ca6e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/9/commits","review_comments_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/9/comments","review_comment_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues/9/comments","statuses_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/statuses/ca530680892b63a3f5c2a43181495c318f7cae6e","head":{"label":"jinujoseph:elfie-tracelisteners","ref":"elfie-tracelisteners","sha":"ca530680892b63a3f5c2a43181495c318f7cae6e","user":{"login":"jinujoseph","id":12449387,"avatar_url":"https://avatars.githubusercontent.com/u/12449387?v=3","gravatar_id":"","url":"https://api.github.com/users/jinujoseph","html_url":"https://github.com/jinujoseph","followers_url":"https://api.github.com/users/jinujoseph/followers","following_url":"https://api.github.com/users/jinujoseph/following{/other_user}","gists_url":"https://api.github.com/users/jinujoseph/gists{/gist_id}","starred_url":"https://api.github.com/users/jinujoseph/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jinujoseph/subscriptions","organizations_url":"https://api.github.com/users/jinujoseph/orgs","repos_url":"https://api.github.com/users/jinujoseph/repos","events_url":"https://api.github.com/users/jinujoseph/events{/privacy}","received_events_url":"https://api.github.com/users/jinujoseph/received_events","type":"User","site_admin":false},"repo":{"id":50959180,"name":"NuGet.Services.Metadata","full_name":"jinujoseph/NuGet.Services.Metadata","owner":{"login":"jinujoseph","id":12449387,"avatar_url":"https://avatars.githubusercontent.com/u/12449387?v=3","gravatar_id":"","url":"https://api.github.com/users/jinujoseph","html_url":"https://github.com/jinujoseph","followers_url":"https://api.github.com/users/jinujoseph/followers","following_url":"https://api.github.com/users/jinujoseph/following{/other_user}","gists_url":"https://api.github.com/users/jinujoseph/gists{/gist_id}","starred_url":"https://api.github.com/users/jinujoseph/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jinujoseph/subscriptions","organizations_url":"https://api.github.com/users/jinujoseph/orgs","repos_url":"https://api.github.com/users/jinujoseph/repos","events_url":"https://api.github.com/users/jinujoseph/events{/privacy}","received_events_url":"https://api.github.com/users/jinujoseph/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jinujoseph/NuGet.Services.Metadata","description":"NuGet's Metadata Service","fork":true,"url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata","forks_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/forks","keys_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/teams","hooks_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/hooks","issue_events_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues/events{/number}","events_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/events","assignees_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/assignees{/user}","branches_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/branches{/branch}","tags_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/tags","blobs_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/refs{/sha}","trees_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/statuses/{sha}","languages_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/languages","stargazers_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/stargazers","contributors_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/contributors","subscribers_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/subscribers","subscription_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/subscription","commits_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/commits{/sha}","git_commits_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/commits{/sha}","comments_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/comments{/number}","issue_comment_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues/comments{/number}","contents_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/contents/{+path}","compare_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/merges","archive_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/downloads","issues_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues{/number}","pulls_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls{/number}","milestones_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/milestones{/number}","notifications_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/labels{/name}","releases_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/releases{/id}","deployments_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/deployments","created_at":"2016-02-02T23:22:32Z","updated_at":"2016-02-02T23:22:34Z","pushed_at":"2016-02-15T17:40:04Z","git_url":"git://github.com/jinujoseph/NuGet.Services.Metadata.git","ssh_url":"git@github.com:jinujoseph/NuGet.Services.Metadata.git","clone_url":"https://github.com/jinujoseph/NuGet.Services.Metadata.git","svn_url":"https://github.com/jinujoseph/NuGet.Services.Metadata","homepage":null,"size":23979,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"jinujoseph:master","ref":"master","sha":"f79fddc18ebba6001713ce4f6c54273418f34386","user":{"login":"jinujoseph","id":12449387,"avatar_url":"https://avatars.githubusercontent.com/u/12449387?v=3","gravatar_id":"","url":"https://api.github.com/users/jinujoseph","html_url":"https://github.com/jinujoseph","followers_url":"https://api.github.com/users/jinujoseph/followers","following_url":"https://api.github.com/users/jinujoseph/following{/other_user}","gists_url":"https://api.github.com/users/jinujoseph/gists{/gist_id}","starred_url":"https://api.github.com/users/jinujoseph/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jinujoseph/subscriptions","organizations_url":"https://api.github.com/users/jinujoseph/orgs","repos_url":"https://api.github.com/users/jinujoseph/repos","events_url":"https://api.github.com/users/jinujoseph/events{/privacy}","received_events_url":"https://api.github.com/users/jinujoseph/received_events","type":"User","site_admin":false},"repo":{"id":50959180,"name":"NuGet.Services.Metadata","full_name":"jinujoseph/NuGet.Services.Metadata","owner":{"login":"jinujoseph","id":12449387,"avatar_url":"https://avatars.githubusercontent.com/u/12449387?v=3","gravatar_id":"","url":"https://api.github.com/users/jinujoseph","html_url":"https://github.com/jinujoseph","followers_url":"https://api.github.com/users/jinujoseph/followers","following_url":"https://api.github.com/users/jinujoseph/following{/other_user}","gists_url":"https://api.github.com/users/jinujoseph/gists{/gist_id}","starred_url":"https://api.github.com/users/jinujoseph/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jinujoseph/subscriptions","organizations_url":"https://api.github.com/users/jinujoseph/orgs","repos_url":"https://api.github.com/users/jinujoseph/repos","events_url":"https://api.github.com/users/jinujoseph/events{/privacy}","received_events_url":"https://api.github.com/users/jinujoseph/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jinujoseph/NuGet.Services.Metadata","description":"NuGet's Metadata Service","fork":true,"url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata","forks_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/forks","keys_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/teams","hooks_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/hooks","issue_events_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues/events{/number}","events_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/events","assignees_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/assignees{/user}","branches_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/branches{/branch}","tags_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/tags","blobs_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/refs{/sha}","trees_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/statuses/{sha}","languages_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/languages","stargazers_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/stargazers","contributors_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/contributors","subscribers_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/subscribers","subscription_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/subscription","commits_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/commits{/sha}","git_commits_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/git/commits{/sha}","comments_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/comments{/number}","issue_comment_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues/comments{/number}","contents_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/contents/{+path}","compare_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/merges","archive_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/downloads","issues_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues{/number}","pulls_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls{/number}","milestones_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/milestones{/number}","notifications_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/labels{/name}","releases_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/releases{/id}","deployments_url":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/deployments","created_at":"2016-02-02T23:22:32Z","updated_at":"2016-02-02T23:22:34Z","pushed_at":"2016-02-15T17:40:04Z","git_url":"git://github.com/jinujoseph/NuGet.Services.Metadata.git","ssh_url":"git@github.com:jinujoseph/NuGet.Services.Metadata.git","clone_url":"https://github.com/jinujoseph/NuGet.Services.Metadata.git","svn_url":"https://github.com/jinujoseph/NuGet.Services.Metadata","homepage":null,"size":23979,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/9"},"html":{"href":"https://github.com/jinujoseph/NuGet.Services.Metadata/pull/9"},"issue":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues/9"},"comments":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/issues/9/comments"},"review_comments":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/9/comments"},"review_comment":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/pulls/9/commits"},"statuses":{"href":"https://api.github.com/repos/jinujoseph/NuGet.Services.Metadata/statuses/ca530680892b63a3f5c2a43181495c318f7cae6e"}}}}