已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电信营运设计后台:数据采集与整合文档编号:Version 1.02008年05月达内IT培训集团修改记录摘要日期修改原因版本2008-05-28新建10一、 数据采集一、 UI设计(无)二、 数据采集类图设计(一) 数据采集客户端1) 类结构概要说明-类图2) 类功能结构说明-时序图3) 配置文件说明:为了保证系统得灵活性,在该系统中把服务器和本机有关的参数都通过属性文件配置,由程序动态读取。文件名确定为unix_perties属性key属性value例子备注说明intervalinterval = 60采集的间隔时间,以分钟为单位ipip = 0采集点的IP地址。sourcefilesourcefile= f:usradmwtmpx采集的源的文件名,包含目录destinationpathdestinationpath= f:usrhistory采集源的备份目录,目录后面必须加目录分隔符号。commandcommand=cmd /C move数据源被采集的时候,先移动到备份目录,这个属性设置数据源文件移动的shell指令或dos指令。historyfilehistoryfile = history.dat由于在采集的时候有的用户正在登录中,还没有登出,所以无法处理这种数据,这就是不能匹配成对的数据。这些数据必须保存起来,在下次采集的时候用来匹配,这个属性就是设置没有匹配成功的数据的保存文件名。该属性只指定文件名,目录采用上面指定的备份目录。serveripserverip = 接收服务器IPserverport接收服务器端口。storefilestorefile= store.dat数据发送失败的临时存储文件。目录采用使用上面的指定的备份目录。4) 类详细说明1. 类CollectionLaunchor 采集主程序类,发动采集线程。a) Main函数函数说明创建CollectionThread线程对象,并调用run函数启动线程。参数args:环境变量参数返回类型void函数流程说明b) 注意:该启动器可以由用户发起为一个后台服务,也可以由Unix的定时服务发起,我们采用使用Unix发起的方式。 用户后台服务发起的方式只需要把线程的运行方式改变成循环就是。2. 类CollectionThread 采集线程,负责启动采集过程。封装一个采集线程。该类主要调用采集器类DataCollector进行数据采集。该类继承JDK的Thread类a) 函数run:函数说明就是主要创建DataCollector对象,并调用其collection函数进行数据采集。该函数是Thread的run函数覆盖函数.参数void返回类型void流程说明b) 函数start():函数说明负责启动线程,该函数来自Thread线程类,该函数继承自JDK标准类Thread。参数void返回类型void.c) 注意:该线程是否循环决定采集器启动的方式是否利用Unix的定时启动功能,如果采用Unix的定时功能,则该线程采集完毕自动关闭清空。3. 类DataCollector 负责采集环境的处理与数据采集,分析处理。所有的采集任务有该类完成,主要获取本机IP,复制备份并清空日志文件,读取日志文件,解析日志文件,匹配处理日志登录/登出记录获取用户登录时间,在线用户下次匹配。a) 函数getNativeIP 函数说明读取要采集服务器的IP,该IP用属性文件配置。参数void返回类型String 返回属性文件中配置的本机的IP地址数据b) 函数 initlog()函数说明负责调用Runtime执行mv shell指令进行日志文件的备份并清空原始文件。备份的文件名wtmpx+年(4位)+月(2位)+日(2位)+时(2位),比如wtmpx2008053013.参数void返回类型String 返回的是采集数据源的备份文件(包含路径)注意:利用Unix系统的Kenerl函数读取的时候,该文件必须采用x结尾,在这里用java处理就不需要。c) 函数mappingLogBuffer 函数说明函数原型:public MappedByteBuffer mappingLogBuffer(String fileName)主要把备份的日志文件映射为本地内存缓冲,便于后面解析。参数String filename 备份日志文件名返回类型MappedByteBuffer本地文件映射缓冲MappedByteBufferd) 函数parseLogBuffer,函数说明函数原型:private void parseLogBuffer(MappedByteBuffer logbuffer, Vector logins, Vector logouts)负责解析缓冲的内存结构,利用参数返回两个Vector结构对象,一个存放登录数据,一个存放登出数据。参数MappedByteBuffer logbuffer 要解析的本地内存缓冲。Vector logins返回解析后的登录数据。Vector logouts 返回解析后的登出数据返回类型void【参考】数据登录登出的判别标准。#define EMPTY0#define RUN_LVL1#define BOOT_TIME2#define OLD_TIME3#define NEW_TIME4#define INIT_PROCESS5#define LOGIN_PROCESS6 -登录进程#define USER_PROCESS7-用户进程#define DEAD_PROCESS8-终止进程【参考】WTMPX文件的结构。位置范围字节长度含义000-03132/* user login name */032-0354/* inittab id */036-06732/* device name (console, lnxx) */068-0714/* process id */072-0732/* type of entry */074-0752/* process termination*/076-0772/* exit status*/2/* 这是C数据类型补齐产生的空位*/080-0834/* time entry was made */* seconds */084-0874/* and microseconds */088-0914/* session ID, used for windowing */092-11120/* reserved for future use */112-1132/* significant length of ut_host */114-371257/* remote host name */e) 函数activate 函数说明函数原型:private Vector activate (String loginFilename) throws InitException负责把上次未匹配的数据读取为Vector结构。便于后面匹配。参数是存放上次未匹配的登录日志记录,返回Vector结构,其中元素类型LogRecord。参数String loginFilename:保存上次未匹配的数据的文件名。该文件在属性配置文件中设置。返回类型Vector 上次未匹配的所有登录数据。流程图:f) 函数match,函数说明函数原型:private Vector match(Vector logins, Vector logouts) throws MatchedException负责匹配登录/登出数据,并返回用户登录时间数据。参数是两个Vector类型的登录/登出数据结构,元素类型是LogRecord,返回的是匹配好的用户登录时长记录,数据类型是Vector,其中元素类型是MatchedRecord,详细说明请 参考MatchedRecord类的说明。参数Vector logins 登录数据Vector logouts 登出数据返回类型Vector 匹配生成的用户登录时长数据流程g) 函数passivate,函数说明函数原型:private void passivate(Vector logins, String loginFilename) throws InitException负责把这次没有匹配好的登录记录保存成文件,以便下次采集的时候匹配。参数是没有匹配好的登录记录,类型是Vector,其中元素类型是LogRecord.参数Vector logins 没有匹配成功的登录数据String loginFilename 保存没有成功的登录数据的文件名,在属性配置文件中设置。返回类型void流程图:h) 函数collect,函数说明函数原型:public void collect() throws CollectionException负责整个采集过程。这是该类中的唯一的一个public函数,主要供采集线程调用。参数void。返回类型void4. LogRecord类,负责登录/登出数据封装。成员属性名成员属性说明user用户登录名visittime用户登录/登出时间userip用户IPlabip实验室服务器IP5. MatchedRecord类,负责匹配好的数据的封装。成员属性名成员属性说明user用户登录名logintime用户登录时间logouttime用户登出时间labip实验室服务器IPuserip用户的IPduration用户登录的时长数据6. CollectionListener接口,规范采集好的数据的处理方式。a) 抽象函数deal,函数说明函数原型:void deal(Vector matches);负责匹配好数据的处理,返回void,参数是Vector类型,元素类型是MatchedRecord,是匹配好的所有登录时长数据。参数Vector matches 已经匹配好的生成用户登录时长数据。返回类型void7. LogDealer类,负责匹配好数据的发送处理,如果发送失败,则数据被保存。该类主要实现CollectionListener接口。a) 函数init函数说明函数原型:private void init()throws InitException主要初始化服务器参数,服务器参数使用属性文件配置,主要包含。IP,port,destinationpath,storefile。参数void返回类型void流程图:b) 函数initSocket函数说明函数原型:public void initSocket()throws LinkException主要初始化网络连接。如果初始化失败,则产生异常。参数void返回类型voidc) 函数send函数说明函数原型:public void send(ObjectOutputStream oos,MatchedRecord data) throws SendException主要负责数据发送。该函数调用前先读取历史发送失败数据合并。参数ObjectOutputStream oos:发送数据的网络流。MatchedRecord data:要发送的数据。包含上次发射失败未发射的数据。 返回类型voidd) 函数receive。函数说明函数原型:public int recieve(DataInputStream dis) throws RecieveException接受服务器发送过来的标记。为避免数据发送失败产生数据丢失,服务器接受数据保存成功后发送一个成功标记,给客户采集点。该函数负责接受该标记。参数DataInputStream dis:网络接受流。返回类型int 服务器是否处理成功的标记,0:表示处理成功,否则是失败。e) 函数store。函数说明函数原型:public void store(String path,String file,Vector matches)throws IOException当数据发送若干次失败后,客户采集点就会把数据存储到临时文件中,在下次采集的时候在读取出来合并发送,该函数就是把发送失败的数据保存到临时文件。参数String path,临时保存文件的路径。String file,临时保存文件名。Vector matches,发送失败后剩余的要保存的数据。返回类型voidf) 函数load。函数说明函数原型:public Vector load(String path,String file)throws IOException发送失败的数据被临时保存起来,便于下次发送。该函数就是加载上次未发送成功的数据。参数String path:临时保存文件的路径。String file:临时保存文件名。返回类型Vector:读取的上次未保存成功的数据。g) 函数deal函数说明函数原型:public void deal(Vector matches)该函数是公有的函数。封装整个发送过程。参数Vector matches 采集匹配成功的用户登录时长数据。返回类型void流程图:(二) 数据采集服务器端1) 数据库等环境参数设计属性key属性value例子备注说明portport = 9999采集的服务器端口driverdriver = com.mysql.jdbc.Driver数据库驱动程序类名urlurl = jdbc:mysql:/:3306/netctoss?characterEncoding=gb2312数据库连接URL。useruser = root数据库连接用户名passwordpassword = louisyyy数据库连接口令2) 数据实体类(原则上对应数据结构的实体表)1. 类Detail,该类的设计在后面还要使用。但在本模块中使用的字段如下:成员属性名成员属性说明user用户登录名logintime用户登录时间logouttime用户登出时间labip实验室服务器IPuserip用户的IPduration用户登录的时长数据Detail类对应数据库中对应的t_detail_x31张表。3) 类结构概要说明-类图4) 类功能结构说明-时序图5) 详细说明1. ServerLauncher类:服务器数据接受器启动器, 主要负责启动服务器接受线程。a) 函数main函数说明主要创建DataRecieverTh对象, 并调用起其start函数启动线程。参数args:环境变量参数返回类型void2. DataRecieverTh类,服务器接受主线程。是一个线程类,继承JDK的标准线程类Thread。主要负责接受客户连接,并为每个客户启动一个数据接收线程来进行客户数据接收。a) 成员说明:成员属性名成员属性说明collectionth定义的一个Vector的数据结构,便于管理每个客户采集点。serversocket服务器Socket对象。b) 函数initSocket, 函数说明函数原型:private void initSocket()负责网络服务器的初始化。参数void返回类型voidc) 函数run:函数说明函数原型:public void run()覆盖Thread中的函数,负责接收客户连接,并建立客户处理线程并启动线程,并在collectionth中记录该客户线程处理对象。参数void返回类型void3. CollectionTh类,每个客户数据接收处理类。该类主要接收采集器发送过来的数据,接收成功后发送一个成功标志,然后保存接收的数据。该类继承Thread。a) 成员属性说明成员属性名成员属性说明socket每个客户Socket的代理socket。inputstream客户socket输入网络流。outputstream客户socket输出网络流。dao专门负责把接受的数据写入到数据库。b) 函数run:接收线程过程,主要调用receive私有函数。c) 函数receive:函数说明函数原型:public Detail recieve()throws RecieveException通过inputstream读取数据,并发送成功标记,然后调用全局的dao保存数据。参数void返回类型Detail接受到的客户采集的一个数据。为保证数据的稳定性,没有采用一次发送所有的数据的相当龊的发送方式。d) sendFlag函数:函数说明函数原型:public void sendFlag(int flag) throws IOException向客户端发送一个整数类型的标记。参数int 表示数据是否接受并成功处理的标记。0表示成功。-1表示失败。返回类型void4. DBEnvInit类,数据库环境初始化类, 该类封装了两个函数工具,完成对数据库的连接。a) 函数getDBParamter, 函数说明函数原型:public static Properties getDBParamter()负责从属性文件读取数据库连接参数。参数void返回类型Properties:用字符串Hash表的方式返回数据连接参数,包含:驱动类,连接URL,连接帐号,连接口令。b) 函数getConnection。函数说明函数原型:public static Connection getConnection(Properties prop)负责根据连接属性打开与数据库的连接参数Properties prop;数据库连接参数返回类型Connection:返回一个对数据库的连接。注意:该工具可以提供对数据源的支持,在后继版本中提供数据源与Hibernate的支持描述。5. DetailDAO类, 提供对Detail数据库的插入等操作访问。a) 函数insert负责把接收到的数据插入到数据库。函数说明函数原型:public void insert(Detail detail)负责把一个用户登录数据写入到数据库。参数Detail detail:一条用户登录数据。返回类型void函数说明函数原型:public void insert(List list)负责把多个用户登录数据写入到数据库。参数List list:多个用户登录数据。返回类型void6. BasicDAO泛型类a) 封装对数据库访问最常用的规范。在后面的DAO类,缺省必须实现该接口。注意:该设计中缺少一个日志类,请自行设计,或采用apache中log4j.jar三、 数据表结构设计(一) 原始采集用户登录时长明细表 (details_x) 其中x 是1-31字段英文名字段汉字名类型约束条件说明loginname登录名Varchar(20)loginip登录IPVarchar(24)logintime登录时间Timestamplogouttime登出时间Timestamplabip实验室IPVarchar(24)duration登录时长long二、 数据整合一、 UI设计二、 数据采集类图设计1. 类结构概要说明1) 数据配置环境参数设计属性key属性value例子备注说明driverdriver = com.mysql.jdbc.Driver数据库驱动程序类名urlurl = jdbc:mysql:/:3306/netctoss?characterEncoding=gb2312数据库连接URL。useruser = root数据库连接用户名passwordpassword = louisyyy数据库连接口令dayruledayrule= 4每日整合时间规则。monthrule_daymonthrule_day= 16每月整合时间规则-天monthrule_hourmonthrule_hour= 4每月整合时间规则-时intervalinterval=1时整合规则-整合的单位间隔时间2) 数据实体类结构(原则上对应数据库表)3) 数据整合类2. 类功能结构说明3. 类详细说明1) ServerLauncher类:整合启动程序类。1. 函数main函数说明创建DataIntegratorTh线程对象,并调用run函数启动线程。参数args:环境变量参数返回类型void2) DataIntegratorTh类:整合线程,主要完成整合的调用。1. 函数run函数说明函数原型:public void run()负责根据整合规则,并调用相应的整合函数对数据进行整合。参数void返回类型void3) Integration接口:整合接口规范1. 函数init函数说明函数原型:public void init() throws IntegrateInitException ;对整合的规则配置参数进行初始化参数void返回类型void2. 函数integrate函数说明函数原型:public void integrate(int type)throws IntegrationException;负责根据整合规则,并调用相应的整合函数对数据进行整合。参数int type指按时,天,月三种类型整合。返回类型void3. 函数release函数说明函数原型:public void release();负责释放整合过程中产生的临时数据。参数void返回类型void4) IntegrationByCall类:整合的存储过程调用实现,实现Integration接口。目前版本中没有实现。5) IntegrationByClient:整合的Java调用实现。是目前版本的实现手段。6) IntegrationFactory类:利用工厂模式产生的一个类,负责产生整合对象。1. 函数getIntegrationCallDAO该函数目前不实现。2. 函数getIntegrationClientDAO:函数说明函数原型:public static Integration getIntegrationClientDAO()读取配置参数,产生IntegrationByClient对象,并初始化,并返回给该函数的调用者。该函数的设计请参考Java模式设计中构建模式之工厂模式。该模式的好处可以屏蔽具体实现类。参数void返回类型Integration,就是整合对象。与具体的实现类无关。7) DBEnvInit类:见数据采集存储中的说明。8) ConnectionPool类:该类的设计是故意设计的,主要想认识一下连接池的设计原理,与实现方法。1. 函数getConnection函数说明函数原型:public Connection getConnection() throws DBException从连接池中获取一个连接,在目前版本中,池的大小固定为1。在实际实现过程中采用1的池。参数void返回类型Connection,就是连接对象。2. 函数open函数说明函数原型:private void open()throws DBException负责调用DBEnvInit中的函数来打开连接,并形成池。参数void返回类型void3. 函数close函数说明函数原型:public void close()负责关闭池中的某个连接,由于目前版本设计一个连接,关闭就直接关闭所有连接,没有设计参数。参数void返回类型void9) BasicIntegrateDAO负责所有整合的实现,该类中应该实现一个数据库连接注入:1. 函数:integratByHour函数说明函数原型:void integratByHour(int year,int month,int day,int hour)throws IntegrationException; 负责按用户进行时整合。参数int year,数据整合的年int month, 数据整合的月int day, 数据整合的天int hour,数据整合的时返回类型void2. 函数:integratByDay函数说明函数原型:void integratByDay(int year,int month,int day)throws IntegrationException;负责按用户进行天整合。参数int year,数据整合的年int month, 数据整合的月int day, 数据整合的天返回类型void3. 函数:integratByMonth函数说明函数原型:void integratByMonth(int year,int month)throws IntegrationException;负责按用户进行月整合。参数int year,数据整合的年int month, 数据整合的月返回类型void4. 函数:integratByHourIP函数说明函数原型:void integratByHourIP(int year,int month,int day,int hour)throws IntegrationException;负责按实验室服务器进行时整合。参数int year,数据整合的年int month, 数据整合的月int day, 数据整合的天int hour,数据整合的时返回类型void5. 函数:integratByDayIP函数说明函数原型:void integr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025全国水利安全生产知识竞赛试题及答案
- 2026-2031中国女装市场深度分析及十五五前景预测报告
- 智慧城市物联中台合同
- 民间借贷担保人连带责任
- 2025年工会协理员考试题及答案
- 客户问题处理管理制度及相应的应急预案
- 2025年全民反诈知识竞赛题库及答案
- 2025年反假货币与知识竞赛题库及答案
- 2025《网络安全建设与网络社会治理》考试题库(含参考答案)
- 2025年非免疫规划疫苗考试题库及答案
- 2025全国交管12123学法减分考试题库带参考答案
- 2025年四川省拟任县处级领导干部任职资格试题及参考答案
- 二元一次方程组的应用(1)课件北师大版八年级数学上册
- DR成像技术操作规范与管理
- 第一讲 决胜“十四五”奋发向前行
- 中国石化2026年度毕业生招聘备考考试题库附答案解析
- 神奇的圆周率课件
- 2025年版民间借款合同范本全文
- 加油站油料安全培训内容课件
- 有机化学教改课题申报书
- 初中英语语法思维导图全册
评论
0/150
提交评论