Search code examples
ibm-cloud-infrastructure

Autoscale Policy data in SL


I am implementing Autoscale policies using Java client. How can I get "Resource Use" information in trigger data? (please refer to attached png file) This is my code getting Watch data, but it always 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());
                }

            }
}

policy


Solution

  • The information is retrieved, but it seems it is not mapped properly to the Softlayer java client objects. Try the code below it will print the information.

    I suggest you to try the latest version of the Softlayer Java client, if the issue is still reproducible, submit an issue in the Softlayer Java client GitHub project.

    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));
                }
    
            }
        }
    
    }