1 /**
2 * collection4 - graph_ident.h
3 * Copyright (C) 2010 Florian octo Forster
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301 USA
19 *
20 * Authors:
21 * Florian octo Forster <ff at octo.it>
22 **/
24 #ifndef GRAPH_IDENT_H
25 #define GRAPH_IDENT_H 1
27 #include <time.h>
29 #include <yajl/yajl_gen.h>
31 #include "graph_types.h"
33 #define ANY_TOKEN "/any/"
34 #define ALL_TOKEN "/all/"
36 #define IS_ANY(str) (((str) != NULL) && (strcasecmp (ANY_TOKEN, (str)) == 0))
37 #define IS_ALL(str) (((str) != NULL) && (strcasecmp (ALL_TOKEN, (str)) == 0))
39 enum graph_ident_field_e
40 {
41 GIF_HOST,
42 GIF_PLUGIN,
43 GIF_PLUGIN_INSTANCE,
44 GIF_TYPE,
45 GIF_TYPE_INSTANCE,
46 _GIF_LAST
47 };
48 typedef enum graph_ident_field_e graph_ident_field_t;
50 graph_ident_t *ident_create (const char *host,
51 const char *plugin, const char *plugin_instance,
52 const char *type, const char *type_instance);
53 graph_ident_t *ident_clone (const graph_ident_t *ident);
55 #define IDENT_FLAG_REPLACE_ALL 0x01
56 #define IDENT_FLAG_REPLACE_ANY 0x02
57 graph_ident_t *ident_copy_with_selector (const graph_ident_t *selector,
58 const graph_ident_t *ident, unsigned int flags);
60 void ident_destroy (graph_ident_t *ident);
62 const char *ident_get_host (const graph_ident_t *ident);
63 const char *ident_get_plugin (const graph_ident_t *ident);
64 const char *ident_get_plugin_instance (const graph_ident_t *ident);
65 const char *ident_get_type (const graph_ident_t *ident);
66 const char *ident_get_type_instance (const graph_ident_t *ident);
67 const char *ident_get_field (const graph_ident_t *ident,
68 graph_ident_field_t field);
70 int ident_set_host (graph_ident_t *ident, const char *host);
71 int ident_set_plugin (graph_ident_t *ident, const char *plugin);
72 int ident_set_plugin_instance (graph_ident_t *ident,
73 const char *plugin_instance);
74 int ident_set_type (graph_ident_t *ident, const char *type);
75 int ident_set_type_instance (graph_ident_t *ident,
76 const char *type_instance);
78 int ident_compare (const graph_ident_t *i0,
79 const graph_ident_t *i1);
81 _Bool ident_matches (const graph_ident_t *selector,
82 const graph_ident_t *ident);
84 /* The "ident_intersect" function takes two selectors and returns true if a
85 * file may apply to both selectors. If the selectors contradict one another,
86 * for example one issuing "plugin = cpu" and the other "plugin = memory",
87 * then false is returned. */
88 _Bool ident_intersect (const graph_ident_t *s0, const graph_ident_t *s1);
90 char *ident_to_string (const graph_ident_t *ident);
91 char *ident_to_file (const graph_ident_t *ident);
92 int ident_to_json (const graph_ident_t *ident,
93 yajl_gen handler);
95 int ident_describe (const graph_ident_t *ident, const graph_ident_t *selector,
96 char *buffer, size_t buffer_size);
98 time_t ident_get_mtime (const graph_ident_t *ident);
100 /* vim: set sw=2 sts=2 et fdm=marker : */
101 #endif /* GRAPH_IDENT_H */