mirror of https://github.com/Icinga/icinga2.git
Add marco RequireNotNull
This is used to fix a number of possible nullptr dereferences
This commit is contained in:
parent
636ed8e238
commit
6bebdf8a87
|
@ -30,6 +30,7 @@ static double ArrayLen()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->GetLength();
|
||||
}
|
||||
|
||||
|
@ -37,6 +38,7 @@ static void ArraySet(int index, const Value& value)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
self->Set(index, value);
|
||||
}
|
||||
|
||||
|
@ -44,6 +46,7 @@ static Value ArrayGet(int index)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->Get(index);
|
||||
}
|
||||
|
||||
|
@ -51,6 +54,7 @@ static void ArrayAdd(const Value& value)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
self->Add(value);
|
||||
}
|
||||
|
||||
|
@ -58,6 +62,7 @@ static void ArrayRemove(int index)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
self->Remove(index);
|
||||
}
|
||||
|
||||
|
@ -65,6 +70,7 @@ static bool ArrayContains(const Value& value)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->Contains(value);
|
||||
}
|
||||
|
||||
|
@ -72,6 +78,7 @@ static void ArrayClear()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
self->Clear();
|
||||
}
|
||||
|
||||
|
@ -84,6 +91,7 @@ static Array::Ptr ArraySort(const std::vector<Value>& args)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
Array::Ptr arr = self->ShallowClone();
|
||||
|
||||
|
@ -107,6 +115,7 @@ static Array::Ptr ArrayShallowClone()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->ShallowClone();
|
||||
}
|
||||
|
||||
|
@ -114,6 +123,7 @@ static Value ArrayJoin(const Value& separator)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
Value result;
|
||||
bool first = true;
|
||||
|
@ -136,6 +146,7 @@ static Array::Ptr ArrayReverse()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->Reverse();
|
||||
}
|
||||
|
||||
|
@ -143,6 +154,7 @@ static Array::Ptr ArrayMap(const Function::Ptr& function)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
if (vframe->Sandboxed && !function->IsSideEffectFree())
|
||||
BOOST_THROW_EXCEPTION(ScriptError("Map function must be side-effect free."));
|
||||
|
@ -161,6 +173,7 @@ static Value ArrayReduce(const Function::Ptr& function)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
if (vframe->Sandboxed && !function->IsSideEffectFree())
|
||||
BOOST_THROW_EXCEPTION(ScriptError("Reduce function must be side-effect free."));
|
||||
|
@ -182,6 +195,7 @@ static Array::Ptr ArrayFilter(const Function::Ptr& function)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
if (vframe->Sandboxed && !function->IsSideEffectFree())
|
||||
BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));
|
||||
|
@ -201,6 +215,7 @@ static bool ArrayAny(const Function::Ptr& function)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
if (vframe->Sandboxed && !function->IsSideEffectFree())
|
||||
BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));
|
||||
|
@ -218,6 +233,7 @@ static bool ArrayAll(const Function::Ptr& function)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
if (vframe->Sandboxed && !function->IsSideEffectFree())
|
||||
BOOST_THROW_EXCEPTION(ScriptError("Filter function must be side-effect free."));
|
||||
|
@ -234,6 +250,7 @@ static Array::Ptr ArrayUnique()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Array::Ptr self = static_cast<Array::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
std::set<Value> result;
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ static void ConfigObjectModifyAttribute(const String& attr, const Value& value)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
ConfigObject::Ptr self = vframe->Self;
|
||||
RequireNotNull(self);
|
||||
return self->ModifyAttribute(attr, value);
|
||||
}
|
||||
|
||||
|
@ -36,6 +37,7 @@ static void ConfigObjectRestoreAttribute(const String& attr)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
ConfigObject::Ptr self = vframe->Self;
|
||||
RequireNotNull(self);
|
||||
return self->RestoreAttribute(attr);
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ static String DateTimeFormat(const String& format)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
DateTime::Ptr self = static_cast<DateTime::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
return self->Format(format);
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ static double DictionaryLen()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->GetLength();
|
||||
}
|
||||
|
||||
|
@ -36,6 +37,7 @@ static void DictionarySet(const String& key, const Value& value)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
self->Set(key, value);
|
||||
}
|
||||
|
||||
|
@ -43,6 +45,7 @@ static Value DictionaryGet(const String& key)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->Get(key);
|
||||
}
|
||||
|
||||
|
@ -50,6 +53,7 @@ static void DictionaryRemove(const String& key)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
self->Remove(key);
|
||||
}
|
||||
|
||||
|
@ -57,6 +61,7 @@ static bool DictionaryContains(const String& key)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->Contains(key);
|
||||
}
|
||||
|
||||
|
@ -64,6 +69,7 @@ static Dictionary::Ptr DictionaryShallowClone()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->ShallowClone();
|
||||
}
|
||||
|
||||
|
@ -71,6 +77,8 @@ static Array::Ptr DictionaryKeys()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
ArrayData keys;
|
||||
ObjectLock olock(self);
|
||||
for (const Dictionary::Pair& kv : self) {
|
||||
|
@ -83,6 +91,8 @@ static Array::Ptr DictionaryValues()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Dictionary::Ptr self = static_cast<Dictionary::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
ArrayData values;
|
||||
ObjectLock olock(self);
|
||||
for (const Dictionary::Pair& kv : self) {
|
||||
|
|
|
@ -32,6 +32,7 @@ static Value FunctionCall(const std::vector<Value>& args)
|
|||
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Function::Ptr self = static_cast<Function::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
std::vector<Value> uargs(args.begin() + 1, args.end());
|
||||
return self->InvokeThis(args[0], uargs);
|
||||
|
@ -41,6 +42,7 @@ static Value FunctionCallV(const Value& thisArg, const Array::Ptr& args)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Function::Ptr self = static_cast<Function::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
std::vector<Value> uargs;
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ static String ObjectToString()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Object::Ptr self = static_cast<Object::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->ToString();
|
||||
}
|
||||
|
||||
|
@ -36,6 +37,7 @@ static void ObjectNotifyAttribute(const String& attribute)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Object::Ptr self = static_cast<Object::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
self->NotifyField(self->GetReflectionType()->GetFieldId(attribute));
|
||||
}
|
||||
|
||||
|
@ -43,6 +45,7 @@ static Object::Ptr ObjectClone()
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Object::Ptr self = static_cast<Object::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
return self->Clone();
|
||||
}
|
||||
|
||||
|
|
|
@ -290,3 +290,9 @@ void icinga::DefaultObjectFactoryCheckArgs(const std::vector<Value>& args)
|
|||
if (!args.empty())
|
||||
BOOST_THROW_EXCEPTION(std::invalid_argument("Constructor does not take any arguments."));
|
||||
}
|
||||
|
||||
void icinga::RequireNotNullInternal(const intrusive_ptr<Object>& object, const char *description)
|
||||
{
|
||||
if (!object)
|
||||
BOOST_THROW_EXCEPTION(std::invalid_argument("Pointer must not be null: " + String(description)));
|
||||
}
|
|
@ -57,6 +57,10 @@ extern Value Empty;
|
|||
DECLARE_PTR_TYPEDEFS(klass); \
|
||||
IMPL_TYPE_LOOKUP();
|
||||
|
||||
#define RequireNotNull(ptr) RequireNotNullInternal(ptr, #ptr)
|
||||
|
||||
void RequireNotNullInternal(const intrusive_ptr<Object>& object, const char *description);
|
||||
|
||||
void DefaultObjectFactoryCheckArgs(const std::vector<Value>& args);
|
||||
|
||||
template<typename T>
|
||||
|
|
|
@ -35,6 +35,7 @@ static void TypeRegisterAttributeHandler(const String& fieldName, const Function
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Type::Ptr self = static_cast<Type::Ptr>(vframe->Self);
|
||||
RequireNotNull(self);
|
||||
|
||||
int fid = self->GetFieldId(fieldName);
|
||||
self->RegisterAttributeHandler(fid, std::bind(&InvokeAttributeHandlerHelper, callback, _1, _2));
|
||||
|
|
|
@ -30,6 +30,7 @@ static void CheckableProcessCheckResult(const CheckResult::Ptr& cr)
|
|||
{
|
||||
ScriptFrame *vframe = ScriptFrame::GetCurrentFrame();
|
||||
Checkable::Ptr self = vframe->Self;
|
||||
RequireNotNull(self);
|
||||
self->ProcessCheckResult(cr);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,9 @@ Value MacroProcessor::ResolveMacros(const Value& str, const ResolverList& resolv
|
|||
const MacroProcessor::EscapeCallback& escapeFn, const Dictionary::Ptr& resolvedMacros,
|
||||
bool useResolvedMacros, int recursionLevel)
|
||||
{
|
||||
if (useResolvedMacros)
|
||||
RequireNotNull(resolvedMacros);
|
||||
|
||||
Value result;
|
||||
|
||||
if (str.IsEmpty())
|
||||
|
@ -436,6 +439,9 @@ Value MacroProcessor::ResolveArguments(const Value& command, const Dictionary::P
|
|||
const MacroProcessor::ResolverList& resolvers, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros, int recursionLevel)
|
||||
{
|
||||
if (useResolvedMacros)
|
||||
RequireNotNull(resolvedMacros);
|
||||
|
||||
Value resolvedCommand;
|
||||
if (!arguments || command.IsObjectType<Array>() || command.IsObjectType<Function>())
|
||||
resolvedCommand = MacroProcessor::ResolveMacros(command, resolvers, cr, nullptr,
|
||||
|
|
|
@ -38,6 +38,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, ClusterCheck, &ClusterCheckTask::ScriptFunc
|
|||
void ClusterCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
RequireNotNull(cr);
|
||||
|
||||
if (resolvedMacros && !useResolvedMacros)
|
||||
return;
|
||||
|
||||
|
|
|
@ -34,6 +34,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, ClusterZoneCheck, &ClusterZoneCheckTask::Sc
|
|||
void ClusterZoneCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
RequireNotNull(cr);
|
||||
|
||||
ApiListener::Ptr listener = ApiListener::GetInstance();
|
||||
|
||||
if (!listener) {
|
||||
|
|
|
@ -36,6 +36,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, DummyCheck, &DummyCheckTask::ScriptFunc, "c
|
|||
void DummyCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
RequireNotNull(cr);
|
||||
|
||||
CheckCommand::Ptr commandObj = checkable->GetCheckCommand();
|
||||
|
||||
Host::Ptr host;
|
||||
|
|
|
@ -31,9 +31,12 @@ using namespace icinga;
|
|||
|
||||
REGISTER_SCRIPTFUNCTION_NS(Internal, ExceptionCheck, &ExceptionCheckTask::ScriptFunc, "checkable:cr:resolvedMacros:useResolvedMacros");
|
||||
|
||||
void ExceptionCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult::Ptr& cr,
|
||||
void ExceptionCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
RequireNotNull(cr);
|
||||
|
||||
if (resolvedMacros && !useResolvedMacros)
|
||||
return;
|
||||
|
||||
|
|
|
@ -38,6 +38,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, IcingaCheck, &IcingaCheckTask::ScriptFunc,
|
|||
void IcingaCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
RequireNotNull(cr);
|
||||
|
||||
CheckCommand::Ptr commandObj = checkable->GetCheckCommand();
|
||||
|
||||
Host::Ptr host;
|
||||
|
|
|
@ -32,9 +32,12 @@ using namespace icinga;
|
|||
|
||||
REGISTER_SCRIPTFUNCTION_NS(Internal, NullCheck, &NullCheckTask::ScriptFunc, "checkable:cr:resolvedMacros:useResolvedMacros");
|
||||
|
||||
void NullCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult::Ptr& cr,
|
||||
void NullCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
RequireNotNull(cr);
|
||||
|
||||
if (resolvedMacros && !useResolvedMacros)
|
||||
return;
|
||||
|
||||
|
@ -47,5 +50,5 @@ void NullCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult:
|
|||
}));
|
||||
cr->SetState(ServiceOK);
|
||||
|
||||
service->ProcessCheckResult(cr);
|
||||
checkable->ProcessCheckResult(cr);
|
||||
}
|
||||
|
|
|
@ -25,5 +25,7 @@ using namespace icinga;
|
|||
|
||||
REGISTER_SCRIPTFUNCTION_NS(Internal, NullEvent, &NullEventTask::ScriptFunc, "checkable:resolvedMacros:useResolvedMacros");
|
||||
|
||||
void NullEventTask::ScriptFunc(const Checkable::Ptr&, const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{ }
|
||||
void NullEventTask::ScriptFunc(const Checkable::Ptr& checkable, const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
}
|
||||
|
|
|
@ -36,6 +36,9 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, PluginCheck, &PluginCheckTask::ScriptFunc,
|
|||
void PluginCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
RequireNotNull(cr);
|
||||
|
||||
CheckCommand::Ptr commandObj = checkable->GetCheckCommand();
|
||||
|
||||
Host::Ptr host;
|
||||
|
|
|
@ -36,6 +36,8 @@ REGISTER_SCRIPTFUNCTION_NS(Internal, PluginEvent, &PluginEventTask::ScriptFunc,
|
|||
void PluginEventTask::ScriptFunc(const Checkable::Ptr& checkable,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
|
||||
EventCommand::Ptr commandObj = checkable->GetEventCommand();
|
||||
|
||||
Host::Ptr host;
|
||||
|
|
|
@ -39,6 +39,9 @@ void PluginNotificationTask::ScriptFunc(const Notification::Ptr& notification,
|
|||
const String& author, const String& comment, const Dictionary::Ptr& resolvedMacros,
|
||||
bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(notification);
|
||||
RequireNotNull(user);
|
||||
|
||||
NotificationCommand::Ptr commandObj = notification->GetCommand();
|
||||
|
||||
auto type = static_cast<NotificationType>(itype);
|
||||
|
|
|
@ -31,9 +31,12 @@ using namespace icinga;
|
|||
|
||||
REGISTER_SCRIPTFUNCTION_NS(Internal, RandomCheck, &RandomCheckTask::ScriptFunc, "checkable:cr:resolvedMacros:useResolvedMacros");
|
||||
|
||||
void RandomCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResult::Ptr& cr,
|
||||
void RandomCheckTask::ScriptFunc(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr,
|
||||
const Dictionary::Ptr& resolvedMacros, bool useResolvedMacros)
|
||||
{
|
||||
RequireNotNull(checkable);
|
||||
RequireNotNull(cr);
|
||||
|
||||
if (resolvedMacros && !useResolvedMacros)
|
||||
return;
|
||||
|
||||
|
@ -58,5 +61,5 @@ void RandomCheckTask::ScriptFunc(const Checkable::Ptr& service, const CheckResul
|
|||
|
||||
cr->SetState(static_cast<ServiceState>(Utility::Random() % 4));
|
||||
|
||||
service->ProcessCheckResult(cr);
|
||||
checkable->ProcessCheckResult(cr);
|
||||
}
|
||||
|
|
|
@ -25,14 +25,18 @@ using namespace icinga;
|
|||
REGISTER_SCRIPTFUNCTION_NS(Internal, EmptyTimePeriod, &TimePeriodTask::EmptyTimePeriodUpdate, "tp:begin:end");
|
||||
REGISTER_SCRIPTFUNCTION_NS(Internal, EvenMinutesTimePeriod, &TimePeriodTask::EvenMinutesTimePeriodUpdate, "tp:begin:end");
|
||||
|
||||
Array::Ptr TimePeriodTask::EmptyTimePeriodUpdate(const TimePeriod::Ptr&, double, double)
|
||||
Array::Ptr TimePeriodTask::EmptyTimePeriodUpdate(const TimePeriod::Ptr& tp, double, double)
|
||||
{
|
||||
RequireNotNull(tp);
|
||||
|
||||
Array::Ptr segments = new Array();
|
||||
return segments;
|
||||
}
|
||||
|
||||
Array::Ptr TimePeriodTask::EvenMinutesTimePeriodUpdate(const TimePeriod::Ptr&, double begin, double end)
|
||||
Array::Ptr TimePeriodTask::EvenMinutesTimePeriodUpdate(const TimePeriod::Ptr& tp, double begin, double end)
|
||||
{
|
||||
RequireNotNull(tp);
|
||||
|
||||
ArrayData segments;
|
||||
|
||||
for (long t = begin / 60 - 1; t * 60 < end; t++) {
|
||||
|
|
Loading…
Reference in New Issue