一种异常任务的根因任务确定方法及装置与流程

文档序号:18796294发布日期:2019-09-29 19:42阅读:157来源:国知局
一种异常任务的根因任务确定方法及装置与流程

本发明涉及金融科技(fintech)领域和任务执行领域,尤其涉及一种异常任务的根因任务确定方法及装置。



背景技术:

随着计算机技术的发展,越来越多的技术(大数据、分布式、区块链(blockchain)、人工智能等)应用在金融领域,传统金融业正在逐步向金融科技(fintech)转变。目前,金融科技领域的任务在执行过程中,在一些场景下,需要执行对数据进行统计、清洗、分析的计算任务,举例来说,大数据平台上,经常需要批量执行大量的计算任务,完成对数据的处理。在执行计算任务的过程中,可能会遇到异常任务,举例来说,一个计算任务出现未在预期时刻正常执行的情况,称为异常任务。由于计算任务之间会存在依赖关系,即一个任务执行会受到另外任务执行结果的约束,因此需要分析排查导致异常任务异常的根因任务。

然而,目前排查根因任务的方式为通过人工分析判断。这种方式需要运维人员有丰富的运维经验,而且当计算任务较多时,各个计算任务的关系错综复杂,人工分析的方式效率较低,且很容易出错。因此,亟需一种高效率、准确的确定根因任务的方法。



技术实现要素:

本申请实施例提供一种异常任务的根因任务确定方法及装置,解决了现有技术中确定根因任务的效率较低,且很容易出错的问题。

第一方面,本申请实施例提供一种异常任务的根因任务确定方法:根据预设依赖规则,确定异常任务是否存在所依赖的上游任务;若所述异常任务存在所依赖的上游任务,则将所述异常任务作为当前的目标任务;确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务;若不存在,则将所述当前的目标任务所依赖的上游任务中未开始执行的任务重新作为所述当前的目标任务,以对所述当前的目标任务进行更新,并返回执行所述确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务的步骤。

上述方法中,由于异常任务的所依赖的上游任务是根据预设依赖规则确定的,不易出错,而且确定出的所依赖的上游任务是有选择性的,不需要对所依赖的上游任务之外的任务进行排查,效率更高,另外,如果所述所依赖的上游任务中不存在正在执行或运行错误的任务,则将所述当前的目标任务所依赖的上游任务中未开始执行的任务重新作为所述当前的目标任务,以对所述当前的目标任务进行更新,并返回执行所述确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务的步骤,从而有选择性的继续根据目标任务排查异常任务的根因任务,通过上述方法极大降低了无效排查工作,提升了根因任务确定的效率。

一种可选实施方式中,所述根据预设依赖规则,确定异常任务是否存在所依赖的上游任务之前,还包括:解析任务调度平台的编排文件,获取所述编排文件中存储的任务编排信息;所述任务编排信息为指示任务依赖关系的信息;根据所述任务编排信息中指示的任务依赖关系,将所述任务编排信息转化为至少一条数据记录;所述至少一条数据记录中每条数据记录对应一个任务以及该任务的所依赖的上游任务;根据所述至少一条数据记录,生成所述预设依赖规则。

上述方法下,通过解析任务调度平台的编排文件获取任务编排信息,并根据所述任务编排信息中指示的任务依赖关系,将所述任务编排信息转化为至少一条数据记录;从而根据所述至少一条数据记录,生成所述预设依赖规则,通过上述方法可在数据记录生成预设依赖规则,避免了人工编排分析工作。

一种可选实施方式中,所述根据预设依赖规则,确定异常任务是否存在所依赖的上游任务,包括:若所述异常任务的任务类型为事件等待类型,则将与所述事件等待类型的唯一匹配的事件完成类型对应的任务,确定为所述异常任务所依赖的上游任务;若所述异常任务为预定义任务连接中的结束任务,则将所述预定义任务连接中的开始任务,确定为所述异常任务所依赖的上游任务;若所述异常任务为子组任务中的首任务,且所述子组任务存在预定义的子组上游任务,则将所述子组上游任务作为所述异常任务所依赖的上游任务;或者,若所述子组任务不存在预定义的子组上游任务,且所述子组任务所属父组任务存在预定义的父组上游任务,作为所述异常任务所依赖的上游任务。

上述方法下,通过异常任务的任务类型、是否为预定义任务连接中的结束任务、是否为子组任务中的首任务等预设依赖规则,确定出了异常任务的上游任务,从而更细化地确定处理异常任务的上游任务,缩小了确定根因任务的排查范围。

一种可选实施方式中,若所述当前的目标任务所依赖的上游任务的任务状态均为成功执行完毕,则将所述异常任务作为导致所述异常任务未开始执行的根因任务。

上述方法为当前的目标任务所依赖的上游任务的任务状态均为成功执行完毕时,异常任务的根因任务的一种确定方法,也给出了确定异常任务为异常任务本身的一种情况,从而不需要额外排查其它任务。

一种可选实施方式中,所述确定当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务之后,还包括:若存在,则将所述正在执行或运行错误的任务确定为根因任务。

可通过上述方法直接确定根因任务。

一种可选实施方式中,所述确定当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务,包括:按照预设周期,获取所述当前的目标任务所依赖的上游任务中每个上游任务的日志信息中的关键字信息,根据所述预设周期内该上游任务的日志信息中的关键字信息与预设任务状态规则的匹配结果,确定该上游任务的任务状态。

上述方式为确定至少一个上游任务的任务状态的确定方式,通过对预设周期内,所述当前的目标任务所依赖的上游任务中每个上游任务的日志信息中的关键字信息,确定该上游任务的状态,由于日志为记录上游任务执行状态的信息,因此上述方法可及时准确的更新上游任务的状态。

第二方面,本申请提供一种异常任务的根因任务确定装置,包括:确定模块,用于根据预设依赖规则,确定异常任务是否存在所依赖的上游任务;处理模块,用于若所述异常任务存在所依赖的上游任务,则将所述异常任务作为当前的目标任务;确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务;若不存在,则将所述当前的目标任务所依赖的上游任务中未开始执行的任务重新作为所述当前的目标任务,以对所述当前的目标任务进行更新,并返回执行所述确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务的步骤。

一种可选实施方式中,所述处理模块还用于:解析任务调度平台的编排文件,获取所述编排文件中存储的任务编排信息;所述任务编排信息为指示任务依赖关系的信息;根据所述任务编排信息中指示的任务依赖关系,将所述任务编排信息转化为至少一条数据记录;所述至少一条数据记录中每条数据记录对应一个任务以及该任务的所依赖的上游任务;根据所述至少一条数据记录,生成所述预设依赖规则。

一种可选实施方式中,所述确定模块具体用于:若所述异常任务的任务类型为事件等待类型,则将与所述事件等待类型的唯一匹配的事件完成类型对应的任务,确定为所述异常任务所依赖的上游任务;若所述异常任务为预定义任务连接中的结束任务,则将所述预定义任务连接中的开始任务,确定为所述异常任务所依赖的上游任务;若所述异常任务为子组任务中的首任务,且所述子组任务存在预定义的子组上游任务,则将所述子组上游任务作为所述异常任务所依赖的上游任务;或者,若所述子组任务不存在预定义的子组上游任务,且所述子组任务所属父组任务存在预定义的父组上游任务,作为所述异常任务所依赖的上游任务。

一种可选实施方式中,所述处理模块还用于:若存在,则将所述正在执行或运行错误的任务确定为根因任务。

一种可选实施方式中,所述处理模块还用于:按照预设周期,获取所述当前的目标任务所依赖的上游任务中每个上游任务的日志信息中的关键字信息,根据所述预设周期内该上游任务的日志信息中的关键字信息与预设任务状态规则的匹配结果,确定该上游任务的任务状态。

一种可选实施方式中,所述处理模块还用于:若所述当前的目标任务所依赖的上游任务的任务状态均为成功执行完毕,则将所述异常任务作为导致所述异常任务未开始执行的根因任务。

上述第二方面及第二方面各个实施例的有益效果,可以参考上述第一方面及第一方面各个实施例的有益效果,这里不再赘述。

第三方面,本申请实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个实施例的方法。

第四方面,本申请实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个实施例的方法。

附图说明

图1为本申请实施例提供的一种异常任务的根因任务确定方法的步骤流程示意图;

图2为本申请实施例提供的一种异常任务的根因任务确定方法中确定上游任务的步骤流程示意图;

图3为本申请实施例中提供的一种异常任务的根因任务确定方法中任务之间依赖关系的示意图;

图4为本申请实施例中提供的一种异常任务的根因任务确定装置的结构示意图。

具体实施方式

为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。

金融科技(fintech)领域中,需要调度大量的计算任务,以完成金融交易的过程。金融科技的任务可以在多个平台上调度执行,举例来说,大数据平台(bigdataplatform,bdp)。大数据平台中,计算任务有多种,如批量任务:指在大数据平台上执行的、对数据进行统计、清洗、分析的计算作业。大数据平台中还有调度平台,调度平台指用来编排、调度大数据平台上批量任务的执行、重新执行、跳过的一个客户端工具。编排文件:用来定义每个批量任务的所属分组、作业类型、具体执行的指令,以及在调度平台上所处的位置,调度平台会根据编排文件内容,在客户端界面里进行展示和控制。服务等级协议(sla),是在一定开销下为保障服务的性能和可靠性,服务提供商与用户间定义的一种双方认可的协定,包含了对服务有效性的保障,譬如对故障解决时间、服务超时等的保证。由于计算任务之间会存在依赖关系,即一个任务执行会受到另外任务执行结果的约束,因此需要分析排查导致异常任务异常的根因任务。

然而,目前排查根因任务的方式为通过人工分析判断。这种方式需要运维人员有丰富的运维经验,而且当计算任务较多时,各个计算任务的关系错综复杂,人工分析的方式效率较低,且很容易出错。

为此,本申请提出一种高效率、准确的确定根因任务的方法。如图1所示,为本申请实施例提供的一种异常任务的根因任务确定方法的步骤流程示意图。

步骤101:根据预设依赖规则,确定异常任务是否存在所依赖的上游任务。

步骤102:若所述异常任务存在所依赖的上游任务,则将所述异常任务作为当前的目标任务。

步骤103:确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务。

步骤104:若不存在,则将所述当前的目标任务所依赖的上游任务中未开始执行的任务重新作为所述当前的目标任务,以对所述当前的目标任务进行更新,并返回执行所述确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务的步骤。

步骤101中,所依赖的上游任务的定义如下:

若n个第一任务和第二任务同时满足以下条件(1)和(2),n为正整数,则称n个第一任务为第二任务所依赖的上游任务:(1)n个第一任务中任一第一任务执行成功完毕之前,均不能执行第二任务;(2)n个第一任务全部执行成功完毕后,触发第二任务的执行。需要说明的是,本申请中所依赖的上游任务的定义不具有传递性,第一任务所依赖的上游任务并不是第二上游任务所依赖的上游任务。相应地,第二任务也可以称为n个第一任务中任一第一任务的下游任务。此时,也称第二任务与n个第一任务中存在上下游关系。

另外,未开始执行指在预设时刻未处于正在执行状态。

以大数据平台为例,可通过如图2所示的流程,确定异常任务的所依赖的上游任务,如图2所示,为本申请实施例提供的一种异常任务的根因任务确定方法中确定上游任务的步骤流程示意图。

步骤201:解析任务调度平台的编排文件,获取所述编排文件中存储的任务编排信息。

步骤201可通过shell语言来解析。所述任务编排信息为指示任务依赖关系的信息。

步骤202:根据所述任务编排信息中指示的任务依赖关系,将所述任务编排信息转化为至少一条数据记录。

所述至少一条数据记录中每条数据记录对应一个任务以及该任务的所依赖的上游任务。举例来说,步骤202中,将所述任务编排信息转化为至少一条数据记录时,可将可扩展标记语言(xml)格式中存储的预定义任务关系,和任务定义信息拼接成结构化查询语言(structuredquerylanguage,sql)的插入(insert)语句,导入到mysql数据库中。

步骤203:根据所述至少一条数据记录,生成所述预设依赖规则。

将分解出的预定义任务关系,任务定义信息,存入到数据库中,在数据库的存储过程中,根据预设依赖规则,确定异常任务所依赖的上游任务。

上述方法下,通过解析任务调度平台的编排文件获取任务编排信息,并根据所述任务编排信息中指示的任务依赖关系,将所述任务编排信息转化为至少一条数据记录;从而根据所述至少一条数据记录,生成所述预设依赖规则,通过上述方法可在数据记录生成预设依赖规则,避免了人工编排分析工作。

步骤101中,根据预设依赖规则,确定异常任务是否存在所依赖的上游任务的一种可选实施方式可以如下,包括:

(1)若所述异常任务的任务类型为事件等待类型,则将与所述事件等待类型的唯一匹配的事件完成类型对应的任务,确定为所述异常任务所依赖的上游任务。

举例来说,事件等待类型的任务a和事件完成类型的任务b为预先定义的一对匹配的任务,任务b成功执行完毕后,就会触发任务a执行。触发方式不限,举例来说可以通过等待信号来触发。

(2)若所述异常任务为预定义任务连接中的结束任务,则将所述预定义任务连接中的开始任务,确定为所述异常任务所依赖的上游任务。

预定义任务连接中定义了开始任务和结束任务,开始任务为结束任务的上游任务。举例来说,连接l定义了开始任务l1以及结束任务l2,当异常任务为结束任务l2时,那么l1就是异常任务的一个上游任务。

(3)若所述异常任务为子组任务中的首任务,且所述子组任务存在预定义的子组上游任务,则将所述子组上游任务作为所述异常任务所依赖的上游任务;或者,若所述子组任务不存在预定义的子组上游任务,且所述子组任务所属父组任务存在预定义的父组上游任务,作为所述异常任务所依赖的上游任务。

需要说明的是,子组任务为多个存在上游任务关系的任务组,子组任务可以为父组任务的一个任务单位,一个父组任务中,子组任务之间也存在上下游关系。举例来说,任务c1的上游任务为任务c2和任务c3,任务c2的上游任务为c4,那么c1、c2、c3、c4的组合就是一个子组任务。子组任务的首任务为,满足以下条件的任务:(1)该任务是子组任务中一个任务的上游任务。(2)该任务无上游任务。(3)该任务的下游任务的上游任务有且仅有一个,且为该任务。

上述方法下,通过异常任务的任务类型、是否为预定义任务连接中的结束任务、是否为子组任务中的首任务等预设依赖规则,确定出了异常任务的上游任务,从而更细化地确定处理异常任务的上游任务,缩小了确定根因任务的排查范围。

一种可选实施方式中,若所述当前的目标任务所依赖的上游任务的任务状态均为成功执行完毕,则将所述异常任务作为导致所述异常任务未开始执行的根因任务。

上述方法为当前的目标任务所依赖的上游任务的任务状态均为成功执行完毕时,异常任务的根因任务的一种确定方法,也给出了确定异常任务为异常任务本身的一种情况,从而不需要额外排查其它任务。

步骤102~步骤104中,需要获取当前的目标任务所依赖的上游任务的状态,可以按照以下方式获取当前的目标任务所依赖的任务状态:

按照预设周期,获取所述当前的目标任务所依赖的上游任务中每个上游任务的日志信息中的关键字信息,根据所述预设周期内该上游任务的日志信息中的关键字信息与预设任务状态规则的匹配结果,确定该上游任务的任务状态。

上述方式为确定至少一个上游任务的任务状态的确定方式,通过对预设周期内,所述当前的目标任务所依赖的上游任务中每个上游任务的日志信息中的关键字信息,确定该上游任务的状态,由于日志为记录上游任务执行状态的信息,因此上述方法可及时准确的更新上游任务的状态。

具体来说,按照五分钟的预设周期,在批量服务器上抓取各任务日志的更新时间,结合日志信息中的关键词,判断任务当前的各种状态:包括批量日、运行状态(成功执行完毕,运行错误,未开始执行等)、任务启动/结束时间、运行时长等。再以各任务为最小基准单元,向上回溯任务所在子组任务,子组所在父组任务,根据内建逻辑计算其相应状态;整个分析过程相对独立,支持任务在正常运行,单个重新运行。

步骤102~步骤104中,确定异常任务的根因任务的方式还有以下两种:

第一种:若当前的目标任务所依赖的上游任务中存在正在执行或运行错误的上游任务,则将正在执行或运行错误的上游任务作为异常任务的根因任务。

上述方法下,指示出了导致所述异常任务未开始执行的根因任务的一种情况。

第二种,若当前的目标任务所依赖的上游任务的任务状态均为成功执行完毕,则将所述异常任务作为导致所述异常任务未开始执行的根因任务。

上述方法为当前的目标任务所依赖的上游任务的任务状态均为成功执行完毕时,异常任务的根因任务的一种确定方法,也给出了确定异常任务为异常任务本身的一种情况,从而不需要额外排查其它任务。

下面结合图3具体说明,本申请实施例提供的一种异常任务的根因任务确定方法。如图3所示,为本申请实施例中提供的一种异常任务的根因任务确定方法中任务之间依赖关系的示意图。

假定任务k1有2个上游任务:任务k2、任务k3,而任务k3又有2个上游任务:任务k4、任务k5。任务k1能正常开始执行的前提条件是其所有上游任务包括任务k2、任务k3都已正常完成。当k1到预设时刻未开始执行,说明可能受上游任务的影响,则:

第一步、代入任务k1的信息,查出其最近一层的上游任务,包括任务k2和任务k3,其中任务k2成功执行完毕,任务k3未正常开始,说明是任务k3的上游任务或任务k3上存在问题。

第二步、查询任务k3的上游任务情况。而任务k3的上游任务中任务k4成功执行完毕,任务k5显示运行错误,显然任务k5是导致任务k1未开始执行的根因任务。

第三步、显示查询结果为任务k5,运维人员即可直接排查任务k5的异常原因,进而解决问题。

此时获取到的任务k5,即为影响了下游任务未正常执行的根因任务,只需针对任务k5进行直接处理即可。如任务k5正处于正在运行状态,可查看执行时长、日志来分析是否因代码更新导致任务效率变化,或因上游推送数据偶发增量导致;如执行出错,可根据日志记录定位到出错原因;如异常为外部的信号等待超时,可根据任务名称或描述直接判断出负责方,联系其确认信号延迟原因即可。结合此技术,配合微信、邮件等监控提示,便可清晰地直击问题根因,省下逐层分析判断的时间。

本申请通过技术手段,自动解析编排文件,将界面看到的上下游,转化成代码可识别的依赖关系,并按层级回溯、遍历其上游所有任务的状态,直到找到其最上游未正常结束的任务,即可定位为影响异常任务的根因任务。通过人工梳理的依赖任务清单,可以模糊定位到当前异常任务可能受哪几个上游任务影响,再通过客户端页面,进行人工查询,找到影响因素。

上述方法中,由于异常任务的至少一个上游任务是根据预设依赖规则确定的,不易出错,而且确定出的至少一个上游任务是有选择性的,不需要对至少一个上游任务之外的任务进行排查,效率更高,另外,如果所述至少一个上游任务中存在第一上游任务,则将导致所述第一上游任务未开始执行的根因任务,确定为导致所述异常任务未开始执行的根因任务,从而有选择性的继续根据上游任务排查异常任务的根因任务,通过上述方法极大降低了无效排查工作,提升了根因任务确定的效率。

如图4所示,为本申请实施例中提供的一种异常任务的根因任务确定装置的结构示意图。

本申请提供一种异常任务的根因任务确定装置,包括:确定模块401,用于根据预设依赖规则,确定异常任务是否存在所依赖的上游任务;处理模块402,用于若所述异常任务存在所依赖的上游任务,则将所述异常任务作为当前的目标任务;确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务;若不存在,则将所述当前的目标任务所依赖的上游任务中未开始执行的任务重新作为所述当前的目标任务,以对所述当前的目标任务进行更新,并返回执行所述确定所述当前的目标任务所依赖的上游任务中是否存在正在执行或运行错误的任务的步骤。

一种可选实施方式中,所述处理模块402还用于:解析任务调度平台的编排文件,获取所述编排文件中存储的任务编排信息;所述任务编排信息为指示任务依赖关系的信息;根据所述任务编排信息中指示的任务依赖关系,将所述任务编排信息转化为至少一条数据记录;所述至少一条数据记录中每条数据记录对应一个任务以及该任务的所依赖的上游任务;根据所述至少一条数据记录,生成所述预设依赖规则。

一种可选实施方式中,所述确定模块401具体用于:若所述异常任务的任务类型为事件等待类型,则将与所述事件等待类型的唯一匹配的事件完成类型对应的任务,确定为所述异常任务所依赖的上游任务;若所述异常任务为预定义任务连接中的结束任务,则将所述预定义任务连接中的开始任务,确定为所述异常任务所依赖的上游任务;若所述异常任务为子组任务中的首任务,且所述子组任务存在预定义的子组上游任务,则将所述子组上游任务作为所述异常任务所依赖的上游任务;或者,若所述子组任务不存在预定义的子组上游任务,且所述子组任务所属父组任务存在预定义的父组上游任务,作为所述异常任务所依赖的上游任务。

一种可选实施方式中,所述处理模块402还用于:若存在,则将所述正在执行或运行错误的任务确定为根因任务。

一种可选实施方式中,所述处理模块402还用于:按照预设周期,获取所述当前的目标任务所依赖的上游任务中每个上游任务的日志信息中的关键字信息,根据所述预设周期内该上游任务的日志信息中的关键字信息与预设任务状态规则的匹配结果,确定该上游任务的任务状态。

一种可选实施方式中,所述处理模块402还用于:若所述当前的目标任务所依赖的上游任务的任务状态均为成功执行完毕,则将所述异常任务作为导致所述异常任务未开始执行的根因任务。

本申请实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行本申请实施例提供的异常任务的根因任务确定的方法及可选方法。

本申请实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行本申请实施例提供的异常任务的根因任务确定的方法及可选方法。

最后应说明的是:本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1