美文网首页
UASG话单定制化文档

UASG话单定制化文档

作者: shaarawy18 | 来源:发表于2018-03-07 15:34 被阅读0次

    解析配置文件

    结构体定义

    在UASG中定义了LogSegInfo结构体保存配置文件中用户对每一个字段的配置信息,从而实现配置文件的解析。每一个结构体对应一个话单字段,LogSegInfo结构体数组就对应了一个完整的话单格式。

    typedef struct LogSegInfo_s
    {
        short         nCondxDRType[XDRLOG_TYPE_MAX];      //保存COND指定的XDR类型
        int           nMaxLen;                            //字段最大长度限制
        int (*pSegFormatFunc)(char *pBuffer, LogSegInfo_s *pLogSegInfo, LogInfo_t *pLogInfo); //根据函数名进行匹配的函数指针
        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;
    

    其中格式化函数的表示形式比较特殊,需要对其进行字符串匹配从而完成解析。在定制话单过程中如果需要对一个字段进行特殊功能的配置,则可调用程序预先定义好的各类格式化函数。在配置文件中其表示形式如下:

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

    UniformProcessor::GetChannelFormat函数实现了对话单格式的配置文件的解析。通过字符串匹配的方式实现对配置项的读取,过程中要严格控制字符串数组指针的移动长度,否则会出错。现阶段有一部分函数需要四个参数(nMaxLen ,aFormatStr ,aDefaultStr ,aFormatInde),一部分函数只需要三个参数(aFormatStr ,aDefaultStr ,aFormatIndex)。

    通用输入参数

    • COND(Type1+Type2+...):指定COND中包含的XDR类型按指定规则填写字段。应用场景是:同一字段因APP类型不同而需要使用不同的格式化方法。

    • func_ :若出现func_前缀则表示用户需要对该字段进行特殊格式化。若无此关键字则直接写入配置索引下的字段的值。

    • nMaxLen:部分函数使用。限定获取字段的最大长度

    • aFormatStr: 全部函数使用。格式化模版,例如指定日期的表示形式。如有赋值,则后续格式化字段要参考该模版。

    • aDefaultStr: 全部函数使用。缺省值字符串,指定某个字段用缺省值代替,或者在格式化出错时将字段赋缺省值。

    读取格式化配置文件流程

    函数定义

     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参数的值
    • 备注:区别于DEFAULT,一定不能在该函数中填DefaultStr参数;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
    
    • 功能:该函数是在当seg1~seg4中所有字段均为空时填DefaultStr参数的值;若seg为0,则将该格式化字段填FormatStr参数的值;若seg字段不为零,对指定字段进行组合。
    • 备注:MaxLen限定该字段的长度,如为零则不限制。
     FUNC_LEN(’format’ ‘default’ seg1+seg2+seg3+seg4)
     示例:FUNC_LEN('' '' 105)
     输出:105.len
    
    • 功能:该函数在话单中填的是seg1~ seg4组合后的长度值,并不填写字段内容。如果seg1~seg4中的非0序号字段全部为空,则看default参数是否存在,default参数存在就填default的长度,否则就填为format参数的长度。
     FUNC_SUB(’’ ‘’ seg1+seg2) 
     示例:FUNC_SUB('' '' 105+20)
     输出:105-20
    
    • 功能:该函数在话单中填的是seg1和seg2的相减之差值,差可为正也可为负。
    • 备注:seg1和seg2两个字段必须为两个数字;
     FUNC_MAP(’val1 val2 val3 val4’ ‘Val1 Val2 Val3 Val4’ seg1)
     示例:FUNC_MAP('0\1' '1\0' 95)
     输出:0\1
    
    • 功能:该函数对字段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的十进制形式
    
    • 功能:该函数将seg1~seg4的数字值,按照DigestFormat的形式来写到话单中,并且规定最大宽度为FixWidth, 如果没填该参数就是没限制,超过宽度的部分舍弃。
    • 备注:seg1~seg4必须为数字字段,如果配了非数字字段将都按照值为0处理,且为了单独服务LinkID这个字段,特别规定了如果真实值为0就略过
     FUNC_COUNT( ‘format’ ‘’ seg1+seg2+seg3+seg4)
     示例:
     输出:
    
    • 功能:该函数将在seg1~seg4的组合中查找子字符串或者字符’format’,并将查找到的次数填写到该话单字段中;
     FUNC_URL(MAX_LEN '' 'default' seg1+seg2)
     示例:FUNC_URL(0 '' '' 102+103)
     输出:URL
    
    • 功能:该函数专门用于填写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对应的协议名称
    
    • 功能:该函数专门为protocolID字段服务,seg1是PID字段在合集中的序号,该函数在话单中填PID对应的协议名称字符串而非编号;
     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 中的内容代替原始包中的内容
     FUNC_CUTOFF('number' 'default' seg1)
     示例:
     输出:
    
    • 功能:将seg1字段的尾部剪裁掉number个字节。如果原有长度不够,直接填写default的值。
     FUNC_SPLITCOUNT('delimiter' '' seg)
     示例:FUNC_SPLITCOUNT(';' '' 101)
     输出:
    
    • 功能:计算seg字段中使用delimiter分隔符的数量
     FUNC_FTPURL(MAX_LEN '' 'default' seg1+seg2)
     示例:
     输出:ftp://ServerIP:21 FilePath
    
    • 功能:seg1是 "ServerIP", seg2是"FilePath",输出FTP的URL。如果ServerIP是"0.0.0.0",该字段写default值

    相关文章

      网友评论

          本文标题:UASG话单定制化文档

          本文链接:https://www.haomeiwen.com/subject/rohjfftx.html