添加埋点方法、装置、计算机设备及计算机可读存储介质与流程

文档序号:33507217发布日期:2023-03-18 03:15阅读:42来源:国知局
添加埋点方法、装置、计算机设备及计算机可读存储介质与流程

1.本发明涉及计算机编程领域,尤其涉及一种可用于金融科技或者其他相关领域的添加埋点方法、装置、计算机设备及计算机可读存储介质。


背景技术:

2.埋点是指针对用户行为或事件进行捕获、处理及发送的技术实施过程。埋点能够监听软件系统运行过程中的事件,并捕获需要关注的事件,是软件系统的异常监控的重要环节。埋点包括了行为埋点和主动埋点。行为埋点用于捕获用户的点击、滑动及停留等操作行为。主动埋点是指开发人员根据业务场景的业务流程,主动在业务流程的关键节点添加埋点的方式。
3.通常业务流程的关键节点分布在业务代码中。开发人员需要手动将埋点的逻辑代码添加至业务代码中,导致了业务流程中存在大量与业务代码不相关的埋点代码段,进而导致了埋点容易造成业务代码代码运行异常。此外,当埋点核心库api(application program interface,应用程序界面)发生变更时,需要开发人员手动查询变更,并改动相关的业务代码。同时,通常还需要修改业务代码来适配不同的埋点系统。业务代码添加埋点过程中,修改业务代码容易触发业务代码缺陷,进而造成业务代码的运行异常。


技术实现要素:

4.有鉴于此,本发明的目的是为了克服现有技术中的不足,提供一种添加埋点方法、装置、计算机设备及计算机可读存储介质,以解决埋点造成代码运行异常的问题。
5.第一方面,本技术提供一种添加埋点方法,包括:
6.获取待添加埋点的业务场景的业务代码,并获取所述业务代码的埋点的位置,对所述位置添加标记;
7.基于所述标记聚合所述埋点的埋点逻辑,构建抽象语法树;
8.获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型;
9.根据所述抽象语法树和所述位置的代码类型,生成所述埋点的逻辑代码信息;
10.基于所述标记,将所述埋点的逻辑代码信息并入所述业务场景的代码构建流程。
11.结合第一方面,在第一种可能的实现方式中,所述获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型,包括:
12.获取所述标记的上下文信息,并根据所述上下文信息,得到预设数量的埋点策略;
13.将所述埋点与每个所述埋点策略进行适配,得到所述位置的代码类型。
14.结合第一方面,在第二种可能的实现方式中,所述基于所述标记聚合所述埋点的埋点逻辑,构建抽象语法树,包括:
15.通过解析器解析所述标记的语法结构,得到所述埋点的日志等级;
16.基于所述日志等级聚合所述埋点的埋点逻辑,构建抽象语法树。
17.结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,获取所述
标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型之后,还包括:
18.基于所述日志等级和所述上下文信息,更新所述抽象语法树。
19.结合第一方面,在第四种可能的实现方式中,所述根据所述抽象语法树和所述位置的代码类型,生成所述埋点的逻辑代码信息,包括:
20.根据所述位置的代码类型,将所述抽象语法树转换为魔术字符串;
21.基于所述魔术字符串,生成所述埋点的逻辑代码信息。
22.结合第一方面,在第五种可能的实现方式中,所述基于所述标记,将所述埋点的逻辑代码信息并入所述业务场景的代码构建流程,包括:
23.基于所述标记,确定所述业务场景的业务代码中的所述埋点的位置;
24.将所述埋点的逻辑代码信息注入所述位置,更新所述业务场景的代码构建流程。
25.结合第一方面,在第六种可能的实现方式中,所述位置的代码类型包括函数类型、表达式类型及变量声明类型。
26.第二方面,本技术提供一种添加埋点装置,包括:
27.标记添加模块,用于获取待添加埋点的业务场景的业务代码,并获取所述业务代码的埋点的位置,对所述位置添加标记;
28.基语法树构建模块,用于基于所述标记聚合所述埋点的埋点逻辑,构建抽象语法树;
29.代码类型获取模块,用于获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型;
30.代码生成模块,用于根据所述抽象语法树和所述位置的代码类型,生成所述埋点的逻辑代码信息;
31.代码并入模块,用于基于所述标记,将所述埋点的逻辑代码信息并入所述业务场景的代码构建流程。
32.第三方面,本技术提供一种计算机设备,所述计算机设备包括存储器及处理器,所述存储器存储有计算机程序,所述计算机程序在所述处理器执行时,实现如第一方面所述的添加埋点方法。
33.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现如第一方面所述的添加埋点方法。
34.本技术提供一种添加埋点方法,包括:获取待添加埋点的业务场景的业务代码,并获取所述业务代码的埋点的位置,对所述位置添加标记;基于所述标记聚合所述埋点的埋点逻辑,构建抽象语法树;获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型;根据所述抽象语法树和所述位置的代码类型,生成所述埋点的逻辑代码信息;基于所述标记,将所述埋点的逻辑代码信息并入所述业务场景的代码构建流程。通过解析需要埋点的位置,在代码构建流程中自动添加埋点,提高了添加埋点的效率。同时,将埋点的逻辑代码信息与业务代码分离,添加埋点过程中,不需要更新调整原始的业务代码,避免了埋点造成业务代码运行异常。
附图说明
35.为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简
单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对本发明保护范围的限定。在各个附图中,类似的构成部分采用类似的编号。
36.图1示出了本发明实施例提供的第一种添加埋点方法的流程图;
37.图2示出了本发明实施例提供的第二种添加埋点方法的流程图;
38.图3示出了本发明实施例提供的第三种添加埋点方法的流程图;
39.图4示出了本发明实施例提供的添加埋点装置的结构示意图。
具体实施方式
40.下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
41.通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
42.在下文中,可在本发明的各种实施例中使用的术语“包括”、“具有”及其同源词仅意在表示特定特征、数字、步骤、操作、元件、组件或前述项的组合,并且不应被理解为首先排除一个或更多个其它特征、数字、步骤、操作、元件、组件或前述项的组合的存在或增加一个或更多个特征、数字、步骤、操作、元件、组件或前述项的组合的可能性。
43.此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
44.除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本发明的各种实施例所属领域普通技术人员通常理解的含义相同的含义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本发明的各种实施例中被清楚地限定。
45.通常埋点是用来辅助业务流程改善,或者帮助定位业务流程的缺陷。如果埋点本身存在缺陷,将对业务场景的业务代码造成影响。业务流程的关键节点分布在业务代码中。开发人员需要手动将埋点的逻辑代码添加至业务代码中。当埋点核心库api(application program interface,应用程序界面)发生变更时,需要开发人员手动查询变更,并改动相关的业务代码。同时,通常还需要修改业务代码来适配不同的埋点系统。业务代码添加埋点过程中,修改业务代码容易触发业务代码缺陷,进而造成业务代码的运行异常。
46.实施例1
47.请参阅图1,图1示出了本发明实施例提供的第一种添加埋点方法的流程图。图1中的添加埋点方法包括:
48.s110,获取待添加埋点的业务场景的业务代码,并获取所述业务代码的埋点的位置,对所述位置添加标记。
49.埋点分析时常用的数据采集方法。对业务流程的埋点能够获取用户行为信息。根据获取到的用户行为信息,优化业务场景的业务流程,提升业务场景的用户体验。根据业务
场景的业务流程,主动在业务流程的关键节点添加埋点。业务流程的关键节点分布在业务代码中,需要将埋点的逻辑代码添加至业务代码。
50.当需要对业务场景的业务代码添加埋点时,获取并遍历待添加埋点的业务场景的业务代码。根据务场景的业务流程的关键节点,获取业务代码中需要添加埋点的位置,即埋点的位置。对埋点的位置添加标记,将位置的标记作为占位符,以便于后续确定埋点的逻辑代码的注入位置。需要理解的是,标记是根据实际需求设置的,可以由任意字符组成,在此不做限定。为便于理解,本技术的实施例中,位置的标记为:/*@auto-*/。还需要理解的是,还可以通过标记来记录埋点的其他信息,在此不做赘述。
51.s120,基于所述标记聚合所述埋点的埋点逻辑,构建抽象语法树。
52.计算机科学中,抽象语法树(abstract syntax tree,ast)又被称为语法树(syntax tree),是源代码语法结构的一种抽象表示。抽象语法树以树状的形式表现编程语言的语法结构,树状结构上的每个节点都表示了源代码中的一种结构。
53.现有技术对业务场景的业务代码添加埋点时,埋点逻辑与业务代码是高度耦合的,需要修改业务代码以适配埋点逻辑。本技术在业务场景的代码构建过程中,将与业务代码耦合的埋点逻辑分离。解析添加的标记,对埋点的埋点逻辑进行聚合,并构建埋点的抽象语法树。
54.请参阅图2,图2示出了本发明实施例提供的第二种添加埋点方法的流程图。
55.作为一个示例,所述基于所述标记聚合所述埋点的埋点逻辑,构建抽象语法树,包括:
56.s121,通过解析器解析所述标记的语法结构,得到所述埋点的日志等级。
57.解析器的类型是根据实际需求设置,在此不做限定。为便于理解,本技术的实施例汇总,解析器为抽象语法树插件工具。通过抽象语法树插件工具,聚合埋点逻辑。具体地,以添加的标记为/*@auto-log*/为例。通过解析器解析标记的语法结构,得到埋点的日志等级为log。
58.s122,基于所述日志等级聚合所述埋点的埋点逻辑,构建抽象语法树。
59.需要理解的是,日志等级根据对代码的实际需求设置,还可以是debug、info、warning、error、critical、all、trace、fatal、off等,在此不做限定。不同的日志等级,具有不同的反馈等级,在此不做赘述。基于日志等级聚合埋点的埋点逻辑,构建抽象语法树。
60.s130,获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型。
61.标记的上下文信息,为执行标记对应的任务时所需要的相关信息,其中,标记对应的任务可以是代码段、线程、进程及函数等,在此不做赘述。上下文信息可以是语义上下文,也可以是空间上下文,还可以是尺度上下文,在此不做赘述。根据上下文信息,得到标记的位置适配的代码类型。
62.作为一个示例,所述获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型,包括:
63.获取所述标记的上下文信息,并根据所述上下文信息,得到预设数量的埋点策略;
64.将所述埋点与每个所述埋点策略进行适配,得到所述位置的代码类型。
65.获取标记的上下文信息之后,根据上下文信息,得到预设数量的埋点策略,其中,
预设数量是根据标记的上下文信息发生变化的,在此不做限定。每个埋点策略对应了不同的代码类型,将当前位置的埋点与每个埋点策略进行适配,得到适配当前位置的代码类型。通过适配不同的埋点策略进行埋点的代码生成,不需要测试人员添加埋点逻辑代码相关的测试用例。
66.请参阅图3,图3示出了本发明实施例提供的第三种添加埋点方法的流程图。
67.在一个可选的示例中,获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型之后,还包括:
68.s131,基于所述日志等级和所述上下文信息,更新所述抽象语法树。
69.聚合埋点的日志等级管理及埋点的上下文策略,可以更好的动态切换埋点逻辑,便于后续对埋点的更新维护。更新和维护埋点时,不需要修改业务代码,避免修改业务代码触发业务代码缺陷,进而避免埋点造成业务代码的运行异常。同时,配置埋点的更新插件,并通过更新插件,完善埋点信息的采集。
70.s140,根据所述抽象语法树和所述位置的代码类型,生成所述埋点的逻辑代码信息。
71.抽象语法树是源代码语法结构的一种抽象表示,不会表示出代码语法中出现的所有细节。例如,代码信息中的嵌套括号将被隐含在抽象语法树的树状结构中,不以节点的形式进行程序。根据位置适配的代码类型,对抽象语法树中的埋点逻辑进行声明,得到可注入业务代码的埋点的逻辑代码信息。需要理解的是,逻辑代码信息的类型,是根据实际的埋点类型设置的,在此不做限定。
72.当开发人员手动添加至业务代码的埋点逻辑代码时,在进行埋点逻辑代码测试时,需要测试人员添加埋点逻辑代码相关的测试用例,以通过测试用例检测埋点逻辑代码对业务场景的业务代码的影响。基于本技术得到埋点的逻辑代码信息,不需要配置额外的测试用例测试逻辑代码信息的代码覆盖率和安全性,提高了开发测试效率。
73.作为一个示例,所述根据所述抽象语法树和所述位置的代码类型,生成所述埋点的逻辑代码信息,包括:
74.根据所述位置的代码类型,将所述抽象语法树转换为魔术字符串;
75.基于所述魔术字符串,生成所述埋点的逻辑代码信息。
76.根据位置的代码类型,声明埋点的函数,基于埋点的函数,将构建的抽象语法树转换为魔术字符串。基于魔术字符串,生成埋点的逻辑代码信息,注入业务代码中的魔术字符串可重复出现。魔术字符串是与业务代码形成强耦合的字符串或数值形式的代码信息。魔术字符串不会修改业务代码,避免了需要更新调整原始的业务代码,进而避免了埋点造成业务代码运行异常。为了便于更新和维护添加的埋点,可将魔术字符串转换为变量,得到埋点的逻辑代码信息。
77.作为一个示例,所述位置的代码类型包括函数类型、表达式类型及变量声明类型。
78.根据标记的上下文信息,分别标记的位置的代码类型。根据位置的代码类型适配不同的埋点策略,以得到埋点代码。具体地,代码类型包括函数类型、表达式类型及变量声明类型。需要理解的是,函数类型可以是字符库函数,数学函数,目录函数,进程函数,诊断函数,操作函数等,在此不做限定。表达式类型可以是运算符表达式、常量表达式及变量表达式,在此不做限定。变量声明类型可以是时间变量声明、长度变量声明及对象变量声明,
在此不做限定。
79.s150,基于所述标记,将所述埋点的逻辑代码信息并入所述业务场景的代码构建流程。
80.构建业务代码时,基于预先添加的标记,在埋点的位置注入逻辑代码信息,将埋点的逻辑代码信息并入所述业务场景的代码构建流程。自动埋点及对埋点的位置添加标记,可以使得业务代码具有简单整洁的视觉效果。需要理解的是,还根据得到的埋点的逻辑代码的上下文,得到多个不同的埋点方案。将不同的埋点方案聚合至抽象语法树插件工具。后续更新、维护及替换适配不同的埋点方案,使得抽象语法树插件工具能快速针对所有的情况,实现添加埋点效率最大化。
81.通过解析需要埋点的位置,在代码构建流程中自动添加埋点,提高了添加埋点的效率。同时,将埋点的逻辑代码信息与业务代码分离,添加埋点过程中,不需要更新调整原始的业务代码,避免了埋点造成业务代码运行异常。
82.本技术提供一种添加埋点方法,包括:获取待添加埋点的业务场景的业务代码,并获取所述业务代码的埋点的位置,对所述位置添加标记;基于所述标记聚合所述埋点的埋点逻辑,构建抽象语法树;获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型;根据所述抽象语法树和所述位置的代码类型,生成所述埋点的逻辑代码信息;基于所述标记,将所述埋点的逻辑代码信息并入所述业务场景的代码构建流程。通过解析需要埋点的位置,在代码构建流程中自动添加埋点,提高了添加埋点的效率。同时,将埋点的逻辑代码信息与业务代码分离,添加埋点过程中,不需要更新调整原始的业务代码,避免了埋点造成业务代码运行异常。
83.实施例2
84.请参阅图4,图4示出了本发明实施例提供的添加埋点装置的结构示意图。图4中的添加埋点装置200包括:
85.标记添加模块210,用于获取待添加埋点的业务场景的业务代码,并获取所述业务代码的埋点的位置,对所述位置添加标记;
86.语法树构建模块220,用于基于所述标记聚合所述埋点的埋点逻辑,构建抽象语法树;
87.代码类型获取模块230,用于获取所述标记的上下文信息,并根据所述上下文信息,得到所述位置的代码类型;
88.代码生成模块240,用于根据所述抽象语法树和所述位置的代码类型,生成所述埋点的逻辑代码信息;
89.代码并入模块250,用于基于所述标记,将所述埋点的逻辑代码信息并入所述业务场景的代码构建流程。
90.作为一个示例,代码类型获取模块230,包括:
91.埋点策略子模块,用于获取所述标记的上下文信息,并根据所述上下文信息,得到预设数量的埋点策略;
92.代码类型子模块,用于将所述埋点与每个所述埋点策略进行适配,得到所述位置的代码类型。
93.作为一个示例,语法树构建模块220,包括:
94.日志等级子模块,用于通过解析器解析所述标记的语法结构,得到所述埋点的日志等级;
95.抽象语法树子模块,用于基于所述日志等级聚合所述埋点的埋点逻辑,构建抽象语法树。
96.在一个可选的示例中,所述添加埋点装置200之后,还包括:
97.基于所述日志等级和所述上下文信息,更新所述抽象语法树。
98.作为一个示例,代码生成模块240,包括:
99.魔术字符串子模块,用于根据所述位置的代码类型,将所述抽象语法树转换为魔术字符串;
100.逻辑代码信息子模块,用于基于所述魔术字符串,生成所述埋点的逻辑代码信息。
101.作为一个示例,代码并入模块250,包括:
102.位置确定子模块,用于基于所述标记,确定所述业务场景的业务代码中的所述埋点的位置;
103.代码注入子模块,用于将所述埋点的逻辑代码信息注入所述位置,更新所述业务场景的代码构建流程。
104.作为一个示例,所述位置的代码类型包括函数类型、表达式类型及变量声明类型。
105.添加埋点装置200用于执行上述的添加埋点方法中的对应步骤,各个功能的具体实施,在此不再一一描述。此外,实施例1中可选示例也同样适用于实施例2的添加埋点装置200。
106.本技术实施例还提供一种计算机设备,所述计算机设备包括存储器及处理器,所述存储器存储有计算机程序,所述计算机程序在所述处理器执行时,实现如实施例1所述的添加埋点方法。
107.本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现如实施例1所述的添加埋点方法。
108.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和结构图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,结构图和/或流程图中的方框、以及结构图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
109.另外,在本发明各个实施例中的各功能模块或单元可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或更多个模块集成形成一个独立的部分。
110.所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计
算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是智能手机、个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
111.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1