Skip to content

Commit c51985d

Browse files
Merge pull request #1724 from CleverCloud/cc-addon-dashboards/use-new-client
`cc-addon-dashboard` components: use the new client instead of hardcoded endpoints
2 parents 3c42374 + ed5e0f6 commit c51985d

29 files changed

Lines changed: 651 additions & 1362 deletions

demo-smart/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -804,15 +804,15 @@ <h2 class="ctx-group-title">Add-on</h2>
804804
<button
805805
class="ctx-btn"
806806
title="ownerId, addonId"
807-
data-context='{"ownerId":"orga_3547a882-d464-4c34-8168-add4b3e0c135","addonId":"addon_b0156348-3825-4026-895a-bcaacafc4746","logsUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id/logs","grafanaLink":{"base":"https://grafana.services.clever-cloud.com","console":"https://console.clever-cloud.com"},"appOverviewUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id","addonDashboardUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/addons/:id"}'
807+
data-context='{"ownerId":"orga_3547a882-d464-4c34-8168-add4b3e0c135","addonId":"addon_e0626c0c-9689-4f39-a829-e1971daf9be1","logsUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id/logs","grafanaLink":{"base":"https://grafana.services.clever-cloud.com","console":"https://console.clever-cloud.com"},"appOverviewUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id","addonDashboardUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/addons/:id"}'
808808
>
809809
<span class="ctx-label">Keycloak</span>
810810
<span class="ctx-subtitle">ownerId, addonId</span>
811811
</button>
812812
<button
813813
class="ctx-btn"
814814
title="ownerId, kubernetesId"
815-
data-context='{"ownerId":"orga_3547a882-d464-4c34-8168-add4b3e0c135","kubernetesId":"kubernetes_01K85MNF5GTQNR7RWZ3G6RGRZA","logsUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id/logs","grafanaLink":{"base":"https://grafana.services.clever-cloud.com","console":"https://console.clever-cloud.com"},"appOverviewUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id","addonDashboardUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-addons/:id"}'
815+
data-context='{"ownerId":"orga_3547a882-d464-4c34-8168-add4b3e0c135","kubernetesId":"kubernetes_01KS2ZBD0FDMC4DNZ32V5CYV0T","logsUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id/logs","grafanaLink":{"base":"https://grafana.services.clever-cloud.com","console":"https://console.clever-cloud.com"},"appOverviewUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id","addonDashboardUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-addons/:id"}'
816816
>
817817
<span class="ctx-label">Kubernetes</span>
818818
<span class="ctx-subtitle">ownerId, kubernetesId</span>
@@ -844,7 +844,7 @@ <h2 class="ctx-group-title">Add-on</h2>
844844
<button
845845
class="ctx-btn"
846846
title="ownerId, addonId"
847-
data-context='{"ownerId":"orga_3547a882-d464-4c34-8168-add4b3e0c135","addonId":"addon_38b1f5a2-0b24-4c98-b378-88e4f864cd62","logsUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id/logs","grafanaLink":{"base":"https:grafana.services.clever-cloud.com","console":"https:console.clever-cloud.com"},"appOverviewUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id","addonDashboardUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-addons/:id","scalabilityUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id/settings"}'
847+
data-context='{"ownerId":"orga_3547a882-d464-4c34-8168-add4b3e0c135","addonId":"addon_893b01fa-338f-45a3-b954-cb0a0e782d92","logsUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id/logs","grafanaLink":{"base":"https:grafana.services.clever-cloud.com","console":"https:console.clever-cloud.com"},"appOverviewUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id","addonDashboardUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-addons/:id","scalabilityUrlPattern":"/organisations/orga_3547a882-d464-4c34-8168-add4b3e0c135/applications/:id/settings"}'
848848
>
849849
<span class="ctx-label">Otoroshi</span>
850850
<span class="ctx-subtitle">ownerId, addonId</span>

package-lock.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
"typecheck:stats": "node tasks/typechecking-stats.js"
6666
},
6767
"dependencies": {
68-
"@clevercloud/client": "^12.3.1",
68+
"@clevercloud/client": "^12.5.0",
6969
"@lit-labs/motion": "^1.0.7",
7070
"@lit-labs/virtualizer": "^2.0.14",
7171
"@shoelace-style/shoelace": "^2.18.0",
Lines changed: 57 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import { getAddon as getAddonProvider } from '@clevercloud/client/esm/api/v2/providers.js';
2-
import { ONE_SECOND } from '@clevercloud/client/esm/with-cache.js';
3-
import { sendToApi } from '../../lib/send-to-api.js';
1+
import { GetElasticsearchInfoCommand } from '@clevercloud/client/cc-api-commands/elasticsearch/get-elasticsearch-info-command.js';
2+
import { getCcApiClientWithOAuth } from '../../lib/cc-api-client.js';
43
import { defineSmartComponent } from '../../lib/smart/define-smart-component.js';
54
import '../cc-smart-container/cc-smart-container.js';
6-
import { CcAddonCredentialsClient } from './cc-addon-credentials.client.js';
75
import './cc-addon-credentials.js';
86

97
/** @type {AddonCredentialsStateLoading} */
@@ -56,13 +54,11 @@ const LOADING_STATE = {
5654
},
5755
},
5856
};
59-
const PROVIDER_ID = 'es-addon';
6057

6158
/**
6259
* @import { CcAddonCredentials } from './cc-addon-credentials.js'
63-
* @import { AddonCredentialsStateLoaded, AddonCredentialsStateLoading, ElasticProviderInfo } from './cc-addon-credentials.types.js'
60+
* @import { AddonCredentialsStateLoaded, AddonCredentialsStateLoading } from './cc-addon-credentials.types.js'
6461
* @import { AddonCredential } from '../cc-addon-credentials-content/cc-addon-credentials-content.types.js'
65-
* @import { ApiConfig } from '../../lib/send-to-api.types.js'
6662
* @import { OnContextUpdateArgs } from '../../lib/smart/smart-component.types.js'
6763
*/
6864

@@ -77,39 +73,82 @@ defineSmartComponent({
7773
* @param {OnContextUpdateArgs<CcAddonCredentials>} args
7874
*/
7975
onContextUpdate({ context, updateComponent, signal }) {
80-
const { apiConfig, addonId, ownerId } = context;
81-
const api = new Api({ apiConfig, ownerId, addonId, signal });
76+
const { apiConfig, addonId } = context;
77+
const ccApiClient = getCcApiClientWithOAuth(apiConfig);
8278

8379
updateComponent('state', LOADING_STATE);
8480

85-
api
86-
.getAllCredentials()
87-
.then(({ elastic, kibana, apm }) => {
81+
ccApiClient
82+
.send(new GetElasticsearchInfoCommand({ addonId }), { signal })
83+
.then((esInfo) => {
84+
const kibanaService = esInfo.services.find((service) => service.name === 'kibana');
85+
const apmService = esInfo.services.find((service) => service.name === 'apm');
86+
const isKibanaEnabled = kibanaService?.enabled ?? false;
87+
const isApmEnabled = apmService?.enabled ?? false;
88+
89+
/** @type {AddonCredential[]} */
90+
const elasticCredentials = [
91+
{
92+
code: 'host',
93+
value: esInfo.config.host,
94+
},
95+
{
96+
code: 'user',
97+
value: esInfo.config.user,
98+
},
99+
{
100+
code: 'password',
101+
value: esInfo.config.password,
102+
},
103+
];
104+
88105
updateComponent(
89106
'state',
90107
/** @param {AddonCredentialsStateLoaded|AddonCredentialsStateLoading} state */
91108
(state) => {
92109
state.type = 'loaded';
93-
// Build tabs object with only enabled services
110+
94111
/** @type {Record<string, {content: AddonCredential[]}>} */
95112
const updatedTabs = {
96113
elastic: {
97114
...state.tabs.elastic,
98-
content: elastic,
115+
content: elasticCredentials,
99116
},
100117
};
101118

102-
if (apm != null) {
119+
if (isApmEnabled) {
103120
updatedTabs.apm = {
104121
...state.tabs.apm,
105-
content: apm,
122+
content: [
123+
{
124+
code: 'user',
125+
value: esInfo.config.apmUser,
126+
},
127+
{
128+
code: 'password',
129+
value: esInfo.config.apmPassword,
130+
},
131+
{
132+
code: 'token',
133+
value: esInfo.config.apmAuthToken,
134+
},
135+
],
106136
};
107137
}
108138

109-
if (kibana != null) {
139+
if (isKibanaEnabled) {
110140
updatedTabs.kibana = {
111141
...state.tabs.kibana,
112-
content: kibana,
142+
content: [
143+
{
144+
code: 'user',
145+
value: esInfo.config.kibanaUser,
146+
},
147+
{
148+
code: 'password',
149+
value: esInfo.config.kibanaPassword,
150+
},
151+
],
113152
};
114153
}
115154

@@ -123,103 +162,3 @@ defineSmartComponent({
123162
});
124163
},
125164
});
126-
127-
class Api extends CcAddonCredentialsClient {
128-
/**
129-
* @param {object} params
130-
* @param {ApiConfig} params.apiConfig
131-
* @param {string} params.ownerId
132-
* @param {string} params.addonId
133-
* @param {AbortSignal} params.signal
134-
*/
135-
constructor({ apiConfig, ownerId, addonId, signal }) {
136-
super({ apiConfig, ownerId, addonId, providerId: PROVIDER_ID, signal });
137-
}
138-
139-
/**
140-
*
141-
* @param {string} providerId
142-
* @returns {Promise<ElasticProviderInfo>}
143-
*/
144-
_getAddonProvider(providerId) {
145-
return getAddonProvider({ providerId, addonId: this._addonId }).then(
146-
sendToApi({ apiConfig: this._apiConfig, signal: this._signal, cacheDelay: ONE_SECOND }),
147-
);
148-
}
149-
150-
/**
151-
* @param {'elastic' | 'apm' | 'kibana'} tabType
152-
* @return {Promise<AddonCredential[]>}
153-
*/
154-
async getCredentials(tabType) {
155-
const addonProvider = await this._getAddonProvider(this._providerId);
156-
switch (tabType) {
157-
case 'elastic':
158-
return [
159-
{
160-
code: 'host',
161-
value: addonProvider.config.host,
162-
},
163-
{
164-
code: 'user',
165-
value: addonProvider.config.user,
166-
},
167-
{
168-
code: 'password',
169-
value: addonProvider.config.password,
170-
},
171-
];
172-
case 'apm':
173-
return [
174-
{
175-
code: 'user',
176-
value: addonProvider.config.apm_user,
177-
},
178-
{
179-
code: 'password',
180-
value: addonProvider.config.apm_password,
181-
},
182-
{
183-
code: 'token',
184-
value: addonProvider.config.apm_auth_token,
185-
},
186-
];
187-
case 'kibana':
188-
return [
189-
{
190-
code: 'user',
191-
value: addonProvider.config.kibana_user,
192-
},
193-
{
194-
code: 'password',
195-
value: addonProvider.config.kibana_password,
196-
},
197-
];
198-
}
199-
}
200-
201-
/**
202-
* @return {Promise<{elastic: AddonCredential[], kibana: AddonCredential[] | null, apm: AddonCredential[] | null}>}
203-
*/
204-
async getAllCredentials() {
205-
const addonProvider = await this._getAddonProvider(this._providerId);
206-
207-
// Check which services are enabled
208-
const kibanaService = addonProvider.services.find((service) => service.name === 'kibana');
209-
const apmService = addonProvider.services.find((service) => service.name === 'apm');
210-
const isKibanaEnabled = kibanaService?.enabled ?? false;
211-
const isApmEnabled = apmService?.enabled ?? false;
212-
213-
const [elasticCredentials, kibanaCredentials, apmCredentials] = await Promise.all([
214-
this.getCredentials('elastic'),
215-
isKibanaEnabled ? this.getCredentials('kibana') : null,
216-
isApmEnabled ? this.getCredentials('apm') : null,
217-
]);
218-
219-
return {
220-
elastic: elasticCredentials,
221-
kibana: kibanaCredentials,
222-
apm: apmCredentials,
223-
};
224-
}
225-
}

0 commit comments

Comments
 (0)