[perf logging] Add extra logging for new/editMode dash (#9745)

* [perf logging] Add extra logging for new/editMode dash

* fix review comments
This commit is contained in:
Grace Guo 2020-05-06 09:03:04 -07:00 committed by GitHub
parent 9aabafe9fe
commit 83b4165e61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 77 additions and 1 deletions

View File

@ -0,0 +1,42 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import isDashboardEmpty from '../../../../src/dashboard/util/isDashboardEmpty';
import getEmptyLayout from '../../../../src/dashboard/util/getEmptyLayout';
describe('isDashboardEmpty', () => {
const emptyLayout: object = getEmptyLayout();
const testLayout: object = {
...emptyLayout,
'MARKDOWN-IhTGLhyiTd': {
children: [],
id: 'MARKDOWN-IhTGLhyiTd',
meta: { code: 'test me', height: 50, width: 4 },
parents: ['ROOT_ID', 'GRID_ID', 'ROW-uPjcKNYJQy'],
type: 'MARKDOWN',
},
};
it('should return true for empty dashboard', () => {
expect(isDashboardEmpty(emptyLayout)).toBe(true);
});
it('should return false for non-empty dashboard', () => {
expect(isDashboardEmpty(testLayout)).toBe(false);
});
});

View File

@ -39,6 +39,7 @@ import { areObjectsEqual } from '../../reduxUtils';
import '../stylesheets/index.less';
import getLocationHash from '../util/getLocationHash';
import isDashboardEmpty from '../util/isDashboardEmpty';
const propTypes = {
actions: PropTypes.shape({
@ -90,7 +91,12 @@ class Dashboard extends React.PureComponent {
}
componentDidMount() {
const eventData = {};
const { dashboardState, layout } = this.props;
const eventData = {
is_edit_mode: dashboardState.editMode,
mount_duration: Logger.getTimestamp(),
is_empty: isDashboardEmpty(layout),
};
const directLinkComponentId = getLocationHash();
if (directLinkComponentId) {
eventData.target_id = directLinkComponentId;

View File

@ -0,0 +1,28 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { CHART_TYPE, MARKDOWN_TYPE } from './componentTypes';
const USER_CONTENT_COMPONENT_TYPE: string[] = [CHART_TYPE, MARKDOWN_TYPE];
export default function isDashboardEmpty(layout: any): boolean {
// has at least one chart or markdown component
return !Object.values(layout).some(
({ type }: { type?: string }) =>
type && USER_CONTENT_COMPONENT_TYPE.includes(type),
);
}