summaryrefslogtreecommitdiff
path: root/opendc-api-spec.json
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-api-spec.json')
-rw-r--r--opendc-api-spec.json4246
1 files changed, 4246 insertions, 0 deletions
diff --git a/opendc-api-spec.json b/opendc-api-spec.json
new file mode 100644
index 00000000..936e926d
--- /dev/null
+++ b/opendc-api-spec.json
@@ -0,0 +1,4246 @@
+{
+ "swagger": "2.0",
+ "info": {
+ "version": "0.1.0",
+ "title": "OpenDC API",
+ "description": "OpenDC is an open-source datacenter simulator for education, featuring real-time online collaboration, diverse simulation models, and detailed performance feedback statistics."
+ },
+ "host": "opendc.ewi.tudelft.nl",
+ "basePath": "/v1",
+ "schemes": [
+ "https"
+ ],
+ "paths": {
+ "/users": {
+ "get": {
+ "tags": [
+ "users"
+ ],
+ "description": "Search for a User using their email address.",
+ "parameters": [
+ {
+ "name": "email",
+ "in": "query",
+ "description": "User's email address.",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully searched Users.",
+ "schema": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "404": {
+ "description": "User not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "users"
+ ],
+ "description": "Add a new User.",
+ "parameters": [
+ {
+ "name": "user",
+ "in": "body",
+ "description": "The new User.",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/User"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added User.",
+ "schema": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "409": {
+ "description": "User already exists."
+ }
+ }
+ }
+ },
+ "/users/{userId}": {
+ "get": {
+ "tags": [
+ "users"
+ ],
+ "description": "Get this User.",
+ "parameters": [
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "User's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved User.",
+ "schema": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "404": {
+ "description": "User not found."
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "users"
+ ],
+ "description": "Update this User's given name and/ or family name.",
+ "parameters": [
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "User's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "user",
+ "in": "body",
+ "description": "User's new properties.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "givenName": {
+ "type": "string"
+ },
+ "familyName": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated User.",
+ "schema": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from updating User."
+ },
+ "404": {
+ "description": "User not found."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "users"
+ ],
+ "description": "Delete this User.",
+ "parameters": [
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "User's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted User.",
+ "schema": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting User."
+ },
+ "404": {
+ "description": "User not found."
+ }
+ }
+ }
+ },
+ "/users/{userId}/authorizations": {
+ "get": {
+ "tags": [
+ "authorizations",
+ "users"
+ ],
+ "description": "Get this User's Authorizations.",
+ "parameters": [
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "User's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved User's Authorizations.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Authorization"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing parameter or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from viewing User's Authorizations."
+ },
+ "404": {
+ "description": "User not found."
+ }
+ }
+ }
+ },
+ "/simulations": {
+ "post": {
+ "tags": [
+ "simulations"
+ ],
+ "description": "Add a Simulation.",
+ "parameters": [
+ {
+ "name": "simulation",
+ "in": "body",
+ "description": "The new Simulation.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added Simulation.",
+ "schema": {
+ "$ref": "#/definitions/Simulation"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}": {
+ "get": {
+ "tags": [
+ "simulations"
+ ],
+ "description": "Get this Simulation.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Simulation.",
+ "schema": {
+ "$ref": "#/definitions/Simulation"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Simulation."
+ },
+ "404": {
+ "description": "Simulation not found"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "simulations"
+ ],
+ "description": "Update this Simulation's name.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "simulation",
+ "in": "body",
+ "description": "Simulation's new properties.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated Simulation.",
+ "schema": {
+ "$ref": "#/definitions/Simulation"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from updating Simulation."
+ },
+ "404": {
+ "description": "Simulation not found."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "simulations"
+ ],
+ "description": "Delete this simulation.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted Simulation.",
+ "schema": {
+ "$ref": "#/definitions/Simulation"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting Simulation."
+ },
+ "404": {
+ "description": "Simulation not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/authorizations": {
+ "get": {
+ "tags": [
+ "authorizations"
+ ],
+ "description": "Get this Simulation's Authorizations.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Simulation's Authorizations.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Authorization"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving this Simulation's Authorizations."
+ },
+ "404": {
+ "description": "Simulation not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/authorizations/{userId}": {
+ "get": {
+ "tags": [
+ "authorizations"
+ ],
+ "description": "Get this User's Authorization over this Simulation.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "User's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Authorization.",
+ "schema": {
+ "$ref": "#/definitions/Authorization"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Authorizations for this Simulation."
+ },
+ "404": {
+ "description": "Authorization not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "authorizations"
+ ],
+ "description": "Add an Authorization to this Simulation for this User.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "User's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "authorization",
+ "in": "body",
+ "description": "The new Authorization.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "authorizationLevel": {
+ "type": "string",
+ "description": "The authorization level, which can be 'VIEW', 'EDIT' or 'OWN'."
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added Authorization to Simulation.",
+ "schema": {
+ "$ref": "#/definitions/Authorization"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter, or invalid authorization level."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from adding an Authorization to Simulation."
+ },
+ "404": {
+ "description": "Simulation or User not found."
+ },
+ "409": {
+ "description": "An Authorization already exists for User and Simulation."
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "authorizations"
+ ],
+ "description": "Update this User's authorization level over this Simulation.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "User's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "authorization",
+ "in": "body",
+ "description": "Authorization's new properties.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "authorizationLevel": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated Authorization.",
+ "schema": {
+ "$ref": "#/definitions/Authorization"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter, or invalid authorization level."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from updating Authorization."
+ },
+ "404": {
+ "description": "Authorization not found."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "authorizations"
+ ],
+ "description": "Delete this User's Authorization over this Simulation.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "userId",
+ "in": "path",
+ "description": "User's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted Authorization.",
+ "schema": {
+ "$ref": "#/definitions/Authorization"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting Authorization."
+ },
+ "404": {
+ "description": "Authorization not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}": {
+ "get": {
+ "tags": [
+ "datacenterDesign"
+ ],
+ "description": "Get this Datacenter.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Datacenter.",
+ "schema": {
+ "$ref": "#/definitions/Datacenter"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Datacenter."
+ },
+ "404": {
+ "description": "Datacenter not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms": {
+ "get": {
+ "tags": [
+ "datacenterDesign",
+ "rooms"
+ ],
+ "description": "Get this Datacenter's Rooms.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Datacenter's Rooms.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Room"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from getting Datacenter's Rooms."
+ },
+ "404": {
+ "description": "Datacenter not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "datacenterDesign",
+ "rooms"
+ ],
+ "description": "Add a Room.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "room",
+ "in": "body",
+ "description": "The new Room.",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/Room"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added Room.",
+ "schema": {
+ "$ref": "#/definitions/Room"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter, or ID mismatch."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from adding a Room to this Datacetner."
+ },
+ "404": {
+ "description": "Datacenter not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}": {
+ "get": {
+ "tags": [
+ "datacenterDesign",
+ "rooms"
+ ],
+ "description": "Get this Room.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Room.",
+ "schema": {
+ "$ref": "#/definitions/Room"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from getting this room"
+ },
+ "404": {
+ "description": "Room not found"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "datacenterDesign",
+ "rooms"
+ ],
+ "description": "Update a Room's name or type.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "room",
+ "in": "body",
+ "description": "Room's new properties.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "roomType": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated Room.",
+ "schema": {
+ "$ref": "#/definitions/Room"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter, or invalid room type."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from updating this Room."
+ },
+ "404": {
+ "description": "Room not found."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "datacenterDesign",
+ "rooms"
+ ],
+ "description": "Delete this Room.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted Room.",
+ "schema": {
+ "$ref": "#/definitions/Room"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting this Room."
+ },
+ "404": {
+ "description": "Room not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles": {
+ "get": {
+ "tags": [
+ "datacenterDesign",
+ "rooms",
+ "tiles"
+ ],
+ "description": "Get this Room's Tiles.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Tiles.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tile"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from getting Room's Tiles."
+ },
+ "404": {
+ "description": "Room not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "datacenterDesign",
+ "rooms",
+ "tiles"
+ ],
+ "description": "Add a Tile to this Room.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tile",
+ "in": "body",
+ "description": "Tile to add.",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/Tile"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added tile.",
+ "schema": {
+ "$ref": "#/definitions/Tile"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter, or invalid tile position."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from adding a Tile to this Room."
+ },
+ "404": {
+ "description": "Room not found."
+ },
+ "409": {
+ "description": "Tile location occupied."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}": {
+ "get": {
+ "tags": [
+ "datacenterDesign",
+ "tiles"
+ ],
+ "description": "Get this Tile.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Tile.",
+ "schema": {
+ "$ref": "#/definitions/Tile"
+ }
+ },
+ "400": {
+ "description": "Mising or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Tile."
+ },
+ "404": {
+ "description": "Tile not found."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "datacenterDesign",
+ "tiles"
+ ],
+ "description": "Delete this Tile.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted Tile.",
+ "schema": {
+ "$ref": "#/definitions/Tile"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting Tile."
+ },
+ "404": {
+ "description": "Tile not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/cooling-item": {
+ "get": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Get this Tile's Cooling Item.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Tile's Cooling Item.",
+ "schema": {
+ "$ref": "#/definitions/CoolingItem"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Tile's Cooling Item."
+ },
+ "404": {
+ "description": "Tile or Cooling Item not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Add a Cooling Item to this Tile if it is empty.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "coolingItemId",
+ "in": "body",
+ "description": "Cooling Item's ID.",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added Cooling Item to Tile.",
+ "schema": {
+ "$ref": "#/definitions/CoolingItem"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from adding a Cooling Item to Tile."
+ },
+ "404": {
+ "description": "Tile or Cooling Item not found."
+ },
+ "409": {
+ "description": "Tile occupied."
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Update which Cooling Item is on this Tile.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "coolingItemId",
+ "in": "body",
+ "description": "Cooling Item's ID.",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated Cooling Item on Tile.",
+ "schema": {
+ "$ref": "#/definitions/CoolingItem"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from updating Cooling Item on Tile."
+ },
+ "404": {
+ "description": "Tile or Cooling Item not found."
+ },
+ "409": {
+ "description": "Tile occupied with non-Cooling Item object."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Delete this Tile's Cooling Item.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted Tile's Cooling Item.",
+ "schema": {
+ "$ref": "#/definitions/CoolingItem"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting Tile's Cooling Item."
+ },
+ "404": {
+ "description": "Tile or Cooling Item not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/psu": {
+ "get": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Get this Tile's PSU.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Tile's PSU.",
+ "schema": {
+ "$ref": "#/definitions/PSU"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Tile's PSU."
+ },
+ "404": {
+ "description": "Tile or PSU not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Add a PSU to this Tile if it is empty.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "psuId",
+ "in": "body",
+ "description": "PSU's ID.",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added PSU to Tile.",
+ "schema": {
+ "$ref": "#/definitions/PSU"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from adding a PSU to Tile."
+ },
+ "404": {
+ "description": "Tile or PSU not found."
+ },
+ "409": {
+ "description": "Tile occupied."
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Update which PSU is on this Tile.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "psuId",
+ "in": "body",
+ "description": "PSU's ID.",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated PSU on Tile.",
+ "schema": {
+ "$ref": "#/definitions/PSU"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from updating PSU on Tile."
+ },
+ "404": {
+ "description": "Tile or PSU not found."
+ },
+ "409": {
+ "description": "Tile occupied with non-PSU object."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Delete this Tile's PSU.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted Tile's PSU.",
+ "schema": {
+ "$ref": "#/definitions/PSU"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting Tile's PSU."
+ },
+ "404": {
+ "description": "Tile or PSU not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack": {
+ "get": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Get this Tile's Rack.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Tile's Rack.",
+ "schema": {
+ "$ref": "#/definitions/Rack"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Tile's Rack."
+ },
+ "404": {
+ "description": "Tile or Rack not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Add a Rack to this Tile if it is empty.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "rack",
+ "in": "body",
+ "description": "The new Rack.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "capacity": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added Rack to Tile.",
+ "schema": {
+ "$ref": "#/definitions/Rack"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from adding a Rack on Tile."
+ },
+ "404": {
+ "description": "Tile not found."
+ },
+ "409": {
+ "description": "Tile occupied."
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Update the Rack on this Tile.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "rack",
+ "in": "body",
+ "description": "PSU's ID.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "capacity": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated Rack on Tile.",
+ "schema": {
+ "$ref": "#/definitions/Rack"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from updating Rack on Tile."
+ },
+ "404": {
+ "description": "Tile not found."
+ },
+ "409": {
+ "description": "Tile occupied with non-Rack object."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "tiles",
+ "objects"
+ ],
+ "description": "Delete this Tile's Rack.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted Tile's Rack.",
+ "schema": {
+ "$ref": "#/definitions/Rack"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting Tile's Rack."
+ },
+ "404": {
+ "description": "Tile or Rack not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines": {
+ "get": {
+ "tags": [
+ "objects",
+ "machines"
+ ],
+ "description": "Get this Rack's Machines.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Machines.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Machine"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from getting Rack's Machines."
+ },
+ "404": {
+ "description": "Tile or Rack not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "objects",
+ "machines"
+ ],
+ "description": "Add a Machine to this rack",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "machine",
+ "in": "body",
+ "description": "Machine to add to this Rack.",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/Machine"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added Machine to this Rack.",
+ "schema": {
+ "$ref": "#/definitions/Machine"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter, or invalid machine."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from adding a Machine to Rack."
+ },
+ "404": {
+ "description": "Tile or Rack not found."
+ },
+ "409": {
+ "description": "Machine location already occupied in Rack."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/datacenters/{datacenterId}/rooms/{roomId}/tiles/{tileId}/rack/machines/{position}": {
+ "get": {
+ "tags": [
+ "machines"
+ ],
+ "description": "Get the Machine at this location in this Rack.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "position",
+ "in": "path",
+ "description": "Machine's position in the Rack.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved machine",
+ "schema": {
+ "$ref": "#/definitions/Machine"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "403": {
+ "description": "Forbidden from getting this machine"
+ },
+ "404": {
+ "description": "Machine not found"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "machines"
+ ],
+ "description": "Update the Machine at this location in this Rack.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "position",
+ "in": "path",
+ "description": "Machine's position in the Rack.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "machine",
+ "in": "body",
+ "description": "Updated machine (ID field must match ID in path)",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/Machine"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated machine",
+ "schema": {
+ "$ref": "#/definitions/Machine"
+ }
+ },
+ "400": {
+ "description": "Incorrect machine specification"
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "403": {
+ "description": "Forbidden from updating this machine"
+ },
+ "404": {
+ "description": "Machine not found"
+ },
+ "409": {
+ "description": "Machine location already occupied in rack"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "machines"
+ ],
+ "description": "Delete the Machine at this location in this Rack.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "datacenterId",
+ "in": "path",
+ "description": "Datacenter's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "path",
+ "description": "Room's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tileId",
+ "in": "path",
+ "description": "Tile's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "position",
+ "in": "path",
+ "description": "Machine's position in the Rack.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted machine",
+ "schema": {
+ "$ref": "#/definitions/Machine"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "403": {
+ "description": "Forbidden from deleting this machine"
+ },
+ "404": {
+ "description": "Machine not found"
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/experiments": {
+ "get": {
+ "tags": [
+ "experiments"
+ ],
+ "description": "Get this Simulation's Experiments.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Experiments.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Experiment"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Simulation's Experiments."
+ },
+ "404": {
+ "description": "Simulation not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "experiments"
+ ],
+ "description": "Add a new Experiment for this Simulation.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experiment",
+ "in": "body",
+ "description": "Experiment to add to this Simulation.",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/Experiment"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added new Experiment.",
+ "schema": {
+ "$ref": "#/definitions/Experiment"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from adding an Experiment to this Simulation."
+ },
+ "404": {
+ "description": "Simulation, Path, Scheduler or Trace not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/experiments/{experimentId}": {
+ "get": {
+ "tags": [
+ "experiments"
+ ],
+ "description": "Get this Experiment.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experimentId",
+ "in": "path",
+ "description": "Experiment's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Experiment.",
+ "schema": {
+ "$ref": "#/definitions/Experiment"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Experiment."
+ },
+ "404": {
+ "description": "Experiment not found."
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "experiments"
+ ],
+ "description": "Update this Experiment's Path, Trace, Scheduler, and/ or name.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experimentId",
+ "in": "path",
+ "description": "Experiment's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experiment",
+ "in": "body",
+ "description": "Experiment's new properties.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "pathId": {
+ "type": "integer"
+ },
+ "traceId": {
+ "type": "integer"
+ },
+ "schedulerName": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully updated Experiment.",
+ "schema": {
+ "$ref": "#/definitions/Experiment"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from updating Experiment."
+ },
+ "404": {
+ "description": "Experiment, Path, Trace, or Scheduler not found."
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "experiment"
+ ],
+ "description": "Delete this Experiment.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experimentId",
+ "in": "path",
+ "description": "Experiment's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted Experiment.",
+ "schema": {
+ "$ref": "#/definitions/Experiment"
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from deleting Experiment."
+ },
+ "404": {
+ "description": "Experiment not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/experiments/{experimentId}/last-simulated-tick": {
+ "get": {
+ "tags": [
+ "simulations"
+ ],
+ "description": "Get this Experiment's last simulated tick.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experimentId",
+ "in": "path",
+ "description": "Experiment's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Experiment's last simulated tick.",
+ "schema": {
+ "properties": {
+ "lastSimulatedTick": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "403": {
+ "description": "Forbidden from getting this simulation"
+ },
+ "404": {
+ "description": "Simulation not found"
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/experiments/{experimentId}/machine-states": {
+ "get": {
+ "tags": [
+ "simulations",
+ "machines",
+ "states"
+ ],
+ "description": "Get this experiment's Machine States.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experimentId",
+ "in": "path",
+ "description": "Experiment's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tick",
+ "in": "query",
+ "description": "Tick to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "machineId",
+ "in": "query",
+ "description": "Machine's ID to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "rackId",
+ "in": "query",
+ "description": "Rack's ID to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "query",
+ "description": "Room's ID to filter on.",
+ "required": false,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Machine States.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/MachineState"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from getting Experiment's Machine States."
+ },
+ "404": {
+ "description": "Experiment, Machine, Rack, Room or Tick not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/experiments/{experimentId}/rack-states": {
+ "get": {
+ "tags": [
+ "simulations",
+ "objects",
+ "states"
+ ],
+ "description": "Get this Experiment's Rack States.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experimentId",
+ "in": "path",
+ "description": "Experiment's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tick",
+ "in": "query",
+ "description": "Tick to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "rackId",
+ "in": "query",
+ "description": "Rack's ID to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "query",
+ "description": "Room's ID to filter on.",
+ "required": false,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Rack States.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/RackState"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from getting Experiment's Rack States."
+ },
+ "404": {
+ "description": "Experiment, Room, Rack or Tick not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/experiments/{experimentId}/room-states": {
+ "get": {
+ "tags": [
+ "simulations",
+ "rooms",
+ "states"
+ ],
+ "description": "Get this Experiment's Room States.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experimentId",
+ "in": "path",
+ "description": "Experiment's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tick",
+ "in": "query",
+ "description": "Tick to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "query",
+ "description": "Room's ID to filter on.",
+ "required": false,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Room States.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/RoomState"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from getting Experiment's Room States."
+ },
+ "404": {
+ "description": "Experiment, Room or Tick not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/experiments/{experimentId}/task-states": {
+ "get": {
+ "tags": [
+ "simulations",
+ "tasks",
+ "states"
+ ],
+ "description": "Get this Experiment's Task States.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "experimentId",
+ "in": "path",
+ "description": "Experiment's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "tick",
+ "in": "query",
+ "description": "Tick to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "taskId",
+ "in": "query",
+ "description": "Task's ID to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "machineId",
+ "in": "query",
+ "description": "Machine's ID to filter on.",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "rackId",
+ "in": "query",
+ "description": "ID the rack whose machines' task states to get",
+ "required": false,
+ "type": "integer"
+ },
+ {
+ "name": "roomId",
+ "in": "query",
+ "description": "ID of the room whose racks' machines' states to get",
+ "required": false,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Task States.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TaskState"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Experiment's Task States."
+ },
+ "404": {
+ "description": "Experiment, Tick, Task, Machine, Rack or Room not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/paths": {
+ "get": {
+ "tags": [
+ "paths"
+ ],
+ "description": "Get this Simulation's Paths.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Simulation's Paths.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Path"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Simulation's Paths."
+ },
+ "404": {
+ "description": "Simulation not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/paths/{pathId}": {
+ "get": {
+ "tags": [
+ "paths"
+ ],
+ "description": "Get this Path.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "pathId",
+ "in": "path",
+ "description": "Path's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Path.",
+ "schema": {
+ "$ref": "#/definitions/Path"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving this Path."
+ },
+ "404": {
+ "description": "Path not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/paths/{pathId}/branches": {
+ "get": {
+ "tags": [
+ "paths"
+ ],
+ "description": "Get this Path's branches - Paths that start with this Path's Sections.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "pathId",
+ "in": "path",
+ "description": "Path's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Paths.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Path"
+ }
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Path's branches."
+ },
+ "404": {
+ "description": "Path not found."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "paths"
+ ],
+ "description": "Create a new Path that branches off of this Path at the specified tick.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "pathId",
+ "in": "path",
+ "description": "Path's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "section",
+ "in": "body",
+ "description": "New Path's Section.",
+ "required": true,
+ "schema": {
+ "properties": {
+ "startTick": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully added Path.",
+ "schema": {
+ "$ref": "#/definitions/Path"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from branching off this Path."
+ },
+ "404": {
+ "description": "Path not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/paths/{pathId}/sections": {
+ "get": {
+ "tags": [
+ "paths"
+ ],
+ "description": "Get this Path's Sections.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "pathId",
+ "in": "path",
+ "description": "Path's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Sections.",
+ "schema": {
+ "$ref": "#/definitions/Section"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from retrieving Path's Sections."
+ },
+ "404": {
+ "description": "Path not found."
+ }
+ }
+ }
+ },
+ "/simulations/{simulationId}/paths/{pathId}/sections/{sectionId}": {
+ "get": {
+ "tags": [
+ "simulations"
+ ],
+ "description": "Get this Section.",
+ "parameters": [
+ {
+ "name": "simulationId",
+ "in": "path",
+ "description": "Simulation's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "pathId",
+ "in": "path",
+ "description": "Path's ID.",
+ "required": true,
+ "type": "integer"
+ },
+ {
+ "name": "sectionId",
+ "in": "path",
+ "description": "Section's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Section.",
+ "schema": {
+ "$ref": "#/definitions/Section"
+ }
+ },
+ "400": {
+ "description": "Missing or incorrectly typed parameter."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "403": {
+ "description": "Forbidden from getting Section."
+ },
+ "404": {
+ "description": "Section not found."
+ }
+ }
+ }
+ },
+ "/schedulers": {
+ "get": {
+ "tags": [
+ "experiments"
+ ],
+ "description": "Get all available Schedulers",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Schedulers.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Scheduler"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ }
+ }
+ }
+ },
+ "/traces": {
+ "get": {
+ "tags": [
+ "experiments"
+ ],
+ "description": "Get all avaialble Traces.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Traces.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trace"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ }
+ }
+ }
+ },
+ "/traces/{traceId}": {
+ "get": {
+ "tags": [
+ "experiments"
+ ],
+ "description": "Get this Trace.",
+ "parameters": [
+ {
+ "name": "traceId",
+ "in": "path",
+ "description": "Trace's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Trace.",
+ "schema": {
+ "$ref": "#/definitions/Trace"
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "404": {
+ "description": "Trace not found."
+ }
+ }
+ }
+ },
+ "/traces/{traceId}/tasks": {
+ "get": {
+ "tags": [
+ "experiments"
+ ],
+ "description": "Get this Trace's Tasks.",
+ "parameters": [
+ {
+ "name": "traceId",
+ "in": "path",
+ "description": "Trace's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Tasks.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Task"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "404": {
+ "description": "Trace not found."
+ }
+ }
+ }
+ },
+ "/room-types": {
+ "get": {
+ "tags": [
+ "datacenterDesign",
+ "rooms"
+ ],
+ "description": "Get all available room types.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Room Types.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/RoomType"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ }
+ }
+ }
+ },
+ "/room-types/{name}/allowed-objects": {
+ "get": {
+ "tags": [
+ "datacenterDesign",
+ "rooms",
+ "objects"
+ ],
+ "description": "Get this room's allowed objects.",
+ "parameters": [
+ {
+ "name": "name",
+ "in": "path",
+ "description": "Room Type's name.",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved allowed object types.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "404": {
+ "description": "Room Type not found."
+ }
+ }
+ }
+ },
+ "/specifications/cooling-items": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get all Cooling Items.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Cooling Items.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CoolingItem"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ }
+ }
+ }
+ },
+ "/specifications/cooling-items/{id}": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get this Cooling Item.",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Cooling Item's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Cooling Item.",
+ "schema": {
+ "$ref": "#/definitions/CoolingItem"
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "404": {
+ "description": "Cooling Item not found."
+ }
+ }
+ }
+ },
+ "/specifications/cpus": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get a list of the specifications of all CPUs.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the CPU spec list",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CPU"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ }
+ }
+ },
+ "/specifications/cpus/{id}": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get the specs of a CPU.",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "ID of the CPU whose specs to get",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the CPU specs",
+ "schema": {
+ "$ref": "#/definitions/CPU"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "CPU specs not found"
+ }
+ }
+ }
+ },
+ "/specifications/failure-models": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get all Failure Models.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Failure Models.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/FailureModel"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ }
+ }
+ }
+ },
+ "/specifications/failure-models/{id}": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get this Failure Model.",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "Failure Model's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved Failure Model.",
+ "schema": {
+ "$ref": "#/definitions/FailureModel"
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "404": {
+ "description": "Failure Model not found."
+ }
+ }
+ }
+ },
+ "/specifications/gpus": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get a list of the specifications of all GPUs.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the GPU spec list",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/GPU"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ }
+ }
+ },
+ "/specifications/gpus/{id}": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get the specs of a GPU.",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "ID of the GPU whose specs to get",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the GPU specs",
+ "schema": {
+ "$ref": "#/definitions/GPU"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "GPU specs not found"
+ }
+ }
+ }
+ },
+ "/specifications/memories": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get a list of the specifications of all memory devices.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the memory spec list",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Memory"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ }
+ }
+ },
+ "/specifications/memories/{id}": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get the specs of a memory device.",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "ID of the memory device whose specs to get",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the memory device specs",
+ "schema": {
+ "$ref": "#/definitions/Memory"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "Memory device specs not found"
+ }
+ }
+ }
+ },
+ "/specifications/psus": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get all PSUs.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved PSUs.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PSU"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ }
+ }
+ }
+ },
+ "/specifications/psus/{id}": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get this PSU.",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "PSU's ID.",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved PSU.",
+ "schema": {
+ "$ref": "#/definitions/PSU"
+ }
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "404": {
+ "description": "PSU not found."
+ }
+ }
+ }
+ },
+ "/specifications/storages": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get a list of the specifications of all storage devices.",
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the storage spec list",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Storage"
+ }
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ }
+ }
+ },
+ "/specifications/storages/{id}": {
+ "get": {
+ "tags": [
+ "devices",
+ "machines"
+ ],
+ "description": "Get the specs of a storage device.",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "ID of the storage device whose specs to get",
+ "required": true,
+ "type": "integer"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved the storage device specs",
+ "schema": {
+ "$ref": "#/definitions/Storage"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "Storage device specs not found"
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "Authorization": {
+ "type": "object",
+ "properties": {
+ "userId": {
+ "type": "integer"
+ },
+ "simulationId": {
+ "type": "integer"
+ },
+ "authorizationLevel": {
+ "type": "string"
+ }
+ }
+ },
+ "CoolingItem": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "energyConsumptionW": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "failureModelId": {
+ "type": "integer"
+ }
+ }
+ },
+ "CPU": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "manufacturer": {
+ "type": "string"
+ },
+ "family": {
+ "type": "string"
+ },
+ "generation": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "clockRateMhz": {
+ "type": "integer"
+ },
+ "numberOfCores": {
+ "type": "integer"
+ },
+ "energyConsumptionW": {
+ "type": "number",
+ "format": "float"
+ },
+ "failureModelId": {
+ "type": "integer"
+ }
+ }
+ },
+ "Datacenter": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ }
+ }
+ },
+ "Experiment": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "simulationId": {
+ "type": "integer"
+ },
+ "pathId": {
+ "type": "integer"
+ },
+ "traceId": {
+ "type": "integer"
+ },
+ "schedulerName": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "FailureModel": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "rate": {
+ "type": "number",
+ "format": "float"
+ }
+ }
+ },
+ "GPU": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "manufacturer": {
+ "type": "string"
+ },
+ "family": {
+ "type": "string"
+ },
+ "generation": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "clockRateMhz": {
+ "type": "integer"
+ },
+ "numberOfCores": {
+ "type": "integer"
+ },
+ "energyConsumptionW": {
+ "type": "number",
+ "format": "float"
+ },
+ "failureModelId": {
+ "type": "integer"
+ }
+ }
+ },
+ "Machine": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "rackId": {
+ "type": "integer"
+ },
+ "position": {
+ "type": "integer"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "cpuIds": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "gpuIds": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "memoryIds": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "storageIds": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "MachineState": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "machineId": {
+ "type": "integer"
+ },
+ "experimentId": {
+ "type": "integer"
+ },
+ "tick": {
+ "type": "integer"
+ },
+ "temperatureC": {
+ "type": "number",
+ "format": "float"
+ },
+ "inUseMemoryMb": {
+ "type": "integer"
+ },
+ "loadFraction": {
+ "type": "number",
+ "format": "float"
+ }
+ }
+ },
+ "Memory": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "manufacturer": {
+ "type": "string"
+ },
+ "family": {
+ "type": "string"
+ },
+ "generation": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "speedMbPerS": {
+ "type": "integer"
+ },
+ "sizeMb": {
+ "type": "integer"
+ },
+ "energyConsumptionW": {
+ "type": "number",
+ "format": "float"
+ },
+ "failureModelId": {
+ "type": "integer"
+ }
+ }
+ },
+ "Path": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "simulationId": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "datetimeCreated": {
+ "type": "string"
+ }
+ }
+ },
+ "PSU": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "energyKwh": {
+ "type": "integer"
+ },
+ "type": {
+ "type": "string"
+ },
+ "failureModelId": {
+ "type": "integer"
+ }
+ }
+ },
+ "Rack": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "capacity": {
+ "type": "integer"
+ },
+ "powerCapacityW": {
+ "type": "integer"
+ }
+ }
+ },
+ "RackState": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "rackId": {
+ "type": "integer"
+ },
+ "experimentId": {
+ "type": "integer"
+ },
+ "tick": {
+ "type": "integer"
+ },
+ "temperatureC": {
+ "type": "number",
+ "format": "float"
+ },
+ "inUseMemoryMb": {
+ "type": "integer"
+ },
+ "loadFraction": {
+ "type": "number",
+ "format": "float"
+ }
+ }
+ },
+ "Room": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "datacenterId": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "roomType": {
+ "type": "string"
+ }
+ }
+ },
+ "RoomState": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "roomId": {
+ "type": "integer"
+ },
+ "experimentId": {
+ "type": "integer"
+ },
+ "tick": {
+ "type": "integer"
+ },
+ "temperatureC": {
+ "type": "number",
+ "format": "float"
+ },
+ "inUseMemoryMb": {
+ "type": "integer"
+ },
+ "loadFraction": {
+ "type": "number",
+ "format": "float"
+ }
+ }
+ },
+ "RoomType": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "Scheduler": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "Simulation": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "datetimeCreated": {
+ "type": "string",
+ "format": "dateTime"
+ },
+ "datetimeLastEdited": {
+ "type": "string",
+ "format": "dateTime"
+ }
+ }
+ },
+ "Section": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "pathId": {
+ "type": "integer"
+ },
+ "datacenterId": {
+ "type": "integer"
+ },
+ "startTick": {
+ "type": "integer"
+ }
+ }
+ },
+ "Storage": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "manufacturer": {
+ "type": "string"
+ },
+ "family": {
+ "type": "string"
+ },
+ "generation": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "speedMbPerS": {
+ "type": "integer"
+ },
+ "sizeMb": {
+ "type": "integer"
+ },
+ "energyConsumptionW": {
+ "type": "number",
+ "format": "float"
+ },
+ "failureModelId": {
+ "type": "integer"
+ }
+ }
+ },
+ "Task": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "startTick": {
+ "type": "integer"
+ },
+ "totalFlopCount": {
+ "type": "integer"
+ }
+ }
+ },
+ "TaskState": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "taskId": {
+ "type": "integer"
+ },
+ "experimentId": {
+ "type": "integer"
+ },
+ "tick": {
+ "type": "integer"
+ },
+ "flopsLeft": {
+ "type": "integer"
+ }
+ }
+ },
+ "Tile": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "roomId": {
+ "type": "integer"
+ },
+ "objectId": {
+ "type": "integer"
+ },
+ "objectType": {
+ "type": "string"
+ },
+ "positionX": {
+ "type": "integer"
+ },
+ "positionY": {
+ "type": "integer"
+ }
+ }
+ },
+ "Trace": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "User": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "googleId": {
+ "type": "integer"
+ },
+ "email": {
+ "type": "string"
+ },
+ "givenName": {
+ "type": "string"
+ },
+ "familyName": {
+ "type": "string"
+ }
+ }
+ }
+ }
+}