skyline/src/stores/nova/server.js
xusongfu 99d839a24f fix: Fix virtual resource about compute
Use Nova service api to get the correct count of compute

Change-Id: I6a2bd8797e219d31f899f86e338acb5c56fd2707
2022-06-07 14:59:38 +08:00

112 lines
3.5 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, extendObservable } from 'mobx';
import client from 'client';
import Base from 'stores/base';
import globalRootStore from 'stores/root';
export class ServerStore extends Base {
constructor() {
super();
extendObservable(this, {
virtualResource: {},
virtualResourceLoading: true,
});
}
get client() {
return client.nova.servers;
}
@action
async getVirtualResourceOverview() {
this.virtualResourceLoading = true;
const promiseArray = [
this.requestListAllByLimit({ all_tenants: true }, 1000),
this.requestListAllByLimit({ all_tenants: true, status: 'ACTIVE' }, 1000),
this.requestListAllByLimit({ all_tenants: true, status: 'ERROR' }, 1000),
this.requestListAllByLimit(
{ all_tenants: true, status: 'SHUTOFF' },
1000
),
];
if (globalRootStore.checkEndpoint('cinder')) {
const volumeResource = [
client.skyline.extension.volumes({ limit: 10, all_projects: true }),
client.skyline.extension.volumes({
limit: 10,
all_projects: true,
status: 'in-use',
}),
client.skyline.extension.volumes({
limit: 10,
all_projects: true,
status: 'error',
}),
client.skyline.extension.volumes({
limit: 10,
all_projects: true,
status: 'available',
}),
];
promiseArray.push(...volumeResource);
}
const [
allServers,
activeServers,
errorServers,
shutoffServers,
allVolumes,
attachVolumes,
errorVolumes,
availableVolumes,
] = await Promise.all(promiseArray);
const allServersCount = allServers.length;
const activeServersCount = activeServers.length;
const errorServersCount = errorServers.length;
const shutoffServersCount = shutoffServers.length;
const serviceNum = {
all: allServersCount,
active: activeServersCount,
error: errorServersCount,
shutoff: shutoffServersCount,
other:
allServersCount -
(activeServersCount + errorServersCount + shutoffServersCount),
};
this.virtualResource = { serviceNum };
if (globalRootStore.checkEndpoint('cinder')) {
const { count: allVolumesCount } = allVolumes;
const { count: attachVolumesCount } = attachVolumes;
const { count: errorVolumesCount } = errorVolumes;
const { count: availableVolumesCount } = availableVolumes;
const volumeNum = {
all: allVolumesCount,
active: attachVolumesCount,
error: errorVolumesCount,
available: availableVolumesCount,
other:
allVolumesCount -
(attachVolumesCount + errorVolumesCount + availableVolumesCount),
};
this.virtualResource.volumeNum = volumeNum;
}
this.virtualResourceLoading = false;
}
}
const globalServerStore = new ServerStore();
export default globalServerStore;