repmgr: add --terse mode to "cluster show"

This suppresses display of the usually lengthy "conninfo" column, mainly
useful for generating a compact table suitable for pasting into emails,
chats etc. without messy line breaks.

Implements GitHub #521.
This commit is contained in:
Ian Barwick
2019-01-09 10:05:21 +09:00
parent 3389491151
commit c66c8ebc98
7 changed files with 68 additions and 4 deletions

View File

@@ -1,5 +1,6 @@
4.3 2019-??
repmgr: add --version-number command line option (Ian)
repmgr: add --terse option to "cluster show"; GitHub #521 (Ian)
repmgrd: check binary and extension major versions match; GitHub #515 (Ian)
4.2.1 2018-??-??

View File

@@ -26,6 +26,15 @@
<para>
<itemizedlist>
<listitem>
<para>
Add <option>--terse</option> to <command><link linkend="repmgr-cluster-show">repmgr cluster show</link></command> (GitHub #521).
</para>
<para>
This makes it easier to copy the output into emails, chats etc. as a compact table.
</para>
</listitem>
<listitem>
<para>
<command>repmgr --version-number</command> outputs the &quot;raw&quot;
@@ -34,6 +43,7 @@
of the &repmgr; version.
</para>
</listitem>
</itemizedlist>
</para>
</sect2>

View File

@@ -120,6 +120,15 @@
</listitem>
</varlistentry>
<varlistentry>
<term><option>--terse</option></term>
<listitem>
<para>
Suppress display of the <literal>conninfo</literal> column.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--verbose</option></term>
<listitem>

View File

@@ -102,6 +102,7 @@ do_cluster_show(void)
exit(ERR_BAD_CONFIG);
}
/* Initialize column headers */
strncpy(headers_show[SHOW_ID].title, _("ID"), MAXLEN);
strncpy(headers_show[SHOW_NAME].title, _("Name"), MAXLEN);
strncpy(headers_show[SHOW_ROLE].title, _("Role"), MAXLEN);
@@ -117,7 +118,20 @@ do_cluster_show(void)
for (i = 0; i < SHOW_HEADER_COUNT; i++)
{
headers_show[i].max_length = strlen(headers_show[i].title);
headers_show[i].display = true;
if (runtime_options.terse == true)
{
if (i == SHOW_CONNINFO)
{
headers_show[i].display = false;
}
}
if (headers_show[i].display == true)
{
headers_show[i].max_length = strlen(headers_show[i].title);
}
}
for (cell = nodes.head; cell; cell = cell->next)
@@ -347,6 +361,12 @@ do_cluster_show(void)
for (i = 0; i < SHOW_HEADER_COUNT; i++)
{
if (runtime_options.terse == true)
{
if (headers_show[i].display == false)
continue;
}
if (headers_show[i].cur_length > headers_show[i].max_length)
{
headers_show[i].max_length = headers_show[i].cur_length;
@@ -398,7 +418,13 @@ do_cluster_show(void)
printf("| %-*s ", headers_show[SHOW_STATUS].max_length, cell->node_info->details);
printf("| %-*s ", headers_show[SHOW_UPSTREAM_NAME].max_length, cell->node_info->upstream_node_name);
printf("| %-*s ", headers_show[SHOW_LOCATION].max_length, cell->node_info->location);
printf("| %-*s\n", headers_show[SHOW_CONNINFO].max_length, cell->node_info->conninfo);
if (headers_show[SHOW_CONNINFO].display == true)
{
printf("| %-*s", headers_show[SHOW_CONNINFO].max_length, cell->node_info->conninfo);
}
puts("");
}
}

View File

@@ -91,6 +91,7 @@ do_daemon_status(void)
for (i = 0; i < STATUS_HEADER_COUNT; i++)
{
headers_status[i].max_length = strlen(headers_status[i].title);
headers_status[i].display = true;
}
i = 0;

View File

@@ -199,6 +199,7 @@ typedef struct ColHeader
char title[MAXLEN];
int max_length;
int cur_length;
bool display;
} ColHeader;

View File

@@ -1947,9 +1947,20 @@ void
print_status_header(int cols, ColHeader *headers)
{
int i;
int max_cols = 0;
/* count how many columns we actually need to display */
for (i = 0; i < cols; i++)
{
if (headers[i].display == true)
max_cols ++;
}
for (i = 0; i < cols; i++)
{
if (headers[i].display == false)
continue;
if (i == 0)
printf(" ");
else
@@ -1959,17 +1970,22 @@ print_status_header(int cols, ColHeader *headers)
headers[i].max_length,
headers[i].title);
}
printf("\n");
printf("-");
for (i = 0; i < cols; i++)
for (i = 0; i < max_cols; i++)
{
int j;
if (headers[i].display == false)
continue;
for (j = 0; j < headers[i].max_length; j++)
printf("-");
if (i < (cols - 1))
if (i < (max_cols - 1))
printf("-+-");
else
printf("-");