315 lines
8.1 KiB
JavaScript
315 lines
8.1 KiB
JavaScript
// Copyright 2021 99cloud
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import { action, observable, set } from 'mobx';
|
|
import { getPromises } from 'components/PrometheusChart/utils/utils';
|
|
import MonitorBase from './monitor-base';
|
|
|
|
const serviceNameMap = {
|
|
mysql_up: t('Database Service'),
|
|
rabbitmq_identity_info: t('Message Queue Service'),
|
|
memcached_up: t('Cache Service'),
|
|
};
|
|
|
|
const indexToServiceName = [
|
|
t('Database Service'),
|
|
t('Message Queue Service'),
|
|
t('Cache Service'),
|
|
];
|
|
|
|
export class OpenstackServiceStore extends MonitorBase {
|
|
// @observable
|
|
// nodes = [];
|
|
|
|
// @observable
|
|
// node = {};
|
|
|
|
@observable
|
|
nova_service = {
|
|
isLoading: false,
|
|
data: [],
|
|
};
|
|
|
|
@observable
|
|
network_service = {
|
|
isLoading: false,
|
|
data: [],
|
|
};
|
|
|
|
@observable
|
|
cinder_service = {
|
|
isLoading: false,
|
|
data: [],
|
|
};
|
|
|
|
@observable
|
|
other_service = {
|
|
isLoading: false,
|
|
data: [],
|
|
};
|
|
|
|
@action
|
|
getChartData = async () => {
|
|
// const { hostname } = this.node.metric;
|
|
const defaultPromises = [
|
|
this.getNovaService(),
|
|
this.getNetworkService(),
|
|
this.getCinderService(),
|
|
this.getOtherService(),
|
|
];
|
|
await Promise.all(defaultPromises);
|
|
};
|
|
|
|
@action
|
|
getNovaService = async () => {
|
|
set(this.nova_service, {
|
|
isLoading: true,
|
|
data: [],
|
|
});
|
|
const [currentState, last24State, libvirtdState, libvirtd24State] =
|
|
await Promise.all(getPromises.call(this, 'openstackService.novaService'));
|
|
const {
|
|
data: { result: currentStateResult },
|
|
} = currentState;
|
|
const tmp = [];
|
|
currentStateResult.forEach((service) => {
|
|
const {
|
|
metric: {
|
|
service: serviceName = '',
|
|
adminState = '',
|
|
hostname = '',
|
|
} = {},
|
|
} = service;
|
|
tmp.push({
|
|
hostname,
|
|
serviceName,
|
|
state: adminState === 'enabled' ? 'up' : 'down',
|
|
});
|
|
});
|
|
const {
|
|
data: { result: last24HResult },
|
|
} = last24State;
|
|
last24HResult.forEach((service) => {
|
|
const { metric: { service: serviceName = '', hostname = '' } = {} } =
|
|
service;
|
|
const idx = tmp.findIndex(
|
|
(item) => item.serviceName === serviceName && item.hostname === hostname
|
|
);
|
|
tmp[idx][`${serviceName}24`] = 'down';
|
|
});
|
|
const {
|
|
data: { result: data },
|
|
} = libvirtdState;
|
|
data.forEach((item) => {
|
|
const { metric, value } = item;
|
|
tmp.push({
|
|
// hard code
|
|
serviceName: 'nova_libvirt',
|
|
hostname: metric.hostname,
|
|
state: value[1] === 'enabled' ? 'up' : 'down',
|
|
});
|
|
});
|
|
const {
|
|
data: { result: libvirtd24Result },
|
|
} = libvirtd24State;
|
|
libvirtd24Result.forEach((service) => {
|
|
const { metric: { hostname = '' } = {} } = service;
|
|
const idx = tmp.findIndex(
|
|
(item) =>
|
|
item.serviceName === 'nova_libvirt' && item.hostname === hostname
|
|
);
|
|
tmp[idx].nova_libvirt24 = 'down';
|
|
});
|
|
set(this.nova_service, {
|
|
isLoading: false,
|
|
data: tmp,
|
|
});
|
|
};
|
|
|
|
@action
|
|
getNetworkService = async () => {
|
|
set(this.network_service, {
|
|
isLoading: true,
|
|
data: [],
|
|
});
|
|
const [currentState, last24State] = await Promise.all(
|
|
getPromises.call(this, 'openstackService.networkService')
|
|
);
|
|
const {
|
|
data: { result: currentStateResult },
|
|
} = currentState;
|
|
const tmp = [];
|
|
currentStateResult.forEach((service) => {
|
|
const {
|
|
metric: {
|
|
service: serviceName = '',
|
|
adminState = '',
|
|
hostname = '',
|
|
} = {},
|
|
} = service;
|
|
tmp.push({
|
|
serviceName,
|
|
hostname,
|
|
state: adminState,
|
|
});
|
|
});
|
|
const {
|
|
data: { result: last24HResult },
|
|
} = last24State;
|
|
last24HResult.forEach((service) => {
|
|
const { metric: { service: serviceName = '', hostname = '' } = {} } =
|
|
service;
|
|
const idx = tmp.findIndex(
|
|
(item) => item.serviceName === serviceName && item.hostname === hostname
|
|
);
|
|
tmp[idx][`${serviceName}24`] = 'down';
|
|
});
|
|
set(this.network_service, {
|
|
isLoading: false,
|
|
data: tmp,
|
|
});
|
|
};
|
|
|
|
@action
|
|
getCinderService = async () => {
|
|
set(this.cinder_service, {
|
|
isLoading: true,
|
|
data: [],
|
|
});
|
|
const [currentState, last24State] = await Promise.all(
|
|
getPromises.call(this, 'openstackService.cinderService')
|
|
);
|
|
const {
|
|
data: { result: currentStateResult },
|
|
} = currentState;
|
|
const tmp = [];
|
|
currentStateResult.forEach((service) => {
|
|
const {
|
|
metric: {
|
|
service: serviceName = '',
|
|
adminState = '',
|
|
hostname = '',
|
|
} = {},
|
|
} = service;
|
|
tmp.push({
|
|
serviceName,
|
|
hostname,
|
|
state: adminState === 'enabled' ? 'up' : 'down',
|
|
});
|
|
});
|
|
const {
|
|
data: { result: last24HResult },
|
|
} = last24State;
|
|
last24HResult.forEach((service) => {
|
|
const { metric: { service: serviceName = '', hostname = '' } = {} } =
|
|
service;
|
|
const idx = tmp.findIndex(
|
|
(item) => item.serviceName === serviceName && item.hostname === hostname
|
|
);
|
|
tmp[idx][`${serviceName}24`] = 'down';
|
|
});
|
|
set(this.cinder_service, {
|
|
isLoading: false,
|
|
data: tmp,
|
|
});
|
|
};
|
|
|
|
@action
|
|
getOtherService = async () => {
|
|
set(this.other_service, {
|
|
isLoading: true,
|
|
data: [],
|
|
});
|
|
const tmp = [];
|
|
let results = await Promise.all(
|
|
getPromises.call(this, 'openstackService.otherService')
|
|
);
|
|
results.forEach((result) => {
|
|
const {
|
|
data: { result: data },
|
|
} = result;
|
|
data.forEach((d) => {
|
|
const { metric, value } = d;
|
|
tmp.push({
|
|
serviceName: serviceNameMap[metric.__name__],
|
|
hostname: metric.instance,
|
|
state: value[1] === '1' ? 'up' : 'down',
|
|
});
|
|
});
|
|
});
|
|
results = await Promise.all(
|
|
getPromises.call(this, 'openstackService.otherServiceMinOverTime')
|
|
);
|
|
results.forEach((result, index) => {
|
|
const {
|
|
data: { result: last24HResult },
|
|
} = result;
|
|
last24HResult.forEach((service) => {
|
|
const { metric: { instance = '' } = {} } = service;
|
|
const idx = tmp.findIndex(
|
|
(item) =>
|
|
item.serviceName === indexToServiceName[index] &&
|
|
item.hostname === instance
|
|
);
|
|
tmp[idx][`${indexToServiceName[index]}24`] = 'down';
|
|
});
|
|
});
|
|
// const [heatResponse, heat24Response] = await Promise.all(
|
|
// getPromises.call(this, 'openstackService.heatMinOverTime')
|
|
// );
|
|
// const {
|
|
// data: { result: heatResults },
|
|
// } = heatResponse;
|
|
// heatResults.forEach((item) => {
|
|
// const {
|
|
// metric: {
|
|
// host = '',
|
|
// binary = '',
|
|
// engine_id = '',
|
|
// services_status = '',
|
|
// } = {},
|
|
// } = item;
|
|
// tmp.push({
|
|
// serviceName: binary,
|
|
// host,
|
|
// state: services_status,
|
|
// engine_id,
|
|
// });
|
|
// });
|
|
// const {
|
|
// data: { result: heat24Results },
|
|
// } = heat24Response;
|
|
// heat24Results.forEach((result) => {
|
|
// const { metric: { binary = '', engine_id = '', host = '' } = {} } =
|
|
// result;
|
|
// const idx = tmp.findIndex(
|
|
// (item) =>
|
|
// item.serviceName === binary &&
|
|
// item.host === host &&
|
|
// item.engine_id === engine_id
|
|
// );
|
|
// tmp[idx][`${binary}24`] = 'down';
|
|
// });
|
|
|
|
set(this.other_service, {
|
|
isLoading: false,
|
|
data: tmp,
|
|
});
|
|
};
|
|
}
|
|
|
|
const globalOpenstackServiceStore = new OpenstackServiceStore();
|
|
|
|
export default globalOpenstackServiceStore;
|