mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-25 16:16:29 +00:00
"repmgr cluster crosscheck": add --csv output
As advertised.
This commit is contained in:
@@ -623,73 +623,100 @@ do_cluster_crosscheck(void)
|
|||||||
t_node_status_cube **cube;
|
t_node_status_cube **cube;
|
||||||
|
|
||||||
n = build_cluster_crosscheck(&cube, &name_length);
|
n = build_cluster_crosscheck(&cube, &name_length);
|
||||||
|
if (runtime_options.output_mode == OM_CSV)
|
||||||
printf("%*s | Id ", name_length, node_header);
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
printf("| %2d ", cube[i]->node_id);
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
for (i = 0; i < name_length; i++)
|
|
||||||
printf("-");
|
|
||||||
printf("-+----");
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
printf("+----");
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
{
|
{
|
||||||
int column_node_ix;
|
for (i = 0; i < n; i++)
|
||||||
|
|
||||||
printf("%*s | %2d ", name_length,
|
|
||||||
cube[i]->node_name,
|
|
||||||
cube[i]->node_id);
|
|
||||||
|
|
||||||
for (column_node_ix = 0; column_node_ix < n; column_node_ix++)
|
|
||||||
{
|
{
|
||||||
int max_node_status = -2;
|
int j;
|
||||||
int node_ix = 0;
|
for (j = 0; j < n; j++)
|
||||||
|
|
||||||
/*
|
|
||||||
* The value of entry (i,j) is equal to the maximum value of all
|
|
||||||
* the (i,j,k). Indeed:
|
|
||||||
*
|
|
||||||
* - if one of the (i,j,k) is 0 (node up), then 0 (the node is
|
|
||||||
* up);
|
|
||||||
*
|
|
||||||
* - if the (i,j,k) are either -1 (down) or -2 (unknown), then -1
|
|
||||||
* (the node is down);
|
|
||||||
*
|
|
||||||
* - if all the (i,j,k) are -2 (unknown), then -2 (the node is in
|
|
||||||
* an unknown state).
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (node_ix = 0; node_ix < n; node_ix++)
|
|
||||||
{
|
{
|
||||||
int node_status = cube[node_ix]->matrix_list_rec[i]->node_status_list[column_node_ix]->node_status;
|
int max_node_status = -2;
|
||||||
|
int node_ix = 0;
|
||||||
|
|
||||||
if (node_status > max_node_status)
|
for (node_ix = 0; node_ix < n; node_ix++)
|
||||||
max_node_status = node_status;
|
{
|
||||||
|
int node_status = cube[node_ix]->matrix_list_rec[i]->node_status_list[j]->node_status;
|
||||||
|
|
||||||
|
if (node_status > max_node_status)
|
||||||
|
max_node_status = node_status;
|
||||||
|
}
|
||||||
|
printf("%i,%i,%i\n",
|
||||||
|
cube[i]->node_id,
|
||||||
|
cube[j]->node_id,
|
||||||
|
max_node_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (max_node_status)
|
|
||||||
{
|
|
||||||
case -2:
|
|
||||||
c = '?';
|
|
||||||
break;
|
|
||||||
case -1:
|
|
||||||
c = 'x';
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
c = '*';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
exit(ERR_INTERNAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("| %c ", c);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%*s | Id ", name_length, node_header);
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
printf("| %2d ", cube[i]->node_id);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
for (i = 0; i < name_length; i++)
|
||||||
|
printf("-");
|
||||||
|
printf("-+----");
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
printf("+----");
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
int column_node_ix;
|
||||||
|
|
||||||
|
printf("%*s | %2d ", name_length,
|
||||||
|
cube[i]->node_name,
|
||||||
|
cube[i]->node_id);
|
||||||
|
|
||||||
|
for (column_node_ix = 0; column_node_ix < n; column_node_ix++)
|
||||||
|
{
|
||||||
|
int max_node_status = -2;
|
||||||
|
int node_ix = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The value of entry (i,j) is equal to the maximum value of all
|
||||||
|
* the (i,j,k). Indeed:
|
||||||
|
*
|
||||||
|
* - if one of the (i,j,k) is 0 (node up), then 0 (the node is
|
||||||
|
* up);
|
||||||
|
*
|
||||||
|
* - if the (i,j,k) are either -1 (down) or -2 (unknown), then -1
|
||||||
|
* (the node is down);
|
||||||
|
*
|
||||||
|
* - if all the (i,j,k) are -2 (unknown), then -2 (the node is in
|
||||||
|
* an unknown state).
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (node_ix = 0; node_ix < n; node_ix++)
|
||||||
|
{
|
||||||
|
int node_status = cube[node_ix]->matrix_list_rec[i]->node_status_list[column_node_ix]->node_status;
|
||||||
|
|
||||||
|
if (node_status > max_node_status)
|
||||||
|
max_node_status = node_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (max_node_status)
|
||||||
|
{
|
||||||
|
case -2:
|
||||||
|
c = '?';
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
c = 'x';
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
c = '*';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
exit(ERR_INTERNAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("| %c ", c);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clean up allocated cube array */
|
/* clean up allocated cube array */
|
||||||
|
|||||||
Reference in New Issue
Block a user