pacemaker  2.0.3-4b1f869f0f
Scalable High-Availability cluster resource manager
output.h
Go to the documentation of this file.
1 /*
2  * Copyright 2019 the Pacemaker project contributors
3  *
4  * The version control history for this file may have further details.
5  *
6  * This source code is licensed under the GNU Lesser General Public License
7  * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8  */
9 
10 #ifndef CRM_OUTPUT__H
11 # define CRM_OUTPUT__H
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
22 # include <stdbool.h>
23 # include <stdio.h>
24 # include <libxml/tree.h>
25 # include <libxml/HTMLtree.h>
26 
27 # include <glib.h>
28 # include <crm/common/results.h>
29 
30 # define PCMK__API_VERSION "2.0"
31 
33 
44 typedef pcmk__output_t * (*pcmk__output_factory_t)(char **argv);
45 
60 typedef int (*pcmk__message_fn_t)(pcmk__output_t *out, va_list args);
61 
73 typedef struct pcmk__message_entry_s {
80  const char *message_id;
81 
90  const char *fmt_name;
91 
98 
104 typedef struct pcmk__supported_format_s {
109  const char *name;
110 
115 
120  GOptionEntry *options;
122 
123 /* The following three blocks need to be updated each time a new base formatter
124  * is added.
125  */
126 
127 extern GOptionEntry pcmk__html_output_entries[];
128 extern GOptionEntry pcmk__none_output_entries[];
129 extern GOptionEntry pcmk__text_output_entries[];
130 extern GOptionEntry pcmk__xml_output_entries[];
131 
135 pcmk__output_t *pcmk__mk_xml_output(char **argv);
136 
137 #define PCMK__SUPPORTED_FORMAT_HTML { "html", pcmk__mk_html_output, pcmk__html_output_entries }
138 #define PCMK__SUPPORTED_FORMAT_NONE { "none", pcmk__mk_none_output, pcmk__none_output_entries }
139 #define PCMK__SUPPORTED_FORMAT_TEXT { "text", pcmk__mk_text_output, pcmk__text_output_entries }
140 #define PCMK__SUPPORTED_FORMAT_XML { "xml", pcmk__mk_xml_output, pcmk__xml_output_entries }
141 
154  const char *fmt_name;
155 
162  char *request;
163 
172 
179  FILE *dest;
180 
187  GHashTable *messages;
188 
196  void *priv;
197 
212  bool (*init) (pcmk__output_t *out);
213 
223  void (*free_priv)(pcmk__output_t *out);
224 
259  void (*finish) (pcmk__output_t *out, crm_exit_t exit_status, bool print,
260  void **copy_dest);
261 
277  void (*reset) (pcmk__output_t *out);
278 
290  void (*register_message) (pcmk__output_t *out, const char *message_id,
291  pcmk__message_fn_t fn);
292 
308  int (*message) (pcmk__output_t *out, const char *message_id, ...);
309 
319  void (*subprocess_output) (pcmk__output_t *out, int exit_status,
320  const char *proc_stdout, const char *proc_stderr);
321 
330  void (*version) (pcmk__output_t *out, bool extended);
331 
344  void (*info) (pcmk__output_t *out, const char *format, ...) G_GNUC_PRINTF(2, 3);
345 
358  void (*err) (pcmk__output_t *out, const char *format, ...) G_GNUC_PRINTF(2, 3);
359 
368  void (*output_xml) (pcmk__output_t *out, const char *name, const char *buf);
369 
389  void (*begin_list) (pcmk__output_t *out, const char *singular_noun,
390  const char *plural_noun, const char *format, ...)
391  G_GNUC_PRINTF(4, 5);
392 
402  void (*list_item) (pcmk__output_t *out, const char *name, const char *format, ...)
403  G_GNUC_PRINTF(3, 4);
404 
418 
429  void (*end_list) (pcmk__output_t *out);
430 };
431 
444 int
445 pcmk__call_message(pcmk__output_t *out, const char *message_id, ...);
446 
460 
475 int pcmk__output_new(pcmk__output_t **out, const char *fmt_name,
476  const char *filename, char **argv);
477 
494 int
495 pcmk__register_format(GOptionGroup *group, const char *name,
496  pcmk__output_factory_t create, GOptionEntry *options);
497 
509 void
510 pcmk__register_formats(GOptionGroup *group, pcmk__supported_format_t *table);
511 
523 void
524 pcmk__register_message(pcmk__output_t *out, const char *message_id,
525  pcmk__message_fn_t fn);
526 
538 void
540 
541 /* Functions that are useful for implementing custom message formatters */
542 
553 void
554 pcmk__indented_printf(pcmk__output_t *out, const char *format, ...) G_GNUC_PRINTF(2, 3);
555 
568 void
569 pcmk__indented_vprintf(pcmk__output_t *out, const char *format, va_list args) G_GNUC_PRINTF(2, 0);
570 
581 xmlNodePtr
582 pcmk__output_xml_create_parent(pcmk__output_t *out, const char *name);
583 
592 void
593 pcmk__output_xml_add_node(pcmk__output_t *out, xmlNodePtr node);
594 
603 xmlNodePtr
604 pcmk__output_create_xml_node(pcmk__output_t *out, const char *name);
605 
615 xmlNodePtr
616 pcmk__output_create_xml_text_node(pcmk__output_t *out, const char *name, const char *content);
617 
632 void
633 pcmk__output_xml_push_parent(pcmk__output_t *out, xmlNodePtr node);
634 
649 void
651 
666 xmlNodePtr
668 
682 xmlNodePtr
683 pcmk__output_create_html_node(pcmk__output_t *out, const char *element_name, const char *id,
684  const char *class_name, const char *text);
685 
702 void
703 pcmk__html_add_header(xmlNodePtr parent, const char *name, ...)
704 G_GNUC_NULL_TERMINATED;
705 
706 #ifdef __cplusplus
707 }
708 #endif
709 
710 #endif
results.h
Function and executable result codes.
pcmk__output_s::finish
void(* finish)(pcmk__output_t *out, crm_exit_t exit_status, bool print, void **copy_dest)
Definition: output.h:259
pcmk__output_s::init
bool(* init)(pcmk__output_t *out)
Definition: output.h:212
pcmk__output_s::output_xml
void(*) void(*) void(* output_xml)(pcmk__output_t *out, const char *name, const char *buf)
Definition: output.h:368
pcmk__output_s::free_priv
void(* free_priv)(pcmk__output_t *out)
Definition: output.h:223
pcmk__output_new
int pcmk__output_new(pcmk__output_t **out, const char *fmt_name, const char *filename, char **argv)
Definition: output.c:31
pcmk__supported_format_t
struct pcmk__supported_format_s pcmk__supported_format_t
pcmk__html_add_header
void pcmk__html_add_header(xmlNodePtr parent, const char *name,...) G_GNUC_NULL_TERMINATED
Definition: output_html.c:397
pcmk__output_s::subprocess_output
void(* subprocess_output)(pcmk__output_t *out, int exit_status, const char *proc_stdout, const char *proc_stderr)
Definition: output.h:319
pcmk__output_s::messages
GHashTable * messages
Custom messages that are currently registered on this formatter.
Definition: output.h:187
pcmk__register_message
void pcmk__register_message(pcmk__output_t *out, const char *message_id, pcmk__message_fn_t fn)
Definition: output.c:127
pcmk__output_s::priv
void * priv
Implementation-specific private data.
Definition: output.h:196
pcmk__mk_xml_output
pcmk__output_t * pcmk__mk_xml_output(char **argv)
Definition: output_xml.c:307
pcmk__mk_none_output
pcmk__output_t * pcmk__mk_none_output(char **argv)
Definition: output_none.c:92
pcmk__output_create_xml_node
xmlNodePtr pcmk__output_create_xml_node(pcmk__output_t *out, const char *name)
Definition: output_xml.c:358
pcmk__message_entry_s::fmt_name
const char * fmt_name
The format type this handler is for.
Definition: output.h:90
pcmk__output_s::request
char * request
A copy of the request that generated this output.
Definition: output.h:162
pcmk__output_s::version
void(* version)(pcmk__output_t *out, bool extended)
Definition: output.h:330
pcmk__output_s::list_item
void(*) void(* list_item)(pcmk__output_t *out, const char *name, const char *format,...) G_GNUC_PRINTF(3
Definition: output.h:402
pcmk__output_create_html_node
xmlNodePtr pcmk__output_create_html_node(pcmk__output_t *out, const char *element_name, const char *id, const char *class_name, const char *text)
Definition: output_html.c:381
pcmk__mk_html_output
pcmk__output_t * pcmk__mk_html_output(char **argv)
Definition: output_html.c:347
pcmk__output_xml_peek_parent
xmlNodePtr pcmk__output_xml_peek_parent(pcmk__output_t *out)
Definition: output_xml.c:394
pcmk__output_s::message
int(* message)(pcmk__output_t *out, const char *message_id,...)
Definition: output.h:308
pcmk__none_output_entries
GOptionEntry pcmk__none_output_entries[]
Definition: output_none.c:15
pcmk__output_xml_push_parent
void pcmk__output_xml_push_parent(pcmk__output_t *out, xmlNodePtr node)
Definition: output_xml.c:374
pcmk__call_message
int pcmk__call_message(pcmk__output_t *out, const char *message_id,...)
Definition: output.c:109
pcmk__output_s::err
void(*) void(* err)(pcmk__output_t *out, const char *format,...) G_GNUC_PRINTF(2
Definition: output.h:358
pcmk__output_s::end_list
void(* end_list)(pcmk__output_t *out)
Definition: output.h:429
pcmk__indented_printf
void pcmk__indented_printf(pcmk__output_t *out, const char *format,...) G_GNUC_PRINTF(2
pcmk__output_s::increment_list
void(*) void(*) void(* increment_list)(pcmk__output_t *out)
Definition: output.h:417
pcmk__output_xml_create_parent
void void xmlNodePtr pcmk__output_xml_create_parent(pcmk__output_t *out, const char *name)
Definition: output_xml.c:341
pcmk__message_fn_t
int(* pcmk__message_fn_t)(pcmk__output_t *out, va_list args)
Definition: output.h:60
pcmk__output_s::begin_list
void(* begin_list)(pcmk__output_t *out, const char *singular_noun, const char *plural_noun, const char *format,...) G_GNUC_PRINTF(4
Definition: output.h:389
pcmk__output_s::reset
void(* reset)(pcmk__output_t *out)
Definition: output.h:277
pcmk__register_format
int pcmk__register_format(GOptionGroup *group, const char *name, pcmk__output_factory_t create, GOptionEntry *options)
Definition: output.c:77
pcmk__output_factory_t
pcmk__output_t *(* pcmk__output_factory_t)(char **argv)
Definition: output.h:44
pcmk__output_s
This structure contains everything that makes up a single output formatter.
Definition: output.h:150
pcmk__supported_format_s::options
GOptionEntry * options
Format-specific command line options. This can be NULL if no command line options should be supported...
Definition: output.h:120
pcmk__message_entry_s
Definition: output.h:73
pcmk__register_formats
void pcmk__register_formats(GOptionGroup *group, pcmk__supported_format_t *table)
Definition: output.c:96
pcmk__output_s::supports_quiet
bool supports_quiet
Does this formatter support a special quiet mode?
Definition: output.h:171
pcmk__output_s::fmt_name
const char * fmt_name
The name of this output formatter.
Definition: output.h:154
pcmk__text_output_entries
GOptionEntry pcmk__text_output_entries[]
Definition: output_text.c:18
crm_exit_t
enum crm_exit_e crm_exit_t
pcmk__message_entry_t
struct pcmk__message_entry_s pcmk__message_entry_t
pcmk__output_xml_add_node
void pcmk__output_xml_add_node(pcmk__output_t *out, xmlNodePtr node)
Definition: output_xml.c:348
pcmk__register_messages
void pcmk__register_messages(pcmk__output_t *out, pcmk__message_entry_t *table)
Definition: output.c:133
pcmk__message_entry_s::fn
pcmk__message_fn_t fn
The function to be called for message_id given a match on fmt_name. See comments on pcmk__message_fn_...
Definition: output.h:96
pcmk__output_s::dest
FILE * dest
Where output should be written.
Definition: output.h:179
pcmk__supported_format_s::create
pcmk__output_factory_t create
A function that creates a pcmk__output_t.
Definition: output.h:114
pcmk__supported_format_s
Definition: output.h:104
pcmk__output_s::info
void(* info)(pcmk__output_t *out, const char *format,...) G_GNUC_PRINTF(2
Definition: output.h:344
pcmk__html_output_entries
GOptionEntry pcmk__html_output_entries[]
Definition: output_html.c:40
pcmk__xml_output_entries
GOptionEntry pcmk__xml_output_entries[]
Definition: output_xml.c:27
pcmk__output_xml_pop_parent
void pcmk__output_xml_pop_parent(pcmk__output_t *out)
Definition: output_xml.c:384
pcmk__output_free
void pcmk__output_free(pcmk__output_t *out)
Definition: output.c:19
pcmk__supported_format_s::name
const char * name
The name of this output formatter, which should match the fmt_name parameter in some pcmk__output_t s...
Definition: output.h:109
pcmk__message_entry_s::message_id
const char * message_id
The message to be handled.
Definition: output.h:80
pcmk__indented_vprintf
void void pcmk__indented_vprintf(pcmk__output_t *out, const char *format, va_list args) G_GNUC_PRINTF(2
pcmk__output_create_xml_text_node
xmlNodePtr pcmk__output_create_xml_text_node(pcmk__output_t *out, const char *name, const char *content)
Definition: output_xml.c:367
pcmk__mk_text_output
pcmk__output_t * pcmk__mk_text_output(char **argv)
Definition: output_text.c:238
pcmk__output_s::register_message
void(* register_message)(pcmk__output_t *out, const char *message_id, pcmk__message_fn_t fn)
Definition: output.h:290