check_interval = 30 + 60
}
-Valid operators include ~, !, +, -, *, /, ==, !=, in and !in. The default precedence rules can be
+Valid operators include ~, !, +, -, *, /, >, >=, <, <=, ==, !=, in and !in. The default precedence rules can be
overridden by grouping expressions using parentheses:
{
}
return arr2;
+ case AELessThan:
+ return (long)left < (long)right;
+ case AEGreaterThan:
+ return (long)left > (long)right;
+ case AELessThanOrEqual:
+ return (long)left <= (long)right;
+ case AEGreaterThanOrEqual:
+ return (long)left >= (long)right;
default:
ASSERT(!"Invalid operator.");
}
AELogicalAnd,
AELogicalOr,
AEFunctionCall,
- AEArray
+ AEArray,
+ AELessThan,
+ AEGreaterThan,
+ AELessThanOrEqual,
+ AEGreaterThanOrEqual
};
/**
where return T_WHERE;
\<\< return T_SHIFT_LEFT;
\>\> return T_SHIFT_RIGHT;
+\<= return T_LESS_THAN_OR_EQUAL;
+\>= return T_GREATER_THAN_OR_EQUAL;
== return T_EQUAL;
!= return T_NOT_EQUAL;
!in return T_NOT_IN;
%token T_NOT_IN "!in (T_NOT_IN)"
%token T_LOGICAL_AND "&& (T_LOGICAL_AND)"
%token T_LOGICAL_OR "|| (T_LOGICAL_OR)"
+%token T_LESS_THAN_OR_EQUAL "<= (T_LESS_THAN_OR_EQUAL)"
+%token T_GREATER_THAN_OR_EQUAL ">= (T_GREATER_THAN_OR_EQUAL)"
%token <type> T_TYPE_DICTIONARY "dictionary (T_TYPE_DICTIONARY)"
%token <type> T_TYPE_ARRAY "array (T_TYPE_ARRAY)"
%token <type> T_TYPE_NUMBER "number (T_TYPE_NUMBER)"
delete $1;
delete $3;
}
+ | aexpression T_LESS_THAN_OR_EQUAL aexpression
+ {
+ $$ = new Value(make_shared<AExpression>(AELessThanOrEqual, static_cast<AExpression::Ptr>(*$1), static_cast<AExpression::Ptr>(*$3), yylloc));
+ delete $1;
+ delete $3;
+ }
+ | aexpression T_GREATER_THAN_OR_EQUAL aexpression
+ {
+ $$ = new Value(make_shared<AExpression>(AEGreaterThanOrEqual, static_cast<AExpression::Ptr>(*$1), static_cast<AExpression::Ptr>(*$3), yylloc));
+ delete $1;
+ delete $3;
+ }
+ | aexpression '<' aexpression
+ {
+ $$ = new Value(make_shared<AExpression>(AELessThan, static_cast<AExpression::Ptr>(*$1), static_cast<AExpression::Ptr>(*$3), yylloc));
+ delete $1;
+ delete $3;
+ }
+ | aexpression '>' aexpression
+ {
+ $$ = new Value(make_shared<AExpression>(AEGreaterThan, static_cast<AExpression::Ptr>(*$1), static_cast<AExpression::Ptr>(*$3), yylloc));
+ delete $1;
+ delete $3;
+ }
| aexpression T_EQUAL aexpression
{
$$ = new Value(make_shared<AExpression>(AEEqual, static_cast<AExpression::Ptr>(*$1), static_cast<AExpression::Ptr>(*$3), yylloc));
#include "methods/utilityfuncs.h"
#include "base/scriptfunction.h"
#include "base/utility.h"
+#include "base/convert.h"
+#include "base/array.h"
+#include "base/dictionary.h"
#include <boost/regex.hpp>
using namespace icinga;
REGISTER_SCRIPTFUNCTION(regex, &UtilityFuncs::Regex);
REGISTER_SCRIPTFUNCTION(match, &Utility::Match);
+REGISTER_SCRIPTFUNCTION(len, &UtilityFuncs::Len);
bool UtilityFuncs::Regex(const String& pattern, const String& text)
{
boost::smatch what;
return boost::regex_search(text.GetData(), what, expr);
}
+
+int UtilityFuncs::Len(const Value& value)
+{
+ if (value.IsObjectType<Dictionary>()) {
+ Dictionary::Ptr dict = value;
+ return dict->GetLength();
+ } else if (value.IsObjectType<Array>()) {
+ Array::Ptr array = value;
+ return array->GetLength();
+ } else {
+ return Convert::ToString(value).GetLength();
+ }
+}
\ No newline at end of file
{
public:
static bool Regex(const String& pattern, const String& text);
+ static int Len(const Value& value);
private:
UtilityFuncs(void);