| 2380 | } |
| 2381 | |
| 2382 | void IcingaDB::SendFlappingChange(const Checkable::Ptr& checkable, double changeTime, double flappingLastChange) |
| 2383 | { |
| 2384 | if (!GetActive()) { |
| 2385 | return; |
| 2386 | } |
| 2387 | |
| 2388 | Host::Ptr host; |
| 2389 | Service::Ptr service; |
| 2390 | tie(host, service) = GetHostService(checkable); |
| 2391 | |
| 2392 | RedisConnection::Query xAdd ({ |
| 2393 | "XADD", "icinga:history:stream:flapping", "*", |
| 2394 | "environment_id", m_EnvironmentId, |
| 2395 | "host_id", GetObjectIdentifier(host), |
| 2396 | "flapping_threshold_low", Convert::ToString(checkable->GetFlappingThresholdLow()), |
| 2397 | "flapping_threshold_high", Convert::ToString(checkable->GetFlappingThresholdHigh()) |
| 2398 | }); |
| 2399 | |
| 2400 | if (service) { |
| 2401 | xAdd.emplace_back("object_type"); |
| 2402 | xAdd.emplace_back("service"); |
| 2403 | xAdd.emplace_back("service_id"); |
| 2404 | xAdd.emplace_back(GetObjectIdentifier(checkable)); |
| 2405 | } else { |
| 2406 | xAdd.emplace_back("object_type"); |
| 2407 | xAdd.emplace_back("host"); |
| 2408 | } |
| 2409 | |
| 2410 | auto endpoint (Endpoint::GetLocalEndpoint()); |
| 2411 | |
| 2412 | if (endpoint) { |
| 2413 | xAdd.emplace_back("endpoint_id"); |
| 2414 | xAdd.emplace_back(GetObjectIdentifier(endpoint)); |
| 2415 | } |
| 2416 | |
| 2417 | double startTime; |
| 2418 | |
| 2419 | if (checkable->IsFlapping()) { |
| 2420 | startTime = changeTime; |
| 2421 | |
| 2422 | xAdd.emplace_back("event_type"); |
| 2423 | xAdd.emplace_back("flapping_start"); |
| 2424 | xAdd.emplace_back("percent_state_change_start"); |
| 2425 | xAdd.emplace_back(Convert::ToString(checkable->GetFlappingCurrent())); |
| 2426 | } else { |
| 2427 | startTime = flappingLastChange; |
| 2428 | |
| 2429 | xAdd.emplace_back("event_type"); |
| 2430 | xAdd.emplace_back("flapping_end"); |
| 2431 | xAdd.emplace_back("end_time"); |
| 2432 | xAdd.emplace_back(Convert::ToString(TimestampToMilliseconds(changeTime))); |
| 2433 | xAdd.emplace_back("percent_state_change_end"); |
| 2434 | xAdd.emplace_back(Convert::ToString(checkable->GetFlappingCurrent())); |
| 2435 | } |
| 2436 | |
| 2437 | long long startTs = TimestampToMilliseconds(startTime); |
| 2438 | |
| 2439 | xAdd.emplace_back("start_time"); |
no test coverage detected