# 更新策略
#### 功能说明
该接口用于修改策略规则。告警策略支持更新，定时和周期策略不支持更新。
#### URI
PUT /v1/{project_id}/pe/policy/{policy_id}
参数说明请参见[表1]
 表1参数说明 
| 参数名称         | 是否必选 | 描述   |
|:---|:---|:---|
| project_id  | 是  | 项目ID |
| policy_id | 是 | 策略ID  |
   
#### 请求消息
**请求消息头**
请求消息头如[表2]
 表2请求消息头 
| 参数             | 描述                                                                                                                   | 是否为必选 | 示例                            |
|:---|:---|:---|:---|
| Content-Type   | 内容类型 该字段内容填为"application/json;charset=utf-8" | 必选  | application/json;charset=utf-8 |
| Cluster-Id        | 集群ID                                                                                                                  | 必选     | -                            |
| Namespace      | 命名空间                                                                                                                  | 必选    | -                            |
| Deployment-Name | 应用名                                                                                                                 | 必选   | -                             |
   
**请求参数**
请求参数如[表3]
 表3请求参数 
| 参数名称        | 是否必选 | 参数类型                                                                             | 取值范围                                                  | 描述           |
|:---|:---|:---|:---|:---|
| id           | 是    | String                                                                                                  | -                                                    | 策略ID             |
| name       | 是    | String                                                                                                 | 策略名称必须为以0～9、a～z、A～Z、下划线（_）或中划线（-）组成的1\~64位字符串，且必须以字母开头。 | 策略名称（不支持修改）   |
| policy_type | 是    | String                                                         | 告警策略：ALARM                                           | 策略类型(当前只支持告警策略) |
| rule        | 是   | 参见[表4] | -                                                      | 触发策略的规则       |
   
 表4rule字段数据结构说明 
| 参数名称          | 是否必选 | 参数类型                                                                                   | 取值范围                 | 描述                                                                      |
|:---|:---|:---|:---|:---|
| conditions | 是      | 参见[表5] | conditions最多5个，最少1个 | 匹配条件内容。一个规则可以有多个条件，多个条件之间的关系是"并且"，内部描述了多个详细匹配条件。一个条件可以描述一个metric的匹配方式。 |
| actions    | 是     | 参见[表6]  | actions最多5个，最少1个     | 指定策略匹配成功后执行的动作。                                                         |
   
 表5conditions字段数据结构说明 
| 参数名称               | 是否必选 | 参数类型 | 取值范围                                                                                                                                                                                                                                                                                                                                                                           | 描述                           |
|:---|:---|:---|:---|:---|
| metric_namespace  | 是    | String                      | - PAAS.CONTAINER应用指标的命名空间  - PAAS.CUSTOMMETRICS：自定义指标的命名空间   | 指标命名空间                       |
| metric_name       | 是     | String                      | 取值满足表达式\[a-zA-Z_:\]\[a-zA-Z0-9_:\]\*，即指标名称首字符必须为字母或_或:，其他字符由字母数字_:组成，长度为1\~255个字符。                                                                                                                                                                                                                                                                                                                  | 指标名称                        |
| metric_unit        | 是     | String                      | -                                                                                                                                                                                                                                                                                                                                                                           | 单位。随指标名称变化而变化，具体信息从AMS接口获取。 |
| period            | 是    | Integer                      | 分别包括20，60，300，900，1800，3600                                                                                                                                                                                                                                                                                                                                                   | 统计周期，单位：秒                     |
| evaluation_periods | 是   | Integer                     | 1，2，3，4，5                                                                                                                                                                                                                                                                                                                                                                   | 连续周期数                          |
| statistic          | 是    | String                      | 当前只支持平均值（average）                                                                                                                                                                                                                                                                                                                                                              | 统计方式                         |
| metric_operation  | 是     | String                      | 包含"\>"、"\<"。 例如，"\>"表示当metric大于metric_thresholdUpdate值时触发actions                                                                                                                                                                                                                                    | 指标操作符                       |
| metric_threshold    | 是    | Float   | \[0，2147483647\]                                                                                                                                                                                                                                                                                                                                                             | 阈值条件                         |
   
 表6actions字段数据结构说明 
| 参数名称        | 是否必选 | 参数类型                                                                                  | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|:---|
| type       | 是      | String                                                                                | - scale_out_k8s  - scale_out_vm  - scale_in_k8s  - scale_in_vm   | - scale_out_k8s、scale_out_vm表示扩容。  - scale_in_k8s、scale_in_vm表示缩容。   含有k8s的表示容器应用，含有vm的表示进程应用。 |
| parameters | 是    | 参见[表7] | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 包含扩缩容的实例数。                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
 表7parameters字段数据结构说明 
| 参数名称     | 是否必选 | 参数类型 | 取值范围               | 描述        |
|:---|:---|:---|:---|:---|
| scale_unit | 是      | Integer                     | 在策略组的最小实例数与最大实例数之间 | 扩缩容的实例数 |
   
**请求示例**
修改告警策略示例
```
{   
    "id" : "5c2eecea-32ac-42c0-be30-f73b15d68429", 
    "name" : "policy_1", 
    "policy_type" : "ALARM", 
    "rule" : { 
        "conditions" : [{ 
                "metric_namespace" : "PAAS.CONTAINER", 
                "metric_name" : "cpuUsage", 
                "metric_unit" : "Percent", 
                "period" : 60, 
                "evaluation_periods" : 1, 
                "statistic" : "average", 
                "metric_operation" : ">", 
                "metric_threshold" : 70 
            } 
        ], 
        "actions" : [{ 
                "type" : "scale_out_k8s", 
                "parameters" : { 
                    "scale_unit" : 1 
                } 
            } 
        ] 
    } 
}
```
#### 响应消息
**响应参数**
响应参数如[表8]
 表8响应参数 
| 参数名称        | 参数类型     | 描述          |
|:---|:---|:---|
| errorCode    | String   | 错误码         |
| errorMessage | String   | 详细信息      |
| context      | String | 修改后策略的详细信息 |
   
**响应示例**
```
{
   "errorCode": 0,  
   "errorMessage": "",
   "context": { 
        "id" : "5c2eecea-32ac-42c0-be30-f73b15d68429", 
        "name" : "policy_1", 
        "policy_type" : "ALARM", 
        "rule" : { 
            "conditions" : [{ 
                    "metric_namespace" : "PAAS.CONTAINER", 
                    "metric_name" : "cpuUsage", 
                    "metric_unit" : "Percent", 
                    "period" : 60, 
                    "evaluation_periods" : 1, 
                    "statistic" : "average", 
                    "metric_operation" : ">", 
                    "metric_threshold" : 70 
                } 
            ], 
            "actions" : [{ 
                    "type" : "scale_out_k8s", 
                    "parameters" : { 
                        "scale_unit" : 1 
                    }   
                } 
            ] 
        } 
    } 
}
```
#### 错误码
表9错误码 
| 错误码                 | 错误信息                                              | 处理措施            |
|:---|:---|:---|
| SVCSTG.PE.4001101 | Invalid parameter.                                   | 请检查对应的参数是否符合要求。  |
| SVCSTG.PE.4031012  | Failed to verify the project ID.                     | 请检查对应的参数是否符合要求。  |
| SVCSTG.PE.4033008   | Failed to update the scheduled or periodic policy. | 请检查对应的参数是否符合要求。 |
| SVCSTG.PE.5001201  | Failed to insert or update data in the background.  | 请联系技术支持工程师解决。     |
| SVCSTG.PE.5001203 | Query error.                                        | 请联系技术支持工程师解决。     |
| SVCSTG.PE.5003007   | Failed to update the threshold rule.              | 请联系技术支持工程师解决。      |
   
