import PropTypes from 'prop-types' const Shapes = {} Shapes.User = PropTypes.shape({ _id: PropTypes.string.isRequired, googleId: PropTypes.string.isRequired, email: PropTypes.string.isRequired, givenName: PropTypes.string.isRequired, familyName: PropTypes.string.isRequired, }) Shapes.Simulation = PropTypes.shape({ _id: PropTypes.string.isRequired, name: PropTypes.string.isRequired, datetimeCreated: PropTypes.string.isRequired, datetimeLastEdited: PropTypes.string.isRequired, }) Shapes.Authorization = PropTypes.shape({ userId: PropTypes.string.isRequired, user: Shapes.User, simulationId: PropTypes.string.isRequired, simulation: Shapes.Simulation, authorizationLevel: PropTypes.string.isRequired, }) Shapes.FailureModel = PropTypes.shape({ id: PropTypes.number.isRequired, name: PropTypes.string.isRequired, rate: PropTypes.number.isRequired, }) Shapes.ProcessingUnit = PropTypes.shape({ id: PropTypes.number.isRequired, manufacturer: PropTypes.string.isRequired, family: PropTypes.string.isRequired, generation: PropTypes.string.isRequired, model: PropTypes.string.isRequired, clockRateMhz: PropTypes.number.isRequired, numberOfCores: PropTypes.number.isRequired, energyConsumptionW: PropTypes.number.isRequired, failureModelId: PropTypes.number.isRequired, failureModel: Shapes.FailureModel, }) Shapes.StorageUnit = PropTypes.shape({ id: PropTypes.number.isRequired, manufacturer: PropTypes.string.isRequired, family: PropTypes.string.isRequired, generation: PropTypes.string.isRequired, model: PropTypes.string.isRequired, speedMbPerS: PropTypes.number.isRequired, sizeMb: PropTypes.number.isRequired, energyConsumptionW: PropTypes.number.isRequired, failureModelId: PropTypes.number.isRequired, failureModel: Shapes.FailureModel, }) Shapes.Machine = PropTypes.shape({ id: PropTypes.number.isRequired, rackId: PropTypes.number.isRequired, position: PropTypes.number.isRequired, cpuIds: PropTypes.arrayOf(PropTypes.number.isRequired), cpus: PropTypes.arrayOf(Shapes.ProcessingUnit), gpuIds: PropTypes.arrayOf(PropTypes.number.isRequired), gpus: PropTypes.arrayOf(Shapes.ProcessingUnit), memoryIds: PropTypes.arrayOf(PropTypes.number.isRequired), memories: PropTypes.arrayOf(Shapes.StorageUnit), storageIds: PropTypes.arrayOf(PropTypes.number.isRequired), storages: PropTypes.arrayOf(Shapes.StorageUnit), }) Shapes.Rack = PropTypes.shape({ id: PropTypes.number.isRequired, name: PropTypes.string.isRequired, capacity: PropTypes.number.isRequired, powerCapacityW: PropTypes.number.isRequired, machines: PropTypes.arrayOf(Shapes.Machine), }) Shapes.CoolingItem = PropTypes.shape({ id: PropTypes.number.isRequired, energyConsumptionW: PropTypes.number.isRequired, type: PropTypes.string.isRequired, failureModelId: PropTypes.number.isRequired, failureModel: Shapes.FailureModel, }) Shapes.PSU = PropTypes.shape({ id: PropTypes.number.isRequired, energyKwh: PropTypes.number.isRequired, type: PropTypes.string.isRequired, failureModelId: PropTypes.number.isRequired, failureModel: Shapes.FailureModel, }) Shapes.Tile = PropTypes.shape({ id: PropTypes.number.isRequired, roomId: PropTypes.number.isRequired, positionX: PropTypes.number.isRequired, positionY: PropTypes.number.isRequired, objectId: PropTypes.number, objectType: PropTypes.string, rack: Shapes.Rack, coolingItem: Shapes.CoolingItem, psu: Shapes.PSU, }) Shapes.Room = PropTypes.shape({ id: PropTypes.number.isRequired, datacenterId: PropTypes.number.isRequired, name: PropTypes.string.isRequired, roomType: PropTypes.string.isRequired, tiles: PropTypes.arrayOf(Shapes.Tile), }) Shapes.Datacenter = PropTypes.shape({ id: PropTypes.number.isRequired, rooms: PropTypes.arrayOf(Shapes.Room), }) Shapes.Section = PropTypes.shape({ id: PropTypes.number.isRequired, pathId: PropTypes.number.isRequired, startTick: PropTypes.number.isRequired, datacenterId: PropTypes.number.isRequired, datacenter: Shapes.Datacenter, }) Shapes.Path = PropTypes.shape({ id: PropTypes.number.isRequired, simulationId: PropTypes.number.isRequired, name: PropTypes.string, datetimeCreated: PropTypes.string.isRequired, sections: PropTypes.arrayOf(Shapes.Section), }) Shapes.Scheduler = PropTypes.shape({ name: PropTypes.string.isRequired, }) Shapes.Task = PropTypes.shape({ id: PropTypes.number.isRequired, jobId: PropTypes.number.isRequired, startTick: PropTypes.number.isRequired, totalFlopCount: PropTypes.number.isRequired, }) Shapes.Job = PropTypes.shape({ id: PropTypes.number.isRequired, name: PropTypes.string.isRequired, traceId: PropTypes.number.isRequired, taskIds: PropTypes.arrayOf(PropTypes.number), }) Shapes.Trace = PropTypes.shape({ id: PropTypes.number.isRequired, name: PropTypes.string.isRequired, jobIds: PropTypes.arrayOf(PropTypes.number), }) Shapes.Experiment = PropTypes.shape({ id: PropTypes.number.isRequired, simulationId: PropTypes.number.isRequired, traceId: PropTypes.number.isRequired, trace: Shapes.Trace, pathId: PropTypes.number.isRequired, path: Shapes.Path, schedulerName: PropTypes.string.isRequired, scheduler: Shapes.Scheduler, name: PropTypes.string.isRequired, }) Shapes.WallSegment = PropTypes.shape({ startPosX: PropTypes.number.isRequired, startPosY: PropTypes.number.isRequired, isHorizontal: PropTypes.bool.isRequired, length: PropTypes.number.isRequired, }) Shapes.InteractionLevel = PropTypes.shape({ mode: PropTypes.string.isRequired, roomId: PropTypes.number, rackId: PropTypes.bool, }) export default Shapes