source: nscp/modules/CheckEventLog/filter.cpp @ a78a985

0.4.00.4.10.4.2
Last change on this file since a78a985 was a78a985, checked in by Michael Medin <michael@…>, 21 months ago
  • Cleaned up some dependencies (on config.h)
  • Fixed invalid data in config.h.in
  • Property mode set to 100644
File size: 5.0 KB
Line 
1#include "StdAfx.h"
2
3#include <map>
4#include <list>
5
6#include <boost/bind.hpp>
7#include <boost/assign.hpp>
8
9#include <parsers/where.hpp>
10#include <parsers/filter/where_filter.hpp>
11#include <parsers/filter/where_filter_impl.hpp>
12
13#include <parsers/where/unary_fun.hpp>
14#include <parsers/where/list_value.hpp>
15#include <parsers/where/binary_op.hpp>
16#include <parsers/where/unary_op.hpp>
17#include <parsers/where/variable.hpp>
18
19#include <simple_timer.hpp>
20#include <strEx.h>
21#include "filter.hpp"
22
23//#include <config.h>
24
25using namespace boost::assign;
26using namespace parsers::where;
27
28eventlog_filter::filter_obj::expression_ast_type eventlog_filter::filter_obj::fun_convert_severity(parsers::where::value_type target_type, parsers::where::filter_handler handler, expression_ast_type const& subject) {
29        return expression_ast_type(parsers::where::int_value(convert_severity(subject.get_string(handler))));
30}
31eventlog_filter::filter_obj::expression_ast_type eventlog_filter::filter_obj::fun_convert_type(parsers::where::value_type target_type, parsers::where::filter_handler handler, expression_ast_type const& subject) {
32        return expression_ast_type(parsers::where::int_value(convert_type(subject.get_string(handler))));
33}
34
35std::wstring eventlog_filter::filter_obj::render(std::wstring syntax, std::wstring datesyntax) {
36        return record.render(true, syntax, datesyntax);
37}
38
39
40//////////////////////////////////////////////////////////////////////////
41
42
43
44eventlog_filter::filter_obj_handler::filter_obj_handler() {
45        using namespace boost::assign;
46        using namespace parsers::where;
47        insert(types)
48                (_T("id"), (type_int))
49                (_T("source"), (type_string))
50                (_T("type"), (type_custom_type))
51                (_T("severity"), (type_custom_severity))
52                (_T("message"), (type_string))
53                (_T("strings"), (type_string))
54                (_T("written"), (type_date))
55                (_T("generated"), (type_date));
56}
57
58bool eventlog_filter::filter_obj_handler::has_variable(std::wstring key) {
59        return types.find(key) != types.end();
60}
61parsers::where::value_type eventlog_filter::filter_obj_handler::get_type(std::wstring key) {
62        types_type::const_iterator cit = types.find(key);
63        if (cit == types.end())
64                return parsers::where::type_invalid;
65        return cit->second;
66}
67bool eventlog_filter::filter_obj_handler::can_convert(parsers::where::value_type from, parsers::where::value_type to) {
68        if ((from == parsers::where::type_string)&&(to == type_custom_severity))
69                return true;
70        if ((from == parsers::where::type_string)&&(to == type_custom_type))
71                return true;
72        return false;
73}
74eventlog_filter::filter_obj_handler::base_handler::bound_string_type eventlog_filter::filter_obj_handler::bind_simple_string(std::wstring key) {
75        base_handler::bound_string_type ret;
76        if (key == _T("source"))
77                ret = &filter_obj::get_source;
78        else if (key == _T("message"))
79                ret = &filter_obj::get_message;
80        else if (key == _T("strings"))
81                ret = &filter_obj::get_strings;
82        else
83                NSC_DEBUG_MSG_STD(_T("Failed to bind (string): ") + key);
84        return ret;
85}
86eventlog_filter::filter_obj_handler::base_handler::bound_int_type eventlog_filter::filter_obj_handler::bind_simple_int(std::wstring key) {
87        base_handler::bound_int_type ret;
88        if (key == _T("id"))
89                ret = &filter_obj::get_id;
90        else if (key == _T("type"))
91                ret = &filter_obj::get_el_type;
92        else if (key == _T("severity"))
93                ret = &filter_obj::get_severity;
94        else if (key == _T("generated"))
95                ret = &filter_obj::get_generated;
96        else if (key == _T("written"))
97                ret = &filter_obj::get_written;
98        else
99                NSC_DEBUG_MSG_STD(_T("Failed to bind (int): ") + key);
100        return ret;
101}
102
103bool eventlog_filter::filter_obj_handler::has_function(parsers::where::value_type to, std::wstring name, expression_ast_type *subject) {
104        if (to == type_custom_severity)
105                return true;
106        if (to == type_custom_type)
107                return true;
108        return false;
109}
110eventlog_filter::filter_obj_handler::base_handler::bound_function_type eventlog_filter::filter_obj_handler::bind_simple_function(parsers::where::value_type to, std::wstring name, expression_ast_type *subject) {
111        base_handler::bound_function_type ret;
112        if (to == type_custom_severity)
113                ret = &filter_obj::fun_convert_severity;
114        if (to == type_custom_type)
115                ret = &filter_obj::fun_convert_type;
116        return ret;
117}
118
119//////////////////////////////////////////////////////////////////////////
120
121eventlog_filter::filter_engine eventlog_filter::factories::create_engine(eventlog_filter::filter_argument arg) {
122        return filter_engine(new filter_engine_type(arg));
123}
124eventlog_filter::filter_argument eventlog_filter::factories::create_argument(std::wstring syntax, std::wstring datesyntax) {
125        return filter_argument(new eventlog_filter::filter_argument_type(eventlog_filter::filter_argument_type::error_type(new where_filter::nsc_error_handler()), syntax, datesyntax));
126}
127
128eventlog_filter::filter_result eventlog_filter::factories::create_result(eventlog_filter::filter_argument arg) {
129        return filter_result(new where_filter::simple_count_result<filter_obj>(arg));
130}
131
132
133
134
135
Note: See TracBrowser for help on using the repository browser.