国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

監(jiān)控日志數(shù)據(jù)庫系統(tǒng)的開發(fā)研究及業(yè)務(wù)應(yīng)用

2014-11-04 02:24王文岳
電腦知識與技術(shù) 2014年28期

王文岳

摘要:為解決傳統(tǒng)監(jiān)控日志錄入不規(guī)范及數(shù)據(jù)管理差的弊端,提出了一種基于mfc定制前端,和嵌入式數(shù)據(jù)庫SQLite作為后臺調(diào)度的解決方案,并且已在天津網(wǎng)絡(luò)廣播電視臺運(yùn)維部的工作中得到了有效的應(yīng)用。介紹了此系統(tǒng)的開發(fā)設(shè)想、開發(fā)技術(shù)、功能應(yīng)用等。實(shí)踐表明,該系統(tǒng)的引入對運(yùn)維部門信息管理、數(shù)據(jù)分析能充分發(fā)揮其高效、精確的優(yōu)勢。

關(guān)鍵詞: SQLite數(shù)據(jù)庫; MFC; 嵌入式開發(fā); 監(jiān)控日志管理

中圖分類號:TP392 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)28-6598-05

先前天津IPTV監(jiān)控日志均為手寫和word文檔記錄,通過日積月累的記錄數(shù)據(jù),為研究解決故障提供了依據(jù),對于新設(shè)備、新配置也是起到觀察反饋的作用。但是隨著IPTV平臺的業(yè)務(wù)發(fā)展擴(kuò)大,日常監(jiān)控任務(wù)更加繁重,數(shù)據(jù)量急劇增,傳統(tǒng)形式的日志記錄在規(guī)范錄入、使用、統(tǒng)計(jì)查詢等方面效率低下,無法真實(shí)有效利用起龐大的數(shù)據(jù)做大數(shù)據(jù)挖掘,也不能滿足日益提高的維護(hù)標(biāo)準(zhǔn)。在此背景下,本人研發(fā)基于MFC (Microsoft Foundation Classes)界面,使用VC++編程完成模擬監(jiān)控日志記錄流程系統(tǒng)前端并嵌入SQLite數(shù)據(jù)庫作為底層管理調(diào)用的一套完整解決方案來替代原有形式。希望通過本文的解決方案能為廣電系統(tǒng)乃至其他注重記錄日志信息的單位在實(shí)現(xiàn)現(xiàn)代化信息管理采集上提供一些參考。

1 開發(fā)流程

1.1 開發(fā)設(shè)想

主要替代每天的監(jiān)控日志,由目前的word文檔記錄形式轉(zhuǎn)變?yōu)橥ㄟ^自制MFC前端錄入進(jìn)嵌入式SQLite數(shù)據(jù)庫的形式。其優(yōu)勢在于一方面可以規(guī)范數(shù)據(jù)采集形式,避免人為錯(cuò)誤和不規(guī)范行為,為每個(gè)錄入點(diǎn)建立一套獨(dú)立的記錄檔案;更重要的是另一方面可以方便查詢,精確到任何一種類型、一臺設(shè)備、一個(gè)頻道、一類故障都可以根據(jù)條件迅速定位,減輕人員的工作負(fù)擔(dān),高效管理大量的趨于碎片化的數(shù)據(jù),評估運(yùn)行情況,預(yù)警和規(guī)避問題發(fā)生,從而大幅提升部門工作效率。同時(shí),對于監(jiān)控員在錄入故障信息時(shí)由被動(dòng)的根據(jù)報(bào)警信息記錄轉(zhuǎn)型為主觀判斷故障點(diǎn)來記錄,熟悉設(shè)備鏈路,提高排障精準(zhǔn)度和技能熟練度。

設(shè)計(jì)的思路和基本模型如圖1所示,主要分為數(shù)據(jù)庫層面以及MFC為基礎(chǔ)的前端軟件層面。記錄的信息通過 SQLite 數(shù)據(jù)庫函數(shù)接口存儲到本地?cái)?shù)據(jù)庫中,通過 MFC 函數(shù)庫實(shí)現(xiàn)前端的操作。數(shù)據(jù)庫文件與前端軟件分離,方便軟件更新功能擴(kuò)展以及本地?cái)?shù)據(jù)庫備份。

1.2 數(shù)據(jù)庫設(shè)計(jì)

對于數(shù)據(jù)庫的選擇,經(jīng)過與Mysql、PostgreSQL、Access等對比與試驗(yàn),最終選擇的是SQLite 開源嵌入式數(shù)據(jù)庫。其優(yōu)勢在于以下幾點(diǎn):

1) SQLite 屬于一款開源的、遵守ACID、可嵌入的輕量關(guān)系數(shù)據(jù)庫。它提供了對ANSI SQL92 的大多數(shù)支持。如Access數(shù)據(jù)庫不支持事務(wù)操作,無法定制最合適的前端。

2) 適應(yīng)多種操作系統(tǒng)如:Windows/Linux/Unix以及多種程序語言如:C/C++、PHP、Java等。這也是最終能完成軟件系統(tǒng)的支撐點(diǎn)。

3) SQLite對比Mysql、PostgreSQL這兩款開源數(shù)據(jù)庫,無需任何配置部署或安裝任何其他的框架,速度更快,體積最小。

4) SQLite引擎占用資源低,和C/S構(gòu)架不同,無中間服務(wù)進(jìn)程,其作為連接到程序的主要組成部分,直接讀寫磁盤上的數(shù)據(jù)庫文件,減少內(nèi)存消耗和時(shí)間延遲。

5) SQLite歷經(jīng)近14個(gè)年頭的開發(fā)完善,可以支持2TB大小的數(shù)據(jù)庫文件,支持完整的Unicode 編碼,中文環(huán)境適應(yīng)性很好,可以保存任意類型的數(shù)據(jù)。SQLite的穩(wěn)定兼容性,對于日志錄入這種輕量級應(yīng)用,毋庸置疑。

SQLite 數(shù)據(jù)庫是以表的形式存儲數(shù)據(jù),本系統(tǒng)的數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)如下表1所示,包含10項(xiàng)條目。

表1 設(shè)計(jì)的數(shù)據(jù)表結(jié)構(gòu)

[序號\&fault_id\&整型\&主鍵 自動(dòng)錄入\&登錄人\&user\&字符型\&手動(dòng)輸入(可查項(xiàng))\&日期\&date\&日期型\&手動(dòng)輸入(可查項(xiàng))\&時(shí)間\&time\&字符型\&手動(dòng)輸入\&平臺\&path\&字符型\&下拉菜單選擇(可查項(xiàng))\&信源類型\&source\&字符型\&下拉菜單選擇(可查項(xiàng))\&故障節(jié)點(diǎn)\&node\&字符型\&下拉菜單選擇(可查項(xiàng))\&故障頻道\&program\&字符型\&下拉菜單選擇(可查項(xiàng))\&故障原因\&description\&字符型\&下拉菜單選擇(可查項(xiàng))\&備注\&remark\&字符型\&手動(dòng)輸入\&]

1.3 軟件設(shè)計(jì)

基于MFC的非模態(tài)對話框設(shè)計(jì),以模塊化逐層對話框展開呈現(xiàn),支持后續(xù)的功能擴(kuò)展,目前除包含錄入與查詢的基礎(chǔ)功能之外,還附加通知和通訊錄功能。具體的界面安排及實(shí)現(xiàn)全部本著貼近實(shí)際使用流程而布置,也保障了從思維模式到使用習(xí)慣的平穩(wěn)過渡,另外查詢結(jié)果可以完整導(dǎo)出到Excel文檔中,方便轉(zhuǎn)發(fā)以及更高自由度的靈活編輯,彌補(bǔ)了數(shù)據(jù)庫格式化以及本地化存儲的局限性。

1.3.1 開始界面

開始界面(圖2) 分為錄入、查詢、通知、通訊錄四個(gè)子模塊,每個(gè)子模塊對話框都以非模態(tài)為基礎(chǔ)支持并發(fā)打開操作、拖動(dòng)等,互不影響限制。開始界面在最小化時(shí)做了托盤處理,減少任務(wù)欄的占用,也防止誤關(guān)閉。另外,通過增加布爾型變量InitDabase() 判斷數(shù)據(jù)庫初始化是否成功。如果判斷條件失敗,會(huì)通過函數(shù)AfxMessageBox彈出消息框“打開數(shù)據(jù)庫失敗”,同時(shí)EnableWindow函數(shù)將錄入和查詢模塊鎖定為禁止?fàn)顟B(tài),避免使用人員在做無用功。

1.3.2 錄入模塊

錄入界面(圖3) 分為登錄人、日期、時(shí)間、平臺、信源類型、故障節(jié)點(diǎn)、故障頻道、故障現(xiàn)象、備注9個(gè)可錄入點(diǎn)來完成一張表的日志信息錄入工作。其中平臺、信源類型、故障節(jié)點(diǎn)、故障頻道、故障現(xiàn)象項(xiàng)都可以通過下拉菜單的形式直接選擇所,備注部分用來完善輔助補(bǔ)充說明現(xiàn)象、處理情況等,可以在此靈活描述。

主要用到的MFC控件有Edit Control和Combo-box Control兩項(xiàng)。通過GetWindowText函數(shù)將每個(gè)控件內(nèi)的具體數(shù)據(jù)寫入字符數(shù)組,調(diào)用已定義的Faults類下的成員函數(shù)SetXX和GetXX進(jìn)行賦值與傳參,使用sql語句執(zhí)行insert插入語句并調(diào)用api ExecSQL(sql) 執(zhí)行底層操作(圖4) 。

期間又增加了兩項(xiàng)安全提示:一、用邏輯或的關(guān)系將“登錄人”、“日期”、“時(shí)間”三項(xiàng)需操作人手動(dòng)填入的進(jìn)行判斷,任意一欄沒填則彈出Message提示,防止漏填。其二,在點(diǎn)擊“錄入”按鈕時(shí)添加MessageBox提示“是否確定錄入”,給操作人一個(gè)修改檢查的機(jī)會(huì)。最后根據(jù)錄入返回值提示錄入成功或失敗。

1.3.3 查詢模塊

查詢界面(圖5) 分為登錄人、日期、平臺、信源類型、故障節(jié)點(diǎn)、故障頻道、故障現(xiàn)象 7個(gè)可復(fù)選選項(xiàng),通過任意條件組合可以迅速精確定位到查詢結(jié)果,所得結(jié)果以建立窗體列表形式呈現(xiàn)。查詢結(jié)果有數(shù)據(jù)統(tǒng)計(jì)、刪除以及保存功能并支持完整導(dǎo)入到Excel文檔。

主要用到的MFC控件有List Control、Check-box Control、Combo-box Control和Edit Control。對于復(fù)選組合這部分的實(shí)現(xiàn),分控件勾選和邏輯實(shí)現(xiàn)兩部分。使用GetCheck()函數(shù)去判斷選項(xiàng)是否勾選,定義變量 ifFirstChoice作為邏輯判斷,并賦予初始值為true,將其放在條件語句中作為判斷sql查詢語句后是否加“and”的依據(jù)(圖6) 。根據(jù)選擇的條件將查詢結(jié)果返回到vector數(shù)組中,最后插入到CListCtrl控件中顯示。

在查詢的同時(shí),使用GetItemCount()函數(shù)得到查詢結(jié)果數(shù)量,并通過靜態(tài)文本顯示統(tǒng)計(jì)結(jié)果。刪除部分的功能,由于兩條記錄總會(huì)有可能完全一樣,所以選取唯一每條信息的ID值作為sql刪除語句的條件。使用OnNMClick事件處理配合GetFirstSelectedItemPosition函數(shù)通過點(diǎn)擊某一行得到當(dāng)前行數(shù)以及第0列中存儲的這條記錄fault_id號。根據(jù)行號從CListCtrl列表中刪除所顯示內(nèi)容,根據(jù)記錄的fault_id號刪除在數(shù)據(jù)庫中對應(yīng)記錄內(nèi)容。刪除前依舊使用MessageBox做刪除提示,防止誤刪。

保存功能,使用api SHGetSpecialFolderPath獲取當(dāng)前用戶的桌面路徑,通過文件流格式化輸出(圖8) ,將存儲在數(shù)組里的數(shù)據(jù)以txt形式保存到桌面,并以tab鍵作為分隔符以支持完整格式導(dǎo)入到Excel文件中。

1.3.4 通知模塊

在Edit Control控件內(nèi)寫入需要轉(zhuǎn)達(dá)的通知,和其他模塊窗口不同,并不使用DestroyWindow()在關(guān)閉窗口時(shí)進(jìn)行銷毀,所以可以在內(nèi)存中保留數(shù)據(jù)。用MFC封裝的CStdioFile類進(jìn)行文件流操作,完成文本形式的本地讀取與存儲功能。運(yùn)用setlocale()函數(shù)進(jìn)行環(huán)境設(shè)置以便解決讀取文本時(shí)Unicode和ANSI編碼之間不兼容的轉(zhuǎn)換問題。同時(shí)在讀取時(shí)利用LineScroll使垂直滾動(dòng)條自動(dòng)滾動(dòng)到底端,方便操作者看到最新的通知。

另外有提醒功能,點(diǎn)擊“提醒”按鈕出現(xiàn)“有一條新通知,請查看??!”的醒目水印,通過設(shè)置全局變量將此靜態(tài)文本傳遞到通知、查詢、錄入三個(gè)界面中。使用者在看到提醒并閱讀通知后,可以點(diǎn)擊已閱來取消水?。▓D7) 。

1.3.5 通訊錄模塊

使用CListCtrl控件,將公司各部、集團(tuán)相關(guān)重要部門、合作方以及各系統(tǒng)第三方技術(shù)支持等重要人員信息以及聯(lián)系方式都一一匯總,方便應(yīng)急聯(lián)系??赏ㄟ^查找關(guān)鍵詞迅速定位。

其原理是通過每行和每列的遍歷將關(guān)鍵詞變量myFindStr與列表內(nèi)榮進(jìn)行核實(shí)匹配,先將所有匹配項(xiàng)保存坐標(biāo)到二維數(shù)組resultVector里。點(diǎn)擊查找時(shí),垂直滾動(dòng)條滾動(dòng)到二維數(shù)字里第一條保存結(jié)果所在的行數(shù)并且高亮。通過條件語句判斷,如果此時(shí)再點(diǎn)擊查找且所搜索的關(guān)鍵詞與第一次相同即lastSearchStr = myFindStr,則指針累加移動(dòng)一位,起到“查找下一個(gè)”的作用。反之,則二維數(shù)組清零重新遍歷(圖8) 。

2 應(yīng)用情況

天津IPTV監(jiān)控日志數(shù)據(jù)庫系統(tǒng)自上線運(yùn)行以來近半年多的時(shí)間,累積了六千多條日志記錄,運(yùn)行情況平穩(wěn)良好,也以系統(tǒng)為依據(jù)為運(yùn)維部提供大數(shù)據(jù)挖掘分析:回顧過往,通過環(huán)比同比總結(jié)的故障事件頻率,吸取經(jīng)驗(yàn),摸索規(guī)律,優(yōu)化方案配置;展望未來,通過趨勢走向,為設(shè)備性能擴(kuò)容提升,設(shè)備老化維護(hù),運(yùn)營環(huán)境變化做了及時(shí)的預(yù)測與警示。

猶如新媒體IPTV業(yè)務(wù)在傳統(tǒng)廣電行業(yè)的異軍突起,新的日志記錄系統(tǒng)對于傳統(tǒng)的工作方式無疑是一種更加智能、先進(jìn)的現(xiàn)代化辦公解決方案。通過此套系統(tǒng),為與日俱增的運(yùn)維工作為與日俱增的運(yùn)維工作提供了指導(dǎo),提高了效率,解決了問題,從而促進(jìn)IPTV平臺的發(fā)展和公司業(yè)務(wù)質(zhì)量的大步提升。

參考文獻(xiàn):

[1] SQLite數(shù)據(jù)庫源代碼和使用指導(dǎo)及示范.SQLite官方網(wǎng)站[EB/OL].http://www.sqlite.org.

[2] MFC類使用指導(dǎo)及示范.Microsoft開發(fā)人員網(wǎng)絡(luò).MFC類[EB/OL].http://msdn.microsoft.com.

[3] 李素麗,粱慎青,徐美紅.值班日志網(wǎng)站的開發(fā)及業(yè)務(wù)應(yīng)用[J].廣東氣象,2008,30(2):53,61.

[4] 韓善鋒,曹鳳海,易昌華.SQLite 數(shù)據(jù)庫在嵌入式程序開發(fā)中的應(yīng)用[J].物探裝備,2011,21(3):171-173.

[5] 張洋.基于SQLite的數(shù)字博物館導(dǎo)游器的設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2010.

主要用到的MFC控件有Edit Control和Combo-box Control兩項(xiàng)。通過GetWindowText函數(shù)將每個(gè)控件內(nèi)的具體數(shù)據(jù)寫入字符數(shù)組,調(diào)用已定義的Faults類下的成員函數(shù)SetXX和GetXX進(jìn)行賦值與傳參,使用sql語句執(zhí)行insert插入語句并調(diào)用api ExecSQL(sql) 執(zhí)行底層操作(圖4) 。

期間又增加了兩項(xiàng)安全提示:一、用邏輯或的關(guān)系將“登錄人”、“日期”、“時(shí)間”三項(xiàng)需操作人手動(dòng)填入的進(jìn)行判斷,任意一欄沒填則彈出Message提示,防止漏填。其二,在點(diǎn)擊“錄入”按鈕時(shí)添加MessageBox提示“是否確定錄入”,給操作人一個(gè)修改檢查的機(jī)會(huì)。最后根據(jù)錄入返回值提示錄入成功或失敗。

1.3.3 查詢模塊

查詢界面(圖5) 分為登錄人、日期、平臺、信源類型、故障節(jié)點(diǎn)、故障頻道、故障現(xiàn)象 7個(gè)可復(fù)選選項(xiàng),通過任意條件組合可以迅速精確定位到查詢結(jié)果,所得結(jié)果以建立窗體列表形式呈現(xiàn)。查詢結(jié)果有數(shù)據(jù)統(tǒng)計(jì)、刪除以及保存功能并支持完整導(dǎo)入到Excel文檔。

主要用到的MFC控件有List Control、Check-box Control、Combo-box Control和Edit Control。對于復(fù)選組合這部分的實(shí)現(xiàn),分控件勾選和邏輯實(shí)現(xiàn)兩部分。使用GetCheck()函數(shù)去判斷選項(xiàng)是否勾選,定義變量 ifFirstChoice作為邏輯判斷,并賦予初始值為true,將其放在條件語句中作為判斷sql查詢語句后是否加“and”的依據(jù)(圖6) 。根據(jù)選擇的條件將查詢結(jié)果返回到vector數(shù)組中,最后插入到CListCtrl控件中顯示。

在查詢的同時(shí),使用GetItemCount()函數(shù)得到查詢結(jié)果數(shù)量,并通過靜態(tài)文本顯示統(tǒng)計(jì)結(jié)果。刪除部分的功能,由于兩條記錄總會(huì)有可能完全一樣,所以選取唯一每條信息的ID值作為sql刪除語句的條件。使用OnNMClick事件處理配合GetFirstSelectedItemPosition函數(shù)通過點(diǎn)擊某一行得到當(dāng)前行數(shù)以及第0列中存儲的這條記錄fault_id號。根據(jù)行號從CListCtrl列表中刪除所顯示內(nèi)容,根據(jù)記錄的fault_id號刪除在數(shù)據(jù)庫中對應(yīng)記錄內(nèi)容。刪除前依舊使用MessageBox做刪除提示,防止誤刪。

保存功能,使用api SHGetSpecialFolderPath獲取當(dāng)前用戶的桌面路徑,通過文件流格式化輸出(圖8) ,將存儲在數(shù)組里的數(shù)據(jù)以txt形式保存到桌面,并以tab鍵作為分隔符以支持完整格式導(dǎo)入到Excel文件中。

1.3.4 通知模塊

在Edit Control控件內(nèi)寫入需要轉(zhuǎn)達(dá)的通知,和其他模塊窗口不同,并不使用DestroyWindow()在關(guān)閉窗口時(shí)進(jìn)行銷毀,所以可以在內(nèi)存中保留數(shù)據(jù)。用MFC封裝的CStdioFile類進(jìn)行文件流操作,完成文本形式的本地讀取與存儲功能。運(yùn)用setlocale()函數(shù)進(jìn)行環(huán)境設(shè)置以便解決讀取文本時(shí)Unicode和ANSI編碼之間不兼容的轉(zhuǎn)換問題。同時(shí)在讀取時(shí)利用LineScroll使垂直滾動(dòng)條自動(dòng)滾動(dòng)到底端,方便操作者看到最新的通知。

另外有提醒功能,點(diǎn)擊“提醒”按鈕出現(xiàn)“有一條新通知,請查看!!”的醒目水印,通過設(shè)置全局變量將此靜態(tài)文本傳遞到通知、查詢、錄入三個(gè)界面中。使用者在看到提醒并閱讀通知后,可以點(diǎn)擊已閱來取消水?。▓D7) 。

1.3.5 通訊錄模塊

使用CListCtrl控件,將公司各部、集團(tuán)相關(guān)重要部門、合作方以及各系統(tǒng)第三方技術(shù)支持等重要人員信息以及聯(lián)系方式都一一匯總,方便應(yīng)急聯(lián)系。可通過查找關(guān)鍵詞迅速定位。

其原理是通過每行和每列的遍歷將關(guān)鍵詞變量myFindStr與列表內(nèi)榮進(jìn)行核實(shí)匹配,先將所有匹配項(xiàng)保存坐標(biāo)到二維數(shù)組resultVector里。點(diǎn)擊查找時(shí),垂直滾動(dòng)條滾動(dòng)到二維數(shù)字里第一條保存結(jié)果所在的行數(shù)并且高亮。通過條件語句判斷,如果此時(shí)再點(diǎn)擊查找且所搜索的關(guān)鍵詞與第一次相同即lastSearchStr = myFindStr,則指針累加移動(dòng)一位,起到“查找下一個(gè)”的作用。反之,則二維數(shù)組清零重新遍歷(圖8) 。

2 應(yīng)用情況

天津IPTV監(jiān)控日志數(shù)據(jù)庫系統(tǒng)自上線運(yùn)行以來近半年多的時(shí)間,累積了六千多條日志記錄,運(yùn)行情況平穩(wěn)良好,也以系統(tǒng)為依據(jù)為運(yùn)維部提供大數(shù)據(jù)挖掘分析:回顧過往,通過環(huán)比同比總結(jié)的故障事件頻率,吸取經(jīng)驗(yàn),摸索規(guī)律,優(yōu)化方案配置;展望未來,通過趨勢走向,為設(shè)備性能擴(kuò)容提升,設(shè)備老化維護(hù),運(yùn)營環(huán)境變化做了及時(shí)的預(yù)測與警示。

猶如新媒體IPTV業(yè)務(wù)在傳統(tǒng)廣電行業(yè)的異軍突起,新的日志記錄系統(tǒng)對于傳統(tǒng)的工作方式無疑是一種更加智能、先進(jìn)的現(xiàn)代化辦公解決方案。通過此套系統(tǒng),為與日俱增的運(yùn)維工作為與日俱增的運(yùn)維工作提供了指導(dǎo),提高了效率,解決了問題,從而促進(jìn)IPTV平臺的發(fā)展和公司業(yè)務(wù)質(zhì)量的大步提升。

參考文獻(xiàn):

[1] SQLite數(shù)據(jù)庫源代碼和使用指導(dǎo)及示范.SQLite官方網(wǎng)站[EB/OL].http://www.sqlite.org.

[2] MFC類使用指導(dǎo)及示范.Microsoft開發(fā)人員網(wǎng)絡(luò).MFC類[EB/OL].http://msdn.microsoft.com.

[3] 李素麗,粱慎青,徐美紅.值班日志網(wǎng)站的開發(fā)及業(yè)務(wù)應(yīng)用[J].廣東氣象,2008,30(2):53,61.

[4] 韓善鋒,曹鳳海,易昌華.SQLite 數(shù)據(jù)庫在嵌入式程序開發(fā)中的應(yīng)用[J].物探裝備,2011,21(3):171-173.

[5] 張洋.基于SQLite的數(shù)字博物館導(dǎo)游器的設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2010.

主要用到的MFC控件有Edit Control和Combo-box Control兩項(xiàng)。通過GetWindowText函數(shù)將每個(gè)控件內(nèi)的具體數(shù)據(jù)寫入字符數(shù)組,調(diào)用已定義的Faults類下的成員函數(shù)SetXX和GetXX進(jìn)行賦值與傳參,使用sql語句執(zhí)行insert插入語句并調(diào)用api ExecSQL(sql) 執(zhí)行底層操作(圖4) 。

期間又增加了兩項(xiàng)安全提示:一、用邏輯或的關(guān)系將“登錄人”、“日期”、“時(shí)間”三項(xiàng)需操作人手動(dòng)填入的進(jìn)行判斷,任意一欄沒填則彈出Message提示,防止漏填。其二,在點(diǎn)擊“錄入”按鈕時(shí)添加MessageBox提示“是否確定錄入”,給操作人一個(gè)修改檢查的機(jī)會(huì)。最后根據(jù)錄入返回值提示錄入成功或失敗。

1.3.3 查詢模塊

查詢界面(圖5) 分為登錄人、日期、平臺、信源類型、故障節(jié)點(diǎn)、故障頻道、故障現(xiàn)象 7個(gè)可復(fù)選選項(xiàng),通過任意條件組合可以迅速精確定位到查詢結(jié)果,所得結(jié)果以建立窗體列表形式呈現(xiàn)。查詢結(jié)果有數(shù)據(jù)統(tǒng)計(jì)、刪除以及保存功能并支持完整導(dǎo)入到Excel文檔。

主要用到的MFC控件有List Control、Check-box Control、Combo-box Control和Edit Control。對于復(fù)選組合這部分的實(shí)現(xiàn),分控件勾選和邏輯實(shí)現(xiàn)兩部分。使用GetCheck()函數(shù)去判斷選項(xiàng)是否勾選,定義變量 ifFirstChoice作為邏輯判斷,并賦予初始值為true,將其放在條件語句中作為判斷sql查詢語句后是否加“and”的依據(jù)(圖6) 。根據(jù)選擇的條件將查詢結(jié)果返回到vector數(shù)組中,最后插入到CListCtrl控件中顯示。

在查詢的同時(shí),使用GetItemCount()函數(shù)得到查詢結(jié)果數(shù)量,并通過靜態(tài)文本顯示統(tǒng)計(jì)結(jié)果。刪除部分的功能,由于兩條記錄總會(huì)有可能完全一樣,所以選取唯一每條信息的ID值作為sql刪除語句的條件。使用OnNMClick事件處理配合GetFirstSelectedItemPosition函數(shù)通過點(diǎn)擊某一行得到當(dāng)前行數(shù)以及第0列中存儲的這條記錄fault_id號。根據(jù)行號從CListCtrl列表中刪除所顯示內(nèi)容,根據(jù)記錄的fault_id號刪除在數(shù)據(jù)庫中對應(yīng)記錄內(nèi)容。刪除前依舊使用MessageBox做刪除提示,防止誤刪。

保存功能,使用api SHGetSpecialFolderPath獲取當(dāng)前用戶的桌面路徑,通過文件流格式化輸出(圖8) ,將存儲在數(shù)組里的數(shù)據(jù)以txt形式保存到桌面,并以tab鍵作為分隔符以支持完整格式導(dǎo)入到Excel文件中。

1.3.4 通知模塊

在Edit Control控件內(nèi)寫入需要轉(zhuǎn)達(dá)的通知,和其他模塊窗口不同,并不使用DestroyWindow()在關(guān)閉窗口時(shí)進(jìn)行銷毀,所以可以在內(nèi)存中保留數(shù)據(jù)。用MFC封裝的CStdioFile類進(jìn)行文件流操作,完成文本形式的本地讀取與存儲功能。運(yùn)用setlocale()函數(shù)進(jìn)行環(huán)境設(shè)置以便解決讀取文本時(shí)Unicode和ANSI編碼之間不兼容的轉(zhuǎn)換問題。同時(shí)在讀取時(shí)利用LineScroll使垂直滾動(dòng)條自動(dòng)滾動(dòng)到底端,方便操作者看到最新的通知。

另外有提醒功能,點(diǎn)擊“提醒”按鈕出現(xiàn)“有一條新通知,請查看?。 钡男涯克?,通過設(shè)置全局變量將此靜態(tài)文本傳遞到通知、查詢、錄入三個(gè)界面中。使用者在看到提醒并閱讀通知后,可以點(diǎn)擊已閱來取消水?。▓D7) 。

1.3.5 通訊錄模塊

使用CListCtrl控件,將公司各部、集團(tuán)相關(guān)重要部門、合作方以及各系統(tǒng)第三方技術(shù)支持等重要人員信息以及聯(lián)系方式都一一匯總,方便應(yīng)急聯(lián)系??赏ㄟ^查找關(guān)鍵詞迅速定位。

其原理是通過每行和每列的遍歷將關(guān)鍵詞變量myFindStr與列表內(nèi)榮進(jìn)行核實(shí)匹配,先將所有匹配項(xiàng)保存坐標(biāo)到二維數(shù)組resultVector里。點(diǎn)擊查找時(shí),垂直滾動(dòng)條滾動(dòng)到二維數(shù)字里第一條保存結(jié)果所在的行數(shù)并且高亮。通過條件語句判斷,如果此時(shí)再點(diǎn)擊查找且所搜索的關(guān)鍵詞與第一次相同即lastSearchStr = myFindStr,則指針累加移動(dòng)一位,起到“查找下一個(gè)”的作用。反之,則二維數(shù)組清零重新遍歷(圖8) 。

2 應(yīng)用情況

天津IPTV監(jiān)控日志數(shù)據(jù)庫系統(tǒng)自上線運(yùn)行以來近半年多的時(shí)間,累積了六千多條日志記錄,運(yùn)行情況平穩(wěn)良好,也以系統(tǒng)為依據(jù)為運(yùn)維部提供大數(shù)據(jù)挖掘分析:回顧過往,通過環(huán)比同比總結(jié)的故障事件頻率,吸取經(jīng)驗(yàn),摸索規(guī)律,優(yōu)化方案配置;展望未來,通過趨勢走向,為設(shè)備性能擴(kuò)容提升,設(shè)備老化維護(hù),運(yùn)營環(huán)境變化做了及時(shí)的預(yù)測與警示。

猶如新媒體IPTV業(yè)務(wù)在傳統(tǒng)廣電行業(yè)的異軍突起,新的日志記錄系統(tǒng)對于傳統(tǒng)的工作方式無疑是一種更加智能、先進(jìn)的現(xiàn)代化辦公解決方案。通過此套系統(tǒng),為與日俱增的運(yùn)維工作為與日俱增的運(yùn)維工作提供了指導(dǎo),提高了效率,解決了問題,從而促進(jìn)IPTV平臺的發(fā)展和公司業(yè)務(wù)質(zhì)量的大步提升。

參考文獻(xiàn):

[1] SQLite數(shù)據(jù)庫源代碼和使用指導(dǎo)及示范.SQLite官方網(wǎng)站[EB/OL].http://www.sqlite.org.

[2] MFC類使用指導(dǎo)及示范.Microsoft開發(fā)人員網(wǎng)絡(luò).MFC類[EB/OL].http://msdn.microsoft.com.

[3] 李素麗,粱慎青,徐美紅.值班日志網(wǎng)站的開發(fā)及業(yè)務(wù)應(yīng)用[J].廣東氣象,2008,30(2):53,61.

[4] 韓善鋒,曹鳳海,易昌華.SQLite 數(shù)據(jù)庫在嵌入式程序開發(fā)中的應(yīng)用[J].物探裝備,2011,21(3):171-173.

[5] 張洋.基于SQLite的數(shù)字博物館導(dǎo)游器的設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2010.

孟津县| 大连市| 独山县| 墨竹工卡县| 任丘市| 礼泉县| 清流县| 宣威市| 海安县| 泰和县| 澄城县| 海城市| 奉化市| 弥渡县| 津南区| 土默特右旗| 荣昌县| 威信县| 乌鲁木齐县| 丹阳市| 巴彦淖尔市| 巴彦县| 黑河市| 阿瓦提县| 保德县| 大关县| 木兰县| 西畴县| 通州市| 金阳县| 静安区| 镇巴县| 稷山县| 通河县| 濉溪县| 无为县| 开江县| 千阳县| 那坡县| 桐柏县| 鹤壁市|