mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-22 17:42:57 +00:00
feat: added prometheus metrics support
This commit is contained in:
@@ -6,6 +6,7 @@ RUN apk update && \
|
|||||||
apk upgrade && \
|
apk upgrade && \
|
||||||
apk add openssl && \
|
apk add openssl && \
|
||||||
apk add nginx && \
|
apk add nginx && \
|
||||||
|
apk add nginx-mod-http-vts && \
|
||||||
rm -rf /var/cache/apk/*
|
rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
ADD . /app
|
ADD . /app
|
||||||
|
|||||||
@@ -16,8 +16,9 @@
|
|||||||
import {ConfigFile} from '../src/common';
|
import {ConfigFile} from '../src/common';
|
||||||
|
|
||||||
const config: ConfigFile = {
|
const config: ConfigFile = {
|
||||||
activeVersions: ['1\\.0\\.\\d+','2\\.0\\.\\d+'],
|
activeVersions: ['1\\.0\\.\\d+', '2\\.0\\.\\d+'],
|
||||||
hiddenRoutes: ['/bulk'],
|
hiddenRoutes: ['/bulk'],
|
||||||
|
metrics: false,
|
||||||
outdatedVersions: ['0\\.8\\.\\d+', '0\\.5\\.\\d+', '0\\.6\\.\\d+', '0\\.7\\.\\d+'],
|
outdatedVersions: ['0\\.8\\.\\d+', '0\\.5\\.\\d+', '0\\.6\\.\\d+', '0\\.7\\.\\d+'],
|
||||||
output: '/etc/nginx/http.d/default.conf',
|
output: '/etc/nginx/http.d/default.conf',
|
||||||
rateLimitAllowList: ['127.0.0.1/32'],
|
rateLimitAllowList: ['127.0.0.1/32'],
|
||||||
|
|||||||
7
fixtures/metrics.template
Normal file
7
fixtures/metrics.template
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
server {
|
||||||
|
listen 8080;
|
||||||
|
location /metrics {
|
||||||
|
vhost_traffic_status_display;
|
||||||
|
vhost_traffic_status_display_format prometheus;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
load_module modules/ngx_http_vhost_traffic_status_module.so;
|
||||||
|
|
||||||
worker_processes 1;
|
worker_processes 1;
|
||||||
|
|
||||||
error_log stderr;
|
error_log stderr;
|
||||||
@@ -9,6 +11,7 @@ events {
|
|||||||
}
|
}
|
||||||
|
|
||||||
http {
|
http {
|
||||||
|
vhost_traffic_status_zone;
|
||||||
include mime.types;
|
include mime.types;
|
||||||
default_type application/octet-stream;
|
default_type application/octet-stream;
|
||||||
access_log /dev/stdout;
|
access_log /dev/stdout;
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
{{{ metrics }}}
|
||||||
|
|
||||||
{{{ dockerVersionMap }}}
|
{{{ dockerVersionMap }}}
|
||||||
|
|
||||||
# create a custom request limit zone which can handle 160,000 IP-Addresses at the same time
|
# create a custom request limit zone which can handle 160,000 IP-Addresses at the same time
|
||||||
|
|||||||
@@ -59,12 +59,16 @@ export interface ConfigFile {
|
|||||||
* List of hidden routes
|
* List of hidden routes
|
||||||
*/
|
*/
|
||||||
hiddenRoutes: string[];
|
hiddenRoutes: string[];
|
||||||
|
/**
|
||||||
|
* Enables metrics on /metrics route
|
||||||
|
*/
|
||||||
|
metrics: boolean;
|
||||||
/**
|
/**
|
||||||
* List of outdated versions
|
* List of outdated versions
|
||||||
*/
|
*/
|
||||||
outdatedVersions: string[];
|
outdatedVersions: string[];
|
||||||
/**
|
/**
|
||||||
* Output?! TODO
|
* Path the generated config will be written to
|
||||||
*/
|
*/
|
||||||
output: string;
|
output: string;
|
||||||
/**
|
/**
|
||||||
@@ -93,6 +97,10 @@ export interface TemplateView {
|
|||||||
* Listener
|
* Listener
|
||||||
*/
|
*/
|
||||||
listener: string;
|
listener: string;
|
||||||
|
/**
|
||||||
|
* Local server with listener for /metrics route
|
||||||
|
*/
|
||||||
|
metrics: string;
|
||||||
/**
|
/**
|
||||||
* Allow list for rate limiting
|
* Allow list for rate limiting
|
||||||
*/
|
*/
|
||||||
|
|||||||
11
src/main.ts
11
src/main.ts
@@ -241,6 +241,16 @@ ${protocolHardeningParameters}
|
|||||||
return listener;
|
return listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads predefined server entry with metrics location
|
||||||
|
*/
|
||||||
|
export async function generateMetricsServer(enableMetrics: boolean): Promise<string> {
|
||||||
|
if (!enableMetrics) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return asyncReadFile('./fixtures/metrics.template', 'utf8');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render a mustache template file with given view object
|
* Render a mustache template file with given view object
|
||||||
*
|
*
|
||||||
@@ -300,6 +310,7 @@ export async function getTemplateView(containers: Dockerode.ContainerInfo[]): Pr
|
|||||||
),
|
),
|
||||||
hiddenRoutes: (await Promise.all(hiddenRoutesPromises)).join(''),
|
hiddenRoutes: (await Promise.all(hiddenRoutesPromises)).join(''),
|
||||||
listener: generateListener(configFile.sslFilePaths),
|
listener: generateListener(configFile.sslFilePaths),
|
||||||
|
metrics: await generateMetricsServer(configFile.metrics),
|
||||||
rateLimitAllowList: generateRateLimitAllowList(configFile.rateLimitAllowList),
|
rateLimitAllowList: generateRateLimitAllowList(configFile.rateLimitAllowList),
|
||||||
staticRoute: await renderTemplate(path.join('fixtures', 'staticRoute.template'), {cors}),
|
staticRoute: await renderTemplate(path.join('fixtures', 'staticRoute.template'), {cors}),
|
||||||
visibleRoutes: (await Promise.all(visibleRoutesPromises)).join(''),
|
visibleRoutes: (await Promise.all(visibleRoutesPromises)).join(''),
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import {
|
|||||||
getGatewayOfStAppsBackend,
|
getGatewayOfStAppsBackend,
|
||||||
getTemplateView,
|
getTemplateView,
|
||||||
generateListener,
|
generateListener,
|
||||||
|
generateMetricsServer,
|
||||||
getContainers,
|
getContainers,
|
||||||
} from '../src/main';
|
} from '../src/main';
|
||||||
import {resolve} from 'path';
|
import {resolve} from 'path';
|
||||||
@@ -399,6 +400,16 @@ Please check if docker is running and Node.js can access the docker socket (/var
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test
|
||||||
|
async 'include metrics config'() {
|
||||||
|
expect(await generateMetricsServer(true)).length.to.be.greaterThan(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@test
|
||||||
|
async 'omit metrics config'() {
|
||||||
|
expect(await generateMetricsServer(false)).to.equal('');
|
||||||
|
}
|
||||||
|
|
||||||
@test
|
@test
|
||||||
'create listener faulty config'() {
|
'create listener faulty config'() {
|
||||||
expect(
|
expect(
|
||||||
|
|||||||
Reference in New Issue
Block a user