serverless-aliyun-function-compute
Version:
Provider plugin for the Serverless Framework v1.x which adds support for Aliyun Function Compute
122 lines (103 loc) • 2.35 kB
JavaScript
;
const pkg = require('../package.json');
const uuid = require('uuid');
const ua = require('universal-analytics');
const ci = require('ci-info');
const osName = require('os-name');
const Conf = require('conf');
const detectMocha = require('detect-mocha');
const os = osName();
const packageName = pkg.name;
const nodeVersion = process.version;
const appVersion = pkg.version;
const conf = new Conf({
configName: `ga-${packageName}`,
projectName: packageName,
defaults: {
cid: uuid.v4()
}
});
var fake = {
pageview: () => {
return {
send: () => { return 'fake'; }
};
},
event: () => {
return {
send: () => { return 'fake'; }
};
}
};
var fakeMocha = {
pageview: () => {
return {
send: () => { return 'fakeMocha'; }
};
},
event: () => {
return {
send: () => { return 'fakeMocha'; }
};
}
};
var real = ua('UA-148336517-1', conf.get('cid'));
real.set('cd1', os);
real.set('cd2', nodeVersion);
real.set('cd3', appVersion);
let visitor;
function getVisitor() {
if (!visitor) {
if (detectMocha()) {
return fakeMocha;
}
if (ci.isCI) {
return fake;
}
visitor = real;
}
return visitor;
}
function sendDownloaded() {
real.pageview('/downloaded').send();
if (ci.isCI) {
real.pageview(`/downloaded/ci/${ci.name}`).send();
}
}
function visitorWrap(category) {
const visitor = getVisitor();
return ((category) => {
return (action, func) => {
return async () => {
try {
visitor.pageview(`/${category}`).send();
const result = await func();
visitor.event({
ec: category,
ea: action,
el: 'success',
dp: `/${category}`
}).send();
return result;
} catch (e) {
visitor.event({
ec: category,
ea: action,
el: 'error',
dp: `/${category}`
}).send();
throw e;
}
};
};
})(category);
}
function hooksWrap(hooks, category) {
const wrap = visitorWrap(category);
const reducer = (acc, hookEvt) => {
acc[hookEvt] = wrap(hookEvt, hooks[hookEvt]);
return acc;
};
return Object.keys(hooks).reduce(reducer, {});
}
module.exports = { getVisitor, visitorWrap, hooksWrap, sendDownloaded };