Example #1
0
void ServiceDbObject::OnConfigUpdate(void)
{
	Service::Ptr service = static_pointer_cast<Service>(GetObject());

	/* service dependencies */
	Log(LogDebug, "ido", "service dependencies for '" + service->GetName() + "'");

	DbQuery query_del1;
	query_del1.Table = GetType()->GetTable() + "dependencies";
	query_del1.Type = DbQueryDelete;
	query_del1.WhereCriteria = boost::make_shared<Dictionary>();
	query_del1.WhereCriteria->Set("dependent_service_object_id", service);
	OnQuery(query_del1);

	BOOST_FOREACH(const Service::Ptr& parent, service->GetParentServices()) {
		Log(LogDebug, "ido", "service parents: " + parent->GetName());

                /* service dependencies */
                Dictionary::Ptr fields1 = boost::make_shared<Dictionary>();
                fields1->Set("service_object_id", parent);
                fields1->Set("dependent_service_object_id", service);
                fields1->Set("instance_id", 0); /* DbConnection class fills in real ID */

                DbQuery query1;
                query1.Table = GetType()->GetTable() + "dependencies";
                query1.Type = DbQueryInsert;
                query1.Fields = fields1;
                OnQuery(query1);
	}

	/* custom variables */
	Log(LogDebug, "ido", "service customvars for '" + service->GetName() + "'");

	DbQuery query_del2;
	query_del2.Table = "customvariables";
	query_del2.Type = DbQueryDelete;
	query_del2.WhereCriteria = boost::make_shared<Dictionary>();
	query_del2.WhereCriteria->Set("object_id", service);
	OnQuery(query_del2);

	Dictionary::Ptr customvars;

	{
		ObjectLock olock(service);
		customvars = CompatUtility::GetCustomVariableConfig(service);
	}

	if (customvars) {
		ObjectLock olock (customvars);

		String key;
		Value value;
		BOOST_FOREACH(boost::tie(key, value), customvars) {
			Log(LogDebug, "ido", "service customvar key: '" + key + "' value: '" + Convert::ToString(value) + "'");

			Dictionary::Ptr fields2 = boost::make_shared<Dictionary>();
			fields2->Set("varname", Convert::ToString(key));
			fields2->Set("varvalue", Convert::ToString(value));
			fields2->Set("config_type", 1);
			fields2->Set("has_been_modified", 0);
			fields2->Set("object_id", service);
			fields2->Set("instance_id", 0); /* DbConnection class fills in real ID */

			DbQuery query2;
			query2.Table = "customvariables";
			query2.Type = DbQueryInsert;
			query2.Fields = fields2;
			OnQuery(query2);
		}
	}