UNPKG

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