From f8b6453be9fe6274166136184b38cfc6a6a5dfb2 Mon Sep 17 00:00:00 2001 From: Sosuke Suzuki Date: Wed, 31 May 2017 22:04:25 +0900 Subject: [PATCH 1/4] config AmazonMobileAnalytics --- package.json | 3 ++ webpack-production.config.js | 4 +++ webpack.config.js | 4 +++ yarn.lock | 68 +++++++++++++++++++++++++++++++----- 4 files changed, 71 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index b830c470..f7c90a2b 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,8 @@ "dependencies": { "@rokt33r/markdown-it-math": "^4.0.1", "@rokt33r/season": "^5.3.0", + "aws-sdk": "^2.48.0", + "aws-sdk-mobile-analytics": "^0.9.2", "codemirror": "^5.19.0", "electron-config": "^0.2.1", "electron-gh-releases": "^2.0.2", @@ -104,6 +106,7 @@ "grunt-electron-installer": "^1.2.0", "history": "^1.17.0", "jsdom": "^9.4.2", + "json-loader": "^0.5.4", "merge-stream": "^1.0.0", "nib": "^1.1.0", "react-color": "^2.2.2", diff --git a/webpack-production.config.js b/webpack-production.config.js index 12dcbf4e..4892c764 100644 --- a/webpack-production.config.js +++ b/webpack-production.config.js @@ -15,6 +15,10 @@ var config = Object.assign({}, skeleton, { test: /\.styl$/, exclude: /(node_modules|bower_components)/, loader: 'style!css?modules&importLoaders=1&localIdentName=[name]__[local]___[path]!stylus?sourceMap' + }, + { + test: /\.json$/, + loader: 'json' } ] }, diff --git a/webpack.config.js b/webpack.config.js index dfde7e85..16b7fd73 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -13,6 +13,10 @@ var config = Object.assign({}, skeleton, { test: /\.styl$/, exclude: /(node_modules|bower_components)/, loader: 'style!css?modules&importLoaders=1&localIdentName=[name]__[local]___[path]!stylus?sourceMap' + }, + { + test: /\.json$/, + loader: 'json' } ] }, diff --git a/yarn.lock b/yarn.lock index 1bd55e3c..e7d04982 100644 --- a/yarn.lock +++ b/yarn.lock @@ -425,6 +425,26 @@ ava@^0.16.0: unique-temp-dir "^1.0.0" update-notifier "^1.0.0" +aws-sdk-mobile-analytics@^0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/aws-sdk-mobile-analytics/-/aws-sdk-mobile-analytics-0.9.2.tgz#b56a6e5206fc8c3975a19170b41536c53f6d5d91" + dependencies: + aws-sdk ">=2.2.37" + +aws-sdk@>=2.2.37, aws-sdk@^2.48.0: + version "2.48.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.48.0.tgz#c89bbdbd71fdd33457cd65c46c4080e4e44b2702" + dependencies: + buffer "4.9.1" + crypto-browserify "1.0.9" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.0.1" + xml2js "0.4.17" + xmlbuilder "4.2.1" + aws-sign2@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" @@ -1242,7 +1262,7 @@ buffer-shims@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" -buffer@^4.9.0: +buffer@4.9.1, buffer@^4.9.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: @@ -1765,6 +1785,10 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +crypto-browserify@1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz#cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0" + crypto-browserify@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" @@ -3760,6 +3784,10 @@ isstream@~0.1.1, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + jodid25519@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" @@ -3852,6 +3880,10 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +json-loader@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -5837,9 +5869,9 @@ sax@0.5.x: version "0.5.8" resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" -sax@^1.2.1, sax@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" +sax@1.2.1, sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" semver-diff@^2.0.0: version "2.1.0" @@ -6656,6 +6688,13 @@ url-parse@^1.1.8: querystringify "~1.0.0" requires-port "1.0.x" +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + url@^0.11.0, url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -6683,14 +6722,14 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" +uuid@3.0.1, uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + uuid@^2.0.1, uuid@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -6977,12 +7016,25 @@ xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +xml2js@0.4.17: + version "0.4.17" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" + dependencies: + sax ">=0.6.0" + xmlbuilder "^4.1.0" + xmlbuilder@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.0.0.tgz#98b8f651ca30aa624036f127d11cc66dc7b907a3" dependencies: lodash "^3.5.0" +xmlbuilder@4.2.1, xmlbuilder@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" + dependencies: + lodash "^4.0.0" + xmldom@0.1.x: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" From 2fea9eb874a4b01cfb87596b76e88530c9b8ab66 Mon Sep 17 00:00:00 2001 From: Sosuke Suzuki Date: Wed, 31 May 2017 22:28:58 +0900 Subject: [PATCH 2/4] setting AMA custom events --- browser/main/lib/AwsMobileAnalyticsConfig.js | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 browser/main/lib/AwsMobileAnalyticsConfig.js diff --git a/browser/main/lib/AwsMobileAnalyticsConfig.js b/browser/main/lib/AwsMobileAnalyticsConfig.js new file mode 100644 index 00000000..8d75f5fd --- /dev/null +++ b/browser/main/lib/AwsMobileAnalyticsConfig.js @@ -0,0 +1,36 @@ +const AWS = require('aws-sdk') +const AMA = require('aws-sdk-mobile-analytics') +const ConfigManager = require('browser/main/lib/ConfigManager') + +AWS.config.region = 'us-east-1' +AWS.config.credentials = new AWS.CognitoIdentityCredentials({ + IdentityPoolId: 'us-east-1:xxxxxxxxxxxxxxxxxxxxxxxxx' +}) +const mobileAnalyticsClient = new AMA.Manager({ + appId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + appTitle: 'xxxxxxxxxx' +}) + +function initAwsMobileAnalytics () { + AWS.config.credentials.get(function(err) { + if (!err) { + console.log("Cognito Identity ID: " + AWS.config.credentials.identityId) + } + }) + recordStaticCustomEvent() +} + +function recordDynamitCustomEvent (type) { + mobileAnalyticsClient.recordEvent(type) +} + +function recordStaticCustomEvent () { + mobileAnalyticsClient.recordEvent('UI_COLOR_THEME', { + uiColorTheme: ConfigManager.default.get().ui.theme + }) +} + +module.exports = { + initAwsMobileAnalytics, + recordDynamitCustomEvent +} From 186a8158210ab0c17f3cfe30562a174af0ffd890 Mon Sep 17 00:00:00 2001 From: Sosuke Suzuki Date: Wed, 31 May 2017 22:41:22 +0900 Subject: [PATCH 3/4] config to use dynamic customEvents --- browser/finder/index.js | 2 ++ browser/main/Detail/MarkdownNoteDetail.js | 3 +++ browser/main/Detail/SnippetNoteDetail.js | 3 +++ browser/main/Detail/TagSelect.js | 2 ++ browser/main/Main.js | 3 +++ browser/main/modals/CreateFolderModal.js | 2 ++ browser/main/modals/NewNoteModal.js | 5 +++++ 7 files changed, 20 insertions(+) diff --git a/browser/finder/index.js b/browser/finder/index.js index 6c2b29d4..dc3ec8db 100644 --- a/browser/finder/index.js +++ b/browser/finder/index.js @@ -10,6 +10,7 @@ import StorageSection from './StorageSection' import NoteList from './NoteList' import NoteDetail from './NoteDetail' import SideNavFilter from 'browser/components/SideNavFilter' +import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' require('!!style!css!stylus?sourceMap!../main/global.styl') require('../lib/customMeta') @@ -94,6 +95,7 @@ class FinderMain extends React.Component { if (e.keyCode === 13) { this.refs.detail.saveToClipboard() + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('COPY_FINDER') hideFinder() e.preventDefault() } diff --git a/browser/main/Detail/MarkdownNoteDetail.js b/browser/main/Detail/MarkdownNoteDetail.js index 6113264e..8ea88b40 100644 --- a/browser/main/Detail/MarkdownNoteDetail.js +++ b/browser/main/Detail/MarkdownNoteDetail.js @@ -13,6 +13,7 @@ import markdown from 'browser/lib/markdown' import StatusBar from '../StatusBar' import _ from 'lodash' import { findNoteTitle } from 'browser/lib/findNoteTitle' +import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' const electron = require('electron') const { remote } = electron @@ -116,6 +117,7 @@ class MarkdownNoteDetail extends React.Component { type: 'UPDATE_NOTE', note: note }) + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('EDIT_NOTE') }) } @@ -154,6 +156,7 @@ class MarkdownNoteDetail extends React.Component { handleStarButtonClick (e) { let { note } = this.state + if (!note.isStarred) AwsMobileAnalyticsConfig.recordDynamitCustomEvent('ADD_STAR') note.isStarred = !note.isStarred diff --git a/browser/main/Detail/SnippetNoteDetail.js b/browser/main/Detail/SnippetNoteDetail.js index 5e6a3278..706cc299 100644 --- a/browser/main/Detail/SnippetNoteDetail.js +++ b/browser/main/Detail/SnippetNoteDetail.js @@ -16,6 +16,7 @@ import context from 'browser/lib/context' import ConfigManager from 'browser/main/lib/ConfigManager' import _ from 'lodash' import { findNoteTitle } from 'browser/lib/findNoteTitle' +import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' function pass (name) { switch (name) { @@ -110,6 +111,7 @@ class SnippetNoteDetail extends React.Component { type: 'UPDATE_NOTE', note: note }) + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('EDIT_NOTE') }) } @@ -148,6 +150,7 @@ class SnippetNoteDetail extends React.Component { handleStarButtonClick (e) { let { note } = this.state + if (!note.isStarred) AwsMobileAnalyticsConfig.recordDynamitCustomEvent('ADD_STAR') note.isStarred = !note.isStarred diff --git a/browser/main/Detail/TagSelect.js b/browser/main/Detail/TagSelect.js index bebf39de..e6699660 100644 --- a/browser/main/Detail/TagSelect.js +++ b/browser/main/Detail/TagSelect.js @@ -2,6 +2,7 @@ import React, { PropTypes } from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './TagSelect.styl' import _ from 'lodash' +import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' class TagSelect extends React.Component { constructor (props) { @@ -56,6 +57,7 @@ class TagSelect extends React.Component { } submitTag () { + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('ADD_TAG') let { value } = this.props let newTag = this.refs.newTag.value.trim().replace(/ +/g, '_') diff --git a/browser/main/Main.js b/browser/main/Main.js index d2d1508d..abada90d 100644 --- a/browser/main/Main.js +++ b/browser/main/Main.js @@ -12,6 +12,7 @@ import ConfigManager from 'browser/main/lib/ConfigManager' import modal from 'browser/main/lib/modal' import InitModal from 'browser/main/modals/InitModal' import mixpanel from 'browser/main/lib/mixpanel' +import mobileAnalytics from 'browser/main/lib/awsMobileAnalyticsConfig' function focused () { mixpanel.track('MAIN_FOCUSED') @@ -21,6 +22,8 @@ class Main extends React.Component { constructor (props) { super(props) + mobileAnalytics.initAwsMobileAnalytics() + let { config } = props this.state = { diff --git a/browser/main/modals/CreateFolderModal.js b/browser/main/modals/CreateFolderModal.js index 231fdd44..1953c696 100644 --- a/browser/main/modals/CreateFolderModal.js +++ b/browser/main/modals/CreateFolderModal.js @@ -5,6 +5,7 @@ import dataApi from 'browser/main/lib/dataApi' import store from 'browser/main/store' import consts from 'browser/lib/consts' import ModalEscButton from 'browser/components/ModalEscButton' +import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' class CreateFolderModal extends React.Component { constructor (props) { @@ -48,6 +49,7 @@ class CreateFolderModal extends React.Component { } confirm () { + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('ADD_FOLDER') if (this.state.name.trim().length > 0) { let { storage } = this.props let input = { diff --git a/browser/main/modals/NewNoteModal.js b/browser/main/modals/NewNoteModal.js index 61f3d41f..1baa41cc 100644 --- a/browser/main/modals/NewNoteModal.js +++ b/browser/main/modals/NewNoteModal.js @@ -5,6 +5,7 @@ import dataApi from 'browser/main/lib/dataApi' import { hashHistory } from 'react-router' import ee from 'browser/main/lib/eventEmitter' import ModalEscButton from 'browser/components/ModalEscButton' +import AwsMobileAnalyticsConfig from 'browser/main/lib/AwsMobileAnalyticsConfig' class NewNoteModal extends React.Component { constructor (props) { @@ -23,6 +24,8 @@ class NewNoteModal extends React.Component { } handleMarkdownNoteButtonClick (e) { + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('ADD_MARKDOWN') + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('ADD_ALLNOTE') let { storage, folder, dispatch, location } = this.props dataApi .createNote(storage, { @@ -53,6 +56,8 @@ class NewNoteModal extends React.Component { } handleSnippetNoteButtonClick (e) { + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('ADD_SNIPPET') + AwsMobileAnalyticsConfig.recordDynamitCustomEvent('ADD_ALLNOTE') let { storage, folder, dispatch, location } = this.props dataApi From 278061e4f1cd85ea4b9e027c83bd023fbda2af1e Mon Sep 17 00:00:00 2001 From: Sosuke Suzuki Date: Sat, 10 Jun 2017 12:58:24 +0900 Subject: [PATCH 4/4] fix spacing --- browser/main/lib/AwsMobileAnalyticsConfig.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/main/lib/AwsMobileAnalyticsConfig.js b/browser/main/lib/AwsMobileAnalyticsConfig.js index 8d75f5fd..671a8faf 100644 --- a/browser/main/lib/AwsMobileAnalyticsConfig.js +++ b/browser/main/lib/AwsMobileAnalyticsConfig.js @@ -12,9 +12,9 @@ const mobileAnalyticsClient = new AMA.Manager({ }) function initAwsMobileAnalytics () { - AWS.config.credentials.get(function(err) { + AWS.config.credentials.get(function (err) { if (!err) { - console.log("Cognito Identity ID: " + AWS.config.credentials.identityId) + console.log('Cognito Identity ID: ' + AWS.config.credentials.identityId) } }) recordStaticCustomEvent()