| 1865 | } |
| 1866 | |
| 1867 | void IcingaDB::SendStateChange(const ConfigObject::Ptr& object, const CheckResult::Ptr& cr, StateType type) |
| 1868 | { |
| 1869 | if (!GetActive()) { |
| 1870 | return; |
| 1871 | } |
| 1872 | |
| 1873 | Checkable::Ptr checkable = dynamic_pointer_cast<Checkable>(object); |
| 1874 | if (!checkable) |
| 1875 | return; |
| 1876 | |
| 1877 | if (!cr) |
| 1878 | return; |
| 1879 | |
| 1880 | Host::Ptr host; |
| 1881 | Service::Ptr service; |
| 1882 | |
| 1883 | tie(host, service) = GetHostService(checkable); |
| 1884 | |
| 1885 | EnqueueConfigObject(checkable, icingadb::task_queue::RuntimeState); |
| 1886 | |
| 1887 | int hard_state{}; |
| 1888 | if (!cr) { |
| 1889 | hard_state = ServicePending; |
| 1890 | } else if (service) { |
| 1891 | hard_state = service->GetLastHardState(); |
| 1892 | } else { |
| 1893 | hard_state = host->GetLastHardState(); |
| 1894 | } |
| 1895 | |
| 1896 | int soft_state{}; |
| 1897 | if (!cr) { |
| 1898 | soft_state = ServicePending; |
| 1899 | } else if (service) { |
| 1900 | soft_state = cr->GetState(); |
| 1901 | } else { |
| 1902 | soft_state = Host::CalculateState(cr->GetState()); |
| 1903 | } |
| 1904 | |
| 1905 | auto eventTime (cr->GetExecutionEnd()); |
| 1906 | auto eventTs (TimestampToMilliseconds(eventTime)); |
| 1907 | |
| 1908 | Array::Ptr rawId = new Array({m_EnvironmentId, object->GetName()}); |
| 1909 | rawId->Add(eventTs); |
| 1910 | |
| 1911 | RedisConnection::Query xAdd ({ |
| 1912 | "XADD", "icinga:history:stream:state", "*", |
| 1913 | "id", HashValue(rawId), |
| 1914 | "environment_id", m_EnvironmentId, |
| 1915 | "host_id", GetObjectIdentifier(host), |
| 1916 | "state_type", Checkable::StateTypeToString(type).ToLower(), |
| 1917 | "soft_state", Convert::ToString(soft_state), |
| 1918 | "hard_state", Convert::ToString(hard_state), |
| 1919 | "check_attempt", Convert::ToString(checkable->GetCheckAttempt()), |
| 1920 | "previous_soft_state", Convert::ToString(GetPreviousState(checkable, service, StateTypeSoft)), |
| 1921 | "previous_hard_state", Convert::ToString(GetPreviousState(checkable, service, StateTypeHard)), |
| 1922 | "max_check_attempts", Convert::ToString(checkable->GetMaxCheckAttempts()), |
| 1923 | "event_time", Convert::ToString(eventTs), |
| 1924 | "event_id", CalcEventID("state_change", object, eventTime), |
no test coverage detected