odissey: implement show servers

This commit is contained in:
Dmitry Simonenko 2017-08-17 18:16:16 +03:00
parent 758666070d
commit c3c782b854
3 changed files with 112 additions and 3 deletions

View File

@ -176,6 +176,108 @@ od_console_show_stats(od_client_t *client)
return 0;
}
static inline int
od_console_show_servers_callback(od_server_t *server, void *arg)
{
od_client_t *client = arg;
shapito_stream_t *stream = &client->stream;
od_route_t *route = server->route;
int offset;
offset = shapito_be_write_data_row(stream);
char data[64];
int data_len;
/* type */
data_len = snprintf(data, sizeof(data), "S");
int rc;
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* user */
rc = shapito_be_write_data_row_add(stream, offset,
route->id.user,
route->id.user_len);
if (rc == -1)
return -1;
/* database */
rc = shapito_be_write_data_row_add(stream, offset,
route->id.database,
route->id.database_len);
if (rc == -1)
return -1;
/* state */
char *state = "";
if (server->state == OD_SIDLE)
state = "idle";
else
if (server->state == OD_SACTIVE)
state = "active";
rc = shapito_be_write_data_row_add(stream, offset,
state,
strlen(state));
if (rc == -1)
return -1;
/* addr */
od_getpeername(server->io, data, sizeof(data), 1, 0);
data_len = strlen(data);
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* port */
od_getpeername(server->io, data, sizeof(data), 0, 1);
data_len = strlen(data);
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* local_addr */
od_getsockname(server->io, data, sizeof(data), 1, 0);
data_len = strlen(data);
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* local_port */
od_getsockname(server->io, data, sizeof(data), 0, 1);
data_len = strlen(data);
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* connect_time */
data_len = snprintf(data, sizeof(data), "%s", "");
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* request_time */
data_len = snprintf(data, sizeof(data), "%s", "");
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* ptr */
data_len = snprintf(data, sizeof(data), "%s%.*s",
server->id.id_prefix,
(signed)sizeof(server->id.id), server->id.id);
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* link */
data_len = snprintf(data, sizeof(data), "%s", "");
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* remote_pid */
data_len = snprintf(data, sizeof(data), "0");
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
/* tls */
data_len = snprintf(data, sizeof(data), "%s", "");
rc = shapito_be_write_data_row_add(stream, offset, data, data_len);
if (rc == -1)
return -1;
return 0;
}
static inline int
od_console_show_servers(od_client_t *client)
{
@ -200,7 +302,14 @@ od_console_show_servers(od_client_t *client)
"tls");
if (rc == -1)
return -1;
(void)router;
od_routepool_foreach(&router->route_pool, OD_SIDLE,
od_console_show_servers_callback,
client);
od_routepool_foreach(&router->route_pool, OD_SACTIVE,
od_console_show_servers_callback,
client);
rc = shapito_be_write_complete(stream, "SHOW", 5);
if (rc == -1)

View File

@ -521,7 +521,7 @@ void od_frontend(void *arg)
/* log client connection */
if (instance->scheme.log_session) {
char peer[128];
od_getpeername(client->io, peer, sizeof(peer));
od_getpeername(client->io, peer, sizeof(peer), 1, 1);
od_log_client(&instance->logger, &client->id, NULL,
"new client connection %s",
peer);

View File

@ -75,7 +75,7 @@ od_pooler_server(void *arg)
}
char addr_name[128];
od_getaddrname(server->addr, addr_name, sizeof(addr_name));
od_getaddrname(server->addr, addr_name, sizeof(addr_name), 1, 1);
/* bind to listen address and port */
int rc;