Skip to content

Commit

Permalink
Livestatus: Add statehist table.
Browse files Browse the repository at this point in the history
Fixes #4434
  • Loading branch information
Michael Friedrich committed Nov 6, 2013
1 parent 5e68746 commit 835e395
Show file tree
Hide file tree
Showing 8 changed files with 876 additions and 1 deletion.
2 changes: 1 addition & 1 deletion components/livestatus/CMakeLists.txt
Expand Up @@ -19,7 +19,7 @@ mkclass_target(listener.ti listener.th)

mkembedconfig_target(livestatus-type.conf livestatus-type.cpp)

add_library(livestatus SHARED aggregator.cpp andfilter.cpp attributefilter.cpp avgaggregator.cpp column.cpp combinerfilter.cpp commandstable.cpp commentstable.cpp contactgroupstable.cpp contactstable.cpp countaggregator.cpp downtimestable.cpp filter.cpp hostgroupstable.cpp hoststable.cpp invavgaggregator.cpp invsumaggregator.cpp listener.cpp listener.th logtable.cpp maxaggregator.cpp minaggregator.cpp negatefilter.cpp orfilter.cpp query.cpp servicegroupstable.cpp servicestable.cpp statustable.cpp stdaggregator.cpp sumaggregator.cpp table.cpp timeperiodstable.cpp livestatus-type.cpp)
add_library(livestatus SHARED aggregator.cpp andfilter.cpp attributefilter.cpp avgaggregator.cpp column.cpp combinerfilter.cpp commandstable.cpp commentstable.cpp contactgroupstable.cpp contactstable.cpp countaggregator.cpp downtimestable.cpp filter.cpp hostgroupstable.cpp hoststable.cpp invavgaggregator.cpp invsumaggregator.cpp listener.cpp listener.th logtable.cpp maxaggregator.cpp minaggregator.cpp negatefilter.cpp orfilter.cpp query.cpp servicegroupstable.cpp servicestable.cpp statehisttable.cpp statustable.cpp stdaggregator.cpp sumaggregator.cpp table.cpp timeperiodstable.cpp livestatus-type.cpp)

target_link_libraries(livestatus ${Boost_LIBRARIES} base config icinga)

Expand Down
722 changes: 722 additions & 0 deletions components/livestatus/statehisttable.cpp

Large diffs are not rendered by default.

125 changes: 125 additions & 0 deletions components/livestatus/statehisttable.h
@@ -0,0 +1,125 @@
/******************************************************************************
* Icinga 2 *
* Copyright (C) 2012-2013 Icinga Development Team (http://www.icinga.org/) *
* *
* 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; either version 2 *
* of the License, or (at your option) any later version. *
* *
* 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 St, Fifth Floor, Boston, MA 02110-1301, USA. *
******************************************************************************/

#ifndef STATEHISTTABLE_H
#define STATEHISTTABLE_H

#include "icinga/service.h"
#include "livestatus/table.h"
#include <boost/thread/mutex.hpp>

using namespace icinga;

namespace livestatus
{

enum LogStateHistType {
LogStateHistTypeHostAlert,
LogStateHistTypeHostDowntimeAlert,
LogStateHistTypeHostFlapping,
LogStateHistTypeHostNotification,
LogStateHistTypeHostInitialState,
LogStateHistTypeHostCurrentState,
LogStateHistTypeServiceAlert,
LogStateHistTypeServiceDowntimeAlert,
LogStateHistTypeServiceFlapping,
LogStateHistTypeServiceNotification,
LogStateHistTypeServiceInitialState,
LogStateHistTypeServiceCurrentState,
LogStateHistTypeTimeperiodTransition,
LogStateHistTypeVersion,
LogStateHistTypeInitialStates,
LogStateHistTypeProgramStarting
};

enum LogStateHistClass {
LogStateHistClassInfo = 0,
LogStateHistClassAlert = 1,
LogStateHistClassProgram = 2,
LogStateHistClassNotification = 3,
LogStateHistClassPassive = 4,
LogStateHistClassCommand = 5,
LogStateHistClassState = 6,
LogStateHistClassText = 7
};

/**
* @ingroup livestatus
*/
class StateHistTable : public Table
{
public:
DECLARE_PTR_TYPEDEFS(StateHistTable);

StateHistTable(const unsigned long& from, const unsigned long& until);

static void AddColumns(Table *table, const String& prefix = String(),
const Column::ObjectAccessor& objectAccessor = Column::ObjectAccessor());

virtual String GetName(void) const;

protected:
virtual void FetchRows(const AddRowFunction& addRowFn);

static Object::Ptr HostAccessor(const Value& row, const Column::ObjectAccessor& parentObjectAccessor);
static Object::Ptr ServiceAccessor(const Value& row, const Column::ObjectAccessor& parentObjectAccessor);

static Value TimeAccessor(const Value& row);
static Value LinenoAccessor(const Value& row);
static Value FromAccessor(const Value& row);
static Value UntilAccessor(const Value& row);
static Value DurationAccessor(const Value& row);
static Value DurationPartAccessor(const Value& row);
static Value StateAccessor(const Value& row);
static Value HostDownAccessor(const Value& row);
static Value InDowntimeAccessor(const Value& row);
static Value InHostDowntimeAccessor(const Value& row);
static Value IsFlappingAccessor(const Value& row);
static Value InNotificationPeriodAccessor(const Value& row);
static Value NotificationPeriodAccessor(const Value& row);
static Value HostNameAccessor(const Value& row);
static Value ServiceDescriptionAccessor(const Value& row);
static Value LogOutputAccessor(const Value& row);
static Value DurationOkAccessor(const Value& row);
static Value DurationPartOkAccessor(const Value& row);
static Value DurationWarningAccessor(const Value& row);
static Value DurationPartWarningAccessor(const Value& row);
static Value DurationCriticalAccessor(const Value& row);
static Value DurationPartCriticalAccessor(const Value& row);
static Value DurationUnknownAccessor(const Value& row);
static Value DurationPartUnknownAccessor(const Value& row);
static Value DurationUnmonitoredAccessor(const Value& row);
static Value DurationPartUnmonitoredAccessor(const Value& row);

private:
std::map<unsigned long, String> m_LogFileIndex;
std::map<Service::Ptr, Array::Ptr> m_ServicesCache;
unsigned long m_TimeFrom;
unsigned long m_TimeUntil;
boost::mutex m_Mutex;

void CreateLogIndex(const String& path);
static void CreateLogIndexFileHandler(const String& path, std::map<unsigned long, String>& index);
void GetLogStateHistClassType(const String& text, int& log_class, int& log_type);
Dictionary::Ptr GetStateHistAttributes(const String& type, const String& options);
};

}

#endif /* STATEHISTTABLE_H */
3 changes: 3 additions & 0 deletions components/livestatus/table.cpp
Expand Up @@ -30,6 +30,7 @@
#include "livestatus/downtimestable.h"
#include "livestatus/timeperiodstable.h"
#include "livestatus/logtable.h"
#include "livestatus/statehisttable.h"
#include "livestatus/filter.h"
#include "base/array.h"
#include "base/dictionary.h"
Expand Down Expand Up @@ -70,6 +71,8 @@ Table::Ptr Table::GetByName(const String& name, const unsigned long& from, const
return boost::make_shared<TimePeriodsTable>();
else if (name == "log")
return boost::make_shared<LogTable>(from, until);
else if (name == "statehist")
return boost::make_shared<StateHistTable>(from, until);

return Table::Ptr();
}
Expand Down
5 changes: 5 additions & 0 deletions test/livestatus/queries/statehist/duration
@@ -0,0 +1,5 @@
GET statehist
Columns: host_name service_description state duration_ok duration_warning duration_critical duration_unknown duration_unmonitored
Filter: time >= 1348657741
ResponseHeader: fixed16

5 changes: 5 additions & 0 deletions test/livestatus/queries/statehist/statehist
@@ -0,0 +1,5 @@
GET statehist
Columns: host_name service_description state duration duration_part in_downtime in_host_downtime in_notification_period is_flapping
Filter: time >= 1348657741
ResponseHeader: fixed16

6 changes: 6 additions & 0 deletions test/livestatus/queries/statehist/statehist_disk
@@ -0,0 +1,6 @@
GET statehist
Columns: host_name service_description state duration duration_part in_downtime in_host_downtime in_notification_period is_flapping
Filter: service_description = disk
Filter: time >= 1348657741
ResponseHeader: fixed16

9 changes: 9 additions & 0 deletions test/livestatus/queries/statehist/sum
@@ -0,0 +1,9 @@
GET statehist
Columns: host_name service_description state duration duration_part
Filter: host_name = localhost
Filter: service_description = disk
Filter: time >= 1348657741
Stats: sum duration
Stats: sum duration_part
ResponseHeader: fixed16

0 comments on commit 835e395

Please sign in to comment.