diff --git a/doc/09-object-types.md b/doc/09-object-types.md
index 6111ec0aa..40f161bc4 100644
--- a/doc/09-object-types.md
+++ b/doc/09-object-types.md
@@ -406,6 +406,7 @@ Runtime Attributes:
severity | Number | [Severity](19-technical-concepts.md#technical-concepts-checks-severity) calculated value.
problem | Boolean | Whether the host is considered in a problem state type (NOT-UP).
handled | Boolean | Whether the host problem is handled (downtime or acknowledgement).
+ next\_update | Timestamp | When the next check update is to be expected.
@@ -770,6 +771,7 @@ Runtime Attributes:
severity | Number | [Severity](19-technical-concepts.md#technical-concepts-checks-severity) calculated value.
problem | Boolean | Whether the service is considered in a problem state type (NOT-OK).
handled | Boolean | Whether the service problem is handled (downtime or acknowledgement).
+ next\_update | Timestamp | When the next check update is to be expected.
### ServiceGroup
diff --git a/lib/icinga/checkable.cpp b/lib/icinga/checkable.cpp
index 04e462951..0ab090284 100644
--- a/lib/icinga/checkable.cpp
+++ b/lib/icinga/checkable.cpp
@@ -168,6 +168,19 @@ bool Checkable::GetHandled() const
return GetProblem() && (IsInDowntime() || IsAcknowledged());
}
+Timestamp Checkable::GetNextUpdate() const
+{
+ auto cr (GetLastCheckResult());
+
+ if (cr) {
+ return GetNextCheck()
+ + (GetProblem() && GetStateType() == StateTypeSoft ? GetRetryInterval() : GetCheckInterval())
+ + 2 * (cr->GetExecutionEnd() - cr->GetScheduleStart());
+ } else {
+ return GetNextCheck() + GetCheckInterval();
+ }
+}
+
void Checkable::NotifyFixedDowntimeStart(const Downtime::Ptr& downtime)
{
if (!downtime->GetFixed())
diff --git a/lib/icinga/checkable.hpp b/lib/icinga/checkable.hpp
index caddd63f4..032910adb 100644
--- a/lib/icinga/checkable.hpp
+++ b/lib/icinga/checkable.hpp
@@ -91,6 +91,7 @@ public:
int GetSeverity() const override;
bool GetProblem() const override;
bool GetHandled() const override;
+ Timestamp GetNextUpdate() const override;
/* Checks */
intrusive_ptr GetCheckCommand() const;
diff --git a/lib/icinga/checkable.ti b/lib/icinga/checkable.ti
index 7969d6f46..a920d2589 100644
--- a/lib/icinga/checkable.ti
+++ b/lib/icinga/checkable.ti
@@ -132,6 +132,9 @@ abstract class Checkable : CustomVarObject
[no_storage] bool handled {
get;
};
+ [no_storage] Timestamp next_update {
+ get;
+ };
[state] bool force_next_check;
[state] int acknowledgement (AcknowledgementRaw) {