您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 电信DMS项目数据采集与整合分析设计
电信营运设计后台:数据采集与整合文档编号:Version1.02008年05月达内IT培训集团修改记录摘要日期修改原因版本2008-05-28新建1.0一、数据采集一、UI设计(无)二、数据采集类图设计(一)数据采集客户端1)类结构概要说明-类图2)类功能结构说明-时序图:CollectionLauchor:CollectionThread:DataCollector:LogDealer:LogRecord:MatchedRecord1:start()2:collect()16:deal(Vector)6:new11:new3:getNativeIP()4:initlog()5:mappingLogBuffer(String)8:parseLogBuffer(MappedByteBuffer,Vector,Vector)7:activate(String)10:passivate(Vector,String)9:match(Vector,Vector)12:new13:init()15:14:initSocket()17:send()3)配置文件说明:为了保证系统得灵活性,在该系统中把服务器和本机有关的参数都通过属性文件配置,由程序动态读取。文件名确定为unix_server.properties属性key属性value例子备注说明intervalinterval=60采集的间隔时间,以分钟为单位ipip=192.168.0.20采集点的IP地址。sourcefilesourcefile=f:\\usr\\adm\\wtmpx采集的源的文件名,包含目录destinationpathdestinationpath=f:\\usr\\history\\采集源的备份目录,目录后面必须加\目录分隔符号。commandcommand=cmd/Cmove数据源被采集的时候,先移动到备份目录,这个属性设置数据源文件移动的shell指令或dos指令。historyfilehistoryfile=history.dat由于在采集的时候有的用户正在登录中,还没有登出,所以无法处理这种数据,这就是不能匹配成对的数据。这些数据必须保存起来,在下次采集的时候用来匹配,这个属性就是设置没有匹配成功的数据的保存文件名。该属性只指定文件名,目录采用上面指定的备份目录。serveripserverip=127.0.0.1接收服务器IPserverport接收服务器端口。storefilestorefile=store.dat数据发送失败的临时存储文件。目录采用使用上面的指定的备份目录。4)类详细说明1.类CollectionLaunchor采集主程序类,发动采集线程。a)Main函数函数说明创建CollectionThread线程对象,并调用run函数启动线程。参数args:环境变量参数返回类型void函数流程说明创建线程CollectionThreadth=newCollectionThread启动线程th.start();b)注意:该启动器可以由用户发起为一个后台服务,也可以由Unix的定时服务发起,我们采用使用Unix发起的方式。用户后台服务发起的方式只需要把线程的运行方式改变成循环就是。2.类CollectionThread采集线程,负责启动采集过程。封装一个采集线程。该类主要调用采集器类DataCollector进行数据采集。该类继承JDK的Thread类a)函数run:函数说明就是主要创建DataCollector对象,并调用其collection函数进行数据采集。该函数是Thread的run函数覆盖函数.参数void返回类型void流程说明产生DataCollector对象调用数据采集函数collect释放资源线程关闭returnb)函数start():函数说明负责启动线程,该函数来自Thread线程类,该函数继承自JDK标准类Thread。参数void返回类型void.c)注意:该线程是否循环决定采集器启动的方式是否利用Unix的定时启动功能,如果采用Unix的定时功能,则该线程采集完毕自动关闭清空。3.类DataCollector负责采集环境的处理与数据采集,分析处理。所有的采集任务有该类完成,主要获取本机IP,复制备份并清空日志文件,读取日志文件,解析日志文件,匹配处理日志登录/登出记录获取用户登录时间,在线用户下次匹配。a)函数getNativeIP函数说明读取要采集服务器的IP,该IP用属性文件配置。参数void返回类型String返回属性文件中配置的本机的IP地址数据b)函数initlog()函数说明负责调用Runtime执行mvshell指令进行日志文件的备份并清空原始文件。备份的文件名wtmpx+年(4位)+月(2位)+日(2位)+时(2位),比如wtmpx2008053013.参数void返回类型String返回的是采集数据源的备份文件(包含路径)注意:利用Unix系统的Kenerl函数读取的时候,该文件必须采用x结尾,在这里用java处理就不需要。调用move/var/adm/wtmpx/....指令清空登录历史纪录c)函数mappingLogBuffer函数说明函数原型:publicMappedByteBuffermappingLogBuffer(StringfileName)主要把备份的日志文件映射为本地内存缓冲,便于后面解析。参数Stringfilename备份日志文件名返回类型MappedByteBuffer本地文件映射缓冲MappedByteBuffer创建/var/adm/wtmpx日志文件的FileInputStream流得到FileChannel通过FileChannel得到日志文件的内存映射MappedByteBuffer已知要采集的日志文件名filenamed)函数parseLogBuffer,函数说明函数原型:privatevoidparseLogBuffer(MappedByteBufferlogbuffer,VectorLogRecordlogins,VectorLogRecordlogouts)负责解析缓冲的内存结构,利用参数返回两个Vector结构对象,一个存放登录数据,一个存放登出数据。参数MappedByteBufferlogbuffer要解析的本地内存缓冲。VectorLogRecordlogins返回解析后的登录数据。VectorLogRecordlogouts返回解析后的登出数据返回类型void已知日志数据内存映射MappedByteBuffer对象logbuffer,login与logout两个Vector存放解析结构的结构按照wtmpx文件的二进制格式解析日志数据把解析好的数据形成LogRecord对象把登录数据放入Vector类型的login结构,把登出数据放入Vector类型的logout结构判定日志数据结束返回logout,login两个Vector类型的结构文件没有结束文件结束【参考】数据登录登出的判别标准。#defineEMPTY0#defineRUN_LVL1#defineBOOT_TIME2#defineOLD_TIME3#defineNEW_TIME4#defineINIT_PROCESS5#defineLOGIN_PROCESS6--登录进程#defineUSER_PROCESS7--用户进程#defineDEAD_PROCESS8--终止进程【参考】WTMPX文件的结构。位置范围字节长度含义000-03132/*userloginname*/032-0354/*inittabid*/036-06732/*devicename(console,lnxx)*/068-0714/*processid*/072-0732/*typeofentry*/074-0752/*processtermination*/076-0772/*exitstatus*/2/*这是C数据类型补齐产生的空位*/080-0834/*timeentrywasmade*//*seconds*/084-0874/*andmicroseconds*/088-0914/*sessionID,usedforwindowing*/092-11120/*reservedforfutureuse*/112-1132/*significantlengthofut_host*/114-371257/*remotehostname*/e)函数activate函数说明函数原型:privateVectorLogRecordactivate(StringloginFilename)throwsInitException负责把上次未匹配的数据读取为Vector结构。便于后面匹配。参数是存放上次未匹配的登录日志记录,返回Vector结构,其中元素类型LogRecord。参数StringloginFilename:保存上次未匹配的数据的文件名。该文件在属性配置文件中设置。返回类型VectorLogRecord上次未匹配的所有登录数据。流程图:已知要读取的数据文件名filename读取数据到Vector结构文件存在判定存在不存在f)函数match,函数说明函数原型:privateVectorMatchedRecordmatch(VectorLogRecordlogins,VectorLogRecordlogouts)throwsMatchedException负责匹配登录/登出数据,并返回用户登录时间数据。参数是两个Vector类型的登录/登出数据结构,元素类型是LogRecord,返回的是匹配好的用户登录时长记录,数据类型是Vector,其中元素类型是MatchedRecord,详细说明请参考MatchedRecord类的说明。参数VectorLogRecordlogins登录数据VectorLogRecordlogouts登出数据返回类型VectorMatchedRecord匹配生成的用户登录时长数据流程已知login,logout两个Vector类型的数据结构循环logout结构按顺序得到logout中LogRecord类型的登出对象在login中查找最近的匹配用户与IP计算登录时间产生MatchedRecord对象,并放入Vector类型的结构g)函数passivate,函数说明函数原型:privatevoidpassivate(VectorLogRecordlogins,StringloginFilename)throwsInitException负责把这次没有匹配好的登录记录保存成文件,以便下次采集的时候匹配。参数是没有匹配好的登录记录,类型是Vector,其中元素类型是LogRecord.参数VectorLogRecordlogins没有匹配成功的登录数据StringloginFilename保存没有成功的登录数据的文件名,在属性配置文件中设置。返回类型void流程图:已知需要保存的Vector类型login结构和文件名filename打开文件保存结构,并关闭文件h)函数collect,函数说明函数原型:publicvoidcollect()throwsCollectionException负责整个采集过程。这是该类中的唯一的一个public函数,主要供采集线程调用。参数void。返回类型void获取本地IPgetNativeIP初始化日志文件initlog日志文件内存映射mappingLogBuffer登出数据匹配match读取上次未匹配的数据activate注入LogDealer类型的logdealer对象调用logdealer的deal函数进行数据处理保存未匹配数据passivate解析日志parseLogBuffer4.LogRecord类,负责登录/登出数据封装。成员属性名成员属性说明user用户登录名visittime用户登录/登出时
本文标题:电信DMS项目数据采集与整合分析设计
链接地址:https://www.777doc.com/doc-4253355 .html