mirror of https://github.com/rancher/dashboard.git
74 lines
2.3 KiB
JavaScript
74 lines
2.3 KiB
JavaScript
// Helpers for determining if V2 or v1 Monitoring are installed
|
|
|
|
import { SCHEMA, MONITORING, WORKLOAD_TYPES } from '@/config/types';
|
|
import { normalizeType } from '@/plugins/steve/normalize';
|
|
import { findBy } from '@/utils/array';
|
|
import { isEmpty } from '@/utils/object';
|
|
|
|
// Can be used inside a components' computed property
|
|
export function monitoringStatus() {
|
|
return {
|
|
monitoringStatus() {
|
|
const status = {
|
|
v1: haveV1Monitoring(this.$store.getters),
|
|
v2: haveV2Monitoring(this.$store.getters),
|
|
};
|
|
|
|
status.installed = status.v1 || status.v2;
|
|
|
|
return status;
|
|
}
|
|
};
|
|
}
|
|
|
|
export function haveV2Monitoring(getters) {
|
|
// Can't have V2 and V1 monitoring installed, so if V1 is installed we know v2 is not
|
|
if (haveV1Monitoring(getters)) {
|
|
return false;
|
|
}
|
|
|
|
// Just check for the pod monitors CRD
|
|
const schemas = getters[`cluster/all`](SCHEMA);
|
|
const exists = findBy(schemas, 'id', normalizeType(MONITORING.PODMONITOR));
|
|
|
|
return !!exists;
|
|
}
|
|
|
|
// For v1 Monitoring, the cluster object indicates presence via status.monitoringStatus
|
|
export function haveV1Monitoring(getters) {
|
|
const cluster = getters['currentCluster'];
|
|
|
|
return !!cluster?.status?.monitoringStatus;
|
|
}
|
|
|
|
const CATTLE_MONITORING_NAMESPACE = 'cattle-monitoring-system';
|
|
|
|
export async function haveV1MonitoringWorkloads(store) {
|
|
const workloadsByType = await Promise.all(
|
|
Object.values(WORKLOAD_TYPES).map(type => store.dispatch('cluster/findAll', { type })
|
|
)
|
|
);
|
|
const workloads = workloadsByType.flat();
|
|
|
|
for (let i = 0; i < workloads.length; i++) {
|
|
const workload = workloads[i];
|
|
|
|
if (!isEmpty(workload?.spec?.template?.spec?.containers) &&
|
|
workload.spec.template.spec.containers.find(c => c.image?.includes('quay.io/coreos/prometheus-operator') ||
|
|
c.image?.includes('rancher/coreos-prometheus-operator')) &&
|
|
workload?.metadata?.namespace !== CATTLE_MONITORING_NAMESPACE) {
|
|
return Promise.resolve(true);
|
|
}
|
|
|
|
return Promise.resolve(false);
|
|
}
|
|
}
|
|
|
|
// Other ways we check for monitoring:
|
|
|
|
// (1) Using counts (requires RBAC permissions)
|
|
// return !!this.clusterCounts?.[0]?.counts?.[CATALOG.APP]?.namespaces?.['cattle-monitoring-system'];
|
|
|
|
// (2) Retrieving all workloads and looking for containers with a given image
|
|
// See chart/monitoring/index.vue
|