Skip to content

Commit cd2058a

Browse files
authored
Move API surface to Client files (#2725)
1 parent 3032c5a commit cd2058a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+427
-553
lines changed

src/Frontend/src/components/AutoRefreshDataView.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { onMounted, onUnmounted, ref, watch } from "vue";
33
import ItemsPerPage from "@/components/ItemsPerPage.vue";
44
import PaginationStrip from "@/components/PaginationStrip.vue";
55
import type DataViewPageModel from "./DataViewPageModel";
6-
import { useServiceControlStore } from "@/stores/ServiceControlStore";
6+
import serviceControlClient from "@/components/serviceControlClient";
77
88
const props = withDefaults(
99
defineProps<{
@@ -20,8 +20,6 @@ const props = withDefaults(
2020
let refreshTimer: number | undefined;
2121
const viewModel = defineModel<DataViewPageModel<T>>({ required: true });
2222
23-
const store = useServiceControlStore();
24-
2523
const pageNumber = ref(1);
2624
const itemsPerPage = ref(props.itemsPerPage);
2725
@@ -37,7 +35,7 @@ watch(itemsPerPage, () => loadData());
3735
watch(pageNumber, () => loadData());
3836
3937
async function loadData() {
40-
const [response, data] = await store.fetchTypedFromServiceControl<T[]>(`${props.apiUrl}?page=${pageNumber.value}&per_page=${itemsPerPage.value}`);
38+
const [response, data] = await serviceControlClient.fetchTypedFromServiceControl<T[]>(`${props.apiUrl}?page=${pageNumber.value}&per_page=${itemsPerPage.value}`);
4139
if (response.ok) {
4240
viewModel.value.totalCount = parseInt(response.headers.get("Total-Count") ?? "0");
4341
viewModel.value.data = data;

src/Frontend/src/components/BackendChecksNotifications.vue

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,15 @@ import { useShowToast } from "@/composables/toast";
77
import { TYPE } from "vue-toastification";
88
import useConnectionsAndStatsAutoRefresh from "@/composables/useConnectionsAndStatsAutoRefresh";
99
import useEnvironmentAndVersionsAutoRefresh from "@/composables/useEnvironmentAndVersionsAutoRefresh";
10-
import { useServiceControlStore } from "@/stores/ServiceControlStore";
11-
import { storeToRefs } from "pinia";
12-
import { useMonitoringStore } from "@/stores/MonitoringStore";
10+
import serviceControlClient from "@/components/serviceControlClient";
11+
import monitoringClient from "./monitoring/monitoringClient";
1312
1413
const router = useRouter();
15-
1614
const { store: connectionStore } = useConnectionsAndStatsAutoRefresh();
1715
const connectionState = connectionStore.connectionState;
1816
const monitoringConnectionState = connectionStore.monitoringConnectionState;
1917
const { store: environmentStore } = useEnvironmentAndVersionsAutoRefresh();
2018
const environment = environmentStore.environment;
21-
const serviceControlStore = useServiceControlStore();
22-
const monitoringStore = useMonitoringStore();
23-
const { serviceControlUrl } = storeToRefs(serviceControlStore);
24-
const { monitoringUrl, isMonitoringDisabled } = storeToRefs(monitoringStore);
25-
2619
const primaryConnectionFailure = computed(() => connectionState.unableToConnect);
2720
const monitoringConnectionFailure = computed(() => monitoringConnectionState.unableToConnect);
2821
@@ -31,26 +24,26 @@ watch(primaryConnectionFailure, (newValue, oldValue) => {
3124
if (newValue !== oldValue && !(oldValue === null && newValue === false)) {
3225
const connectionUrl = router.resolve(routeLinks.configuration.connections.link).href;
3326
if (newValue) {
34-
useShowToast(TYPE.ERROR, "Error", `Could not connect to ServiceControl at ${serviceControlUrl.value}. <a class="btn btn-default" href="${connectionUrl}">View connection settings</a>`);
27+
useShowToast(TYPE.ERROR, "Error", `Could not connect to ServiceControl at ${serviceControlClient.url}. <a class="btn btn-default" href="${connectionUrl}">View connection settings</a>`);
3528
} else {
36-
useShowToast(TYPE.SUCCESS, "Success", `Connection to ServiceControl was successful at ${serviceControlUrl.value}.`);
29+
useShowToast(TYPE.SUCCESS, "Success", `Connection to ServiceControl was successful at ${serviceControlClient.url}.`);
3730
}
3831
}
3932
});
4033
4134
watch(monitoringConnectionFailure, (newValue, oldValue) => {
4235
// Only watch the state change if monitoring is enabled
43-
if (isMonitoringDisabled.value) {
36+
if (monitoringClient.isMonitoringDisabled) {
4437
return;
4538
}
4639
4740
//NOTE to eliminate success msg showing everytime the screen is refreshed
4841
if (newValue !== oldValue && !(oldValue === null && newValue === false)) {
4942
const connectionUrl = router.resolve(routeLinks.configuration.connections.link).href;
5043
if (newValue) {
51-
useShowToast(TYPE.ERROR, "Error", `Could not connect to the ServiceControl Monitoring service at ${monitoringUrl.value}. <a class="btn btn-default" href="${connectionUrl}">View connection settings</a>`);
44+
useShowToast(TYPE.ERROR, "Error", `Could not connect to the ServiceControl Monitoring service at ${monitoringClient.url}. <a class="btn btn-default" href="${connectionUrl}">View connection settings</a>`);
5245
} else {
53-
useShowToast(TYPE.SUCCESS, "Success", `Connection to ServiceControl Monitoring service was successful at ${monitoringUrl.value}.`);
46+
useShowToast(TYPE.SUCCESS, "Success", `Connection to ServiceControl Monitoring service was successful at ${monitoringClient.url}.`);
5447
}
5548
}
5649
});

src/Frontend/src/components/PageFooter.vue

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,28 @@ import FAIcon from "@/components/FAIcon.vue";
66
import { faArrowTurnUp, faPlus } from "@fortawesome/free-solid-svg-icons";
77
import useConnectionsAndStatsAutoRefresh from "@/composables/useConnectionsAndStatsAutoRefresh";
88
import useEnvironmentAndVersionsAutoRefresh from "@/composables/useEnvironmentAndVersionsAutoRefresh";
9-
import { useServiceControlStore } from "@/stores/ServiceControlStore";
9+
import serviceControlClient from "@/components/serviceControlClient";
1010
import { storeToRefs } from "pinia";
1111
import { useConfigurationStore } from "@/stores/ConfigurationStore";
1212
import { useLicenseStore } from "@/stores/LicenseStore";
13-
import { useMonitoringStore } from "@/stores/MonitoringStore";
13+
import monitoringClient from "./monitoring/monitoringClient";
1414
1515
const { store: connectionStore } = useConnectionsAndStatsAutoRefresh();
1616
const connectionState = connectionStore.connectionState;
1717
const monitoringConnectionState = connectionStore.monitoringConnectionState;
1818
const { store: environmentAndVersionsStore } = useEnvironmentAndVersionsAutoRefresh();
1919
const newVersions = environmentAndVersionsStore.newVersions;
2020
const environment = environmentAndVersionsStore.environment;
21-
const serviceControlStore = useServiceControlStore();
22-
const monitoringStore = useMonitoringStore();
23-
const { serviceControlUrl } = storeToRefs(serviceControlStore);
24-
const { monitoringUrl } = storeToRefs(monitoringStore);
2521
const licenseStore = useLicenseStore();
2622
const { licenseStatus, license } = licenseStore;
27-
28-
const isMonitoringEnabled = computed(() => {
29-
return monitoringUrl.value !== "!" && monitoringUrl.value !== "" && monitoringUrl.value !== null && monitoringUrl.value !== undefined;
30-
});
23+
const isMonitoringEnabled = monitoringClient.isMonitoringEnabled;
3124
3225
const scAddressTooltip = computed(() => {
33-
return `ServiceControl URL ${serviceControlUrl.value}`;
26+
return `ServiceControl URL ${serviceControlClient.url}`;
3427
});
3528
3629
const scMonitoringAddressTooltip = computed(() => {
37-
return `Monitoring URL ${monitoringUrl.value}`;
30+
return `Monitoring URL ${monitoringClient.url}`;
3831
});
3932
4033
const configurationStore = useConfigurationStore();

src/Frontend/src/components/PageHeader.vue

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,15 @@ import DashboardMenuItem from "@/components/dashboard/DashboardMenuItem.vue";
1212
import FeedbackButton from "@/components/FeedbackButton.vue";
1313
import ThroughputMenuItem from "@/views/throughputreport/ThroughputMenuItem.vue";
1414
import AuditMenuItem from "./audit/AuditMenuItem.vue";
15-
import { useMonitoringStore } from "@/stores/MonitoringStore";
16-
import { storeToRefs } from "pinia";
15+
import monitoringClient from "@/components/monitoring/monitoringClient";
1716
18-
const monitoringStore = useMonitoringStore();
19-
const { isMonitoringEnabled } = storeToRefs(monitoringStore);
17+
const isMonitoringEnabled = monitoringClient.isMonitoringEnabled;
2018
// prettier-ignore
2119
const menuItems = computed(
2220
() => [
2321
DashboardMenuItem,
2422
HeartbeatsMenuItem,
25-
...(isMonitoringEnabled.value ? [MonitoringMenuItem] : []),
23+
...(isMonitoringEnabled ? [MonitoringMenuItem] : []),
2624
AuditMenuItem,
2725
FailedMessagesMenuItem,
2826
CustomChecksMenuItem,

src/Frontend/src/components/ServiceControlAvailable.vue

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@
22
import ConditionalRender from "@/components/ConditionalRender.vue";
33
import routeLinks from "@/router/routeLinks";
44
import useConnectionsAndStatsAutoRefresh from "@/composables/useConnectionsAndStatsAutoRefresh";
5-
import { useServiceControlStore } from "@/stores/ServiceControlStore";
6-
import { storeToRefs } from "pinia";
5+
import serviceControlClient from "@/components/serviceControlClient";
76
87
const { store: connectionStore } = useConnectionsAndStatsAutoRefresh();
98
const connectionState = connectionStore.connectionState;
10-
const serviceControlStore = useServiceControlStore();
11-
const { serviceControlUrl } = storeToRefs(serviceControlStore);
129
</script>
1310

1411
<template>
@@ -19,7 +16,7 @@ const { serviceControlUrl } = storeToRefs(serviceControlStore);
1916
<h1>Cannot connect to ServiceControl</h1>
2017
<p>
2118
ServicePulse is unable to connect to the ServiceControl instance at
22-
<span id="serviceControlUrl">{{ serviceControlUrl }}</span
19+
<span id="serviceControlUrl">{{ serviceControlClient.url }}</span
2320
>. Please ensure that ServiceControl is running and accessible from your machine.
2421
</p>
2522
<div class="action-toolbar">

src/Frontend/src/components/configuration/EndpointConnection.vue

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,9 @@ import { onMounted, ref } from "vue";
33
import LicenseNotExpired from "../LicenseNotExpired.vue";
44
import ServiceControlAvailable from "../ServiceControlAvailable.vue";
55
import CodeEditor from "@/components/CodeEditor.vue";
6-
import { useServiceControlStore } from "@/stores/ServiceControlStore";
7-
import { storeToRefs } from "pinia";
6+
import serviceControlClient, { ServiceControlInstanceConnection } from "@/components/serviceControlClient";
87
import LoadingSpinner from "../LoadingSpinner.vue";
9-
import { useMonitoringStore } from "@/stores/MonitoringStore";
10-
11-
interface ServiceControlInstanceConnection {
12-
settings: { [key: string]: object };
13-
errors: string[];
14-
}
15-
16-
interface MetricsConnectionDetails {
17-
Enabled: boolean;
18-
MetricsQueue?: string;
19-
Interval?: string;
20-
}
21-
22-
const serviceControlStore = useServiceControlStore();
23-
const monitoringStore = useMonitoringStore();
24-
const { serviceControlUrl } = storeToRefs(serviceControlStore);
25-
const { monitoringUrl } = storeToRefs(monitoringStore);
8+
import monitoringClient, { MetricsConnectionDetails } from "../monitoring/monitoringClient";
269
2710
const loading = ref(true);
2811
const showCodeOnlyTab = ref(true);
@@ -78,8 +61,8 @@ function switchJsonTab() {
7861
}
7962
8063
async function serviceControlConnections() {
81-
const scConnectionResult = getServiceControlConnection();
82-
const monitoringConnectionResult = getMonitoringConnection();
64+
const scConnectionResult = serviceControlClient.getServiceControlConnection();
65+
const monitoringConnectionResult = monitoringClient.getMonitoringConnection();
8366
8467
const [scConnection, mConnection] = await Promise.all([scConnectionResult, monitoringConnectionResult]);
8568
return {
@@ -93,24 +76,6 @@ async function serviceControlConnections() {
9376
},
9477
};
9578
}
96-
97-
async function getServiceControlConnection() {
98-
try {
99-
const [, data] = await serviceControlStore.fetchTypedFromServiceControl<ServiceControlInstanceConnection>("connection");
100-
return data;
101-
} catch {
102-
return { errors: [`Error reaching ServiceControl at ${serviceControlUrl.value} connection`] } as ServiceControlInstanceConnection;
103-
}
104-
}
105-
106-
async function getMonitoringConnection() {
107-
try {
108-
const [, data] = await monitoringStore.fetchTypedFromMonitoring<{ Metrics: MetricsConnectionDetails }>("connection");
109-
return { ...data, errors: [] };
110-
} catch {
111-
return { Metrics: null, errors: [`Error SC Monitoring instance at ${monitoringUrl.value}connection`] };
112-
}
113-
}
11479
</script>
11580

11681
<template>

src/Frontend/src/components/configuration/PlatformConnections.vue

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,21 @@ import { ref } from "vue";
33
import { faCheck, faExclamationTriangle } from "@fortawesome/free-solid-svg-icons";
44
import FAIcon from "@/components/FAIcon.vue";
55
import useConnectionsAndStatsAutoRefresh from "@/composables/useConnectionsAndStatsAutoRefresh";
6-
import { useServiceControlStore } from "@/stores/ServiceControlStore";
7-
import { storeToRefs } from "pinia";
8-
import { useMonitoringStore } from "@/stores/MonitoringStore";
6+
import serviceControlClient from "@/components/serviceControlClient";
7+
import monitoringClient from "../monitoring/monitoringClient";
98
109
const { store: connectionStore } = useConnectionsAndStatsAutoRefresh();
1110
const connectionState = connectionStore.connectionState;
1211
const monitoringConnectionState = connectionStore.monitoringConnectionState;
1312
14-
const serviceControlStore = useServiceControlStore();
15-
const monitoringStore = useMonitoringStore();
16-
serviceControlStore.refresh();
17-
monitoringStore.refresh();
18-
const localServiceControlUrl = ref(serviceControlStore.serviceControlUrl);
19-
const localMonitoringUrl = ref(monitoringStore.monitoringUrl);
20-
const { isMonitoringDisabled } = storeToRefs(monitoringStore);
21-
13+
const localServiceControlUrl = ref(serviceControlClient.url);
14+
const localMonitoringUrl = ref(monitoringClient.url);
15+
const isMonitoringDisabled = monitoringClient.isMonitoringDisabled;
2216
const testingServiceControl = ref(false);
2317
const serviceControlValid = ref<boolean | null>(null);
2418
2519
const testingMonitoring = ref(false);
2620
const monitoringValid = ref<boolean | null>(null);
27-
2821
const connectionSaved = ref<boolean | null>(null);
2922
3023
async function testServiceControlUrl() {
@@ -82,13 +75,10 @@ function updateServiceControlUrls() {
8275
localMonitoringUrl.value += "/";
8376
}
8477
85-
//values have changed. They'll be reset after page reloads
86-
window.localStorage.removeItem("scu");
87-
window.localStorage.removeItem("mu");
88-
89-
const newSearch = `?scu=${localServiceControlUrl.value}&mu=${localMonitoringUrl.value}`;
90-
console.debug("updateConnections - new query string: ", newSearch);
91-
window.location.search = newSearch;
78+
const params = new URLSearchParams();
79+
params.set("scu", localServiceControlUrl.value);
80+
params.set("mu", localMonitoringUrl.value);
81+
window.location.search = `?${params.toString()}`;
9282
}
9383
</script>
9484

src/Frontend/src/components/failedmessages/FailedMessageGroups.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ import SortOptions, { SortDirection } from "@/resources/SortOptions";
1010
import GroupOperation from "@/resources/GroupOperation";
1111
import getSortFunction from "@/components/getSortFunction";
1212
import { faArrowDownAZ, faArrowDownZA, faArrowDownShortWide, faArrowDownWideShort, faArrowDown19, faArrowDown91 } from "@fortawesome/free-solid-svg-icons";
13-
import { useServiceControlStore } from "@/stores/ServiceControlStore";
14-
15-
const serviceControlStore = useServiceControlStore();
13+
import serviceControlClient from "@/components/serviceControlClient";
1614
1715
const selectedClassifier = ref<string>("");
1816
const classifiers = ref<string[]>([]);
@@ -60,7 +58,7 @@ const sortOptions: SortOptions<GroupOperation>[] = [
6058
];
6159
6260
async function getGroupingClassifiers() {
63-
const [, data] = await serviceControlStore.fetchTypedFromServiceControl<string[]>("recoverability/classifiers");
61+
const [, data] = await serviceControlClient.fetchTypedFromServiceControl<string[]>("recoverability/classifiers");
6462
classifiers.value = data;
6563
}
6664

src/Frontend/src/components/failedmessages/LastTenOperations.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ import RecoverabilityHistoryResponse from "@/resources/RecoverabilityHistoryResp
77
import FAIcon from "@/components/FAIcon.vue";
88
import { faAngleDown, faAngleRight, faEnvelope } from "@fortawesome/free-solid-svg-icons";
99
import { faClock } from "@fortawesome/free-regular-svg-icons";
10-
import { useServiceControlStore } from "@/stores/ServiceControlStore";
10+
import serviceControlClient from "@/components/serviceControlClient";
1111
1212
const historicOperations = ref<HistoricRetryOperation[]>([]);
1313
const showHistoricRetries = ref(false);
1414
15-
const serviceControlStore = useServiceControlStore();
16-
1715
async function getHistoricOperations() {
18-
const [, data] = await serviceControlStore.fetchTypedFromServiceControl<RecoverabilityHistoryResponse>("recoverability/history");
16+
const [, data] = await serviceControlClient.fetchTypedFromServiceControl<RecoverabilityHistoryResponse>("recoverability/history");
1917
historicOperations.value = data.historic_operations;
2018
}
2119

src/Frontend/src/components/failedmessages/messageGroupClient.ts

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ServiceControlStore, useServiceControlStore } from "@/stores/ServiceControlStore";
1+
import serviceControlClient from "@/components/serviceControlClient";
22
import type GroupOperation from "@/resources/GroupOperation";
33

44
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
@@ -8,52 +8,46 @@ export interface ErrorResponse {
88
}
99

1010
export class MessageGroupClient {
11-
serviceControlStore: ServiceControlStore;
12-
constructor() {
13-
//this module is only called from within view setup or other pinia stores, so this call is lifecycle safe
14-
this.serviceControlStore = useServiceControlStore();
15-
}
16-
1711
public async getExceptionGroups(classifier: string = "") {
18-
const [, data] = await this.serviceControlStore.fetchTypedFromServiceControl<GroupOperation[]>(`recoverability/groups/${classifier}`);
12+
const [, data] = await serviceControlClient.fetchTypedFromServiceControl<GroupOperation[]>(`recoverability/groups/${classifier}`);
1913
return data;
2014
}
2115

2216
public async getExceptionGroupsForEndpoint(classifier: string = "", classiferFilter = "") {
23-
const [, data] = await this.serviceControlStore.fetchTypedFromServiceControl<GroupOperation[]>(`recoverability/groups/${classifier}?classifierFilter=${classiferFilter}`);
17+
const [, data] = await serviceControlClient.fetchTypedFromServiceControl<GroupOperation[]>(`recoverability/groups/${classifier}?classifierFilter=${classiferFilter}`);
2418
return data;
2519
}
2620

2721
//delete note by group id
2822
public async deleteNote(groupId: string) {
29-
return this.evaluateResponse(await this.serviceControlStore.deleteFromServiceControl(`recoverability/groups/${groupId}/comment`));
23+
return this.evaluateResponse(await serviceControlClient.deleteFromServiceControl(`recoverability/groups/${groupId}/comment`));
3024
}
3125

3226
//edit or create note by group id
3327
public async editOrCreateNote(groupId: string, comment: string) {
34-
return this.evaluateResponse(await this.serviceControlStore.postToServiceControl(`recoverability/groups/${groupId}/comment?comment=${comment}`));
28+
return this.evaluateResponse(await serviceControlClient.postToServiceControl(`recoverability/groups/${groupId}/comment?comment=${comment}`));
3529
}
3630

3731
//archive exception group by group id
3832
//archiveGroup
3933
public async archiveExceptionGroup(groupId: string) {
40-
return this.evaluateResponse(await this.serviceControlStore.postToServiceControl(`recoverability/groups/${groupId}/errors/archive`));
34+
return this.evaluateResponse(await serviceControlClient.postToServiceControl(`recoverability/groups/${groupId}/errors/archive`));
4135
}
4236

4337
//restore group by group id
4438
public async restoreGroup(groupId: string) {
45-
return this.evaluateResponse(await this.serviceControlStore.postToServiceControl(`recoverability/groups/${groupId}/errors/unarchive`));
39+
return this.evaluateResponse(await serviceControlClient.postToServiceControl(`recoverability/groups/${groupId}/errors/unarchive`));
4640
}
4741

4842
//retry exception group by group id
4943
//retryGroup
5044
public async retryExceptionGroup(groupId: string) {
51-
return this.evaluateResponse(await this.serviceControlStore.postToServiceControl(`recoverability/groups/${groupId}/errors/retry`));
45+
return this.evaluateResponse(await serviceControlClient.postToServiceControl(`recoverability/groups/${groupId}/errors/retry`));
5246
}
5347

5448
//acknowledge archive exception group by group id
5549
public async acknowledgeArchiveGroup(groupId: string) {
56-
return this.evaluateResponse(await this.serviceControlStore.deleteFromServiceControl(`recoverability/unacknowledgedgroups/${groupId}`));
50+
return this.evaluateResponse(await serviceControlClient.deleteFromServiceControl(`recoverability/unacknowledgedgroups/${groupId}`));
5751
}
5852

5953
evaluateResponse(response: Response): SuccessResponse | ErrorResponse {

0 commit comments

Comments
 (0)