Skip to content

Commit

Permalink
fix(rhosak): ent-4689 convert non-metric (#893)
Browse files Browse the repository at this point in the history
* locale, string ref naming update
* services, rhsmConstants, billing prov to non-metric
  • Loading branch information
cdcabrera committed May 25, 2022
1 parent 94095c0 commit 7b7604f
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 54 deletions.
14 changes: 7 additions & 7 deletions public/locales/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
"hardwareType_physical": "Physical",
"hardwareType_virtualized": "Virtual",
"header": "{{context}}",
"header_Billing-provider": "Purchased through",
"header_billing_provider": "Purchased through",
"header_cores": "Subscribed cores",
"header_cores_OpenShift Container Platform": "Cores",
"header_cores_OpenShift-metrics": "Cores",
Expand Down Expand Up @@ -153,12 +153,12 @@
"header_Transfer-gibibytes": "Data transfer",
"header_tooltip_Storage-gibibytes": "Measurements in binary gigabyte hours",
"header_tooltip_Transfer-gibibytes": "Measurements in binary gigabytes",
"measurement_Billing-provider": "{{context}}",
"measurement_Billing-provider_aws": "AWS",
"measurement_Billing-provider_azure": "Azure",
"measurement_Billing-provider_gcp": "GCP",
"measurement_Billing-provider_oracle": "Oracle",
"measurement_Billing-provider_red hat": "Red Hat",
"measurement_billing_provider": "{{context}}",
"measurement_billing_provider_aws": "AWS",
"measurement_billing_provider_azure": "Azure",
"measurement_billing_provider_gcp": "GCP",
"measurement_billing_provider_oracle": "Oracle",
"measurement_billing_provider_red hat": "Red Hat",
"measurement_Instance-hours": "{{total}} hours",
"measurement_Storage-gibibytes": "{{total}} GB hours",
"measurement_Transfer-gibibytes": "{{total}} GB",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

exports[`InventoryCardContext should expect specific sort properties: sort properties 1`] = `
Object {
"BILLING_PROVIDER": "Billing-provider",
"BILLING_PROVIDER": "billing_provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
exports[`RHSM Constants should have specific properties: all exported constants 1`] = `
Object {
"RHSM_API_PATH_METRIC_TYPES": Object {
"BILLING_PROVIDER": "Billing-provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down Expand Up @@ -48,7 +47,7 @@ Object {
"DESCENDING": "desc",
},
"RHSM_API_QUERY_INVENTORY_SORT_TYPES": Object {
"BILLING_PROVIDER": "Billing-provider",
"BILLING_PROVIDER": "billing_provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down Expand Up @@ -83,7 +82,6 @@ Object {
"USAGE": "usage",
},
"RHSM_API_QUERY_SET_TALLY_CAPACITY_TYPES": Object {
"BILLING_PROVIDER": "billing_provider",
"END_DATE": "ending",
"GRANULARITY": "granularity",
"SLA": "sla",
Expand Down Expand Up @@ -145,6 +143,8 @@ Object {
"WEEKLY": "Weekly",
},
"RHSM_API_RESPONSE_INSTANCES_DATA_TYPES": Object {
"BILLING_ACCOUNT_ID": "billing_account_id",
"BILLING_PROVIDER": "billing_provider",
"DISPLAY_NAME": "display_name",
"INVENTORY_ID": "inventory_id",
"LAST_SEEN": "last_seen",
Expand Down Expand Up @@ -196,7 +196,6 @@ Object {
},
"default": Object {
"RHSM_API_PATH_METRIC_TYPES": Object {
"BILLING_PROVIDER": "Billing-provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down Expand Up @@ -241,7 +240,7 @@ Object {
"DESCENDING": "desc",
},
"RHSM_API_QUERY_INVENTORY_SORT_TYPES": Object {
"BILLING_PROVIDER": "Billing-provider",
"BILLING_PROVIDER": "billing_provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down Expand Up @@ -276,7 +275,6 @@ Object {
"USAGE": "usage",
},
"RHSM_API_QUERY_SET_TALLY_CAPACITY_TYPES": Object {
"BILLING_PROVIDER": "billing_provider",
"END_DATE": "ending",
"GRANULARITY": "granularity",
"SLA": "sla",
Expand Down Expand Up @@ -338,6 +336,8 @@ Object {
"WEEKLY": "Weekly",
},
"RHSM_API_RESPONSE_INSTANCES_DATA_TYPES": Object {
"BILLING_ACCOUNT_ID": "billing_account_id",
"BILLING_PROVIDER": "billing_provider",
"DISPLAY_NAME": "display_name",
"INVENTORY_ID": "inventory_id",
"LAST_SEEN": "last_seen",
Expand Down Expand Up @@ -390,7 +390,6 @@ Object {
},
"rhsmConstants": Object {
"RHSM_API_PATH_METRIC_TYPES": Object {
"BILLING_PROVIDER": "Billing-provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down Expand Up @@ -435,7 +434,7 @@ Object {
"DESCENDING": "desc",
},
"RHSM_API_QUERY_INVENTORY_SORT_TYPES": Object {
"BILLING_PROVIDER": "Billing-provider",
"BILLING_PROVIDER": "billing_provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down Expand Up @@ -470,7 +469,6 @@ Object {
"USAGE": "usage",
},
"RHSM_API_QUERY_SET_TALLY_CAPACITY_TYPES": Object {
"BILLING_PROVIDER": "billing_provider",
"END_DATE": "ending",
"GRANULARITY": "granularity",
"SLA": "sla",
Expand Down Expand Up @@ -532,6 +530,8 @@ Object {
"WEEKLY": "Weekly",
},
"RHSM_API_RESPONSE_INSTANCES_DATA_TYPES": Object {
"BILLING_ACCOUNT_ID": "billing_account_id",
"BILLING_PROVIDER": "billing_provider",
"DISPLAY_NAME": "display_name",
"INVENTORY_ID": "inventory_id",
"LAST_SEEN": "last_seen",
Expand Down Expand Up @@ -588,7 +588,6 @@ Object {
exports[`RHSM Constants should have specific properties: specific constants 1`] = `
Object {
"RHSM_API_PATH_METRIC_TYPES": Object {
"BILLING_PROVIDER": "Billing-provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down Expand Up @@ -633,7 +632,7 @@ Object {
"DESCENDING": "desc",
},
"RHSM_API_QUERY_INVENTORY_SORT_TYPES": Object {
"BILLING_PROVIDER": "Billing-provider",
"BILLING_PROVIDER": "billing_provider",
"CORES": "Cores",
"CORE_SECONDS": "Core-seconds",
"INSTANCE_HOURS": "Instance-hours",
Expand Down Expand Up @@ -668,7 +667,6 @@ Object {
"USAGE": "usage",
},
"RHSM_API_QUERY_SET_TALLY_CAPACITY_TYPES": Object {
"BILLING_PROVIDER": "billing_provider",
"END_DATE": "ending",
"GRANULARITY": "granularity",
"SLA": "sla",
Expand Down Expand Up @@ -730,6 +728,8 @@ Object {
"WEEKLY": "Weekly",
},
"RHSM_API_RESPONSE_INSTANCES_DATA_TYPES": Object {
"BILLING_ACCOUNT_ID": "billing_account_id",
"BILLING_PROVIDER": "billing_provider",
"DISPLAY_NAME": "display_name",
"INVENTORY_ID": "inventory_id",
"LAST_SEEN": "last_seen",
Expand Down
60 changes: 34 additions & 26 deletions src/services/rhsm/rhsmConstants.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,9 @@ const RHSM_API_PATH_PRODUCT_TYPES = {
* RHSM path IDs for metrics.
*
* @type {{CORES: string, STORAGE_GIBIBYTES: string, SOCKETS: string, INSTANCE_HOURS: string,
* TRANSFER_GIBIBYTES: string, BILLING_PROVIDER: string, CORE_SECONDS: string}}
* TRANSFER_GIBIBYTES: string, CORE_SECONDS: string}}
*/
const RHSM_API_PATH_METRIC_TYPES = {
BILLING_PROVIDER: 'Billing-provider',
CORES: 'Cores',
SOCKETS: 'Sockets',
CORE_SECONDS: 'Core-seconds',
Expand Down Expand Up @@ -96,13 +95,20 @@ const RHSM_API_RESPONSE_ERRORS_CODE_TYPES = {
OPTIN: 'SUBSCRIPTIONS1004'
};

/**
* FixMe: Appears we combined future guests used with instances. Investigate moving "INVENTORY_ID" and "SUBSCRIPTION_MANAGER_ID".
* They're current associated with "hosts" guests. Need to also determine if this is something that needs to be added to "instances"
* or if keeping them added to guests only is enough.
*/
/**
* RHSM response Instance DATA types.
*
* @type {{MEASUREMENTS: string, SUBSCRIPTION_MANAGER_ID: string, INVENTORY_ID: string, NUMBER_OF_GUESTS: string,
* DISPLAY_NAME: string, LAST_SEEN: string}}
* @type {{MEASUREMENTS: string, BILLING_ACCOUNT_ID: string, SUBSCRIPTION_MANAGER_ID: string, INVENTORY_ID: string,
* NUMBER_OF_GUESTS: string, BILLING_PROVIDER: string, DISPLAY_NAME: string, LAST_SEEN: string}}
*/
const RHSM_API_RESPONSE_INSTANCES_DATA_TYPES = {
BILLING_PROVIDER: 'billing_provider',
BILLING_ACCOUNT_ID: 'billing_account_id',
DISPLAY_NAME: 'display_name',
INVENTORY_ID: 'inventory_id',
LAST_SEEN: 'last_seen',
Expand Down Expand Up @@ -225,6 +231,7 @@ const RHSM_API_QUERY_GRANULARITY_TYPES = RHSM_API_RESPONSE_GRANULARITY_TYPES;
*/
const RHSM_API_QUERY_INVENTORY_SORT_TYPES = {
...RHSM_API_PATH_METRIC_TYPES,
BILLING_PROVIDER: 'billing_provider',
LAST_SEEN: 'last_seen',
NAME: 'display_name'
};
Expand Down Expand Up @@ -289,10 +296,9 @@ const RHSM_API_QUERY_SET_INVENTORY_TYPES = {
/**
* RHSM query parameter options for TALLY, CAPACITY endpoints.
*
* @type {{GRANULARITY: string, USAGE: string, END_DATE: string, SLA: string, START_DATE: string, BILLING_PROVIDER: string}}
* @type {{GRANULARITY: string, USAGE: string, END_DATE: string, SLA: string, START_DATE: string }}
*/
const RHSM_API_QUERY_SET_TALLY_CAPACITY_TYPES = {
BILLING_PROVIDER: 'billing_provider',
END_DATE: 'ending',
GRANULARITY: 'granularity',
SLA: 'sla',
Expand All @@ -315,30 +321,32 @@ const RHSM_API_QUERY_SET_TYPES = {
* RHSM constants.
*
* @type {{RHSM_API_QUERY_SET_TALLY_CAPACITY_TYPES: {GRANULARITY: string, USAGE: string, END_DATE: string, SLA: string,
* START_DATE: string, BILLING_PROVIDER: string}, RHSM_API_RESPONSE_DATA: string, RHSM_API_PATH_METRIC_TYPES: {CORES: string,
* STORAGE_GIBIBYTES: string, SOCKETS: string, INSTANCE_HOURS: string, TRANSFER_GIBIBYTES: string, CORE_SECONDS: string},
* START_DATE: string}, RHSM_API_RESPONSE_DATA: string, RHSM_API_PATH_METRIC_TYPES: {CORES: string, STORAGE_GIBIBYTES: string,
* SOCKETS: string, INSTANCE_HOURS: string, TRANSFER_GIBIBYTES: string, CORE_SECONDS: string},
* RHSM_API_RESPONSE_TALLY_DATA_TYPES: {DATE: string, HAS_DATA: string, VALUE: string},
* RHSM_API_RESPONSE_INSTANCES_META_TYPES: {MEASUREMENTS: string, PRODUCT: string, COUNT: string},
* RHSM_API_RESPONSE_INSTANCES_DATA_TYPES: {MEASUREMENTS: string, SUBSCRIPTION_MANAGER_ID: string, INVENTORY_ID: string,
* NUMBER_OF_GUESTS: string, DISPLAY_NAME: string, LAST_SEEN: string}, RHSM_API_RESPONSE_SLA_TYPES: {PREMIUM: string,
* SELF: string, NONE: string, STANDARD: string}, 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_RESPONSE_INSTANCES_DATA_TYPES: {MEASUREMENTS: string, BILLING_ACCOUNT_ID: string, SUBSCRIPTION_MANAGER_ID: string,
* INVENTORY_ID: string, NUMBER_OF_GUESTS: string, BILLING_PROVIDER: string, DISPLAY_NAME: string, LAST_SEEN: string},
* RHSM_API_RESPONSE_SLA_TYPES: {PREMIUM: string, SELF: string, NONE: string, STANDARD: string},
* 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, CORE_HOURS: string, HARDWARE: string, SOCKETS: string,
* MEASUREMENT: 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: {RH_MARKETPLACE: string, AZURE: string,
* AWS: string}, RHSM_API_RESPONSE_ERRORS_TYPES: {CODE: string}, RHSM_API_QUERY_BILLING_PROVIDER_TYPES: {RH_MARKETPLACE: string,
* AZURE: string, AWS: string}, RHSM_API_QUERY_USAGE_TYPES: {UNSPECIFIED: string, DISASTER: string, DEVELOPMENT: 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},
* RHSM_API_QUERY_SET_INVENTORY_TYPES: {UOM: string, USAGE: string, DIRECTION: string, SORT: string, END_DATE: string,
* OFFSET: string, SLA: string, LIMIT: string, START_DATE: string, BILLING_PROVIDER: string, DISPLAY_NAME: string},
* RHSM_API_RESPONSE_ERRORS: string, RHSM_API_RESPONSE_TALLY_META_TYPES: {TOTAL_MONTHLY: string, DATE: string,
* PRODUCT: string, HAS_CLOUDIGRADE_DATA: string, HAS_CLOUDIGRADE_MISMATCH: string, HAS_DATA: string, METRIC_ID: string,
* COUNT: string, VALUE: string}, RHSM_API_QUERY_UOM_TYPES: {CORES: string, SOCKETS: string},
* RHSM_API_QUERY_SET_INVENTORY_TYPES: {UOM: string, BILLING_ACCOUNT_ID: string, USAGE: string, DIRECTION: string,
* SORT: string, END_DATE: string, OFFSET: string, SLA: string, LIMIT: string, START_DATE: string, BILLING_PROVIDER: string,
* DISPLAY_NAME: string}, RHSM_API_RESPONSE_ERRORS: string, RHSM_API_RESPONSE_TALLY_META_TYPES: {TOTAL_MONTHLY: string,
* DATE: string, PRODUCT: string, HAS_CLOUDIGRADE_DATA: string, HAS_CLOUDIGRADE_MISMATCH: string, HAS_DATA: string,
* METRIC_ID: string, COUNT: string, VALUE: string}, RHSM_API_QUERY_UOM_TYPES: {CORES: string, SOCKETS: string},
* RHSM_API_RESPONSE_META: string, RHSM_API_RESPONSE_GRANULARITY_TYPES: {WEEKLY: string, QUARTERLY: string, DAILY: string,
* MONTHLY: string}, RHSM_API_QUERY_SET_TYPES: {UOM: string, GRANULARITY: string, USAGE: string, DIRECTION: string,
* SORT: string, END_DATE: string, OFFSET: string, SLA: string, LIMIT: string, START_DATE: string, DISPLAY_NAME: string},
Expand Down
2 changes: 2 additions & 0 deletions src/services/rhsm/rhsmSchemas.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ const instancesMetaSchema = metaResponseSchema
const instancesItem = Joi.object({
inventory_id: Joi.string().optional().allow(null),
display_name: Joi.string().optional().allow(null),
billing_provider: Joi.string().optional().allow(null),
billing_account_id: Joi.string().optional().allow(null),
measurements: Joi.array().default([]),
subscription_manager_id: Joi.string().optional().allow(null),
last_seen: Joi.date().utc().allow(null)
Expand Down
10 changes: 6 additions & 4 deletions src/services/rhsm/rhsmServices.js
Original file line number Diff line number Diff line change
Expand Up @@ -2183,35 +2183,38 @@ const getHostsInventoryGuests = (id, params = {}, options = {}) => {
* "data" : [
* {
* "number_of_guests": 70,
* "billing_provider": "red hat",
* "billing_account_id": "xxxxx-xxxx-xxxx-xxxx-xxxx01",
* "inventory_id": "d6214a0b-b344-4778-831c-d53dcacb2da3",
* "subscription_manager_id": "adafd9d5-5b00-42fa-a6c9-75801d45cc6d",
* "display_name": "rhv.example.com",
* "measurements": [
* "red hat",
* 42,
* 0.000003563,
* 1
* ],
* "last_seen": "2020-04-01T00:00:00Z"
* },
* {
* "billing_provider": "azure",
* "billing_account_id": "xxxxx-xxxx-xxxx-xxxx-xxxx02",
* "inventory_id": "XXXXXX-b344-4778-831c-XXXXXXXX",
* "subscription_manager_id": "XXXXXX-5b00-42fa-XXXX-75801d45cc6d",
* "display_name": "dolor.example.com",
* "measurements": [
* "azure",
* 20,
* null,
* 1000
* ],
* "last_seen": "2020-04-02T00:00:00Z"
* },
* {
* "billing_provider": "Unknown",
* "billing_account_id": "xxxxx-xxxx-xxxx-xxxx-xxxx03",
* "inventory_id": "BBBBB-b344-4778-831c-BBBBBBB",
* "subscription_manager_id": "BBBBB-5b00-42fa-BBBBB-75801d45cc6d",
* "display_name": "lorem.example.com",
* "measurements": [
* "Unknown",
* 4000,
* 10000.0000345678,
* 3000
Expand All @@ -2223,7 +2226,6 @@ const getHostsInventoryGuests = (id, params = {}, options = {}) => {
* "meta": {
* "count": 3,
* "measurements": [
* "Billing-provider",
* "Instance-hours",
* "Storage-gibibytes",
* "Transfer-gibibytes"
Expand Down
4 changes: 0 additions & 4 deletions src/types/__tests__/__snapshots__/index.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ Object {
"TALLY_SYNC": "enable_tally_sync",
},
"RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES": Object {
"BILLING_PROVIDER": "billing_provider",
"END_DATE": "ending",
"GRANULARITY": "granularity",
"SLA": "sla",
Expand Down Expand Up @@ -292,7 +291,6 @@ Object {
"TALLY_SYNC": "enable_tally_sync",
},
"RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES": Object {
"BILLING_PROVIDER": "billing_provider",
"END_DATE": "ending",
"GRANULARITY": "granularity",
"SLA": "sla",
Expand Down Expand Up @@ -507,7 +505,6 @@ Object {
"TALLY_SYNC": "enable_tally_sync",
},
"RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES": Object {
"BILLING_PROVIDER": "billing_provider",
"END_DATE": "ending",
"GRANULARITY": "granularity",
"SLA": "sla",
Expand Down Expand Up @@ -726,7 +723,6 @@ Object {
"TALLY_SYNC": "enable_tally_sync",
},
"RHSM_API_QUERY_SET_REPORT_CAPACITY_TYPES": Object {
"BILLING_PROVIDER": "billing_provider",
"END_DATE": "ending",
"GRANULARITY": "granularity",
"SLA": "sla",
Expand Down

0 comments on commit 7b7604f

Please sign in to comment.