{
  "title": "SoftwareSession",
  "@id": "stencila:SoftwareSession",
  "extends": "Thing",
  "role": "primary",
  "status": "unstable",
  "category": "code",
  "description": "Definition of a compute session, including its software and compute resource\nrequirements and status.\n",
  "$comment": "Usually used to define the environment that is required to execute an\nexecutable document.\n",
  "properties": {
    "type": {
      "@id": "schema:type",
      "description": "The name of the type.",
      "type": "string",
      "enum": [
        "SoftwareSession"
      ],
      "default": "SoftwareSession",
      "from": "Entity"
    },
    "id": {
      "@id": "schema:id",
      "description": "The identifier for this item.",
      "type": "string",
      "from": "Entity"
    },
    "meta": {
      "@id": "stencila:meta",
      "description": "Metadata associated with this item.",
      "type": "object",
      "from": "Entity"
    },
    "alternateNames": {
      "@id": "schema:alternateName",
      "description": "Alternate names (aliases) for the item.",
      "type": "array",
      "items": {
        "type": "string"
      },
      "from": "Thing",
      "aliases": [
        "alternateName"
      ]
    },
    "description": {
      "@id": "schema:description",
      "description": "A description of the item.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "$ref": "Node.schema.json"
          }
        }
      ],
      "from": "Thing"
    },
    "identifiers": {
      "@id": "schema:identifier",
      "description": "Any kind of identifier for any kind of Thing.",
      "$comment": "Some identifiers have specific properties e.g the `issn` property for\nthe `Periodical` type. These should be used in preference to this\nproperty which is intended for identifiers that do not yet have a\nspecific property. Identifiers can be represented as strings, but\nusing a `PropertyValue` will usually be better because it allows\nfor `propertyID` (i.e. the type of identifier).\n",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "$ref": "PropertyValue.schema.json"
          }
        ]
      },
      "from": "Thing",
      "aliases": [
        "identifier"
      ]
    },
    "name": {
      "@id": "schema:name",
      "description": "The name of the item.",
      "type": "string",
      "from": "Thing"
    },
    "url": {
      "@id": "schema:url",
      "description": "The URL of the item.",
      "type": "string",
      "format": "uri",
      "from": "Thing"
    },
    "environment": {
      "@id": "stencila:environment",
      "description": "The software environment to execute this session in.",
      "allOf": [
        {
          "$ref": "SoftwareEnvironment.schema.json"
        }
      ],
      "from": "SoftwareSession"
    },
    "dateStart": {
      "@id": "schema:startDate",
      "description": "The date-time that the session began.",
      "anyOf": [
        {
          "$ref": "Date.schema.json"
        },
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "string",
          "format": "date-time"
        }
      ],
      "from": "SoftwareSession"
    },
    "dateEnd": {
      "@id": "schema:endDate",
      "description": "The date-time that the session ended.",
      "anyOf": [
        {
          "$ref": "Date.schema.json"
        },
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "string",
          "format": "date-time"
        }
      ],
      "from": "SoftwareSession"
    },
    "status": {
      "@id": "stencila:sessionStatus",
      "description": "The status of the session (starting, stopped, etc).",
      "enum": [
        "unknown",
        "starting",
        "started",
        "stopping",
        "stopped",
        "failed"
      ],
      "from": "SoftwareSession"
    },
    "clientsRequest": {
      "@id": "stencila:clientsRequest",
      "description": "The maximum number of concurrent clients requested for the session.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "clientsLimit": {
      "@id": "stencila:clientsLimit",
      "description": "The maximum number of concurrent clients the session is limited to.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "durationRequest": {
      "@id": "stencila:durationRequest",
      "description": "The maximum duration (seconds) requested for the session.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "durationLimit": {
      "@id": "stencila:durationLimit",
      "description": "The maximum duration (seconds) the session is limited to.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "timeoutRequest": {
      "@id": "stencila:timeoutRequest",
      "description": "The inactivity timeout (seconds) requested for the session.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "timeoutLimit": {
      "@id": "stencila:timeoutLimit",
      "description": "The inactivity timeout (seconds) the session is limited to.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "cpuRequest": {
      "@id": "stencila:cpuRequest",
      "description": "The amount of CPU requested for the session.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "cpuLimit": {
      "@id": "stencila:cpuLimit",
      "description": "The amount of CPU the session is limited to.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "memoryRequest": {
      "@id": "stencila:memoryRequest",
      "description": "The amount of memory requested for the session.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "memoryLimit": {
      "@id": "stencila:memoryLimit",
      "description": "The amount of memory that the session is limited to.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "networkTransferRequest": {
      "@id": "stencila:networkTransferRequest",
      "description": "The amount of network data transfer (GiB) requested for the session.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "networkTransferLimit": {
      "@id": "stencila:networkTransferLimit",
      "description": "The amount of network data transfer (GiB) that the session is limited to.",
      "type": "number",
      "minimum": 0,
      "from": "SoftwareSession"
    },
    "volumeMounts": {
      "@id": "stencila:volumeMounts",
      "description": "Volumes to mount in the session.",
      "type": "array",
      "items": [
        {
          "$ref": "VolumeMount.schema.json"
        }
      ],
      "from": "SoftwareSession",
      "aliases": [
        "volumeMount"
      ]
    }
  },
  "file": "SoftwareSession.schema.yaml",
  "children": [],
  "descendants": [],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://schema.stenci.la/v0/SoftwareSession.schema.json",
  "source": "https://github.com/stencila/schema/blob/master/SoftwareSession.schema.yaml",
  "type": "object",
  "propertyAliases": {
    "alternateName": "alternateNames",
    "identifier": "identifiers",
    "volumeMount": "volumeMounts"
  },
  "additionalProperties": false,
  "required": [
    "type"
  ]
}
