/// /// import {Util} from "../../util"; import {ServerConnection} from "../../serverconnection"; export class APIController { constructor(onConnect: (api: APIController) => any) { ServerConnection.connect(() => { onConnect(this); }); } /// // PATH: /users /// // METHOD: GET public getUserByEmail(email: string): Promise { return ServerConnection.send({ path: "/users", method: "GET", parameters: { body: {}, path: {}, query: { email } } }); } // METHOD: POST public addUser(user: IUser): Promise { return ServerConnection.send({ path: "/users", method: "POST", parameters: { body: { user: user }, path: {}, query: {} } }); } /// // PATH: /users/{id} /// // METHOD: GET public getUser(userId: number): Promise { return ServerConnection.send({ path: "/users/{userId}", method: "GET", parameters: { body: {}, path: { userId }, query: {} } }); } // METHOD: PUT public updateUser(userId: number, user: IUser): Promise { return ServerConnection.send({ path: "/users/{userId}", method: "PUT", parameters: { body: { user: { givenName: user.givenName, familyName: user.familyName } }, path: { userId }, query: {} } }); } // METHOD: DELETE public deleteUser(userId: number): Promise { return ServerConnection.send({ path: "/users/{userId}", method: "DELETE", parameters: { body: {}, path: { userId }, query: {} } }); } /// // PATH: /users/{userId}/authorizations /// // METHOD: GET public getAuthorizationsByUser(userId: number): Promise { let authorizations = []; return ServerConnection.send({ path: "/users/{userId}/authorizations", method: "GET", parameters: { body: {}, path: { userId }, query: {} } }).then((data: any) => { authorizations = data; return this.getUser(userId); }).then((userData: any) => { let promises = []; authorizations.forEach((authorization: IAuthorization) => { authorization.user = userData; promises.push(this.getSimulation(authorization.simulationId).then((simulationData: any) => { authorization.simulation = simulationData; })); }); return Promise.all(promises); }).then((data: any) => { return authorizations; }); } /// // PATH: /simulations /// // METHOD: POST public addSimulation(simulation: ISimulation): Promise { return ServerConnection.send({ path: "/simulations", method: "POST", parameters: { body: { simulation: Util.packageForSending(simulation) }, path: {}, query: {} } }).then((data: any) => { this.parseSimulationTimestamps(data); return data; }); } /// // PATH: /simulations/{simulationId} /// // METHOD: GET public getSimulation(simulationId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}", method: "GET", parameters: { body: {}, path: { simulationId }, query: {} } }).then((data: any) => { this.parseSimulationTimestamps(data); return data; }); } // METHOD: PUT public updateSimulation(simulation: ISimulation): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}", method: "PUT", parameters: { body: { simulation: Util.packageForSending(simulation) }, path: { simulationId: simulation.id }, query: {} } }).then((data: any) => { this.parseSimulationTimestamps(data); return data; }); } // METHOD: DELETE public deleteSimulation(simulationId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}", method: "DELETE", parameters: { body: {}, path: { simulationId }, query: {} } }); } /// // PATH: /simulations/{simulationId}/authorizations /// // METHOD: GET public getAuthorizationsBySimulation(simulationId: number): Promise { let authorizations = []; return ServerConnection.send({ path: "/simulations/{simulationId}/authorizations", method: "GET", parameters: { body: {}, path: { simulationId }, query: {} } }).then((data: any) => { authorizations = data; return this.getSimulation(simulationId); }).then((simulationData: any) => { let promises = []; authorizations.forEach((authorization: IAuthorization) => { authorization.simulation = simulationData; promises.push(this.getUser(authorization.userId).then((userData: any) => { authorization.user = userData; })); }); return Promise.all(promises); }).then((data: any) => { return authorizations; }); } /// // PATH: /simulations/{simulationId}/authorizations/{userId} /// // METHOD: GET // Not needed // METHOD: POST public addAuthorization(authorization: IAuthorization): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/authorizations/{userId}", method: "POST", parameters: { body: { authorization: { authorizationLevel: authorization.authorizationLevel } }, path: { simulationId: authorization.simulationId, userId: authorization.userId }, query: {} } }); } // METHOD: PUT public updateAuthorization(authorization: IAuthorization): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/authorizations/{userId}", method: "PUT", parameters: { body: { authorization: { authorizationLevel: authorization.authorizationLevel } }, path: { simulationId: authorization.simulationId, userId: authorization.userId }, query: {} } }); } // METHOD: DELETE public deleteAuthorization(authorization: IAuthorization): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/authorizations/{userId}", method: "DELETE", parameters: { body: {}, path: { simulationId: authorization.simulationId, userId: authorization.userId }, query: {} } }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId} /// // METHOD: GET public getDatacenter(simulationId: number, datacenterId: number): Promise { let datacenter; return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}", method: "GET", parameters: { body: {}, path: { simulationId, datacenterId }, query: {} } }).then((data: any) => { datacenter = data; return this.getRoomsByDatacenter(simulationId, datacenterId); }).then((data: any) => { datacenter.rooms = data; return datacenter; }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms /// // METHOD: GET public getRoomsByDatacenter(simulationId: number, datacenterId: number): Promise { let rooms; return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms", method: "GET", parameters: { body: {}, path: { simulationId, datacenterId }, query: {} } }).then((data: any) => { rooms = data; let promises = []; rooms.forEach((room: IRoom) => { promises.push(this.loadRoomTiles(simulationId, datacenterId, room)); }); return Promise.all(promises).then((data: any) => { return rooms; }); }); } // METHOD: POST public addRoomToDatacenter(simulationId: number, datacenterId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms", method: "POST", parameters: { body: { room: { id: -1, datacenterId, roomType: "SERVER" } }, path: { simulationId, datacenterId }, query: {} } }).then((data: any) => { data.tiles = []; return data; }); } /// // PATH: /room-types /// // METHOD: GET public getAllRoomTypes(): Promise { return ServerConnection.send({ path: "/room-types", method: "GET", parameters: { body: {}, path: {}, query: {} } }).then((data: any) => { let result = []; data.forEach((roomType: any) => { result.push(roomType.name); }); return result; }); } /// // PATH: /room-types/{name}/allowed-objects /// // METHOD: GET public getAllowedObjectsByRoomType(name: string): Promise { return ServerConnection.send({ path: "/room-types/{name}/allowed-objects", method: "GET", parameters: { body: {}, path: { name }, query: {} } }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId} /// // METHOD: GET public getRoom(simulationId: number, datacenterId: number, roomId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}", method: "GET", parameters: { body: {}, path: { simulationId, datacenterId, roomId }, query: {} } }).then((data: any) => { return this.loadRoomTiles(simulationId, datacenterId, data); }); } // METHOD: PUT public updateRoom(simulationId: number, datacenterId: number, room: IRoom): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}", method: "PUT", parameters: { body: { room: Util.packageForSending(room) }, path: { simulationId, datacenterId, roomId: room.id }, query: {} } }).then((data: any) => { return this.loadRoomTiles(simulationId, datacenterId, data); }); } // METHOD: DELETE public deleteRoom(simulationId: number, datacenterId: number, roomId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}", method: "DELETE", parameters: { body: {}, path: { simulationId, datacenterId, roomId }, query: {} } }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles /// // METHOD: GET public getTilesByRoom(simulationId: number, datacenterId: number, roomId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles", method: "GET", parameters: { body: {}, path: { simulationId, datacenterId, roomId }, query: {} } }).then((data: any) => { let promises = data.map((item) => { return this.loadTileObject(simulationId, datacenterId, roomId, item); }); return Promise.all(promises).then(() => { return data; }) }); } // METHOD: POST public addTileToRoom(simulationId: number, datacenterId: number, roomId: number, tile: ITile): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles", method: "POST", parameters: { body: { tile: Util.packageForSending(tile) }, path: { simulationId, datacenterId, roomId }, query: {} } }).then((data: any) => { return this.loadTileObject(simulationId, datacenterId, roomId, data); }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId} /// // METHOD: GET // Not needed (yet) // METHOD: DELETE public deleteTile(simulationId: number, datacenterId: number, roomId: number, tileId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}", method: "DELETE", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/cooling-item /// // METHOD: GET public getCoolingItem(simulationId: number, datacenterId: number, roomId: number, tileId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/cooling-item", method: "GET", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { return this.loadFailureModel(data); }); } // METHOD: POST public addCoolingItem(simulationId: number, datacenterId: number, roomId: number, tileId: number, coolingItem: ICoolingItem): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/cooling-item", method: "POST", parameters: { body: { coolingItem: Util.packageForSending(coolingItem) }, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { return this.loadFailureModel(data); }); } // METHOD: PUT // Not needed (yet) // METHOD: DELETE public deleteCoolingItem(simulationId: number, datacenterId: number, roomId: number, tileId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/cooling-item", method: "DELETE", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/psu /// // METHOD: GET public getPSU(simulationId: number, datacenterId: number, roomId: number, tileId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/psu", method: "GET", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { return this.loadFailureModel(data); }); } // METHOD: POST public addPSU(simulationId: number, datacenterId: number, roomId: number, tileId: number, psu: IPSU): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/psu", method: "POST", parameters: { body: { psu: Util.packageForSending(psu) }, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { return this.loadFailureModel(data); }); } // METHOD: PUT // Not needed (yet) // METHOD: DELETE public deletePSU(simulationId: number, datacenterId: number, roomId: number, tileId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/psu", method: "DELETE", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack /// // METHOD: GET public getRack(simulationId: number, datacenterId: number, roomId: number, tileId: number): Promise { let rack = {}; return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack", method: "GET", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { rack = data; return this.getMachinesByRack(simulationId, datacenterId, roomId, tileId); }).then((machines: any) => { let promises = machines.map((machine) => { return this.loadMachineUnits(machine); }); return Promise.all(promises).then(() => { rack["machines"] = []; machines.forEach((machine: IMachine) => { rack["machines"][machine.position] = machine; }); for (let i = 0; i < rack["capacity"]; i++) { if (rack["machines"][i] === undefined) { rack["machines"][i] = null; } } return rack; }); }); } // METHOD: POST public addRack(simulationId: number, datacenterId: number, roomId: number, tileId: number, rack: IRack): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack", method: "POST", parameters: { body: { rack: Util.packageForSending(rack) }, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { data.machines = []; for (let i = 0; i < data.capacity; i++) { data.machines.push(null); } return data; }); } // METHOD: PUT public updateRack(simulationId: number, datacenterId: number, roomId: number, tileId: number, rack: IRack): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack", method: "PUT", parameters: { body: { rack }, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { data.machines = rack.machines; return data; }); } // METHOD: DELETE public deleteRack(simulationId: number, datacenterId: number, roomId: number, tileId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack", method: "DELETE", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines /// // METHOD: GET public getMachinesByRack(simulationId: number, datacenterId: number, roomId: number, tileId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines", method: "GET", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { let promises = data.map((machine) => { return this.loadMachineUnits(machine); }); return Promise.all(promises).then(() => { return data; }); }); } // METHOD: POST public addMachineToRack(simulationId: number, datacenterId: number, roomId: number, tileId: number, machine: IMachine): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines", method: "POST", parameters: { body: { machine: Util.packageForSending(machine) }, path: { simulationId, datacenterId, roomId, tileId }, query: {} } }).then((data: any) => { return this.loadMachineUnits(data); }); } /// // PATH: /simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines/{position} /// // METHOD: GET // Not needed (yet) // METHOD: PUT public updateMachine(simulationId: number, datacenterId: number, roomId: number, tileId: number, machine: IMachine): Promise { machine["tags"] = []; return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines/{position}", method: "PUT", parameters: { body: { machine: Util.packageForSending(machine) }, path: { simulationId, datacenterId, roomId, tileId, position: machine.position }, query: {} } }).then((data: any) => { return this.loadMachineUnits(data); }); } // METHOD: DELETE public deleteMachine(simulationId: number, datacenterId: number, roomId: number, tileId: number, position: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines/{position}", method: "DELETE", parameters: { body: {}, path: { simulationId, datacenterId, roomId, tileId, position }, query: {} } }); } /// // PATH: /simulations/{simulationId}/experiments /// // METHOD: GET public getExperimentsBySimulation(simulationId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments", method: "GET", parameters: { body: {}, path: { simulationId }, query: {} } }).then((data: any) => { let promises = data.map((item: any) => { return this.getTrace(item.traceId).then((traceData: any) => { item.trace = traceData; }); }); return Promise.all(promises).then(() => { return data; }); }); } // METHOD: POST public addExperimentToSimulation(simulationId: number, experiment: IExperiment): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments", method: "POST", parameters: { body: { experiment: Util.packageForSending(experiment) }, path: { simulationId }, query: {} } }).then((data: any) => { return this.getTrace(data.traceId).then((traceData: any) => { data.trace = traceData; return data; }); }); } /// // PATH: /simulations/{simulationId}/experiments/{experimentId} /// // METHOD: GET // Not needed (yet) // METHOD: PUT public updateExperiment(experiment: IExperiment): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments/{experimentId}", method: "PUT", parameters: { body: { experiment: Util.packageForSending(experiment) }, path: { experimentId: experiment.id, simulationId: experiment.simulationId }, query: {} } }).then((data: any) => { return this.getTrace(data.traceId).then((traceData: any) => { data.trace = traceData; return data; }); }); } // METHOD: DELETE public deleteExperiment(simulationId: number, experimentId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments/{experimentId}", method: "DELETE", parameters: { body: {}, path: { experimentId, simulationId }, query: {} } }); } /// // PATH: /simulations/{simulationId}/experiments/{experimentId}/last-simulated-tick /// // METHOD: GET public getLastSimulatedTickByExperiment(simulationId: number, experimentId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments/{experimentId}/last-simulated-tick", method: "GET", parameters: { body: {}, path: { simulationId, experimentId }, query: {} } }).then((data: any) => { return data.lastSimulatedTick; }); } /// // PATH: /simulations/{simulationId}/experiments/{experimentId}/machine-states /// // METHOD: GET public getMachineStatesByTick(simulationId: number, experimentId: number, tick: number, machines: {[keys: number]: IMachine}): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments/{experimentId}/machine-states", method: "GET", parameters: { body: {}, path: { simulationId, experimentId }, query: { tick } } }).then((data: any) => { data.forEach((item: any) => { item.machine = machines[item.machineId]; }); return data; }); } /// // PATH: /simulations/{simulationId}/experiments/{experimentId}/rack-states /// // METHOD: GET public getRackStatesByTick(simulationId: number, experimentId: number, tick: number, racks: {[keys: number]: IRack}): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments/{experimentId}/rack-states", method: "GET", parameters: { body: {}, path: { simulationId, experimentId }, query: { tick } } }).then((data: any) => { let promises = data.map((item: any) => { item.rack = racks[item.rackId]; }); return Promise.all(promises).then(() => { return data; }); }); } /// // PATH: /simulations/{simulationId}/experiments/{experimentId}/room-states /// // METHOD: GET public getRoomStatesByTick(simulationId: number, experimentId: number, tick: number, rooms: {[keys: number]: IRoom}): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments/{experimentId}/room-states", method: "GET", parameters: { body: {}, path: { simulationId, experimentId }, query: { tick } } }).then((data: any) => { let promises = data.map((item: any) => { item.room = rooms[item.roomId]; }); return Promise.all(promises).then(() => { return data; }); }); } /// // PATH: /simulations/{simulationId}/experiments/{experimentId}/task-states /// // METHOD: GET public getTaskStatesByTick(simulationId: number, experimentId: number, tick: number, tasks: {[keys: number]: ITask}): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/experiments/{experimentId}/task-states", method: "GET", parameters: { body: {}, path: { simulationId, experimentId }, query: { tick } } }).then((data: any) => { let promises = data.map((item: any) => { item.task = tasks[item.taskId]; }); return Promise.all(promises).then(() => { return data; }); }); } /// // PATH: /simulations/{simulationId}/paths /// // METHOD: GET public getPathsBySimulation(simulationId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/paths", method: "GET", parameters: { body: {}, path: { simulationId }, query: {} } }).then((data: any) => { let promises = data.map((item: any) => { return this.getSectionsByPath(simulationId, item.id).then((sectionsData: any) => { item.sections = sectionsData; }); }); return Promise.all(promises).then(() => { return data; }); }); } /// // PATH: /simulations/{simulationId}/paths/{pathId} /// // METHOD: GET public getPath(simulationId: number, pathId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/paths/{pathId}", method: "GET", parameters: { body: {}, path: { simulationId, pathId }, query: {} } }).then((data: any) => { return this.getSectionsByPath(simulationId, pathId).then((sectionsData: any) => { data.sections = sectionsData; return data; }); }); } /// // PATH: /simulations/{simulationId}/paths/{pathId}/branches /// // METHOD: GET public getBranchesByPath(simulationId: number, pathId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/paths/{pathId}/branches", method: "GET", parameters: { body: {}, path: { simulationId, pathId }, query: {} } }).then((data: any) => { let promises = data.map((item: any) => { return this.getSectionsByPath(simulationId, item.id).then((sectionsData: any) => { item.sections = sectionsData; }); }); return Promise.all(promises).then(() => { return data; }); }); } // METHOD: POST public branchFromPath(simulationId: number, pathId: number, startTick: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/paths/{pathId}/branches", method: "POST", parameters: { body: { section: { startTick } }, path: { simulationId, pathId }, query: {} } }).then((data: any) => { return this.getSectionsByPath(simulationId, data.id).then((sectionsData: any) => { data.sections = sectionsData; return data; }); }); } /// // PATH: /simulations/{simulationId}/paths/{pathId}/sections /// // METHOD: GET public getSectionsByPath(simulationId: number, pathId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/paths/{pathId}/sections", method: "GET", parameters: { body: {}, path: { simulationId, pathId }, query: {} } }).then((data: any) => { let promises = data.map((path: ISection) => { return this.getDatacenter(simulationId, path.datacenterId).then((datacenter: any) => { path.datacenter = datacenter; }); }); return Promise.all(promises).then(() => { return data; }); }); } /// // PATH: /simulations/{simulationId}/paths/{pathId}/sections/{sectionId} /// // METHOD: GET public getSection(simulationId: number, pathId: number, sectionId: number): Promise { return ServerConnection.send({ path: "/simulations/{simulationId}/paths/{pathId}/sections/{sectionId}", method: "GET", parameters: { body: {}, path: { simulationId, pathId, sectionId }, query: {} } }).then((data: any) => { return this.getDatacenter(simulationId, data.datacenterId).then((datacenter: any) => { data.datacenter = datacenter; return data; }); }); } /// // PATH: /specifications/psus /// // METHOD: GET public getAllPSUSpecs(): Promise { let psus; return ServerConnection.send({ path: "/specifications/psus", method: "GET", parameters: { body: {}, path: {}, query: {} } }).then((data: any) => { psus = data; let promises = []; data.forEach((psu: IPSU) => { promises.push(this.getFailureModel(psu.failureModelId)); }); return Promise.all(promises); }).then((data: any) => { return psus; }); } /// // PATH: /specifications/psus/{id} /// // METHOD: GET public getPSUSpec(id: number): Promise { let psu; return ServerConnection.send({ path: "/specifications/psus/{id}", method: "GET", parameters: { body: {}, path: { id }, query: {} } }).then((data: any) => { psu = data; return this.getFailureModel(data.failureModelId); }).then((data: any) => { psu.failureModel = data; return psu; }); } /// // PATH: /specifications/cooling-items /// // METHOD: GET public getAllCoolingItemSpecs(): Promise { let coolingItems; return ServerConnection.send({ path: "/specifications/cooling-items", method: "GET", parameters: { body: {}, path: {}, query: {} } }).then((data: any) => { coolingItems = data; let promises = []; data.forEach((item: ICoolingItem) => { promises.push(this.getFailureModel(item.failureModelId)); }); return Promise.all(promises); }).then((data: any) => { return coolingItems; }); } /// // PATH: /specifications/cooling-items/{id} /// // METHOD: GET public getCoolingItemSpec(id: number): Promise { let coolingItem; return ServerConnection.send({ path: "/specifications/cooling-items/{id}", method: "GET", parameters: { body: {}, path: { id }, query: {} } }).then((data: any) => { coolingItem = data; return this.getFailureModel(data.failureModelId); }).then((data: any) => { coolingItem.failureModel = data; return coolingItem; }); } /// // PATH: /schedulers /// // METHOD: GET public getAllSchedulers(): Promise { return ServerConnection.send({ path: "/schedulers", method: "GET", parameters: { body: {}, path: {}, query: {} } }); } /// // PATH: /traces /// // METHOD: GET public getAllTraces(): Promise { return ServerConnection.send({ path: "/traces", method: "GET", parameters: { body: {}, path: {}, query: {} } }); } /// // PATH: /traces/{traceId} /// // METHOD: GET public getTrace(traceId: number): Promise { let trace; return ServerConnection.send({ path: "/traces/{traceId}", method: "GET", parameters: { body: {}, path: { traceId }, query: {} } }).then((data: any) => { trace = data; return this.getTasksByTrace(traceId); }).then((data: any) => { trace.tasks = data; return trace; }); } /// // PATH: /traces/{traceId}/tasks /// // METHOD: GET public getTasksByTrace(traceId: number): Promise { return ServerConnection.send({ path: "/traces/{traceId}/tasks", method: "GET", parameters: { body: {}, path: { traceId }, query: {} } }); } /// // PATH: /specifications/failure-models /// // METHOD: GET public getAllFailureModels(): Promise { return ServerConnection.send({ path: "/specifications/failure-models", method: "GET", parameters: { body: {}, path: {}, query: {} } }); } /// // PATH: /specifications/failure-models/{id} /// // METHOD: GET public getFailureModel(id: number): Promise { return ServerConnection.send({ path: "/specifications/failure-models/{id}", method: "GET", parameters: { body: {}, path: { id }, query: {} } }); } /// // PATH: /specifications/[units] /// // METHOD: GET public getAllSpecificationsOfType(typePlural: string): Promise { let specs: any; return ServerConnection.send({ path: "/specifications/" + typePlural, method: "GET", parameters: { body: {}, path: {}, query: {} } }).then((data: any) => { specs = data; let promises = []; data.forEach((unit: INodeUnit) => { promises.push(this.getFailureModel(unit.failureModelId)); }); return Promise.all(promises); }).then((data: any) => { return specs; }); } /// // PATH: /specifications/[units]/{id} /// // METHOD: GET public getSpecificationOfType(typePlural: string, id: number): Promise { let spec; return ServerConnection.send({ path: "/specifications/" + typePlural + "/{id}", method: "GET", parameters: { body: {}, path: { id }, query: {} } }).then((data: any) => { spec = data; return this.getFailureModel(data.failureModelId); }).then((data: any) => { spec.failureModel = data; return spec; }); } /// // HELPER METHODS /// private loadRoomTiles(simulationId: number, datacenterId: number, room: IRoom): Promise { return this.getTilesByRoom(simulationId, datacenterId, room.id).then((data: any) => { room.tiles = data; return room; }); } private loadTileObject(simulationId: number, datacenterId: number, roomId: number, tile: ITile): Promise { let promise; switch (tile.objectType) { case "RACK": promise = this.getRack(simulationId, datacenterId, roomId, tile.id).then((data: IRack) => { tile.object = data; }); break; case "PSU": promise = this.getPSU(simulationId, datacenterId, roomId, tile.id).then((data: IPSU) => { tile.object = data; }); break; case "COOLING_ITEM": promise = this.getCoolingItem(simulationId, datacenterId, roomId, tile.id).then((data: ICoolingItem) => { tile.object = data; }); break; default: promise = new Promise((resolve, reject) => { resolve(undefined); }); } return promise.then(() => { return tile; }) } private parseSimulationTimestamps(simulation: ISimulation): void { simulation.datetimeCreatedParsed = Util.parseDateTime(simulation.datetimeCreated); simulation.datetimeLastEditedParsed = Util.parseDateTime(simulation.datetimeLastEdited); } private loadFailureModel(data: any): Promise { return this.getFailureModel(data.failureModelId).then((failureModel: IFailureModel) => { data.failureModel = failureModel; return data; }); } private loadUnitsOfType(idListName: string, objectListName: string, machine: IMachine): Promise { machine[objectListName] = []; let promises = machine[idListName].map((item) => { return this.getSpecificationOfType(objectListName, item).then((data) => { machine[objectListName].push(data); }); }); return Promise.all(promises).then(() => { return machine; }) } private loadMachineUnits(machine: IMachine): Promise { let listNames = [ { idListName: "cpuIds", objectListName: "cpus" }, { idListName: "gpuIds", objectListName: "gpus" }, { idListName: "memoryIds", objectListName: "memories" }, { idListName: "storageIds", objectListName: "storages" } ]; let promises = listNames.map((item: any) => { return this.loadUnitsOfType(item.idListName, item.objectListName, machine); }); return Promise.all(promises).then(() => { return machine; }); } }