void ContextTrace::Print(std::ostream& fp) const
{
+ if (m_Frames.empty())
+ return;
+
fp << std::endl;
int i = 0;
if (di.Path.IsEmpty())
return;
- out << "Location: " << di << "\n";
+ out << "Location: " << di;
std::ifstream ifs;
ifs.open(di.Path.CStr(), std::ifstream::in);
char line[1024];
while (ifs.good() && lineno <= di.LastLine + EXTRA_LINES) {
+ if (lineno == 0)
+ out << "\n";
+
lineno++;
ifs.getline(line, sizeof(line));
using namespace icinga;
-EventQueue::EventQueue(void)
- : m_Filter(NULL)
+EventQueue::EventQueue(const String& name)
+ : m_Name(name), m_Filter(NULL)
{ }
EventQueue::~EventQueue(void)
ScriptFrame frame;
frame.Sandboxed = true;
- if (!FilterUtility::EvaluateFilter(frame, m_Filter, event, "event"))
+ try {
+ if (!FilterUtility::EvaluateFilter(frame, m_Filter, event, "event"))
+ return;
+ } catch (const std::exception& ex) {
+ Log(LogWarning, "EventQueue")
+ << "Error occurred while evaluating event filter for queue '" << m_Name << "': " << DiagnosticInformation(ex);
return;
+ }
boost::mutex::scoped_lock lock(m_Mutex);
public:
DECLARE_PTR_TYPEDEFS(EventQueue);
- EventQueue(void);
+ EventQueue(const String& name);
~EventQueue(void);
bool CanProcessEvent(const String& type) const;
static void Unregister(const String& name);
private:
+ String m_Name;
+
mutable boost::mutex m_Mutex;
boost::condition_variable m_CV;
EventQueue::Ptr queue = EventQueue::GetByName(queueName);
if (!queue) {
- queue = new EventQueue();
+ queue = new EventQueue(queueName);
EventQueue::Register(queueName, queue);
}