1.本公开涉及前端数据可视化领域,尤其涉及一种服务调用链数据可视化展示的方法、装置、电子设备以及存储介质。
背景技术:2.在智能汽车的分布式控制系统的运行过程中,会涉及到多个服务的调用过程,由启动后的多个服务完成智能汽车的整体运行任务。对控制系统的服务的运行过程进行追踪,让开发者直观了解分布式控制系统的每个应用服务的运行状况,可以帮助开发者快速定位问题并解决问题。
3.在现有技术中,可以通过多种方式将调用链数据用可视化图形的方式展示在前端页面。但是,现有方案无法按照调用服务信息对具有多条调用支路的调用链数据进行清晰的展示。
4.因此,如何按照调用服务信息对具有多条调用支路的调用链数据进行展示,以便开发人员通过调用链数据的可视化图形对各个服务的状态进行分析并快速定位各个服务运行中出现的问题,是亟待解决的技术问题。
技术实现要素:5.为克服相关技术中存在的问题,本公开提供一种服务调用链数据可视化展示的方法、装置、电子设备以及存储介质。
6.根据本公开实施例的第一方面,提供一种服务调用链数据可视化展示的方法,包括获取多个服务的调用链数据;其中,所述调用链数据至少包括服务的调用服务信息,所述调用服务信息至少包括服务的第一时间信息和服务之间的调用链关系信息;根据服务的所述调用服务信息,生成树状视图;其中,所述树状视图的每一个节点对应于所述多个服务中的一个服务;对于所述树状视图中的每一个节点,执行如下操作:根据所述节点对应的服务的第一时间信息,得到所述节点的第一坐标;根据服务之间的所述调用链关系信息,获取所述节点的第二坐标;根据所述节点的第一坐标和第二坐标,在所述树状视图中展示所述节点对应的服务的调用服务信息。
7.在一些实施例中,所述根据所述节点对应的服务的第一时间信息,得到所述节点的第一坐标,包括:根据所述多个服务的第一时间信息的时间先后顺序,确定所述节点对应服务的第一时间信息的次序,将所述次序作为所述节点对应的第一坐标计算系数;根据所述节点对应的第一坐标计算系数,计算得到所述节点的第一坐标。
8.在一些实施例中,所述根据所述节点对应的第一坐标计算系数,计算得到所述节点的第一坐标,包括:根据所述节点对应的第一坐标计算系数,得到所述节点与所述树状视图的根节点之间沿第一坐标方向的第一距离;根据所述树状视图的根节点的第一坐标和所述第一距离,得到所述节点的第一坐标。
9.在一些实施例中,所述第一距离的计算公式为:
10.d=(l1+l2)*(sortindex+1)-l211.其中,d为所述第一距离,sortindex为所述第一坐标计算系数,sortindex≥0,l1为所述树状视图的节点的显示区域之间沿第一坐标方向的间距,l2为所述节点的显示区域沿第一坐标方向的长度。
12.在一些实施例中,所述根据服务之间的所述调用链关系信息,获取所述节点的第二坐标,包括:根据服务之间的所述调用链关系信息,确定所述节点在所述树状视图中的父节点;根据所述父节点的第二坐标、所述父节点包含的子节点的个数,计算得到所述节点的第二坐标。
13.在一些实施例中,所述根据所述节点的第一坐标和第二坐标,在所述树状视图中展示所述节点对应服务的调用服务信息,包括:根据所述节点的第一坐标和第二坐标确定所述节点的显示区域的位置;根据所述节点对应服务的状态,使用与其匹配样式的连接线连接所述节点对应的显示区域与所述节点的父节点对应的显示区域;其中,所述状态根据服务的调用服务信息得到。
14.在一些实施例中,所述方法还包括:获取调用链新增数据;其中,所述调用链新增数据为由第一服务启动的第二服务的调用链数据,所述第一服务为所述树状视图的叶节点对应的服务,所述第一服务对应的节点为待增加节点的父节点;根据所述第二服务的第一时间信息,得到所述待增加节点的第一坐标;根据所述第一服务对应节点的第二坐标,获取所述待增加节点的第二坐标;根据所述待增加节点的第一坐标和第二坐标,在所述树状视图中展示所述待增加节点对应的第二服务的调用服务信息。
15.在一些实施例中,所述根据所述第二服务的第一时间信息,得到所述待增加节点的第一坐标,包括:确定所述第二服务的第一时间信息相对所述多个服务中各个服务的第一时间信息的次序,将所述次序作为所述待增加节点对应的第一坐标计算系数;根据所述待增加节点对应的第一坐标计算系数,计算得到所述树状视图中待增加节点的第一坐标。
16.在一些实施例中,所述方法还包括:根据所述待增加节点的第一坐标和第二坐标,在所述树状视图中对所述待增加节点的显示区域进行定位操作。
17.在一些实施例中,所述方法还包括:响应于携带有搜索定位信息的搜索定位请求,获取与所述搜索定位信息对应的所述树状视图中的节点的第一坐标和第二坐标;根据所述节点的第一坐标和第二坐标,在所述树状视图中对所述节点对应的显示区域进行定位操作。
18.根据本公开实施例的第二方面,提供一种服务调用链数据可视化展示的装置,包括调用链数据获取模块,用于获取多个服务的调用链数据;其中,所述调用链数据至少包括服务的调用服务信息,所述调用服务信息至少包括服务的第一时间信息和服务之间的调用链关系信息;树状视图获取模块,用于根据服务的所述调用服务信息,生成树状视图;其中,所述树状视图的每一个节点对应于所述多个服务中的一个服务;第一坐标获取模块,用于根据所述节点对应的服务的第一时间信息,得到所述节点的第一坐标;第二坐标获取模块,用于根据服务之间的所述调用链关系信息,获取所述节点的第二坐标;展示模块,用于根据所述节点的第一坐标和第二坐标,在所述树状视图中展示所述节点对应的服务的调用服务信息。
19.根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储所述
处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现本公开第一方面所提供的服务调用链数据可视化展示的方法。
20.根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,该程序指令被处理器执行时实现本公开第一方面所提供的服务调用链数据可视化展示的方法的步骤。
21.本公开的实施例提供的技术方案可以包括以下有益效果:
22.本公开提供的实施例中,根据节点对应的服务的第一时间信息,得到节点的第一坐标;根据服务之间的调用链关系信息,获取节点的第二坐标;根据节点的第一坐标和第二坐标,在树状视图中展示节点对应的服务信息,从而可以对具有多条调用支路的调用链数据按时间信息进行展示。
23.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
24.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
25.图1是根据一示例性实施例示出的一种服务调用链数据可视化展示方法的场景示意图;
26.图2是根据一示例性实施例示出的一种服务调用链数据可视化展示的方法的流程图;
27.图3是根据一示例性实施例示出的树形结构数据treedata的示例性示意图;
28.图4a是根据一示例性实施例示出的树状视图的示例性示意图;
29.图4b是根据一示例性实施例示出的多个服务对应节点的第一距离的示例性示意图;
30.图4c是根据一示例性实施例示出的根据不同的服务的状态使用预设样式的线条绘制的树状视图的示例性示意图;
31.图4d是根据一示例性实施例示出的对树状视图中某个节点进行定位操作的示例性示意图;
32.图5是根据一示例性实施例示出的一种服务调用链数据可视化展示的装置的框图;
33.图6是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
34.下面将结合附图详细地对示例性实施例进行描述说明。
35.应当指出,相关实施例及附图仅为描述说明本公开所提供的示例性实施例,而非本公开的全部实施例,也不应理解本公开受相关示例性实施例的限制。
36.应当指出,本公开中所用术语“第一”、“第二”等仅用于区别不同步骤、设备或模块等。相关术语既不代表任何特定技术含义,也不表示它们之间的顺序或者相互依存关系。
37.应当指出,本公开中所用术语“一个”、“多个”、“至少一个”的修饰是示意性而非限
制性的。除非在上下文另有明确指出,否则应该理解为“一个或多个”。
38.应当指出,本公开中所用术语“和/或”,用于描述关联对象之间的关联关系,一般表示至少存在三种关联关系。例如,a和/或b,至少可以表示:单独存在a,同时存在a和b,单独存在b这三种关联关系。
39.应当指出,本公开的方法实施例中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。除非特别说明,本公开的范围不受相关实施例中步骤的描述顺序限制。
40.需要说明的是,本公开中所有获取信号、信息或数据的动作都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。
41.图1是根据一示例性实施例示出的一种服务调用链数据可视化展示方法的场景示意图。
42.本公开实施例提供的方法可以应用于智能设备的分布式控制系统在启动过程中多个服务的调用链数据信息的可视化显示任务。智能设备可以包括但不限于:无人机、智能家居设备、智能车辆等。仅作为示例,本公开说明书以智能汽车的分布式控制系统在启动过程中调用的多个服务的调用链数据信息的可视化显示任务为例进行描述。
43.如图1所示,在应用场景中可以包括服务端110、车载终端120和网络130。
44.在一些实施例中,服务端110、车载终端120之间可以通过网络130进行数据或者信息的交互。例如,服务端110可以通过网络130获取车载终端120中的信息和/或数据,或者可以通过网络130将信息和/或数据发送到车载终端120。
45.车载终端120为安装有分布式控制系统的智能车载终端。在一些实施例中,车载终端120可以收集分布式控制系统启动过程中每一个服务的调用链数据,并将收集到的调用链数据通过网络130上报给服务端110。
46.服务端110可以是单一服务器或服务器组。该服务器组可以是集中式或分布式的(例如,服务端110可以是分布式系统),可以是专用的也可以由其他设备或系统同时提供服务。在一些实施例中,服务端110可以是区域的或者远程的。在一些实施例中,服务端110可以在云平台上实施,或者以虚拟方式提供。仅作为示例,云平台可以包括私有云、公共云、混合云、社区云、分布云、内部云、多层云等或其任意组合。
47.在一些实施例中,网络130可以是无线网络中的任意一种或多种。例如,网络130可以包括无线局域网络(wlan)、城域网(man)等或其任意组合。
48.为了便于理解,以下结合附图和实施例介绍本公开的技术方案。
49.图2是根据一示例性实施例示出的一种服务调用链数据可视化展示的方法的流程图,如图2所示,服务调用链数据可视化展示的方法用于具有调用关联关系的多个服务的调用链数据的可视化展示,包括以下步骤。
50.在步骤s210中,获取多个服务的调用链数据;其中,调用链数据至少包括服务的调用服务信息,调用服务信息至少包括服务的第一时间信息和服务之间的调用链关系信息。
51.服务(service)是一个后台运行的组件,可以执行长时间运行且不需要与用户交互的任务。调用链数据为分布式控制系统运行过程中各个服务的启动过程中产生的数据,其至少包括调用服务信息和服务之间的调用链关系信息。仅作为示例,在某一次控制系统启动过程中获得如下所示的4个服务的调用链数据:
52.服务1、id:“1”;parentid:“0”;servicename:“启动系统”;createtime:“2022-07-24 12:00:00”;elapsedtime:“0”,status:“正常”,others:{}。
53.服务2、id:“1-1”;parentid:“1”;servicename:“调用ecu1”;createtime:“2022-07-24 12:02:02”;elapsedtime:“1分钟”;status:“正常”,others:{}。
54.服务3、id:“1-2”;parentid:“1”;servicename:“调用ecu2”;createtime:“2022-07-24 12:00:30”;elapsedtime:“2分钟”;status:“缓慢”,others:{}。
55.服务4、id:“1-1-1”;parentid:“1-1”;servicename:“调用ecu1服务servicel”;createtime:“2022-07-24 12:03:04”;elapsedtime:“1分钟”;status:“异常”,others:{}。
56.其中,id为服务的标识,parentid为上级服务(也称为上一级服务)的标识,servicename为服务的名称,createtime为服务的开始时间,elapsedtime为调用服务运行时长,status为服务的状态,others为其他数据。
57.第一时间信息可以为调用服务信息中的一个时间信息。例如,第一时间信息可以为服务的开始时间。又例如,第一时间信息可以为调用链数据中的其他时间信息。仅作为示例,本说明书中以第一时间为服务的开始时间为例进行说明。
58.服务之间的调用链关系信息为可以表示多个服务之间相互调用关系的信息。在一些实施例中,服务之间的调用链关系信息可以包括服务的标识、服务的上一级服务的标识等。例如,b服务的标识为“2-2”,a服务的标识为“2”,则可以根据该信息确定b服务由a服务调用。
59.在具体实施过程中,可以在分布式控制系统端监听每个服务的启动,然后将得到的调用链数据通过网络发送给服务端。
60.在步骤s220中,根据服务的调用服务信息,生成树状视图;其中,树状视图的每一个节点对应于多个服务中的一个服务。
61.树状视图可以为以树形结构进行布局的图。图4a为根据步骤s210的示例中获取的4组调用链数据生成的树状视图,该树状视图的每一个节点对应于示例中的一个服务。
62.在一些实施例中,可以通过服务之间的调用链关系信息来确定树状视图的各个节点之间的连接关系。例如,“启动系统”服务的标识为“1”,其上一级服务的标识为“0”,可以将“启动系统”服务对应的节点作为树状视图的根节点;“调用ecu1”服务的标识为“1-1”,其上一级服务的标识为“1”,可以将“调用ecu1”服务对应的节点作为树状视图的根节点下的一个子节点;“调用ecu2”服务的标识为“1-2”,其上一级服务的标识为“1”,可以将“调用ecu2”服务对应的节点作为树状视图的根节点下的又一个子节点;“调用ecu1服务service1”服务的标识为“1-1-1”,其上一级服务的标识为“1-1”,可以将“调用ecu1服务service1”服务对应的节点作为“调用ecu1”的服务对应节点的一个子节点。
63.在具体实施过程中,可以将多个服务的调用链数据根据parentid和id的关联关系,转换为可以表示服务之间调用关系的树结构数据treedata。在树状视图的绘制或者其他操作(例如,定位操作或者搜索操作等)过程中,可以根据treedata确定树状视图的各个节点的布局。仅作为示例,treedata的数据结构可以表示如下:
[0064][0065][0066]
在上述treedata数据结构体中,status为服务的状态(例如,正常或者异常等);children为服务调用的一个或多个子服务的树结构数据;graphnode为在绘图容器中绘制节点时生成的节点对象;node为节点绘图对象,包括节点第一坐标、第二坐标、节点的显示区域的宽度和高度,direction为节点布局方向(例如,在根节点的位置的上层或者下层)。
[0067]
图3是根据步骤s210的示例中获取的多个服务的调用链数据得到的树结构数据treedata。为了便于描述,在本说明书的示例中,可以将“启动系统”服务作为根服务,“调用ecu1”服务作为a服务,“调用ecu2”服务作为b服务,“调用ecu1服务service1”服务作为c服务。如图3所示,根服务的children数组包括a服务的树结构数据treedataa和b服务的树结构数据treedatab,a服务的children数组包括c服务的树结构数据treedatac。通过树结构数据treedata将多个服务的调用链数据组织为树状结构的数据,以便在树状视图的绘制以及其他处理过程中使用。
[0068]
在确定树状视图中各个节点之间的关系之后,对于树状视图中的每一个节点,可以执行步骤s230中的操作来确定节点的第一坐标,可以执行步骤s240中的操作来确定节点的第二坐标。
[0069]
第一坐标和第二坐标分别为平面直角坐标系的一种坐标。例如,第一坐标为x轴坐标,则第二坐标为y轴坐标。又例如,第一坐标为y轴坐标,则第二坐标为x轴坐标。
[0070]
仅作为示例,本说明书中以第一坐标为x轴坐标,第二坐标为y轴坐标为例进行说
明。
[0071]
在步骤s230中,根据节点对应的服务的第一时间信息,得到节点的第一坐标。
[0072]
在具体实施过程中,可以通过多种方式根据服务的第一时间信息,得到节点的第一坐标。
[0073]
例如,第一时间信息为服务的开始时间,可以按照时间先后顺序,对多个服务的第一时间信息进行排序,根据节点对应的服务的第一时间信息在多个服务的第一时间信息中的次序、节点显示区域沿第一方向的长度以及节点显示区域之间沿第一方向的距离,来计算得到节点的第一坐标。
[0074]
又例如,第一时间信息为服务的运行时长,可以按照第一时间信息的时长,确定节点的显示区域与其父节点的显示区域之间沿第一方向的间距(例如,时长为1分钟,间距为1厘米;时长为2分钟,间距为2厘米,以此类推),根据该间隔和节点的显示区域沿第一方向的长度,计算得到节点的第一坐标。查看者可以根据该实施例得到的树状视图中节点的显示区域之间的间隔,快速了解各个服务的状态(例如,正常、缓慢、异常等)。
[0075]
本公开提供的实施例中,根据节点对应的服务的第一时间信息,得到节点的第一坐标,从而使得查看者可以通过树状视图各个节点沿第一坐标方向的位置,直观的了解到各个节点对应服务的第一时间的信息。
[0076]
在步骤s240中,根据服务之间的调用链关系信息,获取节点的第二坐标。
[0077]
在一些实施例中,可以根据服务之间的调用链关系信息,确定节点在树状视图中的父节点,然后根据父节点的第二坐标,计算得到节点的第二坐标。在具体实施过程中,可以使用多种方式根据父节点的第二坐标,计算得到节点的第二坐标,不受本说明书的表述所限。
[0078]
本公开提供的实施例中,根据服务之间的调用链关系信息,获取节点的第二坐标,从而可以根据树状视图中各个节点的连接关系反映服务之间的调用关系。
[0079]
在步骤s250中,根据节点的第一坐标和第二坐标,在树状视图中展示节点对应的服务的调用服务信息。
[0080]
在一些实施例中,可以根据节点的第一坐标和第二坐标确定节点的显示区域的位置,在该位置绘制节点的显示区域,并在显示区域显示调用服务信息中的一种或多种数据信息。例如,如图4a所示,可以在节点的显示区域显示如下内容:服务的名称(例如,调用ecu1)、服务的状态(例如,正常)、服务的开始时间(例如,2022-07-24 12:02:02)等。
[0081]
在具体实施过程中,可以使用编程语言提供的绘图功能函数创建节点对象,并将节点对象添加到treedata中相应的存储位置。例如,对于节点a,可以将节点a的第一坐标和第二坐标作为参数,调用graph.addnode函数(javascript提供的绘图功能函数)在绘图容器中绘制节点,并生成节点对象graphnode,示例代码如下:
[0082][0083]
在具体的实施过程中,可以使用编程语言提供的绘图功能函数对节点和节点的父节点进行连接。例如,可以使用addedge函数(javascript提供的绘图功能函数)创建节点和其父节点之间的连接线。在具体实施过程中,可以根据节点对应服务的调用服务信息中的一个或多个数据信息,使用预设样式的线条作为连接线。预设样式可以包括但不限于以下一种或多种线条格式的组合:预设颜色(例如,红色、绿色或者蓝色等)、预设线条宽度(0.5磅、1磅等)等。在完成节点的绘制之后,如果该节点对应服务的树形结构数据的children成员中存在子项,则以该节点为父节点,重复步骤s230-~s250,继续对父节点下的所有节点进行绘制操作,直至树状视图中所有的节点绘制完成。
[0084]
本公开提供的实施例,根据节点的第一坐标和第二坐标,在树状视图中展示节点对应的服务信息,从而可以对具有多条调用支路的调用链数据按时间信息进行展示。
[0085]
以下是本公开提供的又一种服务调用链数据可视化展示的方法的实施例,包括以下步骤。
[0086]
在步骤s210-1中,获取多个服务的调用链数据;其中,调用链数据至少包括服务的调用服务信息,调用服务信息至少包括服务的第一时间信息和服务之间的调用链关系信息。
[0087]
关于获取多个服务的调用链数据的详细内容参见步骤s210中的相关描述,在此不再赘述。
[0088]
在步骤s220-1中,根据服务的调用服务信息,生成树状视图;其中,树状视图的每一个节点对应于多个服务中的一个服务。
[0089]
关于根据服务的调用服务信息,生成树状视图的详细内容参见步骤s220中的相关描述,在此不再赘述。
[0090]
在步骤s230-1中,根据节点对应的服务的第一时间信息,得到节点的第一坐标。
[0091]
在一些实施例中,可以按照多个服务的第一时间的先后顺序,确定节点对应服务的第一时间信息的次序。例如,对于步骤s210中所示的多个服务的调用链数据,按第一时间的先后顺序进行排序后得到的各个服务的第一时间信息的次序分别为:“调用ecu1”服务的第一时间信息的次序为1;“调用ecu2”服务的第一时间信息的次序为2;“调用ecu1服务servicel”服务的第一时间信息的次序为3。在具体实施过程中,可以通过排序或者其他方式得到多个服务的第一时间的先后顺序。在具体实施过程中,可以对多个服务的调用链数据,按服务的第一时间的先后顺序进行排序后,将排序后的调用链数据存为一个数组sortsourcedata,将数组sortsourcedata中各个子项的下标作为对应服务的第一时间的次
序,后续获取到其他服务的调用链数据时,也可以将其他服务的调用链数据按服务的第一时间的先后顺序存入该数组中。
[0092]
在一些实施例中,可以将次序作为节点对应的第一坐标计算系数,根据节点对应的第一坐标计算系数,计算得到节点的第一坐标。
[0093]
在具体实施过程中,可以根据节点对应的第一坐标计算系数,得到节点与树状视图的根节点之间沿第一坐标方向的第一距离。
[0094]
在一些实施例中,第一距离的计算公式可以为:
[0095]
d=(l1+l2)*(sortindex+1)-l2ꢀꢀꢀ
(1)
[0096]
在公式(1)中,d为第一距离,sortindex为第一坐标计算系数,sortindex≥0,l1为树状视图的节点的显示区域之间沿第一坐标方向的间距,l2为节点的显示区域沿第一坐标方向的长度。
[0097]
例如,可以将上述示例中得到的多个服务的第一时间信息的次序(从0开始计数)代入公式(1)中,可以得到图4b所示的各个节点的第一距离:l1、2l1+l2、3l1+2l2、4l1+3l2,为了便于描述,在图4b中,分别用节点a、节点b、节点c以及节点d表示各个服务对应的节点。
[0098]
在计算得到第一距离之后,可以根据树状视图的根节点的第一坐标和第一距离,得到节点的第一坐标。
[0099]
在具体实施过程中,可以通过多种方式确定根节点的第一坐标。在一些实施例中,可以将预设坐标值作为根节点的第一坐标。例如,可以从图3所示的树结构数据treedata中得到预设坐标值,treedata的根服务的node成员中的数据如下所示:
[0100][0101]
其中,x为节点在绘图容器中的x轴坐标,root_node_default_x为默认根节点的x轴坐标;y为节点在绘图容器中的y轴坐标,可以设置为graphheight(树状视图高度)的1/2。width为节点的显示区域的宽度,node_default_width为默认宽度值,height为节点的显示区域的高度,node_default_height为默认高度值。
[0102]
在一些实施例中,可以向用户提供输入接口(例如,编辑框接口、语音接口、图形拖动接口等),根据用户输入的根节点的位置确定根节点的第一坐标。
[0103]
在一些实施例中,可以将根节点的坐标与节点的第一距离之和,作为该节点的第一坐标。计算公式如下。
[0104]
x=x
root
+d
ꢀꢀꢀ
(2)
[0105]
在公式(2)中,x为节点的第一坐标;x
root
为根节点的第一坐标;d为节点的第一距离。
[0106]
在具体实施过程中,公式(1)和(2)可以有各种变形,不受本说明书的表述所限。
[0107]
在步骤s240-1中,根据服务之间的调用链关系信息,获取节点的第二坐标。
[0108]
在一些实施例中,可以根据服务之间的调用链关系信息,确定节点在树状视图中的父节点;根据父节点的第二坐标、父节点包含的子节点的个数,计算得到节点的第二坐标。
[0109]
在具体实施过程中,可以根据步骤s220中生成的树结构数据treedata,得到节点在树状视图中的父节点的坐标信息,以及该父节点包含的子节点的个数。如图3所示,根服务的树结构数据treedata的children成员包含了a服务的树形结构数据treedataa、b服务的树形结构数据treedatab,a服务的树形结构数据treedataa的children成员包含c服务的树形结构数据treedatac...。因此,在具体实施过程中,可以将节点对应的服务的树形结构数据在treedata中的上一级数据作为该节点的父节点对应服务的树形结构数据,可以从父节点对应服务的树形结构数据的node成员获取父节点的第二坐标,将父节点对应服务的树形结构数据的children数组包含成员的个数作为该父节点包含的子节点的个数,并将父节点对应服务的树形结构数据中的direction作为该父节点的布局方向。
[0110]
在一些实施例中,可以根据节点的父节点包含的子节点的个数,以及节点的父节点的布局方向计算得到节点的布局方向,计算公式如下。
[0111]
item.direction=rootdirection||(index>layermid?1:-1)
ꢀꢀꢀ
(3)
[0112]
在公式(3)中,item为节点的树形结构数据(例如,treedataa),存储在上一级服务的树结构数据treedata的children数组中,direction为节点的显示区域在树状视图中相对根节点的显示区域的布局方向(向上偏移或向下偏移),rootdirection为父节点的布局方向。index为item在children数组中的下标,例如,children数组包括5个子项:children[0]、children[1]、children[2]、children[3]、children[4],如果item对应于children[1],则index为1,如果item对应于children[3],则index为3。layermid为children数组中位于中心位置的元素的下标。例如,children数组包括5个子项:children[0]、children[1]、children[2]、children[3]、children[4],则layermid可以等于2。又例如,children数组包括4个子项:children[0]、children[1]、children[2]、children[3],则layermid可以等于1。
[0113]
在计算得到节点的布局方向之后,可以通过以下公式,计算得到节点的第二坐标。
[0114]
y=rooty-direction*(index*(h1+h2)+index>0?(h1+h2):0)
ꢀꢀꢀ
(4)
[0115]
在公式(4)中,rooty为节点的父节点的第二坐标,l1为节点的显示区域的预设高度,l2为节点的显示区域之间沿第二坐标方向的间距。
[0116]
仅作为示例,根据图3所示的treedata,通过公式(3)和公式(4)可以计算得到如下各个节点在树状视图中的第二坐标。
[0117]
节点a(index==0,layermid==1):
[0118]
ya=rooty-direction*(0*(h1+h2)+0>0?(h1+h2):0)=rooty
[0119]
节点b(index==1,layermid==1):
[0120]
item.direction=rootdirection||(index>layermid?1:-1)=-1
[0121]
yb=rooty-(-1)*(1*(h1+h2)+1>0?(h1+h2):0)
[0122]
=rooty+(2*(h1+h2))
[0123]
节点c(index==2,layermid==1):
[0124]
item.direction=rootdirection||(index>layermid?1:-1)=1
[0125]
yc=rooty-1*(2*(h1+h2)+2>0?(h1+h2):0)
[0126]
=rooty-3*(h1+h2)
[0127]
节点d(index==0,layermid==0):
[0128]
item.direction=rootdirection||(index>layermid?1:-1)=-1
[0129]
yd=y
b-direction*(0*(h1+h2)+0>0?(h1+h2):0)=rooty
[0130]
在一些实施例中,公式(3)和公式(4)可以有各种变形,不受本说明书的表述所限。
[0131]
在具体实施过程中,可以将上述计算得到的第一坐标、第二坐标以及节点的布局方向等数据信息存储于节点对应的服务的树形结构数据中,以供后续进行其他处理(例如,该节点的子节点的第二坐标的计算、实现搜索定位功能等处理)时使用。
[0132]
在步骤s250-1中,根据节点的第一坐标和第二坐标,在树状视图中展示节点对应的服务的调用服务信息。
[0133]
关于根据节点的第一坐标和第二坐标,在树状视图中展示节点对应的服务的调用服务信息的详细内容参见步骤s250中的描述,在此不再赘述。
[0134]
在一些实施例中,为了便于查看者可以快速发现出现异常调用情况的服务,可以根据节点对应服务的状态,使用与其匹配样式的连接线连接节点的显示区域与节点的父节点的显示区域。状态根据服务的调用服务信息得到,不同的状态,可以对应于不同的调用服务运行时长。例如,服务的调用服务运行时长在0-50ms范围内,则该服务的状态为“正常”;服务的调用服务运行时长在51-100ms范围内,则该服务的状态为“异常”。
[0135]
在一些实施例中,可以使用不同颜色的连接线为节点对应服务的状态进行标识。例如,如果节点对应服务的状态为“正常”,则可以使用绿色的连接线。又例如,如果节点对应服务的状态为“异常”,则可以使用与“正常”状态对应线条颜色不同的颜色(例如,黄色、红色等)作为的连接线。
[0136]
在一些实施例中,可以使用不同格式的连接线为节点对应服务的状态进行标识。例如,如果节点对应服务的状态为“正常”,则可以用实线作为连接线。又例如,如果节点对应服务的状态为“异常”,则可以使用虚线作为连接线。仅作为示例,图4c为将实线作为“正常”状态对应的连接线,短划线作为“缓慢”状态对应的连接线,长划线作为“异常”状态对应的连接线得到的树状视图。
[0137]
在一些实施例中,可以根据节点对应服务的调用服务信息在连接线上添加提示文字。例如,如图4a所示,可以在连接线上添加调用服务运行时长作为提示文字。
[0138]
本公开提供的实施例,根据节点对应服务的状态,使用与其匹配样式的连接线连接节点对应的显示区域与节点的父节点对应的显示区域,从而可以帮助树状视图的查看者快速发现具有异常状态的服务。
[0139]
在完成节点的绘制之后,如果该节点对应服务的树形结构数据的children成员中存在子项,则以该节点为父节点,重复步骤s230-1~s250-1,继续对父节点下的所有节点进行绘制操作,直至树状视图中所有的节点绘制完成。
[0140]
在完成树状视图的绘制之后,为了便于对后续获取的调用链数据继续进行展示,可以将树状视图中叶子节点对应服务的调用链数据进行存储,例如,可以将数据存储到leafnodedata数组中。
[0141]
控制系统的一个或者多个服务在系统完成启动操作之后,可能继续调用其他子服
务,例如,a服务响应于用户的某一项操作,启动与该操作相应的子服务。本公开提供的实施例中,可以通过以下步骤将系统完成启动之后调用的服务的调用服务信息展示在通过步骤s210-1~s250-1中绘制树状视图中。
[0142]
步骤s310,获取调用链新增数据;其中,调用链新增数据为由第一服务启动的第二服务的调用链数据,第一服务为树状视图的叶节点对应的服务,第一服务对应的节点为待增加节点的父节点。
[0143]
在具体实施过程中,可以通过如下方式获取调用链新增数据:
[0144]
服务端可以通过预定通信协议(例如,websocket)与后端(例如,汽车的控制系统)建立链接,并告知后端需要上报哪些服务后续调用的服务的调用链数据。例如,可以将leafnodedata数组发送给后端,告知后端当后续leafnodedata数组中包含的第一服务调用第二服务时,将第二服务的调用链数据上报到服务端。
[0145]
服务端获取后端上报的第二服务的调用链数据之后,将该调用链数据存储到leafnodedata数组中,并将其转换为树结构数据,链入步骤s220中建立的treedata中。因为有新的节点要并入到树状视图中第一服务对应节点之下,第一服务对应的节点已不再是叶节点,因此可以将第一服务在leafnodedata数组中的调用链数据从leafnodedata数组中删除,然后将leafnodedata数组中的调用链数据按照服务的开始时间进行排序后添加至步骤s230中生成的sortsourcedata数组中。
[0146]
步骤s320,根据第二服务的第一时间信息,得到待增加节点的第一坐标。
[0147]
在一些实施例中,可以确定第二服务的第一时间信息相对多个服务中各个服务的第一时间信息的次序,将次序作为待增加节点对应的第一坐标计算系数;根据待增加节点对应的第一坐标计算系数,计算得到树状视图中待增加节点的第一坐标。关于根据待增加节点对应的第一坐标计算系数,计算得到树状视图中待增加节点的第一坐标的具体过程可以参见步骤s230中的描述,在此不再赘述。
[0148]
步骤s330,根据第一服务对应节点的第二坐标,获取待增加节点的第二坐标。
[0149]
在具体实施过程中,可以将第一服务对应的节点作为父节点,待增加节点作为子节点,按照步骤s240中提供的方法获取待增加节点的第二坐标,详细过程在此不再赘述。
[0150]
步骤s340,根据待增加节点的第一坐标和第二坐标,在树状视图中展示待增加节点对应的第二服务的调用服务信息。
[0151]
在具体实施过程中,可以使用步骤s250中提供的方法根据待增加节点的第一坐标和第二坐标,在树状视图中展示待增加节点对应的第二服务的调用服务信息,在此不再赘述。
[0152]
本公开提供的实施例,通过从后端获取第二服务的调用链数据,将第二服务对应的节点添加到已绘制的树状视图的叶节点的下方,完成新增调用服务信息的展示,整个过程不需要对所有服务的调用链数据进行处理,重新绘制树状视图,因此可以有效的提高树状视图的更新效率,并且通过新增调用服务信息的展示,树状视图查看者可以在汽车系统运行过程中获取任一执行单元的运行信息,有利于帮助开发者定位和解决控制系统中相关控制器存在的问题。
[0153]
在一些实施例中,在树状视图中增加新的节点之后,为了便于相关人员查看树状视图的更新信息,可以根据待增加节点的第一坐标和第二坐标,在树状视图中对待增加节
点的显示区域进行定位操作。
[0154]
在具体实施过程中,可以使用编程语言提供的定位操作函数对待增加节点的显示区域进行定位操作。例如,可以使用javascript提供的函数获取树状视图对应的绘图容器在浏览器的dom(文档对象模型)对象,然后调用函数dom.scrollto({left:第一坐标,top:第二坐标}),将绘图容器的中心坐标移动到待增加节点所在位置。在一些实施例中可以对待增加节点的显示区域,使用预设方式进行标记。预设方式可以包括但不限于以下一种或多种的组合:用预设颜色的线条显示待增加节点的显示区域的边框、使用预设宽度的线条显示待增加节点的显示区域的边框、使用预设格式(特定的颜色、加粗、斜体等)的字体显示待增加节点的显示区域内的文字。
[0155]
为了便于查看者快速从树状视图中找到需要的信息,在一些实施例中,可以响应于携带有搜索定位信息的搜索定位请求,获取与搜索定位信息对应的树状视图中的节点的第一坐标和第二坐标;根据节点的第一坐标和第二坐标,在树状视图中对节点对应的显示区域进行定位操作。
[0156]
在具体实施过程中,可以遍历步骤s210中生成的treedata,确定treedata中的数据信息与搜索定位信息匹配的内容,并根据匹配内容确定的搜索定位请求对应的treedata的node成员,根据node成员得到定位操作对应节点的第一坐标和第二坐标。可以通过多种方式对treedata中的数据信息与搜索定位信息进行匹配,例如,模糊搜索模式等,不受本说明书的表述所限。如果在匹配过程中出现多个匹配结果值时可以选择对应服务开始时间最早的数据,也可根据其他优先级规则进行数据选择,不受本说明书的表述所限。
[0157]
在得到树状视图中与定位操作对应的节点的第一坐标和第二坐标之后,可以对该节点执行定位操作。具体执行定位操作的方法可以参照对待新增节点进行定位操作的方法,在此不再赘述。如图4d所示,开发人员通过显示屏幕上的编辑框输入“ecu1”,处理设备在接收到该搜索信息后,对“ecu1”服务对应的节点进行定位操作,使得该节点的显示区域位于绘图容器的中心。
[0158]
本公开提供的实施例,响应于携带有搜索定位信息的搜索定位请求,获取与搜索定位信息对应的树状视图中的节点的第一坐标和第二坐标;根据节点的第一坐标和第二坐标,在树状视图中对节点对应的显示区域进行定位操作,从而可以实现在可视化图谱中对某个服务的调用链数据进行搜索定位的功能。
[0159]
图5是根据一示例性实施例示出的一种服务调用链数据可视化展示的装置的框图。参照图5,该装置500包括调用链数据获取模块510,树状视图获取模块520、第一坐标获取模块530、第二坐标获取模块540和展示模块550。
[0160]
调用链数据获取模块510,用于获取多个服务的调用链数据;其中,所述调用链数据至少包括服务的调用服务信息,所述调用服务信息至少包括服务的第一时间信息和服务之间的调用链关系信息。
[0161]
关于获取多个服务的调用链数据的详细内容参见步骤s210中的说明,在此不再赘述。
[0162]
树状视图获取模块520,用于根据服务的所述调用服务信息,生成树状视图;其中,所述树状视图的每一个节点对应于所述多个服务中的一个服务。
[0163]
关于根据服务的所述调用服务信息,生成树状视图的详细内容参见步骤s220中的
说明,在此不再赘述。
[0164]
第一坐标获取模块530,用于根据所述节点对应的服务的第一时间信息,得到所述节点的第一坐标。
[0165]
关于根据所述节点对应的服务的第一时间信息,得到所述节点的第一坐标的详细内容参见步骤s230中的说明,在此不再赘述。
[0166]
第二坐标获取模块540,用于根据服务之间的所述调用链关系信息,获取所述节点的第二坐标。
[0167]
关于根据服务之间的所述调用链关系信息,获取所述节点的第二坐标的详细内容参见步骤s240中的说明,在此不再赘述。
[0168]
展示模块550,用于根据所述节点的第一坐标和第二坐标,在所述树状视图中展示所述节点对应的服务的调用服务信息。
[0169]
关于根据所述节点的第一坐标和第二坐标,在所述树状视图中展示所述节点对应的服务的调用服务信息的详细内容参见步骤s250中的说明,在此不再赘述。
[0170]
在一些实施例中,所述根据所述节点对应的服务的第一时间信息,得到所述节点的第一坐标,包括:根据所述多个服务的第一时间信息的时间先后顺序,确定所述节点对应服务的第一时间信息的次序,将所述次序作为所述节点对应的第一坐标计算系数;根据所述节点对应的第一坐标计算系数,计算得到所述节点的第一坐标。
[0171]
在一些实施例中,所述根据所述节点对应的第一坐标计算系数,计算得到所述节点的第一坐标,包括:根据所述节点对应的第一坐标计算系数,得到所述节点与所述树状视图的根节点之间沿第一坐标方向的第一距离;根据所述树状视图的根节点的第一坐标和所述第一距离,得到所述节点的第一坐标。
[0172]
在一些实施例中,所述第一距离的计算公式为:
[0173]
d=(l1+l2)*(sortindex+1)-l2[0174]
其中,d为所述第一距离,sortindex为所述第一坐标计算系数,sortindex≥0,l1为所述树状视图的节点的显示区域之间沿第一坐标方向的间距,l2为所述节点的显示区域沿第一坐标方向的长度。
[0175]
在一些实施例中,所述根据服务之间的所述调用链关系信息,获取所述节点的第二坐标,包括:根据服务之间的所述调用链关系信息,确定所述节点在所述树状视图中的父节点;根据所述父节点的第二坐标、所述父节点包含的子节点的个数,计算得到所述节点的第二坐标。
[0176]
在一些实施例中,所述根据所述节点的第一坐标和第二坐标,在所述树状视图中展示所述节点对应服务的调用服务信息,包括:根据所述节点的第一坐标和第二坐标确定所述节点的显示区域的位置;根据所述节点对应服务的状态,使用与其匹配样式的连接线连接所述节点对应的显示区域与所述节点的父节点对应的显示区域;其中,所述状态根据服务的调用服务信息得到。
[0177]
在一些实施例中,所述服务调用链数据可视化展示的装置还包括:调用链新增数据获取模块;所述调用链新增数据获取模块用于获取调用链新增数据;其中,所述调用链新增数据为由第一服务启动的第二服务的调用链数据,所述第一服务为所述树状视图的叶节点对应的服务,所述第一服务对应的节点为待增加节点的父节点;根据所述第二服务的第
一时间信息,得到所述待增加节点的第一坐标;根据所述第一服务对应节点的第二坐标,获取所述待增加节点的第二坐标;根据所述待增加节点的第一坐标和第二坐标,在所述树状视图中展示所述待增加节点对应的第二服务的调用服务信息。
[0178]
在一些实施例中,所述根据所述第二服务的第一时间信息,得到所述待增加节点的第一坐标,包括:确定所述第二服务的第一时间信息相对所述多个服务中各个服务的第一时间信息的次序,将所述次序作为所述待增加节点对应的第一坐标计算系数;根据所述待增加节点对应的第一坐标计算系数,计算得到所述树状视图中待增加节点的第一坐标。
[0179]
在一些实施例中,所述服务调用链数据可视化展示的装置还包括:新增节点定位模块;所述新增节点定位模块用于根据所述待增加节点的第一坐标和第二坐标,在所述树状视图中对所述待增加节点的显示区域进行定位操作。
[0180]
在一些实施例中,所述服务调用链数据可视化展示的装置还包括:搜索定位模块;所述搜索定位模块用于响应于携带有搜索定位信息的搜索定位请求,获取与所述搜索定位信息对应的所述树状视图中的节点的第一坐标和第二坐标;根据所述节点的第一坐标和第二坐标,在所述树状视图中对所述节点对应的显示区域进行定位操作。
[0181]
图6是根据一示例性实施例示出的一种电子设备600的框图。该电子设备600可以是位于服务端进行数据处理的电子设备。
[0182]
参照图6,电子设备600,可包括至少一个处理器610和存储器620。处理器610可以执行存储在存储器620中的指令。处理器610通过数据总线与存储器620通信连接。除存储器620外,处理器610还可通过数据总线与输入设备630、输出设备640、通信设备650通信连接。
[0183]
处理器610可以是任何常规的处理器,诸如商业可获得的cpu。处理器还可以包括诸如图像处理器(graphic process unit,gpu),现场可编程门阵列(field programmable gate array,fpga)、片上系统(system on chip,soc)、专用集成芯片(application specificintegrated circuit,asic)或它们的组合。
[0184]
存储器620可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
[0185]
在本公开实施例中,存储器620中存储有可执行指令,处理器610可以从所述存储器620中读取所述可执行指令,并执行所述指令以实现上述示例性实施例中任一所述的服务调用链数据可视化展示的方法的全部或部分步骤。
[0186]
除了上述方法和装置以外,本公开的示例性实施例还可以是计算机程序产品或存储有该计算机程序产品的计算机可读存储介质。该计算机产品中包括计算机程序指令,该计算机程序指令可被处理器执行,以实现上述示例性实施例中任一方法中描述的全部或部分步骤。
[0187]
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言以及脚本语言(例如python)。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、
或者完全在远程计算设备或服务器上执行。
[0188]
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子包括:具有一个或多个导线电连接的静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘,或者上述的任意合适的组合。
[0189]
本领域技术人员在考虑说明书及实践本公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
[0190]
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。