diff --git a/CHANGELOG.md b/CHANGELOG.md
index d959aa0f59..b11ae5473f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changes merged into master
+### [#191](https://github.com/jaegertracing/jaeger-ui/pull/191) Add GA event tracking for actions in trace view
+
+* Partially addresses [#157](https://github.com/jaegertracing/jaeger-ui/issues/157) - Enhanced Google Analytics integration
+
+### [#198](https://github.com/jaegertracing/jaeger-ui/pull/198) Use `` and config webpack at runtime to allow path prefix
+
+* Fix [#42](https://github.com/jaegertracing/jaeger-ui/issues/42) - No support for Jaeger behind a reverse proxy
+
+### [#195](https://github.com/jaegertracing/jaeger-ui/pull/195) Handle Error stored in redux trace.traces
+
+* Fix [#166](https://github.com/jaegertracing/jaeger-ui/issues/166) - JS error on search page after viewing 404 trace
+
### [#192](https://github.com/jaegertracing/jaeger-ui/pull/192) Change fallback trace name to be more informative
* Fix [#190](https://github.com/jaegertracing/jaeger-ui/issues/190) - Change `cannot-find-trace-name` to `trace-without-root-span`
diff --git a/src/components/TracePage/KeyboardShortcutsHelp.css b/src/components/TracePage/KeyboardShortcutsHelp.css
index b7c0990072..1cafbe6a76 100644
--- a/src/components/TracePage/KeyboardShortcutsHelp.css
+++ b/src/components/TracePage/KeyboardShortcutsHelp.css
@@ -24,7 +24,6 @@ limitations under the License.
border: 1px solid #e8e8e8;
border-bottom: 1px solid #ddd;
color: #000;
- margin-right: 0.4em;
font-family: monospace;
padding: 0.25em 0.3em;
}
diff --git a/src/components/TracePage/KeyboardShortcutsHelp.js b/src/components/TracePage/KeyboardShortcutsHelp.js
index bf6b9cc96d..f2037ecf61 100644
--- a/src/components/TracePage/KeyboardShortcutsHelp.js
+++ b/src/components/TracePage/KeyboardShortcutsHelp.js
@@ -18,6 +18,7 @@ import React from 'react';
import { Button, Modal, Table } from 'antd';
import { kbdMappings } from './keyboard-shortcuts';
+import track from './KeyboardShortcutsHelp.track';
import './KeyboardShortcutsHelp.css';
@@ -56,13 +57,14 @@ function convertKeys(keyConfig: string | string[]): string[][] {
}
function helpModal() {
+ track();
const data = [];
Object.keys(kbdMappings).forEach(title => {
const keyConfigs = convertKeys(kbdMappings[title]);
data.push(
...keyConfigs.map(config => ({
key: String(config),
- kbds: config.map(s => {s}),
+ kbds: {config.join(' ')},
description: descriptions[title],
}))
);
diff --git a/src/components/TracePage/KeyboardShortcutsHelp.track.js b/src/components/TracePage/KeyboardShortcutsHelp.track.js
new file mode 100644
index 0000000000..4655d0c9df
--- /dev/null
+++ b/src/components/TracePage/KeyboardShortcutsHelp.track.js
@@ -0,0 +1,22 @@
+// @flow
+
+// Copyright (c) 2017 Uber Technologies, Inc.
+//
+// Licensed 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 { OPEN } from '../../utils/tracking/common';
+import { trackEvent } from '../../utils/tracking';
+
+const CATEGORY = 'jaeger/ux/trace/kbd-modal';
+
+export default trackEvent.bind(null, CATEGORY, OPEN);
diff --git a/src/components/TracePage/SpanGraph/ViewingLayer.js b/src/components/TracePage/SpanGraph/ViewingLayer.js
index 174fc6d889..6c2a063b0a 100644
--- a/src/components/TracePage/SpanGraph/ViewingLayer.js
+++ b/src/components/TracePage/SpanGraph/ViewingLayer.js
@@ -28,7 +28,7 @@ import './ViewingLayer.css';
type ViewingLayerProps = {
height: number,
numTicks: number,
- updateViewRangeTime: (number, number) => void,
+ updateViewRangeTime: (number, number, ?string) => void,
updateNextViewRangeTime: ViewRangeTimeUpdate => void,
viewRange: ViewRange,
};
@@ -188,7 +188,7 @@ export default class ViewingLayer extends React.PureComponent {
@@ -220,7 +220,7 @@ export default class ViewingLayer extends React.PureComponent', () => {
wrapper.instance()._handleReframeDragEnd({ manager, value });
expect(manager.resetBounds.mock.calls).toEqual([[]]);
const calls = props.updateViewRangeTime.mock.calls;
- expect(calls).toEqual([[value, value]]);
+ expect(calls).toEqual([[value, value, 'minimap']]);
});
it('handles dragged left (anchor is greater)', () => {
@@ -154,7 +154,7 @@ describe('', () => {
expect(manager.resetBounds.mock.calls).toEqual([[]]);
const calls = props.updateViewRangeTime.mock.calls;
- expect(calls).toEqual([[value, anchor]]);
+ expect(calls).toEqual([[value, anchor, 'minimap']]);
});
it('handles dragged right (anchor is less)', () => {
@@ -167,7 +167,7 @@ describe('', () => {
expect(manager.resetBounds.mock.calls).toEqual([[]]);
const calls = props.updateViewRangeTime.mock.calls;
- expect(calls).toEqual([[anchor, value]]);
+ expect(calls).toEqual([[anchor, value, 'minimap']]);
});
});
});
@@ -251,7 +251,7 @@ describe('', () => {
instance._handleScrubberDragEnd(_case.dragUpdate);
expect(wrapper.state('preventCursorLine')).toBe(false);
expect(manager.resetBounds.mock.calls).toEqual([[]]);
- expect(props.updateViewRangeTime).lastCalledWith(..._case.viewRangeUpdate);
+ expect(props.updateViewRangeTime).lastCalledWith(..._case.viewRangeUpdate, 'minimap');
});
});
});
diff --git a/src/components/TracePage/TracePageHeader.js b/src/components/TracePage/TracePageHeader.js
index aa06c67fc5..af35859782 100644
--- a/src/components/TracePage/TracePageHeader.js
+++ b/src/components/TracePage/TracePageHeader.js
@@ -22,6 +22,7 @@ import IoIosFilingOutline from 'react-icons/lib/io/ios-filing-outline';
import { Link } from 'react-router-dom';
import * as markers from './TracePageHeader.markers';
+import { trackAltViewOpen } from './TracePageHeader.track';
import KeyboardShortcutsHelp from './KeyboardShortcutsHelp';
import LabeledList from '../common/LabeledList';
import { FALLBACK_TRACE_NAME } from '../../constants';
@@ -109,12 +110,22 @@ export default function TracePageHeader(props: TracePageHeaderProps) {
const viewMenu = (