Skip to content

Commit dd81267

Browse files
author
Noelle Daley
authored
Add real connected state and API address (#9219)
* fix title of secondary card * show connected status * fix tests
1 parent 07817f0 commit dd81267

File tree

8 files changed

+59
-58
lines changed

8 files changed

+59
-58
lines changed

ui/app/models/replication-attributes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export default Fragment.extend({
1818
isPrimary: match('mode', /primary/),
1919

2020
knownSecondaries: attr('array'),
21+
secondaries: attr('array'),
2122

2223
// secondary attrs
2324
isSecondary: match('mode', /secondary/),

ui/app/styles/components/known-secondaries-card.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,9 @@
1010
.secondaries-table {
1111
margin-bottom: $spacing-s;
1212
}
13+
14+
.link {
15+
font-size: $size-7;
16+
text-decoration: none;
17+
}
1318
}

ui/app/templates/vault/cluster/replication-dr-promote/details.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
{{!-- passing in component to render so that the yielded components are flexible based on the dashboard --}}
3333
@componentToRender='replication-secondary-card' as |Dashboard|>
3434
<Dashboard.card
35-
@title="States"
35+
@title="Status"
3636
/>
3737
<Dashboard.card
3838
@title="Primary cluster"
Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
11
import Component from '@ember/component';
2-
import { computed } from '@ember/object';
32

43
/**
54
* @module KnownSecondariesTable
6-
* KnownSecondariesTable components are used on the Replication Details dashboards to display a table of known secondary clusters.
5+
* KnownSecondariesTable components are used on the Replication Details dashboards
6+
* to display a table of known secondary clusters.
77
*
88
* @example
99
* ```js
1010
* <KnownSecondariesTable @replicationAttrs={{replicationAttrs}} />
1111
* ```
12-
* @param {object} replicationAttrs=null - The attributes passed directly from the cluster model used to access the array of known secondaries. We use this to grab the secondaries.
12+
* @param {array} secondaries=null - The array of secondaries from the replication
13+
* status endpoint. Contains the secondary api_address, id and connected_state.
1314
*/
1415

1516
export default Component.extend({
16-
replicationAttrs: null,
17-
secondaries: computed('replicationAttrs', function() {
18-
const { replicationAttrs } = this;
19-
// TODO: when the backend changes are merged we will only need replicationAttrs.secondaries instead of knownSecondaries
20-
const secondaries = replicationAttrs.secondaries || replicationAttrs.knownSecondaries;
21-
return secondaries;
22-
}),
17+
secondaries: null,
2318
});

ui/lib/replication/addon/templates/components/known-secondaries-card.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
</div>
88
<div class="secondaries-table">
99
{{!-- TODO remove this or when backend api changes are merged --}}
10-
{{#unless (or replicationAttrs.knownSecondaries replicationAttrs.secondaries)}}
10+
{{#unless replicationAttrs.secondaries}}
1111
<EmptyState
1212
@title="No known {{cluster.replicationMode}} secondary clusters associated with this cluster"
1313
@message="Associated secondary clusters will be listed here. Add your first secondary cluster to get started." />
1414
{{else}}
15-
<KnownSecondariesTable @replicationAttrs={{replicationAttrs}} />
15+
<KnownSecondariesTable @secondaries={{replicationAttrs.secondaries}} />
1616
{{/unless}}
1717
</div>
1818
{{#if cluster.canAddSecondary}}

ui/lib/replication/addon/templates/components/known-secondaries-table.hbs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,31 @@
1717
</tr>
1818
</thead>
1919
<tbody>
20-
{{! TODO: this should be compliant with the new api attributes, but we should verify this
21-
when those attributes are merged. At that point we can also get rid of all the 'or's in here. --}}
2220
{{#each secondaries as |secondary|}}
2321
<tr>
2422
<th scope="row">
25-
<code data-test-secondaries={{concat 'row-for-' (or secondary.id secondary)}}>
26-
{{or secondary.id secondary}}
23+
<code data-test-secondaries={{concat 'row-for-' secondary.node_id}}>
24+
{{secondary.node_id}}
2725
</code>
2826
</th>
2927
<td>
30-
<a href={{secondary.api_address}} data-test-secondaries={{concat 'api-address-for-' secondary.id}}>
31-
<code class="is-word-break">{{secondary.api_address}}</code>
32-
</a>
28+
{{#if secondary.api_address}}
29+
<a
30+
class="link"
31+
href={{concat secondary.api_address '/ui/'}}
32+
target="_blank"
33+
rel="noopener"
34+
data-test-secondaries={{concat 'api-address-for-' secondary.node_id}}>
35+
<p class="is-word-break">{{secondary.api_address}}</p>
36+
</a>
37+
{{else}}
38+
<p class="is-word-break">{{secondary.api_address}}</p>
39+
{{/if}}
3340
</td>
3441
<td>
35-
<code data-test-secondaries={{concat 'connection-status-for-' (or secondary.id secondary)}}>{{secondary.connection_status}}</code>
42+
<code data-test-secondaries={{concat 'connection-status-for-' (or secondary.node_id secondary)}}>
43+
{{secondary.connection_status}}
44+
</code>
3645
</td>
3746
</tr>
3847
{{/each}}

ui/tests/integration/components/known-secondaries-card-test.js

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ const CLUSTER = {
1212

1313
const REPLICATION_ATTRS = {
1414
secondaries: [
15-
{ id: 'secondary-1', api_address: 'https://stuff.com/', connection_status: 'connected' },
16-
{ id: '2nd', api_address: 'https://10.0.0.2:1234/', connection_status: 'disconnected' },
17-
{ id: '_three_', api_address: 'https://10.0.0.2:1000/', connection_status: 'connected' },
15+
{ node_id: 'secondary-1', api_address: 'https://stuff.com/', connection_status: 'connected' },
16+
{ node_id: '2nd', connection_status: 'disconnected' },
17+
{ node_id: '_three_', api_address: 'https://10.0.0.2:1000/', connection_status: 'connected' },
1818
],
1919
};
2020

@@ -35,21 +35,6 @@ module('Integration | Component | replication known-secondaries-card', function(
3535
assert.dom('[data-test-manage-link]').exists('shows manage link');
3636
});
3737

38-
// TODO: this test can be deleted once the 'secondaries' array replaces 'knownSecondaries'
39-
// in the backend
40-
test('it renders a known secondaries table even if api address and connection_status are missing', async function(assert) {
41-
const missingSecondariesInfo = {
42-
knownSecondaries: ['secondary-1', '2nd', '_three_'],
43-
};
44-
this.set('replicationAttrs', missingSecondariesInfo);
45-
46-
await render(hbs`<KnownSecondariesCard @cluster={{cluster}} @replicationAttrs={{replicationAttrs}} />`);
47-
48-
assert
49-
.dom('[data-test-known-secondaries-table]')
50-
.exists('shows known secondaries table when there are known secondaries');
51-
});
52-
5338
test('it renders an empty state if there are no known secondaries', async function(assert) {
5439
const noSecondaries = {
5540
secondaries: [],

ui/tests/integration/components/known-secondaries-table-test.js

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,52 @@ import engineResolverFor from 'ember-engines/test-support/engine-resolver-for';
55
import hbs from 'htmlbars-inline-precompile';
66
const resolver = engineResolverFor('replication');
77

8-
const REPLICATION_ATTRS = {
9-
secondaries: [
10-
{ id: 'secondary-1', api_address: 'https://stuff.com/', connection_status: 'connected' },
11-
{ id: '2nd', api_address: 'https://10.0.0.2:1234/', connection_status: 'disconnected' },
12-
{ id: '_three_', api_address: 'https://10.0.0.2:1000/', connection_status: 'connected' },
13-
],
14-
};
8+
const SECONDARIES = [
9+
{ node_id: 'secondary-1', api_address: 'https://127.0.0.1:52304', connection_status: 'connected' },
10+
{ node_id: '2nd', connection_status: 'disconnected' },
11+
{ node_id: '_three_', api_address: 'http://127.0.0.1:8202', connection_status: 'connected' },
12+
];
1513

1614
module('Integration | Component | replication known-secondaries-table', function(hooks) {
1715
setupRenderingTest(hooks, { resolver });
1816

1917
hooks.beforeEach(function() {
20-
this.set('replicationAttrs', REPLICATION_ATTRS);
18+
this.set('secondaries', SECONDARIES);
2119
});
2220

2321
test('it renders a table of known secondaries', async function(assert) {
24-
await render(hbs`<KnownSecondariesTable @replicationAttrs={{replicationAttrs}} />`);
22+
await render(hbs`<KnownSecondariesTable @secondaries={{secondaries}} />`);
2523

2624
assert.dom('[data-test-known-secondaries-table]').exists();
2725
});
2826

2927
test('it shows the secondary URL and connection_status', async function(assert) {
30-
await render(hbs`<KnownSecondariesTable @replicationAttrs={{replicationAttrs}} />`);
28+
await render(hbs`<KnownSecondariesTable @secondaries={{secondaries}} />`);
3129

32-
REPLICATION_ATTRS.secondaries.forEach(secondary => {
30+
SECONDARIES.forEach(secondary => {
3331
assert.equal(
34-
this.element.querySelector(`[data-test-secondaries=row-for-${secondary.id}]`).innerHTML.trim(),
35-
secondary.id,
32+
this.element.querySelector(`[data-test-secondaries=row-for-${secondary.node_id}]`).innerHTML.trim(),
33+
secondary.node_id,
3634
'shows a table row and ID for each known secondary'
3735
);
3836

39-
assert.equal(
40-
this.element.querySelector(`[data-test-secondaries=api-address-for-${secondary.id}]`).href,
41-
secondary.api_address,
42-
'renders a URL to the secondary UI'
43-
);
37+
if (secondary.api_address) {
38+
const expectedUrl = `${secondary.api_address}/ui/`;
39+
40+
assert.equal(
41+
this.element.querySelector(`[data-test-secondaries=api-address-for-${secondary.node_id}]`).href,
42+
expectedUrl,
43+
'renders a URL to the secondary UI'
44+
);
45+
} else {
46+
assert.notOk(
47+
this.element.querySelector(`[data-test-secondaries=api-address-for-${secondary.node_id}]`)
48+
);
49+
}
4450

4551
assert.equal(
4652
this.element
47-
.querySelector(`[data-test-secondaries=connection-status-for-${secondary.id}]`)
53+
.querySelector(`[data-test-secondaries=connection-status-for-${secondary.node_id}]`)
4854
.innerHTML.trim(),
4955
secondary.connection_status,
5056
'shows the connection status'

0 commit comments

Comments
 (0)