The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/app/api/server/v1/instances.ts

49 lines
1.2 KiB

import { InstanceStatus } from '@rocket.chat/models';
import { Instance as InstanceService } from '../../../../ee/server/sdk';
import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission';
import { API } from '../api';
import { isRunningMs } from '../../../../server/lib/isRunningMs';
const getMatrixInstances = (() => {
if (isRunningMs()) {
return () => [];
}
return () => InstanceService.getInstances();
})();
API.v1.addRoute(
'instances.get',
{ authRequired: true },
{
async get() {
if (!(await hasPermissionAsync(this.userId, 'view-statistics'))) {
return API.v1.unauthorized();
}
const instanceRecords = await InstanceStatus.find().toArray();
const connections = await getMatrixInstances();
const result = instanceRecords.map((instanceRecord) => {
const connection = connections.find((c) => c.id === instanceRecord._id);
return {
address: connection?.ipList[0],
currentStatus: {
connected: connection?.available || false,
lastHeartbeatTime: connection?.lastHeartbeatTime,
local: connection?.local,
},
instanceRecord,
broadcastAuth: true,
};
});
return API.v1.success({
instances: result,
});
},
},
);