REST API for Scale Policy Management

NOTES ON SCALE POLICIES:

  • The scale policy v3 ensures that if you have nodes across multiple regions, the stream manager will scale up and down to maintain viable nodes in each designated region.
  • The policy supports two optional attributes per role target - scaleInWaitTime & scaleOutWaitTime. These parameters denote delayed scale-in/scale-out time in milliseconds. The attributes require positive values (>=0). If the attribute is omitted, the value defaults to 0.

Create Scale Policy

Description

Create a new scale policy. Note: if you intend to use the Autoscaling Tier 2 functionality, you need a minimum of two each origin, edge and relay nodes per group. If you are also using the Adaptive Bitrate Susbcriber or VP8 Transcode functionality, then you would need at least two transcode nodes per group.

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy?accessToken=<accessToken>
  • Method: POST
  • Data: JSON
   {
  "policy": {
          "name": "<policy-name>",
          "description": "<policy-description>",
          "type": "<policy-type>",
          "version": "<policy-version>",
          "targets": {
              "region": [
                  {
                      "name": "default",
                      "target": [
        {
          "role": "<role>",
          "minLimit": "<min-node-count>",
          "maxLimit": "<max-node-count>",
          "scaleAdjustment": "<node-scale-adjustment>"
        }
      ]
    }
    }}

RESPONSE

  • Failure: HTTP CODE 400 or 404
  • Data:
    {
      "errorMessage": "<error-message-string>",
      "timestamp": <error-timestamp>
    }
  • Success: HTTP CODE 201
  • Data:
     {
   "policy": {
     "name": "<policy-name>",
     "description": "<policy-description>>",
     "version": "<policy-version>",
     "type": "<policy-type>",
     "targets": {
       "target": [{
         "role": "<role>",
         "minLimit": "<min-node-count>",
         "maxLimit": "<max-node-count>",
         "scaleAdjustment": "<node-scale-adjustment>"
       }]
     }
   }}

Example

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy?accessToken=xyz123
  • Method: POST
  • Data: JSON
   {
      "policy": {
          "name": "alltypes-01",
          "description": "Scale policy file with all node types",
          "type": "com.red5pro.services.autoscaling.model.ScalePolicyMaster",
          "version": "0.0.3",
          "targets": {
              "region": [
                  {
                      "name": "default",
                      "target": [
                          {
                              "role": "edge",
                              "minLimit": 2,
                              "maxLimit": 20,
                              "scaleAdjustment": 1
                          },
                          {
                              "role": "origin",
                              "minLimit": 2,
                              "maxLimit": 20,
                              "scaleAdjustment": 1
                          },
                                                    {
                              "role": "relay",
                              "minLimit": 2,
                              "maxLimit": 20,
                              "scaleAdjustment": 1
                          },
                                                    {
                              "role": "transcoder",
                              "minLimit": 2,
                              "maxLimit": 20,
                              "scaleAdjustment": 1
                          }
                      ]
                  }
                      ]
                  }
      }
  }

RESPONSE

  • Success: HTTP CODE 201
  • Data:
{
    "policy": {
        "name": "alltypes-01",
        "description": "Scale policy file with all node types",
        "type": "com.red5pro.services.autoscaling.model.ScalePolicyMaster",
        "version": "0.0.3",
        "targets": {
            "region": [
                {
                    "name": "default",
                    "target": [
                        {
                            "role": "edge",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "origin",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "relay",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "transcoder",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        }
                    ]
                }
            ]
        }
    }
}

Read Scale Policy

Description

Read a scale policy.

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy/{policy-name}?accessToken=<accessToken>
  • Method: GET
  • Data: NA

RESPONSE

  • Failure: HTTP CODE 400 or 404
  • Data:
    {
      "errorMessage": "<error-message-string>",
      "timestamp": <error-timestamp>
    }
  • Success: HTTP CODE 200
  • Data:

     {
   "policy": {
     "name": "<policy-name>",
     "description": "<policy-description>>",
     "version": "<policy-version>",
     "type": "<policy-type>",
     "targets": {
       "target": [{
         "role": "<role>",
         "minLimit": "<min-node-count>",
         "maxLimit": "<max-node-count>",
         "scaleAdjustment": "<node-scale-adjustment>"
       }]
     }
   }}

Example

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy/alltypes-01?accessToken=xyz123
  • Method: GET
  • Data: NA

RESPONSE

  • Success: HTTP CODE 200
  • Data:
{
    "policy": {
        "name": "alltypes-01",
        "description": "Scale policy file with all node types",
        "type": "com.red5pro.services.autoscaling.model.ScalePolicyMaster",
        "version": "0.0.3",
        "targets": {
            "region": [
                {
                    "name": "default",
                    "target": [
                        {
                            "role": "edge",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "origin",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "relay",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "transcoder",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        }
                    ]
                }
            ]
        }
    }
}

Delete Scale Policy

Description

Delete a scale policy.

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy/{policy-name}?accessToken=<accessToken>
  • Method: DELETE
  • Data: NA

RESPONSE

  • Failure: HTTP CODE 400 or 404
  • Data:
    {
      "errorMessage": "<error-message-string>",
      "timestamp": <error-timestamp>
    }
  • Success: HTTP CODE 200
  • Data:
     {
   "policy": {
     "name": "<policy-name>",
     "description": "<policy-description>>",
     "version": "<policy-version>",
     "type": "<policy-type>",
     "targets": {
       "target": [{
         "role": "<role>",
         "minLimit": "<min-node-count>",
         "maxLimit": "<max-node-count>",
         "scaleAdjustment": "<node-scale-adjustment>"
       }]
     }
   }}

Example

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy/alltypes-01?accessToken=xyz123
  • Method: DELETE
  • Data: NA

RESPONSE

  • Success: HTTP CODE 200
  • Data:
{
    "policy": {
        "name": "alltypes-01",
        "description": "Scale policy file with all node types",
        "type": "com.red5pro.services.autoscaling.model.ScalePolicyMaster",
        "version": "0.0.3",
        "targets": {
            "region": [
                {
                    "name": "default",
                    "target": [
                        {
                            "role": "edge",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "origin",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "relay",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "transcoder",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        }
                    ]
                }
            ]
        }
    }
}

Update Scale Policy

Description

Updates a scale policy

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy/{policy-name}?accessToken=<accessToken>
  • Method: PUT
  • Data: JSON
   {
    "policy": {
        "name": "<policy-name>",
        "description": "<policy-description>>",
        "version": "<policy-version>",
        "type": "<policy-type>",
    "targets": {
      "target": [
        {
          "role": "<role>",
          "minLimit": "<min-node-count>",
          "maxLimit": "<max-node-count>",
          "scaleAdjustment": "<node-scale-adjustment>"
        }
      ]
    }
    }}

RESPONSE

  • Failure: HTTP CODE 400 or 404
  • Data:
    {
      "errorMessage": "<error-message-string>",
      "timestamp": <error-timestamp>
    }
  • Success: HTTP CODE 200
  • Data:

     {
     "policy": {
       "name": "<policy-name>",
       "description": "<policy-description>>",
       "version": "<policy-version>",
       "type": "<policy-type>",
       "targets": {
         "target": [{
           "role": "<role>",
           "minLimit": "<min-node-count>",
           "maxLimit": "<max-node-count>",
           "scaleAdjustment": "<node-scale-adjustment>"
         }]
       }
     }}

NOTES ON UPDATE API:

  • Only minLimit and maxLimit properties should be updated while the policy is in use by one or more node groups.
  • Any part of the policy can be updated while the policy is not in use by any of the node groups.

Example

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy/alltypes-01?accessToken=xyz123
  • Method: PUT
  • Data: JSON
  {
      "policy": {
          "name": "alltypes-01",
          "description": "Scale policy file with all node types",
          "type": "com.red5pro.services.autoscaling.model.ScalePolicyMaster",
          "version": "0.0.3",
          "targets": {
              "region": [
                  {
                      "name": "default",
                      "target": [
                          {
                              "role": "edge",
                              "minLimit": 2,
                              "maxLimit": 30,
                              "scaleAdjustment": 1
                          },
                          {
                              "role": "origin",
                              "minLimit": 2,
                              "maxLimit": 30,
                              "scaleAdjustment": 1
                          },
                                                    {
                              "role": "relay",
                              "minLimit": 2,
                              "maxLimit": 30,
                              "scaleAdjustment": 1
                          },
                                                    {
                              "role": "transcoder",
                              "minLimit": 2,
                              "maxLimit": 30,
                              "scaleAdjustment": 1
                          }
                      ]
                  }
                      ]
                  }
      }
  }

RESPONSE

  • Success: HTTP CODE 200
  • Data:
  {
      "policy": {
          "name": "alltypes-01",
          "description": "Scale policy file with all node types",
          "type": "com.red5pro.services.autoscaling.model.ScalePolicyMaster",
          "version": "0.0.3",
          "targets": {
              "region": [
                  {
                      "name": "default",
                      "target": [
                          {
                              "role": "edge",
                              "minLimit": 2,
                              "maxLimit": 30,
                              "scaleAdjustment": 1
                          },
                          {
                              "role": "origin",
                              "minLimit": 2,
                              "maxLimit": 30,
                              "scaleAdjustment": 1
                          },
                                                    {
                              "role": "relay",
                              "minLimit": 2,
                              "maxLimit": 30,
                              "scaleAdjustment": 1
                          },
                                                    {
                              "role": "transcoder",
                              "minLimit": 2,
                              "maxLimit": 30,
                              "scaleAdjustment": 1
                          }
                      ]
                  }
                      ]
                  }
      }
  }

List Scale Policies

Description

List scale policies by name

REQUEST

  • URI : http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy?accessToken=<accessToken>
  • Method: GET
  • Data: NA

RESPONSE

  • Failure: HTTP CODE 400 or 404
  • Data:
    {
      "errorMessage": "<error-message-string>",
      "timestamp": <error-timestamp>
    }
  • Success: HTTP CODE 200
  • Data:

     [
      "<policy-name>"
    ]

Example

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy?accessToken=xyz123
  • Method: GET
  • Data: NA

RESPONSE

  • Success: HTTP CODE 200
  • Data:
    [
      "config-01",
      "alltypes-01"
      "default-v3"
    ]

Clone Scale Policy

Description

Creates a new scale policy with a new name using the data from an existing policy.

REQUEST

  • URI : http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy/<existing-policy-name>/copy/<new-policy-name>?accessToken=<accessToken>
  • Method: POST
  • Data: NA

RESPONSE

  • Failure: HTTP CODE 400 or 404
  • Data:
    {
      "errorMessage": "<error-message-string>",
      "timestamp": <error-timestamp>
    }
  • Success: HTTP CODE 201
  • Data:

     {
     "policy": {
       "name": "<policy-name>",
       "description": "<policy-description>>",
       "version": "<policy-version>",
       "type": "<policy-type>",
       "targets": {
         "target": [{
           "role": "<role>",
           "minLimit": "<min-node-count>",
           "maxLimit": "<max-node-count>",
           "scaleAdjustment": "<node-scale-adjustment>"
         }]
       }
     }}

Example

REQUEST

  • URI: http://{host}:{port}/streammanager/api/3.1/admin/configurations/scalepolicy/alltypes-01/copy/alltypes-02?accessToken=xyz123
  • Method: POST
  • Data: n/a

RESPONSE

  • Success: HTTP CODE 201
  • Data:
{
    "policy": {
        "name": "alltypes-02",
        "description": "Scale policy file with all node types",
        "type": "com.red5pro.services.autoscaling.model.ScalePolicyMaster",
        "version": "0.0.3",
        "targets": {
            "region": [
                {
                    "name": "default",
                    "target": [
                        {
                            "role": "edge",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "origin",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "relay",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        },
                        {
                            "role": "transcoder",
                            "maxLimit": 20,
                            "scaleAdjustment": 1,
                            "minLimit": 2
                        }
                    ]
                }
            ]
        }
    }
}