UNPKG

fis3-postprocessor-yymonitor

Version:

yy前端监控系统 页面组件 fis3 版本

89 lines (66 loc) 2.85 kB
/* * YY前端监控 * http://fed.yy.com/ */ 'use strict'; var path = require('path'), fs = require('fs'), cheerio = require('cheerio'), request = require('sync-request'), async = require("async"); var loadFunMap = { "onerror": "__FEQUALITY__.lostCallBack(this)" }; var baseClass = "__fequality__base", emptyClass = "__fequality_empty", loadClass = "__fequality_load", loadId = "__FEQUALITY__QID"; var loadScriptSrc = "http://szhuodong.duowan.com/s/rp/fequality/yy-loadScript.min.js"; var baseTpl = '<script class="' + baseClass + '">\n window.__FEQUALITY__ = {}; \n window.__FEQUALITY__.errorQueue = [];\n window.__FEQUALITY__.lostSrcQueue = [];\n window.__FEQUALITY__.lostCallBack = function(el){\n el.onerror = null; \n window.__FEQUALITY__.lostSrcQueue.push(el.src);\n }\n window.onerror = function(){\n window.__FEQUALITY__.errorQueue.push(arguments);\n return "yyF2E_ErrorRerport";\n }\n \n</script>', emptyTime = '<script class="' + emptyClass + '">\n !window.__FEQUALITY__ &&( window.__FEQUALITY__ = {});\n window.__FEQUALITY__.yy_reportEmptyTimeEnd = new Date().getTime();\n</script>'; var lostSrcReport = function($){ var $scriptTagSet = $("script"); if($scriptTagSet.length){ $scriptTagSet.each(function(index, item){ var $t = $(item); if ($t.attr("src")) { $t.attr(loadFunMap); } }); } return $; } var initDoc = function($, loadScript, options){ $("." + baseClass).remove(); $("." + emptyClass).remove(); $("." + loadClass).remove(); var headTag = $("head"), firstScriptTag = headTag.find("script").first(), bodyTag = $("body"), loadScriptTag = "\n<script id='" + loadId + "' qid=" + options.qid + " class='" + loadClass + "'>\n\n" + loadScript + "\n\n</script>\n"; if(firstScriptTag.length) { firstScriptTag.before(baseTpl); }else{ headTag.append(baseTpl); } headTag.append(emptyTime); bodyTag.append(loadScriptTag); } var processFile = function($, scriptContent, conf){ fis.log.info('开始注入监控脚本.'); initDoc($, scriptContent, conf); // 注入丢失上报 if(conf.lostSrcReport){ $ = lostSrcReport($); } return $.html({decodeEntities: false}); } module.exports = function(content, file, conf){ fis.log.info('正在加载远程监控脚本.'); var res = request('GET', loadScriptSrc); var scriptContent = res.getBody().toString(); var $ = cheerio.load(content, {lowerCaseAttributeNames: false}); // 处理文件,添加监控脚本 var newContent = processFile($, scriptContent, conf); return newContent; };