Skip to content

Commit

Permalink
[#25] Improve exposition format
Browse files Browse the repository at this point in the history
  • Loading branch information
nikitabugrovsky authored and jesperpedersen committed Apr 11, 2022
1 parent 63beafb commit 6328aa5
Showing 1 changed file with 36 additions and 12 deletions.
48 changes: 36 additions & 12 deletions src/libpgexporter/prometheus.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ static void settings_information(int client_fd);
static int send_chunk(int client_fd, char* data);

static char* get_value(char* tag, char* name, char* val);
static char* safe_prometheus_key(char* key);

void
pgexporter_prometheus(int client_fd)
Expand Down Expand Up @@ -510,7 +511,7 @@ version_information(int client_fd)
d = pgexporter_append(d, "pgexporter_postgresql_version{server=\"");
d = pgexporter_append(d, &config->servers[server].name[0]);
d = pgexporter_append(d, "\",version=\"");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, "\"} ");
d = pgexporter_append(d, "1");
d = pgexporter_append(d, "\n");
Expand Down Expand Up @@ -587,7 +588,7 @@ uptime_information(int client_fd)
d = pgexporter_append(d, "pgexporter_postgresql_uptime{server=\"");
d = pgexporter_append(d, &config->servers[server].name[0]);
d = pgexporter_append(d, "\"} ");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, "\n");
data = pgexporter_append(data, d);
free(d);
Expand Down Expand Up @@ -1105,7 +1106,7 @@ database_information(int client_fd)
d = pgexporter_append(d, "_size{server=\"");
d = pgexporter_append(d, &config->servers[current->server].name[0]);
d = pgexporter_append(d, "\",database=\"");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, "\"} ");
d = pgexporter_append(d, get_value(&all->tag[0], pgexporter_get_column(0, current), pgexporter_get_column(1, current)));
d = pgexporter_append(d, "\n");
Expand Down Expand Up @@ -1184,7 +1185,7 @@ replication_information(int client_fd)
d = pgexporter_append(d, "_active{server=\"");
d = pgexporter_append(d, &config->servers[current->server].name[0]);
d = pgexporter_append(d, "\",slot=\"");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, "\"} ");
d = pgexporter_append(d, get_value(&all->tag[0], pgexporter_get_column(0, current), pgexporter_get_column(1, current)));
d = pgexporter_append(d, "\n");
Expand Down Expand Up @@ -1263,9 +1264,9 @@ locks_information(int client_fd)
d = pgexporter_append(d, "_count{server=\"");
d = pgexporter_append(d, &config->servers[current->server].name[0]);
d = pgexporter_append(d, "\",database=\"");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, "\",mode=\"");
d = pgexporter_append(d, pgexporter_get_column(1, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(1, current)));
d = pgexporter_append(d, "\"} ");
d = pgexporter_append(d, get_value(&all->tag[0], pgexporter_get_column(1, current), pgexporter_get_column(2, current)));
d = pgexporter_append(d, "\n");
Expand Down Expand Up @@ -1458,7 +1459,7 @@ stat_database_information(int client_fd)
d = pgexporter_append(d, "{server=\"");
d = pgexporter_append(d, &config->servers[current->server].name[0]);
d = pgexporter_append(d, "\",database=\"");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, "\"} ");
d = pgexporter_append(d, get_value(&all->tag[0], pgexporter_get_column(i, current), pgexporter_get_column(i, current)));
d = pgexporter_append(d, "\n");
Expand Down Expand Up @@ -1557,7 +1558,7 @@ stat_database_conflicts_information(int client_fd)
d = pgexporter_append(d, "{server=\"");
d = pgexporter_append(d, &config->servers[current->server].name[0]);
d = pgexporter_append(d, "\",database=\"");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, "\"} ");
d = pgexporter_append(d, get_value(&all->tag[0], pgexporter_get_column(i, current), pgexporter_get_column(i, current)));
d = pgexporter_append(d, "\n");
Expand Down Expand Up @@ -1619,9 +1620,9 @@ settings_information(int client_fd)
d = pgexporter_append(d, "#HELP pgexporter_");
d = pgexporter_append(d, &all->tag[0]);
d = pgexporter_append(d, "_");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, " ");
d = pgexporter_append(d, pgexporter_get_column(2, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(2, current)));
d = pgexporter_append(d, "\n");
data = pgexporter_append(data, d);
free(d);
Expand All @@ -1630,7 +1631,7 @@ settings_information(int client_fd)
d = pgexporter_append(d, "#TYPE pgexporter_");
d = pgexporter_append(d, &all->tag[0]);
d = pgexporter_append(d, "_");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, " gauge");
d = pgexporter_append(d, "\n");
data = pgexporter_append(data, d);
Expand All @@ -1641,7 +1642,7 @@ settings_information(int client_fd)
d = pgexporter_append(d, "pgexporter_");
d = pgexporter_append(d, &all->tag[0]);
d = pgexporter_append(d, "_");
d = pgexporter_append(d, pgexporter_get_column(0, current));
d = pgexporter_append(d, safe_prometheus_key(pgexporter_get_column(0, current)));
d = pgexporter_append(d, "{server=\"");
d = pgexporter_append(d, &config->servers[current->server].name[0]);
d = pgexporter_append(d, "\"} ");
Expand Down Expand Up @@ -1745,3 +1746,26 @@ get_value(char* tag, char* name, char* val)
/* Map general strings to 1 */
return "1";
}

static char*
safe_prometheus_key(char* key)
{
int i = 0;

while (key[i] != '\0')
{
if (key[i] == '.')
{
if (i == strlen(key) - 1)
{
key[i] = '\0';
}
else
{
key[i] = '_';
}
}
i++;
}
return key;
}

0 comments on commit 6328aa5

Please sign in to comment.