1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-11-03 17:13:17 +03:00
Files
mariadb-columnstore-engine/snmpd/snmpmanager/alarm.cpp
2016-01-06 14:08:59 -06:00

220 lines
4.2 KiB
C++

/* Copyright (C) 2014 InfiniDB, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2 of
the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA. */
/******************************************************************************************
* Author: Zhixuan Zhu
******************************************************************************************/
#include <cstring>
#include "alarm.h"
#include "liboamcpp.h"
using namespace std;
using namespace oam;
namespace snmpmanager {
Alarm::Alarm()
{
// alarm receive time
Oam oam;
setTimestamp (oam.getCurrentTime());
time_t cal;
time (&cal);
setTimestampSeconds (cal);
}
Alarm::~Alarm()
{
}
void Alarm::setAlarmID (const uint16_t id)
{
alarmID = id;
}
void Alarm::setDesc (const string& d)
{
desc = d;
}
void Alarm::setComponentID (const string& id)
{
componentID = id;
}
void Alarm::setSeverity (const uint16_t s)
{
severity = s;
}
void Alarm::setState (const bool s)
{
state = s;
}
void Alarm::setCtnThreshold (const uint16_t ctn)
{
ctnThreshold = ctn;
}
void Alarm::setOccurrence (const uint16_t o)
{
occurrence = o;
}
void Alarm::setLastIssueTime (const uint32_t time)
{
lastIssueTime = time;
}
void Alarm::setPid (const uint16_t p)
{
pid = p;
}
void Alarm::setTid (const uint16_t t)
{
tid = t;
}
void Alarm::setTimestamp (const string& t)
{
timestamp = t;
}
void Alarm::setTimestampSeconds (const time_t& t)
{
timestampseconds = t;
}
void Alarm::setSname (const string& s)
{
sname = s;
}
void Alarm::setPname (const string& p)
{
pname = p;
}
istream &operator >>(istream &input, Alarm &alarm)
{
char buf[100] = {0};
alarm.setAlarmID (INVALID_ALARM_ID);
while (!input.eof() && strcmp (buf, "") == 0)
{
input.getline (buf, 100);
}
if (input.eof())
return input;
// Alarm ID
alarm.setAlarmID (atoi (buf));
// Severity
input.getline (buf, 100);
if (strstr (buf, "CRITICAL") != 0)
alarm.setSeverity (CRITICAL);
else if (strstr (buf, "MAJOR") != 0)
alarm.setSeverity (MAJOR);
else if (strstr (buf, "MINOR") != 0)
alarm.setSeverity (MINOR);
else if (strstr (buf, "WARNING") != 0)
alarm.setSeverity (WARNING);
else if (strstr (buf, "INFORMATIONAL") != 0)
alarm.setSeverity (INFORMATIONAL);
else
alarm.setSeverity (NO_SEVERITY);
// state
if (strstr (buf, "CLEARED") != 0)
alarm.setState (0);
else
alarm.setState (1);
// Desc
input.getline (buf, 100);
alarm.setDesc (buf);
// Timestamp
input.getline (buf, 100);
alarm.setTimestamp (buf);
// Timestamp Seconds
input.getline (buf, 100);
Oam oam;
alarm.setTimestampSeconds (atoi(buf));
// Reporting server name
input.getline (buf, 100);
alarm.setSname (buf);
// Reporting process name
input.getline (buf, 100);
alarm.setPname (buf);
// fault device name
input.getline (buf, 100);
alarm.setComponentID (buf);
input.ignore (100, '\n');
return input;
}
ostream &operator<< (ostream &output, const Alarm &alarm)
{
output << alarm.getAlarmID() << endl;
if (alarm.getState() == 0)
output << "CLEARED ";
switch (alarm.getSeverity())
{
case CRITICAL:
output << "CRITICAL ALARM" << endl;
break;
case MAJOR:
output << "MAJOR ALARM" << endl;
break;
case MINOR:
output << "MINOR ALARM" << endl;
break;
case WARNING:
output << "WARNING ALARM" << endl;
break;
case INFORMATIONAL:
output << "INFORMATIONAL ALARM" << endl;
break;
case NO_SEVERITY:
output << "NO_SEVERITY ALARM" << endl;
break;
}
output << alarm.getDesc() << endl;
output << alarm.getTimestamp() << endl;
output << alarm.getTimestampSeconds() << endl;
output << alarm.getSname() << endl;
output << alarm.getPname() << endl;
output << alarm.getComponentID() << endl;
output << endl;
return output;
}
} //namespace snmpmanager