diff --git a/public/locales/en-US.json b/public/locales/en-US.json index 58e9dfab4..235886358 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -110,6 +110,9 @@ "label_hasInfiniteQuantity_sockets": "Unlimited sockets", "label_numberOfGuests_one": "<0>{{count}} guest", "label_numberOfGuests_other": "<0>{{count}} guests", + "label_subscriptionType": "{{context}}", + "label_subscriptionType_Annual": "Annual", + "label_subscriptionType_On-demand": "On-Demand", "cloudProvider": "{{context}}", "cloudProvider_alibaba": "Alibaba", "cloudProvider_aws": "AWS", @@ -150,6 +153,7 @@ "header_subscriptions": "Sockets", "header_subscriptions_cores": "Cores", "header_subscriptions_sockets": "Sockets", + "header_subscriptionType": "Subscription type", "header_Transfer-gibibytes": "Data transfer", "header_tooltip_Storage-gibibytes": "Measurements in binary gigabyte months", "header_tooltip_Transfer-gibibytes": "Measurements in binary gigabytes", diff --git a/src/config/product.rhosak.js b/src/config/product.rhosak.js index c1799a574..5c530d617 100644 --- a/src/config/product.rhosak.js +++ b/src/config/product.rhosak.js @@ -21,9 +21,7 @@ import { RHSM_API_PATH_METRIC_TYPES } from '../services/rhsm/rhsmConstants'; import { dateHelpers, helpers } from '../common'; -import { Tooltip } from '../components/tooltip/tooltip'; -import { ChartIcon } from '../components/chart/chartIcon'; -import { translate } from '../components/i18n/i18n'; +import { translate, EMPTY_CONTEXT } from '../components/i18n/i18n'; /** * ToDo: evaluate separating products/product tags into individual configs... @@ -223,22 +221,13 @@ const config = { isWrappable: true }, { - id: 'totalCapacity', - header: data => translate('curiosity-inventory.header', { context: ['subscriptions', data?.uom?.value] }), - cell: (data = {}) => { - const { hasInfiniteQuantity, totalCapacity, uom } = data; - if (hasInfiniteQuantity?.value === true) { - const content = translate('curiosity-inventory.label', { context: ['hasInfiniteQuantity', uom?.value] }); - return ( - - - - ); - } - return totalCapacity?.value; - }, - isSortable: true, - cellWidth: 10, + id: 'subscriptionType', + cell: (data, session, meta) => + translate('curiosity-inventory.label_subscriptionType', { + context: meta?.subscriptionType || EMPTY_CONTEXT + }), + isSortable: false, + cellWidth: 15, isWrappable: true }, { diff --git a/src/services/rhsm/rhsmConstants.js b/src/services/rhsm/rhsmConstants.js index 76e73deef..08492a5f4 100644 --- a/src/services/rhsm/rhsmConstants.js +++ b/src/services/rhsm/rhsmConstants.js @@ -197,6 +197,16 @@ const RHSM_API_RESPONSE_SLA_TYPES = { NONE: '' }; +/** + * RHSM response, general parameters for subscription types + * + * @type {{ANNUAL: string, ON_DEMAND: string}} + */ +const RHSM_API_RESPONSE_SUBSCRIPTION_TYPES = { + ANNUAL: 'Annual', + ON_DEMAND: 'On-demand' +}; + /** * RHSM response, query parameters for UOM. * @@ -336,13 +346,14 @@ const RHSM_API_QUERY_SET_TYPES = { * RHSM_API_RESPONSE_META_TYPES: {PRODUCT: string, COUNT: string}, RHSM_API_RESPONSE_ERRORS_CODE_TYPES: {GENERIC: string, * OPTIN: string}, RHSM_API_QUERY_GRANULARITY_TYPES: {WEEKLY: string, QUARTERLY: string, DAILY: string, MONTHLY: string}, * RHSM_API_RESPONSE_UOM_TYPES: {CORES: string, SOCKETS: string}, RHSM_API_QUERY_INVENTORY_SORT_DIRECTION_TYPES: {ASCENDING: string, - * DESCENDING: string}, RHSM_API_QUERY_INVENTORY_SORT_TYPES: {CORES: string, STORAGE_GIBIBYTES: string, SOCKETS: string, - * INSTANCE_HOURS: string, TRANSFER_GIBIBYTES: string, BILLING_PROVIDER: string, CORE_SECONDS: string, LAST_SEEN: string, - * NAME: string}, RHSM_API_PATH_PRODUCT_TYPES: {RHEL_ARM: string, OPENSHIFT_METRICS: string, SATELLITE: string, - * RHEL_WORKSTATION: string, RHOSAK: string, RHEL_COMPUTE_NODE: string, RHEL_X86: string, OPENSHIFT: string, - * SATELLITE_SERVER: string, OPENSHIFT_DEDICATED_METRICS: string, RHEL_DESKTOP: string, RHEL: string, SATELLITE_CAPSULE: string, - * RHEL_SERVER: string, RHEL_IBM_Z: string, RHEL_IBM_POWER: string}, RHSM_API_RESPONSE_BILLING_PROVIDER_TYPES: {AZURE: string, - * GCP: string, RED_HAT: string, NONE: string, AWS: string, ORACLE: string}, RHSM_API_RESPONSE_ERRORS_TYPES: {CODE: string}, + * DESCENDING: string}, RHSM_API_RESPONSE_SUBSCRIPTION_TYPES: {ANNUAL: string, ON_DEMAND: string}, + * RHSM_API_QUERY_INVENTORY_SORT_TYPES: {CORES: string, STORAGE_GIBIBYTES: string, SOCKETS: string, INSTANCE_HOURS: string, + * TRANSFER_GIBIBYTES: string, BILLING_PROVIDER: string, CORE_SECONDS: string, LAST_SEEN: string, NAME: string}, + * RHSM_API_PATH_PRODUCT_TYPES: {RHEL_ARM: string, OPENSHIFT_METRICS: string, SATELLITE: string, RHEL_WORKSTATION: string, + * RHOSAK: string, RHEL_COMPUTE_NODE: string, RHEL_X86: string, OPENSHIFT: string, SATELLITE_SERVER: string, + * OPENSHIFT_DEDICATED_METRICS: string, RHEL_DESKTOP: string, RHEL: string, SATELLITE_CAPSULE: string, RHEL_SERVER: string, + * RHEL_IBM_Z: string, RHEL_IBM_POWER: string}, RHSM_API_RESPONSE_BILLING_PROVIDER_TYPES: {AZURE: string, GCP: string, + * RED_HAT: string, NONE: string, AWS: string, ORACLE: string}, RHSM_API_RESPONSE_ERRORS_TYPES: {CODE: string}, * RHSM_API_QUERY_BILLING_PROVIDER_TYPES: {AZURE: string, GCP: string, RED_HAT: string, NONE: string, AWS: string, ORACLE: string}, * RHSM_API_QUERY_USAGE_TYPES: {UNSPECIFIED: string, DISASTER: string, DEVELOPMENT: string, PRODUCTION: string}, * RHSM_API_QUERY_SLA_TYPES: {PREMIUM: string, SELF: string, NONE: string, STANDARD: string}, @@ -374,6 +385,7 @@ const rhsmConstants = { RHSM_API_RESPONSE_GRANULARITY_TYPES, RHSM_API_RESPONSE_BILLING_PROVIDER_TYPES, RHSM_API_RESPONSE_SLA_TYPES, + RHSM_API_RESPONSE_SUBSCRIPTION_TYPES, RHSM_API_RESPONSE_UOM_TYPES, RHSM_API_RESPONSE_USAGE_TYPES, RHSM_API_QUERY_GRANULARITY_TYPES, @@ -407,6 +419,7 @@ export { RHSM_API_RESPONSE_GRANULARITY_TYPES, RHSM_API_RESPONSE_BILLING_PROVIDER_TYPES, RHSM_API_RESPONSE_SLA_TYPES, + RHSM_API_RESPONSE_SUBSCRIPTION_TYPES, RHSM_API_RESPONSE_UOM_TYPES, RHSM_API_RESPONSE_USAGE_TYPES, RHSM_API_QUERY_GRANULARITY_TYPES, diff --git a/src/services/rhsm/rhsmSchemas.js b/src/services/rhsm/rhsmSchemas.js index 43cc4ffbd..b5925ac9d 100644 --- a/src/services/rhsm/rhsmSchemas.js +++ b/src/services/rhsm/rhsmSchemas.js @@ -1,7 +1,7 @@ import JoiBase from 'joi'; import JoiDate from '@joi/date'; import { schemaResponse } from '../common/helpers'; -import { rhsmConstants } from './rhsmConstants'; +import RHSM_API_RESPONSE_SUBSCRIPTION_TYPES, { rhsmConstants } from './rhsmConstants'; const Joi = JoiBase.extend(JoiDate); @@ -122,7 +122,11 @@ const instancesResponseSchema = Joi.object().keys({ * * @type {*} Joi schema */ -const subscriptionsMetaSchema = metaResponseSchema; +const subscriptionsMetaSchema = metaResponseSchema + .keys({ + subscription_type: Joi.string().valid(null, ...Object.values(rhsmConstants.RHSM_API_RESPONSE_SUBSCRIPTION_TYPES)) + }) + .unknown(true); /** * Subscriptions response item. diff --git a/src/services/rhsm/rhsmServices.js b/src/services/rhsm/rhsmServices.js index b9c06bbaa..fc1d90071 100644 --- a/src/services/rhsm/rhsmServices.js +++ b/src/services/rhsm/rhsmServices.js @@ -2348,7 +2348,8 @@ const getInstancesInventory = (id, params = {}, options = {}) => { * ], * "links": {}, * "meta": { - * "count": 3 + * "count": 3, + * "subscription_type": "On-demand" * } * } *