mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
Co-authored-by: MathieuSevignyLavallee <MathieuSevignyLavallee@users.noreply.github.com>
84 lines
2.2 KiB
JavaScript
84 lines
2.2 KiB
JavaScript
const Docker = require("dockerode");
|
|
const { Room, RoomRepository } = require("../models/room.js");
|
|
const BaseRoomProvider = require("./base-provider.js");
|
|
|
|
class DockerRoomProvider extends BaseRoomProvider {
|
|
constructor(config, roomRepository) {
|
|
super(config, roomRepository);
|
|
this.docker = new Docker({ socketPath: "/var/run/docker.sock" });
|
|
}
|
|
|
|
async createRoom(roomId, options) {
|
|
const host = "localhost:4500";
|
|
const id = await this.roomRepository.create(
|
|
new Room(roomId, roomId, host, 0)
|
|
);
|
|
return roomRepository.get(id);
|
|
}
|
|
|
|
async deleteRoom(roomId) {
|
|
try {
|
|
const container = this.docker.getContainer(roomId);
|
|
await container.stop();
|
|
await container.remove();
|
|
|
|
await roomRepository.delete(roomId);
|
|
console.log(`Conteneur pour la salle ${roomId} supprimé.`);
|
|
} catch (error) {
|
|
console.error(
|
|
`Erreur lors de la suppression du conteneur pour la salle ${roomId}:`,
|
|
error
|
|
);
|
|
throw new Error("Failed to delete room");
|
|
}
|
|
}
|
|
|
|
async getRoomStatus(roomId) {
|
|
const room = await roomRepository.get(roomId);
|
|
if (!room) return null;
|
|
|
|
try {
|
|
const container = this.docker.getContainer(room.containerId);
|
|
const info = await container.inspect();
|
|
|
|
const updatedRoomInfo = {
|
|
...room,
|
|
status: info.State.Running ? "running" : "terminated",
|
|
containerStatus: {
|
|
Running: info.State.Running,
|
|
StartedAt: info.State.StartedAt,
|
|
FinishedAt: info.State.FinishedAt,
|
|
},
|
|
lastUpdate: Date.now(),
|
|
};
|
|
|
|
await this.roomRepository.update(updatedRoomInfo);
|
|
return updatedRoomInfo;
|
|
} catch (error) {
|
|
console.error(
|
|
`Erreur lors de la récupération du statut du conteneur pour la salle ${roomId}:`,
|
|
error
|
|
);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async listRooms() {
|
|
const rooms = await this.roomRepository.getAll();
|
|
return rooms;
|
|
}
|
|
|
|
async cleanup() {
|
|
/*
|
|
const rooms = await this.listRooms();
|
|
for (const room of rooms) {
|
|
if(room.nbStudents == 0){
|
|
await this.deleteRoom(room.roomId);
|
|
}
|
|
}
|
|
console.log("Nettoyage des salles terminé.");
|
|
*/
|
|
}
|
|
}
|
|
|
|
module.exports = DockerRoomProvider;
|