Use Nova service api to get the correct count of compute Change-Id: I6a2bd8797e219d31f899f86e338acb5c56fd2707
112 lines
3.5 KiB
JavaScript
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;
|