@studion/infra-code-blocks 2.0.0-alpha.5 → 2.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/cloudfront/index.d.ts.map +1 -1
- package/dist/components/cloudfront/index.js +19 -24
- package/dist/components/database/builder.d.ts +2 -3
- package/dist/components/database/builder.d.ts.map +1 -1
- package/dist/components/database/builder.js +12 -12
- package/dist/components/database/database-replica.d.ts.map +1 -1
- package/dist/components/database/database-replica.js +1 -0
- package/dist/components/database/index.d.ts +9 -5
- package/dist/components/database/index.d.ts.map +1 -1
- package/dist/components/database/index.js +30 -30
- package/dist/components/grafana/builder.d.ts +21 -0
- package/dist/components/grafana/builder.d.ts.map +1 -0
- package/dist/components/grafana/builder.js +57 -0
- package/dist/components/grafana/connections/amp-connection.d.ts +23 -0
- package/dist/components/grafana/connections/amp-connection.d.ts.map +1 -0
- package/dist/components/grafana/connections/amp-connection.js +73 -0
- package/dist/components/grafana/connections/cloudwatch-logs-connection.d.ts +18 -0
- package/dist/components/grafana/connections/cloudwatch-logs-connection.d.ts.map +1 -0
- package/dist/components/grafana/connections/cloudwatch-logs-connection.js +59 -0
- package/dist/components/grafana/connections/connection.d.ts +20 -0
- package/dist/components/grafana/connections/connection.d.ts.map +1 -0
- package/dist/components/grafana/connections/connection.js +57 -0
- package/dist/components/grafana/connections/index.d.ts +5 -0
- package/dist/components/grafana/connections/index.d.ts.map +1 -0
- package/dist/components/grafana/connections/index.js +11 -0
- package/dist/components/grafana/connections/xray-connection.d.ts +22 -0
- package/dist/components/grafana/connections/xray-connection.d.ts.map +1 -0
- package/dist/components/grafana/connections/xray-connection.js +76 -0
- package/dist/components/grafana/dashboards/builder.d.ts +22 -0
- package/dist/components/grafana/dashboards/builder.d.ts.map +1 -0
- package/dist/components/grafana/dashboards/builder.js +53 -0
- package/dist/components/grafana/dashboards/index.d.ts +2 -2
- package/dist/components/grafana/dashboards/index.d.ts.map +1 -1
- package/dist/components/grafana/dashboards/index.js +5 -4
- package/dist/components/grafana/dashboards/slo.d.ts +18 -0
- package/dist/components/grafana/dashboards/slo.d.ts.map +1 -0
- package/dist/components/grafana/dashboards/slo.js +77 -0
- package/dist/components/grafana/grafana.d.ts +19 -0
- package/dist/components/grafana/grafana.d.ts.map +1 -0
- package/dist/components/grafana/grafana.js +24 -0
- package/dist/components/grafana/index.d.ts +4 -0
- package/dist/components/grafana/index.d.ts.map +1 -1
- package/dist/components/grafana/index.js +11 -1
- package/dist/components/grafana/panels/availability.d.ts +15 -0
- package/dist/components/grafana/panels/availability.d.ts.map +1 -0
- package/dist/components/grafana/panels/availability.js +20 -0
- package/dist/components/grafana/panels/helpers.d.ts +6 -0
- package/dist/components/grafana/panels/helpers.d.ts.map +1 -0
- package/dist/components/grafana/panels/index.d.ts +6 -0
- package/dist/components/grafana/panels/index.d.ts.map +1 -0
- package/dist/components/grafana/panels/index.js +21 -0
- package/dist/components/grafana/panels/latency.d.ts +31 -0
- package/dist/components/grafana/panels/latency.d.ts.map +1 -0
- package/dist/components/grafana/panels/latency.js +36 -0
- package/dist/components/grafana/panels/success-rate.d.ts +22 -0
- package/dist/components/grafana/panels/success-rate.d.ts.map +1 -0
- package/dist/components/grafana/panels/success-rate.js +28 -0
- package/dist/components/grafana/panels/types.d.ts +57 -0
- package/dist/components/grafana/panels/types.d.ts.map +1 -0
- package/dist/components/web-server/index.js +1 -1
- package/package.json +30 -26
- package/dist/components/grafana/dashboards/panels.d.ts +0 -6
- package/dist/components/grafana/dashboards/panels.d.ts.map +0 -1
- package/dist/components/grafana/dashboards/types.d.ts +0 -66
- package/dist/components/grafana/dashboards/types.d.ts.map +0 -1
- package/dist/components/grafana/dashboards/web-server-slo.d.ts +0 -17
- package/dist/components/grafana/dashboards/web-server-slo.d.ts.map +0 -1
- package/dist/components/grafana/dashboards/web-server-slo.js +0 -98
- /package/dist/components/grafana/{dashboards/panels.js → panels/helpers.js} +0 -0
- /package/dist/components/grafana/{dashboards → panels}/types.js +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./helpers"), exports);
|
|
19
|
+
__exportStar(require("./availability"), exports);
|
|
20
|
+
__exportStar(require("./success-rate"), exports);
|
|
21
|
+
__exportStar(require("./latency"), exports);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { queries as promQ } from '../../prometheus';
|
|
2
|
+
import { Panel } from './types';
|
|
3
|
+
export declare function createLatencyPanel(config: {
|
|
4
|
+
target: number;
|
|
5
|
+
window: promQ.TimeRange;
|
|
6
|
+
targetLatency: number;
|
|
7
|
+
filter: string;
|
|
8
|
+
ampNamespace: string;
|
|
9
|
+
dataSourceName: string;
|
|
10
|
+
}): Panel;
|
|
11
|
+
export declare function createLatencyPercentilePanel(config: {
|
|
12
|
+
target: number;
|
|
13
|
+
shortWindow: promQ.TimeRange;
|
|
14
|
+
filter: string;
|
|
15
|
+
ampNamespace: string;
|
|
16
|
+
dataSourceName: string;
|
|
17
|
+
}): Panel;
|
|
18
|
+
export declare function createLatencyPercentagePanel(config: {
|
|
19
|
+
targetLatency: number;
|
|
20
|
+
shortWindow: promQ.TimeRange;
|
|
21
|
+
filter: string;
|
|
22
|
+
ampNamespace: string;
|
|
23
|
+
dataSourceName: string;
|
|
24
|
+
}): Panel;
|
|
25
|
+
export declare function createLatencyBurnRatePanel(config: {
|
|
26
|
+
target: number;
|
|
27
|
+
targetLatency: number;
|
|
28
|
+
ampNamespace: string;
|
|
29
|
+
dataSourceName: string;
|
|
30
|
+
}): Panel;
|
|
31
|
+
//# sourceMappingURL=latency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latency.d.ts","sourceRoot":"","sources":["../../../../src/components/grafana/panels/latency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAQhC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,KAAK,CAgBR;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,KAAK,CAiBR;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,KAAK,CAgBR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,KAAK,CAkBR"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLatencyPanel = createLatencyPanel;
|
|
4
|
+
exports.createLatencyPercentilePanel = createLatencyPercentilePanel;
|
|
5
|
+
exports.createLatencyPercentagePanel = createLatencyPercentagePanel;
|
|
6
|
+
exports.createLatencyBurnRatePanel = createLatencyBurnRatePanel;
|
|
7
|
+
const prometheus_1 = require("../../prometheus");
|
|
8
|
+
const helpers_1 = require("./helpers");
|
|
9
|
+
function createLatencyPanel(config) {
|
|
10
|
+
return (0, helpers_1.createStatPercentagePanel)('Request % below 250ms', { x: 16, y: 0, w: 8, h: 8 }, config.dataSourceName, {
|
|
11
|
+
label: 'Request % below 250ms',
|
|
12
|
+
query: prometheus_1.queries.getLatencyPercentageQuery(config.ampNamespace, config.window, config.targetLatency, config.filter),
|
|
13
|
+
thresholds: [],
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function createLatencyPercentilePanel(config) {
|
|
17
|
+
return (0, helpers_1.createTimeSeriesPanel)('99th Percentile Latency', { x: 12, y: 16, w: 12, h: 8 }, config.dataSourceName, {
|
|
18
|
+
label: '99th Percentile Latency',
|
|
19
|
+
query: prometheus_1.queries.getPercentileLatencyQuery(config.ampNamespace, config.shortWindow, config.target, config.filter),
|
|
20
|
+
thresholds: [],
|
|
21
|
+
}, 'ms');
|
|
22
|
+
}
|
|
23
|
+
function createLatencyPercentagePanel(config) {
|
|
24
|
+
return (0, helpers_1.createTimeSeriesPercentagePanel)('Request percentage below 250ms', { x: 0, y: 24, w: 12, h: 8 }, config.dataSourceName, {
|
|
25
|
+
label: 'Request percentage below 250ms',
|
|
26
|
+
query: prometheus_1.queries.getLatencyPercentageQuery(config.ampNamespace, config.shortWindow, config.targetLatency, config.filter),
|
|
27
|
+
thresholds: [],
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function createLatencyBurnRatePanel(config) {
|
|
31
|
+
return (0, helpers_1.createBurnRatePanel)('Latency Burn Rate', { x: 16, y: 8, w: 8, h: 4 }, config.dataSourceName, {
|
|
32
|
+
label: 'Burn Rate',
|
|
33
|
+
query: prometheus_1.queries.getBurnRateQuery(prometheus_1.queries.getLatencyRateQuery(config.ampNamespace, '1h', config.targetLatency), config.target),
|
|
34
|
+
thresholds: [],
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { queries as promQ } from '../../prometheus';
|
|
2
|
+
import { Panel } from './types';
|
|
3
|
+
export declare function createSuccessRatePanel(config: {
|
|
4
|
+
target: number;
|
|
5
|
+
window: promQ.TimeRange;
|
|
6
|
+
filter: string;
|
|
7
|
+
ampNamespace: string;
|
|
8
|
+
dataSourceName: string;
|
|
9
|
+
}): Panel;
|
|
10
|
+
export declare function createSuccessRateTimeSeriesPanel(config: {
|
|
11
|
+
shortWindow: promQ.TimeRange;
|
|
12
|
+
filter: string;
|
|
13
|
+
ampNamespace: string;
|
|
14
|
+
dataSourceName: string;
|
|
15
|
+
}): Panel;
|
|
16
|
+
export declare function createSuccessRateBurnRatePanel(config: {
|
|
17
|
+
target: number;
|
|
18
|
+
filter: string;
|
|
19
|
+
ampNamespace: string;
|
|
20
|
+
dataSourceName: string;
|
|
21
|
+
}): Panel;
|
|
22
|
+
//# sourceMappingURL=success-rate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"success-rate.d.ts","sourceRoot":"","sources":["../../../../src/components/grafana/panels/success-rate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAOhC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,KAAK,CAeR;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACvD,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,KAAK,CAeR;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,KAAK,CAcR"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSuccessRatePanel = createSuccessRatePanel;
|
|
4
|
+
exports.createSuccessRateTimeSeriesPanel = createSuccessRateTimeSeriesPanel;
|
|
5
|
+
exports.createSuccessRateBurnRatePanel = createSuccessRateBurnRatePanel;
|
|
6
|
+
const prometheus_1 = require("../../prometheus");
|
|
7
|
+
const helpers_1 = require("./helpers");
|
|
8
|
+
function createSuccessRatePanel(config) {
|
|
9
|
+
return (0, helpers_1.createStatPercentagePanel)('Success Rate', { x: 8, y: 0, w: 8, h: 8 }, config.dataSourceName, {
|
|
10
|
+
label: 'Success Rate',
|
|
11
|
+
query: prometheus_1.queries.getSuccessPercentageQuery(config.ampNamespace, config.window, config.filter),
|
|
12
|
+
thresholds: [],
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function createSuccessRateTimeSeriesPanel(config) {
|
|
16
|
+
return (0, helpers_1.createTimeSeriesPercentagePanel)('HTTP Request Success Rate', { x: 0, y: 16, w: 12, h: 8 }, config.dataSourceName, {
|
|
17
|
+
label: 'Success Rate',
|
|
18
|
+
query: prometheus_1.queries.getSuccessPercentageQuery(config.ampNamespace, config.shortWindow, config.filter),
|
|
19
|
+
thresholds: [],
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function createSuccessRateBurnRatePanel(config) {
|
|
23
|
+
return (0, helpers_1.createBurnRatePanel)('Success Rate Burn Rate', { x: 8, y: 8, w: 8, h: 4 }, config.dataSourceName, {
|
|
24
|
+
label: 'Burn Rate',
|
|
25
|
+
query: prometheus_1.queries.getBurnRateQuery(prometheus_1.queries.getSuccessRateQuery(config.ampNamespace, '1h', config.filter), config.target),
|
|
26
|
+
thresholds: [],
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export type Panel = {
|
|
2
|
+
title: string;
|
|
3
|
+
gridPos: Panel.Position;
|
|
4
|
+
type: string;
|
|
5
|
+
datasource: string;
|
|
6
|
+
targets: {
|
|
7
|
+
expr: string;
|
|
8
|
+
legendFormat: string;
|
|
9
|
+
}[];
|
|
10
|
+
fieldConfig: {
|
|
11
|
+
defaults: {
|
|
12
|
+
unit?: string;
|
|
13
|
+
min?: number;
|
|
14
|
+
max?: number;
|
|
15
|
+
color?: {
|
|
16
|
+
mode: string;
|
|
17
|
+
};
|
|
18
|
+
thresholds?: {
|
|
19
|
+
mode: string;
|
|
20
|
+
steps: Threshold[];
|
|
21
|
+
};
|
|
22
|
+
custom?: {
|
|
23
|
+
lineInterpolation?: string;
|
|
24
|
+
spanNulls: boolean;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
options?: {
|
|
29
|
+
colorMode?: string;
|
|
30
|
+
graphMode?: string;
|
|
31
|
+
justifyMode?: string;
|
|
32
|
+
textMode?: string;
|
|
33
|
+
reduceOptions?: {
|
|
34
|
+
calcs?: string[];
|
|
35
|
+
fields?: string;
|
|
36
|
+
values?: boolean;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
export declare namespace Panel {
|
|
41
|
+
type Position = {
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
w: number;
|
|
45
|
+
h: number;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export type Metric = {
|
|
49
|
+
label: string;
|
|
50
|
+
query: string;
|
|
51
|
+
thresholds: Threshold[];
|
|
52
|
+
};
|
|
53
|
+
export type Threshold = {
|
|
54
|
+
value: number | null;
|
|
55
|
+
color: string;
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/grafana/panels/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;KACtB,EAAE,CAAC;IACJ,WAAW,EAAE;QACX,QAAQ,EAAE;YACR,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,KAAK,CAAC,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC;aACd,CAAC;YACF,UAAU,CAAC,EAAE;gBACX,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,SAAS,EAAE,CAAC;aACpB,CAAC;YACF,MAAM,CAAC,EAAE;gBACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAC3B,SAAS,EAAE,OAAO,CAAC;aACpB,CAAC;SACH,CAAC;KACH,CAAC;IACF,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE;YACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,CAAC,EAAE,OAAO,CAAC;SAClB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,yBAAiB,KAAK,CAAC;IACrB,KAAY,QAAQ,GAAG;QACrB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
|
|
@@ -208,7 +208,7 @@ class WebServer extends pulumi.ComponentResource {
|
|
|
208
208
|
const certOutput = pulumi.output(certificate);
|
|
209
209
|
return pulumi
|
|
210
210
|
.all([domain, certOutput.domainName, certOutput.subjectAlternativeNames])
|
|
211
|
-
.apply(([domain, certDomain, certSans = []]) => (domain ? [domain] : [...new Set([certDomain, ...certSans])]).map((alias, index) => new aws.route53.Record(`${this.name}-
|
|
211
|
+
.apply(([domain, certDomain, certSans = []]) => (domain ? [domain] : [...new Set([certDomain, ...certSans])]).map((alias, index) => new aws.route53.Record(`${this.name}-dns-a-record-${index}`, {
|
|
212
212
|
type: 'A',
|
|
213
213
|
name: alias,
|
|
214
214
|
zoneId: hostedZoneId,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@studion/infra-code-blocks",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.7",
|
|
4
4
|
"description": "Studion common infra components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"infrastructure",
|
|
@@ -35,41 +35,40 @@
|
|
|
35
35
|
},
|
|
36
36
|
"prettier": "@studion/prettier-config",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@pulumi/aws": "^7.
|
|
39
|
-
"@pulumi/
|
|
40
|
-
"@pulumi/
|
|
41
|
-
"@pulumi/pulumi": "^3.225.0",
|
|
38
|
+
"@pulumi/aws": "^7.23.0",
|
|
39
|
+
"@pulumi/awsx": "^3.3.0",
|
|
40
|
+
"@pulumi/pulumi": "^3.226.0",
|
|
42
41
|
"@pulumi/random": "^4.19.1",
|
|
43
42
|
"@pulumiverse/grafana": "^2.21.0",
|
|
44
43
|
"@upstash/pulumi": "^0.5.0",
|
|
45
|
-
"yaml": "^2.8.
|
|
44
|
+
"yaml": "^2.8.3"
|
|
46
45
|
},
|
|
47
46
|
"devDependencies": {
|
|
48
|
-
"@aws-sdk/client-acm": "^3.
|
|
49
|
-
"@aws-sdk/client-application-auto-scaling": "^3.
|
|
50
|
-
"@aws-sdk/client-cloudfront": "^3.
|
|
51
|
-
"@aws-sdk/client-cloudwatch-logs": "^3.
|
|
52
|
-
"@aws-sdk/client-ec2": "^3.
|
|
53
|
-
"@aws-sdk/client-ecs": "^3.
|
|
54
|
-
"@aws-sdk/client-efs": "^3.
|
|
55
|
-
"@aws-sdk/client-elastic-load-balancing-v2": "^3.
|
|
56
|
-
"@aws-sdk/client-elasticache": "^3.
|
|
57
|
-
"@aws-sdk/client-iam": "^3.
|
|
58
|
-
"@aws-sdk/client-kms": "^3.
|
|
59
|
-
"@aws-sdk/client-rds": "^3.
|
|
60
|
-
"@aws-sdk/client-route-53": "^3.
|
|
61
|
-
"@aws-sdk/client-s3": "^3.
|
|
62
|
-
"@aws-sdk/client-secrets-manager": "^3.
|
|
63
|
-
"@aws-sdk/client-servicediscovery": "^3.
|
|
64
|
-
"@aws-sdk/client-ssm": "^3.
|
|
65
|
-
"@aws-sdk/client-xray": "^3.
|
|
47
|
+
"@aws-sdk/client-acm": "^3.1009.0",
|
|
48
|
+
"@aws-sdk/client-application-auto-scaling": "^3.1009.0",
|
|
49
|
+
"@aws-sdk/client-cloudfront": "^3.1009.0",
|
|
50
|
+
"@aws-sdk/client-cloudwatch-logs": "^3.1009.0",
|
|
51
|
+
"@aws-sdk/client-ec2": "^3.1009.0",
|
|
52
|
+
"@aws-sdk/client-ecs": "^3.1009.0",
|
|
53
|
+
"@aws-sdk/client-efs": "^3.1009.0",
|
|
54
|
+
"@aws-sdk/client-elastic-load-balancing-v2": "^3.1009.0",
|
|
55
|
+
"@aws-sdk/client-elasticache": "^3.1009.0",
|
|
56
|
+
"@aws-sdk/client-iam": "^3.1009.0",
|
|
57
|
+
"@aws-sdk/client-kms": "^3.1009.0",
|
|
58
|
+
"@aws-sdk/client-rds": "^3.1009.0",
|
|
59
|
+
"@aws-sdk/client-route-53": "^3.1009.0",
|
|
60
|
+
"@aws-sdk/client-s3": "^3.1009.0",
|
|
61
|
+
"@aws-sdk/client-secrets-manager": "^3.1009.0",
|
|
62
|
+
"@aws-sdk/client-servicediscovery": "^3.1009.0",
|
|
63
|
+
"@aws-sdk/client-ssm": "^3.1009.0",
|
|
64
|
+
"@aws-sdk/client-xray": "^3.1009.0",
|
|
66
65
|
"@studion/prettier-config": "^0.1.0",
|
|
67
66
|
"@types/node": "^25",
|
|
68
67
|
"exponential-backoff": "^3.1.3",
|
|
69
68
|
"http-status": "^2.1.0",
|
|
70
69
|
"husky": "^9.1.7",
|
|
71
70
|
"ioredis": "^5.10.0",
|
|
72
|
-
"lint-staged": "^16.
|
|
71
|
+
"lint-staged": "^16.4.0",
|
|
73
72
|
"mime": "^4.1.0",
|
|
74
73
|
"nanospinner": "^1.2.2",
|
|
75
74
|
"pathe": "^2.0.3",
|
|
@@ -78,7 +77,12 @@
|
|
|
78
77
|
"tstyche": "^6.2.0",
|
|
79
78
|
"tsx": "^4.21.0",
|
|
80
79
|
"typescript": "^5.9.3",
|
|
81
|
-
"undici": "^7.
|
|
80
|
+
"undici": "^7.24.4"
|
|
81
|
+
},
|
|
82
|
+
"overrides": {
|
|
83
|
+
"release-it": {
|
|
84
|
+
"undici": "6.24.1"
|
|
85
|
+
}
|
|
82
86
|
},
|
|
83
87
|
"publishConfig": {
|
|
84
88
|
"access": "public"
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { Grafana } from './types';
|
|
2
|
-
export declare function createStatPercentagePanel(title: string, position: Grafana.Panel.Position, dataSource: string, metric: Grafana.Metric): Grafana.Panel;
|
|
3
|
-
export declare function createTimeSeriesPercentagePanel(title: string, position: Grafana.Panel.Position, dataSource: string, metric: Grafana.Metric): Grafana.Panel;
|
|
4
|
-
export declare function createTimeSeriesPanel(title: string, position: Grafana.Panel.Position, dataSource: string, metric: Grafana.Metric, unit?: string, min?: number, max?: number): Grafana.Panel;
|
|
5
|
-
export declare function createBurnRatePanel(title: string, position: Grafana.Panel.Position, dataSource: string, metric: Grafana.Metric): Grafana.Panel;
|
|
6
|
-
//# sourceMappingURL=panels.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"panels.d.ts","sourceRoot":"","sources":["../../../../src/components/grafana/dashboards/panels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,MAAM,GACrB,OAAO,CAAC,KAAK,CA0Bf;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,MAAM,GACrB,OAAO,CAAC,KAAK,CAUf;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,IAAI,CAAC,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,KAAK,CA4Bf;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,MAAM,GACrB,OAAO,CAAC,KAAK,CAoCf"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import * as pulumi from '@pulumi/pulumi';
|
|
2
|
-
import * as grafana from '@pulumiverse/grafana';
|
|
3
|
-
export declare namespace Grafana {
|
|
4
|
-
type Threshold = {
|
|
5
|
-
value: number | null;
|
|
6
|
-
color: string;
|
|
7
|
-
};
|
|
8
|
-
type Metric = {
|
|
9
|
-
label: string;
|
|
10
|
-
query: string;
|
|
11
|
-
thresholds: Threshold[];
|
|
12
|
-
};
|
|
13
|
-
type Args = {
|
|
14
|
-
title: pulumi.Input<string>;
|
|
15
|
-
provider: pulumi.Input<grafana.Provider>;
|
|
16
|
-
tags: pulumi.Input<pulumi.Input<string>[]>;
|
|
17
|
-
};
|
|
18
|
-
type Panel = {
|
|
19
|
-
title: string;
|
|
20
|
-
gridPos: Panel.Position;
|
|
21
|
-
type: string;
|
|
22
|
-
datasource: string;
|
|
23
|
-
targets: {
|
|
24
|
-
expr: string;
|
|
25
|
-
legendFormat: string;
|
|
26
|
-
}[];
|
|
27
|
-
fieldConfig: {
|
|
28
|
-
defaults: {
|
|
29
|
-
unit?: string;
|
|
30
|
-
min?: number;
|
|
31
|
-
max?: number;
|
|
32
|
-
color?: {
|
|
33
|
-
mode: string;
|
|
34
|
-
};
|
|
35
|
-
thresholds?: {
|
|
36
|
-
mode: string;
|
|
37
|
-
steps: Threshold[];
|
|
38
|
-
};
|
|
39
|
-
custom?: {
|
|
40
|
-
lineInterpolation?: string;
|
|
41
|
-
spanNulls: boolean;
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
options?: {
|
|
46
|
-
colorMode?: string;
|
|
47
|
-
graphMode?: string;
|
|
48
|
-
justifyMode?: string;
|
|
49
|
-
textMode?: string;
|
|
50
|
-
reduceOptions?: {
|
|
51
|
-
calcs?: string[];
|
|
52
|
-
fields?: string;
|
|
53
|
-
values?: boolean;
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
namespace Panel {
|
|
58
|
-
type Position = {
|
|
59
|
-
x: number;
|
|
60
|
-
y: number;
|
|
61
|
-
w: number;
|
|
62
|
-
h: number;
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/grafana/dashboards/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,yBAAiB,OAAO,CAAC;IAIvB,KAAY,SAAS,GAAG;QACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAY,MAAM,GAAG;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,SAAS,EAAE,CAAC;KACzB,CAAC;IAEF,KAAY,IAAI,GAAG;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC5C,CAAC;IAEF,KAAY,KAAK,GAAG;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,YAAY,EAAE,MAAM,CAAC;SACtB,EAAE,CAAC;QACJ,WAAW,EAAE;YACX,QAAQ,EAAE;gBACR,IAAI,CAAC,EAAE,MAAM,CAAC;gBACd,GAAG,CAAC,EAAE,MAAM,CAAC;gBACb,GAAG,CAAC,EAAE,MAAM,CAAC;gBACb,KAAK,CAAC,EAAE;oBACN,IAAI,EAAE,MAAM,CAAC;iBACd,CAAC;gBACF,UAAU,CAAC,EAAE;oBACX,IAAI,EAAE,MAAM,CAAC;oBACb,KAAK,EAAE,SAAS,EAAE,CAAC;iBACpB,CAAC;gBACF,MAAM,CAAC,EAAE;oBACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;oBAC3B,SAAS,EAAE,OAAO,CAAC;iBACpB,CAAC;aACH,CAAC;SACH,CAAC;QACF,OAAO,CAAC,EAAE;YACR,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,aAAa,CAAC,EAAE;gBACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;gBACjB,MAAM,CAAC,EAAE,MAAM,CAAC;gBAChB,MAAM,CAAC,EAAE,OAAO,CAAC;aAClB,CAAC;SACH,CAAC;KACH,CAAC;IAEF,UAAiB,KAAK,CAAC;QACrB,KAAY,QAAQ,GAAG;YACrB,CAAC,EAAE,MAAM,CAAC;YACV,CAAC,EAAE,MAAM,CAAC;YACV,CAAC,EAAE,MAAM,CAAC;YACV,CAAC,EAAE,MAAM,CAAC;SACX,CAAC;KACH;CACF"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import * as pulumi from '@pulumi/pulumi';
|
|
2
|
-
import * as grafana from '@pulumiverse/grafana';
|
|
3
|
-
import { queries as promQ } from '../../prometheus';
|
|
4
|
-
import { Grafana } from './types';
|
|
5
|
-
declare class WebServerSloDashboardBuilder {
|
|
6
|
-
name: string;
|
|
7
|
-
title: pulumi.Output<string>;
|
|
8
|
-
panels: Grafana.Panel[];
|
|
9
|
-
tags?: pulumi.Output<string[]>;
|
|
10
|
-
constructor(name: string, args: Grafana.Args);
|
|
11
|
-
withAvailability(target: number, window: promQ.TimeRange, dataSource: string, prometheusNamespace: string): this;
|
|
12
|
-
withSuccessRate(target: number, window: promQ.TimeRange, shortWindow: promQ.TimeRange, filter: string, dataSource: string, prometheusNamespace: string): this;
|
|
13
|
-
withLatency(target: number, targetLatency: number, window: promQ.TimeRange, shortWindow: promQ.TimeRange, filter: string, dataSource: string, prometheusNamespace: string): this;
|
|
14
|
-
build(provider: pulumi.Output<grafana.Provider>): pulumi.Output<grafana.oss.Dashboard>;
|
|
15
|
-
}
|
|
16
|
-
export default WebServerSloDashboardBuilder;
|
|
17
|
-
//# sourceMappingURL=web-server-slo.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-server-slo.d.ts","sourceRoot":"","sources":["../../../../src/components/grafana/dashboards/web-server-slo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,cAAM,4BAA4B;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,CAAM;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAEnB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI;IAK5C,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,KAAK,CAAC,SAAS,EACvB,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,MAAM,GAC1B,IAAI;IAoCP,eAAe,CACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,KAAK,CAAC,SAAS,EACvB,WAAW,EAAE,KAAK,CAAC,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,MAAM,GAC1B,IAAI;IAwDP,WAAW,CACT,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,KAAK,CAAC,SAAS,EACvB,WAAW,EAAE,KAAK,CAAC,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,MAAM,GAC1B,IAAI;IA4EP,KAAK,CACH,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;CAmBxC;AAED,eAAe,4BAA4B,CAAC"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const pulumi = require("@pulumi/pulumi");
|
|
4
|
-
const grafana = require("@pulumiverse/grafana");
|
|
5
|
-
const prometheus_1 = require("../../prometheus");
|
|
6
|
-
const panels_1 = require("./panels");
|
|
7
|
-
class WebServerSloDashboardBuilder {
|
|
8
|
-
name;
|
|
9
|
-
title;
|
|
10
|
-
panels = [];
|
|
11
|
-
tags;
|
|
12
|
-
constructor(name, args) {
|
|
13
|
-
this.name = name;
|
|
14
|
-
this.title = pulumi.output(args.title);
|
|
15
|
-
}
|
|
16
|
-
withAvailability(target, window, dataSource, prometheusNamespace) {
|
|
17
|
-
const availabilityPercentage = prometheus_1.queries.getAvailabilityPercentageQuery(prometheusNamespace, window);
|
|
18
|
-
const availabilityBurnRate = prometheus_1.queries.getBurnRateQuery(prometheus_1.queries.getAvailabilityQuery(prometheusNamespace, '1h'), target);
|
|
19
|
-
const availabilitySloPanel = (0, panels_1.createStatPercentagePanel)('Availability', { x: 0, y: 0, w: 8, h: 8 }, dataSource, {
|
|
20
|
-
label: 'Availability',
|
|
21
|
-
query: availabilityPercentage,
|
|
22
|
-
thresholds: [],
|
|
23
|
-
});
|
|
24
|
-
const availabilityBurnRatePanel = (0, panels_1.createBurnRatePanel)('Availability Burn Rate', { x: 0, y: 8, w: 8, h: 4 }, dataSource, {
|
|
25
|
-
label: 'Burn Rate',
|
|
26
|
-
query: availabilityBurnRate,
|
|
27
|
-
thresholds: [],
|
|
28
|
-
});
|
|
29
|
-
this.panels.push(availabilitySloPanel, availabilityBurnRatePanel);
|
|
30
|
-
return this;
|
|
31
|
-
}
|
|
32
|
-
withSuccessRate(target, window, shortWindow, filter, dataSource, prometheusNamespace) {
|
|
33
|
-
const successRateSlo = prometheus_1.queries.getSuccessPercentageQuery(prometheusNamespace, window, filter);
|
|
34
|
-
const successRateBurnRate = prometheus_1.queries.getBurnRateQuery(prometheus_1.queries.getSuccessRateQuery(prometheusNamespace, '1h', filter), target);
|
|
35
|
-
const successRate = prometheus_1.queries.getSuccessPercentageQuery(prometheusNamespace, shortWindow, filter);
|
|
36
|
-
const successRateSloPanel = (0, panels_1.createStatPercentagePanel)('Success Rate', { x: 8, y: 0, w: 8, h: 8 }, dataSource, {
|
|
37
|
-
label: 'Success Rate',
|
|
38
|
-
query: successRateSlo,
|
|
39
|
-
thresholds: [],
|
|
40
|
-
});
|
|
41
|
-
const successRatePanel = (0, panels_1.createTimeSeriesPercentagePanel)('HTTP Request Success Rate', { x: 0, y: 16, w: 12, h: 8 }, dataSource, {
|
|
42
|
-
label: 'Success Rate',
|
|
43
|
-
query: successRate,
|
|
44
|
-
thresholds: [],
|
|
45
|
-
});
|
|
46
|
-
const successRateBurnRatePanel = (0, panels_1.createBurnRatePanel)('Success Rate Burn Rate', { x: 8, y: 8, w: 8, h: 4 }, dataSource, {
|
|
47
|
-
label: 'Burn Rate',
|
|
48
|
-
query: successRateBurnRate,
|
|
49
|
-
thresholds: [],
|
|
50
|
-
});
|
|
51
|
-
this.panels.push(successRateSloPanel, successRatePanel, successRateBurnRatePanel);
|
|
52
|
-
return this;
|
|
53
|
-
}
|
|
54
|
-
withLatency(target, targetLatency, window, shortWindow, filter, dataSource, prometheusNamespace) {
|
|
55
|
-
const latencySlo = prometheus_1.queries.getLatencyPercentageQuery(prometheusNamespace, window, targetLatency, filter);
|
|
56
|
-
const latencyBurnRate = prometheus_1.queries.getBurnRateQuery(prometheus_1.queries.getLatencyRateQuery(prometheusNamespace, '1h', targetLatency), target);
|
|
57
|
-
const percentileLatency = prometheus_1.queries.getPercentileLatencyQuery(prometheusNamespace, shortWindow, target, filter);
|
|
58
|
-
const latencyBelowThreshold = prometheus_1.queries.getLatencyPercentageQuery(prometheusNamespace, shortWindow, targetLatency, filter);
|
|
59
|
-
const latencySloPanel = (0, panels_1.createStatPercentagePanel)('Request % below 250ms', { x: 16, y: 0, w: 8, h: 8 }, dataSource, {
|
|
60
|
-
label: 'Request % below 250ms',
|
|
61
|
-
query: latencySlo,
|
|
62
|
-
thresholds: [],
|
|
63
|
-
});
|
|
64
|
-
const percentileLatencyPanel = (0, panels_1.createTimeSeriesPanel)('99th Percentile Latency', { x: 12, y: 16, w: 12, h: 8 }, dataSource, {
|
|
65
|
-
label: '99th Percentile Latency',
|
|
66
|
-
query: percentileLatency,
|
|
67
|
-
thresholds: [],
|
|
68
|
-
}, 'ms');
|
|
69
|
-
const latencyPercentagePanel = (0, panels_1.createTimeSeriesPercentagePanel)('Request percentage below 250ms', { x: 0, y: 24, w: 12, h: 8 }, dataSource, {
|
|
70
|
-
label: 'Request percentage below 250ms',
|
|
71
|
-
query: latencyBelowThreshold,
|
|
72
|
-
thresholds: [],
|
|
73
|
-
});
|
|
74
|
-
const latencyBurnRatePanel = (0, panels_1.createBurnRatePanel)('Latency Burn Rate', { x: 16, y: 8, w: 8, h: 4 }, dataSource, {
|
|
75
|
-
label: 'Burn Rate',
|
|
76
|
-
query: latencyBurnRate,
|
|
77
|
-
thresholds: [],
|
|
78
|
-
});
|
|
79
|
-
this.panels.push(latencySloPanel, percentileLatencyPanel, latencyPercentagePanel, latencyBurnRatePanel);
|
|
80
|
-
return this;
|
|
81
|
-
}
|
|
82
|
-
build(provider) {
|
|
83
|
-
return pulumi
|
|
84
|
-
.all([this.title, this.panels, provider, this.tags])
|
|
85
|
-
.apply(([title, panels, provider, tags]) => {
|
|
86
|
-
return new grafana.oss.Dashboard(this.name, {
|
|
87
|
-
configJson: JSON.stringify({
|
|
88
|
-
title,
|
|
89
|
-
tags,
|
|
90
|
-
timezone: 'browser',
|
|
91
|
-
refresh: '10s',
|
|
92
|
-
panels,
|
|
93
|
-
}),
|
|
94
|
-
}, { provider });
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.default = WebServerSloDashboardBuilder;
|
|
File without changes
|
|
File without changes
|