Skip to content

Commit

Permalink
forms audit worker
Browse files Browse the repository at this point in the history
  • Loading branch information
Rahul Kumar Singh authored and Rahul Kumar Singh committed Nov 19, 2024
1 parent ee9578b commit c4df5a6
Show file tree
Hide file tree
Showing 5 changed files with 293 additions and 180 deletions.
33 changes: 24 additions & 9 deletions src/forms/handler.js → src/forms-opportunities/handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,48 @@
*/

import RUMAPIClient from '@adobe/spacecat-shared-rum-api-client';
import { getRUMDomainkey, getRUMUrl } from '../support/utils.js';
import { getRUMDomainkey } from '../support/utils.js';
import { AuditBuilder } from '../common/audit-builder.js';
import { wwwUrlResolver } from '../common/audit.js';

const DAILY_THRESHOLD = 1000;
const DAILY_THRESHOLD = 200;
const INTERVAL = 7; // days
const FORMS_OPPTY_QUERIES = [
'cwv',
'form-vitals',
];

export async function formsAuditRunner(auditUrl, context, site) {
const { log } = context;
const finalUrl = await getRUMUrl(auditUrl);
const rumAPIClient = RUMAPIClient.createFrom(context);
const domainkey = await getRUMDomainkey(site.getBaseURL(), context, auditUrl, log);
const domainkey = await getRUMDomainkey(site.getBaseURL(), context);
const options = {
domain: finalUrl,
domain: auditUrl,
domainkey,
interval: INTERVAL,
granularity: 'hourly',
};

const formsAuditLinks = await rumAPIClient.query('form-vitals', options);
const formsAuditLinks = await rumAPIClient.queryMulti(FORMS_OPPTY_QUERIES, options);
const cwvMap = new Map(
formsAuditLinks.cwv.map((cwv) => [cwv.url, cwv]),
);

const auditResult = {
formVitals: formsAuditLinks.filter((data) => {
formVitals: formsAuditLinks['form-vitals'].filter((data) => {
// Calculate the sum of all values inside the `pageview` object
// eslint-disable-next-line max-len
const pageviewsSum = Object.values(data.pageview).reduce((sum, value) => sum + value, 0);
return pageviewsSum >= DAILY_THRESHOLD * INTERVAL;
}),
})
.map((formVital) => {
const cwvData = cwvMap.get(formVital.url);
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { url, pageviews, ...filteredCwvData } = cwvData || {};
return {
...formVital,
cwv: filteredCwvData, // Append cwv data
};
}),
auditContext: {
interval: INTERVAL,
},
Expand Down
24 changes: 10 additions & 14 deletions test/audits/forms.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@ import sinon from 'sinon';
import sinonChai from 'sinon-chai';
import nock from 'nock';
import { createSite } from '@adobe/spacecat-shared-data-access/src/models/site.js';
import { formsAuditRunner } from '../../src/forms/handler.js';
import { formsAuditRunner } from '../../src/forms-opportunities/handler.js';
import { MockContextBuilder } from '../shared.js';
import { formVitalsData } from '../fixtures/form-vitals-data.js';
import formVitalsData from '../fixtures/formvitalsdata.json' with { type: 'json' };
import expectedFormVitalsData from '../fixtures/expectedformvitalsdata.json' with { type: 'json' };

use(sinonChai);

const sandbox = sinon.createSandbox();

const baseURL = 'https://example.com';
const auditUrl = 'www.example.com';

describe('Forms Vitals audit', () => {
const site = createSite({ baseURL });
Expand All @@ -37,7 +37,7 @@ describe('Forms Vitals audit', () => {
runtime: { name: 'aws-lambda', region: 'us-east-1' },
func: { package: 'spacecat-services', version: 'ci', name: 'test' },
rumApiClient: {
query: sinon.stub().resolves(formVitalsData),
queryMulti: sinon.stub().resolves(formVitalsData),
},
})
.build();
Expand All @@ -58,25 +58,21 @@ describe('Forms Vitals audit', () => {
});

it('form vitals audit runs rum api client formVitals query', async () => {
const FORMS_OPPTY_QUERIES = [
'cwv',
'form-vitals',
];
const result = await formsAuditRunner(
'www.example.com',
context,
site,
);
expect(context.rumApiClient.query).calledWith('form-vitals', {
expect(context.rumApiClient.queryMulti).calledWith(FORMS_OPPTY_QUERIES, {
domain: 'www.example.com',
domainkey: 'test-key',
interval: 7,
granularity: 'hourly',
});
expect(result).to.deep.equal({
auditResult: {
formVitals: formVitalsData,
auditContext: {
interval: 7,
},
},
fullAuditRef: auditUrl,
});
expect(result).to.deep.equal(expectedFormVitalsData);
});
});
92 changes: 92 additions & 0 deletions test/fixtures/expectedformvitalsdata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
{
"auditResult": {
"auditContext": {
"interval": 7
},
"formVitals": [
{
"cwv": {
"cls": 0.006370692308102836,
"clsCount": 49,
"inp": 142,
"inpCount": 46,
"lcp": 3797.25,
"lcpCount": 64,
"ttfb": 1542.25,
"ttfbCount": 184
},
"formengagement": {
"desktop:windows": 100
},
"formsubmit": {},
"formview": {},
"pageview": {
"desktop:windows": 7898
},
"url": "https://business.adobe.com/se/resources/main.html"
},
{
"cwv": {
"cls": 0.006370692308102836,
"clsCount": 49,
"inp": 142,
"inpCount": 46,
"lcp": 3797.25,
"lcpCount": 64,
"ttfb": 1542.25,
"ttfbCount": 184
},
"formengagement": {},
"formsubmit": {},
"formview": {
"desktop:mac": 100
},
"pageview": {
"desktop:linux": 2200,
"desktop:mac": 100,
"desktop:windows": 5890
},
"url": "https://business.adobe.com/jp/products/magento/magento-commerce.html"
},
{
"cwv": {},
"formengagement": {
"desktop:windows": 100
},
"formsubmit": {},
"formview": {},
"pageview": {
"desktop:mac": 6789,
"desktop:windows": 1900,
"mobile:android": 300,
"mobile:ios": 100
},
"url": "https://business.adobe.com/"
},
{
"cwv": {
"cls": 0.0036327945232344965,
"clsCount": 31,
"inp": 40,
"inpCount": 19,
"lcp": 1239,
"lcpCount": 45,
"ttfb": 477,
"ttfbCount": 79
},
"formengagement": {
"desktop:windows": 200
},
"formsubmit": {
"desktop:windows": 200
},
"formview": {},
"pageview": {
"desktop:windows": 8000
},
"url": "https://business.adobe.com/jp/resources/guides/leading-generative-ai-deployment-for-marketing.html"
}
]
},
"fullAuditRef": "www.example.com"
}
157 changes: 0 additions & 157 deletions test/fixtures/form-vitals-data.js

This file was deleted.

Loading

0 comments on commit c4df5a6

Please sign in to comment.