{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/comments/182582742","pull_request_review_id":113408287,"id":182582742,"diff_hunk":"@@ -0,0 +1,290 @@\n+/**\n+ * Copyright 2018 Google LLC. All Rights Reserved.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *      http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+#include \"serialize.h\"\n+#include \"proto.h\"\n+\n+ValueType::ValueType(int64_t typeX, int64_t unitX)\n+    : typeX(typeX), unitX(unitX) {}\n+\n+void ValueType::encode(std::vector<char>* buffer) const {\n+  encodeInt64Opt(1, typeX, buffer);\n+  encodeInt64Opt(2, unitX, buffer);\n+}\n+\n+int64_t ValueType::getTypeX() { return typeX; }\n+\n+int64_t ValueType::getUnitX() { return unitX; }\n+\n+Label::Label(int64_t keyX, int64_t strX, int64_t num, int64_t unitX)\n+    : keyX(keyX), strX(strX), num(num), unitX(unitX) {}\n+\n+int64_t Label::getKeyX() { return keyX; }\n+\n+int64_t Label::getStrX() { return strX; }\n+\n+int64_t Label::getNum() { return num; }\n+\n+int64_t Label::getUnitX() { return unitX; }\n+\n+void Label::encode(std::vector<char>* buffer) const {\n+  encodeInt64Opt(1, keyX, buffer);\n+  encodeInt64Opt(2, strX, buffer);\n+  encodeInt64Opt(3, num, buffer);\n+  encodeInt64Opt(4, unitX, buffer);\n+}\n+\n+Mapping::Mapping(uint64_t id, uint64_t start, uint64_t limit, uint64_t offset,\n+                 uint64_t fileX, uint64_t buildIDX, bool hasFunctions,\n+                 bool hasFilenames, bool hasLineNumbers, bool hasInlineFrames)\n+    : id(id),\n+      start(start),\n+      limit(limit),\n+      offset(offset),\n+      fileX(fileX),\n+      buildIDX(buildIDX),\n+      hasFunctions(hasFunctions),\n+      hasFilenames(hasFilenames),\n+      hasLineNumbers(hasLineNumbers),\n+      hasInlineFrames(hasInlineFrames) {}\n+\n+uint64_t Mapping::getID() { return id; }\n+uint64_t Mapping::getStart() { return start; }\n+uint64_t Mapping::getLimit() { return limit; }\n+uint64_t Mapping::getOffset() { return offset; }\n+uint64_t Mapping::getFileX() { return fileX; }\n+uint64_t Mapping::getBuildIDX() { return buildIDX; }\n+bool Mapping::getHasFunctions() { return hasFunctions; }\n+bool Mapping::getHasFilenames() { return hasFilenames; }\n+bool Mapping::getHasLineNumbers() { return hasLineNumbers; }\n+bool Mapping::getHasInlineFrames() { return hasInlineFrames; }\n+\n+void Mapping::encode(std::vector<char>* buffer) const {\n+  encodeUint64Opt(1, id, buffer);\n+  encodeUint64Opt(2, start, buffer);\n+  encodeUint64Opt(3, limit, buffer);\n+  encodeUint64Opt(4, offset, buffer);\n+  encodeInt64Opt(5, fileX, buffer);\n+  encodeInt64Opt(6, buildIDX, buffer);\n+  encodeBoolOpt(7, hasFunctions, buffer);\n+  encodeBoolOpt(8, hasFilenames, buffer);\n+  encodeBoolOpt(9, hasLineNumbers, buffer);\n+  encodeBoolOpt(10, hasInlineFrames, buffer);\n+}\n+\n+Line::Line(uint64_t functionID, int64_t line)\n+    : functionID(functionID), line(line) {}\n+\n+uint64_t Line::getFunctionID() { return functionID; }\n+\n+int64_t Line::getLine() { return line; }\n+\n+void Line::encode(std::vector<char>* buffer) const {\n+  encodeUint64Opt(1, functionID, buffer);\n+  encodeInt64Opt(2, line, buffer);\n+}\n+\n+ProfileFunction::ProfileFunction(uint64_t id, int64_t nameX,\n+                                 int64_t systemNameX, int64_t filenameX,\n+                                 int64_t startLine)\n+    : id(id),\n+      nameX(nameX),\n+      systemNameX(systemNameX),\n+      filenameX(filenameX),\n+      startLine(startLine) {}\n+\n+uint64_t ProfileFunction::getID() { return id; }\n+int64_t ProfileFunction::getNameX() { return nameX; }\n+int64_t ProfileFunction::getSystemNameX() { return systemNameX; }\n+int64_t ProfileFunction::getFilenameX() { return filenameX; }\n+int64_t ProfileFunction::getStartLine() { return startLine; }\n+\n+void ProfileFunction::encode(std::vector<char>* buffer) const {\n+  encodeUint64Opt(1, id, buffer);\n+  encodeInt64Opt(2, nameX, buffer);\n+  encodeInt64Opt(3, systemNameX, buffer);\n+  encodeInt64Opt(4, filenameX, buffer);\n+  encodeInt64Opt(5, startLine, buffer);\n+}\n+\n+ProfileLocation::ProfileLocation(uint64_t id, uint64_t mappingID,\n+                                 uint64_t address, std::vector<Line> line,\n+                                 bool isFolded)\n+    : id(id),\n+      mappingID(mappingID),\n+      address(address),\n+      line(line),\n+      isFolded(isFolded) {}\n+\n+uint64_t ProfileLocation::getID() { return id; }\n+\n+uint64_t ProfileLocation::getMappingID() { return mappingID; }\n+\n+uint64_t ProfileLocation::getAddress() { return address; }\n+\n+std::vector<Line> ProfileLocation::getLine() { return line; }\n+\n+bool ProfileLocation::getIsFolded() { return isFolded; }\n+\n+void ProfileLocation::encode(std::vector<char>* buffer) const {\n+  encodeUint64Opt(1, id, buffer);\n+  encodeInt64Opt(2, mappingID, buffer);\n+  encodeInt64Opt(3, address, buffer);\n+  encodeRepeatedMessage<Line>(4, line, buffer);\n+  encodeBoolOpt(5, isFolded, buffer);\n+}\n+\n+Sample::Sample(std::vector<uint64_t> locationID, std::vector<int64_t> value,\n+               std::vector<Label> label)\n+    : locationID(locationID), value(value), label(label) {}\n+\n+std::vector<uint64_t> Sample::getLocationID() { return locationID; }\n+\n+std::vector<int64_t> Sample::getValue() { return value; }\n+\n+std::vector<Label> Sample::getLabel() { return label; }\n+\n+void Sample::encode(std::vector<char>* buffer) const {\n+  encodeUint64s(1, locationID, buffer);\n+  encodeInt64s(2, value, buffer);\n+  encodeRepeatedMessage<Label>(3, label, buffer);\n+}\n+\n+Profile::Profile(std::string periodType, std::string periodUnit, int64_t period,\n+                 int64_t timeNanos, int64_t durationNanos,\n+                 std::string dropFrames, std::string keepFramesX)\n+    : period(period),\n+      timeNanos(timeNanos),\n+      durationNanos(durationNanos),\n+      defaultSampleTypeX(0) {\n+  // first index of strings must be \"\"\n+  stringID(\"\");\n+  this->periodType = ValueType(stringID(periodType), stringID(periodUnit));\n+  this->dropFramesX = stringID(dropFrames);\n+  this->keepFramesX = stringID(keepFramesX);\n+}\n+\n+void Profile::addSampleType(std::string type, std::string unit) {\n+  int64_t typeX = stringID(type);\n+  int64_t unitX = stringID(unit);\n+  sampleType.push_back(ValueType(typeX, unitX));\n+}\n+\n+void Profile::addSample(std::unique_ptr<Node>& node,","path":"bindings/serialize.cc","position":186,"original_position":186,"commit_id":"f7c02d8ba2104aead5831607656e08fa3c3a68c8","original_commit_id":"c17e6edaecfedc3fdb1c089a86bd719213049c0a","user":{"login":"nolanmar511","id":14046562,"avatar_url":"https://avatars0.githubusercontent.com/u/14046562?v=4","gravatar_id":"","url":"https://api.github.com/users/nolanmar511","html_url":"https://github.com/nolanmar511","followers_url":"https://api.github.com/users/nolanmar511/followers","following_url":"https://api.github.com/users/nolanmar511/following{/other_user}","gists_url":"https://api.github.com/users/nolanmar511/gists{/gist_id}","starred_url":"https://api.github.com/users/nolanmar511/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nolanmar511/subscriptions","organizations_url":"https://api.github.com/users/nolanmar511/orgs","repos_url":"https://api.github.com/users/nolanmar511/repos","events_url":"https://api.github.com/users/nolanmar511/events{/privacy}","received_events_url":"https://api.github.com/users/nolanmar511/received_events","type":"User","site_admin":false},"body":"Done.\r\nUsing const Node&","created_at":"2018-04-18T22:01:25Z","updated_at":"2018-04-18T22:01:25Z","html_url":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs/pull/164#discussion_r182582742","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/164","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/comments/182582742"},"html":{"href":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs/pull/164#discussion_r182582742"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/164"}},"in_reply_to_id":180929830},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/164","id":176282647,"html_url":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs/pull/164","diff_url":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs/pull/164.diff","patch_url":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs/pull/164.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/issues/164","number":164,"state":"open","locked":false,"title":"chore: serialize profile in C++ code","user":{"login":"nolanmar511","id":14046562,"avatar_url":"https://avatars0.githubusercontent.com/u/14046562?v=4","gravatar_id":"","url":"https://api.github.com/users/nolanmar511","html_url":"https://github.com/nolanmar511","followers_url":"https://api.github.com/users/nolanmar511/followers","following_url":"https://api.github.com/users/nolanmar511/following{/other_user}","gists_url":"https://api.github.com/users/nolanmar511/gists{/gist_id}","starred_url":"https://api.github.com/users/nolanmar511/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nolanmar511/subscriptions","organizations_url":"https://api.github.com/users/nolanmar511/orgs","repos_url":"https://api.github.com/users/nolanmar511/repos","events_url":"https://api.github.com/users/nolanmar511/events{/privacy}","received_events_url":"https://api.github.com/users/nolanmar511/received_events","type":"User","site_admin":false},"body":"Fixes #122\r\n\r\nUsing startLocal (Heap profile and time profiles collected every ~11s), memory consumption (rss) for a mostly empty program is ~100MiB, vs ~80MiB prior to this change.\r\nI am investigating this.\r\n![image](https://user-images.githubusercontent.com/14046562/38629191-3b5f2c2c-3d68-11e8-8001-bc0797c7e6a6.png)\r\n\r\n![image](https://user-images.githubusercontent.com/14046562/38629221-4b3f44f6-3d68-11e8-9b43-ff7c6c84fa04.png)\r\n","created_at":"2018-03-20T18:26:31Z","updated_at":"2018-04-18T22:01:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9ddec9e3ca28c92dd6c26c4edb9d478c1afe410b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":318684021,"url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/labels/cla:%20yes","name":"cla: yes","color":"bfd4f2","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/164/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/164/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/issues/164/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/statuses/f7c02d8ba2104aead5831607656e08fa3c3a68c8","head":{"label":"nolanmar511:serialize","ref":"serialize","sha":"f7c02d8ba2104aead5831607656e08fa3c3a68c8","user":{"login":"nolanmar511","id":14046562,"avatar_url":"https://avatars0.githubusercontent.com/u/14046562?v=4","gravatar_id":"","url":"https://api.github.com/users/nolanmar511","html_url":"https://github.com/nolanmar511","followers_url":"https://api.github.com/users/nolanmar511/followers","following_url":"https://api.github.com/users/nolanmar511/following{/other_user}","gists_url":"https://api.github.com/users/nolanmar511/gists{/gist_id}","starred_url":"https://api.github.com/users/nolanmar511/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nolanmar511/subscriptions","organizations_url":"https://api.github.com/users/nolanmar511/orgs","repos_url":"https://api.github.com/users/nolanmar511/repos","events_url":"https://api.github.com/users/nolanmar511/events{/privacy}","received_events_url":"https://api.github.com/users/nolanmar511/received_events","type":"User","site_admin":false},"repo":{"id":100729494,"name":"cloud-profiler-nodejs","full_name":"nolanmar511/cloud-profiler-nodejs","owner":{"login":"nolanmar511","id":14046562,"avatar_url":"https://avatars0.githubusercontent.com/u/14046562?v=4","gravatar_id":"","url":"https://api.github.com/users/nolanmar511","html_url":"https://github.com/nolanmar511","followers_url":"https://api.github.com/users/nolanmar511/followers","following_url":"https://api.github.com/users/nolanmar511/following{/other_user}","gists_url":"https://api.github.com/users/nolanmar511/gists{/gist_id}","starred_url":"https://api.github.com/users/nolanmar511/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nolanmar511/subscriptions","organizations_url":"https://api.github.com/users/nolanmar511/orgs","repos_url":"https://api.github.com/users/nolanmar511/repos","events_url":"https://api.github.com/users/nolanmar511/events{/privacy}","received_events_url":"https://api.github.com/users/nolanmar511/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/nolanmar511/cloud-profiler-nodejs","description":null,"fork":true,"url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs","forks_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/forks","keys_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/teams","hooks_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/hooks","issue_events_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/issues/events{/number}","events_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/events","assignees_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/assignees{/user}","branches_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/branches{/branch}","tags_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/tags","blobs_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/git/refs{/sha}","trees_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/statuses/{sha}","languages_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/languages","stargazers_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/stargazers","contributors_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/contributors","subscribers_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/subscribers","subscription_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/subscription","commits_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/commits{/sha}","git_commits_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/git/commits{/sha}","comments_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/comments{/number}","issue_comment_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/issues/comments{/number}","contents_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/contents/{+path}","compare_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/merges","archive_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/downloads","issues_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/issues{/number}","pulls_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/pulls{/number}","milestones_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/milestones{/number}","notifications_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/labels{/name}","releases_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/releases{/id}","deployments_url":"https://api.github.com/repos/nolanmar511/cloud-profiler-nodejs/deployments","created_at":"2017-08-18T16:11:07Z","updated_at":"2017-11-13T20:07:22Z","pushed_at":"2018-04-18T17:08:56Z","git_url":"git://github.com/nolanmar511/cloud-profiler-nodejs.git","ssh_url":"git@github.com:nolanmar511/cloud-profiler-nodejs.git","clone_url":"https://github.com/nolanmar511/cloud-profiler-nodejs.git","svn_url":"https://github.com/nolanmar511/cloud-profiler-nodejs","homepage":null,"size":2194,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":1,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:master","ref":"master","sha":"7ad463ec42b81ee77340aa362099df6a3356ae15","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":50680973,"name":"cloud-profiler-nodejs","full_name":"GoogleCloudPlatform/cloud-profiler-nodejs","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars0.githubusercontent.com/u/2810941?v=4","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs","description":null,"fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/deployments","created_at":"2016-01-29T18:06:50Z","updated_at":"2018-04-11T00:20:57Z","pushed_at":"2018-04-18T17:08:58Z","git_url":"git://github.com/GoogleCloudPlatform/cloud-profiler-nodejs.git","ssh_url":"git@github.com:GoogleCloudPlatform/cloud-profiler-nodejs.git","clone_url":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs.git","svn_url":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs","homepage":null,"size":2086,"stargazers_count":13,"watchers_count":13,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":11,"mirror_url":null,"archived":false,"open_issues_count":19,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":11,"open_issues":19,"watchers":13,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/164"},"html":{"href":"https://github.com/GoogleCloudPlatform/cloud-profiler-nodejs/pull/164"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/issues/164"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/issues/164/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/164/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/pulls/164/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/cloud-profiler-nodejs/statuses/f7c02d8ba2104aead5831607656e08fa3c3a68c8"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"nolanmar511"}}