| 2447 | } |
| 2448 | |
| 2449 | void IcingaDB::SendAcknowledgementSet(const Checkable::Ptr& checkable, const String& author, const String& comment, AcknowledgementType type, bool persistent, double changeTime, double expiry) |
| 2450 | { |
| 2451 | if (!GetActive()) { |
| 2452 | return; |
| 2453 | } |
| 2454 | |
| 2455 | Host::Ptr host; |
| 2456 | Service::Ptr service; |
| 2457 | tie(host, service) = GetHostService(checkable); |
| 2458 | |
| 2459 | /* Update checkable state as is_acknowledged may have changed. */ |
| 2460 | EnqueueConfigObject(checkable, icingadb::task_queue::FullState); |
| 2461 | |
| 2462 | RedisConnection::Query xAdd ({ |
| 2463 | "XADD", "icinga:history:stream:acknowledgement", "*", |
| 2464 | "environment_id", m_EnvironmentId, |
| 2465 | "host_id", GetObjectIdentifier(host), |
| 2466 | "event_type", "ack_set", |
| 2467 | "author", author, |
| 2468 | "comment", comment, |
| 2469 | "is_sticky", Convert::ToString((unsigned short)(type == AcknowledgementSticky)), |
| 2470 | "is_persistent", Convert::ToString((unsigned short)persistent) |
| 2471 | }); |
| 2472 | |
| 2473 | if (service) { |
| 2474 | xAdd.emplace_back("object_type"); |
| 2475 | xAdd.emplace_back("service"); |
| 2476 | xAdd.emplace_back("service_id"); |
| 2477 | xAdd.emplace_back(GetObjectIdentifier(checkable)); |
| 2478 | } else { |
| 2479 | xAdd.emplace_back("object_type"); |
| 2480 | xAdd.emplace_back("host"); |
| 2481 | } |
| 2482 | |
| 2483 | auto endpoint (Endpoint::GetLocalEndpoint()); |
| 2484 | |
| 2485 | if (endpoint) { |
| 2486 | xAdd.emplace_back("endpoint_id"); |
| 2487 | xAdd.emplace_back(GetObjectIdentifier(endpoint)); |
| 2488 | } |
| 2489 | |
| 2490 | if (expiry > 0) { |
| 2491 | xAdd.emplace_back("expire_time"); |
| 2492 | xAdd.emplace_back(Convert::ToString(TimestampToMilliseconds(expiry))); |
| 2493 | } |
| 2494 | |
| 2495 | long long setTs = TimestampToMilliseconds(changeTime); |
| 2496 | |
| 2497 | xAdd.emplace_back("set_time"); |
| 2498 | xAdd.emplace_back(Convert::ToString(setTs)); |
| 2499 | xAdd.emplace_back("event_id"); |
| 2500 | xAdd.emplace_back(CalcEventID("ack_set", checkable, changeTime)); |
| 2501 | xAdd.emplace_back("id"); |
| 2502 | xAdd.emplace_back(HashValue(new Array({m_EnvironmentId, checkable->GetName(), setTs}))); |
| 2503 | |
| 2504 | m_HistoryBulker.ProduceOne(std::move(xAdd)); |
| 2505 | } |
| 2506 |
no test coverage detected