15 #define SUMMARY_HEADER(rc, out) do { \
16 if (rc == pcmk_rc_no_output) { \
17 out->begin_list(out, NULL, NULL, "Cluster Summary"); \
23 failed_action_string(xmlNodePtr xml_op) {
29 time_t last_change = 0;
42 "='%s', queued=%sms, exec=%sms",
43 op_key ? op_key :
ID(xml_op),
45 services_ocf_exitcode_str(rc), rc,
47 services_lrm_status_str(status),
48 exit_reason ? exit_reason :
"none",
57 return crm_strdup_printf(
"%s on %s '%s' (%d): call=%s, status=%s, exitreason='%s'",
58 op_key ? op_key :
ID(xml_op),
60 services_ocf_exitcode_str(rc), rc,
62 services_lrm_status_str(status),
63 exit_reason ? exit_reason :
"none");
70 xmlNode *stack =
get_xpath_object(
"//nvpair[@name='cluster-infrastructure']",
71 data_set->
input, LOG_DEBUG);
76 last_changed_string(
const char *last_written,
const char *user,
77 const char *client,
const char *origin) {
78 if (last_written != NULL || user != NULL || client != NULL || origin != NULL) {
80 last_written ? last_written :
"",
83 client ?
" via " :
"",
86 origin ? origin :
"");
93 op_history_string(xmlNode *xml_op,
const char *task,
const char *interval_ms_s,
94 int rc, gboolean print_timing) {
96 char *interval_str = NULL;
106 char *last_change_str = NULL;
107 char *last_run_str = NULL;
108 char *exec_str = NULL;
109 char *queue_str = NULL;
111 const char *value = NULL;
144 interval_str ? interval_str :
"",
145 last_change_str ? last_change_str :
"",
146 last_run_str ? last_run_str :
"",
147 exec_str ? exec_str :
"",
148 queue_str ? queue_str :
"",
149 rc, services_ocf_exitcode_str(rc));
151 if (last_change_str) {
152 free(last_change_str);
168 interval_str ?
":" :
"",
169 interval_str ? interval_str :
"");
180 resource_history_string(
pe_resource_t *rsc,
const char *rsc_id, gboolean all,
181 int failcount, time_t last_failure) {
186 }
else if (all || failcount || last_failure > 0) {
187 char *failcount_s = NULL;
188 char *lastfail_s = NULL;
194 failcount_s = strdup(
"");
196 if (last_failure > 0) {
204 lastfail_s? lastfail_s :
"");
214 PCMK__OUTPUT_ARGS(
"cluster-summary",
"struct pe_working_set_t *",
"gboolean",
"gboolean",
"gboolean",
215 "gboolean",
"gboolean",
"gboolean")
219 gboolean print_clone_detail = va_arg(args, gboolean);
220 gboolean show_stack = va_arg(args, gboolean);
221 gboolean show_dc = va_arg(args, gboolean);
222 gboolean show_times = va_arg(args, gboolean);
223 gboolean show_counts = va_arg(args, gboolean);
224 gboolean show_options = va_arg(args, gboolean);
227 const char *stack_s = get_cluster_stack(data_set);
231 out->message(out,
"cluster-stack", stack_s);
235 if (data_set->
dc_node == NULL || show_dc) {
237 data_set->
input, LOG_DEBUG);
238 const char *dc_version_s = dc_version?
245 out->message(out,
"cluster-dc", data_set->
dc_node, quorum, dc_version_s, dc_name);
256 out->message(out,
"cluster-times", last_written, user, client, origin);
261 out->message(out,
"cluster-counts", g_list_length(data_set->
nodes),
268 out->message(out,
"cluster-options", data_set);
276 out->message(out,
"maint-mode");
283 PCMK__OUTPUT_ARGS(
"cluster-summary",
"struct pe_working_set_t *",
"gboolean",
"gboolean",
"gboolean",
284 "gboolean",
"gboolean",
"gboolean")
288 gboolean print_clone_detail = va_arg(args, gboolean);
289 gboolean show_stack = va_arg(args, gboolean);
290 gboolean show_dc = va_arg(args, gboolean);
291 gboolean show_times = va_arg(args, gboolean);
292 gboolean show_counts = va_arg(args, gboolean);
293 gboolean show_options = va_arg(args, gboolean);
296 const char *stack_s = get_cluster_stack(data_set);
300 out->message(out,
"cluster-stack", stack_s);
304 if (data_set->
dc_node == NULL || show_dc) {
306 data_set->
input, LOG_DEBUG);
307 const char *dc_version_s = dc_version?
314 out->message(out,
"cluster-dc", data_set->
dc_node, quorum, dc_version_s, dc_name);
325 out->message(out,
"cluster-times", last_written, user, client, origin);
330 out->message(out,
"cluster-counts", g_list_length(data_set->
nodes),
344 out->begin_list(out, NULL, NULL,
"Config Options");
345 out->message(out,
"cluster-options", data_set);
353 out->message(out,
"maint-mode");
364 const char *node_host = NULL;
365 const char *node_id = NULL;
374 if (host_node && host_node->
details) {
377 if (node_host == NULL) {
390 name_len += strlen(node_host) + 1;
393 name_len += strlen(node_id) + 3;
397 node_name = malloc(name_len);
401 strcat(node_name,
"@");
402 strcat(node_name, node_host);
405 strcat(node_name,
" (");
406 strcat(node_name, node_id);
407 strcat(node_name,
")");
414 ,
size_t pairs_count, ...)
416 xmlNodePtr xml_node = NULL;
425 : xmlNewChild(xml_node, NULL, (
pcmkXmlStr) tag_name, NULL);
427 va_start(args, pairs_count);
428 while(pairs_count--) {
429 const char *param_name = va_arg(args,
const char *);
430 const char *param_value = va_arg(args,
const char *);
431 if (param_name && param_value) {
443 PCMK__OUTPUT_ARGS(
"ban",
"struct pe_node_t *",
"struct pe__location_t *",
"gboolean")
448 gboolean print_clone_detail = va_arg(args, gboolean);
463 PCMK__OUTPUT_ARGS(
"ban",
"struct pe_node_t *",
"struct pe__location_t *",
"gboolean")
468 gboolean print_clone_detail = va_arg(args, gboolean);
471 out->list_item(out, NULL,
"%s\tprevents %s from running %son %s",
480 PCMK__OUTPUT_ARGS(
"ban",
"struct pe_node_t *",
"struct pe__location_t *",
"gboolean")
486 gboolean print_clone_detail G_GNUC_UNUSED = va_arg(args, gboolean);
488 char *weight_s = crm_itoa(pe_node->
weight);
507 unsigned int nnodes = va_arg(args,
unsigned int);
508 int nresources = va_arg(args,
int);
509 int ndisabled = va_arg(args,
int);
510 int nblocked = va_arg(args,
int);
518 if (ndisabled && nblocked) {
533 " from further action due to failure)");
534 }
else if (ndisabled && !nblocked) {
543 }
else if (!ndisabled && nblocked) {
552 " from further action due to failure)");
566 unsigned int nnodes = va_arg(args,
unsigned int);
567 int nresources = va_arg(args,
int);
568 int ndisabled = va_arg(args,
int);
569 int nblocked = va_arg(args,
int);
571 out->list_item(out, NULL,
"%d node%s configured",
574 if (ndisabled && nblocked) {
575 out->list_item(out, NULL,
"%d resource instance%s configured "
576 "(%d DISABLED, %d BLOCKED from "
577 "further action due to failure)",
580 }
else if (ndisabled && !nblocked) {
581 out->list_item(out, NULL,
"%d resource instance%s configured "
584 }
else if (!ndisabled && nblocked) {
585 out->list_item(out, NULL,
"%d resource instance%s configured "
586 "(%d BLOCKED from further action "
590 out->list_item(out, NULL,
"%d resource instance%s configured",
603 unsigned int nnodes = va_arg(args,
unsigned int);
604 int nresources = va_arg(args,
int);
605 int ndisabled = va_arg(args,
int);
606 int nblocked = va_arg(args,
int);
608 char *s = crm_itoa(nnodes);
612 s = crm_itoa(nresources);
616 s = crm_itoa(ndisabled);
620 s = crm_itoa(nblocked);
627 PCMK__OUTPUT_ARGS(
"cluster-dc",
"struct pe_node_t *",
"const char *",
"const char *",
"char *")
633 const char *quorum = va_arg(args,
const char *);
634 const char *dc_version_s = va_arg(args,
const char *);
635 char *dc_name = va_arg(args,
char *);
642 dc_name, dc_version_s ? dc_version_s :
"unknown");
647 dc_name, dc_version_s ? dc_version_s :
"unknown");
661 PCMK__OUTPUT_ARGS(
"cluster-dc",
"struct pe_node_t *",
"const char *",
"const char *",
"char *")
665 const char *quorum = va_arg(args,
const char *);
666 const char *dc_version_s = va_arg(args,
const char *);
667 char *dc_name = va_arg(args,
char *);
670 out->list_item(out,
"Current DC",
"%s (version %s) - partition %s quorum",
671 dc_name, dc_version_s ? dc_version_s :
"unknown",
674 out->list_item(out,
"Current DC",
"NONE");
680 PCMK__OUTPUT_ARGS(
"cluster-dc",
"struct pe_node_t *",
"const char *",
"const char *",
"char *")
686 const char *quorum = va_arg(args,
const char *);
687 const char *dc_version_s = va_arg(args,
const char *);
688 char *dc_name G_GNUC_UNUSED = va_arg(args,
char *);
706 fprintf(out->dest,
"\n *** Resource management is DISABLED ***");
707 fprintf(out->dest,
"\n The cluster will not attempt to start, stop or recover services");
708 fprintf(out->dest,
"\n");
717 out->list_item(out, NULL,
"STONITH of failed nodes %s",
720 out->list_item(out, NULL,
"Cluster is %s",
725 out->list_item(out, NULL,
"No quorum policy: Freeze resources");
729 out->list_item(out, NULL,
"No quorum policy: Stop ALL resources");
733 out->list_item(out, NULL,
"No quorum policy: Ignore");
737 out->list_item(out, NULL,
"No quorum policy: Suicide");
747 " (the cluster will not attempt to start, stop, or recover services)");
749 out->list_item(out, NULL,
"Resource management: enabled");
761 out->info(out,
"Resource management is DISABLED. The cluster will not attempt to start, stop or recover services.");
773 out->list_item(out, NULL,
"STONITH of failed nodes %s",
776 out->list_item(out, NULL,
"Cluster is %s",
781 out->list_item(out, NULL,
"No quorum policy: Freeze resources");
785 out->list_item(out, NULL,
"No quorum policy: Stop ALL resources");
789 out->list_item(out, NULL,
"No quorum policy: Ignore");
793 out->list_item(out, NULL,
"No quorum policy: Suicide");
806 xmlSetProp(node, (
pcmkXmlStr)
"stonith-enabled",
808 xmlSetProp(node, (
pcmkXmlStr)
"symmetric-cluster",
829 xmlSetProp(node, (
pcmkXmlStr)
"maintenance-mode",
839 const char *stack_s = va_arg(args,
const char *);
850 const char *stack_s = va_arg(args,
const char *);
851 out->list_item(out,
"Stack",
"%s", stack_s);
859 const char *stack_s = va_arg(args,
const char *);
866 PCMK__OUTPUT_ARGS(
"cluster-times",
"const char *",
"const char *",
"const char *",
"const char *")
872 const char *last_written = va_arg(args,
const char *);
873 const char *user = va_arg(args,
const char *);
874 const char *client = va_arg(args,
const char *);
875 const char *origin = va_arg(args,
const char *);
877 char *buf = last_changed_string(last_written, user, client, origin);
890 PCMK__OUTPUT_ARGS(
"cluster-times",
"const char *",
"const char *",
"const char *",
"const char *")
896 const char *last_written = va_arg(args,
const char *);
897 const char *user = va_arg(args,
const char *);
898 const char *client = va_arg(args,
const char *);
899 const char *origin = va_arg(args,
const char *);
911 PCMK__OUTPUT_ARGS(
"cluster-times",
"const char *",
"const char *",
"const char *",
"const char *")
914 const char *last_written = va_arg(args,
const char *);
915 const char *user = va_arg(args,
const char *);
916 const char *client = va_arg(args,
const char *);
917 const char *origin = va_arg(args,
const char *);
919 char *buf = last_changed_string(last_written, user, client, origin);
922 out->list_item(out,
"Last change",
" %s", buf);
931 xmlNodePtr xml_op = va_arg(args, xmlNodePtr);
932 char *s = failed_action_string(xml_op);
934 out->list_item(out, NULL,
"%s", s);
942 xmlNodePtr xml_op = va_arg(args, xmlNodePtr);
950 char *rc_s = crm_itoa(rc);
951 char *reason_s =
crm_xml_escape(exit_reason ? exit_reason :
"none");
954 xmlSetProp(node, (
pcmkXmlStr) (op_key ?
"op_key" :
"id"),
965 (
pcmkXmlStr) services_lrm_status_str(status));
968 guint interval_ms = 0;
972 char *rc_change = NULL;
975 s = crm_itoa(interval_ms);
999 PCMK__OUTPUT_ARGS(
"node",
"struct pe_node_t *",
"unsigned int",
"gboolean",
"const char *",
"gboolean",
"gboolean",
"gboolean",
"GListPtr")
1003 unsigned int print_opts = va_arg(args,
unsigned int);
1004 gboolean full = va_arg(args, gboolean);
1005 const char *node_mode G_GNUC_UNUSED = va_arg(args,
const char *);
1006 gboolean print_clone_detail = va_arg(args, gboolean);
1007 gboolean print_brief = va_arg(args, gboolean);
1008 gboolean group_by_node = va_arg(args, gboolean);
1036 if (print_brief && group_by_node) {
1037 out->begin_list(out, NULL, NULL, NULL);
1042 }
else if (group_by_node) {
1045 out->begin_list(out, NULL, NULL, NULL);
1048 out->message(out, crm_map_element_name(rsc->
xml), print_opts |
pe_print_rsconly, rsc, only_show);
1053 out->begin_list(out, NULL, NULL,
"%s", buf);
1061 PCMK__OUTPUT_ARGS(
"node",
"struct pe_node_t *",
"unsigned int",
"gboolean",
"const char *",
"gboolean",
"gboolean",
"gboolean",
"GListPtr")
1065 unsigned int print_opts = va_arg(args,
unsigned int);
1066 gboolean full = va_arg(args, gboolean);
1067 const char *node_mode = va_arg(args,
const char *);
1068 gboolean print_clone_detail = va_arg(args, gboolean);
1069 gboolean print_brief = va_arg(args, gboolean);
1070 gboolean group_by_node = va_arg(args, gboolean);
1087 if (group_by_node) {
1088 out->begin_list(out, NULL, NULL,
"%s", buf);
1089 out->begin_list(out, NULL, NULL,
"Resources");
1099 out->message(out, crm_map_element_name(rsc->
xml), print_opts |
pe_print_rsconly, rsc, only_show);
1106 out->list_item(out, NULL,
"%s", buf);
1118 PCMK__OUTPUT_ARGS(
"node",
"struct pe_node_t *",
"unsigned int",
"gboolean",
"const char *",
"gboolean",
"gboolean",
"gboolean",
"GListPtr")
1122 unsigned int print_opts = va_arg(args,
unsigned int);
1123 gboolean full = va_arg(args, gboolean);
1124 const char *node_mode G_GNUC_UNUSED = va_arg(args,
const char *);
1125 gboolean print_clone_detail G_GNUC_UNUSED = va_arg(args, gboolean);
1126 gboolean print_brief G_GNUC_UNUSED = va_arg(args, gboolean);
1127 gboolean group_by_node = va_arg(args, gboolean);
1136 node_type =
"member";
1139 node_type =
"remote";
1157 "resources_running", length_s,
1162 xmlSetProp(xml_node, (
pcmkXmlStr)
"id_as_resource",
1166 if (group_by_node) {
1171 out->message(out, crm_map_element_name(rsc->
xml), print_opts |
pe_print_rsconly, rsc, only_show);
1186 PCMK__OUTPUT_ARGS(
"node-attribute",
"const char *",
"const char *",
"gboolean",
"int")
1189 const char *
name = va_arg(args,
const char *);
1190 const char *value = va_arg(args,
const char *);
1191 gboolean add_extra = va_arg(args, gboolean);
1192 int expected_score = va_arg(args,
int);
1199 out->list_item(out, NULL,
"%-32s\t: %-10s\t: Connectivity is lost", name, value);
1200 }
else if (v < expected_score) {
1201 out->list_item(out, NULL,
"%-32s\t: %-10s\t: Connectivity is degraded (Expected=%d)", name, value, expected_score);
1203 out->list_item(out, NULL,
"%-32s\t: %-10s", name, value);
1206 out->list_item(out, NULL,
"%-32s\t: %-10s", name, value);
1212 PCMK__OUTPUT_ARGS(
"node-attribute",
"const char *",
"const char *",
"gboolean",
"int")
1215 const char *
name = va_arg(args,
const char *);
1216 const char *value = va_arg(args,
const char *);
1217 gboolean add_extra = va_arg(args, gboolean);
1218 int expected_score = va_arg(args,
int);
1230 }
else if (v < expected_score) {
1231 char *buf =
crm_strdup_printf(
"(connectivity is degraded -- expected %d", expected_score);
1236 out->list_item(out, NULL,
"%s: %s", name, value);
1242 PCMK__OUTPUT_ARGS(
"node-attribute",
"const char *",
"const char *",
"gboolean",
"int")
1245 const char *
name = va_arg(args,
const char *);
1246 const char *value = va_arg(args,
const char *);
1247 gboolean add_extra = va_arg(args, gboolean);
1248 int expected_score = va_arg(args,
int);
1255 char *buf = crm_itoa(expected_score);
1263 PCMK__OUTPUT_ARGS(
"node-list",
"GListPtr",
"GListPtr",
"unsigned int",
"gboolean",
"gboolean",
"gboolean")
1268 unsigned int print_opts = va_arg(args,
unsigned int);
1269 gboolean print_clone_detail = va_arg(args, gboolean);
1270 gboolean print_brief = va_arg(args, gboolean);
1271 gboolean group_by_node = va_arg(args, gboolean);
1273 gboolean printed_header = FALSE;
1275 for (
GListPtr gIter = nodes; gIter != NULL; gIter = gIter->next) {
1282 if (printed_header == FALSE) {
1283 printed_header = TRUE;
1284 out->begin_list(out, NULL, NULL,
"Node List");
1287 out->message(out,
"node", node, print_opts, TRUE, NULL, print_clone_detail,
1288 print_brief, group_by_node, only_show);
1291 if (printed_header == TRUE) {
1298 PCMK__OUTPUT_ARGS(
"node-list",
"GListPtr",
"GListPtr",
"unsigned int",
"gboolean",
"gboolean",
"gboolean")
1303 unsigned int print_opts = va_arg(args,
unsigned int);
1304 gboolean print_clone_detail = va_arg(args, gboolean);
1305 gboolean print_brief = va_arg(args, gboolean);
1306 gboolean group_by_node = va_arg(args, gboolean);
1309 char *online_nodes = NULL;
1310 char *online_remote_nodes = NULL;
1311 char *online_guest_nodes = NULL;
1312 char *offline_nodes = NULL;
1313 char *offline_remote_nodes = NULL;
1316 gboolean printed_header = FALSE;
1318 for (
GListPtr gIter = nodes; gIter != NULL; gIter = gIter->next) {
1320 const char *node_mode = NULL;
1328 if (printed_header == FALSE) {
1329 out->begin_list(out, NULL, NULL,
"Node List");
1331 printed_header = TRUE;
1337 node_mode =
"UNCLEAN (online)";
1340 node_mode =
"UNCLEAN (pending)";
1343 node_mode =
"UNCLEAN (offline)";
1347 node_mode =
"pending";
1350 node_mode =
"standby (on-fail)";
1355 node_mode =
"standby (with active resources)";
1357 node_mode =
"standby";
1360 node_mode =
"OFFLINE (standby)";
1365 node_mode =
"maintenance";
1367 node_mode =
"OFFLINE (maintenance)";
1371 node_mode =
"online";
1372 if (group_by_node == FALSE) {
1387 node_mode =
"OFFLINE";
1388 if (group_by_node == FALSE) {
1403 out->message(out,
"node", node, print_opts, TRUE, node_mode, print_clone_detail,
1404 print_brief, group_by_node, only_show);
1410 out->list_item(out,
"Online",
"[%s ]", online_nodes);
1413 if (offline_nodes) {
1414 out->list_item(out,
"OFFLINE",
"[%s ]", offline_nodes);
1415 free(offline_nodes);
1417 if (online_remote_nodes) {
1418 out->list_item(out,
"RemoteOnline",
"[%s ]", online_remote_nodes);
1419 free(online_remote_nodes);
1421 if (offline_remote_nodes) {
1422 out->list_item(out,
"RemoteOFFLINE",
"[%s ]", offline_remote_nodes);
1423 free(offline_remote_nodes);
1425 if (online_guest_nodes) {
1426 out->list_item(out,
"GuestOnline",
"[%s ]", online_guest_nodes);
1427 free(online_guest_nodes);
1430 if (printed_header == TRUE) {
1437 PCMK__OUTPUT_ARGS(
"node-list",
"GListPtr",
"GListPtr",
"unsigned int",
"gboolean",
"gboolean",
"gboolean")
1442 unsigned int print_opts = va_arg(args,
unsigned int);
1443 gboolean print_clone_detail = va_arg(args, gboolean);
1444 gboolean print_brief = va_arg(args, gboolean);
1445 gboolean group_by_node = va_arg(args, gboolean);
1447 out->begin_list(out, NULL, NULL,
"nodes");
1448 for (
GListPtr gIter = nodes; gIter != NULL; gIter = gIter->next) {
1455 out->message(out,
"node", node, print_opts, TRUE, NULL, print_clone_detail,
1456 print_brief, group_by_node, only_show);
1463 PCMK__OUTPUT_ARGS(
"op-history",
"struct xmlNode *",
"const char *",
"const char *",
"int",
"gboolean")
1466 xmlNode *xml_op = va_arg(args, xmlNode *);
1467 const char *task = va_arg(args,
const char *);
1468 const char *interval_ms_s = va_arg(args,
const char *);
1469 int rc = va_arg(args,
int);
1470 gboolean print_timing = va_arg(args, gboolean);
1472 char *buf = op_history_string(xml_op, task, interval_ms_s, rc, print_timing);
1474 out->list_item(out, NULL,
"%s", buf);
1480 PCMK__OUTPUT_ARGS(
"op-history",
"struct xmlNode *",
"const char *",
"const char *",
"int",
"gboolean")
1483 xmlNode *xml_op = va_arg(args, xmlNode *);
1484 const char *task = va_arg(args,
const char *);
1485 const char *interval_ms_s = va_arg(args,
const char *);
1486 int rc = va_arg(args,
int);
1487 gboolean print_timing = va_arg(args, gboolean);
1497 if (interval_ms_s &&
safe_str_neq(interval_ms_s,
"0")) {
1504 const char *value = NULL;
1509 if (int_value > 0) {
1518 if (int_value > 0) {
1538 rc_s = crm_itoa(rc);
1545 PCMK__OUTPUT_ARGS(
"resource-history",
"struct pe_resource_t *",
"const char *",
"gboolean",
"int",
"time_t",
"gboolean")
1549 const char *rsc_id = va_arg(args,
const char *);
1550 gboolean all = va_arg(args, gboolean);
1551 int failcount = va_arg(args,
int);
1552 time_t last_failure = va_arg(args,
int);
1553 gboolean as_header = va_arg(args, gboolean);
1555 char *buf = resource_history_string(rsc, rsc_id, all, failcount, last_failure);
1558 out->begin_list(out, NULL, NULL,
"%s", buf);
1560 out->list_item(out, NULL,
"%s", buf);
1567 PCMK__OUTPUT_ARGS(
"resource-history",
"struct pe_resource_t *",
"const char *",
"gboolean",
"int",
"time_t",
"gboolean")
1571 const char *rsc_id = va_arg(args,
const char *);
1572 gboolean all = va_arg(args, gboolean);
1573 int failcount = va_arg(args,
int);
1574 time_t last_failure = va_arg(args,
int);
1575 gboolean as_header = va_arg(args, gboolean);
1582 }
else if (all || failcount || last_failure > 0) {
1586 xmlSetProp(node, (
pcmkXmlStr)
"migration-threshold",
1590 if (failcount > 0) {
1591 char *s = crm_itoa(failcount);
1598 if (last_failure > 0) {
1604 if (as_header == FALSE) {
1618 out->list_item(out, NULL,
"%s:\t%s%s %s", ticket->
id,
1619 ticket->
granted ?
"granted" :
"revoked",
1620 ticket->
standby ?
" [standby]" :
"",
1624 out->list_item(out, NULL,
"%s:\t%s%s", ticket->
id,
1625 ticket->
granted ?
"granted" :
"revoked",
1626 ticket->
standby ?
" [standby]" :
"");
1639 out->list_item(out, ticket->
id,
"\t%s%s %s",
1640 ticket->
granted ?
"granted" :
"revoked",
1641 ticket->
standby ?
" [standby]" :
"",
1645 out->list_item(out, ticket->
id,
"\t%s%s",
1646 ticket->
granted ?
"granted" :
"revoked",
1647 ticket->
standby ?
" [standby]" :
"");
1656 xmlNodePtr node = NULL;
1666 xmlSetProp(node, (
pcmkXmlStr)
"last-granted",
1752 { NULL, NULL, NULL }
1769 crm_trace(
"%sNode %s: (weight=%d, fixed=%s)",
1774 char *pe_mutable = strdup(
"\t\t");
1778 unames = g_list_prepend(unames, strdup(
"*"));
1786 for (; gIter != NULL; gIter = gIter->next) {
1789 out->
message(out, crm_map_element_name(rsc->
xml),
1793 g_list_free_full(unames, free);
int pe__ticket_html(pcmk__output_t *out, va_list args)
#define XML_RSC_OP_LAST_CHANGE
#define XML_ATTR_UPDATE_ORIG
enum rsc_role_e role_filter
enum pe_quorum_policy no_quorum_policy
int pe__cluster_maint_mode_text(pcmk__output_t *out, va_list args)
#define XML_ATTR_UPDATE_CLIENT
gboolean safe_str_neq(const char *a, const char *b)
gboolean pcmk__str_in_list(GList *lst, const gchar *s)
int pe__failed_action_text(pcmk__output_t *out, va_list args)
int pe__ticket_text(pcmk__output_t *out, va_list args)
#define crm_time_log_timeofday
int pe__cluster_summary(pcmk__output_t *out, va_list args)
int pe__failed_action_xml(pcmk__output_t *out, va_list args)
pe_resource_t * container
void pcmk__output_xml_pop_parent(pcmk__output_t *out)
struct crm_time_s crm_time_t
xmlNodePtr pcmk__output_create_xml_node(pcmk__output_t *out, const char *name)
#define pe_flag_symmetric_cluster
int pe__ban_xml(pcmk__output_t *out, va_list args)
int pe__cluster_options_text(pcmk__output_t *out, va_list args)
int pe__cluster_options_log(pcmk__output_t *out, va_list args)
#define pe_flag_maintenance_mode
xmlNode * pcmk_create_html_node(xmlNode *parent, const char *element_name, const char *id, const char *class_name, const char *text)
#define XML_ATTR_UPDATE_USER
pe_resource_t * remote_rsc
xmlNodePtr pcmk__output_xml_peek_parent(pcmk__output_t *out)
#define XML_RSC_OP_T_EXEC
int pe__cluster_times_text(pcmk__output_t *out, va_list args)
int pe__cluster_counts_text(pcmk__output_t *out, va_list args)
int crm_parse_int(const char *text, const char *default_text)
Parse an integer value from a string.
int(* message)(pcmk__output_t *out, const char *message_id,...)
int pe__cluster_dc_html(pcmk__output_t *out, va_list args)
int pe__ban_text(pcmk__output_t *out, va_list args)
char * pcmk_format_nvpair(const char *name, const char *value, const char *units)
int pe__resource_text(pcmk__output_t *out, va_list args)
#define XML_RSC_OP_T_QUEUE
xmlNodePtr pcmk__output_create_html_node(pcmk__output_t *out, const char *element_name, const char *id, const char *class_name, const char *text)
xmlNode * get_xpath_object(const char *xpath, xmlNode *xml_obj, int error_level)
int pe__group_text(pcmk__output_t *out, va_list args)
#define PCMK__LAST_FAILURE_PREFIX
int pe__cluster_times_html(pcmk__output_t *out, va_list args)
char * pe__node_display_name(pe_node_t *node, bool print_detail)
int pe__bundle_html(pcmk__output_t *out, va_list args)
int pe__op_history_text(pcmk__output_t *out, va_list args)
char * pcmk_format_named_time(const char *name, time_t epoch_time)
gboolean pe__is_remote_node(pe_node_t *node)
int pe__clone_html(pcmk__output_t *out, va_list args)
int pe__node_list_text(pcmk__output_t *out, va_list args)
#define XML_LRM_ATTR_TASK_KEY
#define XML_LRM_ATTR_TASK
int crm_element_value_ms(const xmlNode *data, const char *name, guint *dest)
Retrieve the millisecond value of an XML attribute.
int pe__bundle_text(pcmk__output_t *out, va_list args)
const char * crm_element_value(const xmlNode *data, const char *name)
Retrieve the value of an XML attribute.
int pe__name_and_nvpairs_xml(pcmk__output_t *out, bool is_list, const char *tag_name, size_t pairs_count,...)
int pe__ticket_xml(pcmk__output_t *out, va_list args)
int pe__group_html(pcmk__output_t *out, va_list args)
#define crm_trace(fmt, args...)
int pe__clone_xml(pcmk__output_t *out, va_list args)
void crm_time_set_timet(crm_time_t *target, time_t *source)
struct pe_node_shared_s * details
int pe__node_attribute_html(pcmk__output_t *out, va_list args)
#define pcmk__plural_s(i)
#define XML_ATTR_HAVE_QUORUM
int pe__node_attribute_xml(pcmk__output_t *out, va_list args)
int pe__cluster_times_xml(pcmk__output_t *out, va_list args)
int pe__resource_history_text(pcmk__output_t *out, va_list args)
PCMK__OUTPUT_ARGS("cluster-summary","struct pe_working_set_t *","gboolean","gboolean","gboolean","gboolean","gboolean","gboolean")
xmlNode * create_xml_node(xmlNode *parent, const char *name)
#define pe_flag_stonith_enabled
int crm_element_value_epoch(const xmlNode *xml, const char *name, time_t *dest)
Retrieve the seconds-since-epoch value of an XML attribute.
#define PCMK__FAIL_COUNT_PREFIX
int pe__node_list_html(pcmk__output_t *out, va_list args)
int pe__cluster_summary_html(pcmk__output_t *out, va_list args)
#define XML_LRM_ATTR_EXIT_REASON
void pe__register_messages(pcmk__output_t *out)
#define crm_time_log_with_timezone
int pe__cluster_dc_text(pcmk__output_t *out, va_list args)
const char * pcmk__epoch2str(time_t *when)
int pe__cluster_counts_html(pcmk__output_t *out, va_list args)
void pcmk__register_messages(pcmk__output_t *out, pcmk__message_entry_t *table)
int pe__cluster_stack_html(pcmk__output_t *out, va_list args)
int pe__resource_history_xml(pcmk__output_t *out, va_list args)
char * crm_time_as_string(crm_time_t *dt, int flags)
int pe__resource_xml(pcmk__output_t *out, va_list args)
int pe__cluster_options_html(pcmk__output_t *out, va_list args)
const xmlChar * pcmkXmlStr
int pe__cluster_options_xml(pcmk__output_t *out, va_list args)
int pe__bundle_xml(pcmk__output_t *out, va_list args)
gboolean pe__is_guest_node(pe_node_t *node)
int pe__clone_text(pcmk__output_t *out, va_list args)
int pe__node_text(pcmk__output_t *out, va_list args)
void pcmk__output_xml_push_parent(pcmk__output_t *out, xmlNodePtr node)
int pe__ban_html(pcmk__output_t *out, va_list args)
#define XML_CIB_ATTR_WRITTEN
crm_time_t * crm_time_new(const char *string)
int pe__cluster_stack_text(pcmk__output_t *out, va_list args)
int pe__node_xml(pcmk__output_t *out, va_list args)
int pe__group_xml(pcmk__output_t *out, va_list args)
This structure contains everything that makes up a single output formatter.
#define XML_LRM_ATTR_INTERVAL_MS
char * pcmk__add_word(char *list, const char *word)
void void xmlNodePtr pcmk__output_xml_create_parent(pcmk__output_t *out, const char *name)
#define XML_LRM_ATTR_CALLID
#define XML_NVPAIR_ATTR_VALUE
int pe__node_attribute_text(pcmk__output_t *out, va_list args)
#define XML_LRM_ATTR_OPSTATUS
int pe__resource_html(pcmk__output_t *out, va_list args)
int pe__cluster_dc_xml(pcmk__output_t *out, va_list args)
#define SUMMARY_HEADER(rc, out)
int pe__node_html(pcmk__output_t *out, va_list args)
int pe__cluster_counts_xml(pcmk__output_t *out, va_list args)
gboolean crm_is_true(const char *s)
#define XML_RSC_OP_LAST_RUN
void pe__output_node(pe_node_t *node, gboolean details, pcmk__output_t *out)
char * crm_xml_escape(const char *text)
void print_str_str(gpointer key, gpointer value, gpointer user_data)
int pe__rscs_brief_output(pcmk__output_t *out, GListPtr rsc_list, long options, gboolean print_all)
int pe__op_history_xml(pcmk__output_t *out, va_list args)
char * crm_strdup_printf(char const *format,...) __attribute__((__format__(__printf__
int pe__node_list_xml(pcmk__output_t *out, va_list args)
int pe__cluster_stack_xml(pcmk__output_t *out, va_list args)
#define crm_time_log_date
void crm_time_free(crm_time_t *dt)