UASG話單定制化文檔

解析配置文件

結構體定義

在UASG中定義了LogSegInfo結構體保存配置文件中用戶對每一個字段的配置信息寨典,從而實現(xiàn)配置文件的解析厨诸。每一個結構體對應一個話單字段弯屈,LogSegInfo結構體數(shù)組就對應了一個完整的話單格式济丘。

typedef struct LogSegInfo_s
{
    short         nCondxDRType[XDRLOG_TYPE_MAX];      //保存COND指定的XDR類型
    int           nMaxLen;                            //字段最大長度限制
    int (*pSegFormatFunc)(char *pBuffer, LogSegInfo_s *pLogSegInfo, LogInfo_t *pLogInfo); //根據(jù)函數(shù)名進行匹配的函數(shù)指針
    unsigned char cIndexCount;                        //一共有多少個序號(組合字段含有多于一個字段序號)
    unsigned char aFormatIndex[MAX_COUNT_IN_SECTION]; //格式化的序號
    char          aFormatStr[MAX_FORMAT_LEN];         //進行格式化的目標字符串
    int           nFormatStrLen;                      //目標字符串長度
    char          aDefaultStr[MAX_DEFAULT_LEN];       //默認字符串
    int           nDefaultStrLen;                     // 默認字符串長度
    TargetMapValue_t FormatTargetMapValue[MAX_MAP_SEG_COUNT]; //格式化目標映射值組
}LogSegInfo;

其中格式化函數(shù)的表示形式比較特殊来惧,需要對其進行字符串匹配從而完成解析。在定制話單過程中如果需要對一個字段進行特殊功能的配置心例,則可調用程序預先定義好的各類格式化函數(shù)宵凌。在配置文件中其表示形式如下:

COND(Type1+Type2+...)FUNC_XXX(nMaxLen 'aFormatStr' 'aDefaultStr' segIndex1+ segIndex2+...)

UniformProcessor::GetChannelFormat函數(shù)實現(xiàn)了對話單格式的配置文件的解析。通過字符串匹配的方式實現(xiàn)對配置項的讀取止后,過程中要嚴格控制字符串數(shù)組指針的移動長度瞎惫,否則會出錯。現(xiàn)階段有一部分函數(shù)需要四個參數(shù)(nMaxLen 译株,aFormatStr 瓜喇,aDefaultStr ,aFormatInde)歉糜,一部分函數(shù)只需要三個參數(shù)(aFormatStr 乘寒,aDefaultStr ,aFormatIndex)匪补。

通用輸入?yún)?shù)

  • COND(Type1+Type2+...):指定COND中包含的XDR類型按指定規(guī)則填寫字段伞辛。應用場景是:同一字段因APP類型不同而需要使用不同的格式化方法。

  • func_ :若出現(xiàn)func_前綴則表示用戶需要對該字段進行特殊格式化夯缺。若無此關鍵字則直接寫入配置索引下的字段的值蚤氏。

  • nMaxLen:部分函數(shù)使用。限定獲取字段的最大長度

  • aFormatStr: 全部函數(shù)使用踊兜。格式化模版竿滨,例如指定日期的表示形式。如有賦值润文,則后續(xù)格式化字段要參考該模版姐呐。

  • aDefaultStr: 全部函數(shù)使用。缺省值字符串典蝌,指定某個字段用缺省值代替曙砂,或者在格式化出錯時將字段賦缺省值。

讀取格式化配置文件流程

函數(shù)定義

 FUNC_TIME(’TimeFormat’ ‘’ segIndex)
 示例:FUNC_TIME('%Y-%m-%d %H:%M:%S' '' 33)
 輸出:2018-03-01 13:23:21
  • 功能:按照TimeFormat的格式來寫字段序號為segIndex的話單字段骏掀,
  • 備注:這里中間的DefaultStr值為空鸠澈,且該字段序號必須是個時間字段柱告;
 FUNC_COMBINE(MaxLen ’format’ ‘’ seg1+seg2+seg3+seg4)
 示例:FUNC_COMBINE(0 '' '' 76+39)
 輸出:7639
 示例:FUNC_COMBINE(4 '1' '' 76+0+39)
 輸出:7613
  • 功能:最多四個字段能組合在一起作為一個字段輸出,如果seg1~seg4其中有一個為0笑陈,則對應的位置填的是FormatStr參數(shù)的值
  • 備注:區(qū)別于DEFAULT际度,一定不能在該函數(shù)中填DefaultStr參數(shù);MaxLen限定該字段的長度涵妥,如為零則不限制乖菱。
 FUNC_DEFAULT(MaxLen ’format’ ‘default’ seg1+seg2+seg3+seg4)
 示例:FUNC_DEFAULT(0 '' '' 76+39) [76,39字段均為空]
 輸出:
 示例:FUNC_DEFAULT(4 '1' '' 76+0+39) [76空,39非空]
 輸出:139
  • 功能:該函數(shù)是在當seg1~seg4中所有字段均為空時填DefaultStr參數(shù)的值蓬网;若seg為0窒所,則將該格式化字段填FormatStr參數(shù)的值;若seg字段不為零帆锋,對指定字段進行組合吵取。
  • 備注:MaxLen限定該字段的長度,如為零則不限制锯厢。
 FUNC_LEN(’format’ ‘default’ seg1+seg2+seg3+seg4)
 示例:FUNC_LEN('' '' 105)
 輸出:105.len
  • 功能:該函數(shù)在話單中填的是seg1~ seg4組合后的長度值皮官,并不填寫字段內(nèi)容。如果seg1~seg4中的非0序號字段全部為空实辑,則看default參數(shù)是否存在捺氢,default參數(shù)存在就填default的長度,否則就填為format參數(shù)的長度徙菠。
 FUNC_SUB(’’ ‘’ seg1+seg2) 
 示例:FUNC_SUB('' '' 105+20)
 輸出:105-20
  • 功能:該函數(shù)在話單中填的是seg1和seg2的相減之差值讯沈,差可為正也可為負郁岩。
  • 備注:seg1和seg2兩個字段必須為兩個數(shù)字婿奔;
 FUNC_MAP(’val1 val2 val3 val4’ ‘Val1 Val2 Val3 Val4’ seg1)
 示例:FUNC_MAP('0\1' '1\0' 95)
 輸出:0\1
  • 功能:該函數(shù)對字段seg1的實際值和要在話單中填寫的值做一個映射,比如實際值是Val1问慎,填寫的值就是val1
  • 備注:實際值和填寫值最多可以配四對萍摊,長度不能超過8
 FUNC_INT2IP(’’ ‘’ seg1)
 示例: FUNC_INT2IP(’’ ‘’ 23)
 輸出:192.xxx.xxx.xxx
  • 功能:將整型的IP地址轉化為點分形式,寫入話單.
  • 備注:seg1必須為一個IP字段如叼;
 FUNC_IP2INT(’’ ‘’ seg1)
 示例: FUNC_IP2INT(’’ ‘’ 23)
 輸出:3232256779
  • 功能:將整形的IP地址轉化為點分形式冰木,寫入話單.
  • 備注:seg1必須為一個IP字段;
 FUNC_DIGEST(’DigestFormat’ ‘FixWidth’ seg1+seg2+seg3+seg4)
 示例:FUNC_DIGEST('%x%02d' '' 75+76)
 輸出:75字段的十六進制形式76字段的寬度為2的十進制形式
  • 功能:該函數(shù)將seg1~seg4的數(shù)字值笼恰,按照DigestFormat的形式來寫到話單中踊沸,并且規(guī)定最大寬度為FixWidth, 如果沒填該參數(shù)就是沒限制,超過寬度的部分舍棄社证。
  • 備注:seg1~seg4必須為數(shù)字字段逼龟,如果配了非數(shù)字字段將都按照值為0處理,且為了單獨服務LinkID這個字段追葡,特別規(guī)定了如果真實值為0就略過
 FUNC_COUNT( ‘format’ ‘’ seg1+seg2+seg3+seg4)
 示例:
 輸出:
  • 功能:該函數(shù)將在seg1~seg4的組合中查找子字符串或者字符’format’腺律,并將查找到的次數(shù)填寫到該話單字段中奕短;
 FUNC_URL(MAX_LEN '' 'default' seg1+seg2)
 示例:FUNC_URL(0 '' '' 102+103)
 輸出:URL
  • 功能:該函數(shù)專門用于填寫URL,seg1為host的序號匀钧,seg2為URI的序號翎碑;
  • 備注:當兩者都為空時填入default值。
 FUNC_URLLEN(MAX_LEN '' 'default' seg1+seg2)
 示例:FUNC_URL(0 '' '' 102+103)
 輸出:URL的長度
  • 功能: seg1 表示"HOST"之斯,seg2 表示 "URI"日杈,填寫組合成的URL的長度。
  • 備注:當兩者都為空時填入default值佑刷。
 FUNC_PID(’’ ‘’ seg1)
 示例:FUNC_PID('' '' 36)
 輸出:36對應的協(xié)議名稱
  • 功能:該函數(shù)專門為protocolID字段服務达椰,seg1是PID字段在合集中的序號,該函數(shù)在話單中填PID對應的協(xié)議名稱字符串而非編號项乒;
 FUNC_uS2S(’’ ‘’ seg1) 
 示例:FUNC_uS2S('' '' 35)
 輸出:35字段的秒形式
  • 功能:將指定字段的毫秒的形式轉化為秒的形式
 FUNC_ALL_F(‘’ ‘count’ seg1)
 示例:FUNC_ALL_F('' '8' 0)
 輸出:FFFFFFFF
  • 功能:如果seg1有值啰劲,直接填該字段的值。如果為空檀何,寫count個F
  • 備注:感覺有點小問題
 FUNC_ENCODE('' '' seg1+seg2)
 示例:
 輸出:
  • 功能:seg1是一個時間字段蝇裤,使用后四位作為編碼的key對seg2字段進行編碼。
 FUNC_ENCODECT('' '' seg1)
 示例:
 輸出:
  • 功能:seg1是http content-type 索引字段,填寫 HTTPContentType.txt 中的內(nèi)容代替原始包中的內(nèi)容
 FUNC_CUTOFF('number' 'default' seg1)
 示例:
 輸出:
  • 功能:將seg1字段的尾部剪裁掉number個字節(jié)频鉴。如果原有長度不夠栓辜,直接填寫default的值。
 FUNC_SPLITCOUNT('delimiter' '' seg)
 示例:FUNC_SPLITCOUNT(';' '' 101)
 輸出:
  • 功能:計算seg字段中使用delimiter分隔符的數(shù)量
 FUNC_FTPURL(MAX_LEN '' 'default' seg1+seg2)
 示例:
 輸出:ftp://ServerIP:21 FilePath
  • 功能:seg1是 "ServerIP"垛孔, seg2是"FilePath"藕甩,輸出FTP的URL。如果ServerIP是"0.0.0.0"周荐,該字段寫default值
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狭莱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子概作,更是在濱河造成了極大的恐慌腋妙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讯榕,死亡現(xiàn)場離奇詭異骤素,居然都是意外死亡,警方通過查閱死者的電腦和手機愚屁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門济竹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人霎槐,你說我怎么就攤上這事送浊。” “怎么了栽燕?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵罕袋,是天一觀的道長改淑。 經(jīng)常有香客問我,道長浴讯,這世上最難降的妖魔是什么朵夏? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮榆纽,結果婚禮上仰猖,老公的妹妹穿的比我還像新娘。我一直安慰自己奈籽,他們只是感情好饥侵,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衣屏,像睡著了一般躏升。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狼忱,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天膨疏,我揣著相機與錄音,去河邊找鬼钻弄。 笑死佃却,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的窘俺。 我是一名探鬼主播饲帅,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘤泪!你這毒婦竟也來了灶泵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤均芽,失蹤者是張志新(化名)和其女友劉穎丘逸,沒想到半個月后单鹿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掀宋,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年仲锄,在試婚紗的時候發(fā)現(xiàn)自己被綠了劲妙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡儒喊,死狀恐怖镣奋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怀愧,我是刑警寧澤侨颈,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布余赢,位于F島的核電站,受9級特大地震影響哈垢,放射性物質發(fā)生泄漏妻柒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一耘分、第九天 我趴在偏房一處隱蔽的房頂上張望举塔。 院中可真熱鬧,春花似錦求泰、人聲如沸央渣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芽丹。三九已至,卻和暖如春卜朗,著一層夾襖步出監(jiān)牢的瞬間志衍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工聊替, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留楼肪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓惹悄,卻偏偏與公主長得像春叫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泣港,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,758評論 0 15
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理暂殖,服務發(fā)現(xiàn),斷路器当纱,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數(shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,958評論 6 13
  • “陌上人如玉呛每,公子世無雙”,你第一次看到這句話時對古人說的話是滿滿的喜愛坡氯。 你也驚訝怎么有人會把你心里所有的感受都...
    大大大喜寶閱讀 249評論 1 0
  • 最近參與公司的實習生招聘工作晨横,面試了幾位實習生,我有一道每次面試都必問的題目【HasmMap的工作原理】箫柳,但很遺憾...
    竹子柳閱讀 2,295評論 0 4