{"action":"created","comment":{"url":"https://api.github.com/repos/trufflesuite/ganache/pulls/comments/196981102","pull_request_review_id":130632196,"id":196981102,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5Njk4MTEwMg==","diff_hunk":"@@ -95,14 +73,13 @@ class AppShell extends Component {\n     const segment = nextProps.location.pathname.split('/')[1] || 'dashboard'\n \n     // If we haven't initialized GA, do it.\n-    if (!this.user) {\n-      this._setupGoogleAnalytics()\n+    if (!GA.isSetup) {","path":"src/Components/AppShell/AppShell.js","position":75,"original_position":75,"commit_id":"2a956a4bffd71db286859711a13816d915be2d55","original_commit_id":"2a956a4bffd71db286859711a13816d915be2d55","user":{"login":"benjamincburns","id":803016,"node_id":"MDQ6VXNlcjgwMzAxNg==","avatar_url":"https://avatars1.githubusercontent.com/u/803016?v=4","gravatar_id":"","url":"https://api.github.com/users/benjamincburns","html_url":"https://github.com/benjamincburns","followers_url":"https://api.github.com/users/benjamincburns/followers","following_url":"https://api.github.com/users/benjamincburns/following{/other_user}","gists_url":"https://api.github.com/users/benjamincburns/gists{/gist_id}","starred_url":"https://api.github.com/users/benjamincburns/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/benjamincburns/subscriptions","organizations_url":"https://api.github.com/users/benjamincburns/orgs","repos_url":"https://api.github.com/users/benjamincburns/repos","events_url":"https://api.github.com/users/benjamincburns/events{/privacy}","received_events_url":"https://api.github.com/users/benjamincburns/received_events","type":"User","site_admin":false},"body":"This seems like somewhat of a code smell (cohesion/coupling) that reflects a misunderstanding or shortcoming in the way the application is being initialized. Why should the application container in the renderer process care about kicking off the google analytics initialization?","created_at":"2018-06-21T00:27:13Z","updated_at":"2018-06-21T00:37:16Z","html_url":"https://github.com/trufflesuite/ganache/pull/743#discussion_r196981102","pull_request_url":"https://api.github.com/repos/trufflesuite/ganache/pulls/743","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/trufflesuite/ganache/pulls/comments/196981102"},"html":{"href":"https://github.com/trufflesuite/ganache/pull/743#discussion_r196981102"},"pull_request":{"href":"https://api.github.com/repos/trufflesuite/ganache/pulls/743"}}},"pull_request":{"url":"https://api.github.com/repos/trufflesuite/ganache/pulls/743","id":194403434,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk0NDAzNDM0","html_url":"https://github.com/trufflesuite/ganache/pull/743","diff_url":"https://github.com/trufflesuite/ganache/pull/743.diff","patch_url":"https://github.com/trufflesuite/ganache/pull/743.patch","issue_url":"https://api.github.com/repos/trufflesuite/ganache/issues/743","number":743,"state":"open","locked":false,"title":"Enhance Tracking in Google Analytics","user":{"login":"seesemichaelj","id":549323,"node_id":"MDQ6VXNlcjU0OTMyMw==","avatar_url":"https://avatars2.githubusercontent.com/u/549323?v=4","gravatar_id":"","url":"https://api.github.com/users/seesemichaelj","html_url":"https://github.com/seesemichaelj","followers_url":"https://api.github.com/users/seesemichaelj/followers","following_url":"https://api.github.com/users/seesemichaelj/following{/other_user}","gists_url":"https://api.github.com/users/seesemichaelj/gists{/gist_id}","starred_url":"https://api.github.com/users/seesemichaelj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seesemichaelj/subscriptions","organizations_url":"https://api.github.com/users/seesemichaelj/orgs","repos_url":"https://api.github.com/users/seesemichaelj/repos","events_url":"https://api.github.com/users/seesemichaelj/events{/privacy}","received_events_url":"https://api.github.com/users/seesemichaelj/received_events","type":"User","site_admin":false},"body":"First off, this PR is based off the branch in #712. Some of these commits will \"disappear\" when that PR is merged. (I did this to prevent merge conflicts in the hope of minimal changes on each branch >.<)\r\n\r\n- This PR pulls out the Google Analytics interface from `AppShell.js` to it's own file `Services/GoogleAnalytics.js`\r\n- This PR adds a handful of custom dimensions to track useful settings (see `reportSettings` in `GoogleAnalytics.js`)\r\n- This PR also reports every RPC call and whether it succeeded or failed\r\n- This PR also reports errors that would normally be reported as a \"System Error\"","created_at":"2018-06-12T20:48:18Z","updated_at":"2018-06-21T00:37:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"dbe4f58302a0905b72b1d6e579974ea81baa851c","assignee":{"login":"seesemichaelj","id":549323,"node_id":"MDQ6VXNlcjU0OTMyMw==","avatar_url":"https://avatars2.githubusercontent.com/u/549323?v=4","gravatar_id":"","url":"https://api.github.com/users/seesemichaelj","html_url":"https://github.com/seesemichaelj","followers_url":"https://api.github.com/users/seesemichaelj/followers","following_url":"https://api.github.com/users/seesemichaelj/following{/other_user}","gists_url":"https://api.github.com/users/seesemichaelj/gists{/gist_id}","starred_url":"https://api.github.com/users/seesemichaelj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seesemichaelj/subscriptions","organizations_url":"https://api.github.com/users/seesemichaelj/orgs","repos_url":"https://api.github.com/users/seesemichaelj/repos","events_url":"https://api.github.com/users/seesemichaelj/events{/privacy}","received_events_url":"https://api.github.com/users/seesemichaelj/received_events","type":"User","site_admin":false},"assignees":[{"login":"seesemichaelj","id":549323,"node_id":"MDQ6VXNlcjU0OTMyMw==","avatar_url":"https://avatars2.githubusercontent.com/u/549323?v=4","gravatar_id":"","url":"https://api.github.com/users/seesemichaelj","html_url":"https://github.com/seesemichaelj","followers_url":"https://api.github.com/users/seesemichaelj/followers","following_url":"https://api.github.com/users/seesemichaelj/following{/other_user}","gists_url":"https://api.github.com/users/seesemichaelj/gists{/gist_id}","starred_url":"https://api.github.com/users/seesemichaelj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/seesemichaelj/subscriptions","organizations_url":"https://api.github.com/users/seesemichaelj/orgs","repos_url":"https://api.github.com/users/seesemichaelj/repos","events_url":"https://api.github.com/users/seesemichaelj/events{/privacy}","received_events_url":"https://api.github.com/users/seesemichaelj/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/trufflesuite/ganache/pulls/743/commits","review_comments_url":"https://api.github.com/repos/trufflesuite/ganache/pulls/743/comments","review_comment_url":"https://api.github.com/repos/trufflesuite/ganache/pulls/comments{/number}","comments_url":"https://api.github.com/repos/trufflesuite/ganache/issues/743/comments","statuses_url":"https://api.github.com/repos/trufflesuite/ganache/statuses/2a956a4bffd71db286859711a13816d915be2d55","head":{"label":"trufflesuite:google-analytics-events","ref":"google-analytics-events","sha":"2a956a4bffd71db286859711a13816d915be2d55","user":{"login":"trufflesuite","id":22205159,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyMjA1MTU5","avatar_url":"https://avatars1.githubusercontent.com/u/22205159?v=4","gravatar_id":"","url":"https://api.github.com/users/trufflesuite","html_url":"https://github.com/trufflesuite","followers_url":"https://api.github.com/users/trufflesuite/followers","following_url":"https://api.github.com/users/trufflesuite/following{/other_user}","gists_url":"https://api.github.com/users/trufflesuite/gists{/gist_id}","starred_url":"https://api.github.com/users/trufflesuite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trufflesuite/subscriptions","organizations_url":"https://api.github.com/users/trufflesuite/orgs","repos_url":"https://api.github.com/users/trufflesuite/repos","events_url":"https://api.github.com/users/trufflesuite/events{/privacy}","received_events_url":"https://api.github.com/users/trufflesuite/received_events","type":"Organization","site_admin":false},"repo":{"id":79269625,"node_id":"MDEwOlJlcG9zaXRvcnk3OTI2OTYyNQ==","name":"ganache","full_name":"trufflesuite/ganache","owner":{"login":"trufflesuite","id":22205159,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyMjA1MTU5","avatar_url":"https://avatars1.githubusercontent.com/u/22205159?v=4","gravatar_id":"","url":"https://api.github.com/users/trufflesuite","html_url":"https://github.com/trufflesuite","followers_url":"https://api.github.com/users/trufflesuite/followers","following_url":"https://api.github.com/users/trufflesuite/following{/other_user}","gists_url":"https://api.github.com/users/trufflesuite/gists{/gist_id}","starred_url":"https://api.github.com/users/trufflesuite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trufflesuite/subscriptions","organizations_url":"https://api.github.com/users/trufflesuite/orgs","repos_url":"https://api.github.com/users/trufflesuite/repos","events_url":"https://api.github.com/users/trufflesuite/events{/privacy}","received_events_url":"https://api.github.com/users/trufflesuite/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/trufflesuite/ganache","description":"Personal blockchain for Ethereum development","fork":false,"url":"https://api.github.com/repos/trufflesuite/ganache","forks_url":"https://api.github.com/repos/trufflesuite/ganache/forks","keys_url":"https://api.github.com/repos/trufflesuite/ganache/keys{/key_id}","collaborators_url":"https://api.github.com/repos/trufflesuite/ganache/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/trufflesuite/ganache/teams","hooks_url":"https://api.github.com/repos/trufflesuite/ganache/hooks","issue_events_url":"https://api.github.com/repos/trufflesuite/ganache/issues/events{/number}","events_url":"https://api.github.com/repos/trufflesuite/ganache/events","assignees_url":"https://api.github.com/repos/trufflesuite/ganache/assignees{/user}","branches_url":"https://api.github.com/repos/trufflesuite/ganache/branches{/branch}","tags_url":"https://api.github.com/repos/trufflesuite/ganache/tags","blobs_url":"https://api.github.com/repos/trufflesuite/ganache/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/trufflesuite/ganache/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/trufflesuite/ganache/git/refs{/sha}","trees_url":"https://api.github.com/repos/trufflesuite/ganache/git/trees{/sha}","statuses_url":"https://api.github.com/repos/trufflesuite/ganache/statuses/{sha}","languages_url":"https://api.github.com/repos/trufflesuite/ganache/languages","stargazers_url":"https://api.github.com/repos/trufflesuite/ganache/stargazers","contributors_url":"https://api.github.com/repos/trufflesuite/ganache/contributors","subscribers_url":"https://api.github.com/repos/trufflesuite/ganache/subscribers","subscription_url":"https://api.github.com/repos/trufflesuite/ganache/subscription","commits_url":"https://api.github.com/repos/trufflesuite/ganache/commits{/sha}","git_commits_url":"https://api.github.com/repos/trufflesuite/ganache/git/commits{/sha}","comments_url":"https://api.github.com/repos/trufflesuite/ganache/comments{/number}","issue_comment_url":"https://api.github.com/repos/trufflesuite/ganache/issues/comments{/number}","contents_url":"https://api.github.com/repos/trufflesuite/ganache/contents/{+path}","compare_url":"https://api.github.com/repos/trufflesuite/ganache/compare/{base}...{head}","merges_url":"https://api.github.com/repos/trufflesuite/ganache/merges","archive_url":"https://api.github.com/repos/trufflesuite/ganache/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/trufflesuite/ganache/downloads","issues_url":"https://api.github.com/repos/trufflesuite/ganache/issues{/number}","pulls_url":"https://api.github.com/repos/trufflesuite/ganache/pulls{/number}","milestones_url":"https://api.github.com/repos/trufflesuite/ganache/milestones{/number}","notifications_url":"https://api.github.com/repos/trufflesuite/ganache/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/trufflesuite/ganache/labels{/name}","releases_url":"https://api.github.com/repos/trufflesuite/ganache/releases{/id}","deployments_url":"https://api.github.com/repos/trufflesuite/ganache/deployments","created_at":"2017-01-17T20:39:11Z","updated_at":"2018-06-20T10:27:53Z","pushed_at":"2018-06-20T21:53:29Z","git_url":"git://github.com/trufflesuite/ganache.git","ssh_url":"git@github.com:trufflesuite/ganache.git","clone_url":"https://github.com/trufflesuite/ganache.git","svn_url":"https://github.com/trufflesuite/ganache","homepage":"http://truffleframework.com/ganache","size":15846,"stargazers_count":949,"watchers_count":949,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":144,"mirror_url":null,"archived":false,"open_issues_count":94,"license":null,"forks":144,"open_issues":94,"watchers":949,"default_branch":"develop"}},"base":{"label":"trufflesuite:handle-startup-errors-correctly","ref":"handle-startup-errors-correctly","sha":"d9c221c286e2c8c583d8b7a5246729918436c096","user":{"login":"trufflesuite","id":22205159,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyMjA1MTU5","avatar_url":"https://avatars1.githubusercontent.com/u/22205159?v=4","gravatar_id":"","url":"https://api.github.com/users/trufflesuite","html_url":"https://github.com/trufflesuite","followers_url":"https://api.github.com/users/trufflesuite/followers","following_url":"https://api.github.com/users/trufflesuite/following{/other_user}","gists_url":"https://api.github.com/users/trufflesuite/gists{/gist_id}","starred_url":"https://api.github.com/users/trufflesuite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trufflesuite/subscriptions","organizations_url":"https://api.github.com/users/trufflesuite/orgs","repos_url":"https://api.github.com/users/trufflesuite/repos","events_url":"https://api.github.com/users/trufflesuite/events{/privacy}","received_events_url":"https://api.github.com/users/trufflesuite/received_events","type":"Organization","site_admin":false},"repo":{"id":79269625,"node_id":"MDEwOlJlcG9zaXRvcnk3OTI2OTYyNQ==","name":"ganache","full_name":"trufflesuite/ganache","owner":{"login":"trufflesuite","id":22205159,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIyMjA1MTU5","avatar_url":"https://avatars1.githubusercontent.com/u/22205159?v=4","gravatar_id":"","url":"https://api.github.com/users/trufflesuite","html_url":"https://github.com/trufflesuite","followers_url":"https://api.github.com/users/trufflesuite/followers","following_url":"https://api.github.com/users/trufflesuite/following{/other_user}","gists_url":"https://api.github.com/users/trufflesuite/gists{/gist_id}","starred_url":"https://api.github.com/users/trufflesuite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trufflesuite/subscriptions","organizations_url":"https://api.github.com/users/trufflesuite/orgs","repos_url":"https://api.github.com/users/trufflesuite/repos","events_url":"https://api.github.com/users/trufflesuite/events{/privacy}","received_events_url":"https://api.github.com/users/trufflesuite/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/trufflesuite/ganache","description":"Personal blockchain for Ethereum development","fork":false,"url":"https://api.github.com/repos/trufflesuite/ganache","forks_url":"https://api.github.com/repos/trufflesuite/ganache/forks","keys_url":"https://api.github.com/repos/trufflesuite/ganache/keys{/key_id}","collaborators_url":"https://api.github.com/repos/trufflesuite/ganache/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/trufflesuite/ganache/teams","hooks_url":"https://api.github.com/repos/trufflesuite/ganache/hooks","issue_events_url":"https://api.github.com/repos/trufflesuite/ganache/issues/events{/number}","events_url":"https://api.github.com/repos/trufflesuite/ganache/events","assignees_url":"https://api.github.com/repos/trufflesuite/ganache/assignees{/user}","branches_url":"https://api.github.com/repos/trufflesuite/ganache/branches{/branch}","tags_url":"https://api.github.com/repos/trufflesuite/ganache/tags","blobs_url":"https://api.github.com/repos/trufflesuite/ganache/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/trufflesuite/ganache/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/trufflesuite/ganache/git/refs{/sha}","trees_url":"https://api.github.com/repos/trufflesuite/ganache/git/trees{/sha}","statuses_url":"https://api.github.com/repos/trufflesuite/ganache/statuses/{sha}","languages_url":"https://api.github.com/repos/trufflesuite/ganache/languages","stargazers_url":"https://api.github.com/repos/trufflesuite/ganache/stargazers","contributors_url":"https://api.github.com/repos/trufflesuite/ganache/contributors","subscribers_url":"https://api.github.com/repos/trufflesuite/ganache/subscribers","subscription_url":"https://api.github.com/repos/trufflesuite/ganache/subscription","commits_url":"https://api.github.com/repos/trufflesuite/ganache/commits{/sha}","git_commits_url":"https://api.github.com/repos/trufflesuite/ganache/git/commits{/sha}","comments_url":"https://api.github.com/repos/trufflesuite/ganache/comments{/number}","issue_comment_url":"https://api.github.com/repos/trufflesuite/ganache/issues/comments{/number}","contents_url":"https://api.github.com/repos/trufflesuite/ganache/contents/{+path}","compare_url":"https://api.github.com/repos/trufflesuite/ganache/compare/{base}...{head}","merges_url":"https://api.github.com/repos/trufflesuite/ganache/merges","archive_url":"https://api.github.com/repos/trufflesuite/ganache/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/trufflesuite/ganache/downloads","issues_url":"https://api.github.com/repos/trufflesuite/ganache/issues{/number}","pulls_url":"https://api.github.com/repos/trufflesuite/ganache/pulls{/number}","milestones_url":"https://api.github.com/repos/trufflesuite/ganache/milestones{/number}","notifications_url":"https://api.github.com/repos/trufflesuite/ganache/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/trufflesuite/ganache/labels{/name}","releases_url":"https://api.github.com/repos/trufflesuite/ganache/releases{/id}","deployments_url":"https://api.github.com/repos/trufflesuite/ganache/deployments","created_at":"2017-01-17T20:39:11Z","updated_at":"2018-06-20T10:27:53Z","pushed_at":"2018-06-20T21:53:29Z","git_url":"git://github.com/trufflesuite/ganache.git","ssh_url":"git@github.com:trufflesuite/ganache.git","clone_url":"https://github.com/trufflesuite/ganache.git","svn_url":"https://github.com/trufflesuite/ganache","homepage":"http://truffleframework.com/ganache","size":15846,"stargazers_count":949,"watchers_count":949,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":144,"mirror_url":null,"archived":false,"open_issues_count":94,"license":null,"forks":144,"open_issues":94,"watchers":949,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/trufflesuite/ganache/pulls/743"},"html":{"href":"https://github.com/trufflesuite/ganache/pull/743"},"issue":{"href":"https://api.github.com/repos/trufflesuite/ganache/issues/743"},"comments":{"href":"https://api.github.com/repos/trufflesuite/ganache/issues/743/comments"},"review_comments":{"href":"https://api.github.com/repos/trufflesuite/ganache/pulls/743/comments"},"review_comment":{"href":"https://api.github.com/repos/trufflesuite/ganache/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/trufflesuite/ganache/pulls/743/commits"},"statuses":{"href":"https://api.github.com/repos/trufflesuite/ganache/statuses/2a956a4bffd71db286859711a13816d915be2d55"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"benjamincburns"}}