Skip to content

Commit

Permalink
chore(sqllab): Log current local storage usage (#24554)
Browse files Browse the repository at this point in the history
Co-authored-by: Justin Park <justinpark@apache.org>
(cherry picked from commit 0836000)
  • Loading branch information
justinpark authored and michael-s-molina committed Jul 7, 2023
1 parent 9ab61c1 commit a5f3cfc
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 5 deletions.
38 changes: 37 additions & 1 deletion superset-frontend/src/SqlLab/components/App/App.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ import App from 'src/SqlLab/components/App';
import sqlLabReducer from 'src/SqlLab/reducers/index';
import { LOCALSTORAGE_MAX_USAGE_KB } from 'src/SqlLab/constants';
import { LOG_EVENT } from 'src/logger/actions';
import {
LOG_ACTIONS_SQLLAB_WARN_LOCAL_STORAGE_USAGE,
LOG_ACTIONS_SQLLAB_MONITOR_LOCAL_STORAGE_USAGE,
} from 'src/logger/LogUtils';

jest.mock('src/SqlLab/components/TabbedSqlEditors', () => () => (
<div data-test="mock-tabbed-sql-editors" />
Expand Down Expand Up @@ -54,7 +58,7 @@ describe('SqlLab App', () => {
expect(getByTestId('mock-tabbed-sql-editors')).toBeInTheDocument();
});

it('logs current usage warning', async () => {
it('logs current usage warning', () => {
const localStorageUsageInKilobytes = LOCALSTORAGE_MAX_USAGE_KB + 10;
const storeExceedLocalStorage = mockStore(
sqlLabReducer(
Expand All @@ -73,6 +77,38 @@ describe('SqlLab App', () => {
expect(storeExceedLocalStorage.getActions()).toContainEqual(
expect.objectContaining({
type: LOG_EVENT,
payload: expect.objectContaining({
eventName: LOG_ACTIONS_SQLLAB_WARN_LOCAL_STORAGE_USAGE,
}),
}),
);
});

it('logs current local storage usage', () => {
const localStorageUsageInKilobytes = LOCALSTORAGE_MAX_USAGE_KB - 10;
const storeExceedLocalStorage = mockStore(
sqlLabReducer(
{
localStorageUsageInKilobytes,
},
{},
),
);

const { rerender } = render(<App />, {
useRedux: true,
store: storeExceedLocalStorage,
});
rerender(<App updated />);
expect(storeExceedLocalStorage.getActions()).toContainEqual(
expect.objectContaining({
type: LOG_EVENT,
payload: expect.objectContaining({
eventName: LOG_ACTIONS_SQLLAB_MONITOR_LOCAL_STORAGE_USAGE,
eventData: expect.objectContaining({
current_usage: localStorageUsageInKilobytes,
}),
}),
}),
);
});
Expand Down
24 changes: 20 additions & 4 deletions superset-frontend/src/SqlLab/components/App/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ import {
} from 'src/SqlLab/constants';
import * as Actions from 'src/SqlLab/actions/sqlLab';
import { logEvent } from 'src/logger/actions';
import { LOG_ACTIONS_SQLLAB_WARN_LOCAL_STORAGE_USAGE } from 'src/logger/LogUtils';
import {
LOG_ACTIONS_SQLLAB_WARN_LOCAL_STORAGE_USAGE,
LOG_ACTIONS_SQLLAB_MONITOR_LOCAL_STORAGE_USAGE,
} from 'src/logger/LogUtils';
import TabbedSqlEditors from '../TabbedSqlEditors';
import QueryAutoRefresh from '../QueryAutoRefresh';

Expand Down Expand Up @@ -121,14 +124,27 @@ class App extends React.PureComponent {
}

componentDidUpdate() {
const { localStorageUsageInKilobytes, actions, queries } = this.props;
const queryCount = queries?.lenghth || 0;
if (
this.props.localStorageUsageInKilobytes >=
localStorageUsageInKilobytes >=
LOCALSTORAGE_WARNING_THRESHOLD * LOCALSTORAGE_MAX_USAGE_KB
) {
this.showLocalStorageUsageWarning(
this.props.localStorageUsageInKilobytes,
this.props.queries?.lenghth || 0,
localStorageUsageInKilobytes,
queryCount,
);
}
if (localStorageUsageInKilobytes > 0 && !this.hasLoggedLocalStorageUsage) {
const eventData = {
current_usage: localStorageUsageInKilobytes,
query_count: queryCount,
};
actions.logEvent(
LOG_ACTIONS_SQLLAB_MONITOR_LOCAL_STORAGE_USAGE,
eventData,
);
this.hasLoggedLocalStorageUsage = true;
}
}

Expand Down
2 changes: 2 additions & 0 deletions superset-frontend/src/logger/LogUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ export const LOG_ACTIONS_FURTHER_DRILL_BY = 'further_drill_by';
export const LOG_ACTIONS_DRILL_BY_EDIT_CHART = 'drill_by_edit_chart';
export const LOG_ACTIONS_DRILL_BY_BREADCRUMB_CLICKED =
'drill_by_breadcrumb_clicked';
export const LOG_ACTIONS_SQLLAB_MONITOR_LOCAL_STORAGE_USAGE =
'sqllab_monitor_local_storage_usage';

// Log event types --------------------------------------------------------------
export const LOG_EVENT_TYPE_TIMING = new Set([
Expand Down

0 comments on commit a5f3cfc

Please sign in to comment.