else
query1.Table = "hoststatus";
- query1.Type = DbQueryUpdate;
+ query1.Type = DbQueryInsert | DbQueryUpdate;
query1.Category = DbCatState;
+ query1.StatusUpdate = true;
+ query1.Object = DbObject::GetOrCreateByObject(checkable);
Dictionary::Ptr fields1 = new Dictionary();
fields1->Set("next_check", DbValue::FromTimestamp(nextCheck));
else
query1.Table = "hoststatus";
- query1.Type = DbQueryUpdate;
+ query1.Type = DbQueryInsert | DbQueryUpdate;
query1.Category = DbCatState;
+ query1.StatusUpdate = true;
+ query1.Object = DbObject::GetOrCreateByObject(checkable);
Dictionary::Ptr fields1 = new Dictionary();
fields1->Set("is_flapping", CompatUtility::GetCheckableIsFlapping(checkable));
else
query1.Table = "hoststatus";
- query1.Type = DbQueryUpdate;
+ query1.Type = DbQueryInsert | DbQueryUpdate;
query1.Category = DbCatState;
+ query1.StatusUpdate = true;
+ query1.Object = DbObject::GetOrCreateByObject(checkable);
Dictionary::Ptr fields1 = new Dictionary();
fields1->Set("last_notification", DbValue::FromTimestamp(now_bag.first));
else
query1.Table = "hoststatus";
- query1.Type = DbQueryUpdate;
+ query1.Type = DbQueryInsert | DbQueryUpdate;
query1.Category = DbCatState;
+ query1.StatusUpdate = true;
+ query1.Object = DbObject::GetOrCreateByObject(checkable);
Dictionary::Ptr fields1 = new Dictionary();
else
query4.Table = "hoststatus";
- query4.Type = DbQueryUpdate;
+ query4.Type = DbQueryInsert | DbQueryUpdate;
+ query4.Category = DbCatState;
+ query4.StatusUpdate = true;
+ query4.Object = DbObject::GetOrCreateByObject(checkable);
Dictionary::Ptr fields4 = new Dictionary();
fields4->Set("scheduled_downtime_depth", checkable->GetDowntimeDepth());
else
query1.Table = "hoststatus";
- query1.Type = DbQueryUpdate;
- query1.Category = DbCatAcknowledgement;
+ query1.Type = DbQueryInsert | DbQueryUpdate;
+ query1.Category = DbCatState;
+ query1.StatusUpdate = true;
+ query1.Object = DbObject::GetOrCreateByObject(checkable);
Dictionary::Ptr fields1 = new Dictionary();
fields1->Set("acknowledgement_type", type);
query.Table = "customvariablestatus";
query.Type = DbQueryInsert | DbQueryUpdate;
query.Category = DbCatState;
- query.StatusUpdate = true;
query.Fields = fields;
query.WhereCriteria = new Dictionary();
fields->Set("next_notification", DbValue::FromTimestamp(CompatUtility::GetCheckableNotificationNextNotification(host)));
fields->Set("no_more_notifications", Empty);
fields->Set("notifications_enabled", CompatUtility::GetCheckableNotificationsEnabled(host));
- fields->Set("problem_has_been_acknowledged", CompatUtility::GetCheckableProblemHasBeenAcknowledged(host));
- fields->Set("acknowledgement_type", CompatUtility::GetCheckableAcknowledgementType(host));
+ {
+ ObjectLock olock(host);
+ fields->Set("problem_has_been_acknowledged", CompatUtility::GetCheckableProblemHasBeenAcknowledged(host));
+ fields->Set("acknowledgement_type", CompatUtility::GetCheckableAcknowledgementType(host));
+ }
fields->Set("current_notification_number", CompatUtility::GetCheckableNotificationNotificationNumber(host));
fields->Set("passive_checks_enabled", CompatUtility::GetCheckablePassiveChecksEnabled(host));
fields->Set("active_checks_enabled", CompatUtility::GetCheckableActiveChecksEnabled(host));
fields->Set("next_notification", DbValue::FromTimestamp(CompatUtility::GetCheckableNotificationNextNotification(service)));
fields->Set("no_more_notifications", Empty);
fields->Set("notifications_enabled", CompatUtility::GetCheckableNotificationsEnabled(service));
- fields->Set("problem_has_been_acknowledged", CompatUtility::GetCheckableProblemHasBeenAcknowledged(service));
- fields->Set("acknowledgement_type", CompatUtility::GetCheckableAcknowledgementType(service));
+ {
+ ObjectLock olock(service);
+ fields->Set("problem_has_been_acknowledged", CompatUtility::GetCheckableProblemHasBeenAcknowledged(service));
+ fields->Set("acknowledgement_type", CompatUtility::GetCheckableAcknowledgementType(service));
+ }
fields->Set("current_notification_number", CompatUtility::GetCheckableNotificationNotificationNumber(service));
fields->Set("passive_checks_enabled", CompatUtility::GetCheckablePassiveChecksEnabled(service));
fields->Set("active_checks_enabled", CompatUtility::GetCheckableActiveChecksEnabled(service));
hasid = GetConfigUpdate(query.Object);
else if (query.StatusUpdate)
hasid = GetStatusUpdate(query.Object);
- else
- ASSERT(!"Invalid query flags.");
if (!hasid)
upsert = true;
return;
}
- if (query.Object) {
- if (query.ConfigUpdate)
+ if (type == DbQueryInsert && query.Object) {
+ if (query.ConfigUpdate) {
+ SetInsertID(query.Object, GetLastInsertID());
SetConfigUpdate(query.Object, true);
- else if (query.StatusUpdate)
+ } else if (query.StatusUpdate)
SetStatusUpdate(query.Object, true);
-
- if (type == DbQueryInsert && query.ConfigUpdate)
- SetInsertID(query.Object, GetLastInsertID());
}
if (type == DbQueryInsert && query.Table == "notifications" && query.NotificationObject) { // FIXME remove hardcoded table name
return;
}
- if (query.Object) {
- if (query.ConfigUpdate)
- SetConfigUpdate(query.Object, true);
- else if (query.StatusUpdate)
- SetStatusUpdate(query.Object, true);
-
- if (type == DbQueryInsert && query.ConfigUpdate) {
+ if (type == DbQueryInsert && query.Object) {
+ if (query.ConfigUpdate) {
String idField = query.IdColumn;
if (idField.IsEmpty())
idField = query.Table.SubStr(0, query.Table.GetLength() - 1) + "_id";
SetInsertID(query.Object, GetSequenceValue(GetTablePrefix() + query.Table, idField));
- }
+
+ SetConfigUpdate(query.Object, true);
+ } else if (query.StatusUpdate)
+ SetStatusUpdate(query.Object, true);
}
if (type == DbQueryInsert && query.Table == "notifications" && query.NotificationObject) { // FIXME remove hardcoded table name