# -*- coding:utf-8 -*-
import time
import pprint
import json

import yaml
from aliyunsdkcore import client
from aliyunsdkcms.request.v20170301 import QueryMetricListRequest, QueryMetricLastRequest

with open('config.yaml', 'r') as f:
    config = yaml.load(f)

class ALiYun(object):
    def __init__(self):
        self.key_id = config['aliyun_settings']['key']
        self.key_secret = config['aliyun_settings']['secret']

    def get_client(self, region):
        clt = client.AcsClient(self.key_id, self.key_secret, region)
        return clt

    def json_format(self, response):
        if isinstance(response, bytes):
            response = response.decode()
        return json.loads(response)


class CMS(ALiYun):
    def get_rds_metric(self, rds_instance_ids, metric, duration=60*6):
        """
        获取实例ID在rds_instance_id列表中的metric监控项
        https://yq.aliyun.com/ask/426959?spm=a2c4e.11154873.tagmain.6.4c8d671b5KwueI一次最多获取十个实例的监控项
        :param duration: 过去多少时间内的metrics, 单位s
        """
        assert len(rds_instance_ids) <= 10, '一次查询的rds_instace_ids不能超过十个'
        client = self.get_client('cn-qingdao')
        request = QueryMetricListRequest.QueryMetricListRequest()
        request.set_accept_format('json')
        request.set_Project('acs_rds_dashboard')
        request.set_Metric(metric)
        end_timestamp = int(time.time()) * 1000
        start_timestamp = end_timestamp - duration*1000
        request.set_StartTime(start_timestamp)
        request.set_EndTime(end_timestamp)
        dimensions = [{
            'instanceId': rds_instance_id
        }for rds_instance_id in rds_instance_ids]
        request.set_Dimensions(json.dumps(dimensions))
        # request.set_Period('60')
        result = client.do_action_with_exception(request)
        # pprint.pprint(self.json_format(result))
        return self.json_format(result)