UNPKG

2.02 kBJavaScriptView Raw
1const { EOL } = require('os');
2const got = require('got');
3const supportsColor = require('supports-color');
4const windowSize = require('window-size');
5const uuid = require('uuid');
6const osName = require('os-name');
7const isCi = require('is-ci');
8const _ = require('lodash');
9const debug = require('debug')('release-it:metrics');
10const pkg = require('../package.json');
11
12const noop = Promise.resolve();
13
14const cast = value => (value ? 1 : 0);
15
16const cid = uuid.v4();
17const dimensions = windowSize ? windowSize.get() : { width: 0, height: 0 };
18const vp = `${dimensions.width}x${dimensions.height}`;
19const depths = ['1-bit', '4-bit', '8-bit', '24-bits'];
20const sd = depths[supportsColor.level || 0];
21
22const payload = config => ({
23 v: 1,
24 tid: 'UA-108828841-1',
25 cid,
26 vp,
27 sd,
28 cd1: pkg.version,
29 cd2: process.version,
30 cd3: osName(),
31 cd4: cast(!config.isCI),
32 cd5: cast(config.isDryRun),
33 cd6: cast(config.isVerbose),
34 cd7: cast(config.isDebug),
35 cd8: null,
36 cd9: config.preReleaseId,
37 cd11: cast(isCi),
38 cd12: cast(config.git.tag),
39 cd13: cast(config.npm.publish),
40 cd14: cast(config.github.release),
41 cd15: config.increment,
42 cd16: cast(config.gitlab.release)
43});
44
45class Metrics {
46 constructor({ isEnabled = true, request = got } = {}) {
47 this.isEnabled = isEnabled;
48 this.request = request;
49 }
50 debug(response) {
51 debug(_.pick(response, ['statusCode', 'statusMessage', 'url']));
52 }
53 send(payload) {
54 return !this.isEnabled
55 ? noop
56 : this.request('http://www.google-analytics.com/collect', {
57 timeout: 300,
58 retries: 0,
59 form: true,
60 body: payload
61 }).then(this.debug, this.debug);
62 }
63 trackEvent(action, config) {
64 return this.send(
65 Object.assign(config ? payload(config) : {}, {
66 t: 'event',
67 ec: 'session',
68 ea: action
69 })
70 );
71 }
72 trackException(err) {
73 return this.send({
74 t: 'exception',
75 exd: err.toString().split(EOL)[0]
76 });
77 }
78}
79
80module.exports = Metrics;