@electrolux-oss/plugin-infrawallet-backend 1.1.0-20250901061058-90165b1 → 1.1.0-20251122142003-7ac6f9a
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/cost-clients/AwsClient.cjs.js +34 -7
- package/dist/cost-clients/AwsClient.cjs.js.map +1 -1
- package/dist/cost-clients/AzureClient.cjs.js +31 -2
- package/dist/cost-clients/AzureClient.cjs.js.map +1 -1
- package/dist/cost-clients/ConfluentClient.cjs.js +50 -2
- package/dist/cost-clients/ConfluentClient.cjs.js.map +1 -1
- package/dist/cost-clients/CustomProviderClient.cjs.js +30 -1
- package/dist/cost-clients/CustomProviderClient.cjs.js.map +1 -1
- package/dist/cost-clients/DatadogClient.cjs.js +38 -2
- package/dist/cost-clients/DatadogClient.cjs.js.map +1 -1
- package/dist/cost-clients/ElasticCloudClient.cjs.js +39 -7
- package/dist/cost-clients/ElasticCloudClient.cjs.js.map +1 -1
- package/dist/cost-clients/GCPClient.cjs.js +29 -2
- package/dist/cost-clients/GCPClient.cjs.js.map +1 -1
- package/dist/cost-clients/GitHubClient.cjs.js +28 -2
- package/dist/cost-clients/GitHubClient.cjs.js.map +1 -1
- package/dist/cost-clients/InfraWalletClient.cjs.js +3 -0
- package/dist/cost-clients/InfraWalletClient.cjs.js.map +1 -1
- package/dist/cost-clients/MockClient.cjs.js +18 -0
- package/dist/cost-clients/MockClient.cjs.js.map +1 -1
- package/dist/cost-clients/MongoAtlasClient.cjs.js +56 -24
- package/dist/cost-clients/MongoAtlasClient.cjs.js.map +1 -1
- package/dist/schemas/AzureBilling.cjs.js +15 -7
- package/dist/schemas/AzureBilling.cjs.js.map +1 -1
- package/dist/schemas/ConfluentBilling.cjs.js +20 -8
- package/dist/schemas/ConfluentBilling.cjs.js.map +1 -1
- package/dist/schemas/DatadogBilling.cjs.js +14 -5
- package/dist/schemas/DatadogBilling.cjs.js.map +1 -1
- package/dist/schemas/ElasticBilling.cjs.js +5 -5
- package/dist/schemas/ElasticBilling.cjs.js.map +1 -1
- package/dist/schemas/GCPBilling.cjs.js +48 -18
- package/dist/schemas/GCPBilling.cjs.js.map +1 -1
- package/dist/service/functions.cjs.js +6 -0
- package/dist/service/functions.cjs.js.map +1 -1
- package/dist/tasks/fetchAndSaveCosts.cjs.js +1 -1
- package/dist/tasks/fetchAndSaveCosts.cjs.js.map +1 -1
- package/mock/mock_response.json +252 -0
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var zod = require('zod');
|
|
4
4
|
|
|
5
|
-
const AzureGranularitySchema = zod.z.enum(["Daily", "Monthly"
|
|
5
|
+
const AzureGranularitySchema = zod.z.enum(["Daily", "Monthly"]);
|
|
6
6
|
const AzureQueryTypeSchema = zod.z.enum(["ActualCost", "AmortizedCost", "Usage"]);
|
|
7
7
|
const AzureTimeframeSchema = zod.z.enum([
|
|
8
8
|
"MonthToDate",
|
|
@@ -25,8 +25,8 @@ const AzureDatasetSchema = zod.z.object({
|
|
|
25
25
|
granularity: AzureGranularitySchema,
|
|
26
26
|
aggregation: zod.z.record(
|
|
27
27
|
zod.z.object({
|
|
28
|
-
name: zod.z.
|
|
29
|
-
function: zod.z.
|
|
28
|
+
name: zod.z.enum(["PreTaxCost", "CostUSD", "UsageQuantity"]),
|
|
29
|
+
function: zod.z.enum(["Sum", "Average"])
|
|
30
30
|
})
|
|
31
31
|
).optional(),
|
|
32
32
|
grouping: zod.z.array(AzureGroupingSchema).optional(),
|
|
@@ -40,14 +40,14 @@ const AzureDatasetSchema = zod.z.object({
|
|
|
40
40
|
and: zod.z.array(zod.z.any()).optional(),
|
|
41
41
|
or: zod.z.array(zod.z.any()).optional(),
|
|
42
42
|
not: zod.z.any().optional(),
|
|
43
|
-
|
|
43
|
+
dimensions: zod.z.object({
|
|
44
44
|
name: zod.z.string(),
|
|
45
|
-
operator: zod.z.
|
|
45
|
+
operator: zod.z.enum(["In"]),
|
|
46
46
|
values: zod.z.array(zod.z.string())
|
|
47
47
|
}).optional(),
|
|
48
|
-
|
|
48
|
+
tags: zod.z.object({
|
|
49
49
|
name: zod.z.string(),
|
|
50
|
-
operator: zod.z.
|
|
50
|
+
operator: zod.z.enum(["In"]),
|
|
51
51
|
values: zod.z.array(zod.z.string())
|
|
52
52
|
}).optional()
|
|
53
53
|
}).optional()
|
|
@@ -77,6 +77,14 @@ const AzureBillingResponseSchema = zod.z.object({
|
|
|
77
77
|
eTag: zod.z.string().optional(),
|
|
78
78
|
properties: AzureBillingResponsePropertiesSchema
|
|
79
79
|
});
|
|
80
|
+
zod.z.object({
|
|
81
|
+
PreTaxCost: zod.z.number().optional(),
|
|
82
|
+
ResourceGroup: zod.z.string().optional(),
|
|
83
|
+
Currency: zod.z.string().optional(),
|
|
84
|
+
UsageDate: zod.z.number().optional(),
|
|
85
|
+
ServiceName: zod.z.string().optional(),
|
|
86
|
+
BillingMonth: zod.z.string().optional()
|
|
87
|
+
});
|
|
80
88
|
zod.z.object({
|
|
81
89
|
error: zod.z.object({
|
|
82
90
|
code: zod.z.string(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureBilling.cjs.js","sources":["../../src/schemas/AzureBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const AzureGranularitySchema = z.enum(['Daily', 'Monthly'
|
|
1
|
+
{"version":3,"file":"AzureBilling.cjs.js","sources":["../../src/schemas/AzureBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const AzureGranularitySchema = z.enum(['Daily', 'Monthly']);\nexport const AzureQueryTypeSchema = z.enum(['ActualCost', 'AmortizedCost', 'Usage']);\n\nexport const AzureTimeframeSchema = z.enum([\n 'MonthToDate',\n 'BillingMonthToDate',\n 'TheLastMonth',\n 'TheLastBillingMonth',\n 'WeekToDate',\n 'Custom',\n]);\n\nexport const AzureGroupingTypeSchema = z.enum(['Dimension', 'TagKey']);\n\nexport const AzureGroupingSchema = z.object({\n type: AzureGroupingTypeSchema,\n name: z.string(),\n});\n\nexport const AzureTimePeriodSchema = z.object({\n from: z.string().or(z.date()),\n to: z.string().or(z.date()),\n});\n\nexport const AzureDatasetSchema = z.object({\n granularity: AzureGranularitySchema,\n aggregation: z\n .record(\n z.object({\n name: z.enum(['PreTaxCost', 'CostUSD', 'UsageQuantity']),\n function: z.enum(['Sum', 'Average']),\n }),\n )\n .optional(),\n grouping: z.array(AzureGroupingSchema).optional(),\n sorting: z\n .array(\n z.object({\n direction: z.enum(['ascending', 'descending']),\n name: z.string(),\n }),\n )\n .optional(),\n filter: z\n .object({\n and: z.array(z.any()).optional(),\n or: z.array(z.any()).optional(),\n not: z.any().optional(),\n dimensions: z\n .object({\n name: z.string(),\n operator: z.enum(['In']),\n values: z.array(z.string()),\n })\n .optional(),\n tags: z\n .object({\n name: z.string(),\n operator: z.enum(['In']),\n values: z.array(z.string()),\n })\n .optional(),\n })\n .optional(),\n});\n\nexport const AzureQueryDefinitionSchema = z.object({\n type: AzureQueryTypeSchema,\n timeframe: AzureTimeframeSchema,\n timePeriod: AzureTimePeriodSchema.optional(),\n dataset: AzureDatasetSchema,\n includeMonetaryCommitment: z.boolean().optional(),\n});\n\nexport const AzureColumnInfoSchema = z.object({\n name: z.string(),\n type: z.string(),\n});\n\nexport const AzureBillingResponsePropertiesSchema = z.object({\n nextLink: z.string().optional(),\n columns: z.array(AzureColumnInfoSchema),\n rows: z.array(z.array(z.any())),\n});\n\nexport const AzureBillingResponseSchema = z.object({\n id: z.string().optional(),\n name: z.string().optional(),\n type: z.string().optional(),\n location: z.string().optional(),\n sku: z.string().optional(),\n eTag: z.string().optional(),\n properties: AzureBillingResponsePropertiesSchema,\n});\n\nexport const AzureCommonColumnsSchema = z.object({\n PreTaxCost: z.number().optional(),\n ResourceGroup: z.string().optional(),\n Currency: z.string().optional(),\n UsageDate: z.number().optional(),\n ServiceName: z.string().optional(),\n BillingMonth: z.string().optional(),\n});\n\nexport const AzureBillingErrorSchema = z.object({\n error: z.object({\n code: z.string(),\n message: z.string(),\n target: z.string().optional(),\n details: z\n .array(\n z.object({\n code: z.string(),\n message: z.string(),\n target: z.string().optional(),\n }),\n )\n .optional(),\n innererror: z\n .object({\n code: z.string().optional(),\n message: z.string().optional(),\n })\n .optional(),\n }),\n});\n\nexport type AzureGranularity = z.infer<typeof AzureGranularitySchema>;\nexport type AzureQueryType = z.infer<typeof AzureQueryTypeSchema>;\nexport type AzureTimeframe = z.infer<typeof AzureTimeframeSchema>;\nexport type AzureGroupingType = z.infer<typeof AzureGroupingTypeSchema>;\nexport type AzureGrouping = z.infer<typeof AzureGroupingSchema>;\nexport type AzureTimePeriod = z.infer<typeof AzureTimePeriodSchema>;\nexport type AzureDataset = z.infer<typeof AzureDatasetSchema>;\nexport type AzureQueryDefinition = z.infer<typeof AzureQueryDefinitionSchema>;\nexport type AzureColumnInfo = z.infer<typeof AzureColumnInfoSchema>;\nexport type AzureBillingResponseProperties = z.infer<typeof AzureBillingResponsePropertiesSchema>;\nexport type AzureBillingResponse = z.infer<typeof AzureBillingResponseSchema>;\nexport type AzureCommonColumns = z.infer<typeof AzureCommonColumnsSchema>;\nexport type AzureBillingError = z.infer<typeof AzureBillingErrorSchema>;\n"],"names":["z"],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ const ConfluentEnvironmentSchema = zod.z.object({
|
|
|
9
9
|
updated_at: zod.z.string().optional()
|
|
10
10
|
});
|
|
11
11
|
const ConfluentUsageRecordSchema = zod.z.object({
|
|
12
|
+
api_version: zod.z.string().optional(),
|
|
13
|
+
kind: zod.z.string().optional(),
|
|
12
14
|
id: zod.z.string().optional(),
|
|
13
15
|
resource: zod.z.object({
|
|
14
16
|
id: zod.z.string(),
|
|
@@ -16,14 +18,24 @@ const ConfluentUsageRecordSchema = zod.z.object({
|
|
|
16
18
|
environment: zod.z.object({
|
|
17
19
|
id: zod.z.string()
|
|
18
20
|
})
|
|
19
|
-
}),
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
}).optional(),
|
|
22
|
+
amount: zod.z.number().optional(),
|
|
23
|
+
discount_amount: zod.z.number().optional(),
|
|
24
|
+
original_amount: zod.z.number().optional(),
|
|
25
|
+
description: zod.z.string().optional(),
|
|
26
|
+
end_date: zod.z.string().optional(),
|
|
27
|
+
granularity: zod.z.string().optional(),
|
|
28
|
+
line_type: zod.z.string().optional(),
|
|
29
|
+
network_access_type: zod.z.string().optional(),
|
|
30
|
+
price: zod.z.number().optional(),
|
|
31
|
+
product: zod.z.string().optional(),
|
|
32
|
+
quantity: zod.z.number().optional(),
|
|
33
|
+
start_date: zod.z.string().optional(),
|
|
34
|
+
unit: zod.z.string().optional(),
|
|
35
|
+
envDisplayName: zod.z.string().optional(),
|
|
36
|
+
// Keep legacy fields for backward compatibility
|
|
37
|
+
metric: zod.z.string().optional(),
|
|
38
|
+
value: zod.z.number().optional()
|
|
27
39
|
});
|
|
28
40
|
const ConfluentBillingResponseSchema = zod.z.object({
|
|
29
41
|
data: zod.z.array(ConfluentUsageRecordSchema),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfluentBilling.cjs.js","sources":["../../src/schemas/ConfluentBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const ConfluentEnvironmentSchema = z.object({\n id: z.string(),\n display_name: z.string(),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n});\n\nexport const ConfluentUsageRecordSchema = z.object({\n id: z.string().optional(),\n resource: z.object({\n
|
|
1
|
+
{"version":3,"file":"ConfluentBilling.cjs.js","sources":["../../src/schemas/ConfluentBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const ConfluentEnvironmentSchema = z.object({\n id: z.string(),\n display_name: z.string(),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n});\n\nexport const ConfluentUsageRecordSchema = z.object({\n api_version: z.string().optional(),\n kind: z.string().optional(),\n id: z.string().optional(),\n resource: z\n .object({\n id: z.string(),\n display_name: z.string().optional(),\n environment: z.object({\n id: z.string(),\n }),\n })\n .optional(),\n amount: z.number().optional(),\n discount_amount: z.number().optional(),\n original_amount: z.number().optional(),\n description: z.string().optional(),\n end_date: z.string().optional(),\n granularity: z.string().optional(),\n line_type: z.string().optional(),\n network_access_type: z.string().optional(),\n price: z.number().optional(),\n product: z.string().optional(),\n quantity: z.number().optional(),\n start_date: z.string().optional(),\n unit: z.string().optional(),\n envDisplayName: z.string().optional(),\n // Keep legacy fields for backward compatibility\n metric: z.string().optional(),\n value: z.number().optional(),\n});\n\nexport const ConfluentBillingResponseSchema = z.object({\n data: z.array(ConfluentUsageRecordSchema),\n meta: z\n .object({\n first: z.string().optional(),\n last: z.string().optional(),\n prev: z.string().optional(),\n next: z.string().optional(),\n total_size: z.number().optional(),\n })\n .optional(),\n});\n\nexport const ConfluentBillingRequestSchema = z.object({\n 'resource.environment': z.string().optional(),\n 'resource.id': z.string().optional(),\n metric: z.string().optional(),\n granularity: z.enum(['DAILY', 'HOURLY']).optional(),\n start_date: z.string(),\n end_date: z.string(),\n});\n\nexport const ConfluentBillingErrorSchema = z.object({\n error_code: z.string(),\n message: z.string(),\n details: z\n .array(\n z.object({\n '@type': z.string(),\n detail: z.string(),\n }),\n )\n .optional(),\n});\n\nexport type ConfluentEnvironment = z.infer<typeof ConfluentEnvironmentSchema>;\nexport type ConfluentUsageRecord = z.infer<typeof ConfluentUsageRecordSchema>;\nexport type ConfluentBillingResponse = z.infer<typeof ConfluentBillingResponseSchema>;\nexport type ConfluentBillingRequest = z.infer<typeof ConfluentBillingRequestSchema>;\nexport type ConfluentBillingError = z.infer<typeof ConfluentBillingErrorSchema>;\n"],"names":["z"],"mappings":"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"}
|
|
@@ -4,26 +4,34 @@ var zod = require('zod');
|
|
|
4
4
|
|
|
5
5
|
const DatadogChargeTypeSchema = zod.z.enum(["usage", "commitment", "total"]);
|
|
6
6
|
const DatadogViewSchema = zod.z.enum(["sub-org", "parent-org"]);
|
|
7
|
+
const DatadogCostByOrgTypeSchema = zod.z.enum(["cost_by_org"]);
|
|
7
8
|
const DatadogChargeSchema = zod.z.object({
|
|
8
9
|
chargeType: DatadogChargeTypeSchema.optional(),
|
|
9
10
|
productName: zod.z.string().optional(),
|
|
11
|
+
cost: zod.z.number().optional(),
|
|
12
|
+
// Additional fields that may be present in extended responses
|
|
10
13
|
billableUnitName: zod.z.string().optional(),
|
|
11
14
|
unitPrice: zod.z.number().optional(),
|
|
12
15
|
billingUnit: zod.z.string().optional(),
|
|
13
16
|
includedUnitCount: zod.z.number().optional(),
|
|
14
17
|
totalUsage: zod.z.number().optional(),
|
|
15
|
-
totalCost: zod.z.number().optional()
|
|
16
|
-
cost: zod.z.number().optional()
|
|
18
|
+
totalCost: zod.z.number().optional()
|
|
17
19
|
});
|
|
18
20
|
const DatadogCostByOrgAttributesSchema = zod.z.object({
|
|
21
|
+
// Core organization fields
|
|
19
22
|
orgName: zod.z.string().optional(),
|
|
20
23
|
publicId: zod.z.string().optional(),
|
|
21
|
-
|
|
24
|
+
accountName: zod.z.string().optional(),
|
|
25
|
+
accountPublicId: zod.z.string().optional(),
|
|
26
|
+
// Date can be either Date object or string for flexibility
|
|
27
|
+
date: zod.z.union([zod.z.date(), zod.z.string()]).optional(),
|
|
22
28
|
region: zod.z.string().optional(),
|
|
23
|
-
|
|
29
|
+
// Cost breakdown and totals
|
|
30
|
+
charges: zod.z.array(DatadogChargeSchema).optional(),
|
|
31
|
+
totalCost: zod.z.number().optional()
|
|
24
32
|
});
|
|
25
33
|
const DatadogCostByOrgSchema = zod.z.object({
|
|
26
|
-
type:
|
|
34
|
+
type: DatadogCostByOrgTypeSchema.optional(),
|
|
27
35
|
id: zod.z.string().optional(),
|
|
28
36
|
attributes: DatadogCostByOrgAttributesSchema.optional()
|
|
29
37
|
});
|
|
@@ -66,5 +74,6 @@ exports.DatadogChargeTypeSchema = DatadogChargeTypeSchema;
|
|
|
66
74
|
exports.DatadogCostByOrgAttributesSchema = DatadogCostByOrgAttributesSchema;
|
|
67
75
|
exports.DatadogCostByOrgResponseSchema = DatadogCostByOrgResponseSchema;
|
|
68
76
|
exports.DatadogCostByOrgSchema = DatadogCostByOrgSchema;
|
|
77
|
+
exports.DatadogCostByOrgTypeSchema = DatadogCostByOrgTypeSchema;
|
|
69
78
|
exports.DatadogViewSchema = DatadogViewSchema;
|
|
70
79
|
//# sourceMappingURL=DatadogBilling.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatadogBilling.cjs.js","sources":["../../src/schemas/DatadogBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const DatadogChargeTypeSchema = z.enum(['usage', 'commitment', 'total']);\nexport const DatadogViewSchema = z.enum(['sub-org', 'parent-org']);\n\nexport const DatadogChargeSchema = z.object({\n chargeType: DatadogChargeTypeSchema.optional(),\n productName: z.string().optional(),\n
|
|
1
|
+
{"version":3,"file":"DatadogBilling.cjs.js","sources":["../../src/schemas/DatadogBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const DatadogChargeTypeSchema = z.enum(['usage', 'commitment', 'total']);\nexport const DatadogViewSchema = z.enum(['sub-org', 'parent-org']);\nexport const DatadogCostByOrgTypeSchema = z.enum(['cost_by_org']);\n\nexport const DatadogChargeSchema = z.object({\n chargeType: DatadogChargeTypeSchema.optional(),\n productName: z.string().optional(),\n cost: z.number().optional(),\n // Additional fields that may be present in extended responses\n billableUnitName: z.string().optional(),\n unitPrice: z.number().optional(),\n billingUnit: z.string().optional(),\n includedUnitCount: z.number().optional(),\n totalUsage: z.number().optional(),\n totalCost: z.number().optional(),\n});\n\nexport const DatadogCostByOrgAttributesSchema = z.object({\n // Core organization fields\n orgName: z.string().optional(),\n publicId: z.string().optional(),\n accountName: z.string().optional(),\n accountPublicId: z.string().optional(),\n // Date can be either Date object or string for flexibility\n date: z.union([z.date(), z.string()]).optional(),\n region: z.string().optional(),\n // Cost breakdown and totals\n charges: z.array(DatadogChargeSchema).optional(),\n totalCost: z.number().optional(),\n});\n\nexport const DatadogCostByOrgSchema = z.object({\n type: DatadogCostByOrgTypeSchema.optional(),\n id: z.string().optional(),\n attributes: DatadogCostByOrgAttributesSchema.optional(),\n});\n\nexport const DatadogCostByOrgResponseSchema = z.object({\n data: z.array(DatadogCostByOrgSchema).optional(),\n meta: z\n .object({\n pagination: z\n .object({\n nextRecordId: z.string().optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\nexport const DatadogHistoricalCostRequestSchema = z.object({\n startMonth: z.string().or(z.date()),\n endMonth: z.string().or(z.date()),\n view: DatadogViewSchema.optional(),\n includeConnectedAccounts: z.boolean().optional(),\n});\n\nexport const DatadogEstimatedCostRequestSchema = z.object({\n startMonth: z.string().or(z.date()),\n endMonth: z.string().or(z.date()),\n view: DatadogViewSchema.optional(),\n includeConnectedAccounts: z.boolean().optional(),\n});\n\nexport const DatadogBillingErrorSchema = z.object({\n errors: z.array(\n z.object({\n detail: z.string(),\n status: z.string().optional(),\n title: z.string().optional(),\n source: z\n .object({\n pointer: z.string().optional(),\n parameter: z.string().optional(),\n })\n .optional(),\n }),\n ),\n});\n\nexport type DatadogChargeType = z.infer<typeof DatadogChargeTypeSchema>;\nexport type DatadogView = z.infer<typeof DatadogViewSchema>;\nexport type DatadogCostByOrgType = z.infer<typeof DatadogCostByOrgTypeSchema>;\nexport type DatadogCharge = z.infer<typeof DatadogChargeSchema>;\nexport type DatadogCostByOrgAttributes = z.infer<typeof DatadogCostByOrgAttributesSchema>;\nexport type DatadogCostByOrg = z.infer<typeof DatadogCostByOrgSchema>;\nexport type DatadogCostByOrgResponse = z.infer<typeof DatadogCostByOrgResponseSchema>;\nexport type DatadogHistoricalCostRequest = z.infer<typeof DatadogHistoricalCostRequestSchema>;\nexport type DatadogEstimatedCostRequest = z.infer<typeof DatadogEstimatedCostRequestSchema>;\nexport type DatadogBillingError = z.infer<typeof DatadogBillingErrorSchema>;\n"],"names":["z"],"mappings":"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"}
|
|
@@ -64,14 +64,14 @@ const InstancesResponseSchema = zod.z.object({
|
|
|
64
64
|
instances: zod.z.array(InstanceSchema)
|
|
65
65
|
});
|
|
66
66
|
const ChartValueSchema = zod.z.object({
|
|
67
|
-
id: zod.z.string(),
|
|
68
|
-
name: zod.z.string(),
|
|
69
|
-
type: zod.z.string(),
|
|
70
|
-
value: zod.z.number()
|
|
67
|
+
id: zod.z.string().optional(),
|
|
68
|
+
name: zod.z.string().optional(),
|
|
69
|
+
type: zod.z.string().optional(),
|
|
70
|
+
value: zod.z.number().optional()
|
|
71
71
|
});
|
|
72
72
|
const ChartItemSchema = zod.z.object({
|
|
73
73
|
timestamp: zod.z.number().int(),
|
|
74
|
-
values: zod.z.array(ChartValueSchema)
|
|
74
|
+
values: zod.z.array(ChartValueSchema).optional().default([])
|
|
75
75
|
});
|
|
76
76
|
const ChartsResponseSchema = zod.z.object({
|
|
77
77
|
data: zod.z.array(ChartItemSchema)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElasticBilling.cjs.js","sources":["../../src/schemas/ElasticBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const DisplayQuantityTypeEnum = z.enum(['default', 'normalized']);\n\nexport const DisplayQuantitySchema = z.object({\n formatted_value: z.string(),\n type: DisplayQuantityTypeEnum,\n value: z.number(),\n});\n\nexport const QuantitySchema = z.object({\n formatted_value: z.string(),\n value: z.number(),\n});\n\nexport const RateSchema = z.object({\n formatted_value: z.string(),\n value: z.number(),\n});\n\nexport const ProductLineItemTierSchema = z.object({\n min: z.number().int(),\n max: z.number().int().nullable(),\n total_ecu: z.number(),\n quantity: QuantitySchema,\n rate: RateSchema,\n});\n\nexport const ProductLineItemQuantitySchema = z.object({\n from: z.string().datetime(),\n to: z.string().datetime(),\n total_ecu: z.number(),\n rate: RateSchema,\n tiers: z.array(ProductLineItemTierSchema),\n quantity: QuantitySchema.optional(),\n});\n\nexport const ProductLineItemSchema = z.object({\n name: z.string(),\n total_ecu: z.number(),\n type: z.string(),\n sku: z.string(),\n unit: z.string(),\n quantity: QuantitySchema,\n display_quantity: DisplayQuantitySchema,\n rate: RateSchema,\n kind: z.string().nullable().optional(),\n quantities: z.array(ProductLineItemQuantitySchema),\n});\n\nexport const ProductSchema = z.object({\n total_ecu: z.number(),\n type: z.string(),\n product_line_items: z.array(ProductLineItemSchema),\n});\n\nexport const InstanceSchema = z.object({\n id: z.string(),\n name: z.string(),\n total_ecu: z.number(),\n type: z.string(),\n product_line_items: z.array(ProductLineItemSchema),\n});\n\n// Response Schemas\nexport const ItemsResponseSchema = z.object({\n total_ecu: z.number(),\n products: z.array(ProductSchema),\n});\n\nexport const InstancesResponseSchema = z.object({\n total_ecu: z.number(),\n instances: z.array(InstanceSchema),\n});\n\nexport const ChartValueSchema = z.object({\n id: z.string(),\n name: z.string(),\n type: z.string(),\n value: z.number(),\n});\n\nexport const ChartItemSchema = z.object({\n timestamp: z.number().int(),\n values: z.array(ChartValueSchema),\n});\n\nexport const ChartsResponseSchema = z.object({\n data: z.array(ChartItemSchema),\n});\n\n// Request Schemas\nexport const BucketingStrategyEnum = z.enum(['daily', 'monthly']);\nexport const InstanceTypeEnum = z.enum(['all', 'deployments', 'projects']);\nexport const ServerlessGroupByEnum = z.enum(['product', 'product_family']);\n\nexport const GetChartsRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n bucketing_strategy: BucketingStrategyEnum.optional(),\n});\n\nexport const GetChartsByInstanceRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n bucketing_strategy: BucketingStrategyEnum.optional(),\n instance_type: InstanceTypeEnum.optional(),\n});\n\nexport const GetCostsByInstancesRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n include_names: z.boolean().optional(),\n});\n\nexport const GetItemizedCostsByInstanceRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n});\n\nexport const GetCostsByItemsRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n serverless_group_by: ServerlessGroupByEnum.optional(),\n});\n\n// Error Schemas\nexport const UnauthorizedErrorSchema = z.string();\n\n// Types derived from the schemas\nexport type DisplayQuantityType = z.infer<typeof DisplayQuantityTypeEnum>;\nexport type DisplayQuantity = z.infer<typeof DisplayQuantitySchema>;\nexport type Quantity = z.infer<typeof QuantitySchema>;\nexport type Rate = z.infer<typeof RateSchema>;\nexport type ProductLineItemTier = z.infer<typeof ProductLineItemTierSchema>;\nexport type ProductLineItemQuantity = z.infer<typeof ProductLineItemQuantitySchema>;\nexport type ProductLineItem = z.infer<typeof ProductLineItemSchema>;\nexport type Product = z.infer<typeof ProductSchema>;\nexport type Instance = z.infer<typeof InstanceSchema>;\nexport type Items = z.infer<typeof ItemsResponseSchema>;\nexport type Instances = z.infer<typeof InstancesResponseSchema>;\nexport type ChartValue = z.infer<typeof ChartValueSchema>;\nexport type ChartItem = z.infer<typeof ChartItemSchema>;\nexport type ChartsResponse = z.infer<typeof ChartsResponseSchema>;\nexport type BucketingStrategy = z.infer<typeof BucketingStrategyEnum>;\nexport type InstanceType = z.infer<typeof InstanceTypeEnum>;\nexport type ServerlessGroupBy = z.infer<typeof ServerlessGroupByEnum>;\nexport type GetChartsRequest = z.infer<typeof GetChartsRequestSchema>;\nexport type GetChartsByInstanceRequest = z.infer<typeof GetChartsByInstanceRequestSchema>;\nexport type GetCostsByInstancesRequest = z.infer<typeof GetCostsByInstancesRequestSchema>;\nexport type GetItemizedCostsByInstanceRequest = z.infer<typeof GetItemizedCostsByInstanceRequestSchema>;\nexport type GetCostsByItemsRequest = z.infer<typeof GetCostsByItemsRequestSchema>;\n"],"names":["z"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ElasticBilling.cjs.js","sources":["../../src/schemas/ElasticBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const DisplayQuantityTypeEnum = z.enum(['default', 'normalized']);\n\nexport const DisplayQuantitySchema = z.object({\n formatted_value: z.string(),\n type: DisplayQuantityTypeEnum,\n value: z.number(),\n});\n\nexport const QuantitySchema = z.object({\n formatted_value: z.string(),\n value: z.number(),\n});\n\nexport const RateSchema = z.object({\n formatted_value: z.string(),\n value: z.number(),\n});\n\nexport const ProductLineItemTierSchema = z.object({\n min: z.number().int(),\n max: z.number().int().nullable(),\n total_ecu: z.number(),\n quantity: QuantitySchema,\n rate: RateSchema,\n});\n\nexport const ProductLineItemQuantitySchema = z.object({\n from: z.string().datetime(),\n to: z.string().datetime(),\n total_ecu: z.number(),\n rate: RateSchema,\n tiers: z.array(ProductLineItemTierSchema),\n quantity: QuantitySchema.optional(),\n});\n\nexport const ProductLineItemSchema = z.object({\n name: z.string(),\n total_ecu: z.number(),\n type: z.string(),\n sku: z.string(),\n unit: z.string(),\n quantity: QuantitySchema,\n display_quantity: DisplayQuantitySchema,\n rate: RateSchema,\n kind: z.string().nullable().optional(),\n quantities: z.array(ProductLineItemQuantitySchema),\n});\n\nexport const ProductSchema = z.object({\n total_ecu: z.number(),\n type: z.string(),\n product_line_items: z.array(ProductLineItemSchema),\n});\n\nexport const InstanceSchema = z.object({\n id: z.string(),\n name: z.string(),\n total_ecu: z.number(),\n type: z.string(),\n product_line_items: z.array(ProductLineItemSchema),\n});\n\n// Response Schemas\nexport const ItemsResponseSchema = z.object({\n total_ecu: z.number(),\n products: z.array(ProductSchema),\n});\n\nexport const InstancesResponseSchema = z.object({\n total_ecu: z.number(),\n instances: z.array(InstanceSchema),\n});\n\nexport const ChartValueSchema = z.object({\n id: z.string().optional(),\n name: z.string().optional(),\n type: z.string().optional(),\n value: z.number().optional(),\n});\n\nexport const ChartItemSchema = z.object({\n timestamp: z.number().int(),\n values: z.array(ChartValueSchema).optional().default([]),\n});\n\nexport const ChartsResponseSchema = z.object({\n data: z.array(ChartItemSchema),\n});\n\n// Request Schemas\nexport const BucketingStrategyEnum = z.enum(['daily', 'monthly']);\nexport const InstanceTypeEnum = z.enum(['all', 'deployments', 'projects']);\nexport const ServerlessGroupByEnum = z.enum(['product', 'product_family']);\n\nexport const GetChartsRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n bucketing_strategy: BucketingStrategyEnum.optional(),\n});\n\nexport const GetChartsByInstanceRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n bucketing_strategy: BucketingStrategyEnum.optional(),\n instance_type: InstanceTypeEnum.optional(),\n});\n\nexport const GetCostsByInstancesRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n include_names: z.boolean().optional(),\n});\n\nexport const GetItemizedCostsByInstanceRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n});\n\nexport const GetCostsByItemsRequestSchema = z.object({\n from: z.string(),\n to: z.string(),\n serverless_group_by: ServerlessGroupByEnum.optional(),\n});\n\n// Error Schemas\nexport const UnauthorizedErrorSchema = z.string();\n\n// Types derived from the schemas\nexport type DisplayQuantityType = z.infer<typeof DisplayQuantityTypeEnum>;\nexport type DisplayQuantity = z.infer<typeof DisplayQuantitySchema>;\nexport type Quantity = z.infer<typeof QuantitySchema>;\nexport type Rate = z.infer<typeof RateSchema>;\nexport type ProductLineItemTier = z.infer<typeof ProductLineItemTierSchema>;\nexport type ProductLineItemQuantity = z.infer<typeof ProductLineItemQuantitySchema>;\nexport type ProductLineItem = z.infer<typeof ProductLineItemSchema>;\nexport type Product = z.infer<typeof ProductSchema>;\nexport type Instance = z.infer<typeof InstanceSchema>;\nexport type Items = z.infer<typeof ItemsResponseSchema>;\nexport type Instances = z.infer<typeof InstancesResponseSchema>;\nexport type ChartValue = z.infer<typeof ChartValueSchema>;\nexport type ChartItem = z.infer<typeof ChartItemSchema>;\nexport type ChartsResponse = z.infer<typeof ChartsResponseSchema>;\nexport type BucketingStrategy = z.infer<typeof BucketingStrategyEnum>;\nexport type InstanceType = z.infer<typeof InstanceTypeEnum>;\nexport type ServerlessGroupBy = z.infer<typeof ServerlessGroupByEnum>;\nexport type GetChartsRequest = z.infer<typeof GetChartsRequestSchema>;\nexport type GetChartsByInstanceRequest = z.infer<typeof GetChartsByInstanceRequestSchema>;\nexport type GetCostsByInstancesRequest = z.infer<typeof GetCostsByInstancesRequestSchema>;\nexport type GetItemizedCostsByInstanceRequest = z.infer<typeof GetItemizedCostsByInstanceRequestSchema>;\nexport type GetCostsByItemsRequest = z.infer<typeof GetCostsByItemsRequestSchema>;\n"],"names":["z"],"mappings":"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"}
|
|
@@ -3,21 +3,30 @@
|
|
|
3
3
|
var zod = require('zod');
|
|
4
4
|
|
|
5
5
|
const GCPBillingRowSchema = zod.z.object({
|
|
6
|
-
service: zod.z.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
service: zod.z.union([
|
|
7
|
+
zod.z.object({
|
|
8
|
+
id: zod.z.string(),
|
|
9
|
+
description: zod.z.string()
|
|
10
|
+
}),
|
|
11
|
+
zod.z.string()
|
|
12
|
+
]).optional(),
|
|
13
|
+
sku: zod.z.union([
|
|
14
|
+
zod.z.object({
|
|
15
|
+
id: zod.z.string(),
|
|
16
|
+
description: zod.z.string()
|
|
17
|
+
}),
|
|
18
|
+
zod.z.string()
|
|
19
|
+
]).optional(),
|
|
14
20
|
usage_start_time: zod.z.string().optional(),
|
|
15
21
|
usage_end_time: zod.z.string().optional(),
|
|
16
|
-
project: zod.z.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
project: zod.z.union([
|
|
23
|
+
zod.z.object({
|
|
24
|
+
id: zod.z.string(),
|
|
25
|
+
name: zod.z.string().optional(),
|
|
26
|
+
labels: zod.z.record(zod.z.string()).optional()
|
|
27
|
+
}),
|
|
28
|
+
zod.z.string()
|
|
29
|
+
]).optional(),
|
|
21
30
|
labels: zod.z.record(zod.z.string()).optional(),
|
|
22
31
|
system_labels: zod.z.record(zod.z.string()).optional(),
|
|
23
32
|
location: zod.z.object({
|
|
@@ -27,8 +36,8 @@ const GCPBillingRowSchema = zod.z.object({
|
|
|
27
36
|
zone: zod.z.string().optional()
|
|
28
37
|
}).optional(),
|
|
29
38
|
export_time: zod.z.string().optional(),
|
|
30
|
-
cost: zod.z.number(),
|
|
31
|
-
currency: zod.z.string(),
|
|
39
|
+
cost: zod.z.number().optional(),
|
|
40
|
+
currency: zod.z.string().optional(),
|
|
32
41
|
currency_conversion_rate: zod.z.number().optional(),
|
|
33
42
|
usage: zod.z.object({
|
|
34
43
|
amount: zod.z.number().optional(),
|
|
@@ -47,7 +56,7 @@ const GCPBillingRowSchema = zod.z.object({
|
|
|
47
56
|
).optional(),
|
|
48
57
|
invoice: zod.z.object({
|
|
49
58
|
month: zod.z.string()
|
|
50
|
-
}),
|
|
59
|
+
}).optional(),
|
|
51
60
|
cost_type: zod.z.string().optional(),
|
|
52
61
|
adjustment_info: zod.z.object({
|
|
53
62
|
id: zod.z.string().optional(),
|
|
@@ -56,8 +65,29 @@ const GCPBillingRowSchema = zod.z.object({
|
|
|
56
65
|
type: zod.z.string().optional()
|
|
57
66
|
}).optional()
|
|
58
67
|
});
|
|
59
|
-
const
|
|
68
|
+
const GCPCustomQueryRowSchema = zod.z.object({
|
|
69
|
+
project: zod.z.string(),
|
|
70
|
+
service: zod.z.string(),
|
|
71
|
+
period: zod.z.string(),
|
|
72
|
+
total_cost: zod.z.union([
|
|
73
|
+
zod.z.number(),
|
|
74
|
+
zod.z.object({}).transform((obj) => {
|
|
75
|
+
if (typeof obj === "object" && obj !== null) {
|
|
76
|
+
if (typeof obj.value === "number") return obj.value;
|
|
77
|
+
if (typeof obj.value === "string") return parseFloat(obj.value);
|
|
78
|
+
if (typeof obj === "string") return parseFloat(obj);
|
|
79
|
+
const stringValue = String(obj);
|
|
80
|
+
const numValue = parseFloat(stringValue);
|
|
81
|
+
return isNaN(numValue) ? 0 : numValue;
|
|
82
|
+
}
|
|
83
|
+
return 0;
|
|
84
|
+
})
|
|
85
|
+
])
|
|
86
|
+
});
|
|
87
|
+
zod.z.array(GCPBillingRowSchema);
|
|
88
|
+
const GCPCustomQueryResultSchema = zod.z.array(GCPCustomQueryRowSchema);
|
|
60
89
|
|
|
61
|
-
exports.GCPBillingQueryResultSchema = GCPBillingQueryResultSchema;
|
|
62
90
|
exports.GCPBillingRowSchema = GCPBillingRowSchema;
|
|
91
|
+
exports.GCPCustomQueryResultSchema = GCPCustomQueryResultSchema;
|
|
92
|
+
exports.GCPCustomQueryRowSchema = GCPCustomQueryRowSchema;
|
|
63
93
|
//# sourceMappingURL=GCPBilling.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GCPBilling.cjs.js","sources":["../../src/schemas/GCPBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const GCPBillingRowSchema = z.object({\n service: z.object({\n
|
|
1
|
+
{"version":3,"file":"GCPBilling.cjs.js","sources":["../../src/schemas/GCPBilling.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const GCPBillingRowSchema = z.object({\n service: z\n .union([\n z.object({\n id: z.string(),\n description: z.string(),\n }),\n z.string(),\n ])\n .optional(),\n sku: z\n .union([\n z.object({\n id: z.string(),\n description: z.string(),\n }),\n z.string(),\n ])\n .optional(),\n usage_start_time: z.string().optional(),\n usage_end_time: z.string().optional(),\n project: z\n .union([\n z.object({\n id: z.string(),\n name: z.string().optional(),\n labels: z.record(z.string()).optional(),\n }),\n z.string(),\n ])\n .optional(),\n labels: z.record(z.string()).optional(),\n system_labels: z.record(z.string()).optional(),\n location: z\n .object({\n location: z.string().optional(),\n country: z.string().optional(),\n region: z.string().optional(),\n zone: z.string().optional(),\n })\n .optional(),\n export_time: z.string().optional(),\n cost: z.number().optional(),\n currency: z.string().optional(),\n currency_conversion_rate: z.number().optional(),\n usage: z\n .object({\n amount: z.number().optional(),\n unit: z.string().optional(),\n amount_in_pricing_units: z.number().optional(),\n pricing_unit: z.string().optional(),\n })\n .optional(),\n credits: z\n .array(\n z.object({\n name: z.string(),\n amount: z.number(),\n full_name: z.string().optional(),\n id: z.string().optional(),\n type: z.string().optional(),\n }),\n )\n .optional(),\n invoice: z\n .object({\n month: z.string(),\n })\n .optional(),\n cost_type: z.string().optional(),\n adjustment_info: z\n .object({\n id: z.string().optional(),\n description: z.string().optional(),\n mode: z.string().optional(),\n type: z.string().optional(),\n })\n .optional(),\n});\n\n// Schema for custom GCP query results (simplified structure)\nexport const GCPCustomQueryRowSchema = z.object({\n project: z.string(),\n service: z.string(),\n period: z.string(),\n total_cost: z.union([\n z.number(),\n z.object({}).transform((obj: any) => {\n // Handle BigQuery numeric objects by converting to number\n if (typeof obj === 'object' && obj !== null) {\n // BigQuery sometimes returns numbers as objects with a value property or string representation\n if (typeof obj.value === 'number') return obj.value;\n if (typeof obj.value === 'string') return parseFloat(obj.value);\n if (typeof obj === 'string') return parseFloat(obj);\n // Try to convert the object to string then number as fallback\n const stringValue = String(obj);\n const numValue = parseFloat(stringValue);\n return isNaN(numValue) ? 0 : numValue;\n }\n return 0;\n }),\n ]),\n});\n\nexport const GCPBillingQueryResultSchema = z.array(GCPBillingRowSchema);\nexport const GCPCustomQueryResultSchema = z.array(GCPCustomQueryRowSchema);\n\nexport type GCPBillingRow = z.infer<typeof GCPBillingRowSchema>;\nexport type GCPCustomQueryRow = z.infer<typeof GCPCustomQueryRowSchema>;\nexport type GCPBillingQueryResult = z.infer<typeof GCPBillingQueryResultSchema>;\nexport type GCPCustomQueryResult = z.infer<typeof GCPCustomQueryResultSchema>;\n"],"names":["z"],"mappings":"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"}
|
|
@@ -197,6 +197,11 @@ function usageDateToPeriodString(usageDate) {
|
|
|
197
197
|
}
|
|
198
198
|
throw new Error("Invalid usageDate format");
|
|
199
199
|
}
|
|
200
|
+
function logTransformationSummary(logger, provider, summary) {
|
|
201
|
+
logger.info(
|
|
202
|
+
`${provider} transformation summary: processed=${summary.processed}, uniqueReports=${summary.uniqueReports}, zeroAmount=${summary.zeroAmount}, missingFields=${summary.missingFields}, invalidDate=${summary.invalidDate}, timeRange=${summary.timeRange}, totalRecords=${summary.totalRecords}`
|
|
203
|
+
);
|
|
204
|
+
}
|
|
200
205
|
|
|
201
206
|
exports.getBillingPeriod = getBillingPeriod;
|
|
202
207
|
exports.getBillingPeriodFormat = getBillingPeriodFormat;
|
|
@@ -206,6 +211,7 @@ exports.getMetricsFromCache = getMetricsFromCache;
|
|
|
206
211
|
exports.getReportsFromCache = getReportsFromCache;
|
|
207
212
|
exports.getTagKeysFromCache = getTagKeysFromCache;
|
|
208
213
|
exports.getTagValuesFromCache = getTagValuesFromCache;
|
|
214
|
+
exports.logTransformationSummary = logTransformationSummary;
|
|
209
215
|
exports.parseCost = parseCost;
|
|
210
216
|
exports.parseFilters = parseFilters;
|
|
211
217
|
exports.parseTags = parseTags;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.cjs.js","sources":["../../src/service/functions.ts"],"sourcesContent":["import { CacheService } from '@backstage/backend-plugin-api';\nimport { CACHE_CATEGORY, CLOUD_PROVIDER, DEFAULT_COSTS_CACHE_TTL, DEFAULT_TAGS_CACHE_TTL, GRANULARITY } from './consts';\nimport { CostQuery, Metric, MetricQuery, Report, Tag, TagsQuery } from './types';\nimport moment from 'moment';\n\n// In URL, tags are defined in this format:\n// tags=(provider1:key1=value1 OR provider2:key2=value2)\nexport function parseTags(tags: string): Tag[] {\n if (!tags.startsWith('(') || !tags.endsWith(')')) {\n return [];\n }\n\n const tagString = tags.slice(1, -1);\n if (!tagString) {\n return [];\n }\n\n const keyValuePairs = tagString.split(' OR ');\n return keyValuePairs.map(pair => {\n const [providerAndKey, value] = pair.split('=');\n const firstColonIndex = providerAndKey.indexOf(':');\n const provider = providerAndKey.slice(0, firstColonIndex);\n const key = providerAndKey.slice(firstColonIndex + 1);\n return { key: key, value: value, provider: provider };\n });\n}\n\n// convert Tag array to (provider1:key1=value1 OR provider2:key2=value2) format\nexport function tagsToString(tags: Tag[]): string {\n if (!tags || tags.length === 0) {\n return '()';\n }\n\n const keyValuePairs = tags.map(tag => `${tag.provider}:${tag.key}=${tag.value}`);\n return `(${keyValuePairs.join(' OR ')})`;\n}\n\n// check if targetTag exists in tags\nexport function tagExists(tags: Tag[], targetTag: Tag): boolean {\n return tags.some(\n tag => tag.provider === targetTag.provider && tag.key === targetTag.key && tag.value === targetTag.value,\n );\n}\n\nexport function getDefaultCacheTTL(cacheCategory: CACHE_CATEGORY, provider: CLOUD_PROVIDER): number {\n if (cacheCategory === CACHE_CATEGORY.TAGS) {\n return DEFAULT_TAGS_CACHE_TTL[provider];\n } else if (cacheCategory === CACHE_CATEGORY.COSTS) {\n return DEFAULT_COSTS_CACHE_TTL[provider];\n }\n\n return 0;\n}\n\nexport async function getTagKeysFromCache(\n cache: CacheService,\n provider: CLOUD_PROVIDER,\n configKey: string,\n query: TagsQuery,\n): Promise<Tag[] | undefined> {\n const cacheKey = [CACHE_CATEGORY.TAGS, 'tag-keys', provider, configKey, query.startTime, query.endTime].join('_');\n const data = (await cache.get(cacheKey)) as Tag[] | undefined;\n return data;\n}\n\nexport async function getTagValuesFromCache(\n cache: CacheService,\n provider: CLOUD_PROVIDER,\n configKey: string,\n tagKey: string,\n query: TagsQuery,\n): Promise<Tag[] | undefined> {\n const cacheKey = [\n CACHE_CATEGORY.TAGS,\n 'tag-values',\n provider,\n configKey,\n tagKey,\n query.startTime,\n query.endTime,\n ].join('_');\n const data = (await cache.get(cacheKey)) as Tag[] | undefined;\n return data;\n}\n\nexport async function getReportsFromCache(\n cache: CacheService,\n provider: string,\n configKey: string,\n query: CostQuery,\n): Promise<Report[] | undefined> {\n const cacheKey = [\n provider,\n configKey,\n query.filters,\n query.tags,\n query.groups,\n query.granularity,\n query.startTime,\n query.endTime,\n ].join('_');\n const cachedCosts = (await cache.get(cacheKey)) as Report[] | undefined;\n return cachedCosts;\n}\n\nexport async function getMetricsFromCache(\n cache: CacheService,\n provider: string,\n configKey: string,\n query: MetricQuery,\n): Promise<Metric[] | undefined> {\n const cacheKey = [\n provider,\n configKey,\n query.name,\n query.query,\n query.granularity,\n query.startTime,\n query.endTime,\n ].join('_');\n const crypto = require('crypto');\n const cachedMetrics = (await cache.get(crypto.createHash('md5').update(cacheKey).digest('hex'))) as\n | Metric[]\n | undefined;\n return cachedMetrics;\n}\n\nexport async function setTagKeysToCache(\n cache: CacheService,\n tags: Tag[],\n provider: CLOUD_PROVIDER,\n configKey: string,\n query: TagsQuery,\n ttl?: number,\n) {\n const cacheKey = [CACHE_CATEGORY.TAGS, 'tag-keys', provider, configKey, query.startTime, query.endTime].join('_');\n await cache.set(cacheKey, tags, {\n ttl: ttl ?? getDefaultCacheTTL(CACHE_CATEGORY.TAGS, provider),\n });\n}\n\nexport async function setTagValuesToCache(\n cache: CacheService,\n tags: Tag[],\n provider: CLOUD_PROVIDER,\n configKey: string,\n tagKey: string,\n query: TagsQuery,\n ttl?: number,\n) {\n const cacheKey = [\n CACHE_CATEGORY.TAGS,\n 'tag-values',\n provider,\n configKey,\n tagKey,\n query.startTime,\n query.endTime,\n ].join('_');\n await cache.set(cacheKey, tags, {\n ttl: ttl ?? getDefaultCacheTTL(CACHE_CATEGORY.TAGS, provider),\n });\n}\n\nexport async function setReportsToCache(\n cache: CacheService,\n reports: Report[],\n provider: string,\n configKey: string,\n query: CostQuery,\n ttl?: number,\n) {\n const cacheKey = [\n provider,\n configKey,\n query.filters,\n query.tags,\n query.groups,\n query.granularity,\n query.startTime,\n query.endTime,\n ].join('_');\n await cache.set(cacheKey, reports, {\n ttl: ttl ?? 60 * 60 * 2 * 1000,\n }); // cache for 2 hours by default\n}\n\nexport async function setMetricsToCache(\n cache: CacheService,\n metrics: Metric[],\n provider: string,\n configKey: string,\n query: MetricQuery,\n ttl?: number,\n) {\n const cacheKey = [\n provider,\n configKey,\n query.name,\n query.query,\n query.granularity,\n query.startTime,\n query.endTime,\n ].join('_');\n const crypto = require('crypto');\n await cache.set(crypto.createHash('md5').update(cacheKey).digest('hex'), metrics, {\n ttl: ttl ?? 60 * 60 * 2 * 1000,\n }); // cache for 2 hours by default\n}\n\nexport function parseFilters(filters: string): Record<string, string[]> {\n const result: Record<string, string[]> = {};\n\n if (!filters.startsWith('(') || !filters.endsWith(')')) {\n return result;\n }\n\n const filterString = filters.slice(1, -1);\n if (!filterString) {\n return result;\n }\n\n const keyValuePairs = filterString.split(',').map(pair => pair.trim());\n\n keyValuePairs.forEach(pair => {\n const [key, value] = pair.split(':').map(s => s.trim());\n if (key && value) {\n if (value.startsWith('(') && value.endsWith(')')) {\n // multiple values\n const values = value\n .slice(1, -1)\n .split('|')\n .map(v => v.trim());\n result[key] = values;\n } else {\n // single value\n result[key] = [value];\n }\n }\n });\n\n return result;\n}\n\n/**\n * Returns the date format string for a billing period based on granularity.\n */\nexport function getBillingPeriodFormat(granularity: GRANULARITY): string {\n if (granularity === GRANULARITY.MONTHLY) {\n return 'YYYY-MM';\n } else if (granularity === GRANULARITY.DAILY) {\n return 'YYYY-MM-DD';\n }\n throw new Error('Invalid granularity');\n}\n\n/**\n * Converts a source date string to a billing period string based on granularity and source format.\n */\nexport function getBillingPeriod(granularity: GRANULARITY, sourceDate: string, sourceFormat: string): string {\n return moment(sourceDate, sourceFormat, true).format(getBillingPeriodFormat(granularity));\n}\n\n/**\n * Parses a cost value and rounds to 2 decimal places.\n * Returns 0 if the value is not a valid number.\n */\nexport function parseCost(value: any): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? Math.round(parsed * 100) / 100 : 0;\n}\n\nexport function getDailyPeriodStringsForOneMonth(yyyymm: number): string[] {\n const dateOjb = moment(yyyymm.toString(), 'YYYYMM');\n const startOfMonth = moment(dateOjb).startOf('month');\n const endOfMonth = moment(dateOjb).endOf('month');\n const periods: string[] = [];\n\n for (let date = startOfMonth; date.isBefore(endOfMonth) || date.isSame(endOfMonth); date.add(1, 'day')) {\n periods.push(date.format('YYYY-MM-DD'));\n }\n\n return periods;\n}\n\nexport function usageDateToPeriodString(usageDate: number): string {\n // usageDate format: either yyyymm (monthly) or yyyymmdd (daily)\n // output format: yyyy-mm (monthly) or yyyy-mm-dd (daily)\n const usageDateStr = usageDate.toString();\n if (usageDateStr.length === 6) {\n // Monthly format\n return `${usageDateStr.slice(0, 4)}-${usageDateStr.slice(4, 6)}`;\n } else if (usageDateStr.length === 8) {\n // Daily format\n return `${usageDateStr.slice(0, 4)}-${usageDateStr.slice(4, 6)}-${usageDateStr.slice(6, 8)}`;\n }\n throw new Error('Invalid usageDate format');\n}\n"],"names":["CACHE_CATEGORY","DEFAULT_TAGS_CACHE_TTL","DEFAULT_COSTS_CACHE_TTL","GRANULARITY","moment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"functions.cjs.js","sources":["../../src/service/functions.ts"],"sourcesContent":["import { CacheService, LoggerService } from '@backstage/backend-plugin-api';\nimport { CACHE_CATEGORY, CLOUD_PROVIDER, DEFAULT_COSTS_CACHE_TTL, DEFAULT_TAGS_CACHE_TTL, GRANULARITY } from './consts';\nimport { CostQuery, Metric, MetricQuery, Report, Tag, TagsQuery, TransformationSummary } from './types';\nimport moment from 'moment';\n\n// In URL, tags are defined in this format:\n// tags=(provider1:key1=value1 OR provider2:key2=value2)\nexport function parseTags(tags: string): Tag[] {\n if (!tags.startsWith('(') || !tags.endsWith(')')) {\n return [];\n }\n\n const tagString = tags.slice(1, -1);\n if (!tagString) {\n return [];\n }\n\n const keyValuePairs = tagString.split(' OR ');\n return keyValuePairs.map(pair => {\n const [providerAndKey, value] = pair.split('=');\n const firstColonIndex = providerAndKey.indexOf(':');\n const provider = providerAndKey.slice(0, firstColonIndex);\n const key = providerAndKey.slice(firstColonIndex + 1);\n return { key: key, value: value, provider: provider };\n });\n}\n\n// convert Tag array to (provider1:key1=value1 OR provider2:key2=value2) format\nexport function tagsToString(tags: Tag[]): string {\n if (!tags || tags.length === 0) {\n return '()';\n }\n\n const keyValuePairs = tags.map(tag => `${tag.provider}:${tag.key}=${tag.value}`);\n return `(${keyValuePairs.join(' OR ')})`;\n}\n\n// check if targetTag exists in tags\nexport function tagExists(tags: Tag[], targetTag: Tag): boolean {\n return tags.some(\n tag => tag.provider === targetTag.provider && tag.key === targetTag.key && tag.value === targetTag.value,\n );\n}\n\nexport function getDefaultCacheTTL(cacheCategory: CACHE_CATEGORY, provider: CLOUD_PROVIDER): number {\n if (cacheCategory === CACHE_CATEGORY.TAGS) {\n return DEFAULT_TAGS_CACHE_TTL[provider];\n } else if (cacheCategory === CACHE_CATEGORY.COSTS) {\n return DEFAULT_COSTS_CACHE_TTL[provider];\n }\n\n return 0;\n}\n\nexport async function getTagKeysFromCache(\n cache: CacheService,\n provider: CLOUD_PROVIDER,\n configKey: string,\n query: TagsQuery,\n): Promise<Tag[] | undefined> {\n const cacheKey = [CACHE_CATEGORY.TAGS, 'tag-keys', provider, configKey, query.startTime, query.endTime].join('_');\n const data = (await cache.get(cacheKey)) as Tag[] | undefined;\n return data;\n}\n\nexport async function getTagValuesFromCache(\n cache: CacheService,\n provider: CLOUD_PROVIDER,\n configKey: string,\n tagKey: string,\n query: TagsQuery,\n): Promise<Tag[] | undefined> {\n const cacheKey = [\n CACHE_CATEGORY.TAGS,\n 'tag-values',\n provider,\n configKey,\n tagKey,\n query.startTime,\n query.endTime,\n ].join('_');\n const data = (await cache.get(cacheKey)) as Tag[] | undefined;\n return data;\n}\n\nexport async function getReportsFromCache(\n cache: CacheService,\n provider: string,\n configKey: string,\n query: CostQuery,\n): Promise<Report[] | undefined> {\n const cacheKey = [\n provider,\n configKey,\n query.filters,\n query.tags,\n query.groups,\n query.granularity,\n query.startTime,\n query.endTime,\n ].join('_');\n const cachedCosts = (await cache.get(cacheKey)) as Report[] | undefined;\n return cachedCosts;\n}\n\nexport async function getMetricsFromCache(\n cache: CacheService,\n provider: string,\n configKey: string,\n query: MetricQuery,\n): Promise<Metric[] | undefined> {\n const cacheKey = [\n provider,\n configKey,\n query.name,\n query.query,\n query.granularity,\n query.startTime,\n query.endTime,\n ].join('_');\n const crypto = require('crypto');\n const cachedMetrics = (await cache.get(crypto.createHash('md5').update(cacheKey).digest('hex'))) as\n | Metric[]\n | undefined;\n return cachedMetrics;\n}\n\nexport async function setTagKeysToCache(\n cache: CacheService,\n tags: Tag[],\n provider: CLOUD_PROVIDER,\n configKey: string,\n query: TagsQuery,\n ttl?: number,\n) {\n const cacheKey = [CACHE_CATEGORY.TAGS, 'tag-keys', provider, configKey, query.startTime, query.endTime].join('_');\n await cache.set(cacheKey, tags, {\n ttl: ttl ?? getDefaultCacheTTL(CACHE_CATEGORY.TAGS, provider),\n });\n}\n\nexport async function setTagValuesToCache(\n cache: CacheService,\n tags: Tag[],\n provider: CLOUD_PROVIDER,\n configKey: string,\n tagKey: string,\n query: TagsQuery,\n ttl?: number,\n) {\n const cacheKey = [\n CACHE_CATEGORY.TAGS,\n 'tag-values',\n provider,\n configKey,\n tagKey,\n query.startTime,\n query.endTime,\n ].join('_');\n await cache.set(cacheKey, tags, {\n ttl: ttl ?? getDefaultCacheTTL(CACHE_CATEGORY.TAGS, provider),\n });\n}\n\nexport async function setReportsToCache(\n cache: CacheService,\n reports: Report[],\n provider: string,\n configKey: string,\n query: CostQuery,\n ttl?: number,\n) {\n const cacheKey = [\n provider,\n configKey,\n query.filters,\n query.tags,\n query.groups,\n query.granularity,\n query.startTime,\n query.endTime,\n ].join('_');\n await cache.set(cacheKey, reports, {\n ttl: ttl ?? 60 * 60 * 2 * 1000,\n }); // cache for 2 hours by default\n}\n\nexport async function setMetricsToCache(\n cache: CacheService,\n metrics: Metric[],\n provider: string,\n configKey: string,\n query: MetricQuery,\n ttl?: number,\n) {\n const cacheKey = [\n provider,\n configKey,\n query.name,\n query.query,\n query.granularity,\n query.startTime,\n query.endTime,\n ].join('_');\n const crypto = require('crypto');\n await cache.set(crypto.createHash('md5').update(cacheKey).digest('hex'), metrics, {\n ttl: ttl ?? 60 * 60 * 2 * 1000,\n }); // cache for 2 hours by default\n}\n\nexport function parseFilters(filters: string): Record<string, string[]> {\n const result: Record<string, string[]> = {};\n\n if (!filters.startsWith('(') || !filters.endsWith(')')) {\n return result;\n }\n\n const filterString = filters.slice(1, -1);\n if (!filterString) {\n return result;\n }\n\n const keyValuePairs = filterString.split(',').map(pair => pair.trim());\n\n keyValuePairs.forEach(pair => {\n const [key, value] = pair.split(':').map(s => s.trim());\n if (key && value) {\n if (value.startsWith('(') && value.endsWith(')')) {\n // multiple values\n const values = value\n .slice(1, -1)\n .split('|')\n .map(v => v.trim());\n result[key] = values;\n } else {\n // single value\n result[key] = [value];\n }\n }\n });\n\n return result;\n}\n\n/**\n * Returns the date format string for a billing period based on granularity.\n */\nexport function getBillingPeriodFormat(granularity: GRANULARITY): string {\n if (granularity === GRANULARITY.MONTHLY) {\n return 'YYYY-MM';\n } else if (granularity === GRANULARITY.DAILY) {\n return 'YYYY-MM-DD';\n }\n throw new Error('Invalid granularity');\n}\n\n/**\n * Converts a source date string to a billing period string based on granularity and source format.\n */\nexport function getBillingPeriod(granularity: GRANULARITY, sourceDate: string, sourceFormat: string): string {\n return moment(sourceDate, sourceFormat, true).format(getBillingPeriodFormat(granularity));\n}\n\n/**\n * Parses a cost value and rounds to 2 decimal places.\n * Returns 0 if the value is not a valid number.\n */\nexport function parseCost(value: any): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? Math.round(parsed * 100) / 100 : 0;\n}\n\nexport function getDailyPeriodStringsForOneMonth(yyyymm: number): string[] {\n const dateOjb = moment(yyyymm.toString(), 'YYYYMM');\n const startOfMonth = moment(dateOjb).startOf('month');\n const endOfMonth = moment(dateOjb).endOf('month');\n const periods: string[] = [];\n\n for (let date = startOfMonth; date.isBefore(endOfMonth) || date.isSame(endOfMonth); date.add(1, 'day')) {\n periods.push(date.format('YYYY-MM-DD'));\n }\n\n return periods;\n}\n\nexport function usageDateToPeriodString(usageDate: number): string {\n // usageDate format: either yyyymm (monthly) or yyyymmdd (daily)\n // output format: yyyy-mm (monthly) or yyyy-mm-dd (daily)\n const usageDateStr = usageDate.toString();\n if (usageDateStr.length === 6) {\n // Monthly format\n return `${usageDateStr.slice(0, 4)}-${usageDateStr.slice(4, 6)}`;\n } else if (usageDateStr.length === 8) {\n // Daily format\n return `${usageDateStr.slice(0, 4)}-${usageDateStr.slice(4, 6)}-${usageDateStr.slice(6, 8)}`;\n }\n throw new Error('Invalid usageDate format');\n}\n\n/**\n * Logs a standardized transformation summary for cost client data processing.\n * This provides consistent logging across all cost providers.\n */\nexport function logTransformationSummary(\n logger: LoggerService,\n provider: string,\n summary: TransformationSummary,\n): void {\n logger.info(\n `${provider} transformation summary: processed=${summary.processed}, uniqueReports=${summary.uniqueReports}, zeroAmount=${summary.zeroAmount}, missingFields=${summary.missingFields}, invalidDate=${summary.invalidDate}, timeRange=${summary.timeRange}, totalRecords=${summary.totalRecords}`,\n );\n}\n"],"names":["CACHE_CATEGORY","DEFAULT_TAGS_CACHE_TTL","DEFAULT_COSTS_CACHE_TTL","GRANULARITY","moment"],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ async function fetchAndSaveCosts(options) {
|
|
|
22
22
|
try {
|
|
23
23
|
await client.saveCostReportsToDatabase(defaultWallet, granularity);
|
|
24
24
|
} catch (e) {
|
|
25
|
-
logger.error(e);
|
|
25
|
+
logger.error(`Error in ${provider} cost client:`, e);
|
|
26
26
|
}
|
|
27
27
|
})();
|
|
28
28
|
promises.push(saveCostReportsToDatabasePromise);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchAndSaveCosts.cjs.js","sources":["../../src/tasks/fetchAndSaveCosts.ts"],"sourcesContent":["import { getWallet } from '../controllers/MetricSettingController';\nimport { InfraWalletClient } from '../cost-clients/InfraWalletClient';\nimport { CategoryMappingService } from '../service/CategoryMappingService';\nimport { COST_CLIENT_MAPPINGS, GRANULARITY } from '../service/consts';\nimport { RouterOptions } from '../service/types';\n\nexport async function fetchAndSaveCosts(options: RouterOptions) {\n const { logger, config, cache, database } = options;\n\n const categoryMappingService = CategoryMappingService.getInstance();\n await categoryMappingService.refreshCategoryMappings();\n\n // for now, this task only fetches costs for the default wallet\n const defaultWallet = await getWallet(database, 'default');\n const granularities = [GRANULARITY.DAILY, GRANULARITY.MONTHLY];\n\n if (defaultWallet !== undefined) {\n logger.debug('fetchAndSaveCosts method executed for the default wallet');\n for (const granularity of granularities) {\n const promises: Promise<void>[] = [];\n const conf = config.getConfig('backend.infraWallet.integrations');\n for (const provider of conf.keys()) {\n // skip mock provider as that client has some special logic to manipulate period strings\n if (provider in COST_CLIENT_MAPPINGS && provider !== 'mock') {\n const client: InfraWalletClient = COST_CLIENT_MAPPINGS[provider].create(config, database, cache, logger);\n\n const saveCostReportsToDatabasePromise = (async () => {\n try {\n await client.saveCostReportsToDatabase(defaultWallet, granularity);\n } catch (e) {\n logger.error(e);\n }\n })();\n promises.push(saveCostReportsToDatabasePromise);\n }\n }\n await Promise.all(promises);\n }\n }\n}\n"],"names":["CategoryMappingService","getWallet","GRANULARITY","COST_CLIENT_MAPPINGS"],"mappings":";;;;;;AAMA,eAAsB,kBAAkB,OAAA,EAAwB;AAC9D,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,UAAS,GAAI,OAAA;AAE5C,EAAA,MAAM,sBAAA,GAAyBA,8CAAuB,WAAA,EAAY;AAClE,EAAA,MAAM,uBAAuB,uBAAA,EAAwB;AAGrD,EAAA,MAAM,aAAA,GAAgB,MAAMC,iCAAA,CAAU,QAAA,EAAU,SAAS,CAAA;AACzD,EAAA,MAAM,aAAA,GAAgB,CAACC,kBAAA,CAAY,KAAA,EAAOA,mBAAY,OAAO,CAAA;AAE7D,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,IAAA,MAAA,CAAO,MAAM,0DAA0D,CAAA;AACvE,IAAA,KAAA,MAAW,eAAe,aAAA,EAAe;AACvC,MAAA,MAAM,WAA4B,EAAC;AACnC,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,SAAA,CAAU,kCAAkC,CAAA;AAChE,MAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,IAAA,EAAK,EAAG;AAElC,QAAA,IAAI,QAAA,IAAYC,2BAAA,IAAwB,QAAA,KAAa,MAAA,EAAQ;AAC3D,UAAA,MAAM,MAAA,GAA4BA,4BAAqB,QAAQ,CAAA,CAAE,OAAO,MAAA,EAAQ,QAAA,EAAU,OAAO,MAAM,CAAA;AAEvG,UAAA,MAAM,oCAAoC,YAAY;AACpD,YAAA,IAAI;AACF,cAAA,MAAM,MAAA,CAAO,yBAAA,CAA0B,aAAA,EAAe,WAAW,CAAA;AAAA,qBAC1D,CAAA,EAAG;AACV,cAAA,MAAA,CAAO,
|
|
1
|
+
{"version":3,"file":"fetchAndSaveCosts.cjs.js","sources":["../../src/tasks/fetchAndSaveCosts.ts"],"sourcesContent":["import { getWallet } from '../controllers/MetricSettingController';\nimport { InfraWalletClient } from '../cost-clients/InfraWalletClient';\nimport { CategoryMappingService } from '../service/CategoryMappingService';\nimport { COST_CLIENT_MAPPINGS, GRANULARITY } from '../service/consts';\nimport { RouterOptions } from '../service/types';\n\nexport async function fetchAndSaveCosts(options: RouterOptions) {\n const { logger, config, cache, database } = options;\n\n const categoryMappingService = CategoryMappingService.getInstance();\n await categoryMappingService.refreshCategoryMappings();\n\n // for now, this task only fetches costs for the default wallet\n const defaultWallet = await getWallet(database, 'default');\n const granularities = [GRANULARITY.DAILY, GRANULARITY.MONTHLY];\n\n if (defaultWallet !== undefined) {\n logger.debug('fetchAndSaveCosts method executed for the default wallet');\n for (const granularity of granularities) {\n const promises: Promise<void>[] = [];\n const conf = config.getConfig('backend.infraWallet.integrations');\n for (const provider of conf.keys()) {\n // skip mock provider as that client has some special logic to manipulate period strings\n if (provider in COST_CLIENT_MAPPINGS && provider !== 'mock') {\n const client: InfraWalletClient = COST_CLIENT_MAPPINGS[provider].create(config, database, cache, logger);\n\n const saveCostReportsToDatabasePromise = (async () => {\n try {\n await client.saveCostReportsToDatabase(defaultWallet, granularity);\n } catch (e) {\n logger.error(`Error in ${provider} cost client:`, e);\n }\n })();\n promises.push(saveCostReportsToDatabasePromise);\n }\n }\n await Promise.all(promises);\n }\n }\n}\n"],"names":["CategoryMappingService","getWallet","GRANULARITY","COST_CLIENT_MAPPINGS"],"mappings":";;;;;;AAMA,eAAsB,kBAAkB,OAAA,EAAwB;AAC9D,EAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,UAAS,GAAI,OAAA;AAE5C,EAAA,MAAM,sBAAA,GAAyBA,8CAAuB,WAAA,EAAY;AAClE,EAAA,MAAM,uBAAuB,uBAAA,EAAwB;AAGrD,EAAA,MAAM,aAAA,GAAgB,MAAMC,iCAAA,CAAU,QAAA,EAAU,SAAS,CAAA;AACzD,EAAA,MAAM,aAAA,GAAgB,CAACC,kBAAA,CAAY,KAAA,EAAOA,mBAAY,OAAO,CAAA;AAE7D,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,IAAA,MAAA,CAAO,MAAM,0DAA0D,CAAA;AACvE,IAAA,KAAA,MAAW,eAAe,aAAA,EAAe;AACvC,MAAA,MAAM,WAA4B,EAAC;AACnC,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,SAAA,CAAU,kCAAkC,CAAA;AAChE,MAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,IAAA,EAAK,EAAG;AAElC,QAAA,IAAI,QAAA,IAAYC,2BAAA,IAAwB,QAAA,KAAa,MAAA,EAAQ;AAC3D,UAAA,MAAM,MAAA,GAA4BA,4BAAqB,QAAQ,CAAA,CAAE,OAAO,MAAA,EAAQ,QAAA,EAAU,OAAO,MAAM,CAAA;AAEvG,UAAA,MAAM,oCAAoC,YAAY;AACpD,YAAA,IAAI;AACF,cAAA,MAAM,MAAA,CAAO,yBAAA,CAA0B,aAAA,EAAe,WAAW,CAAA;AAAA,qBAC1D,CAAA,EAAG;AACV,cAAA,MAAA,CAAO,KAAA,CAAM,CAAA,SAAA,EAAY,QAAQ,CAAA,aAAA,CAAA,EAAiB,CAAC,CAAA;AAAA;AACrD,WACF,GAAG;AACH,UAAA,QAAA,CAAS,KAAK,gCAAgC,CAAA;AAAA;AAChD;AAEF,MAAA,MAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAAA;AAC5B;AAEJ;;;;"}
|