diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index bab60f83c..430f8a3c0 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -6,6 +6,7 @@ on: push: branches: - dev + - UXE-6333-real-time-event-improvement-fork env: HUSKY: 0 diff --git a/.github/workflows/pre-merge.yml b/.github/workflows/pre-merge.yml index b177d4126..27381806e 100644 --- a/.github/workflows/pre-merge.yml +++ b/.github/workflows/pre-merge.yml @@ -6,6 +6,7 @@ on: push: branches: - dev + - UXE-6333-real-time-event-improvement-fork workflow_dispatch: env: diff --git a/.github/workflows/security-linter.yaml b/.github/workflows/security-linter.yaml index 5b39f2ebc..6c29f2bac 100644 --- a/.github/workflows/security-linter.yaml +++ b/.github/workflows/security-linter.yaml @@ -5,9 +5,11 @@ on: types: [opened, synchronize, reopened, ready_for_review] branches: - dev + - UXE-6333-real-time-event-improvement-fork push: branches: - dev + - UXE-6333-real-time-event-improvement-fork workflow_dispatch: env: diff --git a/azion.config.mjs b/azion.config.mjs index 48b70fbb5..0102aec00 100644 --- a/azion.config.mjs +++ b/azion.config.mjs @@ -1,17 +1,22 @@ import { defineConfig } from 'azion' import process from 'node:process' -const { CROSS_EDGE_SECRET, VITE_ENVIRONMENT } = process.env; +const { CROSS_EDGE_SECRET, VITE_ENVIRONMENT } = process.env const environment = VITE_ENVIRONMENT || 'production' const addStagePrefix = (origin) => { if (environment === 'stage') { - return origin?.map((origin) => ({ - ...origin, - hostHeader: `stage-${origin.hostHeader}`, - addresses: origin.addresses?.map((addr) => `stage-${addr}`) - })) + return origin?.map(({ hostHeader, addresses, ...rest }) => { + const isCitiesDomain = hostHeader === 'cities.azion.com' + const transform = (addr) => `stage-${isCitiesDomain ? addr.replace('.com', '.net') : addr}` + + return { + ...rest, + hostHeader: transform(hostHeader), + addresses: addresses?.map(transform) + } + }) } return origin } @@ -313,30 +318,14 @@ const config = { } }, { - name: 'Route GraphQL Billing Queries to Manager Origin', - description: 'Routes GraphQL Billing queries to the Manager, updating the URI accordingly', - match: '^/graphql/billing', + name: 'API Version 4 Routing', + description: 'Directs API version 4 requests to the designated API origin for handling.', + match: '^/v4', behavior: { - forwardCookies: true, setOrigin: { - name: 'origin-manager', - type: 'single_origin' - }, - rewrite: '/billing/graphql' - } - }, - { - name: 'Route GraphQL Accounting Queries to Manager Origin', - description: - 'Routes GraphQL Accounting queries to the Manager, updating the URI accordingly', - match: '^/graphql/accounting', - behavior: { - forwardCookies: true, - setOrigin: { - name: 'origin-manager', + name: 'origin-api', type: 'single_origin' - }, - rewrite: '/accounting/graphql' + } } }, { diff --git a/azion/stage/azion.json b/azion/stage/azion.json index 3706da60b..166a8849b 100644 --- a/azion/stage/azion.json +++ b/azion/stage/azion.json @@ -2,7 +2,6 @@ "name": "console-kit-2024-08-21-stage", "bucket": "console-kit-2024-08-21-stage", "preset": "vue", - "mode": "deliver", "env": "production", "prefix": "20240821142547", "not-first-run": true, @@ -123,11 +122,6 @@ "name": "Route GraphQL City Queries to Cities Origin", "phase": "request" }, - { - "id": 277559, - "name": "Route GraphQL Billing Queries to Manager Origin", - "phase": "request" - }, { "id": 277563, "name": "Secure Headers", @@ -143,11 +137,6 @@ "name": "Route API Identity Providers", "phase": "request" }, - { - "id": 317377, - "name": "Route GraphQL Accounting Queries to Manager Origin", - "phase": "request" - }, { "id": 368013, "name": "Rewrite azrt Cookie in azion.com", @@ -177,6 +166,11 @@ "id": 368018, "name": "Rewrite azat Cookie in azionedge.net", "phase": "response" + }, + { + "id": 371432, + "name": "API Version 4 Routing", + "phase": "request" } ] }, @@ -190,4 +184,4 @@ "name": "Cities - Cache" } ] -} +} \ No newline at end of file diff --git a/cypress/e2mock/activity-history.cy.js b/cypress/e2mock/activity-history.cy.js index 3bb4ba0c5..71feaecf4 100644 --- a/cypress/e2mock/activity-history.cy.js +++ b/cypress/e2mock/activity-history.cy.js @@ -4,7 +4,7 @@ import selectors from '../support/selectors' describe('Activity History Spec', { tags: ['@dev2'] }, () => { beforeEach(() => { cy.login() - cy.intercept('POST', '/api/v3/events/graphql', { fixture: 'activity-history.json' }).as('activityHistoryApi') + cy.intercept('POST', 'v4/events/graphql', { fixture: 'activity-history.json' }).as('activityHistoryApi') cy.openProduct('Activity History') }) diff --git a/package.json b/package.json index 26f6b7ded..1a42bfa6b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "azion-console-kit", - "version": "1.31.7", + "version": "1.32.0", "private": false, "type": "module", "repository": { diff --git a/src/helpers/convert-date.js b/src/helpers/convert-date.js index 9fc5e30ca..ca622f41a 100644 --- a/src/helpers/convert-date.js +++ b/src/helpers/convert-date.js @@ -15,6 +15,7 @@ const convertValueToDate = (value) => { day: 'numeric', hour: '2-digit', minute: '2-digit', + second: '2-digit', hour12: true } return date.toLocaleString('en-US', options) diff --git a/src/helpers/convert-gql.js b/src/helpers/convert-gql.js index c7ef4a1c0..339b32fe4 100644 --- a/src/helpers/convert-gql.js +++ b/src/helpers/convert-gql.js @@ -34,6 +34,33 @@ function isValidDate(dateString) { return !isNaN(Date.parse(dateString)) } +/** + * Builds a GraphQL query based on the provided parameters. + * + * @param {object} options - The options object containing filterParameter, dataset, limit, orderBy, filterQuery, and fields. + * @return {string} The constructed GraphQL query string. + */ +function buildGraphQLQueryTotalRecords({ filterParameter, dataset, limit, filterQuery, fields }) { + const filter = filterQuery.map((field) => `\t\t\t${field}`).join('\n') + return [ + `query (`, + filterParameter.join('\n'), + `) {`, + `\t${dataset} (`, + `\t\tlimit: ${limit}`, + `\t\taggregate: {`, + `count: rows`, + `\t\t}`, + `\t\tfilter: {`, + filter, + `\t\t}`, + `\t) {`, + fields, + `\t}`, + `}` + ].join('\n') +} + /** * Builds a GraphQL query based on the provided parameters. * @@ -68,6 +95,39 @@ const formatValueContainOperator = (variable) => { return variable } +/** + * Convert filter and table to gql body + * + * @param {Object} filter - Object with the filter to apply + * @param {Object} table - Object with the table to query + * @returns {Object} Returns the body of the gql query with variables + */ +const convertGQLTotalRecords = (filter, table) => { + if (!table) throw new Error('Table parameter is required') + + let variables = {} + const fields = filter?.fields || [] + const filterQuery = buildFilterQuery(filter, variables) + const fieldsFormat = table.fields.map((field) => `\t\t${field}`).join('\n') + const filterParameter = formatFilterParameter(variables, fields) + variables = formatValueContainOperator(variables) + + const queryConfig = { + filterParameter, + dataset: table.dataset, + limit: table.limit, + filterQuery, + fields: fieldsFormat + } + + const query = buildGraphQLQueryTotalRecords(queryConfig) + + return { + query, + variables + } +} + /** * Convert filter and table to gql body * @@ -234,4 +294,4 @@ const formatFilterParameter = (variables, fields) => { }) } -export default convertGQL +export { convertGQL, convertGQLTotalRecords } diff --git a/src/helpers/get-static-urls-by-environment.js b/src/helpers/get-static-urls-by-environment.js index 9afcfde0d..a3a66d042 100644 --- a/src/helpers/get-static-urls-by-environment.js +++ b/src/helpers/get-static-urls-by-environment.js @@ -14,12 +14,12 @@ const urls = { production: 'https://manager.azion.com/billing-subscriptions' }, playgroundMetrics: { - stage: 'https://stage-manager.azion.com/metrics/graphql', - production: 'https://manager.azion.com/metrics/graphql' + stage: 'https://stage-api.azion.com/v4/metrics/graphql', + production: 'https://api.azion.com/v4/metrics/graphql' }, playgroundEvents: { - stage: 'https://stage-manager.azion.com/events/graphql', - production: 'https://manager.azion.com/events/graphql' + stage: 'https://stage-api.azion.com/v4/events/graphql', + production: 'https://api.azion.com/v4/events/graphql' }, helpCenter: { stage: 'https://storage.googleapis.com/gcs-docs-help-center-stage/console/', diff --git a/src/router/routes/real-time-events-routes/index.js b/src/router/routes/real-time-events-routes/index.js index 7b262673e..66b38881f 100644 --- a/src/router/routes/real-time-events-routes/index.js +++ b/src/router/routes/real-time-events-routes/index.js @@ -38,7 +38,8 @@ export const realTimeEventsRoutes = { listService: RealTimeEventsService.listActivityHistory, loadService: RealTimeEventsService.loadActivityHistory }, - loadFieldsData: RealTimeEventsService.loadFieldsEventsData + loadFieldsData: RealTimeEventsService.loadFieldsEventsData, + getTotalRecords: RealTimeEventsService.getTotalRecords }, meta: { breadCrumbs: [ diff --git a/src/services/axios/AxiosHttpClientAdapter.js b/src/services/axios/AxiosHttpClientAdapter.js index 3d8720a24..0b8403957 100644 --- a/src/services/axios/AxiosHttpClientAdapter.js +++ b/src/services/axios/AxiosHttpClientAdapter.js @@ -39,7 +39,7 @@ export const parseHttpResponse = (httpResponse) => { export class AxiosHttpClientAdapter { static async request( - { url, method, headers, body, signal }, + { url, method, headers, body, signal, baseURL }, axios = defaultApi(import.meta.env.VITE_PERSONAL_TOKEN) ) { let axiosResponse @@ -50,7 +50,8 @@ export class AxiosHttpClientAdapter { method: method, headers: headers, data: body, - signal + signal, + ...(baseURL && { baseURL: baseURL }) }) } catch (error) { const axiosError = error diff --git a/src/services/axios/AxiosHttpClientSignalDecorator.js b/src/services/axios/AxiosHttpClientSignalDecorator.js index 2f57c4205..cb1f29a30 100644 --- a/src/services/axios/AxiosHttpClientSignalDecorator.js +++ b/src/services/axios/AxiosHttpClientSignalDecorator.js @@ -5,13 +5,14 @@ export class AxiosHttpClientSignalDecorator { this.signal = signal } - async request({ url, method, headers, body }) { + async request({ url, method, headers, body, baseURL }) { return await AxiosHttpClientAdapter.request({ url, method, headers, body, - signal: this.signal + signal: this.signal, + baseURL }) } } diff --git a/src/services/axios/makeEventsApi.js b/src/services/axios/makeEventsApi.js index 12fffc470..7a79c1021 100644 --- a/src/services/axios/makeEventsApi.js +++ b/src/services/axios/makeEventsApi.js @@ -2,8 +2,7 @@ import axios from 'axios' const api = (personalToken) => { delete axios.defaults.headers.common['Authorization'] - const version = 'v3' - const baseURL = `api/${version}/events` + const baseURL = `v4/events` axios.defaults.headers.common['Accept'] = 'application/json' diff --git a/src/services/billing-services/list-payment-history-service.js b/src/services/billing-services/list-payment-history-service.js index df02b7d5d..96b525374 100644 --- a/src/services/billing-services/list-payment-history-service.js +++ b/src/services/billing-services/list-payment-history-service.js @@ -3,7 +3,6 @@ import { makePaymentBaseUrl } from './make-payment-base-url' import { makeAccountingBaseUrl } from './make-accounting-base-url' import { formatDateToUS, getStaticUrlsByEnvironment } from '@/helpers' import { useAccountStore } from '@/stores/account' -import graphQLApi from '../axios/makeGraphQl' import { getLastDayMonth } from '@/helpers/payment-history' const PAGE_SIZE = 200 @@ -67,14 +66,12 @@ const listPaymentHistoryForRegularAccounts = async () => { }` } - let httpResponse = await AxiosHttpClientAdapter.request( - { - url: `${makeAccountingBaseUrl()}`, - method: 'POST', - body: payload - }, - graphQLApi - ) + let httpResponse = await AxiosHttpClientAdapter.request({ + baseURL: '/', + url: `${makeAccountingBaseUrl()}`, + method: 'POST', + body: payload + }) return adaptPaymentHistoryForRegularAccounts(httpResponse) } diff --git a/src/services/billing-services/list-service-and-products-changes-accounting-service.js b/src/services/billing-services/list-service-and-products-changes-accounting-service.js index a5c42df5d..7dd643278 100644 --- a/src/services/billing-services/list-service-and-products-changes-accounting-service.js +++ b/src/services/billing-services/list-service-and-products-changes-accounting-service.js @@ -1,6 +1,5 @@ import { formatUnitValue } from '@/helpers' import { AxiosHttpClientAdapter, parseHttpResponse } from '../axios/AxiosHttpClientAdapter' -import graphQLApi from '../axios/makeGraphQl' import { makeAccountingBaseUrl } from './make-accounting-base-url' export const listServiceAndProductsChangesAccountingService = async (billID) => { @@ -27,14 +26,12 @@ export const listServiceAndProductsChangesAccountingService = async (billID) => query: BILL_DETAIL_QUERY } - let httpResponse = await AxiosHttpClientAdapter.request( - { - url: `${makeAccountingBaseUrl()}`, - method: 'POST', - body: graphQLPayload - }, - graphQLApi - ) + let httpResponse = await AxiosHttpClientAdapter.request({ + baseURL: '/', + url: `${makeAccountingBaseUrl()}`, + method: 'POST', + body: graphQLPayload + }) httpResponse = adapt(httpResponse) diff --git a/src/services/billing-services/list-service-and-products-changes.js b/src/services/billing-services/list-service-and-products-changes.js index 5b2d62233..efb7a24d7 100644 --- a/src/services/billing-services/list-service-and-products-changes.js +++ b/src/services/billing-services/list-service-and-products-changes.js @@ -1,6 +1,5 @@ import { formatCurrencyString, formatUnitValue } from '@/helpers' import { AxiosHttpClientAdapter, parseHttpResponse } from '../axios/AxiosHttpClientAdapter' -import graphQLApi from '../axios/makeGraphQl' import { makeBillingBaseUrl } from './make-billing-base-url' export const listServiceAndProductsChangesService = async (billID) => { @@ -98,14 +97,12 @@ export const listServiceAndProductsChangesService = async (billID) => { } } - let httpResponse = await AxiosHttpClientAdapter.request( - { - url: `${makeBillingBaseUrl()}`, - method: 'POST', - body: graphQLPayload - }, - graphQLApi - ) + let httpResponse = await AxiosHttpClientAdapter.request({ + baseURL: '/', + url: `${makeBillingBaseUrl()}`, + method: 'POST', + body: graphQLPayload + }) httpResponse = adapt(httpResponse) diff --git a/src/services/billing-services/load-current-invoice-service.js b/src/services/billing-services/load-current-invoice-service.js index 3ee2e1671..4789c1957 100644 --- a/src/services/billing-services/load-current-invoice-service.js +++ b/src/services/billing-services/load-current-invoice-service.js @@ -1,5 +1,4 @@ import { AxiosHttpClientAdapter, parseHttpResponse } from '../axios/AxiosHttpClientAdapter' -import graphQLApi from '../axios/makeGraphQl' import { makeBillingBaseUrl } from './make-billing-base-url' import { makeAccountingBaseUrl } from './make-accounting-base-url' import { formatDateToUSBilling } from '@/helpers/convert-date' @@ -10,14 +9,12 @@ export const loadCurrentInvoiceService = async () => { const payload = getQueryByAccountType(accountIsNotRegular) const url = accountIsNotRegular ? `${makeBillingBaseUrl()}` : `${makeAccountingBaseUrl()}` - let httpResponse = await AxiosHttpClientAdapter.request( - { - url, - method: 'POST', - body: payload - }, - graphQLApi - ) + let httpResponse = await AxiosHttpClientAdapter.request({ + baseURL: '/', + url, + method: 'POST', + body: payload + }) httpResponse = adapt(httpResponse, accountIsNotRegular) diff --git a/src/services/billing-services/load-invoice-data-service.js b/src/services/billing-services/load-invoice-data-service.js index 02ddb8e2c..2346b3d50 100644 --- a/src/services/billing-services/load-invoice-data-service.js +++ b/src/services/billing-services/load-invoice-data-service.js @@ -1,5 +1,4 @@ import { AxiosHttpClientAdapter, parseHttpResponse } from '../axios/AxiosHttpClientAdapter' -import graphQLApi from '../axios/makeGraphQl' import { makeBillingBaseUrl } from './make-billing-base-url' import { formatDateToUSBilling } from '@/helpers/convert-date' import { makeAccountingBaseUrl } from './make-accounting-base-url' @@ -10,14 +9,12 @@ export const loadInvoiceDataService = async (invoiceId) => { const payload = getQueryByAccountType(accountIsNotRegular, invoiceId) const url = accountIsNotRegular ? `${makeBillingBaseUrl()}` : `${makeAccountingBaseUrl()}` - let httpResponse = await AxiosHttpClientAdapter.request( - { - url, - method: 'POST', - body: payload - }, - graphQLApi - ) + let httpResponse = await AxiosHttpClientAdapter.request({ + baseURL: '/', + url, + method: 'POST', + body: payload + }) httpResponse = adapt(httpResponse, accountIsNotRegular) diff --git a/src/services/billing-services/load-invoice-last-updated-service.js b/src/services/billing-services/load-invoice-last-updated-service.js index bf23dd136..c16e5e8e5 100644 --- a/src/services/billing-services/load-invoice-last-updated-service.js +++ b/src/services/billing-services/load-invoice-last-updated-service.js @@ -1,5 +1,4 @@ import { AxiosHttpClientAdapter, parseHttpResponse } from '../axios/AxiosHttpClientAdapter' -import graphQLApi from '../axios/makeGraphQl' import { makeBillingBaseUrl } from './make-billing-base-url' import { formatDateToUSBilling } from '@/helpers/convert-date' @@ -17,14 +16,12 @@ export const loadInvoiceLastUpdatedService = async () => { }` } - let httpResponse = await AxiosHttpClientAdapter.request( - { - url: `${makeBillingBaseUrl()}`, - method: 'POST', - body: payload - }, - graphQLApi - ) + let httpResponse = await AxiosHttpClientAdapter.request({ + baseURL: '/', + url: `${makeBillingBaseUrl()}`, + method: 'POST', + body: payload + }) httpResponse = adapt(httpResponse) diff --git a/src/services/billing-services/load-your-service-plan-service.js b/src/services/billing-services/load-your-service-plan-service.js index f4a12e4d5..dbebc567e 100644 --- a/src/services/billing-services/load-your-service-plan-service.js +++ b/src/services/billing-services/load-your-service-plan-service.js @@ -1,7 +1,6 @@ import { AxiosHttpClientAdapter, parseHttpResponse } from '../axios/AxiosHttpClientAdapter' -import graphQLApi from '../axios/makeGraphQl' import { formatDateToUSBilling } from '@/helpers/convert-date' - +import { makeBillingBaseUrl } from './make-billing-base-url' export const loadYourServicePlanService = async (disclaimer = '') => { const { lastDayOfMonth, firstDayOfMonth } = getFirstDayCurrentDate() @@ -25,14 +24,12 @@ export const loadYourServicePlanService = async (disclaimer = '') => { }` } - let httpResponse = await AxiosHttpClientAdapter.request( - { - url: `/billing`, - method: 'POST', - body: payload - }, - graphQLApi - ) + let httpResponse = await AxiosHttpClientAdapter.request({ + baseURL: '/', + url: makeBillingBaseUrl(), + method: 'POST', + body: payload + }) httpResponse = adapt(httpResponse, disclaimer) diff --git a/src/services/billing-services/make-accounting-base-url.js b/src/services/billing-services/make-accounting-base-url.js index 20ef389ff..816093604 100644 --- a/src/services/billing-services/make-accounting-base-url.js +++ b/src/services/billing-services/make-accounting-base-url.js @@ -1,3 +1,3 @@ export const makeAccountingBaseUrl = () => { - return 'accounting' + return 'v4/accounting/graphql' } diff --git a/src/services/billing-services/make-billing-base-url.js b/src/services/billing-services/make-billing-base-url.js index a523b4772..a97fdad16 100644 --- a/src/services/billing-services/make-billing-base-url.js +++ b/src/services/billing-services/make-billing-base-url.js @@ -1,3 +1,3 @@ export const makeBillingBaseUrl = () => { - return 'billing' + return 'v4/billing/graphql' } diff --git a/src/services/real-time-events-service/activity-history/list-activity-history.js b/src/services/real-time-events-service/activity-history/list-activity-history.js index 5a7433b98..a7dff347e 100644 --- a/src/services/real-time-events-service/activity-history/list-activity-history.js +++ b/src/services/real-time-events-service/activity-history/list-activity-history.js @@ -1,10 +1,9 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' import { generateCurrentTimestamp } from '@/helpers/generate-timestamp' import { convertValueToDate } from '@/helpers' import { useGraphQLStore } from '@/stores/graphql-query' -import { getRecordsFound } from '@/helpers/get-records-found' export const listActivityHistory = async (filter) => { const payload = adapt(filter) @@ -15,6 +14,7 @@ export const listActivityHistory = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload @@ -35,7 +35,6 @@ const adapt = (filter) => { const adaptResponse = (response) => { const { body } = response - const totalRecords = body.data.activityHistoryEvents?.length const data = body.data.activityHistoryEvents?.map((activityHistoryEvents) => ({ id: generateCurrentTimestamp(), @@ -50,7 +49,6 @@ const adaptResponse = (response) => { })) return { - data, - recordsFound: getRecordsFound(totalRecords) + data } } diff --git a/src/services/real-time-events-service/activity-history/load-activity-history.js b/src/services/real-time-events-service/activity-history/load-activity-history.js index 03a612f33..02e48f591 100644 --- a/src/services/real-time-events-service/activity-history/load-activity-history.js +++ b/src/services/real-time-events-service/activity-history/load-activity-history.js @@ -1,5 +1,5 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { convertValueToDate } from '@/helpers/convert-date' import { capitalizeFirstLetter } from '@/helpers' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' @@ -10,6 +10,7 @@ export const loadActivityHistory = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload diff --git a/src/services/real-time-events-service/data-stream/list-data-stream.js b/src/services/real-time-events-service/data-stream/list-data-stream.js index 018b7910d..3adf3ff18 100644 --- a/src/services/real-time-events-service/data-stream/list-data-stream.js +++ b/src/services/real-time-events-service/data-stream/list-data-stream.js @@ -1,10 +1,9 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { convertValueToDate } from '@/helpers' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' import { generateCurrentTimestamp } from '@/helpers/generate-timestamp' import { useGraphQLStore } from '@/stores/graphql-query' -import { getRecordsFound } from '@/helpers/get-records-found' export const listDataStream = async (filter) => { const payload = adapt(filter) @@ -15,6 +14,7 @@ export const listDataStream = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload @@ -45,7 +45,6 @@ const adapt = (filter) => { const adaptResponse = (response) => { const { body } = response - const totalRecords = body.data.dataStreamedEvents?.length const data = body.data.dataStreamedEvents?.map((dataStreamedEvents) => ({ id: generateCurrentTimestamp(), @@ -68,7 +67,6 @@ const adaptResponse = (response) => { })) return { - data, - recordsFound: getRecordsFound(totalRecords) + data } } diff --git a/src/services/real-time-events-service/data-stream/load-data-stream.js b/src/services/real-time-events-service/data-stream/load-data-stream.js index e2b5c9159..d7d7eabdd 100644 --- a/src/services/real-time-events-service/data-stream/load-data-stream.js +++ b/src/services/real-time-events-service/data-stream/load-data-stream.js @@ -1,5 +1,5 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { convertValueToDate } from '@/helpers/convert-date' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' @@ -9,6 +9,7 @@ export const loadDataStream = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload diff --git a/src/services/real-time-events-service/edge-dns/list-edge-dns.js b/src/services/real-time-events-service/edge-dns/list-edge-dns.js index aa62f1a9a..a61ecacdd 100644 --- a/src/services/real-time-events-service/edge-dns/list-edge-dns.js +++ b/src/services/real-time-events-service/edge-dns/list-edge-dns.js @@ -1,10 +1,9 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' import { generateCurrentTimestamp } from '@/helpers/generate-timestamp' import { convertValueToDate } from '@/helpers' import { useGraphQLStore } from '@/stores/graphql-query' -import { getRecordsFound } from '@/helpers/get-records-found' export const listEdgeDNS = async (filter) => { const payload = adapt(filter) @@ -15,6 +14,7 @@ export const listEdgeDNS = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload @@ -70,7 +70,6 @@ const adapt = (filter) => { const adaptResponse = (response) => { const { body } = response - const totalRecords = body.data.idnsQueriesEvents?.length const data = body.data.idnsQueriesEvents?.map((edgeDnsQueriesEvents) => ({ id: generateCurrentTimestamp(), @@ -86,7 +85,6 @@ const adaptResponse = (response) => { })) return { - data, - recordsFound: getRecordsFound(totalRecords) + data } } diff --git a/src/services/real-time-events-service/edge-dns/load-edge-dns.js b/src/services/real-time-events-service/edge-dns/load-edge-dns.js index 9764ffb36..84fe83ce4 100644 --- a/src/services/real-time-events-service/edge-dns/load-edge-dns.js +++ b/src/services/real-time-events-service/edge-dns/load-edge-dns.js @@ -1,5 +1,5 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' export const loadEdgeDNS = async (filter) => { @@ -8,6 +8,7 @@ export const loadEdgeDNS = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload diff --git a/src/services/real-time-events-service/edge-functions-console/list-edge-functions-console.js b/src/services/real-time-events-service/edge-functions-console/list-edge-functions-console.js index 84f414a01..a590f0635 100644 --- a/src/services/real-time-events-service/edge-functions-console/list-edge-functions-console.js +++ b/src/services/real-time-events-service/edge-functions-console/list-edge-functions-console.js @@ -1,11 +1,10 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' import { generateCurrentTimestamp } from '@/helpers/generate-timestamp' import { convertValueToDate } from '@/helpers' import { useGraphQLStore } from '@/stores/graphql-query' import * as Errors from '@/services/axios/errors' -import { getRecordsFound } from '@/helpers/get-records-found' export const listEdgeFunctionsConsole = async (filter) => { const payload = adapt(filter) @@ -16,6 +15,7 @@ export const listEdgeFunctionsConsole = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload @@ -69,7 +69,6 @@ const levelMap = { const adaptResponse = (body) => { const cellsConsoleEventsList = body.data?.cellsConsoleEvents - const totalRecords = cellsConsoleEventsList?.length const parser = cellsConsoleEventsList?.length ? cellsConsoleEventsList.map((cellsConsoleEvents) => ({ configurationId: cellsConsoleEvents.configurationId, @@ -89,8 +88,7 @@ const adaptResponse = (body) => { : [] return { - data: parser, - recordsFound: getRecordsFound(totalRecords) + data: parser } } diff --git a/src/services/real-time-events-service/edge-functions-console/load-edge-functions-console.js b/src/services/real-time-events-service/edge-functions-console/load-edge-functions-console.js index f4a9088c9..7408e007f 100644 --- a/src/services/real-time-events-service/edge-functions-console/load-edge-functions-console.js +++ b/src/services/real-time-events-service/edge-functions-console/load-edge-functions-console.js @@ -1,5 +1,5 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { convertValueToDate } from '@/helpers/convert-date' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' @@ -9,6 +9,7 @@ export const loadEdgeFunctionsConsole = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload diff --git a/src/services/real-time-events-service/edge-functions/list-edge-functions.js b/src/services/real-time-events-service/edge-functions/list-edge-functions.js index d10e5d2c2..5f35eb276 100644 --- a/src/services/real-time-events-service/edge-functions/list-edge-functions.js +++ b/src/services/real-time-events-service/edge-functions/list-edge-functions.js @@ -1,10 +1,9 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' import { generateCurrentTimestamp } from '@/helpers/generate-timestamp' import { convertValueToDate } from '@/helpers' import { useGraphQLStore } from '@/stores/graphql-query' -import { getRecordsFound } from '@/helpers/get-records-found' export const listEdgeFunctions = async (filter) => { const payload = adapt(filter) @@ -15,6 +14,7 @@ export const listEdgeFunctions = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload @@ -42,7 +42,6 @@ const adapt = (filter) => { const adaptResponse = (response) => { const { body } = response - const totalRecords = body.data.edgeFunctionsEvents?.length const data = body.data.edgeFunctionsEvents?.map((edgeFunctionsEvents) => ({ id: generateCurrentTimestamp(), @@ -56,7 +55,6 @@ const adaptResponse = (response) => { })) return { - data, - recordsFound: getRecordsFound(totalRecords) + data } } diff --git a/src/services/real-time-events-service/edge-functions/load-edge-functions.js b/src/services/real-time-events-service/edge-functions/load-edge-functions.js index 56d904bf5..68b20291a 100644 --- a/src/services/real-time-events-service/edge-functions/load-edge-functions.js +++ b/src/services/real-time-events-service/edge-functions/load-edge-functions.js @@ -1,7 +1,7 @@ -import convertGQL from '@/helpers/convert-gql' +import { convertGQL } from '@/helpers/convert-gql' import { convertValueToDate } from '@/helpers/convert-date' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' export const loadEdgeFunctions = async (filter) => { @@ -10,6 +10,7 @@ export const loadEdgeFunctions = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload diff --git a/src/services/real-time-events-service/get-total-records.js b/src/services/real-time-events-service/get-total-records.js new file mode 100644 index 000000000..bcc859abc --- /dev/null +++ b/src/services/real-time-events-service/get-total-records.js @@ -0,0 +1,37 @@ +import { convertGQLTotalRecords } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '../axios/AxiosHttpClientSignalDecorator' +import { makeRealTimeEventsBaseUrl } from './make-real-time-events-service' +import { useGraphQLStore } from '@/stores/graphql-query' + +export const getTotalRecords = async ({ filter, dataset }) => { + const payload = adapt(filter, dataset) + const graphqlStore = useGraphQLStore() + graphqlStore.setQuery(payload) + + const decorator = new AxiosHttpClientSignalDecorator() + + const httpResponse = await decorator.request({ + url: makeRealTimeEventsBaseUrl(), + method: 'POST', + body: payload + }) + + return adaptResponse(httpResponse, dataset) +} + +const adapt = (filter, dataset) => { + const table = { + dataset: dataset, + limit: 10000, + fields: ['count'] + } + return convertGQLTotalRecords(filter, table) +} + +const adaptResponse = (httpResponse, dataset) => { + const { body } = httpResponse + const totalRecords = body.data[dataset][0].count + const formattedBR = new Intl.NumberFormat('pt-BR').format(totalRecords) + + return formattedBR +} diff --git a/src/services/real-time-events-service/http-request/list-http-request.js b/src/services/real-time-events-service/http-request/list-http-request.js index 4b76e16af..feb5f90b8 100644 --- a/src/services/real-time-events-service/http-request/list-http-request.js +++ b/src/services/real-time-events-service/http-request/list-http-request.js @@ -1,20 +1,19 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' import { generateCurrentTimestamp } from '@/helpers/generate-timestamp' import { convertValueToDate } from '@/helpers' import { useGraphQLStore } from '@/stores/graphql-query' -import { getRecordsFound } from '@/helpers/get-records-found' export const listHttpRequest = async (filter) => { const payload = adapt(filter) - const graphqlStore = useGraphQLStore() graphqlStore.setQuery(payload) const decorator = new AxiosHttpClientSignalDecorator() const httpResponse = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload @@ -35,7 +34,6 @@ const adapt = (filter) => { const adaptResponse = (httpResponse) => { const { body } = httpResponse - const totalRecords = body.data.httpEvents?.length const data = body.data.httpEvents?.map((httpEventItem) => ({ id: generateCurrentTimestamp(), @@ -50,7 +48,6 @@ const adaptResponse = (httpResponse) => { })) return { - data, - recordsFound: getRecordsFound(totalRecords) + data } } diff --git a/src/services/real-time-events-service/http-request/load-http-request.js b/src/services/real-time-events-service/http-request/load-http-request.js index d7152471e..bd0a207a5 100644 --- a/src/services/real-time-events-service/http-request/load-http-request.js +++ b/src/services/real-time-events-service/http-request/load-http-request.js @@ -1,6 +1,6 @@ -import convertGQL from '@/helpers/convert-gql' +import { convertGQL } from '@/helpers/convert-gql' import { convertValueToDate } from '@/helpers/convert-date' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' export const loadHttpRequest = async (filter) => { @@ -9,6 +9,7 @@ export const loadHttpRequest = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const httpResponse = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload diff --git a/src/services/real-time-events-service/image-processor/list-image-processor.js b/src/services/real-time-events-service/image-processor/list-image-processor.js index 0427f17b5..84f70e85a 100644 --- a/src/services/real-time-events-service/image-processor/list-image-processor.js +++ b/src/services/real-time-events-service/image-processor/list-image-processor.js @@ -1,10 +1,9 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' import { generateCurrentTimestamp } from '@/helpers/generate-timestamp' import { convertValueToDate } from '@/helpers' import { useGraphQLStore } from '@/stores/graphql-query' -import { getRecordsFound } from '@/helpers/get-records-found' export const listImageProcessor = async (filter) => { const payload = adapt(filter) @@ -15,6 +14,7 @@ export const listImageProcessor = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload @@ -44,7 +44,6 @@ const adapt = (filter) => { const adaptResponse = (response) => { const { body } = response - const totalRecords = body.data.imagesProcessedEvents?.length const data = body.data.imagesProcessedEvents?.map((imagesProcessedEvents) => ({ id: generateCurrentTimestamp(), @@ -60,7 +59,6 @@ const adaptResponse = (response) => { })) return { - data, - recordsFound: getRecordsFound(totalRecords) + data } } diff --git a/src/services/real-time-events-service/image-processor/load-image-processor.js b/src/services/real-time-events-service/image-processor/load-image-processor.js index 3611f2ffe..e1aaf487e 100644 --- a/src/services/real-time-events-service/image-processor/load-image-processor.js +++ b/src/services/real-time-events-service/image-processor/load-image-processor.js @@ -1,5 +1,5 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { convertValueToDate } from '@/helpers/convert-date' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' @@ -9,6 +9,7 @@ export const loadImageProcessor = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload diff --git a/src/services/real-time-events-service/index.js b/src/services/real-time-events-service/index.js index 5808f9d28..d3489f17c 100644 --- a/src/services/real-time-events-service/index.js +++ b/src/services/real-time-events-service/index.js @@ -7,7 +7,7 @@ import { listImageProcessor, loadImageProcessor } from './image-processor' import { listEdgeDNS, loadEdgeDNS } from './edge-dns' import { listTieredCache, loadTieredCache } from './tiered-cache' import { loadFieldsEventsData } from './load-fields-real-time-events-data' - +import { getTotalRecords } from './get-total-records' export { listActivityHistory, loadActivityHistory, @@ -25,5 +25,6 @@ export { loadEdgeDNS, listTieredCache, loadTieredCache, - loadFieldsEventsData + loadFieldsEventsData, + getTotalRecords } diff --git a/src/services/real-time-events-service/load-fields-real-time-events-data.js b/src/services/real-time-events-service/load-fields-real-time-events-data.js index 15facceb8..a7bdf7f74 100644 --- a/src/services/real-time-events-service/load-fields-real-time-events-data.js +++ b/src/services/real-time-events-service/load-fields-real-time-events-data.js @@ -10,6 +10,7 @@ import { AxiosHttpClientAdapter } from '../axios/AxiosHttpClientAdapter' */ export async function loadFieldsEventsData({ query, signal }) { const response = await AxiosHttpClientAdapter.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: { diff --git a/src/services/real-time-events-service/make-real-time-events-service.js b/src/services/real-time-events-service/make-real-time-events-service.js index 7312c7a78..5198b5a3d 100644 --- a/src/services/real-time-events-service/make-real-time-events-service.js +++ b/src/services/real-time-events-service/make-real-time-events-service.js @@ -1,3 +1,3 @@ export const makeRealTimeEventsBaseUrl = () => { - return 'v3/events/graphql' + return 'v4/events/graphql' } diff --git a/src/services/real-time-events-service/tiered-cache/list-tiered-cache.js b/src/services/real-time-events-service/tiered-cache/list-tiered-cache.js index 418f2ddb4..f9c6c5ee5 100644 --- a/src/services/real-time-events-service/tiered-cache/list-tiered-cache.js +++ b/src/services/real-time-events-service/tiered-cache/list-tiered-cache.js @@ -1,10 +1,9 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' import { generateCurrentTimestamp } from '@/helpers/generate-timestamp' import { convertValueToDate } from '@/helpers' import { useGraphQLStore } from '@/stores/graphql-query' -import { getRecordsFound } from '@/helpers/get-records-found' export const listTieredCache = async (filter) => { const payload = adapt(filter) @@ -15,6 +14,7 @@ export const listTieredCache = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload @@ -44,7 +44,6 @@ const adapt = (filter) => { const adaptResponse = (response) => { const { body } = response - const totalRecords = body.data.l2CacheEvents?.length const data = body.data.l2CacheEvents?.map((tieredCacheEvents) => ({ id: generateCurrentTimestamp(), @@ -63,7 +62,6 @@ const adaptResponse = (response) => { })) return { - data, - recordsFound: getRecordsFound(totalRecords) + data } } diff --git a/src/services/real-time-events-service/tiered-cache/load-tiered-cache.js b/src/services/real-time-events-service/tiered-cache/load-tiered-cache.js index 80bc45789..9438deca5 100644 --- a/src/services/real-time-events-service/tiered-cache/load-tiered-cache.js +++ b/src/services/real-time-events-service/tiered-cache/load-tiered-cache.js @@ -1,5 +1,5 @@ -import convertGQL from '@/helpers/convert-gql' -import { AxiosHttpClientSignalDecorator } from '../../axios/AxiosHttpClientSignalDecorator' +import { convertGQL } from '@/helpers/convert-gql' +import { AxiosHttpClientSignalDecorator } from '@/services/axios/AxiosHttpClientSignalDecorator' import { convertValueToDate } from '@/helpers/convert-date' import { makeRealTimeEventsBaseUrl } from '../make-real-time-events-service' @@ -9,6 +9,7 @@ export const loadTieredCache = async (filter) => { const decorator = new AxiosHttpClientSignalDecorator() const response = await decorator.request({ + baseURL: '/', url: makeRealTimeEventsBaseUrl(), method: 'POST', body: payload diff --git a/src/services/real-time-metrics-services/load-real-time-metrics-data.js b/src/services/real-time-metrics-services/load-real-time-metrics-data.js index a0320fc37..1ec1c09e4 100644 --- a/src/services/real-time-metrics-services/load-real-time-metrics-data.js +++ b/src/services/real-time-metrics-services/load-real-time-metrics-data.js @@ -10,6 +10,7 @@ import { AxiosHttpClientAdapter } from '../axios/AxiosHttpClientAdapter' */ export async function loadRealTimeMetricsData({ query, signal }) { const response = await AxiosHttpClientAdapter.request({ + baseURL: '/', url: makeBeholderBaseUrl(), method: 'POST', body: adapt(query), diff --git a/src/services/real-time-metrics-services/make-beholder-base-url.js b/src/services/real-time-metrics-services/make-beholder-base-url.js index f79e749b7..244915f8a 100644 --- a/src/services/real-time-metrics-services/make-beholder-base-url.js +++ b/src/services/real-time-metrics-services/make-beholder-base-url.js @@ -1,4 +1,3 @@ export const makeBeholderBaseUrl = () => { - const version = 'v3' - return `${version}/metrics/graphql` + return `v4/metrics/graphql` } diff --git a/src/services/waf-rules-services/list-waf-rules-tuning-service.js b/src/services/waf-rules-services/list-waf-rules-tuning-service.js index 42027ab0f..f294ad38a 100644 --- a/src/services/waf-rules-services/list-waf-rules-tuning-service.js +++ b/src/services/waf-rules-services/list-waf-rules-tuning-service.js @@ -5,7 +5,7 @@ import * as Errors from '@/services/axios/errors' export const listWafRulesTuningService = async ({ wafId, domains, network, hourRange, filter }) => { if (!wafId) { return parseHttpResponse({ - body: [], + body: { data: [], recordsFound: 0 }, statusCode: 200 }) } @@ -65,8 +65,8 @@ const adapt = (httpResponse) => { */ if (httpResponse.statusCode !== 200) return httpResponse - const isArray = Array.isArray(httpResponse.body.results) + const count = isArray ? httpResponse.body.results.length : 0 const parsedWafRulesTuning = isArray ? httpResponse.body.results.map((event, index) => { const values = { @@ -89,7 +89,7 @@ const adapt = (httpResponse) => { : [] return { - body: parsedWafRulesTuning, + body: { data: parsedWafRulesTuning, recordsFound: count }, statusCode: httpResponse.statusCode } } diff --git a/src/templates/list-table-block/with-selection-behavior.vue b/src/templates/list-table-block/with-selection-behavior.vue index dedb97f22..78fedc7ec 100644 --- a/src/templates/list-table-block/with-selection-behavior.vue +++ b/src/templates/list-table-block/with-selection-behavior.vue @@ -498,7 +498,7 @@ } } - defineExpose({ reload, data }) + defineExpose({ reload, data, handleExportTableDataToCSV }) const extractFieldValue = (rowData, field) => { return rowData[field] diff --git a/src/tests/helpers/convert-date.test.js b/src/tests/helpers/convert-date.test.js index cf08f6d89..bcc7db5e8 100644 --- a/src/tests/helpers/convert-date.test.js +++ b/src/tests/helpers/convert-date.test.js @@ -13,7 +13,7 @@ import { localeMock } from '../utils/localeMock' describe('convertDate', () => { it('should convert a given value to a date string in a specific format', () => { const value = '2022-01-01T00:00:00' - const expectedDate = 'January 1, 2022 at 12:00 AM' + const expectedDate = 'January 1, 2022 at 12:00:00 AM' expect(convertValueToDate(value)).toBe(expectedDate) }) diff --git a/src/tests/helpers/convert-gql.test.js b/src/tests/helpers/convert-gql.test.js index dfe508710..a799c8888 100644 --- a/src/tests/helpers/convert-gql.test.js +++ b/src/tests/helpers/convert-gql.test.js @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest' -import convertGQL from '@/helpers/convert-gql' +import { convertGQL } from '@/helpers/convert-gql' const fixtures = { table: { diff --git a/src/tests/helpers/events-playground-opener.test.js b/src/tests/helpers/events-playground-opener.test.js index 01ed03006..119351fd0 100644 --- a/src/tests/helpers/events-playground-opener.test.js +++ b/src/tests/helpers/events-playground-opener.test.js @@ -10,12 +10,12 @@ const scenarios = [ { label: 'should open a new window for the events playground in the prod environment', href: 'https://azion.com', - expected: 'https://manager.azion.com/events/graphql#query=undefined&variables=undefined' + expected: 'https://api.azion.com/v4/events/graphql#query=undefined&variables=undefined' }, { label: 'should open a new window for the events playground in the stage environment', href: 'http://localhost', - expected: 'https://manager.azion.com/events/graphql#query=undefined&variables=undefined' + expected: 'https://api.azion.com/v4/events/graphql#query=undefined&variables=undefined' } ] diff --git a/src/tests/helpers/get-static-urls-by-environment.test.js b/src/tests/helpers/get-static-urls-by-environment.test.js index 22a40abc9..9cacdeeef 100644 --- a/src/tests/helpers/get-static-urls-by-environment.test.js +++ b/src/tests/helpers/get-static-urls-by-environment.test.js @@ -53,17 +53,17 @@ const scenarios = [ { section: 'playgroundMetrics', env: 'development', - expected: 'https://stage-manager.azion.com/metrics/graphql' + expected: 'https://stage-api.azion.com/v4/metrics/graphql' }, { section: 'playgroundMetrics', env: 'stage', - expected: 'https://stage-manager.azion.com/metrics/graphql' + expected: 'https://stage-api.azion.com/v4/metrics/graphql' }, { section: 'playgroundMetrics', env: 'production', - expected: 'https://manager.azion.com/metrics/graphql' + expected: 'https://api.azion.com/v4/metrics/graphql' }, { section: 'helpCenter', diff --git a/src/tests/helpers/metrics-playground-opener.test.js b/src/tests/helpers/metrics-playground-opener.test.js index bf128f07e..30e669ee3 100644 --- a/src/tests/helpers/metrics-playground-opener.test.js +++ b/src/tests/helpers/metrics-playground-opener.test.js @@ -12,34 +12,29 @@ const makeSut = () => { const scenarios = [ { label: 'should open a new window to metrics playground in prod env', - href: 'https://azion.com', - expected: 'https://manager.azion.com/metrics/graphql' + environment: 'production', + expected: 'https://api.azion.com/v4/metrics/graphql' }, { label: 'should open a new window to metrics playground in stage env', - href: 'http://localhost', - expected: 'https://stage-manager.azion.com/metrics/graphql' + environment: 'stage', + expected: 'https://stage-api.azion.com/v4/metrics/graphql' } ] describe('metricsPlaygroundOpener', () => { afterAll(() => { - vi.unstubAllGlobals() + vi.restoreAllMocks() }) - - it.each(scenarios)('$label', ({ href, expected }) => () => { - vi.stubGlobal('window', { - open: (url) => url, - location: { - href - } - }) - - const openWindowSpy = vi.spyOn(window, 'open') + it.each(scenarios)('$label', async ({ environment, expected }) => { + vi.stubEnv('VITE_ENVIRONMENT', environment) + const mockWindowOpen = vi.fn() + vi.stubGlobal('window', { open: mockWindowOpen }) const { sut } = makeSut() - sut() + await sut() - expect(openWindowSpy).toHaveBeenCalledWith(expected, '_blank') + expect(mockWindowOpen).toHaveBeenCalledTimes(1) + expect(mockWindowOpen).toHaveBeenCalledWith(expected, '_blank') }) }) diff --git a/src/tests/modules/real-time-events/constants/tabs-events.test.js b/src/tests/modules/real-time-events/constants/tabs-events.test.js index 1bcf79635..609b243b7 100644 --- a/src/tests/modules/real-time-events/constants/tabs-events.test.js +++ b/src/tests/modules/real-time-events/constants/tabs-events.test.js @@ -61,48 +61,48 @@ describe('RealTimeEventsModule', () => { it('should have the correct columns for each tab', () => { const expectedColumns = { httpRequests: [ + 'tsFormat', 'configurationId', 'host', - 'requestUri', 'requestMethod', 'status', - 'tsFormat' + 'requestUri' ], edgeFunctions: [ + 'tsFormat', 'configurationId', 'functionLanguage', 'edgeFunctionsInitiatorTypeList', 'edgeFunctionsList', - 'edgeFunctionsTime', - 'tsFormat' + 'edgeFunctionsTime' ], edgeFunctionsConsole: [ + 'tsFormat', 'configurationId', 'functionId', 'lineSource', 'level', - 'line', - 'tsFormat' + 'line' ], imageProcessor: [ + 'tsFormat', 'configurationId', 'host', - 'requestUri', 'status', 'bytesSent', - 'tsFormat' + 'requestUri' ], tieredCache: [ + 'tsFormat', 'configurationId', 'host', - 'requestUri', 'requestMethod', 'upstreamCacheStatus', - 'tsFormat' + 'requestUri' ], - edgeDNS: ['level', 'zoneId', 'qtype', 'resolutionType', 'solutionId', 'tsFormat'], - dataStream: ['configurationId', 'jobName', 'endpointType', 'url', 'statusCode', 'tsFormat'], - activityHistory: ['userIp', 'authorName', 'title', 'resourceType', 'resourceId', 'tsFormat'] + edgeDNS: ['tsFormat', 'level', 'zoneId', 'qtype', 'resolutionType', 'solutionId'], + dataStream: ['tsFormat', 'configurationId', 'jobName', 'endpointType', 'url', 'statusCode'], + activityHistory: ['tsFormat', 'userIp', 'authorName', 'title', 'resourceType', 'resourceId'] } Object.entries(TABS_EVENTS).forEach(([tabName, tabData]) => { diff --git a/src/tests/services/billing-services/list-payment-history-service.test.js b/src/tests/services/billing-services/list-payment-history-service.test.js index 772b9cd5f..2ead99ad5 100644 --- a/src/tests/services/billing-services/list-payment-history-service.test.js +++ b/src/tests/services/billing-services/list-payment-history-service.test.js @@ -4,7 +4,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { localeMock } from '@/tests/utils/localeMock' import { getStaticUrlsByEnvironment } from '@/helpers' import { useAccountStore } from '@/stores/account' -import graphQLApi from '@/services/axios/makeGraphQl' import { getLastDayMonth } from '@/helpers/payment-history' const fixtures = { @@ -128,12 +127,12 @@ describe('BillingServices', () => { const { sut } = makeSut() await sut() - expect(requestSpy).toHaveBeenCalledWith( - { - url: 'accounting', - method: 'POST', - body: { - query: ` + expect(requestSpy).toHaveBeenCalledWith({ + url: 'v4/accounting/graphql', + method: 'POST', + baseURL: '/', + body: { + query: ` query { accountingDetail ( filter: { @@ -152,10 +151,8 @@ describe('BillingServices', () => { metricSlug } }` - } - }, - graphQLApi - ) + } + }) }) it('should parse correctly payment history for regular accounts', async () => { diff --git a/src/tests/services/billing-services/load-your-service-plan-service.test.js b/src/tests/services/billing-services/load-your-service-plan-service.test.js index fa7dc2cf6..f00640987 100644 --- a/src/tests/services/billing-services/load-your-service-plan-service.test.js +++ b/src/tests/services/billing-services/load-your-service-plan-service.test.js @@ -1,7 +1,6 @@ import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter' import { loadYourServicePlanService } from '@/services/billing-services' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import graphQLApi from '@/services/axios/makeGraphQl' const fixtures = { paymentMock: { @@ -66,14 +65,12 @@ describe('BillingService', () => { } }` } - expect(requestSpy).toHaveBeenCalledWith( - { - url: '/billing', - method: 'POST', - body: payload - }, - graphQLApi - ) + expect(requestSpy).toHaveBeenCalledWith({ + url: 'v4/billing/graphql', + method: 'POST', + baseURL: '/', + body: payload + }) }) it('should return correct credit amount in the disclaimer message', async () => { vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({ diff --git a/src/tests/services/billing-services/make-billing-base-url.test.js b/src/tests/services/billing-services/make-billing-base-url.test.js index ad09fe64a..185475731 100644 --- a/src/tests/services/billing-services/make-billing-base-url.test.js +++ b/src/tests/services/billing-services/make-billing-base-url.test.js @@ -12,7 +12,7 @@ const makeSut = () => { describe('BillingServices', () => { it('should return the API base url to billing service', () => { const { sut } = makeSut() - const correctApiUrl = 'billing' + const correctApiUrl = 'v4/billing/graphql' const baseUrl = sut() diff --git a/src/tests/services/real-time-events-service/activity-history/list-activity-history.test.js b/src/tests/services/real-time-events-service/activity-history/list-activity-history.test.js index ab37990c6..f26812486 100644 --- a/src/tests/services/real-time-events-service/activity-history/list-activity-history.test.js +++ b/src/tests/services/real-time-events-service/activity-history/list-activity-history.test.js @@ -64,9 +64,10 @@ describe('ActivityHistoryServices', () => { ].join('\n') expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query, variables: { @@ -101,10 +102,9 @@ describe('ActivityHistoryServices', () => { resourceId: fixtures.activityHistory.resourceId, userId: fixtures.activityHistory.userId, ts: fixtures.activityHistory.ts, - tsFormat: 'February 23, 2024 at 06:07 PM' + tsFormat: 'February 23, 2024 at 06:07:25 PM' } - ], - recordsFound: '1' + ] }) }) }) diff --git a/src/tests/services/real-time-events-service/activity-history/load-activity-history.test.js b/src/tests/services/real-time-events-service/activity-history/load-activity-history.test.js index 695933389..7b27b165c 100644 --- a/src/tests/services/real-time-events-service/activity-history/load-activity-history.test.js +++ b/src/tests/services/real-time-events-service/activity-history/load-activity-history.test.js @@ -42,9 +42,10 @@ describe('ActivityHistoryServices', () => { await sut(fixtures.filter) expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query: expect.any(String), variables: { @@ -74,7 +75,7 @@ describe('ActivityHistoryServices', () => { userId: fixtures.activityHistory.userId, title: fixtures.activityHistory.title, comment: fixtures.activityHistory.comment, - ts: 'February 23, 2024 at 06:07 PM' + ts: 'February 23, 2024 at 06:07:25 PM' }) }) }) diff --git a/src/tests/services/real-time-events-service/data-stream/list-data-stream.test.js b/src/tests/services/real-time-events-service/data-stream/list-data-stream.test.js index 0672100b0..d38cef6ba 100644 --- a/src/tests/services/real-time-events-service/data-stream/list-data-stream.test.js +++ b/src/tests/services/real-time-events-service/data-stream/list-data-stream.test.js @@ -70,9 +70,10 @@ describe('DataStreamingServices', () => { ].join('\n') expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query, variables: { @@ -111,10 +112,9 @@ describe('DataStreamingServices', () => { dataStreamed: fixtures.dataStreaming.dataStreamed, source: fixtures.dataStreaming.source, streamedLines: fixtures.dataStreaming.streamedLines, - tsFormat: 'February 23, 2024 at 06:07 PM' + tsFormat: 'February 23, 2024 at 06:07:25 PM' } - ], - recordsFound: '1' + ] }) }) }) diff --git a/src/tests/services/real-time-events-service/data-stream/load-data-stream.test.js b/src/tests/services/real-time-events-service/data-stream/load-data-stream.test.js index 2ecae4334..f81ee3aa2 100644 --- a/src/tests/services/real-time-events-service/data-stream/load-data-stream.test.js +++ b/src/tests/services/real-time-events-service/data-stream/load-data-stream.test.js @@ -42,9 +42,10 @@ describe('DataStreamingServices', () => { await sut(fixtures.filter) expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query: expect.any(String), variables: { @@ -78,7 +79,7 @@ describe('DataStreamingServices', () => { source: fixtures.dataStreaming.source, statusCode: fixtures.dataStreaming.statusCode, streamedLines: fixtures.dataStreaming.streamedLines, - ts: 'February 23, 2024 at 06:07 PM' + ts: 'February 23, 2024 at 06:07:25 PM' }) }) }) diff --git a/src/tests/services/real-time-events-service/edge-dns/list-edge-dns.test.js b/src/tests/services/real-time-events-service/edge-dns/list-edge-dns.test.js index f34e75745..fdea5665f 100644 --- a/src/tests/services/real-time-events-service/edge-dns/list-edge-dns.test.js +++ b/src/tests/services/real-time-events-service/edge-dns/list-edge-dns.test.js @@ -65,9 +65,10 @@ describe('edgeDns', () => { ].join('\n') expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query, variables: { @@ -105,12 +106,11 @@ describe('edgeDns', () => { source: fixtures.edgeDns.source, solutionId: fixtures.edgeDns.solutionId, ts: fixtures.edgeDns.ts, - tsFormat: 'February 23, 2024 at 06:07 PM', + tsFormat: 'February 23, 2024 at 06:07:25 PM', uuid: fixtures.edgeDns.uuid, zoneId: fixtures.edgeDns.zoneId } - ], - recordsFound: '1' + ] }) }) }) diff --git a/src/tests/services/real-time-events-service/edge-dns/load-edge-dns.test.js b/src/tests/services/real-time-events-service/edge-dns/load-edge-dns.test.js index 768f94672..90077e42c 100644 --- a/src/tests/services/real-time-events-service/edge-dns/load-edge-dns.test.js +++ b/src/tests/services/real-time-events-service/edge-dns/load-edge-dns.test.js @@ -42,9 +42,10 @@ describe('ImageProcessorServices', () => { await sut(fixtures.filter) expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query: expect.any(String), variables: { diff --git a/src/tests/services/real-time-events-service/edge-functions-console/list-edge-functions-console.test.js b/src/tests/services/real-time-events-service/edge-functions-console/list-edge-functions-console.test.js index 4a85fc049..f87b768e8 100644 --- a/src/tests/services/real-time-events-service/edge-functions-console/list-edge-functions-console.test.js +++ b/src/tests/services/real-time-events-service/edge-functions-console/list-edge-functions-console.test.js @@ -64,9 +64,10 @@ describe('EdgeFunctionsConsoleServices', () => { ].join('\n') expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query, variables: { @@ -105,10 +106,9 @@ describe('EdgeFunctionsConsoleServices', () => { lineSource: { content: fixtures.edgeFunctionConsole.lineSource, severity: 'info' }, source: fixtures.edgeFunctionConsole.source, ts: fixtures.edgeFunctionConsole.ts, - tsFormat: 'February 23, 2024 at 06:07 PM' + tsFormat: 'February 23, 2024 at 06:07:25 PM' } - ], - recordsFound: '1' + ] }) }) }) diff --git a/src/tests/services/real-time-events-service/edge-functions-console/load-edge-functions-console.test.js b/src/tests/services/real-time-events-service/edge-functions-console/load-edge-functions-console.test.js index 80ec61389..4b7a3c2bd 100644 --- a/src/tests/services/real-time-events-service/edge-functions-console/load-edge-functions-console.test.js +++ b/src/tests/services/real-time-events-service/edge-functions-console/load-edge-functions-console.test.js @@ -42,9 +42,10 @@ describe('EdgeFunctionsConsoleServices', () => { await sut(fixtures.filter) expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query: expect.any(String), variables: { @@ -79,7 +80,7 @@ describe('EdgeFunctionsConsoleServices', () => { lineSource: fixtures.edgeFunctionConsole.lineSource, solutionId: fixtures.edgeFunctionConsole.solutionId, source: fixtures.edgeFunctionConsole.source, - ts: 'February 23, 2024 at 06:07 PM' + ts: 'February 23, 2024 at 06:07:25 PM' }) }) }) diff --git a/src/tests/services/real-time-events-service/edge-functions/list-edge-functions.test.js b/src/tests/services/real-time-events-service/edge-functions/list-edge-functions.test.js index 8d0af41ca..340725a80 100644 --- a/src/tests/services/real-time-events-service/edge-functions/list-edge-functions.test.js +++ b/src/tests/services/real-time-events-service/edge-functions/list-edge-functions.test.js @@ -61,9 +61,10 @@ describe('EdgeFunctionsServices', () => { ].join('\n') expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query, variables: { @@ -97,10 +98,9 @@ describe('EdgeFunctionsServices', () => { edgeFunctionsList: ['function-1', ' function-2', ' function-3'], edgeFunctionsTime: `${fixtures.edgeFunction.edgeFunctionsTime}ms`, ts: fixtures.edgeFunction.ts, - tsFormat: 'February 23, 2024 at 06:07 PM' + tsFormat: 'February 23, 2024 at 06:07:25 PM' } - ], - recordsFound: '1' + ] }) }) }) diff --git a/src/tests/services/real-time-events-service/edge-functions/load-edge-functions.test.js b/src/tests/services/real-time-events-service/edge-functions/load-edge-functions.test.js index 286a5400c..0b757769f 100644 --- a/src/tests/services/real-time-events-service/edge-functions/load-edge-functions.test.js +++ b/src/tests/services/real-time-events-service/edge-functions/load-edge-functions.test.js @@ -43,9 +43,10 @@ describe('DataStreamingServices', () => { await sut(fixtures.filter) expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query: expect.any(String), variables: { @@ -78,7 +79,7 @@ describe('DataStreamingServices', () => { functionLanguage: fixtures.edgeFunction.functionLanguage, source: fixtures.edgeFunction.source, virtualHostId: fixtures.edgeFunction.virtualhostid, - ts: 'February 23, 2024 at 06:07 PM' + ts: 'February 23, 2024 at 06:07:25 PM' }) }) }) diff --git a/src/tests/services/real-time-events-service/get-total-records.test.js b/src/tests/services/real-time-events-service/get-total-records.test.js new file mode 100644 index 000000000..518daac6a --- /dev/null +++ b/src/tests/services/real-time-events-service/get-total-records.test.js @@ -0,0 +1,85 @@ +import { AxiosHttpClientAdapter } from '@/services/axios/AxiosHttpClientAdapter' +import { getTotalRecords } from '@/services/real-time-events-service/get-total-records' +import { describe, expect, it, vi } from 'vitest' + +const fixtures = { + filter: { + tsRange: { + meta: { option: '1' }, + tsRangeBegin: '2024-02-23T18:07:25', + tsRangeEnd: '2024-02-23T19:07:25' + } + }, + httpRequest: { + count: 100000 + } +} + +const makeSut = () => { + const sut = getTotalRecords + + return { + sut + } +} + +describe('getTotalRecords', () => { + it('should call GraphQL with correct filter', async () => { + const requestSpy = vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({ + statusCode: 200, + body: { data: { events: [{ count: 0 }] } } + }) + const { sut } = makeSut() + const datasetName = 'events' + await sut({ filter: fixtures.filter, dataset: datasetName }) + + const query = [ + `query (`, + `\t$tsRange_begin: DateTime!`, + `\t$tsRange_end: DateTime!`, + `) {`, + `\t${datasetName} (`, + `\t\tlimit: 10000`, + `\t\taggregate: {`, + `count: rows`, + `\t\t}`, + `\t\tfilter: {`, + `\t\t\ttsRange: { begin: $tsRange_begin, end: $tsRange_end }`, + `\t\t}`, + `\t) {`, + `\t\tcount`, + `\t}`, + `}` + ].join('\n') + + expect(requestSpy).toHaveBeenCalledWith({ + url: 'v4/events/graphql', + method: 'POST', + signal: undefined, + body: { + query, + variables: { + tsRange_begin: '2024-02-23T18:07:25', + tsRange_end: '2024-02-23T19:07:25' + } + }, + headers: undefined + }) + }) + + it('should parsed correctly each event', async () => { + vi.mock('@/helpers/generate-timestamp', () => ({ + generateCurrentTimestamp: () => 'mocked-timestamp' + })) + vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({ + statusCode: 200, + body: { data: { httpEvents: [fixtures.httpRequest] } } + }) + const datasetName = 'httpEvents' + + const { sut } = makeSut() + const response = await sut({ filter: fixtures.filter, dataset: datasetName }) + + expect(response).toEqual('100.000') + }) +}) diff --git a/src/tests/services/real-time-events-service/http-request/list-http-request.test.js b/src/tests/services/real-time-events-service/http-request/list-http-request.test.js index e53fc61d1..7f0ac52ff 100644 --- a/src/tests/services/real-time-events-service/http-request/list-http-request.test.js +++ b/src/tests/services/real-time-events-service/http-request/list-http-request.test.js @@ -63,9 +63,10 @@ describe('HttpRequestServices', () => { ].join('\n') expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query, variables: { @@ -100,10 +101,9 @@ describe('HttpRequestServices', () => { host: fixtures.httpRequest.host, requestId: fixtures.httpRequest.requestId, ts: fixtures.httpRequest.ts, - tsFormat: 'February 23, 2024 at 06:07 PM' + tsFormat: 'February 23, 2024 at 06:07:25 PM' } - ], - recordsFound: '1' + ] }) }) }) diff --git a/src/tests/services/real-time-events-service/http-request/load-http-request.test.js b/src/tests/services/real-time-events-service/http-request/load-http-request.test.js index 38ee14ecf..56d34db76 100644 --- a/src/tests/services/real-time-events-service/http-request/load-http-request.test.js +++ b/src/tests/services/real-time-events-service/http-request/load-http-request.test.js @@ -69,9 +69,10 @@ describe('HttpRequestServices', () => { await sut(fixtures.filter) expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query: expect.any(String), variables: { @@ -120,7 +121,7 @@ describe('HttpRequestServices', () => { serverProtocol: undefined, upstreamCacheStatus: undefined, tcpinfoRtt: fixtures.httpRequest.tcpinfoRtt, - ts: 'February 23, 2024 at 06:07 PM', + ts: 'February 23, 2024 at 06:07:25 PM', upstreamAddr: fixtures.httpRequest.upstreamAddr, upstreamBytesReceived: fixtures.httpRequest.upstreamBytesReceived, upstreamBytesSent: fixtures.httpRequest.upstreamBytesSent, diff --git a/src/tests/services/real-time-events-service/image-processor/list-image-processor.test.js b/src/tests/services/real-time-events-service/image-processor/list-image-processor.test.js index 3fcaf0ff5..01942f87f 100644 --- a/src/tests/services/real-time-events-service/image-processor/list-image-processor.test.js +++ b/src/tests/services/real-time-events-service/image-processor/list-image-processor.test.js @@ -66,9 +66,10 @@ describe('ImageProcessorServices', () => { ].join('\n') expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query, variables: { @@ -104,10 +105,9 @@ describe('ImageProcessorServices', () => { httpReferer: fixtures.imageProcessor.httpReferer, httpUserAgent: fixtures.imageProcessor.httpUserAgent, ts: fixtures.imageProcessor.ts, - tsFormat: 'February 23, 2024 at 06:07 PM' + tsFormat: 'February 23, 2024 at 06:07:25 PM' } - ], - recordsFound: '1' + ] }) }) }) diff --git a/src/tests/services/real-time-events-service/image-processor/load-image-processor.test.js b/src/tests/services/real-time-events-service/image-processor/load-image-processor.test.js index 15d6c8870..ae8cd6529 100644 --- a/src/tests/services/real-time-events-service/image-processor/load-image-processor.test.js +++ b/src/tests/services/real-time-events-service/image-processor/load-image-processor.test.js @@ -58,9 +58,10 @@ describe('ImageProcessorServices', () => { await sut(fixtures.filter) expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query: expect.any(String), variables: { @@ -101,7 +102,7 @@ describe('ImageProcessorServices', () => { sslSessionReused: fixtures.imageProcessor.sslSessionReused, status: fixtures.imageProcessor.status, tcpinfoRtt: fixtures.imageProcessor.tcpinfoRtt, - ts: 'February 23, 2024 at 06:07 PM', + ts: 'February 23, 2024 at 06:07:25 PM', upstreamCacheStatus: fixtures.imageProcessor.upstreamCacheStatus, upstreamResponseTime: fixtures.imageProcessor.upstreamResponseTime, upstreamResponseTimeStr: fixtures.imageProcessor.upstreamResponseTimeStr, diff --git a/src/tests/services/real-time-events-service/tiered-cache/list-tiered-cache.test.js b/src/tests/services/real-time-events-service/tiered-cache/list-tiered-cache.test.js index b77678742..081558df5 100644 --- a/src/tests/services/real-time-events-service/tiered-cache/list-tiered-cache.test.js +++ b/src/tests/services/real-time-events-service/tiered-cache/list-tiered-cache.test.js @@ -65,9 +65,10 @@ describe('tieredCacheServices', () => { ].join('\n') expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query, variables: { @@ -106,10 +107,9 @@ describe('tieredCacheServices', () => { proxyHost: fixtures.tieredCache.proxyHost, source: fixtures.tieredCache.source, ts: fixtures.tieredCache.ts, - tsFormat: 'February 23, 2024 at 06:07 PM' + tsFormat: 'February 23, 2024 at 06:07:25 PM' } - ], - recordsFound: '1' + ] }) }) }) diff --git a/src/tests/services/real-time-events-service/tiered-cache/load-tiered-cache.test.js b/src/tests/services/real-time-events-service/tiered-cache/load-tiered-cache.test.js index 5fe961b7c..5c764d50f 100644 --- a/src/tests/services/real-time-events-service/tiered-cache/load-tiered-cache.test.js +++ b/src/tests/services/real-time-events-service/tiered-cache/load-tiered-cache.test.js @@ -64,9 +64,10 @@ describe('tieredCacheServices', () => { await sut(fixtures.filter) expect(requestSpy).toHaveBeenCalledWith({ - url: 'v3/events/graphql', + url: 'v4/events/graphql', method: 'POST', signal: undefined, + baseURL: '/', body: { query: expect.any(String), variables: { @@ -111,7 +112,7 @@ describe('tieredCacheServices', () => { solution: fixtures.tieredCache.solution, status: fixtures.tieredCache.status, tcpinfoRtt: fixtures.tieredCache.tcpinfoRtt, - ts: 'February 23, 2024 at 06:07 PM', + ts: 'February 23, 2024 at 06:07:25 PM', upstreamBytesReceived: fixtures.tieredCache.upstreamBytesReceived, upstreamBytesReceivedStr: fixtures.tieredCache.upstreamBytesReceivedStr, upstreamCacheStatus: fixtures.tieredCache.upstreamCacheStatus, diff --git a/src/tests/services/real-time-metrics-services/load-real-time-metrics-data.test.js b/src/tests/services/real-time-metrics-services/load-real-time-metrics-data.test.js index 3bf16a001..9673c274a 100644 --- a/src/tests/services/real-time-metrics-services/load-real-time-metrics-data.test.js +++ b/src/tests/services/real-time-metrics-services/load-real-time-metrics-data.test.js @@ -27,13 +27,14 @@ describe('RealTimeMetricsServices', () => { }) const { sut } = makeSut() - const version = 'v3' + const version = 'v4' await sut({ query: fixtures.query, signal: fixtures.signal }) expect(requestSpy).toHaveBeenCalledWith({ url: `${version}/metrics/graphql`, method: 'POST', + baseURL: '/', body: fixtures.formattedQuery, signal: fixtures.signal }) diff --git a/src/tests/services/real-time-metrics-services/make-beholder-base-url.test.js b/src/tests/services/real-time-metrics-services/make-beholder-base-url.test.js index 332effd18..f7971c5bf 100644 --- a/src/tests/services/real-time-metrics-services/make-beholder-base-url.test.js +++ b/src/tests/services/real-time-metrics-services/make-beholder-base-url.test.js @@ -12,7 +12,7 @@ const makeSut = () => { describe('RealTimeMetricsServices', () => { it('should return the API base url to beholder service', () => { const { sut } = makeSut() - const version = 'v3' + const version = 'v4' const beholderUrl = `${version}/metrics/graphql` const baseUrl = sut() diff --git a/src/tests/services/waf-rules-services/list-waf-rules-tuning-service.test.js b/src/tests/services/waf-rules-services/list-waf-rules-tuning-service.test.js index 62c4993dc..8653c26db 100644 --- a/src/tests/services/waf-rules-services/list-waf-rules-tuning-service.test.js +++ b/src/tests/services/waf-rules-services/list-waf-rules-tuning-service.test.js @@ -61,22 +61,25 @@ describe('WafRulesService', () => { const result = await sut(fixtures.payload) - expect(result).toEqual([ - { - hitCount: fixtures.wafRulesMock.hit_count, - topIps: fixtures?.wafRulesMock?.top_10_ips?.[0]?.[1] || '', - ruleId: fixtures.wafRulesMock.rule_id, - id: `${fixtures.wafRulesMock.rule_id}0`, - ruleIdDescription: `${fixtures.wafRulesMock.rule_id} - ${fixtures.wafRulesMock.rule_description}`, - ipCount: fixtures.wafRulesMock.ip_count, - matchZone: fixtures.wafRulesMock.match_zone, - pathCount: fixtures.wafRulesMock.path_count, - topCountries: fixtures?.wafRulesMock?.top_10_countries?.[0]?.[1] || '', - matchesOn: fixtures.wafRulesMock.matches_on, - ruleDescription: fixtures.wafRulesMock.rule_description, - countryCount: fixtures.wafRulesMock.country_count - } - ]) + expect(result).toEqual({ + data: [ + { + hitCount: fixtures.wafRulesMock.hit_count, + topIps: fixtures?.wafRulesMock?.top_10_ips?.[0]?.[1] || '', + ruleId: fixtures.wafRulesMock.rule_id, + id: `${fixtures.wafRulesMock.rule_id}0`, + ruleIdDescription: `${fixtures.wafRulesMock.rule_id} - ${fixtures.wafRulesMock.rule_description}`, + ipCount: fixtures.wafRulesMock.ip_count, + matchZone: fixtures.wafRulesMock.match_zone, + pathCount: fixtures.wafRulesMock.path_count, + topCountries: fixtures?.wafRulesMock?.top_10_countries?.[0]?.[1] || '', + matchesOn: fixtures.wafRulesMock.matches_on, + ruleDescription: fixtures.wafRulesMock.rule_description, + countryCount: fixtures.wafRulesMock.country_count + } + ], + recordsFound: 1 + }) }) it('should return empty data when the values in the parameter are not passed in ', async () => { vi.spyOn(AxiosHttpClientAdapter, 'request').mockResolvedValueOnce({ @@ -87,7 +90,10 @@ describe('WafRulesService', () => { const result = await sut({}) - expect(result).toEqual([]) + expect(result).toEqual({ + data: [], + recordsFound: 0 + }) }) it('Should return an API error for an 400 response status', async () => { diff --git a/src/views/Home/HomeView.vue b/src/views/Home/HomeView.vue index 15d86ade0..a49f753f2 100644 --- a/src/views/Home/HomeView.vue +++ b/src/views/Home/HomeView.vue @@ -12,6 +12,9 @@ import DialogOnboardingScheduling from '@/templates/dialogs-block/dialog-onboarding-scheduling.vue' import CreateFormBlock from '@/templates/create-form-block' import { useLayout } from '@/composables/use-layout' + import InlineMessage from 'primevue/inlinemessage' + import { getStaticUrlsByEnvironment } from '@/helpers' + /**@type {import('@/plugins/analytics/AnalyticsTrackerAdapter').AnalyticsTrackerAdapter} */ const tracker = inject('tracker') @@ -39,7 +42,7 @@ const router = useRouter() const route = useRoute() const dialog = useDialog() - const { accountData } = useAccountStore() + const { accountData, isBannerVisible } = useAccountStore() const user = accountData const teams = ref([]) @@ -113,6 +116,12 @@ } } + const openRTM = async () => { + const urlEOL = getStaticUrlsByEnvironment('managerEOL') + await tracker.product.clickedTo({ target: 'RTM' }).track() + window.location.href = `${urlEOL}?disableRedirect=true` + } + onMounted(async () => { teams.value = await props.listTeamsService() showOnboardingSchedulingDialog() @@ -126,6 +135,25 @@