自动化埋点方法和装置、计算机可读存储介质、电子设备与流程

未命名 10-08 阅读:86 评论:0


1.本公开实施例涉及计算机技术领域,具体而言,涉及一种自动化埋点方法、自动化埋点装置、计算机可读存储介质以及电子设备。


背景技术:

2.随着计算机技术的发展,为了分析网站或者应用系统的性能,需要在项目的源码中添加一些额外的代码来收集用户使用该网站或者应用系统时的相关数据,即,通过埋点实现对用户数据的收集。
3.目前的埋点方案主要有:编程式埋点和全局埋点。编程式埋点是在开发的同时进行埋点;全局埋点是在页面根节点或者页面指定栏进行事件埋点绑定。但是,上述编程式埋点使得埋点代码和业务逻辑严重耦合,影响需求的开发;全局埋点会影响页面性能。
4.因此,需要提供一种新的自动化埋点方法。
5.需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。


技术实现要素:

6.本公开的目的在于提供一种自动化埋点方法、自动化埋点装置、计算机可读存储介质以及电子设备,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的埋点代码与业务代码严重耦合的问题。
7.根据本公开的一个方面,提供一种自动化埋点方法,包括:
8.获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;
9.获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;
10.利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;
11.将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点。
12.在本公开的一种示例性实施例中,所述埋点配置文件为js文件或json文件;
13.当所述埋点配置文件为json文件时,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象,包括:
14.通过即时编译型编程语言的运行环境中包括的文件处理模块,对所述埋点配置文件进行读取,获取所述埋点配置文件中包括的文件内容;
15.对所述文件内容进行反序列化,得到所述埋点配置文件中包括的配置对象。
16.在本公开的一种示例性实施例中,在根据所述配置信息确定项目的语法树中与所述配置对象对应的节点之前,所述自动化埋点方法还包括:
17.在对所述项目的源码打包时,通过编写即时编译型编程语言的编译器对所述项目
的源码进行转换,得到所述项目的语法树。
18.在本公开的一种示例性实施例中,获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点,包括:
19.获取所述项目的语法树以及所述项目的语法树中包括的节点的类型;
20.获取所述配置对象中包括的配置信息,其中,所述配置信息包括:需要埋点的文件、需要埋点的方法名以及埋点参数;
21.在所述需要埋点的文件中确定所述需要埋点的方法名所在的代码段,以及所述代码段在所述项目的源码中的结构;
22.在所述语法树中确定与所述代码段在所述项目的源码中的结构对应的节点类型,并根据所述节点类型确定项目的语法树中与所述配置对象对应的节点。
23.在本公开的一种示例性实施例中,获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点,还包括:
24.当所述项目为跨端实现时,确定所述项目在任一端的前端框架,并且获取与所述任一端的源码对应的语法树;
25.根据所述前端框架以及所述前端框架中的函数定义方式,确定与所述任一端的源码对应的语法树中包括方法的节点;
26.根据所述配置信息,在所述包括方法的节点中确定与所述配置对象对应的节点。
27.在本公开的一种示例性实施例中,利用所述配置信息生成语法树插入节点,包括:
28.通过编写即时编译型编程语言的编译器的模板转换工具生成模板方法;
29.根据所述配置对象中包括的配置信息,执行所述模板方法,生成所述语法树插入节点。
30.在本公开的一种示例性实施例中,将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树,包括:
31.将所述语法插入节点作为与所述配置对象对应的节点的子节点,插入到所述项目的语法树中,得到埋点语法树。
32.在本公开的一种示例性实施例中,将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点,包括:
33.通过编写即时编译型编程语言的编译器的生成模块将所述埋点语法树转换为字符串输出。
34.根据本公开的一个方面,提供一种自动化埋点装置,包括:
35.配置对象获取模块,用于获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;
36.需要插入节点确定模块,用于获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;
37.埋点语法树生成模块,用于利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;
38.自动埋点模块,用于将所述埋点语法树转换为源码字符串,以完成对所述项目的自动化埋点。
39.根据本公开的一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,
所述计算机程序被处理器执行时实现上述任一示例性实施例所述的自动化埋点方法。
40.根据本公开的一个方面,提供一种电子设备,包括:
41.处理器;以及
42.存储器,用于存储所述处理器的可执行指令;
43.其中,所述处理器配置为经由执行所述可执行指令来执行上述任一示例性实施例所述的自动化埋点方法。
44.本公开实施例提供的一种自动化埋点方法,获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点;一方面,读取埋点配置文件,获取埋点配置文件中包括的配置对象以及配置对象中包括的配置信息,然后,根据配置信息确定在项目的语法树中需要插入代码的节点,即,语法树中与配置对象对应的节点,再次,根据配置信息生成语法树插入节点,并将该插入节点插入到项目的语法树中,得到埋点语法树,最后,将埋点语法树转换成字符串,实现了对埋点代码的自动插入,减少了埋点代码与源码之间的耦合,增强了源码的可读性;另一方面,通过埋点配置文件实现数据埋点,可以集中管理埋点相关逻辑,便于对埋点配置文件的维护;再一方面,自动化埋点节约了开发者添加埋点的时间,提高了开发效率。
45.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
46.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
47.图1示意性示出了可以应用于本公开实施例的一种自动化埋点方法的流程图。
48.图2示意性示出根据本公开示例实施例的一种自动化埋点系统的框图。
49.图3示意性示出根据本公开示例实施例的一种对埋点配置文件进行解析,得到埋点配置文件中包括的配置对象的方法流程图。
50.图4示意性示出根据本公开示例实施例的一种通过babel对项目源码进行解析的方法流程图。
51.图5示意性示出根据本公开示例实施例的一种根据配置信息确定项目点额语法树中与配置对象对应的节点的方法流程图。
52.图6示意性示出根据本公开示例实施例的又一种根据配置信息确定项目的语法树中与配置对象对应的节点的方法流程图。
53.图7示意性示出根据本公开示例实施例的一种利用配置信息生成语法树插入节点的方法流程图。
54.图8示意性示出根据本公开示例实施例的一种自动化埋点装置的框图。
55.图9示意性示出根据本公开示例实施例的用于实现上述自动化埋点方法的电子设备。
具体实施方式
56.现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
57.此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
58.为了分析网站的性能、uv(unique visitor,独立访客)、pv(page view,访问量)、用户转化以及留存等数据,前端埋点是必不可少的,埋点数据为网站的优化以及产品的发展优化方向提供了基础数据支持。目前,前端埋点主要包括:
59.编程式埋点:将埋点代码逻辑与业务代码完全耦合,不进行代码的隔离,开发者在开发需求的同时进行埋点的添加;
60.全局埋点上报:在页面根节点或者页面特定栏进行事件埋点绑定,实现了不同粒度的埋点,同时减少了埋点逻辑与业务代码之间的耦合。
61.但是,编程式埋点会导致埋点代码与业务逻辑代码严重耦合,影响开发人员需求的开发,并且随着代码量的增加,埋点维护也会变得越来越难。同时,埋点代码多为重复代码,同一项目不同开发者的代码风格的迥异也会造成埋点逻辑影响业务代码的可读性;此外,埋点代码渗透到项目源码的各个文件以及各个方法中,不能实现对埋点的集中管理。全局埋点上报,会带来大量无意义的埋点上报,影响客户流量以及页面性能,并且全局埋点上报的方式无法处理阻止事件冒泡/事件捕获的事件上报。
62.基于上述一个或者多个问题,本示例实施方式中首先提供了一种任务处理方法,参考图1所示,该自动化埋点方法可以包括以下步骤:
63.步骤s110.获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;
64.步骤s120.获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;
65.步骤s130.利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;
66.步骤s140.将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点。
67.上述自动化埋点方法,获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点;一方面,读取埋点配置文件,获取埋点配置文件中包括的配置对象以及配置对象中包括的配置信息,然后,根据配置信息确定在项目的语法树中需要插入代码的节点,即,语法树中与配置对象对应的节点,再次,根据配置信息生成语法树插入节点,并将该插入节点插入到项目的语法树中,得到埋点语法树,最后,将埋点语法树转换成字符串,实现了对埋点代码的自动插入,减少了埋点代码与源码之间的耦合,增强了源码的可读性;另一方面,通过埋点配置文件实现数据埋点,可以集中管理埋点相关逻辑,便于对埋点配置文件的维护;再一方面,自动化埋点节约了开发者添加埋点的时间,提高了开发效率。
68.以下,对本公开示例实施例的自动化埋点方法中涉及的各步骤进行详细的解释以及说明。
69.首先,对本公开示例实施例的应用场景以及目的进行解释以及说明。具体的,本公开示例实施例可以应用于对项目的埋点,主要研究如何降低埋点代码和业务代码之间的耦合,并且提高对埋点逻辑的集中管理。
70.在本公开中在项目源码打包过程中,将项目源码转换成语法树,读取埋点配置文件,获取埋点配置文件中包括的配置对象以及配置对象中包括的配置信息,根据配置信息确定在项目的语法树中需要进行埋点的节点,根据配置信息生成语法树插入节点,并将语法树插入节点作为项目的语法树中需要进行埋点的节点的子节点插入到项目的语法树中,得到埋点语法树,再将埋点语法树转换为字符串,实现了埋点的自动化插入,降低了埋点代码和业务代码之间的耦合。
71.其次,对本公开示例实施例中涉及到的自动化埋点系统进行解释以及说明。参考图2所示,该自动化埋点系统可以包括配置信息获取模块210、babel(javascript编译器)插件220以及节点插入模块230。其中,配置信息获取模块210,用于获取项目中包括的埋点配置文件,对获取到的埋点配置文件进行解析,得到埋点配置文件中包括的配置对象以及配置对象中包括的配置信息;babel插件220,与信息获取模块210网络连接,用于在项目打包阶段将项目源码转换成语法树,并且根据配置对象中包括的配置信息生成语法树插入节点,以及将生成的埋点语法树转换成字符串;节点插入模块230,与babel插件220网络连接,用于根据配置信息确定项目的语法树中需要进行埋点的节点,并且将语法树插入节点作为项目的语法树中需要进行埋点的节点的子节点,并且插入到项目的语法树中,得到埋点语法树。
72.以下,将结合图2对步骤s110-步骤s140进行详细的解释以及说明。
73.在步骤s110中,获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象。
74.在本示例实施例中,所述埋点配置文件为js文件或json文件;
75.当所述埋点配置文件为json文件时,参考图3所示,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象,可以包括步骤s310以及步骤s320:
76.步骤s310.通过即时编译型编程语言的运行环境中包括的文件处理模块,对所述埋点配置文件进行读取,获取所述埋点配置文件中包括的文件内容;
77.步骤s320.对所述文件内容进行反序列化,得到所述埋点配置文件中包括的配置对象。
78.以下,将对步骤s310以及步骤s320进行解释以及说明。具体的,埋点配置文件可以为js文件,也可以为json文件,在本示例实施例中对此不做具体限定。埋点配置文件的类型不同,需要采用不同的方法获取配置信息,其中,当埋点配置文件为js文件时,埋点配置文件中的配置对象的获取方法比较直接,可以通过导入埋点配置文件中导出的配置对象得到;但是,当埋点配置文件为json文件时,首先,通过node.js中的文件处理模块对埋点配置文件进行读取,获取埋点配置文件中包括的文件内容,再对读取到的文件内容进行反序列化,得到埋点配置文件中包括的配置对象;其中,node.js为一种javascript运行环境,javascript为一种即时编译型的编程语言。
79.在步骤s120中,获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点。
80.在本示例实施例中,在根据所述配置信息确定项目的语法树中与所述配置对象对应的节点之前,所述自动化埋点方法还包括:
81.在对所述项目的源码打包时,通过编写即时编译型编程语言的编译器对所述项目的源码进行转换,得到所述项目的语法树。
82.具体的,在项目源码打包过程中,可以通过babel插件将项目源码转换为javascript便于操作的抽象语法树,即,将项目源码转换为项目的语法树。其中,babel为编写下一代javascript的编译器,支持用户插件,通过babel可以实现对源码功能的扩充与完善,同时可以实现代码的静态检查等功能。babel自身的功能还可以通过不同的插件进行增强,开发者可以很方便的通过自定义插件实现对源码的操作,从而实现代码的自动化扩充转换。参考图4所示,babel对源码的解析过程可以包括:s410.对项目源码进行打包;s420.通过babel的解析模块@babel/parser来解析项目的源码以生成语法树;s430.通过babel插件自定义埋点插件,并将自定义埋点插件插入到项目的语法树中;s440.通过babel的生成模块@babel/generator对项目的语法树进行转换,将项目的语法树转换为源码;s450.输出源码。
83.在本示例实施例中通过对项目的语法树的操作,实现了代码打包时自动化添加埋点,可以使开发人员将注意力集中到业务代码的开发中,增强了项目源码的可读性。
84.当获取到配置对象中包括的配置信息之后,参考图5所示,根据配置信息确定项目的语法树中与所述配置对象对应的节点,可以包括步骤s510-步骤s540:
85.步骤s510.获取所述项目的语法树以及所述项目的语法树中包括的节点的类型;
86.步骤s520.获取所述配置对象中包括的配置信息,其中,所述配置信息包括:需要埋点的文件、需要埋点的方法名以及埋点参数;
87.步骤s530.在所述需要埋点的文件中确定所述需要埋点的方法名所在的代码段,以及所述代码段在所述项目的源码中的结构;
88.步骤s540.在所述语法树中确定与所述代码段在所述项目的源码中的结构对应的节点类型,并根据所述节点类型确定项目的语法树中与所述配置对象对应的节点。
89.以下,将对步骤s510-步骤s540进行解释以及说明。具体的,babel根据不同的代码结构将不同的代码分为不同的节点类型,在将项目源码转换成语法树之后,语法树上的每一个节点都表示项目源码中的一种结构,因此,首先,需要获取项目的语法树以及项目的语法树中包括的节点的类型,其中,语法树中的节点类型可以为函数表达式(function expression)、箭头函数(arrow function expression),也可以为代码块(block statement),还可以为对象属性(object property),在本示例实施例中对语法树中的节点类型不做具体限定;然后,获取配置对象中包括的配置信息,其中,配置信息可以包括需要埋点的文件、需要埋点的方法名以及埋点参数等,埋点参数可以为事件的唯一标识等,在本示例实施例中对配置信息不做具体限定;接着,根据配置信息中的需要埋点的文件以及需要埋点的方法名,确定该需要埋点的方法名在需要埋点的文件中所处的代码段,以及该代码段在项目源码中的结构;最后,根据该代码段在项目源码中的结构,确定在项目的语法树中与该代码段在项目源码中的结构对应的节点类型,并根据该节点类型确定项目的语法树中与该配置对象对应的节点,即,确定项目的语法树中需要进行埋点的节点。在本示例实施例中,通过埋点配置文件确定项目的语法树中需要进行埋点的节点,实现了对埋点的集中管理,便于对埋点进行维护。
90.举例而言,当埋点对象中包括的配置信息为:需要埋点的文件为a,需要埋点的方法名为getsum,埋点参数为事件b;首先,确定需要埋点的方法名getsum在需要埋点的文件a中所处的代码段,当需要埋点的方法名getsum在文件a中的代码段的结构为函数表达式时,可以根据getsum所在代码段的结构确定在语法树中与该代码段的结构对应的节点类型为函数表达式;然后,根据埋点参数事件b语法树中确定与该配置信息对应的节点,并将该节点作为语法树中需要进行埋点的节点。
91.进一步的,当项目为跨端实现时,可以通过语法树实现跨端埋点,其中跨端可以包括移动网页、小程序或者pc端等,在本示例实施例中对此不做具体限定,参考图6所示,根据配置信息确定项目的语法树中与配置对象对应的节点,还可以包括步骤s610-步骤s630:
92.步骤s610.当所述项目为跨端实现时,确定所述项目在任一端的前端框架,并且获取与所述任一端的源码对应的语法树;
93.步骤s620.根据所述前端框架以及所述前端框架中的函数定义方式,确定与所述任一端的源码对应的语法树中包括方法的节点;
94.步骤s630.根据所述配置信息,在所述包括方法的节点中确定与所述配置对象对应的节点。
95.以下,将对步骤s610-步骤s630进行解释以及说明。具体的,当项目为跨端实现时,由于不同端采用的前段框架可能不同,因此,可以针对不同的前端框架确定项目的语法树中需要进行埋点的节点,首先,对于每一端可以确定该端的前端框架,并且获得与该端的源码对应的语法树;然后,根据每一端前端框架中函数定义的方法,确定该端的语法树中包括方法的节点;最后,根据配置信息在包括方法的节点中确定与配置对象对应的节点,即,每一端语法树中需要埋点的节点。
96.举例而言,当存在一端的前端框架为vue框架时,由于vue框架中单文件组件的定义方式都是特定对象的属性,因此,根据vue框架中函数的定义方式,可以进行筛选的节点包括objectmethod类型、以及objectproperty类型的节点,当确定配置信息中包括的需要
埋点的方法名属于objectproperty类型的节点时,可以在该objectproperty类型的节点的子节点中进行判断,判断子节点中的任一节点是否为函数类型的节点,当子节点中存在函数类型的节点时,根据配置信息确定该语法树中与配置信息对应的节点。
97.在步骤s130中,利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树。
98.在本示例实施例中,参考图7所示,利用所述配置信息生成语法树插入节点,可以包括步骤s710以及步骤s720:
99.步骤s710.通过编写即时编译型编程语言的编译器的模板转换工具生成模板方法;
100.步骤s720.根据所述配置对象中包括的配置信息,执行所述模板方法,生成所述语法树插入节点。
101.以下,将对步骤s710、步骤s720进行解释以及说明。具体的,可以通过babel的模板转换工具@babel/template将字符串代码转换成一个模板方法,该模板方法可以根据可配置项生成对应的语法树节点,其中,可配置项可以为配置信息中的配置参数,如事件的唯一标识、当前事件触发页面等,在本示例实施例中对此不做具体限定;执行该模板方法后生成与配置信息中的配置参数对应的语法树插入节点。
102.在确定项目的语法树中需要进行埋点的节点以及与配置信息对应的需要插入到项目的语法树中的语法树插入节点之后,可以将该语法树插入节点插入到项目的语法树中,得到埋点语法树,其中,将语法树插入节点插入到项目的语法树中可以包括:
103.将所述语法插入节点作为与所述配置对象对应的节点的子节点,插入到所述项目的语法树中,得到埋点语法树。
104.具体的,在将语法树插入节点插入到项目的语法树中时,可以将该语法树插入节点作为项目的语法树中与配置信息对应的节点的子节点,即,将该语法树插入节点作为项目的语法树中需要埋点的节点的子节点,并将该语法树插入节点插入到项目的语法树中,得到埋点语法树。同时,在将埋点语法树再次转换为字符串时,可以先确定语法树插入节点转换为字符串之后在项目源码中的代码块,然后,将与语法树插入节点对应的字符串放到其所在代码块的第一行或者最后一行,在本示例实施例中对此不做具体限定,以实现对项目源码的修改。
105.在步骤s140中,将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点。
106.在本示例实施例中,将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点,包括:
107.通过编写即时编译型编程语言的编译器的生成模块将所述埋点语法树转换为字符串输出。
108.具体的,得到埋点语法树之后,可以通过babel的生成模块@babel/generator将埋点语法树转换为字符串,该字符串中包括了埋点的相关代码,实现了埋点逻辑的自动化配置插入。
109.本公开示例实施例提供的自动化埋点方法至少具有以下优点:一方面,实现了通过集中配置进行埋点数据上报,与编程式埋点相比具有更少的代码入侵性,更易于对埋点
配置文件进行管理;另一方面,在语法树层面的处理中可以实现跨端;再一方面,在代码打包阶段进行埋点插入,可以避免与开发阶段的业务代码的耦合,保证源码逻辑的纯净以及源码的可读性。
110.本公开示例实施例还提供了一种自动化埋点装置,参考图8所示,可以包括:配置对象获取模块810、埋点节点确定模块820、埋点语法树生成模块830以及自动埋点模块840。其中:
111.配置对象获取模块810,用于获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;
112.埋点节点确定模块820,用于获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;
113.埋点语法树生成模块830,用于利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;
114.自动埋点模块840,用于将所述埋点语法树转换为源码字符串,以完成对所述项目的自动化埋点。
115.上述自动化埋点装置中各模块的具体细节已经在对应的任务处理方法中进行了详细的描述,因此此处不再赘述。
116.在本公开的一种示例性实施例中,所述埋点配置文件为js文件或json文件;
117.当所述埋点配置文件为json文件时,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象,包括:
118.通过即时编译型编程语言的运行环境中包括的文件处理模块,对所述埋点配置文件进行读取,获取所述埋点配置文件中包括的文件内容;
119.对所述文件内容进行反序列化,得到所述埋点配置文件中包括的配置对象。
120.在本公开的一种示例性实施例中,在根据所述配置信息确定项目的语法树中与所述配置对象对应的节点之前,所述自动化埋点方法还包括:
121.在对所述项目的源码打包时,通过编写即时编译型编程语言的编译器对所述项目的源码进行转换,得到所述项目的语法树。
122.在本公开的一种示例性实施例中,获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点,包括:
123.获取所述项目的语法树以及所述项目的语法树中包括的节点的类型;
124.获取所述配置对象中包括的配置信息,其中,所述配置信息包括:需要埋点的文件、需要埋点的方法名以及埋点参数;
125.在所述需要埋点的文件中确定所述需要埋点的方法名所在的代码段,以及所述代码段在所述项目的源码中的结构;
126.在所述语法树中确定与所述代码段在所述项目的源码中的结构对应的节点类型,并根据所述节点类型确定项目的语法树中与所述配置对象对应的节点。
127.在本公开的一种示例性实施例中,获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点,还包括:
128.当所述项目为跨端实现时,确定所述项目在任一端的前端框架,并且获取与所述任一端的源码对应的语法树;
129.根据所述前端框架以及所述前端框架中的函数定义方式,确定与所述任一端的源码对应的语法树中包括方法的节点;
130.根据所述配置信息,在所述包括方法的节点中确定与所述配置对象对应的节点。
131.在本公开的一种示例性实施例中,利用所述配置信息生成语法树插入节点,包括:
132.通过编写即时编译型编程语言的编译器的模板转换工具生成模板方法;
133.根据所述配置对象中包括的配置信息,执行所述模板方法,生成所述语法树插入节点。
134.在本公开的一种示例性实施例中,将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树,包括:
135.将所述语法插入节点作为与所述配置对象对应的节点的子节点,插入到所述项目的语法树中,得到埋点语法树。
136.在本公开的一种示例性实施例中,将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点,包括:
137.通过编写即时编译型编程语言的编译器的生成模块将所述埋点语法树转换为字符串输出。
138.应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
139.此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
140.在本公开的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
141.所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
142.下面参照图9来描述根据本公开的这种实施方式的电子设备900。图9显示的电子设备900仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
143.如图9所示,电子设备900以通用计算设备的形式表现。电子设备900的组件可以包括但不限于:上述至少一个处理单元910、上述至少一个存储单元920、连接不同系统组件(包括存储单元920和处理单元910)的总线930以及显示单元940。
144.其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元910执行,使得所述处理单元910执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,所述处理单元910可以执行如图1中所示的步骤s110:获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;s120:获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;s130:利用所述配置信息生成语法树插入节点,并将所述语法树插
入节点插入到与所述配置对象对应的节点下,得到埋点语法树;s140:将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点。
145.存储单元920可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)9201和/或高速缓存存储单元9202,还可以进一步包括只读存储单元(rom)9203。
146.存储单元920还可以包括具有一组(至少一个)程序模块9205的程序/实用工具9204,这样的程序模块9205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
147.总线930可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
148.电子设备900也可以与一个或多个外部设备1000(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备900交互的设备通信,和/或与使得该电子设备900能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口950进行。并且,电子设备900还可以通过网络适配器960与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器960通过总线930与电子设备900的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备900使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
149.通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
150.在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
151.根据本公开的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
152.所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器
(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
153.计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
154.可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。
155.可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
156.此外,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
157.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。

技术特征:
1.一种自动化埋点方法,其特征在于,包括:获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点。2.根据权利要求1所述的自动化埋点方法,其特征在于,所述埋点配置文件为js文件或json文件;当所述埋点配置文件为json文件时,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象,包括:通过即时编译型编程语言的运行环境中包括的文件处理模块,对所述埋点配置文件进行读取,获取所述埋点配置文件中包括的文件内容;对所述文件内容进行反序列化,得到所述埋点配置文件中包括的配置对象。3.根据权利要求1所述的自动化埋点方法,其特征在于,在根据所述配置信息确定项目的语法树中与所述配置对象对应的节点之前,所述自动化埋点方法还包括:在对所述项目的源码打包时,通过编写即时编译型编程语言的编译器对所述项目的源码进行转换,得到所述项目的语法树。4.根据权利要求1所述的自动化埋点方法,其特征在于,获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点,包括:获取所述项目的语法树以及所述项目的语法树中包括的节点的类型;获取所述配置对象中包括的配置信息,其中,所述配置信息包括:需要埋点的文件、需要埋点的方法名以及埋点参数;在所述需要埋点的文件中确定所述需要埋点的方法名所在的代码段,以及所述代码段在所述项目的源码中的结构;在所述语法树中确定与所述代码段在所述项目的源码中的结构对应的节点类型,并根据所述节点类型确定项目的语法树中与所述配置对象对应的节点。5.根据权利要求1所述的自动化埋点方法,其特征在于,获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点,还包括:当所述项目为跨端实现时,确定所述项目在任一端的前端框架,并且获取与所述任一端的源码对应的语法树;根据所述前端框架以及所述前端框架中的函数定义方式,确定与所述任一端的源码对应的语法树中包括方法的节点;根据所述配置信息,在所述包括方法的节点中确定与所述配置对象对应的节点。6.根据权利要求1所述的自动化埋点方法,其特征在于,利用所述配置信息生成语法树插入节点,包括:通过编写即时编译型编程语言的编译器的模板转换工具生成模板方法;根据所述配置对象中包括的配置信息,执行所述模板方法,生成所述语法树插入节点。
7.根据权利要求6所述的自动化埋点方法,其特征在于,将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树,包括:将所述语法插入节点作为与所述配置对象对应的节点的子节点,插入到所述项目的语法树中,得到埋点语法树。8.根据权利要求7所述的自动化埋点方法,其特征在于,将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点,包括:通过编写即时编译型编程语言的编译器的生成模块将所述埋点语法树转换为字符串输出。9.一种自动化埋点装置,其特征在于,包括:配置对象获取模块,用于获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;埋点节点确定模块,用于获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;埋点语法树生成模块,用于利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;自动埋点模块,用于将所述埋点语法树转换为源码字符串,以完成对所述项目的自动化埋点。10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-8任一项所述的自动化埋点方法。11.一种电子设备,其特征在于,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-8任一项所述的自动化埋点方法。

技术总结
本公开是关于一种自动化埋点方法和装置、计算机可读介质、电子设备,涉及计算机技术领域,该方法包括:获取埋点配置文件,对所述埋点配置文件进行解析,得到所述埋点配置文件中包括的配置对象;获取所述配置对象中包括的配置信息,根据所述配置信息确定项目的语法树中与所述配置对象对应的节点;利用所述配置信息生成语法树插入节点,并将所述语法树插入节点插入到与所述配置对象对应的节点下,得到埋点语法树;将所述埋点语法树转换为字符串,以完成对所述项目的自动化埋点。本公开降低了埋点代码与逻辑代码的耦合。码与逻辑代码的耦合。码与逻辑代码的耦合。


技术研发人员:彭博 李松 王明鑫
受保护的技术使用者:北京京东振世信息技术有限公司
技术研发日:2022.03.25
技术公布日:2023/10/6
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐