Skip to content

Commit

Permalink
Merge pull request #687 from jembi/CU-86c0c42k4_Filters-are-not-working
Browse files Browse the repository at this point in the history
Cu 86c0c42k4 filters are not working
  • Loading branch information
drizzentic authored Sep 27, 2024
2 parents 99e7b31 + 88c3afd commit c57ae6f
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 55 deletions.
19 changes: 17 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
"dependencies": {
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "^14.2.1",
"@types/lodash": "^4.17.9",
"lodash": "^4.17.21",
"moment": "^2.29.1",
"react-router-dom": "^6.26.1"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,65 +53,65 @@ const App: React.FC = () => {
let serverDifferenceTime

const fetchTransactionLogs = useCallback(
async (timestampFilter?: string) => {
async (timestampFilter?: string, filteredResults?: boolean) => {
try {
const filters: {[key: string]: any} = {}

if (timestampFilter) {
filters['request.timestamp'] = JSON.stringify({
$gte: timestampFilter
})
} else {
if (status !== 'NoFilter') {
filters.status = status
}
}

if (statusCode) {
filters['response.status'] = statusCode
}
if (startDate || endDate) {
filters['request.timestamp'] = JSON.stringify({
...(startDate && {$gte: startDate.toISOString()}),
...(endDate && {$lte: endDate.toISOString()})
})
}

if (channel !== 'NoFilter') {
filters.channelID = channel
}
if (status !== 'NoFilter') {
filters.status = status
}

if (reruns !== 'NoFilter') {
if (reruns === 'Yes') {
filters.childIDs = JSON.stringify({$exists: true, $ne: []})
} else if (reruns === 'No') {
filters.childIDs = JSON.stringify({$eq: []})
}
}
if (statusCode) {
filters['response.status'] = statusCode
}

if (startDate && endDate) {
filters['request.timestamp'] = JSON.stringify({
$gte: startDate.toISOString(),
$lte: endDate.toISOString()
})
}
if (channel !== 'NoFilter') {
filters.channelID = channel
}

if (host) {
filters['request.host'] = host
if (reruns !== 'NoFilter') {
if (reruns === 'Yes') {
filters.childIDs = JSON.stringify({$exists: true, $ne: []})
} else if (reruns === 'No') {
filters.childIDs = JSON.stringify({$eq: []})
}
}

if (port) {
filters['request.port'] = port
}
if (host) {
filters['request.host'] = host
}

if (path) {
filters['request.path'] = path
}
if (port) {
filters['request.port'] = port
}

if (param) {
filters['request.querystring'] = param
}
if (path) {
filters['request.path'] = path
}

if (client !== 'NoFilter') {
filters.clientID = client
}
if (param) {
filters['request.querystring'] = param
}

if (method !== 'NoFilter') {
filters['request.method'] = method
}
if (client !== 'NoFilter') {
filters.clientID = client
}

if (method !== 'NoFilter') {
filters['request.method'] = method
}

const fetchParams: {[key: string]: any} = {
Expand All @@ -136,14 +136,24 @@ const App: React.FC = () => {
)

setTransactions(prevTransactions => {
const newTransactionListState = [...prevTransactions]
if(filteredResults){
return newTransactionsWithChannelDetails
}
let newTransactionListState = [...prevTransactions]

newTransactionsWithChannelDetails.forEach(transaction => {
if (!newTransactionListState.some(t => t._id === transaction._id)) {
newTransactionListState.push(transaction)
}
})

//filter based on the status
if (status !== 'NoFilter') {
newTransactionListState = newTransactionListState.filter(
transaction => transaction.status === status
)
}

//sort the transactions by timestamp
newTransactionListState.sort((a, b) => {
return (
Expand Down Expand Up @@ -224,7 +234,7 @@ const App: React.FC = () => {
}, [])

useEffect(() => {
if (timestampFilter) {
if (timestampFilter && !startDate && !endDate) {
;(async () => {
lastPollingComplete = false
await fetchTransactionLogs(timestampFilter)
Expand Down Expand Up @@ -386,6 +396,7 @@ const App: React.FC = () => {
reruns={reruns}
setReruns={setReruns}
channels={channels}
fetchTransactionLogs={fetchTransactionLogs}
/>
)}
{tabValue === 1 && (
Expand Down Expand Up @@ -418,6 +429,7 @@ const App: React.FC = () => {
method={method}
setMethod={setMethod}
clients={clients}
fetchTransactionLogs={fetchTransactionLogs}
/>
)}
</CardContent>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import React from 'react'
import React, {useCallback, useEffect} from 'react'
import {Box, TextField, MenuItem, Grid, Button, Card} from '@mui/material'
import {DateTimePicker} from '@mui/x-date-pickers/DateTimePicker'
import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'
import {AdapterDateFns} from '@mui/x-date-pickers/AdapterDateFns'
import {BasicFilterProps} from '../../interfaces/index.interface'
import {debounce} from 'lodash'

const BasicFilters: React.FC<BasicFilterProps> = ({
status,
Expand All @@ -20,8 +21,15 @@ const BasicFilters: React.FC<BasicFilterProps> = ({
setLimit,
reruns,
setReruns,
channels
channels,
fetchTransactionLogs
}) => {

const debounceFetchTransactionLogs = useCallback(
debounce(() => fetchTransactionLogs(null, true), 500),
[fetchTransactionLogs]
);

const handleStatusChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setStatus(event.target.value)
}
Expand All @@ -42,6 +50,14 @@ const BasicFilters: React.FC<BasicFilterProps> = ({
setReruns(event.target.value)
}

useEffect(() => {
(async () => {
await debounceFetchTransactionLogs()
})()

return () => debounceFetchTransactionLogs.cancel()
}, [status, searchQuery, channel, limit, startDate, endDate, reruns])

const handleClearFilters = () => {
setStatus('NoFilter')
setSearchQuery('')
Expand Down Expand Up @@ -70,7 +86,7 @@ const BasicFilters: React.FC<BasicFilterProps> = ({
<MenuItem value="Completed with error(s)">
Completed with error(s)
</MenuItem>
<MenuItem value="Success">Success</MenuItem>
<MenuItem value="Successful">Successful</MenuItem>
</TextField>
</Grid>
<Grid item xs={3}>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import React, {useState} from 'react'
import React, {useEffect, useState} from 'react'
import {Box, TextField, MenuItem, Button, Grid} from '@mui/material'
import {DateTimePicker} from '@mui/x-date-pickers/DateTimePicker'
import {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider'
import {AdapterDateFns} from '@mui/x-date-pickers/AdapterDateFns'
import CustomizeDialog from '../dialogs/customize.dialog.component'
import {CustomFilterProps} from '../../interfaces/index.interface'
import {debounce} from 'lodash'

const CustomFilters: React.FC<CustomFilterProps> = ({
status,
Expand Down Expand Up @@ -34,9 +35,11 @@ const CustomFilters: React.FC<CustomFilterProps> = ({
setClient,
clients,
method,
setMethod
setMethod,
fetchTransactionLogs
}) => {
const [open, setOpen] = useState(false)
const debounceFetchTransactionLogs = debounce(fetchTransactionLogs, 10000)

const [visibleFilters, setVisibleFilters] = useState({
status: true,
Expand Down Expand Up @@ -139,6 +142,24 @@ const CustomFilters: React.FC<CustomFilterProps> = ({
setOpen(false)
}

useEffect(() => {
debounceFetchTransactionLogs(null, true)
return () => debounceFetchTransactionLogs.cancel()
}, [
status,
channel,
limit,
startDate,
endDate,
reruns,
statusCode,
port,
path,
param,
client,
method
])

return (
<Box sx={{padding: '16px'}}>
<Grid container spacing={2}>
Expand All @@ -158,7 +179,7 @@ const CustomFilters: React.FC<CustomFilterProps> = ({
<MenuItem value="Completed with error(s)">
Completed with error(s)
</MenuItem>
<MenuItem value="Success">Success</MenuItem>
<MenuItem value="Successful">Successful</MenuItem>
</TextField>
</Grid>
)}
Expand Down
11 changes: 9 additions & 2 deletions packages/transaction-log/src/interfaces/index.interface.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ const basicFilterProps: BasicFilterProps = {
setLimit: (value: number) => {},
reruns: 'none',
setReruns: (value: string) => {},
channels: [mockChannel]
channels: [mockChannel],
fetchTransactionLogs: (timestampFilter?: string, filteredResults?: boolean) => Promise.resolve(),
}

const customFilterProps: CustomFilterProps = {
Expand Down Expand Up @@ -55,7 +56,8 @@ const customFilterProps: CustomFilterProps = {
setClient: (value: string) => {},
clients: [mockClient],
method: 'GET',
setMethod: (value: string) => {}
setMethod: (value: string) => {},
fetchTransactionLogs: (timestampFilter?: string, filteredResults?: boolean) => Promise.resolve(),
}

const customizeDialogProps: CustomizeDialogProps = {
Expand Down Expand Up @@ -84,13 +86,18 @@ describe('Interface Conformance Tests', () => {
expect(typeof basicFilterProps.setStatus).toBe('function')
expect(Array.isArray(basicFilterProps.channels)).toBe(true)
expect(basicFilterProps.channels[0]._id).toBe('1')
expect(typeof basicFilterProps.fetchTransactionLogs).toBe('function')
expect(basicFilterProps.fetchTransactionLogs()).resolves.toBe(undefined)

})

it('should conform to CustomFilterProps interface', () => {
expect(customFilterProps.statusCode).toBe(200)
expect(customFilterProps.host).toBe('localhost')
expect(customFilterProps.clients[0].name).toBe('Test Client')
expect(typeof customFilterProps.setClient).toBe('function')
expect(typeof customFilterProps.fetchTransactionLogs).toBe('function')
expect(customFilterProps.fetchTransactionLogs()).resolves.toBe(undefined)
})

it('should conform to CustomizeDialogProps interface', () => {
Expand Down
6 changes: 4 additions & 2 deletions packages/transaction-log/src/interfaces/index.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ export interface BasicFilterProps {
setLimit: (value: number) => void
reruns: string
setReruns: (value: string) => void
channels: Channel[]
channels: Channel[],
fetchTransactionLogs: (timestampFilter?: string, filteredResults?: boolean) => Promise<void>
}

export interface CustomFilterProps {
Expand Down Expand Up @@ -46,7 +47,8 @@ export interface CustomFilterProps {
setClient: (value: string) => void
clients: Client[]
method: string
setMethod: (value: string) => void
setMethod: (value: string) => void,
fetchTransactionLogs: (timestampFilter?: string, filteredResults?: boolean) => Promise<void>
}

export interface CustomizeDialogProps {
Expand Down

0 comments on commit c57ae6f

Please sign in to comment.