* @threadsafety Always. */
| 100 | * @threadsafety Always. |
| 101 | */ |
| 102 | void CompatLogger::CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr &cr) |
| 103 | { |
| 104 | Host::Ptr host; |
| 105 | Service::Ptr service; |
| 106 | tie(host, service) = GetHostService(checkable); |
| 107 | |
| 108 | Dictionary::Ptr vars_after = cr->GetVarsAfter(); |
| 109 | |
| 110 | long state_after = vars_after->Get("state"); |
| 111 | long stateType_after = vars_after->Get("state_type"); |
| 112 | long attempt_after = vars_after->Get("attempt"); |
| 113 | bool reachable_after = vars_after->Get("reachable"); |
| 114 | |
| 115 | Dictionary::Ptr vars_before = cr->GetVarsBefore(); |
| 116 | |
| 117 | if (vars_before) { |
| 118 | long state_before = vars_before->Get("state"); |
| 119 | long stateType_before = vars_before->Get("state_type"); |
| 120 | long attempt_before = vars_before->Get("attempt"); |
| 121 | bool reachable_before = vars_before->Get("reachable"); |
| 122 | |
| 123 | if (state_before == state_after && stateType_before == stateType_after && |
| 124 | attempt_before == attempt_after && reachable_before == reachable_after) |
| 125 | return; /* Nothing changed, ignore this checkresult. */ |
| 126 | } |
| 127 | |
| 128 | String output; |
| 129 | if (cr) |
| 130 | output = CompatUtility::GetCheckResultOutput(cr); |
| 131 | |
| 132 | std::ostringstream msgbuf; |
| 133 | |
| 134 | if (service) { |
| 135 | msgbuf << "SERVICE ALERT: " |
| 136 | << host->GetName() << ";" |
| 137 | << service->GetShortName() << ";" |
| 138 | << Service::StateToString(service->GetState()) << ";" |
| 139 | << Checkable::StateTypeToString(service->GetStateType()) << ";" |
| 140 | << attempt_after << ";" |
| 141 | << output << "" |
| 142 | << ""; |
| 143 | } else { |
| 144 | String state = Host::StateToString(Host::CalculateState(static_cast<ServiceState>(state_after))); |
| 145 | |
| 146 | msgbuf << "HOST ALERT: " |
| 147 | << host->GetName() << ";" |
| 148 | << GetHostStateString(host) << ";" |
| 149 | << Checkable::StateTypeToString(host->GetStateType()) << ";" |
| 150 | << attempt_after << ";" |
| 151 | << output << "" |
| 152 | << ""; |
| 153 | |
| 154 | } |
| 155 | |
| 156 | { |
| 157 | ObjectLock olock(this); |
| 158 | WriteLine(msgbuf.str()); |
| 159 | Flush(); |