Merge branch 'ff/tail'
[collectd.git] / src / utils_match.h
1 /**
2  * collectd - src/utils_match.h
3  * Copyright (C) 2008  Florian octo Forster
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; either version 2 of the License, or (at your
8  * option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
18  *
19  * Authors:
20  *   Florian octo Forster <octo at verplant.org>
21  **/
22
23 #ifndef UTILS_MATCH_H
24 #define UTILS_MATCH_H 1
25
26 #include "plugin.h"
27
28 /*
29  * Defines
30  */
31 #define UTILS_MATCH_DS_TYPE_GAUGE       0
32 #define UTILS_MATCH_DS_TYPE_COUNTER_SET 1
33 #define UTILS_MATCH_DS_TYPE_COUNTER_ADD 2
34 #define UTILS_MATCH_DS_TYPE_COUNTER_INC 3
35
36 /*
37  * Data types
38  */
39 struct cu_match_s;
40 typedef struct cu_match_s cu_match_t;
41
42 struct cu_match_value_s
43 {
44   int ds_type;
45   value_t value;
46 };
47 typedef struct cu_match_value_s cu_match_value_t;
48
49 /*
50  * Prototypes
51  */
52 /*
53  * NAME
54  *  match_create_callback
55  *
56  * DESCRIPTION
57  *  Creates a new `cu_match_t' object which will use the regular expression
58  *  `regex' to match lines, see the `match_apply' method below. If the line
59  *  matches, the callback passed in `callback' will be called along with the
60  *  pointer `user_pointer'.
61  *  The string that's passed to the callback depends on the regular expression:
62  *  If the regular expression includes a sub-match, i. e. something like
63  *    "value=([0-9][0-9]*)"
64  *  then only the submatch (the part in the parenthesis) will be passed to the
65  *  callback. If there is no submatch, then the entire string is passed to the
66  *  callback.
67  */
68 cu_match_t *match_create_callback (const char *regex,
69                 int (*callback) (const char *str, void *user_data),
70                 void *user_data);
71
72 /*
73  * NAME
74  *  match_create_simple
75  *
76  * DESCRIPTION
77  *  Creates a new `cu_match_t' with a default callback. The user data for that
78  *  default callback will be a `cu_match_value_t' structure, with
79  *  `ds_type' copied to the structure. The default callback will handle the
80  *  string as containing a number (see strtoll(3) and strtod(3)) and store that
81  *  number in the `value' member. How that is done depends on `ds_type':
82  *
83  *  UTILS_MATCH_DS_TYPE_GAUGE
84  *    The function will search for a floating point number in the string and
85  *    store it in value.gauge.
86  *  UTILS_MATCH_DS_TYPE_COUNTER_SET
87  *    The function will search for an integer in the string and store it in
88  *    value.counter.
89  *  UTILS_MATCH_DS_TYPE_COUNTER_ADD
90  *    The function will search for an integer in the string and add it to the
91  *    value in value.counter.
92  *  UTILS_MATCH_DS_TYPE_COUNTER_INC
93  *    The function will not search for anything in the string and increase
94  *    value.counter by one.
95  */
96 cu_match_t *match_create_simple (const char *regex, int ds_type);
97
98 /*
99  * NAME
100  *  match_destroy
101  *
102  * DESCRIPTION
103  *  Destroys the object and frees all internal resources.
104  */
105 void match_destroy (cu_match_t *obj);
106
107 /*
108  * NAME
109  *  match_apply
110  *
111  * DESCRIPTION
112  *  Tries to match the string `str' with the regular expression of `obj'. If
113  *  the string matches, calls the callback in `obj' with the (sub-)match.
114  *
115  *  The user_data pointer passed to `match_create_callback' is NOT freed
116  *  automatically. The `cu_match_value_t' structure allocated by
117  *  `match_create_callback' is freed automatically.
118  */
119 int match_apply (cu_match_t *obj, const char *str);
120
121 /*
122  * NAME
123  *  match_get_user_data
124  *
125  * DESCRIPTION
126  *  Returns the pointer passed to `match_create_callback' or a pointer to the
127  *  `cu_match_value_t' structure allocated by `match_create_callback'.
128  */
129 void *match_get_user_data (cu_match_t *obj);
130
131 #endif /* UTILS_MATCH_H */
132
133 /* vim: set sw=2 sts=2 ts=8 : */