From 78445cc3e8edbb74e139ba84ad51a3e5bb58aacb Mon Sep 17 00:00:00 2001 From: IvoPaunov Date: Mon, 16 Dec 2024 11:41:42 +0200 Subject: [PATCH 01/14] add dsp stats data, action and admin tab --- src/components/AdminPanel/AdminPanel.tsx | 6 +++ src/components/AdminPanel/DspStats.tsx | 15 +++++++ src/contexts/AdminContext/AdminContext.tsx | 46 +++++++++++++++++++++- src/types/dspStats.ts | 17 ++++++++ 4 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/components/AdminPanel/DspStats.tsx create mode 100644 src/types/dspStats.ts diff --git a/src/components/AdminPanel/AdminPanel.tsx b/src/components/AdminPanel/AdminPanel.tsx index d31bf23f..b9f2c4fa 100644 --- a/src/components/AdminPanel/AdminPanel.tsx +++ b/src/components/AdminPanel/AdminPanel.tsx @@ -7,6 +7,7 @@ import Invoices from 'components/Billing/Invoices' import AdminAnalytics from './AdminAnalytics' import Accounts from './Accounts' import SSPsAnalytics from './SSPsAnalytics' +import DspStats from './DspStats' // import { AccountDetails } from './AccountDetails' const AdminPanel = () => { @@ -28,6 +29,7 @@ const AdminPanel = () => { Invoices Validator Analytics SSPs Analytics + DSP stats Accounts Account details @@ -51,6 +53,10 @@ const AdminPanel = () => { + + + + diff --git a/src/components/AdminPanel/DspStats.tsx b/src/components/AdminPanel/DspStats.tsx new file mode 100644 index 00000000..695184aa --- /dev/null +++ b/src/components/AdminPanel/DspStats.tsx @@ -0,0 +1,15 @@ +import { Stack } from '@mantine/core' +import useAdmin from 'hooks/useAdmin' +import { useEffect } from 'react' + +const DspStats = () => { + const { dspStats, getDspStats } = useAdmin() + + useEffect(() => { + getDspStats() + }, []) + + return {JSON.stringify(dspStats, null, 2)} +} + +export default DspStats diff --git a/src/contexts/AdminContext/AdminContext.tsx b/src/contexts/AdminContext/AdminContext.tsx index 1c7a0c7c..b5c5f977 100644 --- a/src/contexts/AdminContext/AdminContext.tsx +++ b/src/contexts/AdminContext/AdminContext.tsx @@ -2,10 +2,13 @@ import { createContext, FC, PropsWithChildren, useMemo, useState, useCallback } import { Account, AdminTransfer, AdminTransferType } from 'types' import { useAdExApi } from 'hooks/useAdexServices' import { removeOptionalEmptyStringProps } from 'helpers' +import { DspStats } from 'types/dspStats' interface IAdminContext { accounts: Map getAllAccounts: () => void + dspStats: DspStats + getDspStats: () => void initialDataLoading: boolean makeTransfer: ( values: AdminTransfer, @@ -20,12 +23,25 @@ interface IAdminContext { ) => Promise } +const dspStatsDefault = { + totalRequests: 0, + ortbRequests: 0, + throttledRequests: 0, + ortbRequestsPerSecond: 0, + throttledRequestsPerSecond: 0, + bidRequestsWithNoBids: 0, + bidRequestsBidsInTime: 0, + bidRequestsWithBidsLate: 0, + ssp: [] +} + const AdminContext = createContext(null) const AdminProvider: FC = ({ children }) => { const { adexServicesRequest } = useAdExApi() const [initialDataLoading, setLoading] = useState(true) const [accounts, setAccounts] = useState>(new Map()) + const [dspStats, setDspStats] = useState(dspStatsDefault) const getAllAccounts = useCallback(async () => { try { @@ -131,15 +147,43 @@ const AdminProvider: FC = ({ children }) => { [adexServicesRequest] ) + const getDspStats = useCallback(async () => { + try { + const res = await adexServicesRequest('backend', { + route: '/dsp/admin/sysinfo', + method: 'GET', + headers: { + 'content-type': 'application/json' + } + }) + + if (res) { + setDspStats(res) + } + } catch (err) { + console.log({ err }) + } + }, [adexServicesRequest]) + const contextValue = useMemo( () => ({ accounts, getAllAccounts, + getDspStats, + dspStats, initialDataLoading, makeTransfer, updateAccountInfo }), - [accounts, initialDataLoading, makeTransfer, getAllAccounts, updateAccountInfo] + [ + accounts, + getAllAccounts, + getDspStats, + dspStats, + initialDataLoading, + makeTransfer, + updateAccountInfo + ] ) return {children} diff --git a/src/types/dspStats.ts b/src/types/dspStats.ts new file mode 100644 index 00000000..1a7bfa9e --- /dev/null +++ b/src/types/dspStats.ts @@ -0,0 +1,17 @@ +export type SSPQPSStats = { + name: string + qpsConfig?: number + qpsCurrent: number + qpsDropped: number +} +export type DspStats = { + totalRequests: number + ortbRequests: number + throttledRequests: number + ortbRequestsPerSecond: number + throttledRequestsPerSecond: number + bidRequestsWithNoBids: number + bidRequestsBidsInTime: number + bidRequestsWithBidsLate: number + ssp: SSPQPSStats[] +} From c68c9e155a16b10fd120424a076f39d0ee46bf5d Mon Sep 17 00:00:00 2001 From: IvoPaunov Date: Mon, 16 Dec 2024 12:02:22 +0200 Subject: [PATCH 02/14] rename campaign details row to details row --- .../CreateCampaign/CampaignSummary.tsx | 40 ++++++------------- .../CreateCampaign/StepFour/StepFour.tsx | 4 +- .../common/CampainDetailsRow/index.ts | 3 -- .../DetailsRow.tsx} | 8 ++-- src/components/common/DetailsRow/index.ts | 3 ++ 5 files changed, 22 insertions(+), 36 deletions(-) delete mode 100644 src/components/common/CampainDetailsRow/index.ts rename src/components/common/{CampainDetailsRow/CampaignDetailsRow.tsx => DetailsRow/DetailsRow.tsx} (86%) create mode 100644 src/components/common/DetailsRow/index.ts diff --git a/src/components/CreateCampaign/CampaignSummary.tsx b/src/components/CreateCampaign/CampaignSummary.tsx index 92ec661a..2fcec032 100644 --- a/src/components/CreateCampaign/CampaignSummary.tsx +++ b/src/components/CreateCampaign/CampaignSummary.tsx @@ -3,7 +3,7 @@ import { Button, Group, Stack, Text } from '@mantine/core' import useCreateCampaignContext from 'hooks/useCreateCampaignContext' import LeftArrowIcon from 'resources/icons/LeftArrow' import useCreateCampaignData from 'hooks/useCreateCampaignData/useCreateCampaignData' -import CampaignDetailsRow from 'components/common/CampainDetailsRow' +import DetailsRow from 'components/common/DetailsRow' import { UtmInfo } from './CreateCampaignCommon' const CampaignSummary = ({ onLaunchClick }: { onLaunchClick: () => void }) => { @@ -39,51 +39,41 @@ const CampaignSummary = ({ onLaunchClick }: { onLaunchClick: () => void }) => { return ( - - - + + {placement === 'site' && ( - + )} - - - - + + + - - - void }) => { noBorder mb="xs" /> - + {step === 3 ? ( From 0605b0a94ef1b3848bb309650a58150eb1d2d7b0 Mon Sep 17 00:00:00 2001 From: IvoPaunov Date: Wed, 18 Dec 2024 12:31:37 +0200 Subject: [PATCH 08/14] update dsp stats --- src/components/AdminPanel/DspStats.tsx | 91 ++++++++++++--------- src/components/AdminPanel/SSPsAnalytics.tsx | 2 +- src/contexts/AdminContext/AdminContext.tsx | 10 ++- src/types/dspStats.ts | 10 ++- 4 files changed, 69 insertions(+), 44 deletions(-) diff --git a/src/components/AdminPanel/DspStats.tsx b/src/components/AdminPanel/DspStats.tsx index 16ff301d..3ad6fe17 100644 --- a/src/components/AdminPanel/DspStats.tsx +++ b/src/components/AdminPanel/DspStats.tsx @@ -1,18 +1,13 @@ -import { NumberFormatter, Stack, Divider, Space } from '@mantine/core' +import { NumberFormatter, Stack, SimpleGrid, Fieldset } from '@mantine/core' +import CustomTable from 'components/common/CustomTable' import DetailsRow from 'components/common/DetailsRow' import useAdmin from 'hooks/useAdmin' import { useEffect } from 'react' -import { SSPQPSStats } from 'types/dspStats' - -const DspStats = () => { - const { dspStats, getDspStats } = useAdmin() - - useEffect(() => { - getDspStats() - }, []) +import { BaseDSPStats, SSPQPSStats } from 'types/dspStats' +const BaseStats = ({ dspStats }: { dspStats: BaseDSPStats }) => { return ( - + } @@ -25,14 +20,7 @@ const DspStats = () => { title="Bid requests in time" value={} /> - } - /> - } - /> + } @@ -42,33 +30,58 @@ const DspStats = () => { value={} /> } + title="Bid requests with late bids" + value={} /> - - {dspStats.ssp.map((ssp: SSPQPSStats) => ( - - - } - /> + + ) +} + +const DspStats = () => { + const { dspStats, getDspStats } = useAdmin() + + useEffect(() => { + getDspStats() + }, []) + + return ( + +
+ +
+ +
+ {dspStats.last24h && } +
+
+ } + title="Total Bid requests per second" + value={} /> } - noBorder + title="Throttled requests per second" + value={ + + } /> - - ))} - +
+
+ ({ + id: ssp.name, + columns: [ + { value: ssp.name }, + { value: ssp.qpsConfig }, + { value: ssp.qpsCurrent }, + { value: ssp.qpsDropped } + ] + }))} + /> +
+
) } diff --git a/src/components/AdminPanel/SSPsAnalytics.tsx b/src/components/AdminPanel/SSPsAnalytics.tsx index 27b4bb15..c2a39f10 100644 --- a/src/components/AdminPanel/SSPsAnalytics.tsx +++ b/src/components/AdminPanel/SSPsAnalytics.tsx @@ -248,7 +248,7 @@ const SSPsAnalytics = ({ size="sm" /> - + Promise } -const dspStatsDefault = { +const dspStatsDefault: DspStats = { totalRequests: 0, ortbRequests: 0, throttledRequests: 0, @@ -32,6 +32,14 @@ const dspStatsDefault = { bidRequestsWithNoBids: 0, bidRequestsBidsInTime: 0, bidRequestsWithBidsLate: 0, + last24h: { + totalRequests: 0, + ortbRequests: 0, + throttledRequests: 0, + bidRequestsWithNoBids: 0, + bidRequestsBidsInTime: 0, + bidRequestsWithBidsLate: 0 + }, ssp: [] } diff --git a/src/types/dspStats.ts b/src/types/dspStats.ts index 1a7bfa9e..f2be0fc5 100644 --- a/src/types/dspStats.ts +++ b/src/types/dspStats.ts @@ -4,14 +4,18 @@ export type SSPQPSStats = { qpsCurrent: number qpsDropped: number } -export type DspStats = { + +export type BaseDSPStats = { totalRequests: number ortbRequests: number throttledRequests: number - ortbRequestsPerSecond: number - throttledRequestsPerSecond: number bidRequestsWithNoBids: number bidRequestsBidsInTime: number bidRequestsWithBidsLate: number +} +export type DspStats = BaseDSPStats & { + ortbRequestsPerSecond: number + throttledRequestsPerSecond: number + last24h: BaseDSPStats ssp: SSPQPSStats[] } From 6b5e667caeebfca9dd337c420f29605c01621b65 Mon Sep 17 00:00:00 2001 From: IvoPaunov Date: Wed, 18 Dec 2024 16:20:11 +0200 Subject: [PATCH 09/14] update dsp info data --- src/components/AdminPanel/DspStats.tsx | 56 ++++++++++++++++++++------ 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/src/components/AdminPanel/DspStats.tsx b/src/components/AdminPanel/DspStats.tsx index 3ad6fe17..3970cb94 100644 --- a/src/components/AdminPanel/DspStats.tsx +++ b/src/components/AdminPanel/DspStats.tsx @@ -5,33 +5,65 @@ import useAdmin from 'hooks/useAdmin' import { useEffect } from 'react' import { BaseDSPStats, SSPQPSStats } from 'types/dspStats' +const getPercent = (total: number, part: number): string => { + return ` (${((part / total) * 100).toFixed(2)}%) ` +} + const BaseStats = ({ dspStats }: { dspStats: BaseDSPStats }) => { return ( } + title="Total requests (any kind)" + value={} /> + } + title="Bid requests - total" + value={ +
+ {getPercent(dspStats.totalRequests, dspStats.ortbRequests)} + +
+ } /> + } + title="Bid requests - throttled" + value={ +
+ {getPercent(dspStats.ortbRequests, dspStats.throttledRequests)} + +
+ } /> } + title="Bid requests - no bids" + value={ +
+ {getPercent(dspStats.ortbRequests, dspStats.bidRequestsWithNoBids)} + +
+ } /> } + title="Bid requests - in time response" + value={ +
+ {getPercent(dspStats.ortbRequests, dspStats.bidRequestsBidsInTime)} + +
+ } /> + } + title="Bid requests - NOT in time response" + value={ +
+ {getPercent(dspStats.ortbRequests, dspStats.bidRequestsWithBidsLate)} + +
+ } />
) From 139bc463c70e71d028b06d61096ff33fadc90db4 Mon Sep 17 00:00:00 2001 From: IvoPaunov Date: Thu, 19 Dec 2024 15:46:32 +0200 Subject: [PATCH 10/14] fix editing campaigns ssp filter --- src/components/EditCampaign/EditCampaign.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/EditCampaign/EditCampaign.tsx b/src/components/EditCampaign/EditCampaign.tsx index b38cbf18..4e088b8b 100644 --- a/src/components/EditCampaign/EditCampaign.tsx +++ b/src/components/EditCampaign/EditCampaign.tsx @@ -437,7 +437,7 @@ const EditCampaign = ({ campaign, isAdmin }: { campaign: Campaign; isAdmin?: boo Countries
@@ -459,7 +459,7 @@ const EditCampaign = ({ campaign, isAdmin }: { campaign: Campaign; isAdmin?: boo SSPs Date: Fri, 27 Dec 2024 15:21:35 +0200 Subject: [PATCH 11/14] fix cmp ssp targeting edit --- src/components/EditCampaign/EditCampaign.tsx | 1 + src/contexts/CampaignsContext/CampaignsDataContext.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/src/components/EditCampaign/EditCampaign.tsx b/src/components/EditCampaign/EditCampaign.tsx index 4e088b8b..f2dc50e2 100644 --- a/src/components/EditCampaign/EditCampaign.tsx +++ b/src/components/EditCampaign/EditCampaign.tsx @@ -258,6 +258,7 @@ const EditCampaign = ({ campaign, isAdmin }: { campaign: Campaign; isAdmin?: boo const inputs: Partial = { categories: values.targetingInput.inputs.categories, location: values.targetingInput.inputs.location, + ssp: values.targetingInput.inputs.ssp, advanced: values.targetingInput.inputs.advanced } diff --git a/src/contexts/CampaignsContext/CampaignsDataContext.tsx b/src/contexts/CampaignsContext/CampaignsDataContext.tsx index 68c3de2b..9b706210 100644 --- a/src/contexts/CampaignsContext/CampaignsDataContext.tsx +++ b/src/contexts/CampaignsContext/CampaignsDataContext.tsx @@ -350,6 +350,7 @@ const CampaignsDataProvider: FC ...(inputs?.categories && { categories: inputs.categories }), + ...(inputs?.ssp && { ssp: inputs.ssp }), ...(inputs?.publishers && { publishers: inputs.publishers }), From aad563254a5e9825e51cbe5d485c85d7aa3b88c3 Mon Sep 17 00:00:00 2001 From: IvoPaunov Date: Fri, 27 Dec 2024 15:21:53 +0200 Subject: [PATCH 12/14] show ssp targeting n cmp details --- src/components/CampaignDetails/CampaignDetails.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/CampaignDetails/CampaignDetails.tsx b/src/components/CampaignDetails/CampaignDetails.tsx index 6aee34fb..a161ca32 100644 --- a/src/components/CampaignDetails/CampaignDetails.tsx +++ b/src/components/CampaignDetails/CampaignDetails.tsx @@ -3,7 +3,7 @@ import { useNavigate, useParams, useSearchParams } from 'react-router-dom' import { Grid, Text, Button, Paper, Stack, Group, Divider, Box, Anchor } from '@mantine/core' import { modals } from '@mantine/modals' import BadgeStatusCampaign from 'components/Dashboard/BadgeStatusCampaign' -import { CATEGORIES, COUNTRIES } from 'constants/createCampaign' +import { CATEGORIES, COUNTRIES, SSPs } from 'constants/createCampaign' import { AdUnit, CampaignStatus } from 'adex-common/dist/types' import MediaThumb from 'components/common/MediaThumb' import { formatDateTime } from 'helpers/formatters' @@ -430,6 +430,13 @@ const CampaignDetails = ({ isAdminPanel }: { isAdminPanel?: boolean }) => { inputValues={campaign.targetingInput.inputs.location} selectData={COUNTRIES} /> + {campaign.targetingInput.inputs.ssp && ( + + )}
From f99db09df0abfe5248668c828197a588ca0a8578 Mon Sep 17 00:00:00 2001 From: Ivo Paunov Date: Fri, 27 Dec 2024 15:27:13 +0200 Subject: [PATCH 13/14] v0.69.73 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f735457e..a7c54108 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "adex-interface", - "version": "0.69.72", + "version": "0.69.73", "private": true, "dependencies": { "@ambire/login-sdk-core": "^0.0.21", From 2b52e388c87166b2ff1c44e1a1c2db24657f131a Mon Sep 17 00:00:00 2001 From: IvoPaunov Date: Fri, 27 Dec 2024 15:36:40 +0200 Subject: [PATCH 14/14] fix dsp stats --- src/components/AdminPanel/DspStats.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AdminPanel/DspStats.tsx b/src/components/AdminPanel/DspStats.tsx index 3970cb94..89453014 100644 --- a/src/components/AdminPanel/DspStats.tsx +++ b/src/components/AdminPanel/DspStats.tsx @@ -74,7 +74,7 @@ const DspStats = () => { useEffect(() => { getDspStats() - }, []) + }, [getDspStats]) return (