SL 中的自动缩放策略数据

Autoscale Policy data in SL

我正在使用 Java 客户端实施自动缩放策略。 如何获取触发器数据中的 "Resource Use" 信息? (请参考附件中的png文件) 这是我获取 Watch 数据的代码,但它总是 returns null。

    private void getPolicies(){

        Group.Service groupSrv = Group.service(client, 1046365L);

        List<Policy> pList = groupSrv.getPolicies();

        for(Policy po : pList){
            System.out.println("policy name : " + po.getName());
            System.out.println("Cooldown : " + po.getCooldown()); // /60/60/24
            List<ResourceUse> resourceList = po.asService(client).getResourceUseTriggers();

            for(ResourceUse rsc : resourceList){
                System.out.println("rsc id : " + rsc.getId());

                List<Watch> watList = rsc.getWatches();

                for(Watch wat:watList){
                    System.out.println("watch Id : " + wat.getId());
                    System.out.println("watch : " + wat.getMetric());
                }

            }
}

我在这个 returns 中给你的对象 Mask 有你需要的所有信息。但是正如我告诉过你的那样,该门户显示的信息对客户来说是可以理解的,并且无法使用 API.

获取这些信息

例如,对于资源使用中显示此值的自动缩放组:

"If my CPU Percentage is greater than 80 for 30 Minute(s)"

我在 API 回复中得到了这个:

            "triggers": [
                {
                    "id": 145903,
                    "type": {
                        "id": 3,
                        "keyName": "RESOURCE_USE",
                        "name": "Resource Use"
                    },
                    "watches": [
                        {
                            "algorithm": "EWMA",
                            "id": 120803,
                            "metric": "host.cpu.percent",
                            "operator": ">",
                            "period": 1800,
                            "value": "80"
                        }
                    ]
                }
            ]

门户网站会像这样解析该信息:

  • "algorithm": "EWMA" -> 如果我的
  • "metric": "host.cpu.percent" -> CPU 百分比
  • "operator": ">" -> 大于
  • "value": "80" -> 80
  • "period": 1800 -> 30 分钟

所以如果你想展示与门户相同的数据,你需要知道门户如何解析这些信息的所有案例。

此致

信息已检索,但似乎未正确映射到 Softlayer java 客户端对象。试试下面的代码,它会打印信息。

我建议您尝试最新版本的Softlayer Java 客户端,如果问题仍然可以重现,请在Softlayer Java 客户端GitHub 项目中提交问题。

import java.util.List;
import com.google.gson.Gson;
import com.softlayer.api.ApiClient;
import com.softlayer.api.RestApiClient;
import com.softlayer.api.service.scale.Group;
import com.softlayer.api.service.scale.Policy;
import com.softlayer.api.service.scale.policy.Trigger;

public class TriggersAutoScale {

private static String user = "set me";

    private static String apiKey = "set me";

    private static ApiClient client = new RestApiClient().withCredentials(user, apiKey);

    public static void main(String[] args) {
        getTriggerWatch();

    }

    public static void getTriggerWatch() {
        Group.Service groupSrv = Group.service(client, 1046365L);

        String triggerMask = "mask[id, name, status[name, keyName], suspendedFlag, "
                + "cooldown, regionalGroupId, minimumMemberCount, maximumMemberCount, "
                + "balancedTerminationFlag ,policies[id,cooldown,name,scaleActions[id,type[id,keyName,name],amount,scaleType],"
                + "triggers[id,type],triggers(SoftLayer_Scale_Policy_Trigger_OneTime)[date],triggers(SoftLayer_Scale_Policy_Trigger_Repeating)[schedule],"
                + "triggers(SoftLayer_Scale_Policy_Trigger_ResourceUse)[watches[id,algorithm,metric,operator,period,value]]],"
                + "virtualGuestMemberCount]";

        groupSrv.setMask(triggerMask);
        List<Policy> pList = groupSrv.getObject().getPolicies();
        for (Policy policy : pList) {
            System.out.println (policy.getResourceUseTriggers().size());
            for (Trigger trigger : policy.getTriggers()) {
                Gson gson = new Gson();
                System.out.println(gson.toJson(trigger));
            }

        }
    }

}