Authored by 毕凯

Merge branch 'feature/web-apm' into 'master'

Feature/web apm



See merge request !977
... ... @@ -485,7 +485,7 @@ module.exports = class extends global.yoho.BaseModel {
});
}
return this.post({
return this.get({
data: apiParams,
api: global.yoho.API
});
... ...
... ... @@ -11,8 +11,8 @@ const isProduction = process.env.NODE_ENV === 'production';
const isTest = process.env.NODE_ENV === 'test';
const domains = {
api: 'http://api-test3.yohops.com:9999/',
service: 'http://api-test3.yohops.com:9999/',
api: 'http://api.yoho.cn/',
service: 'http://service.yoho.cn/',
liveApi: 'http://testapi.live.yohops.com:9999/',
singleApi: 'http://api-test3.yohops.com:9999/',
imSocket: 'ws://socket.yohobuy.com:10240',
... ... @@ -30,6 +30,11 @@ module.exports = {
assetUrl: '//127.0.0.1:5001',
testCode: 'yoho4946abcdef#$%&!@',
domains: domains,
report: {
host: '10.66.0.139',
port: 8086,
db: 'web-apm'
},
subDomains: {
host: '.m.yohobuy.com',
default: '//m.yohobuy.com',
... ... @@ -194,6 +199,11 @@ if (isProduction) {
}
return Math.min(options.attempt * 100, 1000);
}
},
report: {
host: 'influxdblog.web.yohoops.org',
port: 8086,
db: 'web-apm'
}
});
} else if (isTest) {
... ...
... ... @@ -5,6 +5,8 @@
const headerModel = require('../models/header');
const logger = global.yoho.logger;
const helpers = global.yoho.helpers;
const sender = global.yoho.apmSender;
const hostname = require('os').hostname();
const forceNoCache = (res) => {
if (res && !res.finished) {
... ... @@ -49,6 +51,29 @@ exports.notFound = () => {
exports.serverError = () => {
return (err, req, res, next) => {
forceNoCache(res);
const uid = req.user ? req.user.uid : 0;
const udid = req.query.udid || req.cookies ? req.cookies._yasvd : 0;
if (req.isApmReport) {
// 上报服务端错误
sender.addMessage({
measurement: 'error-report',
tags: {
app: global.yoho.config.appName, // 应用名称
hostname,
type: 'server',
route: `[${req.method}]${req.route.path}`, // 请求路由
reqID: req.reqID,
uid,
udid,
code: err.code || 500
},
fields: {
message: err.message,
stack: err.stack
}
});
}
if (err && err.code === 401) {
logger.warn(`401 warn info:client_type=${req.query.client_type},req.user=${JSON.stringify(req.user)},req.query=${JSON.stringify(req.query)},cookies=${JSON.stringify(req.cookies)}`); // eslint-disable-line
... ...
... ... @@ -10,7 +10,8 @@ const captchaPolicy = require('./policies/captcha');
const IP_WHITE_LIST = [
'106.38.38.146',
'218.94.75.58',
'218.94.75.50'
'218.94.75.50',
'218.94.77.166'
];
const limiter = (rule, policy, context) => {
... ...
... ... @@ -22,6 +22,15 @@
<link rel="dns-prefetch" href="{{this}}">
{{/dnsPrefetch.hosts}}
<script>
window._timeStart = new Date().getTime();
window._yohoAppName = 'yohobuywap-node';
{{#ifand isProduction wap.open.bughd}}
!function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")});var n=r(13),i=r(14);n.init(),i.init()},function(e,t){e.exports=function(e,t,r){if("undefined"==typeof t){var n=null;if(document.cookie)for(var i=document.cookie.split(";"),o=0;o<i.length;o++){var a=(i[o]||"").trim();if(a.substring(0,e.length+1)==e+"="){n=decodeURIComponent(a.substring(e.length+1));break}}return n}r=r||{},null===t&&(t="",r.expires=-1);var d="";if(r.expires&&("number"==typeof r.expires||r.expires.toUTCString)){var s;"number"==typeof r.expires?(s=new Date,s.setTime(s.getTime()+24*r.expires*60*60*1e3)):s=r.expires,d="; expires="+s.toUTCString()}var u=r.path?"; path="+r.path:"",p=r.domain?"; domain="+r.domain:"",c=r.secure?"; secure":"";document.cookie=[e,"=",encodeURIComponent(t),d,u,p,c].join("")}},,function(e,t,r){var n=r(1),i=window._yohoAppName||"unknown",o={config:{reportUrl:"//badjs.yoho.cn/apm/yas.gif"},stringify:function(e){for(var t=[],r=0;r<e.length;r++){var n=e[r],i=[];for(var o in n)n.hasOwnProperty(o)&&i.push(o+"::"+n[o]);t.push(i.join("$$"))}return t.join("**")},report:function(e,t){if(e){var r=new Image;r.src=this.config.reportUrl+"?s="+i+"&l="+e+"&t="+(new Date).getTime(),t&&t()}},getUdid:function(){var e=(n("yohobuy_session")||"").slice(2).split(".")[0];return e||0},getUid:function(){var e=(n("_UID")||"").split("::")[1];return e||0},getReqId:function(){return n("docreqid")||0}};e.exports=o},,,,,,,,,,function(e,t,r){var n=r(1),i=r(3),o="_errLog",a={writeError:function(e,t,r,a,d){var s=JSON.parse(n(o)||"[]");s.push({tp:"err",msg:e,sc:t,ln:r,cn:a,pt:location.href,u:i.getUid(),ud:i.getUdid(),rid:i.getReqId(),st:JSON.stringify(d&&d.stack)}),n(o,JSON.stringify(s)),s.length>=5&&this.reportError()},clearError:function(){n(o,"[]")},reportError:function(){var e=this,t=JSON.parse(n(o)||"[]"),r=i.stringify(t);i.report(r,function(){e.clearError()})},init:function(){var e=this;window.onerror=function(t,r,n,i,o){e.writeError(t,r,n,i,o)},this.reportError()}};e.exports=a},function(e,t,r){function n(e){var t=e.offsetTop;return null!==e.offsetParent&&(t+=n(e.offsetParent)),t}var i=r(3),o=window.screen.height,a=[],d=!1,s=!1,u=0,p=setInterval(function(){var e,t;if(d){if(a.length)for(e=0;e<a.length;e++){if(t=a[e],!t.complete){s=!1;break}s=!0}else s=!0;s&&(u=(new Date).getTime()-_timeStart,clearInterval(p))}else{var r=document.body.querySelector("img")||[];for(e=0;e<r.length;e++){t=r[e];var i=n(t);if(i>o){d=!0;break}i<=o&&!t.hasPushed&&(t.hasPushed=1,a.push(t))}}},0),c={reportTime:function(e){var t=i.stringify(e);i.report(t)},addEvent:function(){var e=this,t=[],r=location.href,n=i.getUid(),o=i.getUdid(),a=i.getReqId(),c=window.performance&&window.performance.timing.navigationStart||0;_timeStart=window._timeStart||0,document.addEventListener&&document.addEventListener("DOMContentLoaded",function(e){t.push({tp:"dcl",t:(new Date).getTime()-_timeStart,pt:r,u:n,ud:o,rid:a});var i=document.body.querySelector("img")||[];i.length||(d=!0)},!1),window.addEventListener&&window.addEventListener("load",function(i){t.push({tp:"ld",t:(new Date).getTime()-_timeStart,pt:r,u:n,ud:o,rid:a}),s=!0,d=!0,p&&clearInterval(p),u&&t.push({tp:"fs",t:u,pt:r,u:n,ud:o,rid:a}),t.push({tp:"pf",dcl:(window.performance&&window.performance.timing.domComplete||0)-c,ld:(window.performance&&window.performance.timing.loadEventStart||0)-c,pt:r,u:n,ud:o,rid:a}),e.reportTime(t)},!1)},init:function(){this.addEvent()}};e.exports=c}]);
{{/ifand}}
</script>
{{!-- Android机器页面不再受到用户字体缩放强制改变大小 'http://m.blog.csdn.net/article/details?id=51275080' --}}
<script type="text/javascript">
var isWechat = /micromessenger/i.test(navigator.userAgent || '');
... ... @@ -97,20 +106,6 @@
{{#if nodownload}}
<input type="hidden" id="no-download" value="no-download">
{{/if}}
{{#ifand isProduction wap.open.bughd}}
<script type="text/javascript" src="//cdn.yoho.cn/tool/bj-report-tryjs.min.js?t={{startTime}}" crossOrigin="anonymous"></script>
<script type="text/javascript">
if (BJ_REPORT && BJ_REPORT.init) {
BJ_REPORT.init({
id: 2,
url: "//badjs.yoho.cn/badjs",
ignore: [/Script error/i],
offlineLog: false,
offlineLogAuto: false
});
}
</script>
{{/ifand}}
{{#wechatShare}}
<script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
{{/wechatShare}}
... ... @@ -121,18 +116,11 @@
<script src="//{{devHost}}:5001/{{module}}.{{page}}.js"></script>
{{^}}
<script>var STATIC_RESOURCE_PATH = '//cdn.yoho.cn/m-yohobuy-node/assets';</script>
<script src="//cdn.yoho.cn/m-yohobuy-node/{{version}}/libs.js?t={{startTime}}"></script>
{{#ifand isProduction wap.open.bughd}}
<script>
if (BJ_REPORT && BJ_REPORT.tryJs) {
BJ_REPORT.tryJs().spyAll();
}
</script>
{{/ifand}}
<script src="//cdn.yoho.cn/m-yohobuy-node/{{version}}/{{module}}.{{page}}.js?t={{startTime}}"></script>
<script src="//cdn.yoho.cn/m-yohobuy-node/{{version}}/libs.js?t={{startTime}}" crossorigin="anonymous"></script>
<script src="//cdn.yoho.cn/m-yohobuy-node/{{version}}/{{module}}.{{page}}.js?t={{startTime}}" crossorigin="anonymous"></script>
{{/if}}
{{#loadJs}}
<script type="text/javascript" src="{{src}}"></script>
<script type="text/javascript" src="{{src}}" crossorigin="anonymous"></script>
{{/loadJs}}
{{#unless devEnv}}
{{> analysis}}
... ...
... ... @@ -12,7 +12,7 @@
a.async = 1;
a.src = j;
m.parentNode.insertBefore(a, m);
}(window, document, 'script', (document.location.protocol === 'https:' ? 'https:' : 'http:') + '//cdn.yoho.cn/yas-jssdk/2.4.2/yas.js', '_yas'));
}(window, document, 'script', (document.location.protocol === 'https:' ? 'https:' : 'http:') + '//cdn.yoho.cn/yas-jssdk/2.4.6/yas.js', '_yas'));
var _hmt = _hmt || [];
... ... @@ -56,7 +56,7 @@
uid = uid === 0 ? '' : uid;
window._ozuid = uid; // 暴露ozuid
if (window._yas) {
window._yas(1 * new Date(), '2.4.2', 'yohobuy_m', uid, '', '');
window._yas(1 * new Date(), '2.4.6', 'yohobuy_m', uid, '', '');
}
setTimeout(function() {
... ...
This diff could not be displayed because it is too large.
{
"name": "m-yohobuy-node",
"version": "6.1.2",
"version": "6.1.3",
"private": true,
"description": "A New Yohobuy Project With Express",
"repository": {
... ... @@ -73,7 +73,7 @@
"xml2js": "^0.4.19",
"yoho-express-session": "^2.0.0",
"yoho-md5": "^2.0.0",
"yoho-node-lib": "=0.3.6",
"yoho-node-lib": "=0.5.3",
"yoho-zookeeper": "^1.0.8"
},
"devDependencies": {
... ...
... ... @@ -56,6 +56,7 @@ module.exports = (env) => {
path: path.join(__dirname, 'bundle'), // absolute path
filename: '[name].js'
},
devtool: 'hidden-source-map',
module: {
rules: [{
test: /\.vue$/,
... ...
... ... @@ -13,7 +13,6 @@ Object.keys(baseConfig.entry).forEach(function(name) {
});
module.exports = merge(baseConfig, {
devtool: '#cheap-module-source-map',
output: {
publicPath: devInfo.publicPath
},
... ...
... ... @@ -30,6 +30,7 @@ module.exports = merge(baseConfig, {
}),
new webpack.optimize.UglifyJsPlugin({
parallel: true,
sourceMap: true,
uglifyOptions: {
compress: {
warnings: false
... ...