mirror of https://github.com/Icinga/icinga2.git
parent
3ed3bffd13
commit
872d4895f0
|
@ -170,6 +170,9 @@ void ApiEvents::FlappingChangedHandler(const Checkable::Ptr& checkable, const Me
|
|||
result->Set("state", service ? static_cast<int>(service->GetState()) : static_cast<int>(host->GetState()));
|
||||
result->Set("state_type", checkable->GetStateType());
|
||||
result->Set("is_flapping", checkable->IsFlapping());
|
||||
result->Set("flapping_current", checkable->GetFlappingCurrent());
|
||||
result->Set("threshold_low", checkable->GetFlappingThresholdLow());
|
||||
result->Set("threshold_high", checkable->GetFlappingThresholdHigh());
|
||||
|
||||
for (const EventQueue::Ptr& queue : queues) {
|
||||
queue->ProcessEvent(result);
|
||||
|
|
|
@ -27,13 +27,14 @@ using namespace icinga;
|
|||
void Checkable::UpdateFlappingStatus(bool stateChange)
|
||||
{
|
||||
std::bitset<20> stateChangeBuf = GetFlappingBuffer();
|
||||
int oldestIndex = (GetFlappingBuffer() & 0xFF00000) >> 20;
|
||||
int oldestIndex = GetFlappingIndex();
|
||||
|
||||
stateChangeBuf[oldestIndex] = stateChange;
|
||||
oldestIndex = (oldestIndex + 1) % 20;
|
||||
|
||||
double stateChanges = 0;
|
||||
|
||||
/* Iterate over our state array and compute a weighted total */
|
||||
for (int i = 0; i < 20; i++) {
|
||||
if (stateChangeBuf[(oldestIndex + i) % 20])
|
||||
stateChanges += 0.8 + (0.02 * i);
|
||||
|
@ -48,12 +49,13 @@ void Checkable::UpdateFlappingStatus(bool stateChange)
|
|||
else
|
||||
flapping = flappingValue > GetFlappingThresholdHigh();
|
||||
|
||||
SetFlappingBuffer(stateChangeBuf.to_ulong());
|
||||
SetFlappingIndex(oldestIndex);
|
||||
SetFlappingCurrent(flappingValue);
|
||||
SetFlapping(flapping, true);
|
||||
|
||||
if (flapping != GetFlapping())
|
||||
SetFlappingLastChange(Utility::GetTime());
|
||||
|
||||
SetFlappingBuffer((stateChangeBuf.to_ulong() | (oldestIndex << 20)));
|
||||
SetFlappingCurrent(flappingValue);
|
||||
SetFlapping(flapping);
|
||||
}
|
||||
|
||||
bool Checkable::IsFlapping(void) const
|
||||
|
|
|
@ -181,7 +181,6 @@ public:
|
|||
|
||||
/* Flapping Detection */
|
||||
bool IsFlapping(void) const;
|
||||
void UpdateFlappingStatus(bool stateChange);
|
||||
|
||||
/* Dependencies */
|
||||
void AddDependency(const intrusive_ptr<Dependency>& dep);
|
||||
|
@ -237,6 +236,10 @@ private:
|
|||
std::set<intrusive_ptr<Dependency> > m_ReverseDependencies;
|
||||
|
||||
void GetAllChildrenInternal(std::set<Checkable::Ptr>& children, int level = 0) const;
|
||||
|
||||
/* Flapping */
|
||||
void UpdateFlappingStatus(bool stateChange);
|
||||
bool SuppressEvent(void) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -158,7 +158,9 @@ abstract class Checkable : CustomVarObject
|
|||
default {{{ return 0; }}}
|
||||
};
|
||||
[state] Timestamp flapping_last_change;
|
||||
|
||||
[state, no_user_view, no_user_modify] int flapping_buffer;
|
||||
[state, no_user_view, no_user_modify] int flapping_index;
|
||||
[state, protected] bool flapping;
|
||||
|
||||
[config, navigation] name(Endpoint) command_endpoint (CommandEndpointRaw) {
|
||||
|
|
Loading…
Reference in New Issue