mirror of
https://github.com/EnterpriseDB/repmgr.git
synced 2026-03-22 22:56:29 +00:00
114 lines
2.3 KiB
C
114 lines
2.3 KiB
C
/*
|
|
* repmgr-action-cluster.c
|
|
*
|
|
* Implements cluster information actions for the repmgr command line utility
|
|
*
|
|
* Copyright (c) 2ndQuadrant, 2010-2017
|
|
*/
|
|
|
|
#include "repmgr.h"
|
|
|
|
#include "repmgr-client-global.h"
|
|
#include "repmgr-action-cluster.h"
|
|
|
|
/*
|
|
* CLUSTER EVENT
|
|
*
|
|
* Parameters:
|
|
* --limit[=20]
|
|
* --all
|
|
* --node_[id|name]
|
|
* --event
|
|
*/
|
|
void
|
|
do_cluster_event(void)
|
|
{
|
|
PGconn *conn;
|
|
PQExpBufferData query;
|
|
PQExpBufferData where_clause;
|
|
PGresult *res;
|
|
int i;
|
|
|
|
conn = establish_db_connection(config_file_options.conninfo, true);
|
|
|
|
initPQExpBuffer(&query);
|
|
initPQExpBuffer(&where_clause);
|
|
|
|
appendPQExpBuffer(&query,
|
|
" SELECT node_id, event, successful, \n"
|
|
" TO_CHAR(event_timestamp, 'YYYY-MM-DD HH24:MI:SS') AS timestamp, \n"
|
|
" details \n"
|
|
" FROM repmgr.events");
|
|
|
|
if (runtime_options.node_id != UNKNOWN_NODE_ID)
|
|
{
|
|
append_where_clause(&where_clause,
|
|
"node_id=%i", runtime_options.node_id);
|
|
}
|
|
|
|
if (runtime_options.event[0] != '\0')
|
|
{
|
|
char *escaped = escape_string(conn, runtime_options.event);
|
|
|
|
if (escaped == NULL)
|
|
{
|
|
log_error(_("unable to escape value provided for event"));
|
|
}
|
|
else
|
|
{
|
|
append_where_clause(&where_clause,
|
|
"event='%s'",
|
|
escaped);
|
|
pfree(escaped);
|
|
}
|
|
}
|
|
|
|
appendPQExpBuffer(&query, "\n%s\n",
|
|
where_clause.data);
|
|
|
|
appendPQExpBuffer(&query,
|
|
" ORDER BY event_timestamp DESC");
|
|
|
|
if (runtime_options.all == false && runtime_options.limit > 0)
|
|
{
|
|
appendPQExpBuffer(&query, " LIMIT %i",
|
|
runtime_options.limit);
|
|
}
|
|
|
|
log_debug("do_cluster_event():\n%s", query.data);
|
|
res = PQexec(conn, query.data);
|
|
|
|
if (PQresultStatus(res) != PGRES_TUPLES_OK)
|
|
{
|
|
log_error(_("unable to execute event query:\n %s"),
|
|
PQerrorMessage(conn));
|
|
PQclear(res);
|
|
PQfinish(conn);
|
|
exit(ERR_DB_QUERY);
|
|
}
|
|
|
|
if (PQntuples(res) == 0) {
|
|
printf(_("no matching events found\n"));
|
|
PQclear(res);
|
|
PQfinish(conn);
|
|
return;
|
|
}
|
|
|
|
/* XXX improve formatting */
|
|
puts("node_id,event,ok,timestamp,details");
|
|
puts("----------------------------------");
|
|
for(i = 0; i < PQntuples(res); i++)
|
|
{
|
|
printf("%s,%s,%s,%s,%s\n",
|
|
PQgetvalue(res, i, 0),
|
|
PQgetvalue(res, i, 1),
|
|
PQgetvalue(res, i, 2),
|
|
PQgetvalue(res, i, 3),
|
|
PQgetvalue(res, i, 4));
|
|
}
|
|
|
|
PQclear(res);
|
|
|
|
PQfinish(conn);
|
|
}
|