Skip to content

Commit 6a3cb7e

Browse files
committed
feat(compass-connections-navigation): [WIP] add links to cluster level atlas pages COMPASS-9967
1 parent 227c9c6 commit 6a3cb7e

File tree

5 files changed

+111
-2
lines changed

5 files changed

+111
-2
lines changed

packages/compass-collection/src/components/collection-header-actions/collection-header-actions.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
type SchemaAnalysisError,
3131
} from '../../schema-analysis-types';
3232
import { MAX_COLLECTION_NESTING_DEPTH } from '../mock-data-generator-modal/utils';
33+
import { type AtlasClusterMetadata } from '@mongodb-js/connection-info';
3334

3435
const collectionHeaderActionsStyles = css({
3536
display: 'flex',
@@ -60,6 +61,21 @@ function buildChartsUrl(
6061
return url.toString();
6162
}
6263

64+
function buildMonitoringUrl({
65+
projectId,
66+
clusterType,
67+
clusterUniqueId,
68+
}: AtlasClusterMetadata) {
69+
// {origin}/v2/{groupId}#/host/{'replicaSet' | 'cluster'}/{clusterId}
70+
const url = new URL(`/v2/${projectId}`, window.location.origin);
71+
const fragmentPath = [
72+
'host',
73+
clusterType === 'REPLICASET' ? 'replicaSet' : 'cluster',
74+
clusterUniqueId,
75+
].join('/');
76+
return `${url}#/${fragmentPath}`;
77+
}
78+
6379
type CollectionHeaderActionsProps = {
6480
namespace: string;
6581
isReadonly: boolean;
@@ -234,6 +250,18 @@ const CollectionHeaderActions: React.FunctionComponent<
234250
</>
235251
</Tooltip>
236252
)}
253+
{atlasMetadata && (
254+
<Button
255+
data-testid="collection-header-view-monitoring"
256+
size={ButtonSize.Small}
257+
href={buildMonitoringUrl(atlasMetadata)}
258+
target="_self"
259+
rel="noopener noreferrer"
260+
leftGlyph={<Icon glyph="TimeSeries" />}
261+
>
262+
View monitoring
263+
</Button>
264+
)}
237265
{atlasMetadata && (
238266
<Button
239267
data-testid="collection-header-visualize-your-data"

packages/compass-connections-navigation/src/constants.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ export const ROW_HEIGHT = 28;
88
export type Actions =
99
// Atlas Cloud actions
1010
| 'show-connect-via-modal'
11+
| 'connection-cluster-overview'
12+
| 'connection-view-monitoring'
13+
| 'connection-query-insights'
1114
// connection item related actions
1215
| 'open-shell'
1316
| 'select-connection'

packages/compass-connections-navigation/src/item-actions.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,43 @@ export const connectedConnectionItemActions = ({
121121
disabledDescription: 'Not supported',
122122
}
123123
: null,
124+
// The following are just links to other parts of Atlas
125+
!isPerformanceTabAvailable && connectionInfo.atlasMetadata
126+
? {
127+
action: 'connection-performance-metrics',
128+
icon: 'Gauge',
129+
label: 'View performance metrics',
130+
isDisabled: false,
131+
disabledDescription: 'Not supported',
132+
}
133+
: null,
134+
connectionInfo.atlasMetadata
135+
? {
136+
action: 'connection-cluster-overview',
137+
icon: 'Dashboard',
138+
label: 'View cluster overview',
139+
isDisabled: false,
140+
disabledDescription: 'Not supported',
141+
}
142+
: null,
143+
connectionInfo.atlasMetadata
144+
? {
145+
action: 'connection-view-monitoring',
146+
icon: 'TimeSeries',
147+
label: 'View monitoring',
148+
isDisabled: false,
149+
disabledDescription: 'Not supported',
150+
}
151+
: null,
152+
connectionInfo.atlasMetadata
153+
? {
154+
action: 'connection-query-insights',
155+
icon: 'Bulb',
156+
label: 'View query insights',
157+
isDisabled: false,
158+
disabledDescription: 'Not supported',
159+
}
160+
: null,
124161
isAtlas
125162
? null
126163
: {

packages/compass-sidebar/src/components/multiple-connections/connections-navigation.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,18 @@ const ConnectionsNavigation: React.FC<ConnectionsNavigationProps> = ({
421421
case 'show-connect-via-modal':
422422
onOpenConnectViaModal?.(getConnectionInfo(item).atlasMetadata);
423423
return;
424+
case 'connection-cluster-overview':
425+
window.location.href =
426+
'https://cloud-dev.mongodb.com/v2/683db0293f4d675ff02ea19e#/clusters/detail/Cluster0';
427+
return;
428+
case 'connection-view-monitoring':
429+
window.location.href =
430+
'https://cloud-dev.mongodb.com/v2/683db0293f4d675ff02ea19e#/host/replicaSet/690251704698a545f6b8192c';
431+
return;
432+
case 'connection-query-insights':
433+
window.location.href =
434+
'https://cloud-qa.mongodb.com/v2/6822107ec640076ae576fd9a#/metrics/replicaSet/690233c5bf01906dc1e9a9fe/queryInsights/shape';
435+
return;
424436
case 'select-database':
425437
openCollectionsWorkspace(connectionId, getNamespace(item));
426438
return;

packages/databases-collections-list/src/items-table.tsx

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ import {
3535
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
3636
import { useConnectionInfo } from '@mongodb-js/compass-connections/provider';
3737
import toNS from 'mongodb-ns';
38-
import { getConnectionTitle } from '@mongodb-js/connection-info';
38+
import {
39+
type AtlasClusterMetadata,
40+
getConnectionTitle,
41+
} from '@mongodb-js/connection-info';
3942
import { useOpenWorkspace } from '@mongodb-js/compass-workspaces/provider';
4043
import { usePreferences } from 'compass-preferences-model/provider';
4144

@@ -114,6 +117,21 @@ function buildChartsUrl(
114117
return url.toString();
115118
}
116119

120+
function buildMonitoringUrl({
121+
projectId,
122+
clusterType,
123+
clusterUniqueId,
124+
}: AtlasClusterMetadata) {
125+
// {origin}/v2/{groupId}#/host/{'replicaSet' | 'cluster'}/{clusterId}
126+
const url = new URL(`/v2/${projectId}`, window.location.origin);
127+
const fragmentPath = [
128+
'host',
129+
clusterType === 'REPLICASET' ? 'replicaSet' : 'cluster',
130+
clusterUniqueId,
131+
].join('/');
132+
return `${url}#/${fragmentPath}`;
133+
}
134+
117135
const TableControls: React.FunctionComponent<{
118136
namespace?: string;
119137
itemType: string;
@@ -197,7 +215,18 @@ const TableControls: React.FunctionComponent<{
197215
Open MongoDB shell
198216
</Button>
199217
)}
200-
218+
{connectionInfo.atlasMetadata && (
219+
<Button
220+
data-testid={`${itemType}-header-view-monitoring`}
221+
size="small"
222+
href={buildMonitoringUrl(connectionInfo.atlasMetadata)}
223+
target="_self"
224+
rel="noopener noreferrer"
225+
leftGlyph={<Icon glyph="TimeSeries" />}
226+
>
227+
View monitoring
228+
</Button>
229+
)}
201230
{connectionInfo.atlasMetadata && (
202231
<Button
203232
data-testid={`${itemType}-header-visualize-your-data`}

0 commit comments

Comments
 (0)