@spottoai/types-package 1.0.2-beta.428 → 1.0.2-beta.429
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/azure/dataProtection.d.ts +40 -0
- package/dist/azure/dataProtection.d.ts.map +1 -1
- package/dist/azure/metrics.d.ts +2 -27
- package/dist/azure/metrics.d.ts.map +1 -1
- package/dist/azure/reportEvidence.d.ts +7 -5
- package/dist/azure/reportEvidence.d.ts.map +1 -1
- package/dist/azure/reportEvidence.js.map +1 -1
- package/dist/azure/reportEvidenceValidation.d.ts.map +1 -1
- package/dist/azure/reportEvidenceValidation.js +5 -1
- package/dist/azure/reportEvidenceValidation.js.map +1 -1
- package/dist/azure/reportEvidenceValidationHelpers.d.ts +3 -16
- package/dist/azure/reportEvidenceValidationHelpers.d.ts.map +1 -1
- package/dist/azure/reportEvidenceValidationHelpers.js +79 -95
- package/dist/azure/reportEvidenceValidationHelpers.js.map +1 -1
- package/dist/azure/resilienceFacts.d.ts +100 -0
- package/dist/azure/resilienceFacts.d.ts.map +1 -0
- package/dist/azure/resilienceFacts.js +20 -0
- package/dist/azure/resilienceFacts.js.map +1 -0
- package/dist/azure/resilienceFactsValidation.d.ts +4 -0
- package/dist/azure/resilienceFactsValidation.d.ts.map +1 -0
- package/dist/azure/resilienceFactsValidation.js +70 -0
- package/dist/azure/resilienceFactsValidation.js.map +1 -0
- package/dist/azure/views.d.ts +7 -0
- package/dist/azure/views.d.ts.map +1 -1
- package/dist/azure/views.js.map +1 -1
- package/dist/common/boundedRows.d.ts +7 -0
- package/dist/common/boundedRows.d.ts.map +1 -0
- package/dist/common/boundedRows.js +3 -0
- package/dist/common/boundedRows.js.map +1 -0
- package/dist/common/metricStats.d.ts +29 -0
- package/dist/common/metricStats.d.ts.map +1 -0
- package/dist/common/metricStats.js +3 -0
- package/dist/common/metricStats.js.map +1 -0
- package/dist/common/utilizationStories.d.ts +516 -0
- package/dist/common/utilizationStories.d.ts.map +1 -0
- package/dist/common/utilizationStories.js +21 -0
- package/dist/common/utilizationStories.js.map +1 -0
- package/dist/common/utilizationStoriesValidation.d.ts +48 -0
- package/dist/common/utilizationStoriesValidation.d.ts.map +1 -0
- package/dist/common/utilizationStoriesValidation.js +552 -0
- package/dist/common/utilizationStoriesValidation.js.map +1 -0
- package/dist/common/validationHelpers.d.ts +18 -0
- package/dist/common/validationHelpers.d.ts.map +1 -0
- package/dist/common/validationHelpers.js +36 -0
- package/dist/common/validationHelpers.js.map +1 -0
- package/dist/esm/azure/reportEvidenceValidation.js +5 -1
- package/dist/esm/azure/reportEvidenceValidationHelpers.js +2 -18
- package/dist/esm/azure/resilienceFacts.js +16 -0
- package/dist/esm/azure/resilienceFactsValidation.js +64 -0
- package/dist/esm/common/boundedRows.js +1 -0
- package/dist/esm/common/metricStats.js +1 -0
- package/dist/esm/common/utilizationStories.js +17 -0
- package/dist/esm/common/utilizationStoriesValidation.js +514 -0
- package/dist/esm/common/validationHelpers.js +18 -0
- package/dist/esm/index.js +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
|
@@ -2,71 +2,55 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isEvidenceReference = exports.isCommitmentExpirySummary = exports.isRetirementSummary = exports.isRecommendationSummary = exports.isCostSummary = exports.isResourceSummary = exports.isTagCoverage = exports.isSourceFileStatus = exports.hasRequiredRecords = exports.isProjectionRows = exports.isBoundedRows = exports.hasOptionalNumbers = exports.hasOptionalStrings = exports.countTotal = exports.isCountRecord = exports.isStringArray = exports.isDateTime = exports.isCount = exports.isOptionalBoolean = exports.isOptionalFiniteNumber = exports.isFiniteNumber = exports.isOptionalString = exports.isString = exports.isRecord = void 0;
|
|
4
4
|
const reportEvidence_1 = require("./reportEvidence");
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
exports
|
|
9
|
-
|
|
10
|
-
exports.
|
|
11
|
-
|
|
12
|
-
exports.
|
|
13
|
-
|
|
14
|
-
exports.
|
|
15
|
-
|
|
16
|
-
exports.
|
|
17
|
-
|
|
18
|
-
exports.
|
|
19
|
-
|
|
20
|
-
exports.
|
|
21
|
-
const
|
|
22
|
-
exports.isStringArray = isStringArray;
|
|
23
|
-
const isCountRecord = (value) => (0, exports.isRecord)(value) && Object.values(value).every(exports.isCount);
|
|
24
|
-
exports.isCountRecord = isCountRecord;
|
|
25
|
-
const countTotal = (value) => Object.values(value).reduce((total, count) => total + count, 0);
|
|
26
|
-
exports.countTotal = countTotal;
|
|
27
|
-
const hasOptionalStrings = (value, keys) => keys.every(key => (0, exports.isOptionalString)(value[key]));
|
|
28
|
-
exports.hasOptionalStrings = hasOptionalStrings;
|
|
29
|
-
const hasOptionalNumbers = (value, keys) => keys.every(key => (0, exports.isOptionalFiniteNumber)(value[key]));
|
|
30
|
-
exports.hasOptionalNumbers = hasOptionalNumbers;
|
|
31
|
-
const isBoundedRows = (value, limit, isRow) => {
|
|
32
|
-
if (!(0, exports.isRecord)(value) || !(0, exports.isCount)(value.totalCount) || !(0, exports.isCount)(value.omittedCount) || !Array.isArray(value.rows))
|
|
33
|
-
return false;
|
|
34
|
-
return value.rows.length <= limit && value.rows.every(isRow) && value.totalCount === value.rows.length + value.omittedCount;
|
|
35
|
-
};
|
|
36
|
-
exports.isBoundedRows = isBoundedRows;
|
|
37
|
-
const isProjectionRows = (value, limit = reportEvidence_1.REPORT_EVIDENCE_LIMITS.detailRows) => (0, exports.isBoundedRows)(value, limit, exports.isRecord);
|
|
5
|
+
const validationHelpers_1 = require("../common/validationHelpers");
|
|
6
|
+
var validationHelpers_2 = require("../common/validationHelpers");
|
|
7
|
+
Object.defineProperty(exports, "isRecord", { enumerable: true, get: function () { return validationHelpers_2.isRecord; } });
|
|
8
|
+
Object.defineProperty(exports, "isString", { enumerable: true, get: function () { return validationHelpers_2.isString; } });
|
|
9
|
+
Object.defineProperty(exports, "isOptionalString", { enumerable: true, get: function () { return validationHelpers_2.isOptionalString; } });
|
|
10
|
+
Object.defineProperty(exports, "isFiniteNumber", { enumerable: true, get: function () { return validationHelpers_2.isFiniteNumber; } });
|
|
11
|
+
Object.defineProperty(exports, "isOptionalFiniteNumber", { enumerable: true, get: function () { return validationHelpers_2.isOptionalFiniteNumber; } });
|
|
12
|
+
Object.defineProperty(exports, "isOptionalBoolean", { enumerable: true, get: function () { return validationHelpers_2.isOptionalBoolean; } });
|
|
13
|
+
Object.defineProperty(exports, "isCount", { enumerable: true, get: function () { return validationHelpers_2.isCount; } });
|
|
14
|
+
Object.defineProperty(exports, "isDateTime", { enumerable: true, get: function () { return validationHelpers_2.isDateTime; } });
|
|
15
|
+
Object.defineProperty(exports, "isStringArray", { enumerable: true, get: function () { return validationHelpers_2.isStringArray; } });
|
|
16
|
+
Object.defineProperty(exports, "isCountRecord", { enumerable: true, get: function () { return validationHelpers_2.isCountRecord; } });
|
|
17
|
+
Object.defineProperty(exports, "countTotal", { enumerable: true, get: function () { return validationHelpers_2.countTotal; } });
|
|
18
|
+
Object.defineProperty(exports, "hasOptionalStrings", { enumerable: true, get: function () { return validationHelpers_2.hasOptionalStrings; } });
|
|
19
|
+
Object.defineProperty(exports, "hasOptionalNumbers", { enumerable: true, get: function () { return validationHelpers_2.hasOptionalNumbers; } });
|
|
20
|
+
Object.defineProperty(exports, "isBoundedRows", { enumerable: true, get: function () { return validationHelpers_2.isBoundedRows; } });
|
|
21
|
+
const isProjectionRows = (value, limit = reportEvidence_1.REPORT_EVIDENCE_LIMITS.detailRows) => (0, validationHelpers_1.isBoundedRows)(value, limit, validationHelpers_1.isRecord);
|
|
38
22
|
exports.isProjectionRows = isProjectionRows;
|
|
39
|
-
const hasRequiredRecords = (value, keys) => keys.every(key => (0,
|
|
23
|
+
const hasRequiredRecords = (value, keys) => keys.every(key => (0, validationHelpers_1.isRecord)(value[key]));
|
|
40
24
|
exports.hasRequiredRecords = hasRequiredRecords;
|
|
41
|
-
const isSourceFileStatus = (value) => (0,
|
|
42
|
-
(0,
|
|
25
|
+
const isSourceFileStatus = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
26
|
+
(0, validationHelpers_1.isString)(value.path) &&
|
|
43
27
|
typeof value.available === 'boolean' &&
|
|
44
|
-
(value.recordCount === undefined || (0,
|
|
45
|
-
(0,
|
|
28
|
+
(value.recordCount === undefined || (0, validationHelpers_1.isCount)(value.recordCount)) &&
|
|
29
|
+
(0, validationHelpers_1.isOptionalString)(value.note);
|
|
46
30
|
exports.isSourceFileStatus = isSourceFileStatus;
|
|
47
|
-
const isTagCoverage = (value) => (0,
|
|
48
|
-
(0,
|
|
49
|
-
(0,
|
|
50
|
-
(0,
|
|
31
|
+
const isTagCoverage = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
32
|
+
(0, validationHelpers_1.isCount)(value.withTags) &&
|
|
33
|
+
(0, validationHelpers_1.isCount)(value.withoutTags) &&
|
|
34
|
+
(0, validationHelpers_1.isFiniteNumber)(value.coveragePercentage) &&
|
|
51
35
|
Array.isArray(value.topTagKeys) &&
|
|
52
|
-
value.topTagKeys.every(row => (0,
|
|
36
|
+
value.topTagKeys.every(row => (0, validationHelpers_1.isRecord)(row) && (0, validationHelpers_1.isString)(row.key) && (0, validationHelpers_1.isCount)(row.count));
|
|
53
37
|
exports.isTagCoverage = isTagCoverage;
|
|
54
|
-
const isTopSpendResource = (value) => (0,
|
|
55
|
-
(0,
|
|
56
|
-
(0,
|
|
57
|
-
(0,
|
|
58
|
-
(0,
|
|
59
|
-
(0,
|
|
60
|
-
(0,
|
|
61
|
-
const isResourceSummary = (value) => (0,
|
|
62
|
-
(0,
|
|
38
|
+
const isTopSpendResource = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
39
|
+
(0, validationHelpers_1.isString)(value.id) &&
|
|
40
|
+
(0, validationHelpers_1.isString)(value.name) &&
|
|
41
|
+
(0, validationHelpers_1.isString)(value.type) &&
|
|
42
|
+
(0, validationHelpers_1.isOptionalString)(value.location) &&
|
|
43
|
+
(0, validationHelpers_1.isFiniteNumber)(value.spend30Days) &&
|
|
44
|
+
(0, validationHelpers_1.isOptionalFiniteNumber)(value.spend30DaysAmortized);
|
|
45
|
+
const isResourceSummary = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
46
|
+
(0, validationHelpers_1.isCount)(value.total) &&
|
|
63
47
|
Array.isArray(value.byType) &&
|
|
64
48
|
value.byType.length <= reportEvidence_1.REPORT_EVIDENCE_LIMITS.summaryDimensions &&
|
|
65
|
-
value.byType.every(row => (0,
|
|
49
|
+
value.byType.every(row => (0, validationHelpers_1.isRecord)(row) && (0, validationHelpers_1.isString)(row.type) && (0, validationHelpers_1.isCount)(row.count) && (0, validationHelpers_1.isOptionalFiniteNumber)(row.spend30Days)) &&
|
|
66
50
|
Array.isArray(value.byLocation) &&
|
|
67
51
|
value.byLocation.length <= reportEvidence_1.REPORT_EVIDENCE_LIMITS.summaryDimensions &&
|
|
68
|
-
value.byLocation.every(row => (0,
|
|
69
|
-
(0,
|
|
52
|
+
value.byLocation.every(row => (0, validationHelpers_1.isRecord)(row) && (0, validationHelpers_1.isString)(row.location) && (0, validationHelpers_1.isCount)(row.count) && (0, validationHelpers_1.isOptionalFiniteNumber)(row.spend30Days)) &&
|
|
53
|
+
(0, validationHelpers_1.isRecord)(value.tagCoverage) &&
|
|
70
54
|
(0, exports.isTagCoverage)(value.tagCoverage) &&
|
|
71
55
|
Array.isArray(value.tagCoverage.topTagKeys) &&
|
|
72
56
|
value.tagCoverage.topTagKeys.length <= reportEvidence_1.REPORT_EVIDENCE_LIMITS.summaryRows &&
|
|
@@ -74,64 +58,64 @@ const isResourceSummary = (value) => (0, exports.isRecord)(value) &&
|
|
|
74
58
|
value.topSpendResources.length <= reportEvidence_1.REPORT_EVIDENCE_LIMITS.summaryRows &&
|
|
75
59
|
value.topSpendResources.every(isTopSpendResource);
|
|
76
60
|
exports.isResourceSummary = isResourceSummary;
|
|
77
|
-
const isReportBudgetProjection = (value) => (0,
|
|
78
|
-
(0,
|
|
79
|
-
(0,
|
|
80
|
-
(value.filter === undefined || (0,
|
|
61
|
+
const isReportBudgetProjection = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
62
|
+
(0, validationHelpers_1.hasOptionalStrings)(value, ['name', 'startDate', 'endDate', 'timeGrain', 'category', 'currencyCode']) &&
|
|
63
|
+
(0, validationHelpers_1.hasOptionalNumbers)(value, ['amount', 'currentSpend', 'forecastedSpend']) &&
|
|
64
|
+
(value.filter === undefined || (0, validationHelpers_1.isRecord)(value.filter));
|
|
81
65
|
const isCostSummary = (value) => {
|
|
82
|
-
if (!(0,
|
|
66
|
+
if (!(0, validationHelpers_1.isRecord)(value) || !(0, validationHelpers_1.isRecord)(value.sourceMetadata) || !Array.isArray(value.topSpendResources))
|
|
83
67
|
return false;
|
|
84
|
-
if (!(0,
|
|
85
|
-
!(0,
|
|
68
|
+
if (!(0, validationHelpers_1.hasOptionalStrings)(value, ['currency', 'currencySymbol']) ||
|
|
69
|
+
!(0, validationHelpers_1.hasOptionalNumbers)(value, ['spend30Days', 'spend30DaysAmortized', 'totalRetailCost', 'miscCost', 'rollingCostRecordCount']) ||
|
|
86
70
|
(value.budget !== undefined && !isReportBudgetProjection(value.budget)) ||
|
|
87
|
-
!(0,
|
|
88
|
-
!(0,
|
|
89
|
-
!(0,
|
|
90
|
-
!(0,
|
|
91
|
-
!(0,
|
|
71
|
+
!(0, validationHelpers_1.isString)(value.sourceMetadata.spend30DaysSource) ||
|
|
72
|
+
!(0, validationHelpers_1.isString)(value.sourceMetadata.spend30DaysAmortizedSource) ||
|
|
73
|
+
!(0, validationHelpers_1.isString)(value.sourceMetadata.totalRetailCostSource) ||
|
|
74
|
+
!(0, validationHelpers_1.isString)(value.sourceMetadata.rollingCostFile) ||
|
|
75
|
+
!(0, validationHelpers_1.isOptionalFiniteNumber)(value.sourceMetadata.rollingCostRecordCount) ||
|
|
92
76
|
!value.topSpendResources.every(isTopSpendResource)) {
|
|
93
77
|
return false;
|
|
94
78
|
}
|
|
95
79
|
return (value.period === undefined ||
|
|
96
|
-
((0,
|
|
80
|
+
((0, validationHelpers_1.isRecord)(value.period) &&
|
|
97
81
|
value.period.type === 'rolling_30_days' &&
|
|
98
|
-
(0,
|
|
99
|
-
(0,
|
|
82
|
+
(0, validationHelpers_1.isString)(value.period.source) &&
|
|
83
|
+
(0, validationHelpers_1.hasOptionalStrings)(value.period, ['startDate', 'endDate'])));
|
|
100
84
|
};
|
|
101
85
|
exports.isCostSummary = isCostSummary;
|
|
102
|
-
const isRecommendationSummary = (value) => (0,
|
|
103
|
-
(0,
|
|
104
|
-
(0,
|
|
105
|
-
(0,
|
|
106
|
-
(0,
|
|
107
|
-
(0,
|
|
86
|
+
const isRecommendationSummary = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
87
|
+
(0, validationHelpers_1.isCount)(value.total) &&
|
|
88
|
+
(0, validationHelpers_1.isCountRecord)(value.byPillar) &&
|
|
89
|
+
(0, validationHelpers_1.isCountRecord)(value.byImpact) &&
|
|
90
|
+
(0, validationHelpers_1.isCountRecord)(value.byEffort) &&
|
|
91
|
+
(0, validationHelpers_1.isStringArray)(value.topRecommendationIds) &&
|
|
108
92
|
value.topRecommendationIds.length <= reportEvidence_1.REPORT_EVIDENCE_LIMITS.topRecommendationIds &&
|
|
109
|
-
(0,
|
|
110
|
-
Object.values(value.topRecommendationIdsByPillar).every(ids => (0,
|
|
93
|
+
(0, validationHelpers_1.isRecord)(value.topRecommendationIdsByPillar) &&
|
|
94
|
+
Object.values(value.topRecommendationIdsByPillar).every(ids => (0, validationHelpers_1.isStringArray)(ids) && ids.length <= reportEvidence_1.REPORT_EVIDENCE_LIMITS.topRecommendationIdsPerPillar);
|
|
111
95
|
exports.isRecommendationSummary = isRecommendationSummary;
|
|
112
|
-
const isRetirementSummary = (value) => (0,
|
|
113
|
-
(0,
|
|
114
|
-
(0,
|
|
115
|
-
(0,
|
|
116
|
-
(0,
|
|
117
|
-
(0,
|
|
118
|
-
(0,
|
|
96
|
+
const isRetirementSummary = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
97
|
+
(0, validationHelpers_1.isCount)(value.total) &&
|
|
98
|
+
(0, validationHelpers_1.isCount)(value.sourceRecordCount) &&
|
|
99
|
+
(0, validationHelpers_1.isCount)(value.excludedUnlinked) &&
|
|
100
|
+
(0, validationHelpers_1.isCount)(value.excludedCommitmentExpiries) &&
|
|
101
|
+
(0, validationHelpers_1.isCount)(value.within180Days) &&
|
|
102
|
+
(0, validationHelpers_1.isCount)(value.expiredOrPastDue) &&
|
|
119
103
|
Array.isArray(value.upcoming) &&
|
|
120
104
|
value.upcoming.length <= reportEvidence_1.REPORT_EVIDENCE_LIMITS.upcomingEvents &&
|
|
121
|
-
value.upcoming.every(row => (0,
|
|
105
|
+
value.upcoming.every(row => (0, validationHelpers_1.isRecord)(row) && (0, validationHelpers_1.isOptionalString)(row.id) && (0, validationHelpers_1.isOptionalString)(row.title) && (0, validationHelpers_1.isOptionalString)(row.retirementDate) && (0, validationHelpers_1.isCount)(row.resourceCount));
|
|
122
106
|
exports.isRetirementSummary = isRetirementSummary;
|
|
123
|
-
const isCommitmentExpirySummary = (value) => (0,
|
|
124
|
-
(0,
|
|
125
|
-
(0,
|
|
126
|
-
(0,
|
|
127
|
-
(0,
|
|
107
|
+
const isCommitmentExpirySummary = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
108
|
+
(0, validationHelpers_1.isCount)(value.total) &&
|
|
109
|
+
(0, validationHelpers_1.isCount)(value.sourceRecordCount) &&
|
|
110
|
+
(0, validationHelpers_1.isCount)(value.within180Days) &&
|
|
111
|
+
(0, validationHelpers_1.isCount)(value.expiredOrPastDue) &&
|
|
128
112
|
Array.isArray(value.upcoming) &&
|
|
129
113
|
value.upcoming.length <= reportEvidence_1.REPORT_EVIDENCE_LIMITS.upcomingEvents &&
|
|
130
|
-
value.upcoming.every(row => (0,
|
|
114
|
+
value.upcoming.every(row => (0, validationHelpers_1.isRecord)(row) && (0, validationHelpers_1.isOptionalString)(row.id) && (0, validationHelpers_1.isOptionalString)(row.title) && (0, validationHelpers_1.isOptionalString)(row.expiryDate) && (0, validationHelpers_1.isCount)(row.resourceCount));
|
|
131
115
|
exports.isCommitmentExpirySummary = isCommitmentExpirySummary;
|
|
132
|
-
const isEvidenceReference = (value) => (0,
|
|
133
|
-
(0,
|
|
134
|
-
(0,
|
|
116
|
+
const isEvidenceReference = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
117
|
+
(0, validationHelpers_1.isString)(value.source) &&
|
|
118
|
+
(0, validationHelpers_1.isString)(value.summary) &&
|
|
135
119
|
(value.value === undefined || ['string', 'number', 'boolean'].includes(typeof value.value)) &&
|
|
136
120
|
(typeof value.value !== 'number' || Number.isFinite(value.value));
|
|
137
121
|
exports.isEvidenceReference = isEvidenceReference;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportEvidenceValidationHelpers.js","sourceRoot":"","sources":["../../src/azure/reportEvidenceValidationHelpers.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"reportEvidenceValidationHelpers.js","sourceRoot":"","sources":["../../src/azure/reportEvidenceValidationHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resilience facts: the small per-resource property reads the resilience story needs that no other collection
|
|
3
|
+
* carries — storage blob-service data-protection settings and lifecycle management, Azure SQL database backup
|
|
4
|
+
* retention and failover groups. Collected in the reliability component beside the data-protection posture and
|
|
5
|
+
* published as `azure-portal/subscriptions/{id}/resilience-facts.json`. Consumed by the cloud-engine
|
|
6
|
+
* `ProtectionProfileBuilder` (`data-protection:<selector>` capability sources) and available to the resilience story page.
|
|
7
|
+
*
|
|
8
|
+
* Spec: `Specs/reporting/utilization-stories-types-package.md` (parent: core `specs/reporting/utilization-stories.md`).
|
|
9
|
+
* Additive: consumers tolerate unknown fields. Field semantics: `undefined` = not read (the request failed, was not
|
|
10
|
+
* applicable or was skipped) and resolves to an `unknown` capability; `null` = read and absent/disabled. A failed
|
|
11
|
+
* read must never be presented as "disabled".
|
|
12
|
+
*/
|
|
13
|
+
export declare const RESILIENCE_FACTS_SCHEMA_VERSION: 1;
|
|
14
|
+
export declare const RESILIENCE_FACTS_SOURCE: "AzureResilienceFacts";
|
|
15
|
+
export declare const RESILIENCE_FACTS_PORTAL_FILE: "resilience-facts.json";
|
|
16
|
+
export declare const RESILIENCE_FACTS_RAW_FILE: "data-protection/resilience-facts.json.gz";
|
|
17
|
+
export type ResilienceFactsStatus = 'collected' | 'partial' | 'failed' | 'not-applicable';
|
|
18
|
+
export interface RetentionPolicyFacts {
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
days?: number | null;
|
|
21
|
+
}
|
|
22
|
+
export interface StorageAccountResilienceFacts {
|
|
23
|
+
blobSoftDelete?: RetentionPolicyFacts | null;
|
|
24
|
+
containerSoftDelete?: RetentionPolicyFacts | null;
|
|
25
|
+
versioning?: boolean | null;
|
|
26
|
+
changeFeed?: RetentionPolicyFacts | null;
|
|
27
|
+
pointInTimeRestore?: RetentionPolicyFacts | null;
|
|
28
|
+
/** Lifecycle management policy (`managementPolicies/default`); `present: false` when the account has none. Not read in v1. */
|
|
29
|
+
managementPolicy?: {
|
|
30
|
+
present: boolean;
|
|
31
|
+
ruleCount?: number;
|
|
32
|
+
} | null;
|
|
33
|
+
/** Account kind; `FileStorage` accounts have no blob service and are reported not applicable. */
|
|
34
|
+
kind?: string | null;
|
|
35
|
+
}
|
|
36
|
+
export interface SqlDatabaseResilienceFacts {
|
|
37
|
+
/** Point-in-time restore retention (`backupShortTermRetentionPolicies/default`); undefined when the read failed. */
|
|
38
|
+
shortTermRetentionDays?: number | null;
|
|
39
|
+
diffBackupIntervalHours?: number | null;
|
|
40
|
+
/** Long-term retention (`backupLongTermRetentionPolicies/default`); `enabled` when any of the ISO 8601 periods is set. */
|
|
41
|
+
longTermRetention?: {
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
weekly?: string | null;
|
|
44
|
+
monthly?: string | null;
|
|
45
|
+
yearly?: string | null;
|
|
46
|
+
weekOfYear?: number | null;
|
|
47
|
+
} | null;
|
|
48
|
+
/**
|
|
49
|
+
* Failover group membership resolved from the server's failover groups: `null` = the server's groups were read and
|
|
50
|
+
* the database is not a member; undefined = the listing failed or was skipped.
|
|
51
|
+
*/
|
|
52
|
+
failoverGroup?: {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
partnerServers: string[];
|
|
56
|
+
readWriteFailoverPolicy?: string | null;
|
|
57
|
+
role?: string | null;
|
|
58
|
+
} | null;
|
|
59
|
+
backupStorageRedundancy?: string | null;
|
|
60
|
+
}
|
|
61
|
+
export interface ResilienceFactsItem {
|
|
62
|
+
resourceId: string;
|
|
63
|
+
/** Lowercase ARM type, e.g. "microsoft.storage/storageaccounts". */
|
|
64
|
+
resourceType: string;
|
|
65
|
+
status: ResilienceFactsStatus;
|
|
66
|
+
observedAt: string;
|
|
67
|
+
/** Management requests spent on this resource. */
|
|
68
|
+
requestCount: number;
|
|
69
|
+
errors?: string[];
|
|
70
|
+
storage?: StorageAccountResilienceFacts;
|
|
71
|
+
sql?: SqlDatabaseResilienceFacts;
|
|
72
|
+
}
|
|
73
|
+
export interface ResilienceFactsSummary {
|
|
74
|
+
storageAccounts: number;
|
|
75
|
+
sqlDatabases: number;
|
|
76
|
+
sqlServers: number;
|
|
77
|
+
collected: number;
|
|
78
|
+
partial: number;
|
|
79
|
+
failed: number;
|
|
80
|
+
/** Items skipped as not applicable (FileStorage accounts, DataWarehouse pools). */
|
|
81
|
+
notApplicable?: number;
|
|
82
|
+
requestCount: number;
|
|
83
|
+
}
|
|
84
|
+
export interface ResilienceFactsIssue {
|
|
85
|
+
severity: 'warning' | 'error';
|
|
86
|
+
resourceId?: string;
|
|
87
|
+
code: string;
|
|
88
|
+
message: string;
|
|
89
|
+
}
|
|
90
|
+
export interface ResilienceFactsProjection {
|
|
91
|
+
schemaVersion: typeof RESILIENCE_FACTS_SCHEMA_VERSION;
|
|
92
|
+
source: typeof RESILIENCE_FACTS_SOURCE;
|
|
93
|
+
subscriptionId: string;
|
|
94
|
+
tenantId?: string;
|
|
95
|
+
generatedAt: string;
|
|
96
|
+
summary: ResilienceFactsSummary;
|
|
97
|
+
items: ResilienceFactsItem[];
|
|
98
|
+
issues: ResilienceFactsIssue[];
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=resilienceFacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilienceFacts.d.ts","sourceRoot":"","sources":["../../src/azure/resilienceFacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RESILIENCE_FACTS_RAW_FILE = exports.RESILIENCE_FACTS_PORTAL_FILE = exports.RESILIENCE_FACTS_SOURCE = exports.RESILIENCE_FACTS_SCHEMA_VERSION = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Resilience facts: the small per-resource property reads the resilience story needs that no other collection
|
|
6
|
+
* carries — storage blob-service data-protection settings and lifecycle management, Azure SQL database backup
|
|
7
|
+
* retention and failover groups. Collected in the reliability component beside the data-protection posture and
|
|
8
|
+
* published as `azure-portal/subscriptions/{id}/resilience-facts.json`. Consumed by the cloud-engine
|
|
9
|
+
* `ProtectionProfileBuilder` (`data-protection:<selector>` capability sources) and available to the resilience story page.
|
|
10
|
+
*
|
|
11
|
+
* Spec: `Specs/reporting/utilization-stories-types-package.md` (parent: core `specs/reporting/utilization-stories.md`).
|
|
12
|
+
* Additive: consumers tolerate unknown fields. Field semantics: `undefined` = not read (the request failed, was not
|
|
13
|
+
* applicable or was skipped) and resolves to an `unknown` capability; `null` = read and absent/disabled. A failed
|
|
14
|
+
* read must never be presented as "disabled".
|
|
15
|
+
*/
|
|
16
|
+
exports.RESILIENCE_FACTS_SCHEMA_VERSION = 1;
|
|
17
|
+
exports.RESILIENCE_FACTS_SOURCE = 'AzureResilienceFacts';
|
|
18
|
+
exports.RESILIENCE_FACTS_PORTAL_FILE = 'resilience-facts.json';
|
|
19
|
+
exports.RESILIENCE_FACTS_RAW_FILE = 'data-protection/resilience-facts.json.gz';
|
|
20
|
+
//# sourceMappingURL=resilienceFacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilienceFacts.js","sourceRoot":"","sources":["../../src/azure/resilienceFacts.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACU,QAAA,+BAA+B,GAAG,CAAU,CAAC;AAC7C,QAAA,uBAAuB,GAAG,sBAA+B,CAAC;AAC1D,QAAA,4BAA4B,GAAG,uBAAgC,CAAC;AAChE,QAAA,yBAAyB,GAAG,0CAAmD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ResilienceFactsItem, type ResilienceFactsProjection } from './resilienceFacts';
|
|
2
|
+
export declare const isResilienceFactsItem: (value: unknown) => value is ResilienceFactsItem;
|
|
3
|
+
export declare const isResilienceFactsProjection: (value: unknown) => value is ResilienceFactsProjection;
|
|
4
|
+
//# sourceMappingURL=resilienceFactsValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilienceFactsValidation.d.ts","sourceRoot":"","sources":["../../src/azure/resilienceFactsValidation.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC/B,MAAM,mBAAmB,CAAC;AA+C3B,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,mBAUZ,CAAC;AAErD,eAAO,MAAM,2BAA2B,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,yBAiBnE,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isResilienceFactsProjection = exports.isResilienceFactsItem = void 0;
|
|
4
|
+
const validationHelpers_1 = require("../common/validationHelpers");
|
|
5
|
+
const resilienceFacts_1 = require("./resilienceFacts");
|
|
6
|
+
const STATUSES = new Set(['collected', 'partial', 'failed', 'not-applicable']);
|
|
7
|
+
const isNullableBoolean = (value) => value === null || typeof value === 'boolean';
|
|
8
|
+
const isNullableNumber = (value) => value === null || (0, validationHelpers_1.isFiniteNumber)(value);
|
|
9
|
+
const isOptionalNullableNumber = (value) => value === undefined || isNullableNumber(value);
|
|
10
|
+
const isOptionalNullableString = (value) => value === undefined || value === null || (0, validationHelpers_1.isString)(value);
|
|
11
|
+
const isRetention = (value) => value === undefined || value === null || ((0, validationHelpers_1.isRecord)(value) && typeof value.enabled === 'boolean' && isOptionalNullableNumber(value.days));
|
|
12
|
+
const isOptionalNullableBoolean = (value) => value === undefined || isNullableBoolean(value);
|
|
13
|
+
const isStorageFacts = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
14
|
+
isRetention(value.blobSoftDelete) &&
|
|
15
|
+
isRetention(value.containerSoftDelete) &&
|
|
16
|
+
isOptionalNullableBoolean(value.versioning) &&
|
|
17
|
+
isRetention(value.changeFeed) &&
|
|
18
|
+
isRetention(value.pointInTimeRestore) &&
|
|
19
|
+
isOptionalNullableString(value.kind) &&
|
|
20
|
+
(value.managementPolicy === undefined ||
|
|
21
|
+
value.managementPolicy === null ||
|
|
22
|
+
((0, validationHelpers_1.isRecord)(value.managementPolicy) &&
|
|
23
|
+
typeof value.managementPolicy.present === 'boolean' &&
|
|
24
|
+
(value.managementPolicy.ruleCount === undefined || (0, validationHelpers_1.isCount)(value.managementPolicy.ruleCount))));
|
|
25
|
+
const isSqlFacts = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
26
|
+
isOptionalNullableNumber(value.shortTermRetentionDays) &&
|
|
27
|
+
isOptionalNullableNumber(value.diffBackupIntervalHours) &&
|
|
28
|
+
(value.longTermRetention === undefined ||
|
|
29
|
+
value.longTermRetention === null ||
|
|
30
|
+
((0, validationHelpers_1.isRecord)(value.longTermRetention) &&
|
|
31
|
+
typeof value.longTermRetention.enabled === 'boolean' &&
|
|
32
|
+
isOptionalNullableString(value.longTermRetention.weekly) &&
|
|
33
|
+
isOptionalNullableString(value.longTermRetention.monthly) &&
|
|
34
|
+
isOptionalNullableString(value.longTermRetention.yearly) &&
|
|
35
|
+
isOptionalNullableNumber(value.longTermRetention.weekOfYear))) &&
|
|
36
|
+
(value.failoverGroup === undefined ||
|
|
37
|
+
value.failoverGroup === null ||
|
|
38
|
+
((0, validationHelpers_1.isRecord)(value.failoverGroup) &&
|
|
39
|
+
(0, validationHelpers_1.isString)(value.failoverGroup.id) &&
|
|
40
|
+
(0, validationHelpers_1.isString)(value.failoverGroup.name) &&
|
|
41
|
+
(0, validationHelpers_1.isStringArray)(value.failoverGroup.partnerServers) &&
|
|
42
|
+
isOptionalNullableString(value.failoverGroup.readWriteFailoverPolicy) &&
|
|
43
|
+
isOptionalNullableString(value.failoverGroup.role))) &&
|
|
44
|
+
isOptionalNullableString(value.backupStorageRedundancy);
|
|
45
|
+
const isResilienceFactsItem = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
46
|
+
(0, validationHelpers_1.isString)(value.resourceId) &&
|
|
47
|
+
(0, validationHelpers_1.isString)(value.resourceType) &&
|
|
48
|
+
(0, validationHelpers_1.isString)(value.status) &&
|
|
49
|
+
STATUSES.has(value.status) &&
|
|
50
|
+
(0, validationHelpers_1.isDateTime)(value.observedAt) &&
|
|
51
|
+
(0, validationHelpers_1.isCount)(value.requestCount) &&
|
|
52
|
+
(value.errors === undefined || (0, validationHelpers_1.isStringArray)(value.errors)) &&
|
|
53
|
+
(value.storage === undefined || isStorageFacts(value.storage)) &&
|
|
54
|
+
(value.sql === undefined || isSqlFacts(value.sql));
|
|
55
|
+
exports.isResilienceFactsItem = isResilienceFactsItem;
|
|
56
|
+
const isResilienceFactsProjection = (value) => (0, validationHelpers_1.isRecord)(value) &&
|
|
57
|
+
value.schemaVersion === resilienceFacts_1.RESILIENCE_FACTS_SCHEMA_VERSION &&
|
|
58
|
+
value.source === resilienceFacts_1.RESILIENCE_FACTS_SOURCE &&
|
|
59
|
+
(0, validationHelpers_1.isString)(value.subscriptionId) &&
|
|
60
|
+
(value.tenantId === undefined || (0, validationHelpers_1.isString)(value.tenantId)) &&
|
|
61
|
+
(0, validationHelpers_1.isDateTime)(value.generatedAt) &&
|
|
62
|
+
(0, validationHelpers_1.isRecord)(value.summary) &&
|
|
63
|
+
(value.summary.notApplicable === undefined || (0, validationHelpers_1.isCount)(value.summary.notApplicable)) &&
|
|
64
|
+
['storageAccounts', 'sqlDatabases', 'sqlServers', 'collected', 'partial', 'failed', 'requestCount'].every(key => (0, validationHelpers_1.isCount)(value.summary[key])) &&
|
|
65
|
+
Array.isArray(value.items) &&
|
|
66
|
+
value.items.every(exports.isResilienceFactsItem) &&
|
|
67
|
+
Array.isArray(value.issues) &&
|
|
68
|
+
value.issues.every(issue => (0, validationHelpers_1.isRecord)(issue) && (issue.severity === 'warning' || issue.severity === 'error') && (0, validationHelpers_1.isString)(issue.code) && (0, validationHelpers_1.isString)(issue.message));
|
|
69
|
+
exports.isResilienceFactsProjection = isResilienceFactsProjection;
|
|
70
|
+
//# sourceMappingURL=resilienceFactsValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilienceFactsValidation.js","sourceRoot":"","sources":["../../src/azure/resilienceFactsValidation.ts"],"names":[],"mappings":";;;AAAA,mEAAqH;AACrH,uDAK2B;AAE3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACvF,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC;AACpG,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,IAAA,kCAAc,EAAC,KAAK,CAAC,CAAC;AAC9F,MAAM,wBAAwB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC7G,MAAM,wBAAwB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,IAAA,4BAAQ,EAAC,KAAK,CAAC,CAAC;AACvH,MAAM,WAAW,GAAG,CAAC,KAAc,EAAW,EAAE,CAC9C,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAA,4BAAQ,EAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3I,MAAM,yBAAyB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAE/G,MAAM,cAAc,GAAG,CAAC,KAAc,EAAW,EAAE,CACjD,IAAA,4BAAQ,EAAC,KAAK,CAAC;IACf,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC;IACjC,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACtC,yBAAyB,CAAC,KAAK,CAAC,UAAU,CAAC;IAC3C,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC;IAC7B,WAAW,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACrC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC;IACpC,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS;QACnC,KAAK,CAAC,gBAAgB,KAAK,IAAI;QAC/B,CAAC,IAAA,4BAAQ,EAAC,KAAK,CAAC,gBAAgB,CAAC;YAC/B,OAAO,KAAK,CAAC,gBAAgB,CAAC,OAAO,KAAK,SAAS;YACnD,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,KAAK,SAAS,IAAI,IAAA,2BAAO,EAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtG,MAAM,UAAU,GAAG,CAAC,KAAc,EAAW,EAAE,CAC7C,IAAA,4BAAQ,EAAC,KAAK,CAAC;IACf,wBAAwB,CAAC,KAAK,CAAC,sBAAsB,CAAC;IACtD,wBAAwB,CAAC,KAAK,CAAC,uBAAuB,CAAC;IACvD,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;QACpC,KAAK,CAAC,iBAAiB,KAAK,IAAI;QAChC,CAAC,IAAA,4BAAQ,EAAC,KAAK,CAAC,iBAAiB,CAAC;YAChC,OAAO,KAAK,CAAC,iBAAiB,CAAC,OAAO,KAAK,SAAS;YACpD,wBAAwB,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACxD,wBAAwB,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACzD,wBAAwB,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACxD,wBAAwB,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IAClE,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;QAChC,KAAK,CAAC,aAAa,KAAK,IAAI;QAC5B,CAAC,IAAA,4BAAQ,EAAC,KAAK,CAAC,aAAa,CAAC;YAC5B,IAAA,4BAAQ,EAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,IAAA,4BAAQ,EAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;YAClC,IAAA,iCAAa,EAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;YACjD,wBAAwB,CAAC,KAAK,CAAC,aAAa,CAAC,uBAAuB,CAAC;YACrE,wBAAwB,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,wBAAwB,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAEnD,MAAM,qBAAqB,GAAG,CAAC,KAAc,EAAgC,EAAE,CACpF,IAAA,4BAAQ,EAAC,KAAK,CAAC;IACf,IAAA,4BAAQ,EAAC,KAAK,CAAC,UAAU,CAAC;IAC1B,IAAA,4BAAQ,EAAC,KAAK,CAAC,YAAY,CAAC;IAC5B,IAAA,4BAAQ,EAAC,KAAK,CAAC,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1B,IAAA,8BAAU,EAAC,KAAK,CAAC,UAAU,CAAC;IAC5B,IAAA,2BAAO,EAAC,KAAK,CAAC,YAAY,CAAC;IAC3B,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,IAAA,iCAAa,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAVxC,QAAA,qBAAqB,yBAUmB;AAE9C,MAAM,2BAA2B,GAAG,CAAC,KAAc,EAAsC,EAAE,CAChG,IAAA,4BAAQ,EAAC,KAAK,CAAC;IACf,KAAK,CAAC,aAAa,KAAK,iDAA+B;IACvD,KAAK,CAAC,MAAM,KAAK,yCAAuB;IACxC,IAAA,4BAAQ,EAAC,KAAK,CAAC,cAAc,CAAC;IAC9B,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAA,4BAAQ,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAA,8BAAU,EAAC,KAAK,CAAC,WAAW,CAAC;IAC7B,IAAA,4BAAQ,EAAC,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,IAAA,2BAAO,EAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnF,CAAC,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAC9G,IAAA,2BAAO,EAAE,KAAK,CAAC,OAAmC,CAAC,GAAG,CAAC,CAAC,CACzD;IACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,6BAAqB,CAAC;IACxC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,KAAK,CAAC,MAAM,CAAC,KAAK,CAChB,KAAK,CAAC,EAAE,CAAC,IAAA,4BAAQ,EAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,IAAA,4BAAQ,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAA,4BAAQ,EAAC,KAAK,CAAC,OAAO,CAAC,CAC5I,CAAC;AAjBS,QAAA,2BAA2B,+BAiBpC"}
|
package/dist/azure/views.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type { ResourceOptimizationProfile, ResourceSimpleOptimizationProfile } f
|
|
|
8
8
|
import { Tags } from '../tags/tags.js';
|
|
9
9
|
import type { AdvisorScoreSummary } from './advisorScore.js';
|
|
10
10
|
import type { AzurePortalArtifactGeneration, AzurePortalVersionedArtifact } from './portalArtifacts.js';
|
|
11
|
+
import type { UtilizationProfile, UtilizationSignal } from '../common/utilizationStories.js';
|
|
11
12
|
import type { AzurePortalHealthEventsSummary, AzureResourceHealthAvailabilityStatusSummary } from './resourceHealth.js';
|
|
12
13
|
import type { CostComposition, EstimateLens } from './costComposition.js';
|
|
13
14
|
import { type ArtifactOwnershipBinding, type ArtifactPublicationDecision, type ArtifactRevisionVector } from '../common/artifactEvidence.js';
|
|
@@ -141,6 +142,8 @@ export interface AzureResourcePortalItem {
|
|
|
141
142
|
vmPricePerformance?: VmPricePerformanceInsights;
|
|
142
143
|
/** Current Azure Resource Health availability status for this resource, when available. */
|
|
143
144
|
resourceHealth?: AzureResourceHealthAvailabilityStatusSummary;
|
|
145
|
+
/** Compact utilization verdict + sparklines (engine-produced; absent until the resource has been scanned by the new producer). */
|
|
146
|
+
utilizationSignal?: UtilizationSignal;
|
|
144
147
|
}
|
|
145
148
|
export interface SavingsOpportunity {
|
|
146
149
|
/** Stable identifier for the customer-facing savings opportunity. */
|
|
@@ -236,6 +239,8 @@ export interface AzureResourcePluginItem {
|
|
|
236
239
|
optimizationProfile?: ResourceOptimizationProfile;
|
|
237
240
|
/** VM-specific same-region price/performance lookup data. */
|
|
238
241
|
vmPricePerformance?: VmPricePerformanceInsights;
|
|
242
|
+
/** Full utilization profile (engine-produced; absent until scanned by the new producer). */
|
|
243
|
+
utilizationProfile?: UtilizationProfile;
|
|
239
244
|
}
|
|
240
245
|
export interface AzureResourcePluginItemDetailed {
|
|
241
246
|
currency: string;
|
|
@@ -288,6 +293,8 @@ export interface AzureResourcePluginItemDetailed {
|
|
|
288
293
|
vmPricePerformance?: VmPricePerformanceInsights;
|
|
289
294
|
/** Generic compute hosting model alternatives, including cross-platform options. */
|
|
290
295
|
computeAlternatives?: ComputeAlternativesInsights;
|
|
296
|
+
/** Full utilization profile (engine-produced; absent until scanned by the new producer). */
|
|
297
|
+
utilizationProfile?: UtilizationProfile;
|
|
291
298
|
}
|
|
292
299
|
export type VmPricePerformanceOsType = 'linux' | 'windows';
|
|
293
300
|
/** Operating system installed on the VM or VM scale set. */
|