@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.
Files changed (70) hide show
  1. package/dist/components/cloudfront/index.d.ts.map +1 -1
  2. package/dist/components/cloudfront/index.js +19 -24
  3. package/dist/components/database/builder.d.ts +2 -3
  4. package/dist/components/database/builder.d.ts.map +1 -1
  5. package/dist/components/database/builder.js +12 -12
  6. package/dist/components/database/database-replica.d.ts.map +1 -1
  7. package/dist/components/database/database-replica.js +1 -0
  8. package/dist/components/database/index.d.ts +9 -5
  9. package/dist/components/database/index.d.ts.map +1 -1
  10. package/dist/components/database/index.js +30 -30
  11. package/dist/components/grafana/builder.d.ts +21 -0
  12. package/dist/components/grafana/builder.d.ts.map +1 -0
  13. package/dist/components/grafana/builder.js +57 -0
  14. package/dist/components/grafana/connections/amp-connection.d.ts +23 -0
  15. package/dist/components/grafana/connections/amp-connection.d.ts.map +1 -0
  16. package/dist/components/grafana/connections/amp-connection.js +73 -0
  17. package/dist/components/grafana/connections/cloudwatch-logs-connection.d.ts +18 -0
  18. package/dist/components/grafana/connections/cloudwatch-logs-connection.d.ts.map +1 -0
  19. package/dist/components/grafana/connections/cloudwatch-logs-connection.js +59 -0
  20. package/dist/components/grafana/connections/connection.d.ts +20 -0
  21. package/dist/components/grafana/connections/connection.d.ts.map +1 -0
  22. package/dist/components/grafana/connections/connection.js +57 -0
  23. package/dist/components/grafana/connections/index.d.ts +5 -0
  24. package/dist/components/grafana/connections/index.d.ts.map +1 -0
  25. package/dist/components/grafana/connections/index.js +11 -0
  26. package/dist/components/grafana/connections/xray-connection.d.ts +22 -0
  27. package/dist/components/grafana/connections/xray-connection.d.ts.map +1 -0
  28. package/dist/components/grafana/connections/xray-connection.js +76 -0
  29. package/dist/components/grafana/dashboards/builder.d.ts +22 -0
  30. package/dist/components/grafana/dashboards/builder.d.ts.map +1 -0
  31. package/dist/components/grafana/dashboards/builder.js +53 -0
  32. package/dist/components/grafana/dashboards/index.d.ts +2 -2
  33. package/dist/components/grafana/dashboards/index.d.ts.map +1 -1
  34. package/dist/components/grafana/dashboards/index.js +5 -4
  35. package/dist/components/grafana/dashboards/slo.d.ts +18 -0
  36. package/dist/components/grafana/dashboards/slo.d.ts.map +1 -0
  37. package/dist/components/grafana/dashboards/slo.js +77 -0
  38. package/dist/components/grafana/grafana.d.ts +19 -0
  39. package/dist/components/grafana/grafana.d.ts.map +1 -0
  40. package/dist/components/grafana/grafana.js +24 -0
  41. package/dist/components/grafana/index.d.ts +4 -0
  42. package/dist/components/grafana/index.d.ts.map +1 -1
  43. package/dist/components/grafana/index.js +11 -1
  44. package/dist/components/grafana/panels/availability.d.ts +15 -0
  45. package/dist/components/grafana/panels/availability.d.ts.map +1 -0
  46. package/dist/components/grafana/panels/availability.js +20 -0
  47. package/dist/components/grafana/panels/helpers.d.ts +6 -0
  48. package/dist/components/grafana/panels/helpers.d.ts.map +1 -0
  49. package/dist/components/grafana/panels/index.d.ts +6 -0
  50. package/dist/components/grafana/panels/index.d.ts.map +1 -0
  51. package/dist/components/grafana/panels/index.js +21 -0
  52. package/dist/components/grafana/panels/latency.d.ts +31 -0
  53. package/dist/components/grafana/panels/latency.d.ts.map +1 -0
  54. package/dist/components/grafana/panels/latency.js +36 -0
  55. package/dist/components/grafana/panels/success-rate.d.ts +22 -0
  56. package/dist/components/grafana/panels/success-rate.d.ts.map +1 -0
  57. package/dist/components/grafana/panels/success-rate.js +28 -0
  58. package/dist/components/grafana/panels/types.d.ts +57 -0
  59. package/dist/components/grafana/panels/types.d.ts.map +1 -0
  60. package/dist/components/web-server/index.js +1 -1
  61. package/package.json +30 -26
  62. package/dist/components/grafana/dashboards/panels.d.ts +0 -6
  63. package/dist/components/grafana/dashboards/panels.d.ts.map +0 -1
  64. package/dist/components/grafana/dashboards/types.d.ts +0 -66
  65. package/dist/components/grafana/dashboards/types.d.ts.map +0 -1
  66. package/dist/components/grafana/dashboards/web-server-slo.d.ts +0 -17
  67. package/dist/components/grafana/dashboards/web-server-slo.d.ts.map +0 -1
  68. package/dist/components/grafana/dashboards/web-server-slo.js +0 -98
  69. /package/dist/components/grafana/{dashboards/panels.js → panels/helpers.js} +0 -0
  70. /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}-route53-record${index === 0 ? '' : `-${index}`}`, {
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.5",
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.21.0",
39
- "@pulumi/aws-native": "^1.56.0",
40
- "@pulumi/awsx": "^3.2.1",
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.2"
44
+ "yaml": "^2.8.3"
46
45
  },
47
46
  "devDependencies": {
48
- "@aws-sdk/client-acm": "^3.1002.0",
49
- "@aws-sdk/client-application-auto-scaling": "^3.1002.0",
50
- "@aws-sdk/client-cloudfront": "^3.1002.0",
51
- "@aws-sdk/client-cloudwatch-logs": "^3.1002.0",
52
- "@aws-sdk/client-ec2": "^3.1002.0",
53
- "@aws-sdk/client-ecs": "^3.1002.0",
54
- "@aws-sdk/client-efs": "^3.1002.0",
55
- "@aws-sdk/client-elastic-load-balancing-v2": "^3.1002.0",
56
- "@aws-sdk/client-elasticache": "^3.1002.0",
57
- "@aws-sdk/client-iam": "^3.1002.0",
58
- "@aws-sdk/client-kms": "^3.1002.0",
59
- "@aws-sdk/client-rds": "^3.1002.0",
60
- "@aws-sdk/client-route-53": "^3.1002.0",
61
- "@aws-sdk/client-s3": "^3.1002.0",
62
- "@aws-sdk/client-secrets-manager": "^3.1002.0",
63
- "@aws-sdk/client-servicediscovery": "^3.1002.0",
64
- "@aws-sdk/client-ssm": "^3.1002.0",
65
- "@aws-sdk/client-xray": "^3.1002.0",
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.3.2",
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.22.0"
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;