规则引擎是基于ANTLR 4实现的一套脚本语言,主要用于告警处理。
通过表达式:变量名 = string
在规则中声明变量,其中,变量名只能为大小写字母、数字和下划线。示例:
abc = 1
$ABC = "hello"
@BCD = "world"
每条规则语句以换行符结尾。
注意:在规则处理上下文中,有三种特殊的变量,分别如下: a) 以开头,如:alarmId,此种变量为规则的输入参数,进入规则处理之前所有告警字段都会转化为
if (...) {
...
} else if (...) {
...
} else {
...
}
switch (...) {
case "" | "":
...
break
case "":
...
default:
...
}
foreach (key in $*|array|($vall,$val2,...$valn)) {
...
}
参考示例如下:
for (val in $*) {
log(info,"val is " + val)
}
array arrTest
arrTest["abc"] = 1
arrTest["bcd"] = 2
for (val in arrTest) {
log(info,"val is " + val)
}
for (val in ($1,$2,$3,$4)) {
log(info,"val is " + val)
}
table table_name = "./table_name"
default = {"", ..., ""}
直接式:
ta ble table_name = {
{"key", "value"},
...
{"key", "value"}
default = "default_values"
}
示例如下: 引用式:
table AlarmSeverity = "./Huawei/M2000/AlarmSeverity"
default = {"", ""}
==================
AlarmSeverity(tab,tab+,table):
1 Cleared
2 Minor
3 Major
4 Critical
5 Error
直接式:
table AlarmSeverity = {
{"1","Cleared"},
{"2","Minor"},
{"3","Major"},
{"4","Critical"},
{"5","Error"},
default = "UnKnown"
}
array array_name
array_name[String|number] = [String|number]
示例如下:
array arrayVo
arrayVo["test"] = 1
arrayVo[2] = "1001"
arrayVo[$a] = $b
log(info,"arrayVo["test"]=" + arrayVo["test"])
log(info,"arrayVo["2"]=" + arrayVo["2"])
log(info,"arrayVo["$a"]=" + arrayVo["$a"])
注意:所有带参数的函数,使用时每个参数之间不能存在空格。
$currentTime = getdate
log(info, "Current millisecond = " + $currentTime) # 1469689875121, JavaSystem.currentTimeMillis()
if (match($AlarmName, "LinkDown")) {
log(info, "It's matched")
} else {
log(info, "It's not matched")
}
if (rematch($AlarmName, ".*LinkDown.*")) {
log(info, "It's matched")
} else {
log(info, "It's not matched")
}
$AlertKey = "Node=123,alarmname=linkdown"
$Node = extract($AlertKey,".*Node=([0-9*],.*)")
log(info,"$Node=" + $Node) #123
if (exist($AlarmName)) {
log(info, "It's exists")
} else {
log(info, "It's not exists")
}
$NV_EVENT_TIME = "2020-05-18 10:52:00"
$EventTime = DateToTime($NV_EVENT_TIME,"yyyy-MM-dd HH:mm:ss")
这里的DateTime的第二个参数的格式参考Java语言提供的SimpleDateFormat类格式。
$val = int("1111")
$node = ltrim($node)
$node = rtrim($node)
$Severity = lookup($Severity,AlarmServerity)
[@SiteCode, @SiteName, @SitePriority, @Location, @ZoneTime, @SiteType, @collocation_name, @collocation_Id, @power_type, @LocalNodeAlias $#124;\||] = lookup(@Node, deviceSite3G4G)
@ccc=setContextVar("xxxxName")
@ddd=$xxxxName
xxxxNamexxxxName
@ccc=setContextVar("xxxxName","abcd")
@ddd=$abcd
abcd
@ccc=setContextVar("xxxxName","abcd")@ddd=$abcd
abcd
@mv36AlarmRaisingTimeTest = TimeFromIBMTime($mv36AlarmRaisingTimeTest)
lower("ABcD")
substr("ssss",1,2)
getenv("Probe_Name")
remove("passwd")
upper("abcD")
@alarmId=hashCode($alarmID)
if(int($AlarmStomFlg) == 1 && int($Severity) <= 2) { # ,2
discard
}
include "classpath:config/abc.rules" # classpath
include "./rules/test.rules" # (config),
include '/opt/ict/collector/instance/Probe-0010/config/lookup/Device.lookup" #