{"action":"created","comment":{"url":"https://api.github.com/repos/nats-io/gnatsd/pulls/comments/197579376","pull_request_review_id":131346372,"id":197579376,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NzU3OTM3Ng==","diff_hunk":"@@ -1147,3 +1156,180 @@ func (s *Server) getClientConnectURLs() []string {\n \n \treturn urls\n }\n+\n+// if the ip is not specified is not resolved, attempt to resolve it\n+func resolveHostPorts(addr net.Listener) []string {\n+\thostPorts := make([]string, 0)\n+\thp := addr.Addr().(*net.TCPAddr)\n+\tport := strconv.Itoa(hp.Port)\n+\tif hp.IP.IsUnspecified() {\n+\t\tvar ip net.IP\n+\t\tifaces, _ := net.Interfaces()\n+\t\tfor _, i := range ifaces {\n+\t\t\taddrs, _ := i.Addrs()\n+\t\t\tfor _, addr := range addrs {\n+\t\t\t\tswitch v := addr.(type) {\n+\t\t\t\tcase *net.IPNet:\n+\t\t\t\t\tip = v.IP\n+\t\t\t\t\thostPorts = append(hostPorts, net.JoinHostPort(ip.String(), port))\n+\t\t\t\tcase *net.IPAddr:\n+\t\t\t\t\tip = v.IP\n+\t\t\t\t\thostPorts = append(hostPorts, net.JoinHostPort(ip.String(), port))\n+\t\t\t\tdefault:\n+\t\t\t\t\tcontinue\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t} else {\n+\t\thostPorts = append(hostPorts, net.JoinHostPort(hp.IP.String(), port))\n+\t}\n+\treturn hostPorts\n+}\n+\n+// format the address of a net.Listener with a protocol\n+func formatURL(protocol string, addr net.Listener) []string {\n+\thostports := resolveHostPorts(addr)\n+\tfor i, hp := range hostports {\n+\t\thostports[i] = fmt.Sprintf(\"%s://%s\", protocol, hp)\n+\t}\n+\treturn hostports\n+}\n+\n+// Ports describes URLs that the server can be contacted in\n+type Ports struct {\n+\tNats       []string `json:\"nats,omitempty\"`\n+\tMonitoring []string `json:\"monitoring,omitempty\"`\n+\tCluster    []string `json:\"cluster,omitempty\"`\n+\tProfile    []string `json:\"profile,omitempty\"`\n+}\n+\n+// Returns a Ports struct describing ports where the server can be contacted\n+func (s *Server) PortsInfo(opts *Options) Ports {\n+\ts.mu.Lock()\n+\tinfo := s.copyInfo()\n+\tlistener := s.listener\n+\thttpListener := s.http\n+\tclusterListener := s.routeListener\n+\tprofileListener := s.profiler\n+\ts.mu.Unlock()\n+\n+\tports := Ports{}\n+\n+\tif listener != nil {\n+\t\tnatsProto := \"nats\"\n+\t\tif info.TLSRequired {\n+\t\t\tnatsProto = \"tls\"\n+\t\t}\n+\t\tports.Nats = formatURL(natsProto, listener)\n+\t}\n+\n+\tif httpListener != nil {\n+\t\tmonProto := \"http\"\n+\t\tif opts.HTTPSPort != 0 {\n+\t\t\tmonProto = \"https\"\n+\t\t}\n+\t\tports.Monitoring = formatURL(monProto, httpListener)\n+\t}\n+\n+\tif clusterListener != nil {\n+\t\tclusterProto := \"nats\"\n+\t\tif opts.Cluster.TLSConfig != nil {\n+\t\t\tclusterProto = \"tls\"\n+\t\t}\n+\t\tports.Cluster = formatURL(clusterProto, clusterListener)\n+\t}\n+\n+\tif profileListener != nil {\n+\t\tports.Profile = formatURL(\"http\", profileListener)\n+\t}\n+\n+\treturn ports\n+}\n+\n+// Returns the portsFile or empty string if not set\n+func (s *Server) PortsFile(dirname string) string {\n+\tif dirname == _EMPTY_ {\n+\t\treturn _EMPTY_\n+\t}\n+\treturn path.Join(dirname, fmt.Sprintf(\"%s_%d.ports\", path.Base(os.Args[0]), os.Getpid()))\n+}\n+\n+func (s *Server) deletePortsFile(dirname string) {\n+\tportsFile := s.PortsFile(dirname)\n+\tif portsFile != \"\" {\n+\t\tif err := os.Remove(portsFile); err != nil {\n+\t\t\ts.Errorf(\"Error cleaning up ports file %s: %v\", portsFile, err)\n+\t\t}\n+\t}\n+}\n+\n+// Writes a file with a serialized Ports to the specified ports_file_dir.\n+// The name of the file is `exename_pid.ports`, typically gnatsd_pid.ports.\n+// if ports file is not set, this function has no effect\n+func (s *Server) logPorts() {\n+\topts := s.getOpts()\n+\tportsFile := s.PortsFile(opts.PortsFileDir)\n+\tif portsFile != _EMPTY_ {\n+\t\tgo func() {\n+\t\t\tif s.ReadyForListeners(opts, 5*time.Second) {\n+\t\t\t\tinfo := s.PortsInfo(opts)\n+\t\t\t\tdata, err := json.Marshal(info)\n+\t\t\t\tif err != nil {\n+\t\t\t\t\ts.Errorf(\"Error marshaling ports file: %v\", err)\n+\t\t\t\t\treturn\n+\t\t\t\t}\n+\t\t\t\tif err := ioutil.WriteFile(portsFile, data, 0666); err != nil {\n+\t\t\t\t\ts.Errorf(\"Error writing ports file (%s): %v\", portsFile, err)\n+\t\t\t\t\treturn\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}()\n+\t}\n+}\n+\n+// waits until a calculated list of listeners is resolved or a timeout\n+func (s *Server) ReadyForListeners(opts *Options, dur time.Duration) bool {\n+\t// this to allow external\n+\tif opts == nil {\n+\t\topts = s.getOpts()\n+\t}\n+\tend := time.Now().Add(dur)\n+\tfor time.Now().Before(end) {\n+\t\ts.mu.Lock()\n+\t\tshuttingDown := s.shutdown\n+\t\tlisteners := s.serviceListeners(opts)\n+\t\ts.mu.Unlock()\n+\n+\t\tif shuttingDown {\n+\t\t\treturn false\n+\t\t}\n+\t\tok := true\n+\t\tfor _, l := range listeners {\n+\t\t\tif ok {\n+\t\t\t\tok = l != nil\n+\t\t\t}\n+\t\t}\n+\t\tif ok {\n+\t\t\treturn true\n+\t\t}\n+\t\ttime.Sleep(25 * time.Millisecond)","path":"server/server.go","position":199,"original_position":199,"commit_id":"c35607cd956bfb2a53097055292c9d2f7917b28c","original_commit_id":"c35607cd956bfb2a53097055292c9d2f7917b28c","user":{"login":"kozlovic","id":13736691,"node_id":"MDQ6VXNlcjEzNzM2Njkx","avatar_url":"https://avatars3.githubusercontent.com/u/13736691?v=4","gravatar_id":"","url":"https://api.github.com/users/kozlovic","html_url":"https://github.com/kozlovic","followers_url":"https://api.github.com/users/kozlovic/followers","following_url":"https://api.github.com/users/kozlovic/following{/other_user}","gists_url":"https://api.github.com/users/kozlovic/gists{/gist_id}","starred_url":"https://api.github.com/users/kozlovic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kozlovic/subscriptions","organizations_url":"https://api.github.com/users/kozlovic/orgs","repos_url":"https://api.github.com/users/kozlovic/repos","events_url":"https://api.github.com/users/kozlovic/events{/privacy}","received_events_url":"https://api.github.com/users/kozlovic/received_events","type":"User","site_admin":false},"body":"Would replace this with:\r\n```\r\nselect {\r\n    case <-s.quitCh:\r\n        return false\r\n    case <-time.After(25*time.Millisecond):\r\n}","created_at":"2018-06-22T22:00:01Z","updated_at":"2018-06-22T22:00:44Z","html_url":"https://github.com/nats-io/gnatsd/pull/691#discussion_r197579376","pull_request_url":"https://api.github.com/repos/nats-io/gnatsd/pulls/691","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/nats-io/gnatsd/pulls/comments/197579376"},"html":{"href":"https://github.com/nats-io/gnatsd/pull/691#discussion_r197579376"},"pull_request":{"href":"https://api.github.com/repos/nats-io/gnatsd/pulls/691"}}},"pull_request":{"url":"https://api.github.com/repos/nats-io/gnatsd/pulls/691","id":196844107,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk2ODQ0MTA3","html_url":"https://github.com/nats-io/gnatsd/pull/691","diff_url":"https://github.com/nats-io/gnatsd/pull/691.diff","patch_url":"https://github.com/nats-io/gnatsd/pull/691.patch","issue_url":"https://api.github.com/repos/nats-io/gnatsd/issues/691","number":691,"state":"open","locked":false,"title":"[ADD] internal option to write a ports file `--ports_file_dir`","user":{"login":"aricart","id":1032976,"node_id":"MDQ6VXNlcjEwMzI5NzY=","avatar_url":"https://avatars0.githubusercontent.com/u/1032976?v=4","gravatar_id":"","url":"https://api.github.com/users/aricart","html_url":"https://github.com/aricart","followers_url":"https://api.github.com/users/aricart/followers","following_url":"https://api.github.com/users/aricart/following{/other_user}","gists_url":"https://api.github.com/users/aricart/gists{/gist_id}","starred_url":"https://api.github.com/users/aricart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aricart/subscriptions","organizations_url":"https://api.github.com/users/aricart/orgs","repos_url":"https://api.github.com/users/aricart/repos","events_url":"https://api.github.com/users/aricart/events{/privacy}","received_events_url":"https://api.github.com/users/aricart/received_events","type":"User","site_admin":false},"body":"The added option writes a file in the specified directory called `<exename>_<pid>.ports` which\r\ncontains a JSON representation of ports that the server has opened.\r\n\r\nThis change is intended to facilitate testing by having ports auto assigned and allow tests to locate and connect to the server port.","created_at":"2018-06-22T20:59:16Z","updated_at":"2018-06-22T22:00:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"925bdd064719aa93b2f92390954bd1cd428f8819","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/nats-io/gnatsd/pulls/691/commits","review_comments_url":"https://api.github.com/repos/nats-io/gnatsd/pulls/691/comments","review_comment_url":"https://api.github.com/repos/nats-io/gnatsd/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nats-io/gnatsd/issues/691/comments","statuses_url":"https://api.github.com/repos/nats-io/gnatsd/statuses/c35607cd956bfb2a53097055292c9d2f7917b28c","head":{"label":"nats-io:port-file","ref":"port-file","sha":"c35607cd956bfb2a53097055292c9d2f7917b28c","user":{"login":"nats-io","id":10203055,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwMjAzMDU1","avatar_url":"https://avatars2.githubusercontent.com/u/10203055?v=4","gravatar_id":"","url":"https://api.github.com/users/nats-io","html_url":"https://github.com/nats-io","followers_url":"https://api.github.com/users/nats-io/followers","following_url":"https://api.github.com/users/nats-io/following{/other_user}","gists_url":"https://api.github.com/users/nats-io/gists{/gist_id}","starred_url":"https://api.github.com/users/nats-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nats-io/subscriptions","organizations_url":"https://api.github.com/users/nats-io/orgs","repos_url":"https://api.github.com/users/nats-io/repos","events_url":"https://api.github.com/users/nats-io/events{/privacy}","received_events_url":"https://api.github.com/users/nats-io/received_events","type":"Organization","site_admin":false},"repo":{"id":6443435,"node_id":"MDEwOlJlcG9zaXRvcnk2NDQzNDM1","name":"gnatsd","full_name":"nats-io/gnatsd","owner":{"login":"nats-io","id":10203055,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwMjAzMDU1","avatar_url":"https://avatars2.githubusercontent.com/u/10203055?v=4","gravatar_id":"","url":"https://api.github.com/users/nats-io","html_url":"https://github.com/nats-io","followers_url":"https://api.github.com/users/nats-io/followers","following_url":"https://api.github.com/users/nats-io/following{/other_user}","gists_url":"https://api.github.com/users/nats-io/gists{/gist_id}","starred_url":"https://api.github.com/users/nats-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nats-io/subscriptions","organizations_url":"https://api.github.com/users/nats-io/orgs","repos_url":"https://api.github.com/users/nats-io/repos","events_url":"https://api.github.com/users/nats-io/events{/privacy}","received_events_url":"https://api.github.com/users/nats-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nats-io/gnatsd","description":"High-Performance server for NATS, the cloud native messaging system.","fork":false,"url":"https://api.github.com/repos/nats-io/gnatsd","forks_url":"https://api.github.com/repos/nats-io/gnatsd/forks","keys_url":"https://api.github.com/repos/nats-io/gnatsd/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nats-io/gnatsd/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nats-io/gnatsd/teams","hooks_url":"https://api.github.com/repos/nats-io/gnatsd/hooks","issue_events_url":"https://api.github.com/repos/nats-io/gnatsd/issues/events{/number}","events_url":"https://api.github.com/repos/nats-io/gnatsd/events","assignees_url":"https://api.github.com/repos/nats-io/gnatsd/assignees{/user}","branches_url":"https://api.github.com/repos/nats-io/gnatsd/branches{/branch}","tags_url":"https://api.github.com/repos/nats-io/gnatsd/tags","blobs_url":"https://api.github.com/repos/nats-io/gnatsd/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nats-io/gnatsd/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nats-io/gnatsd/git/refs{/sha}","trees_url":"https://api.github.com/repos/nats-io/gnatsd/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nats-io/gnatsd/statuses/{sha}","languages_url":"https://api.github.com/repos/nats-io/gnatsd/languages","stargazers_url":"https://api.github.com/repos/nats-io/gnatsd/stargazers","contributors_url":"https://api.github.com/repos/nats-io/gnatsd/contributors","subscribers_url":"https://api.github.com/repos/nats-io/gnatsd/subscribers","subscription_url":"https://api.github.com/repos/nats-io/gnatsd/subscription","commits_url":"https://api.github.com/repos/nats-io/gnatsd/commits{/sha}","git_commits_url":"https://api.github.com/repos/nats-io/gnatsd/git/commits{/sha}","comments_url":"https://api.github.com/repos/nats-io/gnatsd/comments{/number}","issue_comment_url":"https://api.github.com/repos/nats-io/gnatsd/issues/comments{/number}","contents_url":"https://api.github.com/repos/nats-io/gnatsd/contents/{+path}","compare_url":"https://api.github.com/repos/nats-io/gnatsd/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nats-io/gnatsd/merges","archive_url":"https://api.github.com/repos/nats-io/gnatsd/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nats-io/gnatsd/downloads","issues_url":"https://api.github.com/repos/nats-io/gnatsd/issues{/number}","pulls_url":"https://api.github.com/repos/nats-io/gnatsd/pulls{/number}","milestones_url":"https://api.github.com/repos/nats-io/gnatsd/milestones{/number}","notifications_url":"https://api.github.com/repos/nats-io/gnatsd/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nats-io/gnatsd/labels{/name}","releases_url":"https://api.github.com/repos/nats-io/gnatsd/releases{/id}","deployments_url":"https://api.github.com/repos/nats-io/gnatsd/deployments","created_at":"2012-10-29T16:12:24Z","updated_at":"2018-06-22T20:56:29Z","pushed_at":"2018-06-22T21:15:48Z","git_url":"git://github.com/nats-io/gnatsd.git","ssh_url":"git@github.com:nats-io/gnatsd.git","clone_url":"https://github.com/nats-io/gnatsd.git","svn_url":"https://github.com/nats-io/gnatsd","homepage":"https://nats.io","size":2602,"stargazers_count":4261,"watchers_count":4261,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":469,"mirror_url":null,"archived":false,"open_issues_count":46,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":469,"open_issues":46,"watchers":4261,"default_branch":"master"}},"base":{"label":"nats-io:master","ref":"master","sha":"e155332e69caa1455e74553c15b121d0c176d69b","user":{"login":"nats-io","id":10203055,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwMjAzMDU1","avatar_url":"https://avatars2.githubusercontent.com/u/10203055?v=4","gravatar_id":"","url":"https://api.github.com/users/nats-io","html_url":"https://github.com/nats-io","followers_url":"https://api.github.com/users/nats-io/followers","following_url":"https://api.github.com/users/nats-io/following{/other_user}","gists_url":"https://api.github.com/users/nats-io/gists{/gist_id}","starred_url":"https://api.github.com/users/nats-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nats-io/subscriptions","organizations_url":"https://api.github.com/users/nats-io/orgs","repos_url":"https://api.github.com/users/nats-io/repos","events_url":"https://api.github.com/users/nats-io/events{/privacy}","received_events_url":"https://api.github.com/users/nats-io/received_events","type":"Organization","site_admin":false},"repo":{"id":6443435,"node_id":"MDEwOlJlcG9zaXRvcnk2NDQzNDM1","name":"gnatsd","full_name":"nats-io/gnatsd","owner":{"login":"nats-io","id":10203055,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwMjAzMDU1","avatar_url":"https://avatars2.githubusercontent.com/u/10203055?v=4","gravatar_id":"","url":"https://api.github.com/users/nats-io","html_url":"https://github.com/nats-io","followers_url":"https://api.github.com/users/nats-io/followers","following_url":"https://api.github.com/users/nats-io/following{/other_user}","gists_url":"https://api.github.com/users/nats-io/gists{/gist_id}","starred_url":"https://api.github.com/users/nats-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nats-io/subscriptions","organizations_url":"https://api.github.com/users/nats-io/orgs","repos_url":"https://api.github.com/users/nats-io/repos","events_url":"https://api.github.com/users/nats-io/events{/privacy}","received_events_url":"https://api.github.com/users/nats-io/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nats-io/gnatsd","description":"High-Performance server for NATS, the cloud native messaging system.","fork":false,"url":"https://api.github.com/repos/nats-io/gnatsd","forks_url":"https://api.github.com/repos/nats-io/gnatsd/forks","keys_url":"https://api.github.com/repos/nats-io/gnatsd/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nats-io/gnatsd/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nats-io/gnatsd/teams","hooks_url":"https://api.github.com/repos/nats-io/gnatsd/hooks","issue_events_url":"https://api.github.com/repos/nats-io/gnatsd/issues/events{/number}","events_url":"https://api.github.com/repos/nats-io/gnatsd/events","assignees_url":"https://api.github.com/repos/nats-io/gnatsd/assignees{/user}","branches_url":"https://api.github.com/repos/nats-io/gnatsd/branches{/branch}","tags_url":"https://api.github.com/repos/nats-io/gnatsd/tags","blobs_url":"https://api.github.com/repos/nats-io/gnatsd/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nats-io/gnatsd/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nats-io/gnatsd/git/refs{/sha}","trees_url":"https://api.github.com/repos/nats-io/gnatsd/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nats-io/gnatsd/statuses/{sha}","languages_url":"https://api.github.com/repos/nats-io/gnatsd/languages","stargazers_url":"https://api.github.com/repos/nats-io/gnatsd/stargazers","contributors_url":"https://api.github.com/repos/nats-io/gnatsd/contributors","subscribers_url":"https://api.github.com/repos/nats-io/gnatsd/subscribers","subscription_url":"https://api.github.com/repos/nats-io/gnatsd/subscription","commits_url":"https://api.github.com/repos/nats-io/gnatsd/commits{/sha}","git_commits_url":"https://api.github.com/repos/nats-io/gnatsd/git/commits{/sha}","comments_url":"https://api.github.com/repos/nats-io/gnatsd/comments{/number}","issue_comment_url":"https://api.github.com/repos/nats-io/gnatsd/issues/comments{/number}","contents_url":"https://api.github.com/repos/nats-io/gnatsd/contents/{+path}","compare_url":"https://api.github.com/repos/nats-io/gnatsd/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nats-io/gnatsd/merges","archive_url":"https://api.github.com/repos/nats-io/gnatsd/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nats-io/gnatsd/downloads","issues_url":"https://api.github.com/repos/nats-io/gnatsd/issues{/number}","pulls_url":"https://api.github.com/repos/nats-io/gnatsd/pulls{/number}","milestones_url":"https://api.github.com/repos/nats-io/gnatsd/milestones{/number}","notifications_url":"https://api.github.com/repos/nats-io/gnatsd/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nats-io/gnatsd/labels{/name}","releases_url":"https://api.github.com/repos/nats-io/gnatsd/releases{/id}","deployments_url":"https://api.github.com/repos/nats-io/gnatsd/deployments","created_at":"2012-10-29T16:12:24Z","updated_at":"2018-06-22T20:56:29Z","pushed_at":"2018-06-22T21:15:48Z","git_url":"git://github.com/nats-io/gnatsd.git","ssh_url":"git@github.com:nats-io/gnatsd.git","clone_url":"https://github.com/nats-io/gnatsd.git","svn_url":"https://github.com/nats-io/gnatsd","homepage":"https://nats.io","size":2602,"stargazers_count":4261,"watchers_count":4261,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":469,"mirror_url":null,"archived":false,"open_issues_count":46,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":469,"open_issues":46,"watchers":4261,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nats-io/gnatsd/pulls/691"},"html":{"href":"https://github.com/nats-io/gnatsd/pull/691"},"issue":{"href":"https://api.github.com/repos/nats-io/gnatsd/issues/691"},"comments":{"href":"https://api.github.com/repos/nats-io/gnatsd/issues/691/comments"},"review_comments":{"href":"https://api.github.com/repos/nats-io/gnatsd/pulls/691/comments"},"review_comment":{"href":"https://api.github.com/repos/nats-io/gnatsd/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nats-io/gnatsd/pulls/691/commits"},"statuses":{"href":"https://api.github.com/repos/nats-io/gnatsd/statuses/c35607cd956bfb2a53097055292c9d2f7917b28c"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"kozlovic"}}