Add the "list_graphs" action.
[collection4.git] / action_list_graphs.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <errno.h>
5
6 #include <fcgiapp.h>
7 #include <fcgi_stdio.h>
8
9 #include "graph_list.h"
10
11 static int print_graph (const graph_list_t *gl, void *user_data) /* {{{ */
12 {
13   _Bool *first;
14
15   if ((gl == NULL) || (user_data == NULL))
16     return (EINVAL);
17
18   first = (_Bool *) user_data;
19   if (!*first)
20     printf (",\n");
21   *first = 0;
22
23   printf (" {");
24
25   printf ("\"host\":\"%s\"", gl->host);
26       
27   printf (",\"plugin\":\"%s\"", gl->plugin);
28   if (gl->plugin_instance != NULL)
29     printf (",\"plugin_instance\":\"%s\"", gl->plugin_instance);
30   else
31     printf (",\"plugin_instance\":null");
32
33   printf (",\"type\":\"%s\"", gl->type);
34   if (gl->type_instance != NULL)
35     printf (",\"type_instance\":\"%s\"", gl->type_instance);
36   else
37     printf (",\"type_instance\":null");
38
39   printf ("}");
40
41   return (0);
42 } /* }}} int print_graph */
43
44 int action_list_graphs (void) /* {{{ */
45 {
46   _Bool first = 1;
47
48   printf ("Content-Type: text/plain\n\n");
49
50   gl_update ();
51
52   printf ("[\n");
53   gl_foreach (print_graph, /* user_data = */ &first);
54   printf ("\n]");
55 } /* }}} int action_list_graphs */
56
57 /* vim: set sw=2 sts=2 et fdm=marker : */