1.1.7 • Published 3 years ago

magpie-miniapp v1.1.7

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

第一步

小程序运营平台设置 request合法域名 https://t.kanzhun.com

magpie.js

#import {magpieMiniApp}  from "magpie-miniapp";  //npm方案
import {magpieMiniApp,filterTools}  from "./index"; // 本地方案
magpieMiniApp.config.appKey = '86bc09254a2fbabdfba41' // key为自定义唯一值,用于后端记录时区分应用
magpieMiniApp.config.url = 'https://t.kanzhun.com/z.gif'; // 上报服务端地址
// 可选参数
magpieMiniApp.config.setSystemInfo = false; // 获取系统信息
magpieMiniApp.config.setLocation = false; // 获取用户位置信息
magpieMiniApp.config.thresholds = 4000; // 设置性能阀值
magpieMiniApp.config.v = "2.3.5"; // 设置项目版本号
magpieMiniApp.config.miniType=wx   //设置小程序平台类型 微信wx  QQ:qq

//自定义上报
wx.monitorSends = function (ops) {
    magpieMiniApp.sendMsg(ops)
}
wx.filterTools = function (ops) {
    filterTools(ops)
}
wx.magpieMiniApp =  magpieMiniApp
export {magpieMiniApp,filterTools}

使用场景说明

接入小程序监控,可以npm install magpieMiniApp 也可以本地引入SDK文件

接入方式

在入口文件app.js内引入

import magpieMiniApp from "./magpie.js"

App({
    onError: function (err) {
        //接入监控
        magpieMiniApp.error('error')
    },
    onLaunch: function (ops) {
      ....
    onShow: function () {
       ....
    },
    onHide: function () {
       ....
    },
    globalData: {
      ....
    }
});

完整代码

    //性能监控开始时间
            import {filterTools}  from "magpie-miniapp";
            const jsErrorArray = [
                    /(\w+\.){2}\w+/,
                    /\/job\/+\w+/g,
                    /request\:fail/,
                    "该账号已被冻结",
                    "审核中",
                    "职位已下线",
                    "下载店长直聘软件,立即和店长沟通",
                    "名字长度为2-5个字",
                    "请先去完善自我介绍后再投递",
                    "您的账号已注销",
                    "今日投递次数已用完",
                    "至少保留一张照片",
                    "请选择您想找的职位类型",
                    "非好友,不能查看好友信息",
                    "没有查到boss信息,请重新选择",
                    "/ticket/check.json",
                    "/job/phone.json",
                    "/job/deliverWap.json",
                    "/user/update.json",
                    "/geek/update.json",
                    "/mini/friendRelation/isFriend.json"
                ]

            let currentTime=new Date().getTime()

            wx.request({
                url: requestUrl,
                method: opts.method,
                header: header,
                data: opts.data,
                success(res) {
                    //性能监控上报
                    currentTime=new Date().getTime()-currentTime
                    if(wx.magpieMiniApp.config.thresholds<currentTime){
                        wx.monitorSends({
                            errorCode: `{appKey:${wx.magpieMiniApp.config.appKey},api:${opts.url},msg:"超过5S"`,
                            sceneType:"-1",
                            apiUrl:opts.url||"",
                            runTime:currentTime,
                            apiParam:opts.data||{},
                            errorType:"performance",
                        })
                    }
                    //接口监控
                    if (res.data.rescode != 0 && !filterData(jsErrorArray, res.data.resmsg)) {
                        if (!filterData(jsErrorArray, opts.url)) {
                            wx.monitorSends({
                                errorCode: res.data,
                                errorType:"codeError",
                                apiUrl:requestUrl||"",
                                apiParam:opts.data||{}
                            })
                        }
                   }

                },
               fail: function (e) {
                     if(!filterData(jsErrorArray,e.resmsg)){
                        wx.monitorSends({
                            errorCode: e,
                            apiUrl:requestUrl||"",
                            apiParam:opts.data||{},
                            errorType:"httpCatchError"
                        })
                    }
                    reject(e);
                    checkNetworkStatus()
                }
            })

性能监控

let currentTime=new Date().getTime()
  wx.request({
    url: requestUrl,
    method: opts.method,
    header: header,
    data: opts.data,
    success(res) {
         //性能监控上报
        currentTime=new Date().getTime()-currentTime
        if(wx.magpieMiniApp.config.thresholds<currentTime){
             wx.monitorSends({
                errorCode: `{appKey:${wx.magpieMiniApp.config.appKey},api:${requestUrl}`,
                sceneType:"-1",
                apiUrl:requestUrl||"",
                runTime:currentTime,
                apiParam:opts.data||{},
                errorType:"performance",
          })
        }
    }
 })
接口数据异常上报

根据情况自行设置过滤条件

 if (res.data.rescode != 0 && filterData(FilterTextArray, res.data.resmsg)) {
    if (filterData(FilterApiArray, opts.url)) {
        wx.monitorSends({
            errorCode: res.data,
            errorType:"codeError",
            apiUrl:requestUrl||"",
            apiParam:opts.data||{}
        })
    }
}

工具:上报过滤器

根据业务场景,有些错误没必要上报,可以通过过滤器 filterTools(arr,target) 使用方式

import {filterTools}  from "magpie-miniapp";  //npm方案
filterTools(jsErrorArray,"变量")
或者
wx.filterTools(jsErrorArray,"变量")

常规用法

例子

resMsg文案过滤
const FilterTextArray = [
    "该账号已被冻结",
    "审核中",
    "职位已下线",
    "下载店长直聘软件,立即和店长沟通",
    "名字长度为2-5个字",
    "请先去完善自我介绍后再投递",
    "您的账号已注销",
    "今日投递次数已用完",
    "至少保留一张照片",
    "请选择您想找的职位类型",
]
错误字符串过滤
const FilterCatchArray = [
    "request:fail interrupted",
    "request:fail 请求超时。",
    "request:fail timeout",
    "request:fail -105:net::ERR_NAME_NOT_RESOLVED",
    "fail - 105: net:: ERR_NAME_NOT_RESOLVED",
]
接口地址过滤
const FilterApiArray = [
    "/ticket/check.json",
    "/job/phone.json",
    "/job/deliverWap.json",
    "/user/update.json",
    "/geek/update.json",
    "/job/detail.json",
]

//过滤指定的resMsg文案 wx.filterData(FilterTextArray,res.resMsg) //过滤指定的接口地址 wx.filterData(FilterApiArray,url) //过滤包含有异常文案 wx.filterData(FilterCatchArray,e.resmsg)

高级用法

混合使用(自定义正则 +字符串过滤)

const jsErrorArray = [
    /(\w+\.){2}\w+/,
    "/ticket/check.json",
    "/job/phone.json",
    "/job/deliverWap.json",
    "/user/update.json",
    "request:fail interrupted",
    "request:fail 请求超时。",
    "request:fail timeout",
    "您的账号已注销",
    "今日投递次数已用完",
    /\/job\/+\w+/g
  
]

过滤指定内容(正则形式,字符串形式)

 wx.filterTools(jsErrorArray,"变量")

下载本地包

小程序监控本地包下载