-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(formatter): Display entire log event as JSON by default and remind users to set format string. #129
feat(formatter): Display entire log event as JSON by default and remind users to set format string. #129
Changes from all commits
14a3114
5c1d573
1942e04
027f00d
f2959ae
78f336c
2092ca3
8855636
8de0b4c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -8,14 +8,22 @@ import React, { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
useState, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} from "react"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import SettingsOutlinedIcon from "@mui/icons-material/SettingsOutlined"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import LogExportManager, { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
EXPORT_LOG_PROGRESS_VALUE_MAX, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
EXPORT_LOG_PROGRESS_VALUE_MIN, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} from "../services/LogExportManager"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import {Nullable} from "../typings/common"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import {CONFIG_KEY} from "../typings/config"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import {LogLevelFilter} from "../typings/logs"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import {DEFAULT_AUTO_DISMISS_TIMEOUT_MILLIS} from "../typings/notifications"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LOG_LEVEL, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LogLevelFilter, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} from "../typings/logs"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DEFAULT_AUTO_DISMISS_TIMEOUT_MILLIS, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LONG_AUTO_DISMISS_TIMEOUT_MILLIS, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} from "../typings/notifications"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import {UI_STATE} from "../typings/states"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import {SEARCH_PARAM_NAMES} from "../typings/url"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -56,8 +64,9 @@ import { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
interface StateContextType { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
beginLineNumToLogEventNum: BeginLineNumToLogEventNumMap, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fileName: string, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exportProgress: Nullable<number>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fileName: string, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
isSettingsModalOpen: boolean, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uiState: UI_STATE, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logData: string, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
numEvents: number, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -70,7 +79,8 @@ interface StateContextType { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
exportLogs: () => void, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
loadFile: (fileSrc: FileSrcType, cursor: CursorType) => void, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
loadPageByAction: (navAction: NavigationAction) => void, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setLogLevelFilter: (newLogLevelFilter: LogLevelFilter) => void, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setIsSettingsModalOpen: (isOpen: boolean) => void, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setLogLevelFilter: (filter: LogLevelFilter) => void, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
startQuery: (queryString: string, isRegex: boolean, isCaseSensitive: boolean) => void, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const StateContext = createContext<StateContextType>({} as StateContextType); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -82,6 +92,7 @@ const STATE_DEFAULT: Readonly<StateContextType> = Object.freeze({ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
beginLineNumToLogEventNum: new Map<number, number>(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exportProgress: null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fileName: "", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
isSettingsModalOpen: false, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logData: "No file is open.", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
numEvents: 0, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
numPages: 0, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -94,6 +105,7 @@ const STATE_DEFAULT: Readonly<StateContextType> = Object.freeze({ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
exportLogs: () => null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
loadFile: () => null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
loadPageByAction: () => null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setIsSettingsModalOpen: () => null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setLogLevelFilter: () => null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
startQuery: () => null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -236,6 +248,8 @@ const StateContextProvider = ({children}: StateContextProviderProps) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
// States | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const [exportProgress, setExportProgress] = | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
useState<Nullable<number>>(STATE_DEFAULT.exportProgress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const [isSettingsModalOpen, setIsSettingsModalOpen] = | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
useState<boolean>(STATE_DEFAULT.isSettingsModalOpen); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const [fileName, setFileName] = useState<string>(STATE_DEFAULT.fileName); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const [logData, setLogData] = useState<string>(STATE_DEFAULT.logData); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const [numEvents, setNumEvents] = useState<number>(STATE_DEFAULT.numEvents); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -270,6 +284,20 @@ const StateContextProvider = ({children}: StateContextProviderProps) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case WORKER_RESP_CODE.FORMAT_POPUP: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
postPopUp({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
level: LOG_LEVEL.INFO, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message: "Adding a format string can enhance the readability of your" + | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
" structured logs by customizing how fields are displayed.", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
primaryAction: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
children: "Settings", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
startDecorator: <SettingsOutlinedIcon/>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
onClick: () => { setIsSettingsModalOpen(true); }, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
timeoutMillis: LONG_AUTO_DISMISS_TIMEOUT_MILLIS, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
title: "A format string has not been configured", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+287
to
+300
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Fix line length and improve message text. The message text exceeds the line length limit and could be more concise. Apply this diff to improve readability: - message: "Adding a format string can enhance the readability of your" +
- " structured logs by customizing how fields are displayed.",
+ message: "Add a format string to customize how log fields are displayed.", 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case WORKER_RESP_CODE.LOG_FILE_INFO: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setFileName(args.fileName); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setNumEvents(args.numEvents); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -418,14 +446,14 @@ const StateContextProvider = ({children}: StateContextProviderProps) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
loadPageByCursor(mainWorkerRef.current, cursor); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, []); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const setLogLevelFilter = useCallback((newLogLevelFilter: LogLevelFilter) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const setLogLevelFilter = useCallback((filter: LogLevelFilter) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (null === mainWorkerRef.current) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setUiState(UI_STATE.FAST_LOADING); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
workerPostReq(mainWorkerRef.current, WORKER_REQ_CODE.SET_FILTER, { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cursor: {code: CURSOR_CODE.EVENT_NUM, args: {eventNum: logEventNumRef.current ?? 1}}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logLevelFilter: newLogLevelFilter, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logLevelFilter: filter, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, []); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -510,6 +538,7 @@ const StateContextProvider = ({children}: StateContextProviderProps) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
beginLineNumToLogEventNum: beginLineNumToLogEventNumRef.current, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exportProgress: exportProgress, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fileName: fileName, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
isSettingsModalOpen: isSettingsModalOpen, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logData: logData, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
numEvents: numEvents, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
numPages: numPages, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -522,6 +551,7 @@ const StateContextProvider = ({children}: StateContextProviderProps) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
exportLogs: exportLogs, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
loadFile: loadFile, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
loadPageByAction: loadPageByAction, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setIsSettingsModalOpen: setIsSettingsModalOpen, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setLogLevelFilter: setLogLevelFilter, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
startQuery: startQuery, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -50,6 +50,14 @@ const onQueryResults = (queryProgress: number, queryResults: QueryResults) => { | |
postResp(WORKER_RESP_CODE.QUERY_RESULT, {progress: queryProgress, results: queryResults}); | ||
}; | ||
|
||
/** | ||
* Sends a message to the renderer to open a pop-up which prompts user to replace the default | ||
* format string. | ||
*/ | ||
const postFormatPopup = () => { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For now this is fine. In a future PR, we can refactor notification & exception handling in the service worker so that every notification at any level can only be sent by either a notification dispatcher (like this There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we can do something like this. I think we will need to add codes to the notifications so front-end knows if its an error or generic notifcation. I originally planned to do something like this and also just send the entire popup object to the front end from the back end. However, adding the settings modal callback in the backend is a bit gross, so decided against it. In future i think tho, we can have a unified notification handler in front-end, and maybe add codes (one could be for constructing format string popup with settings modal, another for error, etc..) Should we add issue? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure. Let's add the issue. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @coderabbitai can you add github issue to unify popup handler and notification handler in the front-end per my comment? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @davemarco, I've created the GitHub issue to unify the popup handler and notification handler in the front-end as per your request: Issue #131. 🔗 Analysis chain🏁 Scripts executedThe following scripts were executed for the analysis: Script:
Length of output: 455 |
||
postResp(WORKER_RESP_CODE.FORMAT_POPUP, null); | ||
}; | ||
|
||
// eslint-disable-next-line no-warning-comments | ||
// TODO: Break this function up into smaller functions. | ||
// eslint-disable-next-line max-lines-per-function,max-statements | ||
|
@@ -149,3 +157,5 @@ onmessage = async (ev: MessageEvent<MainWorkerReqMessage>) => { | |
} | ||
} | ||
}; | ||
|
||
export {postFormatPopup}; |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -13,6 +13,7 @@ import {Formatter} from "../../typings/formatters"; | |||||||||||||||||||||||||||||||||
import {JsonObject} from "../../typings/js"; | ||||||||||||||||||||||||||||||||||
import {LogLevelFilter} from "../../typings/logs"; | ||||||||||||||||||||||||||||||||||
import YscopeFormatter from "../formatters/YscopeFormatter"; | ||||||||||||||||||||||||||||||||||
import {postFormatPopup} from "../MainWorker"; | ||||||||||||||||||||||||||||||||||
import { | ||||||||||||||||||||||||||||||||||
convertToDayjsTimestamp, | ||||||||||||||||||||||||||||||||||
isJsonObject, | ||||||||||||||||||||||||||||||||||
|
@@ -29,7 +30,7 @@ class ClpIrDecoder implements Decoder { | |||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
readonly #streamType: CLP_IR_STREAM_TYPE; | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
#formatter: Nullable<Formatter>; | ||||||||||||||||||||||||||||||||||
#formatter: Nullable<Formatter> = null; | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
constructor ( | ||||||||||||||||||||||||||||||||||
streamType: CLP_IR_STREAM_TYPE, | ||||||||||||||||||||||||||||||||||
|
@@ -38,9 +39,12 @@ class ClpIrDecoder implements Decoder { | |||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||
this.#streamType = streamType; | ||||||||||||||||||||||||||||||||||
this.#streamReader = streamReader; | ||||||||||||||||||||||||||||||||||
this.#formatter = (streamType === CLP_IR_STREAM_TYPE.STRUCTURED) ? | ||||||||||||||||||||||||||||||||||
new YscopeFormatter({formatString: decoderOptions.formatString}) : | ||||||||||||||||||||||||||||||||||
null; | ||||||||||||||||||||||||||||||||||
if (streamType === CLP_IR_STREAM_TYPE.STRUCTURED) { | ||||||||||||||||||||||||||||||||||
this.#formatter = new YscopeFormatter({formatString: decoderOptions.formatString}); | ||||||||||||||||||||||||||||||||||
if (0 === decoderOptions.formatString.length) { | ||||||||||||||||||||||||||||||||||
postFormatPopup(); | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
Comment on lines
+42
to
+47
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add validation and optimize formatter creation The current implementation has potential issues:
Consider this safer implementation: if (streamType === CLP_IR_STREAM_TYPE.STRUCTURED) {
+ if (!decoderOptions?.formatString) {
+ postFormatPopup();
+ // Set empty string as default
+ decoderOptions = { ...decoderOptions, formatString: "" };
+ } else if (decoderOptions.formatString.length === 0) {
+ postFormatPopup();
+ }
this.#formatter = new YscopeFormatter({formatString: decoderOptions.formatString});
- if (0 === decoderOptions.formatString.length) {
- postFormatPopup();
- }
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -17,6 +17,7 @@ import { | |||||||||||||
LogLevelFilter, | ||||||||||||||
} from "../../../typings/logs"; | ||||||||||||||
import YscopeFormatter from "../../formatters/YscopeFormatter"; | ||||||||||||||
import {postFormatPopup} from "../../MainWorker"; | ||||||||||||||
import { | ||||||||||||||
convertToDayjsTimestamp, | ||||||||||||||
convertToLogLevelValue, | ||||||||||||||
|
@@ -54,6 +55,9 @@ class JsonlDecoder implements Decoder { | |||||||||||||
this.#logLevelKey = decoderOptions.logLevelKey; | ||||||||||||||
this.#timestampKey = decoderOptions.timestampKey; | ||||||||||||||
this.#formatter = new YscopeFormatter({formatString: decoderOptions.formatString}); | ||||||||||||||
if (0 === decoderOptions.formatString.length) { | ||||||||||||||
postFormatPopup(); | ||||||||||||||
} | ||||||||||||||
Comment on lines
+58
to
+60
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add null/undefined check for formatString While the empty string check is good, we should also handle cases where Consider this safer implementation: - if (0 === decoderOptions.formatString.length) {
+ if (!decoderOptions.formatString?.length) {
postFormatPopup();
} 📝 Committable suggestion
Suggested change
💡 Codebase verification The review comment's concern is valid but for a different reason The popup is triggered in a Web Worker context where
🔗 Analysis chainConsider moving popup trigger to a more appropriate location Triggering the popup in the constructor might lead to multiple popups if multiple decoder instances are created. Consider:
Let's verify if multiple decoders might be instantiated: Let me gather more context about where and how the decoder is used. Let me check one more thing to understand the worker communication pattern. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Search for JsonlDecoder instantiation patterns
ast-grep --pattern 'new JsonlDecoder($$$)'
Length of output: 151 Script: #!/bin/bash
# Check how LogFileManager is instantiated
ast-grep --pattern 'new LogFileManager($$$)'
# Check the implementation context of postFormatPopup
rg "postFormatPopup" -A 5
Length of output: 2531 Script: #!/bin/bash
# Check for WORKER_RESP_CODE usage and worker communication
rg "WORKER_RESP_CODE" -A 3
# Check where the format popup is handled
rg "FORMAT_POPUP" -B 2 -A 2
Length of output: 9059 |
||||||||||||||
} | ||||||||||||||
|
||||||||||||||
getEstimatedNumEvents (): number { | ||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For consistency, how about
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I prefer without new. I think the new for log level filter was just there to solve a namespace issue (i think loglevelfilter taken). Instead, i left as isOpen, and changed newLogLevelFilter to just filter.