基于Yang语言模型的状态数据处理方法转让专利

申请号 : CN201710458519.8

文献号 : CN109144489B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 朱林逯利军钱培专

申请人 : 上海赛特斯信息科技股份有限公司

摘要 :

本发明涉及一种基于Yang语言模型的状态数据处理方法,所述的方法包括如下步骤:(1)根据实际状态数据创建Yang数据模型;(2)通过用户接口请求获取数据;(3)判断用户接口请求获取的数据是单实例模型或多实例模型;如果是单实例模型则继续步骤(4),如果是多实例模型则继续步骤(5);(4)遍历回调单实例模型下所有叶节点的数据;(5)遍历查找多实例模型下所有单个实例,获取各个实例的键值,遍历回调各个实例下所有叶节点的数据。采用该基于Yang语言模型的状态数据处理方法,用统一数据获取接口来获取所有的状态数据,经过对数据抽象,使得数据获取本身不在于任何业务紧耦合,状态数据获取的开发有了统一的规范。

权利要求 :

1.一种基于Yang语言模型的状态数据处理方法,其特征在于,所述的方法包括如下步骤:

(1)根据实际状态数据创建Yang数据模型;

(2)通过用户接口请求获取数据;

(3)判断用户接口请求获取的数据是单实例模型或多实例模型;如果是单实例模型则继续步骤(4),如果是多实例模型则继续步骤(5);

(4)遍历单实例模型下所有叶节点,并回调对应的回调函数来获得所述叶节点的数据;

(5)遍历查找多实例模型下所有单个实例,获取各个实例的键值,遍历各个实例下所有叶节点,并回调对应的回调函数来获得所述叶节点的数据。

2.根据权利要求1所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的步骤(1)包括如下步骤:

(1.1)编写Yang数据模型;

(1.2)将所有的状态数据抽象为多实例状态数据或单实例状态数据;

(1.3)标识出状态模型;

(1.4)每个回调点关联一组回调函数。

3.根据权利要求2所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的标识出状态模型,具体为:

在状态模型的container或list内添加Yang扩展标记callpoint。

4.根据权利要求3所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的扩展标记callpoint具有名称属性。

5.根据权利要求2所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的回调函数包括:

多实例迭带函数,用以查找每一个存在的键值;

元素获取函数,用以获取每一个叶节点数据。

6.根据权利要求1所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的步骤(2)与步骤(3)之间还存在步骤(2.1):(2.1)创建一个事务,所述的事务用以隔离多用户同时请求状态数据。

7.根据权利要求5所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的步骤(4)包括如下步骤:

(4.1)指明要获取的container;

(4.2)配置库根据Yang模型找出container内部第一个叶节点;

(4.3)将本次操作中的叶节点的路径传给业务;

(4.4)调用元素获取函数;

(4.5)所述的业务实现元素获取函数;

(4.6)将回调函数提供的数据作为本次操作中的叶节点的数据回填给客户;

(4.7)所述的配置库遍历出下一个叶节点;

(4.8)判断是否存在下一个叶节点,如果是,则继续步骤(4.3),否则结束本次遍历。

8.根据权利要求7所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的步骤(5)包括如下步骤:

(5.1)指明要获取的list;

(5.2)配置库根据Yang模型识别出list的键字段,调用多实例迭带函数来获取第一个键值;

(5.3)配置库根据键值回传给业务;

(5.4)业务根据本次操作中的键值确定第一个叶节点;

(5.5)遍历本次操作中的所有叶节点,并回调对应的回调函数来获得所述叶节点的数据;

(5.6)调用多实例迭带函数来遍历出下一个键值并判断是否存在下一个键值,如果是,则继续步骤(5.3),否则结束本次遍历。

9.根据权利要求8所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的步骤(5.5)包括以下步骤:(5.5.1)将本次操作中的leaf路径传给业务;

(5.5.2)调用元素获取函数;

(5.5.3)所述的业务实现元素获取函数;

(5.5.4)将回调函数提供的数据作为本次操作中的叶节点的数据回填给客户;

(5.5.5)所述的配置库遍历出下一个叶节点;

(5.5.6)判断是否存在下一个叶节点,如果是,则继续步骤(5.5.1),否则继续步骤(5.6)。

10.根据权利要求1所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的实例与相应键值一一对应。

11.根据权利要求1至10中任一项所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的步骤(1)前还包括步骤(0):(0)创建配置库维护表,用于记载回调点名称、Yang模型路径和回调函数组。

12.根据权利要求11所述的基于Yang语言模型的状态数据处理方法,其特征在于,所述的回调函数组包括但不限于元素获取函数和多实例迭带函数。

说明书 :

基于Yang语言模型的状态数据处理方法

技术领域

[0001] 本发明涉及配置管理系统技术领域,尤其涉及配置管理系统中的状态数据处理技术领域,具体是指一种基于Yang语言模型的状态数据处理方法。

背景技术

[0002] 在配置管理系统中,状态数据处理是网络设备状态监控的一个非常重要的功能。状态数据通常不会被数据库存储,而是在运行时通过函数来即时读取。这些状态数据可以
是各种资源使用的统计计数,也可以运行时产生的内存数据,还可以是一些业务数据。
[0003] 随着网络的飞速发展,网络规模扩大,网络的异构性和复杂性不断增加,网络设备的种类和数目日益增多,地理位置分布更加广泛,对网络配置管理的要求越来越高。网络设
备在人类日常生活中扮演了越来越重要的角色,在提升人类生活质量的同时也对网络配置
管理系统带来了各种各样的问题,比如配置模型越来越复杂,数据量越来越大,代码逻辑越
来越复杂等问题。近几年,为了应对这些问题,人们提出了各种解决方案,如TLV(type‑
length‑value,一种报文格式)数据封装或根据业务不同进行硬编码,来最大程度的解决状
态数据处理问题。
[0004] 在传统的状态数据处理过程,很少会有数据模型的概念,即使有了数据模型的概念,也很少会区别对待配置数据与状态数据。因此准确而严格地区分出状态数据与配置数
据,对配置管理而言是一个非常重要的因素,而且配置数据和状态数据掺杂在一起对配置
处理流程会产生直接的影响,无法用同一套逻辑来处理这些数据。
[0005] 传统的状态数据处理需要针对不同的用户接口设计不同的数据结构及函数,以最常用的CLI(command‑line interface,命令行界面)命令行接口为例,传统实现状态数据都
是通过show命令来展示的,而针对不同命令行的处理存在着巨大的差异,几乎要针对每一
个show命令都要都供一个函数来解析。同样的,如果换成NETCONF接口,那么原先针对命令
行解析的show命令,需要全部重新实现一遍来获取对应的状态数据。一旦需要状态数据有
变更,那么需要改动每一处状态数据获取代码,由此带来的工作量非常巨大且繁琐,每个不
同的接口代码都要分别修改,很容易产生漏改、错改的现象发生。
[0006] 传统的状态数据处理都是与业务模块紧耦合在一起,代码很难复用。每个状态数据获取都是直接访问业务数据结构,由此带来的数据安全隐患非常大,一旦不小心错误的
修改到业务数据内存,将很难发现错误。并且传统状态数据过程中很少有严格的数据类型
校验,那么给出的状态数据,很可能会出现错误的结果。
[0007] 传统的业务模块很少有对外提供数据模型,一旦需要与第三方交互,没有一个可以参考的标准,也无法让开发者直观的认识到有哪些状态数据需要处理及这些状态数据之
间有怎样的层次关系。
[0008] 因此一个统一的状态数据处理模块对配置管理系统而言,是非常重要的。本发明专于状态数据处理,通过抽象出一系列基础的回调函数技术,提供一个全新的解决方案去
统一处理所有状态数据。

发明内容

[0009] 本发明的目的是克服了上述现有技术的缺点,提供了一种能够实现通过统一的数据模型规范状态数据获取的基于Yang语言模型的状态数据处理方法。
[0010] 为了实现上述目的,本发明的具有如下构成:
[0011] 该基于Yang语言模型的状态数据处理方法,其特征在于,所述的方法包括如下步骤:
[0012] (1)根据实际状态数据创建Yang数据模型;
[0013] (2)通过用户接口请求获取数据;
[0014] (3)判断用户接口请求获取的数据是单实例模型或多实例模型;如果是单实例模型则继续步骤(4),如果是多实例模型则继续步骤(5);
[0015] (4)遍历单实例模型下所有叶节点,并回调对应的回调函数来获得所述叶节点的数据;
[0016] (5)遍历查找多实例模型下所有单个实例,获取各个实例的键值,遍历各个实例下所有叶节点,并回调对应的回调函数来获得所述叶节点的数据。
[0017] 较佳地,所述的步骤(1)包括如下步骤:
[0018] (1.1)编写Yang数据模型;
[0019] (1.2)将所有的状态数据抽象为多实例状态数据或单实例状态数据;
[0020] (1.3)标识出状态模型;
[0021] (1.4)每个回调点关联一组回调函数。
[0022] 更佳地,所述的标识出状态模型,具体为:
[0023] 在状态模型的container或list内添加Yang扩展标记callpoint。
[0024] 更进一步地,所述的扩展标记callpoint具有名称属性。
[0025] 更佳地,所述的回调函数包括:
[0026] 多实例迭带函数,用以查找每一个存在的键值;
[0027] 元素获取函数,用以获取每一个叶节点数据。
[0028] 较佳地,所述的步骤(2)与步骤(3)之间还存在步骤(2.1):
[0029] (2.1)创建一个事务,所述的事务用以隔离多用户同时请求状态数据。
[0030] 较佳地,所述的步骤(4)包括如下步骤:
[0031] (4.1)指明要获取的container;
[0032] (4.2)配置库根据Yang模型找出container内部第一个叶节点;
[0033] (4.3)将本次操作中的叶节点的路径传给业务;
[0034] (4.4)调用元素获取函数;
[0035] (4.5)所述的业务实现元素获取函数;
[0036] (4.6)将元素获取函数提供的数据作为本次操作中的叶节点的数据回填给客户;
[0037] (4.7)所述的配置库遍历出下一个叶节点;
[0038] (4.8)判断是否存在下一个叶节点,如果是,则继续步骤(4.3),否则结束本次遍历。
[0039] 较佳地,所述的步骤(5)包括如下步骤:
[0040] (5.1)指明要获取的list;
[0041] (5.2)配置库根据Yang模型识别出list的键字段,调用多实例迭带函数来获取第一个键值;
[0042] (5.3)配置库根据键值回传给业务;
[0043] (5.4)业务根据本次操作中的键值确定第一个叶节点;
[0044] (5.5)遍历本次操作中的所有叶节点,并回调对应的回调函数来获得所述叶节点的数据;
[0045] (5.6)调用多实例迭带函数来遍历出下一个键值并判断是否存在下一个键值,如果是,则继续步骤(5.3),否则结束本次遍历。
[0046] 更佳地,所述的步骤(5.5)包括以下步骤:
[0047] (5.5.1)将本次操作中的叶节点的路径传给业务;
[0048] (5.5.2)调用元素获取函数;
[0049] (5.5.3)所述的业务实现元素获取函数;
[0050] (5.5.4)将元素获取函数提供的数据作为本次操作中的叶节点的数据回填给客户;
[0051] (5.5.5)所述的配置库遍历出下一个叶节点;
[0052] (5.5.6)判断是否存在下一个叶节点,如果是,则继续步骤(5.5.1),否则继续步骤(5.6)。
[0053] 较佳地,所述的实例与相应键值一一对应。
[0054] 较佳地,其特征在于,所述的步骤(1)前还包括步骤(0):
[0055] (0)创建配置库维护表,用于记载回调点名称、Yang模型路径和回调函数组。
[0056] 更佳地,所述的回调函数组包括但不限于元素获取函数和多实例迭带函数。
[0057] 采用了该发明中的基于Yang语言模型的状态数据处理方法,用统一的API(Application Programming Interface,应用程序编程接口)来获取所有的状态数据,经过
对数据抽象,使得数据获取本身不在于任何业务紧耦合,状态数据获取的开发有了统一的
规范;为所有不同的用户(如CLI、NETCONF等)接口提供了统一的数据获取接口;状态数据获
取流程只依赖于Yang模型,可以任意构造查询层次,具有广泛的应用范围。

附图说明

[0058] 图1为本发明的基于Yang语言模型的状态数据处理方法的流程图。

具体实施方式

[0059] 为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
[0060] 在一种有效的实施方式中,该基于Yang语言模型的状态数据处理方法,其特征在于,所述的方法包括如下步骤:
[0061] (1)根据实际状态数据创建Yang数据模型;
[0062] (2)通过用户接口请求获取数据;
[0063] (3)判断用户接口请求获取的数据是单实例模型或多实例模型;如果是单实例模型则继续步骤(4),如果是多实例模型则继续步骤(5);
[0064] (4)遍历单实例模型下所有叶节点,并回调对应的回调函数来获得所述叶节点的数据;
[0065] (5)遍历查找多实例模型下所有单个实例,获取各个实例的键值,遍历各个实例下所有叶节点,并回调对应的回调函数来获得所述叶节点的数据。
[0066] 在一种较佳的实施方式中,所述的步骤(1)包括如下步骤:
[0067] (1.1)编写Yang数据模型;
[0068] (1.2)将所有的状态数据抽象为多实例状态数据或单实例状态数据;
[0069] (1.3)标识出状态模型;
[0070] (1.4)每个回调点关联一组回调函数。
[0071] 在一种更佳地实施方式中,所述的标识出状态模型,具体为:
[0072] 在状态模型的container或list内添加Yang扩展标记callpoint。
[0073] 在一种更进一步的实施方式中,所述的扩展标记callpoint具有名称属性。
[0074] 在一种更佳地实施方式中,所述的回调函数包括:
[0075] 多实例迭带函数,用以查找每一个存在的键值;
[0076] 元素获取函数,用以获取每一个叶节点数据。
[0077] 在一种较佳的实施方式中,所述的步骤(2)与步骤(3)之间还存在步骤(2.1):
[0078] (2.1)创建一个事务,所述的事务用以隔离多用户同时请求状态数据。
[0079] 在一种较佳的实施方式中,所述的步骤(4)包括如下步骤:
[0080] (4.1)指明要获取的container;
[0081] (4.2)配置库根据Yang模型找出container内部第一个叶节点;
[0082] (4.3)将本次操作中的叶节点的路径传给业务;
[0083] (4.4)调用元素获取函数;
[0084] (4.5)所述的业务实现元素获取函数;
[0085] (4.6)将元素获取函数提供的数据作为本次操作中的叶节点的数据回填给客户;
[0086] (4.7)所述的配置库遍历出下一个叶节点;
[0087] (4.8)判断是否存在下一个叶节点,如果是,则继续步骤(4.3),否则结束本次遍历。
[0088] 在一种较佳的实施方式中,所述的步骤(5)包括如下步骤:
[0089] (5.1)指明要获取的list;
[0090] (5.2)配置库根据Yang模型识别出list的键字段,调用多实例迭带函数来获取第一个键值;
[0091] (5.3)配置库根据键值回传给业务;
[0092] (5.4)业务根据本次操作中的键值确定第一个叶节点;
[0093] (5.5)遍历本次操作中的所有叶节点,并回调对应的回调函数来获得所述叶节点的数据;
[0094] (5.6)调用多实例迭带函数来遍历出下一个键值并判断是否存在下一个键值,如果是,则继续步骤(5.3),否则结束本次遍历。
[0095] 在一种更佳地实施方式中,所述的步骤(5.5)包括以下步骤:
[0096] (5.5.1)将本次操作中的叶节点的路径传给业务;
[0097] (5.5.2)调用元素获取函数;
[0098] (5.5.3)所述的业务实现元素获取函数;
[0099] (5.5.4)将元素获取函数提供的数据作为本次操作中的叶节点的数据回填给客户;
[0100] (5.5.5)所述的配置库遍历出下一个叶节点;
[0101] (5.5.6)判断是否存在下一个叶节点,如果是,则继续步骤(5.5.1),否则继续步骤(5.6)。
[0102] 在一种较佳的实施方式中,所述的实例与相应键值一一对应。
[0103] 在一种较佳的实施方式中,其特征在于,所述的步骤(1)前还包括步骤(0):
[0104] (0)创建配置库维护表,用于记载回调点名称、Yang模型路径和回调函数组。
[0105] 在一种更佳地实施方式中,所述的回调函数组包括但不限于元素获取函数和多实例迭带函数。
[0106] 本发明基于以下假设进行实施:
[0107] 1、能够解析标准Yang模型,同时可以解析Yang模型的扩展;
[0108] 2、能够根据Yang模型自动生成CLI命令行或其它接口。
[0109] 依据Yang模型的特性,将所有的状态数据抽象为多实例状态数据及单实例状态数据,同时根据Yang模型中标识的回调点来调用对应的回调函数。
[0110] 如果该模型为单实例模型,那么遍历该模型下所有叶节点,调用注册的叶节点数据获取回调函数通过该函数提供的数据作为该叶节点的数据。
[0111] 如果该模型为多实例模型,首先遍历该模型有多少个实例,每个实例都有与之唯一对应的key,获取实例的key后,再根据key找到对应的实例数据,然后遍历该模型下所有
叶节点。
[0112] 将状态数据模型抽象为单实例与多实例两种,多实例数据通过key进行迭代循环。创建事务用以隔离多用户同时请求状态数据。在状态数据获取过程中,全为异步回调方式。
业务不可以主动推送据给用户。业务每次返回数据必须回调函数中提供。
[0113] 在一个具体的实施例中,首先编写好Yang数据模型,标识出状态模型,在状态模型的恰当位置如container或list内加Yang扩展标记callpoint。
[0114] callpoint可以有name属性,唯一标识一组回调函数,每个回调点都必须关联一系回调函数,这些函数将在获取状态数据时被调用:
[0115] get_next():
[0116] 针对list,这个函数会被重复调用,用来查找每一个存在的key,如果没有更多的key可以用返回未找到标识查找结束。
[0117] get_elem():
[0118] 当需要获取叶节点数据时,这个回调函数会被调用。
[0119] 当用户需要获取状态数据时,用户指定yang模型中的container、list或者leaf。如果指定位置有callpoint点,那么将触发callpoint点注册的函数,如果指点位置没有
callpoint点,那查看其父结点是否有callpoint点,依此类推,直到找到为止。如果一直没
有,那么本次执行失败。
[0120] 单实例数据获取:
[0121] 如果需要获取一个container中的所有leaf数据,那么获取命令只要指明这个container即可。
[0122] 配置库根据Yang模型找出container内部第一个leaf结点,把这个leaf路径传给业务,调用get_elem()函数。
[0123] 业务实现get_elem()函数,回填数据。
[0124] 配置库遍历出下一个leaf结点,再次调用get_elem()函数。直到所有leaf都被处理。
[0125] 多实现数据获取:
[0126] 如果需要获取一个list中的所有数据,那么获取命令就要指明这个list。
[0127] 配置库根据Yang模型识别出list的key字段,调用get_next()回调,来获取第一个key值。
[0128] 配置库根据key值回传给业务,业务根据key值确定第一个实例内容。
[0129] 同单实数据获取一样,配置库依次遍历每一个leaf的值。
[0130] 如果当前实例所有leaf都遍历完成,那么调用get_next()回调来获取下一个key值。然后从第一步开始执行,直到所有实例都处理完成。
[0131] 配置库维护一张表(如表一所示),用于记载回调点名称、Yang模型路径与回调函数组。其中,回调函数组包括但不限于元素获取函数,多实例迭带函数。
[0132] 表1
[0133] 回调点名称 Yang路径 回调函数组
[0134] 采用了该发明中的基于Yang语言模型的状态数据处理方法,用统一的API来获取所有的状态数据,经过对数据抽象,使得数据获取本身不在于任何业务紧耦合,状态数据获
取的开发有了统一的规范;为所有不同的用户(如CLI、NETCONF等)接口提供了统一的数据
获取接口;状态数据获取流程只依赖于Yang模型,可以任意构造查询层次,具有广泛的应用
范围。
[0135] 在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的
而非限制性的。