Skip to content

Commit 1a7b78b

Browse files
committed
Merge branch 'master' into v2
2 parents 8328869 + 18c5675 commit 1a7b78b

File tree

2 files changed

+145
-1
lines changed

2 files changed

+145
-1
lines changed

lib/ionic/serve.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ function run(ionic, argv) {
8080
if (process.env.CONNECT_LIVE_RELOAD_PORT) {
8181
options.liveReloadPort = process.env.CONNECT_LIVE_RELOAD_PORT;
8282
}
83-
8483
var promise;
8584

8685
try {

lib/ionic/stats.js

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
var request = require('request'),
2+
IonicConfig = require('./config');
3+
4+
var proxy = process.env.PROXY || process.env.http_proxy || null;
5+
6+
var s = {
7+
track: function(event, uuid, data, callback) {
8+
var data = {
9+
'_event' : event,
10+
'_uuid': uuid,
11+
'data': data
12+
};
13+
14+
request({
15+
url: 'https://t.ionic.io/event/cli',
16+
method: "POST",
17+
json: data,
18+
proxy: proxy
19+
}, function(err, res, body) {
20+
callback(err, res, body);
21+
});
22+
}
23+
};
24+
25+
var ionicConfig = IonicConfig.load();
26+
27+
exports.IonicStats = {
28+
t: function(additionalData) {
29+
try {
30+
31+
if(process.argv.length < 3) return;
32+
33+
if( ionicConfig.get('statsOptOut') === true ) {
34+
return;
35+
}
36+
37+
var cmdName = process.argv[2].toLowerCase();
38+
var cmdArgs = (process.argv.length > 3 ? process.argv.slice(3) : []); // skip the cmdName
39+
40+
var statsData = additionalData || {};
41+
var platforms = [];
42+
var x, y, cmd;
43+
44+
// update any aliases with the full cmd so there's a common property
45+
var aliasMap = {
46+
'rm': 'remove',
47+
'ls': 'list',
48+
'up': 'update',
49+
'-w': '--no-cordova',
50+
'-b': '--nobrowser',
51+
'-r': '--nolivereload',
52+
'-x': '--noproxy',
53+
'-l': '--livereload',
54+
'-c': '--consolelogs',
55+
'-s': '--serverlogs',
56+
'-n': '--no-email',
57+
'-s': '--sass'
58+
};
59+
for(x=0; x<cmdArgs.length; x++) {
60+
for(y in aliasMap) {
61+
if(cmdArgs[x].toLowerCase() == y) {
62+
cmdArgs[x] = aliasMap[y];
63+
}
64+
}
65+
}
66+
67+
var platformWhitelist = 'android ios firefoxos wp7 wp8 amazon-fireos blackberry10 tizen'.split(' ');
68+
var argsWhitelist = 'add remove list update check debug release search --livereload --consolelogs --serverlogs --no-cordova --nobrowser --nolivereload --noproxy --no-email --debug --release --device --emulator --sass --splash --icon'.split(' ');
69+
70+
// collect only certain args, skip over everything else
71+
for(x=0; x<cmdArgs.length; x++) {
72+
cmd = cmdArgs[x].toLowerCase();
73+
74+
// gather what platforms this is targeting
75+
for(y=0; y<platformWhitelist.length; y++) {
76+
if(cmd == platformWhitelist[y]) {
77+
platforms.push(cmd); // group them together
78+
statsData[cmd] = true; // also give them their own property
79+
break;
80+
}
81+
}
82+
// gather only args that are in our list of valid stat args
83+
for(y=0; y<argsWhitelist.length; y++) {
84+
if(cmd == argsWhitelist[y]) {
85+
statsData[cmd] = true;
86+
break;
87+
}
88+
}
89+
}
90+
91+
// create a platform property only when there is 1 or more
92+
if(platforms.length) {
93+
statsData.platform = platforms.sort().join(',');
94+
}
95+
96+
// add which ionic lib version they're using
97+
try {
98+
statsData.ionic_version = require( path.resolve('www/lib/ionic/version.json') ).version;
99+
} catch(e2) {}
100+
101+
// add which cli version is being used
102+
try {
103+
statsData.cli_version = require('../../package.json').version;
104+
} catch(e2) {}
105+
106+
try {
107+
statsData.email = ionicConfig.get('email');
108+
} catch (e2) {}
109+
110+
try {
111+
statsData.account_id = ionicConfig.get('id');
112+
} catch (e2) {}
113+
114+
var releaseTag = statsData.cli_version.split('-')[1];
115+
if (releaseTag) {
116+
statsData.cli_release_tag = releaseTag.split('.')[0];
117+
}
118+
119+
this.mp(cmdName, statsData);
120+
//console.log(cmdName, statsData);
121+
122+
} catch(e) {
123+
console.log( ('Error stats: ' + e) );
124+
}
125+
},
126+
mp: function(e, d) {
127+
var unique_id = ionicConfig.get('ank');
128+
if(!unique_id) {
129+
this.createId();
130+
unique_id = ionicConfig.get('ank');
131+
}
132+
s.track(e, unique_id, d, function(err, data) {
133+
});
134+
},
135+
createId: function() {
136+
var d = new Date().getTime();
137+
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
138+
var r = (d + Math.random()*16)%16 | 0;
139+
d = Math.floor(d/16);
140+
return (c=='x' ? r : (r&0x7|0x8)).toString(16);
141+
});
142+
143+
ionicConfig.set('ank', uuid);
144+
}
145+
};

0 commit comments

Comments
 (0)