原型概要设计
    目前根据基本需求文档进行了原型概要设计,只作为需求功能实现的原型参考,后续还会根据补充的需求完成整体概要设计。
一 背景
    此概要设计的的基本需求出自于“日志处理工具.pdf”文档。
    其主要功能是用于解析CSV格式的日志文件,然后进一步汇总并以树形结构输出。
二 总体框架设计
    考虑快捷以及方便迅速迭代,本原型设计采用python语言来实现,后期完善继续用pyhton实现或者采用C++开发实现。
    根据需求描述,将实现功能拆分为三个:解析;汇总;输出
1 解析
    解析模块主要是对日志文件进行解析操作,目前需求要求支持解析csv文件。
可以实现一个解析功能的基类(BaseParse),然后基于基类继承一个专门解析csv格式文件的子类(CsvParse)来处理。
    这样后续如果添加新的解析方式也可以方便进一步扩展子类。
2 汇总
    汇总这部分主要针对两个部分
(1)解析后的单行日志信息的数据拆分整理
解析一行csv文件记录后,可以将这条记录信息进行拆分,并设计一个节点类(BasicNode)用于存储单行拆分后的信息。
这样每行记录都是一个BasicNode类实例化的对象。
(2)对日志文件中各行日志信息的汇总工作
需要根据每条记录的月份和日期进行分类并汇总管理,这里设计了一个管理类(ManageNode)来对各个BasicNode节点进行管理工作。
    此类实现的功能是用于存储汇总各行csv日志信息与其对应的月份以及日期的映射关系,这样在后期输出时,可以根据映射关系方便输出。
3 输出
    此功能可以设计一个Log写日志类来完成汇总后的输出功能。
    这样设计不同的类管理不同的模块,满足单一职责的设计模式。
三 详细设计
    详细设计分别针对为解析、汇总、输出三个部分而设计的类进行深入的描述。
1解析
(1)BaseParse类:实现解析功能的基类
parse_log方法:
功能:用于解析日志文件
输入:日志文件
输出:解析后列表
(2)CsvParse类:实现解析csv文件功能类,继承于BaseParse类
parse_log方法:
功能:用于解析csv日志文件
输入:csv日志文件
输出:解析后列表
2汇总
(1)BasicNode类:用于拆分以及汇总整理单行日志信息
split_line方法:
功能:用于拆分一行日志信息,并将关键信息month、day等存储到BasicNode类变量
输入:一行日志信息
输出:对应日志关键信息,month、day
get_node_month方法:
功能:获取日志信息所在月份
实例化类和实例化对象输入:当前日志信息对应BasicNode类实例化对象
输出:当前日志信息所在月份
get_node_day方法:
功能:获取日志信息所在日期
输入:当前日志信息对应BasicNode类实例化对象
输出:当前日志信息所在日期
get_node_result方法:
功能:获取日志信息原始信息
输入:当前日志信息对应BasicNode类实例化对象
输出:当前日志信息原始信息
(2)ManageNode类:用于处理各行日志信息的汇总工作
成员变量
<1>list_month变量
描述:列表结构,存着所有month的数据,保证了月的顺序性(不会重复)
<2>dic_month变量
描述:字典结构,key值为month,value值为一个存放着day的list,value的list存着一个月的有日志的天,并保证了天的顺序性
<3>dic_day变量:
描述:字典结构,key值为day,value值为一个基础单元class的list,value的list存着同一天的csv行,这个可以保证一天的数据顺序性
注:由于python字典存储时的无顺行性,而重新对字典排序又会影响程序的性能,所以建立多个存储结构。
而且这样设计的另一个好处,可以根据给出的一段时间,查出这段时间的日志信息。
方法:
add_basic_node方法:
功能:添加基础结点,此操作会把解析生成的basic_node结点对象添加完善到管理结构中,填充list_month、dic_month、dic_day
输入:basic_node结点对象
输出:list_month、dic_month、dic_day
get_list_month方法:
功能:获取当前月份列表
输入:当前ManageNode类实例化对象
输出:当前月份列表
get_list_day方法:
功能:根据给出的月份获取当月的日期列表
输入:当前ManageNode类实例化对象,给定月份
输出: 当月的日期列表
get_list_result_per_day方法:
功能:根据给出的日期获取当日的日志信息列表
输入:当前ManageNode类实例化对象,给定日期
输出: 当日的日志信息列表
3输出
(1)Log类:实现对日志信息进行输出打印
print_log方法:
功能:按照基本需求要求输出日志信息到屏幕
输入:ManageNode类实例化对象
输出:输出按照需求要求的日志信息到屏幕中
write_log方法:
功能:按照基本需求要求输出日志信息到文件中
输入:ManageNode类实例化对象
输出:输出按照需求要求的日志信息到文件中
四 设计的缺陷隐患以及待完善的部分
    目前原型设计程序只实现基本需求的功能部分,而且没有增加异常处理机制。
另外该设计的一个缺陷是要求日志必须是按照时间顺序输出的,如果出现了时间乱序,那么输出信息也会随之乱序。
    其他待完善部分请参见“需求确认文档”提出的问题和内容。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。