{"action":"created","comment":{"url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/comments/129468688","pull_request_review_id":52243889,"id":129468688,"diff_hunk":"@@ -2,119 +2,300 @@\n require \"logstash/inputs/base\"\n require \"logstash/namespace\"\n \n-require \"azure\"\n-require \"securerandom\"\n+# Azure Storage SDK for Ruby\n+require \"azure/storage\"\n+require 'json' # for registry content\n+require \"securerandom\" # for generating uuid.\n \n-# Reads events from Azure Blobs\n-class LogStash::Inputs::Azureblob < LogStash::Inputs::Base\n+# Registry item to coordinate between mulitple clients\n+class LogStash::Inputs::RegistryItem\n+  attr_accessor :file_path, :etag, :offset, :reader\n \n+  # Allow json serialization.\n+  def as_json(options={})\n+      {\n+          file_path: @file_path,\n+          etag: @etag,\n+          reader: @reader,\n+          offset: @offset\n+      }\n+  end # as_json\n+\n+  def to_json(*options)\n+      as_json(*options).to_json(*options)\n+  end # to_json\n+\n+  def initialize(file_path, etag, reader, offset = 0)\n+      @file_path = file_path\n+      @etag = etag\n+      @reader = reader\n+      @offset = offset\n+  end # initialize\n+end # class RegistryItem\n+\n+\n+# Logstash input plugin for Azure Blobs\n+#\n+# This logstash plugin gathers data from Microsoft Azure Blobs\n+class LogStash::Inputs::LogstashInputAzureblob < LogStash::Inputs::Base\n   config_name \"azureblob\"\n-  milestone 1\n-  \n+\n+  # If undefined, Logstash will complain, even if codec is unused.\n   default :codec, \"json_lines\"\n-  \n+\n+  # Set the account name for the azure storage account.\n   config :storage_account_name, :validate => :string\n+  \n+  # Set the key to access the storage account.\n   config :storage_access_key, :validate => :string\n   \n+  # Set the container of the blobs.\n   config :container, :validate => :string\n-  config :sleep_time, :validate => :number, :default => 10\n-  config :endpoint, :validate => :string, :default => \"core.windows.net\"\n-  config :backupmode, :validate => :boolean, :default => false \n   \n-  def initialize(*args)\n-    super(*args)\n-  end # def initialize\n+  # Set the endpoint for the blobs.\n+  #\n+  # The default, `core.windows.net` targets the public azure.\n+  config :endpoint, :validate => :string, :default => 'core.windows.net'\n+\n+  # Set the value of using backup mode.\n+  config :backupmode, :validate => :boolean, :default => false, :deprecated => true, :obsolete => 'This option is obsoleted and the settings will be ignored.'\n+  \n+  # Set the value for the registry file.\n+  #\n+  # The default, `data/registry`, is used to coordinate readings for various instances of the clients.\n+  config :registry_path, :validate => :string, :default => 'data/registry'\n   \n+  # Set how frequently messages should be sent.\n+  #\n+  # The default, `30`, means trigger a reading for the log every 30 seconds.\n+  config :interval, :validate => :number, :default => 30\n+\n   public\n   def register\n-    Azure.configure do |config|\n-      config.storage_account_name = @storage_account_name\n-      config.storage_access_key = @storage_access_key\n-      config.storage_blob_host = \"https://#{@storage_account_name}.blob.#{@endpoint}\"\n-    end\n-    @azure_blob = Azure::Blob::BlobService.new\n+    # this is the reader # for this specific instance.\n+    @reader = SecureRandom.uuid","path":"Logstash/logstash-input-azureblob/lib/logstash/inputs/azureblob.rb","position":94,"original_position":94,"commit_id":"070116faf2595164b0e541129be9bdddcac607fe","original_commit_id":"070116faf2595164b0e541129be9bdddcac607fe","user":{"login":"xiaomi7732","id":3674549,"avatar_url":"https://avatars2.githubusercontent.com/u/3674549?v=4","gravatar_id":"","url":"https://api.github.com/users/xiaomi7732","html_url":"https://github.com/xiaomi7732","followers_url":"https://api.github.com/users/xiaomi7732/followers","following_url":"https://api.github.com/users/xiaomi7732/following{/other_user}","gists_url":"https://api.github.com/users/xiaomi7732/gists{/gist_id}","starred_url":"https://api.github.com/users/xiaomi7732/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xiaomi7732/subscriptions","organizations_url":"https://api.github.com/users/xiaomi7732/orgs","repos_url":"https://api.github.com/users/xiaomi7732/repos","events_url":"https://api.github.com/users/xiaomi7732/events{/privacy}","received_events_url":"https://api.github.com/users/xiaomi7732/received_events","type":"User","site_admin":false},"body":"As you point out already, approaches 1 & 2 are not ideal either. For 2nd approach, handling multiple clients trying to create the same lock file without conflict already sounds like a disaster.\r\n\r\nThere are some other not ideal approaches:\r\n\r\n3. Allow user to set the readerid manually, so that the new client can take over whatever crashed. The defect would be user interactive needed and specifying duplicated reader id is going to break the mutex.\r\n4. Asking user to set the reader in the file to null manually. Also, requires user interactive, and may leads to invalid registry file.\r\n\r\nThat said, I don't see any of those trivial implementation.\r\n\r\nAnd according the document: [stop is called outside of the plugin thread](https://www.elastic.co/guide/en/logstash/current/contributing-to-logstash.html).\r\n\r\nAnd we also follow the example from the document for shutting down API: [sample code for the plugin shutdown APIs is available](https://github.com/logstash-plugins/logstash-input-example/blob/master/lib/logstash/inputs/example.rb)\r\n\r\nMy suggest on this is:\r\nOpen an issue to gathering feedback. If that is a real scenario, we then spend effort to polish that scenario.\r\nWhat do you say?","created_at":"2017-07-26T02:11:00Z","updated_at":"2017-07-26T02:11:00Z","html_url":"https://github.com/Azure/azure-diagnostics-tools/pull/79#discussion_r129468688","pull_request_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/79","_links":{"self":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/comments/129468688"},"html":{"href":"https://github.com/Azure/azure-diagnostics-tools/pull/79#discussion_r129468688"},"pull_request":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/79"}}},"pull_request":{"url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/79","id":132178508,"html_url":"https://github.com/Azure/azure-diagnostics-tools/pull/79","diff_url":"https://github.com/Azure/azure-diagnostics-tools/pull/79.diff","patch_url":"https://github.com/Azure/azure-diagnostics-tools/pull/79.patch","issue_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/issues/79","number":79,"state":"open","locked":false,"title":"New implementation of logstash-input-azureblob","user":{"login":"xiaomi7732","id":3674549,"avatar_url":"https://avatars2.githubusercontent.com/u/3674549?v=4","gravatar_id":"","url":"https://api.github.com/users/xiaomi7732","html_url":"https://github.com/xiaomi7732","followers_url":"https://api.github.com/users/xiaomi7732/followers","following_url":"https://api.github.com/users/xiaomi7732/following{/other_user}","gists_url":"https://api.github.com/users/xiaomi7732/gists{/gist_id}","starred_url":"https://api.github.com/users/xiaomi7732/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xiaomi7732/subscriptions","organizations_url":"https://api.github.com/users/xiaomi7732/orgs","repos_url":"https://api.github.com/users/xiaomi7732/repos","events_url":"https://api.github.com/users/xiaomi7732/events{/privacy}","received_events_url":"https://api.github.com/users/xiaomi7732/received_events","type":"User","site_admin":false},"body":"Provides offset reading ability to reading logs that is appended to existing files;\r\nProvide the ability to allow restart the gathering scenario;\r\nAvoid using page-blob to make the plugin work for storage account that does not support page blobs;","created_at":"2017-07-25T01:30:27Z","updated_at":"2017-07-26T02:11:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ce1a5976030028c6171077353d5c6210267c752a","assignee":null,"assignees":[],"requested_reviewers":[{"login":"whiskeyjay","id":15821566,"avatar_url":"https://avatars3.githubusercontent.com/u/15821566?v=4","gravatar_id":"","url":"https://api.github.com/users/whiskeyjay","html_url":"https://github.com/whiskeyjay","followers_url":"https://api.github.com/users/whiskeyjay/followers","following_url":"https://api.github.com/users/whiskeyjay/following{/other_user}","gists_url":"https://api.github.com/users/whiskeyjay/gists{/gist_id}","starred_url":"https://api.github.com/users/whiskeyjay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/whiskeyjay/subscriptions","organizations_url":"https://api.github.com/users/whiskeyjay/orgs","repos_url":"https://api.github.com/users/whiskeyjay/repos","events_url":"https://api.github.com/users/whiskeyjay/events{/privacy}","received_events_url":"https://api.github.com/users/whiskeyjay/received_events","type":"User","site_admin":false},{"login":"yantang-msft","id":15950190,"avatar_url":"https://avatars0.githubusercontent.com/u/15950190?v=4","gravatar_id":"","url":"https://api.github.com/users/yantang-msft","html_url":"https://github.com/yantang-msft","followers_url":"https://api.github.com/users/yantang-msft/followers","following_url":"https://api.github.com/users/yantang-msft/following{/other_user}","gists_url":"https://api.github.com/users/yantang-msft/gists{/gist_id}","starred_url":"https://api.github.com/users/yantang-msft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yantang-msft/subscriptions","organizations_url":"https://api.github.com/users/yantang-msft/orgs","repos_url":"https://api.github.com/users/yantang-msft/repos","events_url":"https://api.github.com/users/yantang-msft/events{/privacy}","received_events_url":"https://api.github.com/users/yantang-msft/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/79/commits","review_comments_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/79/comments","review_comment_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/issues/79/comments","statuses_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/statuses/070116faf2595164b0e541129be9bdddcac607fe","head":{"label":"xiaomi7732:new-logstash-input-azureblob","ref":"new-logstash-input-azureblob","sha":"070116faf2595164b0e541129be9bdddcac607fe","user":{"login":"xiaomi7732","id":3674549,"avatar_url":"https://avatars2.githubusercontent.com/u/3674549?v=4","gravatar_id":"","url":"https://api.github.com/users/xiaomi7732","html_url":"https://github.com/xiaomi7732","followers_url":"https://api.github.com/users/xiaomi7732/followers","following_url":"https://api.github.com/users/xiaomi7732/following{/other_user}","gists_url":"https://api.github.com/users/xiaomi7732/gists{/gist_id}","starred_url":"https://api.github.com/users/xiaomi7732/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xiaomi7732/subscriptions","organizations_url":"https://api.github.com/users/xiaomi7732/orgs","repos_url":"https://api.github.com/users/xiaomi7732/repos","events_url":"https://api.github.com/users/xiaomi7732/events{/privacy}","received_events_url":"https://api.github.com/users/xiaomi7732/received_events","type":"User","site_admin":false},"repo":{"id":98247534,"name":"azure-diagnostics-tools","full_name":"xiaomi7732/azure-diagnostics-tools","owner":{"login":"xiaomi7732","id":3674549,"avatar_url":"https://avatars2.githubusercontent.com/u/3674549?v=4","gravatar_id":"","url":"https://api.github.com/users/xiaomi7732","html_url":"https://github.com/xiaomi7732","followers_url":"https://api.github.com/users/xiaomi7732/followers","following_url":"https://api.github.com/users/xiaomi7732/following{/other_user}","gists_url":"https://api.github.com/users/xiaomi7732/gists{/gist_id}","starred_url":"https://api.github.com/users/xiaomi7732/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xiaomi7732/subscriptions","organizations_url":"https://api.github.com/users/xiaomi7732/orgs","repos_url":"https://api.github.com/users/xiaomi7732/repos","events_url":"https://api.github.com/users/xiaomi7732/events{/privacy}","received_events_url":"https://api.github.com/users/xiaomi7732/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/xiaomi7732/azure-diagnostics-tools","description":"Plugins and tools for collecting, processing, managing, and visualizing diagnostics data and configuration","fork":true,"url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools","forks_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/forks","keys_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/teams","hooks_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/hooks","issue_events_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/issues/events{/number}","events_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/events","assignees_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/assignees{/user}","branches_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/branches{/branch}","tags_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/tags","blobs_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/statuses/{sha}","languages_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/languages","stargazers_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/stargazers","contributors_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/contributors","subscribers_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/subscribers","subscription_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/subscription","commits_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/contents/{+path}","compare_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/merges","archive_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/downloads","issues_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/issues{/number}","pulls_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/pulls{/number}","milestones_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/milestones{/number}","notifications_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/labels{/name}","releases_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/releases{/id}","deployments_url":"https://api.github.com/repos/xiaomi7732/azure-diagnostics-tools/deployments","created_at":"2017-07-25T00:46:29Z","updated_at":"2017-07-25T00:46:31Z","pushed_at":"2017-07-25T01:06:29Z","git_url":"git://github.com/xiaomi7732/azure-diagnostics-tools.git","ssh_url":"git@github.com:xiaomi7732/azure-diagnostics-tools.git","clone_url":"https://github.com/xiaomi7732/azure-diagnostics-tools.git","svn_url":"https://github.com/xiaomi7732/azure-diagnostics-tools","homepage":null,"size":500,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Azure:master","ref":"master","sha":"2a983255c496e6ffb30fa7b89623af36de4ad1f7","user":{"login":"Azure","id":6844498,"avatar_url":"https://avatars0.githubusercontent.com/u/6844498?v=4","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"repo":{"id":52837665,"name":"azure-diagnostics-tools","full_name":"Azure/azure-diagnostics-tools","owner":{"login":"Azure","id":6844498,"avatar_url":"https://avatars0.githubusercontent.com/u/6844498?v=4","gravatar_id":"","url":"https://api.github.com/users/Azure","html_url":"https://github.com/Azure","followers_url":"https://api.github.com/users/Azure/followers","following_url":"https://api.github.com/users/Azure/following{/other_user}","gists_url":"https://api.github.com/users/Azure/gists{/gist_id}","starred_url":"https://api.github.com/users/Azure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Azure/subscriptions","organizations_url":"https://api.github.com/users/Azure/orgs","repos_url":"https://api.github.com/users/Azure/repos","events_url":"https://api.github.com/users/Azure/events{/privacy}","received_events_url":"https://api.github.com/users/Azure/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Azure/azure-diagnostics-tools","description":"Plugins and tools for collecting, processing, managing, and visualizing diagnostics data and configuration","fork":false,"url":"https://api.github.com/repos/Azure/azure-diagnostics-tools","forks_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/forks","keys_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/teams","hooks_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/hooks","issue_events_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/issues/events{/number}","events_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/events","assignees_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/assignees{/user}","branches_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/branches{/branch}","tags_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/tags","blobs_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/statuses/{sha}","languages_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/languages","stargazers_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/stargazers","contributors_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/contributors","subscribers_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/subscribers","subscription_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/subscription","commits_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/contents/{+path}","compare_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/merges","archive_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/downloads","issues_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/issues{/number}","pulls_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls{/number}","milestones_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/milestones{/number}","notifications_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/labels{/name}","releases_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/releases{/id}","deployments_url":"https://api.github.com/repos/Azure/azure-diagnostics-tools/deployments","created_at":"2016-03-01T01:16:52Z","updated_at":"2017-06-12T02:33:17Z","pushed_at":"2017-07-25T01:30:27Z","git_url":"git://github.com/Azure/azure-diagnostics-tools.git","ssh_url":"git@github.com:Azure/azure-diagnostics-tools.git","clone_url":"https://github.com/Azure/azure-diagnostics-tools.git","svn_url":"https://github.com/Azure/azure-diagnostics-tools","homepage":null,"size":496,"stargazers_count":36,"watchers_count":36,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":43,"mirror_url":null,"open_issues_count":25,"forks":43,"open_issues":25,"watchers":36,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/79"},"html":{"href":"https://github.com/Azure/azure-diagnostics-tools/pull/79"},"issue":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/issues/79"},"comments":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/issues/79/comments"},"review_comments":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/79/comments"},"review_comment":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/pulls/79/commits"},"statuses":{"href":"https://api.github.com/repos/Azure/azure-diagnostics-tools/statuses/070116faf2595164b0e541129be9bdddcac607fe"}}}}
{"actor":{"display_login":"xiaomi7732"}}