mirror of https://github.com/Icinga/icinga2.git
parent
e2290d5012
commit
ce2735f10b
|
@ -264,6 +264,17 @@ void ConfigItem::Register(void)
|
|||
m_UnnamedItems.push_back(this);
|
||||
} else {
|
||||
boost::mutex::scoped_lock lock(m_Mutex);
|
||||
|
||||
ItemMap::const_iterator it = m_Items[m_Type].find(m_Name);
|
||||
|
||||
if (it != m_Items[m_Type].end()) {
|
||||
std::ostringstream msgbuf;
|
||||
msgbuf << "A configuration item of type '" << GetType()
|
||||
<< "' and name '" << GetName() << "' already exists ("
|
||||
<< it->second->GetDebugInfo() << "), new declaration: " << GetDebugInfo();
|
||||
BOOST_THROW_EXCEPTION(ScriptError(msgbuf.str()));
|
||||
}
|
||||
|
||||
m_Items[m_Type][m_Name] = this;
|
||||
}
|
||||
}
|
||||
|
@ -447,7 +458,7 @@ bool ConfigItem::CommitItems(WorkQueue& upq)
|
|||
|
||||
BOOST_FOREACH(const ItemCountMap::value_type& kv, itemCounts) {
|
||||
Log(LogInformation, "ConfigItem")
|
||||
<< "Instantiated " << kv.second << " " << kv.first->GetPluralName() << ".";
|
||||
<< "Instantiated " << kv.second << " " << (kv.second != 1 ? kv.first->GetPluralName() : kv.first->GetName()) << ".";
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -104,6 +104,7 @@ int IcingaApplication::Main(void)
|
|||
l_RetentionTimer->Start();
|
||||
|
||||
/* restore modified attributes */
|
||||
if (Utility::PathExists(GetModAttrPath())) {
|
||||
Expression *expression = ConfigCompiler::CompileFile(GetModAttrPath());
|
||||
|
||||
if (expression) {
|
||||
|
@ -115,6 +116,9 @@ int IcingaApplication::Main(void)
|
|||
}
|
||||
}
|
||||
|
||||
delete expression;
|
||||
}
|
||||
|
||||
RunEventLoop();
|
||||
|
||||
Log(LogInformation, "IcingaApplication", "Icinga has shut down.");
|
||||
|
|
|
@ -90,21 +90,23 @@ bool CreateObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& r
|
|||
}
|
||||
}
|
||||
|
||||
Dictionary::Ptr result1 = new Dictionary();
|
||||
int code;
|
||||
String status;
|
||||
|
||||
try {
|
||||
ConfigItem::Ptr item = builder->Compile();
|
||||
item->Register();
|
||||
|
||||
WorkQueue upq;
|
||||
|
||||
Dictionary::Ptr result1 = new Dictionary();
|
||||
int code;
|
||||
String status;
|
||||
|
||||
if (!ConfigItem::CommitItems(upq) || !ConfigItem::ActivateItems(upq, false)) {
|
||||
code = 500;
|
||||
status = "Object could not be created.";
|
||||
|
||||
Array::Ptr errors = new Array();
|
||||
BOOST_FOREACH(const boost::exception_ptr& ex, upq.GetExceptions()) {
|
||||
BOOST_FOREACH(const boost::exception_ptr& ex, upq.GetExceptions())
|
||||
{
|
||||
errors->Add(DiagnosticInformation(ex));
|
||||
}
|
||||
result1->Set("errors", errors);
|
||||
|
@ -112,6 +114,14 @@ bool CreateObjectHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& r
|
|||
code = 200;
|
||||
status = "Object created";
|
||||
}
|
||||
} catch (const std::exception& ex) {
|
||||
code = 500;
|
||||
status = "Object could not be created.";
|
||||
|
||||
Array::Ptr errors = new Array();
|
||||
errors->Add(DiagnosticInformation(ex));
|
||||
result1->Set("errors", errors);
|
||||
}
|
||||
|
||||
result1->Set("code", code);
|
||||
result1->Set("status", status);
|
||||
|
|
Loading…
Reference in New Issue