blob: 51f043159c6b3f740f762fb97c9a408fbb6b12ad [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
#include "Broker.h"
#include "ClassKey.h"
#include "Schema.h"
#include "Event.h"
#include "Value.h"
#include "qpid/sys/Time.h"
#include "qpid/framing/Buffer.h"
using namespace qpid::console;
using namespace std;
using qpid::framing::Uuid;
using qpid::framing::FieldTable;
Event::Event(Broker* _broker, SchemaClass* _schema, framing::Buffer& buffer) :
broker(_broker), schema(_schema)
{
timestamp = buffer.getLongLong();
severity = (Severity) buffer.getOctet();
for (vector<SchemaArgument*>::const_iterator aIter = schema->arguments.begin();
aIter != schema->arguments.end(); aIter++) {
SchemaArgument* argument = *aIter;
attributes[argument->name] = argument->decodeValue(buffer);
}
}
const ClassKey& Event::getClassKey() const
{
return schema->getClassKey();
}
string Event::getSeverityString() const
{
switch (severity) {
case EMERGENCY : return string("EMER");
case ALERT : return string("ALERT");
case CRITICAL : return string("CRIT");
case ERROR : return string("ERROR");
case WARNING : return string("WARN");
case NOTICE : return string("NOTIC");
case INFO : return string("INFO");
case DEBUG : return string("DEBUG");
}
return string("<UNKNOWN>");
}
ObjectId Event::attrRef(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return ObjectId();
Value::Ptr val = iter->second;
if (!val->isObjectId())
return ObjectId();
return val->asObjectId();
}
uint32_t Event::attrUint(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return 0;
Value::Ptr val = iter->second;
if (!val->isUint())
return 0;
return val->asUint();
}
int32_t Event::attrInt(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return 0;
Value::Ptr val = iter->second;
if (!val->isInt())
return 0;
return val->asInt();
}
uint64_t Event::attrUint64(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return 0;
Value::Ptr val = iter->second;
if (!val->isUint64())
return 0;
return val->asUint64();
}
int64_t Event::attrInt64(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return 0;
Value::Ptr val = iter->second;
if (!val->isInt64())
return 0;
return val->asInt64();
}
string Event::attrString(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return string();
Value::Ptr val = iter->second;
if (!val->isString())
return string();
return val->asString();
}
bool Event::attrBool(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return false;
Value::Ptr val = iter->second;
if (!val->isBool())
return false;
return val->asBool();
}
float Event::attrFloat(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return 0.0;
Value::Ptr val = iter->second;
if (!val->isFloat())
return 0.0;
return val->asFloat();
}
double Event::attrDouble(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return 0.0;
Value::Ptr val = iter->second;
if (!val->isDouble())
return 0.0;
return val->asDouble();
}
Uuid Event::attrUuid(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return Uuid();
Value::Ptr val = iter->second;
if (!val->isUuid())
return Uuid();
return val->asUuid();
}
FieldTable Event::attrMap(const string& key) const
{
Object::AttributeMap::const_iterator iter = attributes.find(key);
if (iter == attributes.end())
return FieldTable();
Value::Ptr val = iter->second;
if (!val->isMap())
return FieldTable();
return val->asMap();
}
std::ostream& qpid::console::operator<<(std::ostream& o, const Event& event)
{
const ClassKey& key = event.getClassKey();
sys::AbsTime aTime(sys::AbsTime(), sys::Duration(event.getTimestamp()));
o << aTime << " " << event.getSeverityString() << " " <<
key.getPackageName() << ":" << key.getClassName() <<
" broker=" << event.getBroker()->getUrl();
const Object::AttributeMap& attributes = event.getAttributes();
for (Object::AttributeMap::const_iterator iter = attributes.begin();
iter != attributes.end(); iter++) {
o << " " << iter->first << "=" << iter->second->str();
}
return o;
}