Esempio n. 1
0
 def slow_DBCheck(self):
     for region, instance in self.get_DBInstance().items():
         request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
         request.set_accept_format('json')
         request.set_action_name("DescribeSlowLogs")
         request.set_DBInstanceId(instance)
         request.add_query_param("StartTime", self.startTime)
         request.add_query_param("EndTime",
                                 time.strftime("%Y-%m-%dZ", time.gmtime()))
         clt = client.AcsClient(self.accesskey, self.accessSecret, region)
         try:
             result = clt.do_action(request)
             data = json.loads(result)["Items"]['SQLSlowLog']
             if data:
                 li = []
                 for i in range(len(data)):
                     MySQLTotalExecutionTimes = data[i][
                         'MySQLTotalExecutionTimes']
                     MaxExecutionTime = data[i]['MaxExecutionTime']
                     SQLText = data[i]['SQLText']
                     DBName = data[i]['DBName']
                     CreateTime = data[i]['CreateTime']
                     li.append({
                         'SQLText': SQLText,
                         'DBName': DBName,
                         'MySQLTotalExecutionTimes':
                         MySQLTotalExecutionTimes,
                         'MaxExecutionTime': MaxExecutionTime,
                         'CreateTime': CreateTime
                     })
                 return li
             else:
                 continue
         except Exception:
             pass
Esempio n. 2
0
def GetRdsList():
    RdsRequest = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    RdsRequest.set_accept_format('json')
    RdsInfo = clt.do_action_with_exception(RdsRequest)
    for RdsInfoJson in (json.loads(RdsInfo))['Items']['DBInstance']:
        DBInstanceIdList.append(RdsInfoJson['DBInstanceId'])
    print DBInstanceIdList
Esempio n. 3
0
def sync_rds_info(request):
    temp_name = "monitor/monitor-header.html"
    client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, 'cn-shanghai')
    rds_env = {
        'prd': 'Production',
        'pp': 'Pre-production',
        'qa': 'Quality Assurance',
        'dev': 'Develop',
        'others': 'Others'
    }
    if RdsGroup.objects.all().count() != 0:
        RdsGroup.objects.all().delete()
        for name, desc in rds_env.items():
            RdsGroup(name=name, desc=desc).save()
    else:
        for name, desc in rds_env.items():
            RdsGroup(name=name, desc=desc).save()

    req = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    req.set_PageSize(100)
    resp = json.loads(client.do_action_with_exception(req), encoding='utf-8')

    for db in resp.get('Items').get('DBInstance'):
        db_instance_id = db.get('DBInstanceId')
        db_instance_description = db.get('DBInstanceDescription')
        db_instance_type = db.get('DBInstanceType')
        db_instance_class = db.get('DBInstanceClass')
        zone_id = db.get('ZoneId')
        connection_mode = db.get('ConnectionMode')
        engine = db.get('Engine')
        engine_version = db.get('EngineVersion')

        rds_group = db_instance_description.split('-')[-1]
        if rds_group in rds_env:
            group = RdsGroup.objects.get(name=rds_group)

            Rds(db_instance_id=db_instance_id,
                db_instance_description=db_instance_description,
                db_instance_type=db_instance_type,
                db_instance_class=db_instance_class,
                zone_id=zone_id,
                connection_mode=connection_mode,
                engine=engine,
                engine_version=engine_version,
                rds_group=group).save()
        else:
            group = RdsGroup.objects.get(name='others')

            Rds(db_instance_id=db_instance_id,
                db_instance_description=db_instance_description,
                db_instance_type=db_instance_type,
                db_instance_class=db_instance_class,
                zone_id=zone_id,
                connection_mode=connection_mode,
                engine=engine,
                engine_version=engine_version,
                rds_group=group).save()

    return render(request, "monitor/rds_index.html", locals())
Esempio n. 4
0
 def get_DescribeDBInstances(self):
     Total = self.get_TotalPages('DescribeInstances')
     for page in xrange(1, Total + 1):
         request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
         request.set_accept_format('json')
         request.set_PageSize('10')
         request.set_PageNumber(page)
         result = json.loads(self.client.do_action_with_exception(request))
         yield result['Items']['DBInstance'] if result['Items'] else []
Esempio n. 5
0
def query_rds_list(RegionId):
    # 设置参数
    request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    request.set_accept_format('json')
    request.add_query_param('RegionId', RegionId)

    # 发起请求
    response = clt.do_action(request)
    json_response = json.loads(response)
    return json_response['Items']['DBInstance'][0]
Esempio n. 6
0
 def request_get_instance(self, instance_id):
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     self.request_to_json(request)
     request.add_query_param('RegionId', 'cn-hangzhou')
     request.add_query_param('DBInstanceId', instance_id)
     try:
         response = self.clt.do_action_with_exception(request)
     except:
         return {}
     return self.get_json_results(response).get('Items').get('DBInstance')[0]
Esempio n. 7
0
 def request_get_page_number(self):
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     request.add_query_param('PageNumber', 1)
     request.add_query_param('PageSize', 1)
     try:
         response = self.clt.do_action_with_exception(request)
     except:
         return {}
     result = self.get_json_results(response)
     return int(result.get('TotalRecordCount')/settings.ALIYUN_PAGESIZE)+1
Esempio n. 8
0
 def get_DBid(self):
     try:
         for zone in self.zone:
             client = AcsClient('', '', zone)
             request = DescribeDBInstancesRequest.DescribeDBInstancesRequest(
             )
             request.set_accept_format('json')
             response = json.loads(client.do_action_with_exception(request))
             self.DBid.append(response['Items']['DBInstance'])
     except Exception as e:
         raise e
Esempio n. 9
0
 def getInstanceListByID(self, instanceIds):
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     request.set_PageSize(100)
     request.set_InstanceIds(instanceIds)
     request.set_accept_format('json')
     try:
         result = self.clt.do_action_with_exception(request)
         result = json.loads(result)
         return True, result['Instances']['Instance']
     except Exception, ex:
         return False, str(ex)
Esempio n. 10
0
 def request_get_instances(self, page):
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     self.request_to_json(request)
     request.add_query_param('RegionId', 'cn-hangzhou')
     request.add_query_param('PageNumber', page)
     request.add_query_param('PageSize', settings.ALIYUN_PAGESIZE)
     try:
         response = self.clt.do_action_with_exception(request)
     except:
         return {}
     return self.get_json_results(response).get('Items').get('DBInstance')
Esempio n. 11
0
    def get_rds_list(self):

        request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
        result = self._request(request)

        instance_list = []
        for item in result['Items']['DBInstance']:
            instance_list.append(item['DBInstanceId'])

        #print json.dumps(result,sort_keys=True,indent=4, separators=(',', ': '))
        return instance_list
Esempio n. 12
0
 def aliyun_rds(self):
     clt = client.AcsClient(self.SecretId, self.SecretKey, self.RegionId)
     # 设置参数
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     request.set_accept_format('json')
     request.add_query_param('PageNumber', 1)
     request.add_query_param('PageSize', 100)
     # 发起请求
     request.add_query_param('RegionId', self.RegionId)
     response = clt.do_action(request)
     str_response = json.loads(response)
     return str_response
Esempio n. 13
0
def GetRdsList():
    RdsRequest = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    RdsRequest.set_accept_format('json')
    RdsRequest.set_DBInstanceId('rm-bp18144qkyj20731o')
    RdsInfo = json.loads(client.do_action_with_exception(RdsRequest))
    print RdsInfo
    for RdsInfoJson in RdsInfo["Items"]["DBInstance"]:
        DBInstanceIdDict = {}
        DBInstanceIdDict["{#DBINSTANCEID}"] = RdsInfoJson['DBInstanceId']
        #print DBInstanceIdDict["{#DBINSTANCEID}"]
        DBInstanceIdDict["{#InsId}"] = RdsInfoJson['InsId']
        #print DBInstanceIdDict["{#InsId}"]
        DBInstanceIdList.append(DBInstanceIdDict)
Esempio n. 14
0
 def get_db_instance(self, name=None):
     """
     返回实例具名元祖组成的列表
     :param name: 指定别名,则只返回该实例
     :return: [db_instance(name='report_readonly', id='rr-bp1se0dwk3vueq89k')]
     """
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     response = self.clt.do_action_with_exception(request)
     instance = namedtuple('db_instance', 'name id')
     return [
         instance(x['DBInstanceDescription'], x['DBInstanceId'])
         for x in json.loads(response)['Items']['DBInstance']
         if x['DBInstanceDescription'] == name or not name
     ]
Esempio n. 15
0
 def rds_list():  #定义rds_list函数,用于获取所有的rds实例ID
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     request.set_Engine('MySQL')  #请求的RDS类型
     request.set_PageSize(100)  #允许请求的RDS最大数量
     result = json.loads(clt.do_action_with_exception(request)).get(
         'Items').get('DBInstance')
     for line in result:
         names[line.get('DBInstanceId')] = line.get('DBInstanceDescription')
         alias = line.get('DBInstanceDescription')
         if line.get('ExpireTime') != '':
             expiretime = line.get('ExpireTime')
             days = DayS(expiretime)
             print "还有%s" % days.days_values() + "天到期", "实例:", line.get(
                 'DBInstanceDescription')
Esempio n. 16
0
    async def get_instances(self, region):
        """
        Get all instances

        :return: a list of all instances
        """
        client = get_client(credentials=self._credentials, region=region)
        response = await get_response(
            client=client,
            request=DescribeDBInstancesRequest.DescribeDBInstancesRequest())
        if response:
            return response['Items']['DBInstance']
        else:
            return []
Esempio n. 17
0
def GetRdsList():
    RdsRequest = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    RdsRequest.set_accept_format('json')
    # RdsInfo = clt.do_action(RdsRequest)
    RdsInfo = clt.do_action_with_exception(RdsRequest)
    for RdsInfoJson in (json.loads(RdsInfo))['Items']['DBInstance']:
        DBInstanceIdDict = {}
        try:
            DBInstanceIdDict["{#DBINSTANCEID}"] = RdsInfoJson['DBInstanceId']
            DBInstanceIdDict["{#DBINSTANCEDESCRIPTION}"] = RdsInfoJson['DBInstanceDescription']
            DBInstanceIdList.append(DBInstanceIdDict)
        except Exception, e:
            print Exception, ":", e
            print "Please check the RDS alias !Alias must not be the same as DBInstanceId!!!"
Esempio n. 18
0
def fetch_RDSs(page):
    from aliyunsdkrds.request.v20140815 import DescribeDBInstancesRequest
    request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    request.set_accept_format('json')

    request.add_query_param('RegionId', 'cn-hangzhou')
    request.add_query_param('PageNumber', page)
    request.add_query_param('PageSize', conf.ALIYUN_PAGESIZE)

    try:
        response = clt.do_action_with_exception(request)
    except:
        return {}
    data = json.loads(response.decode('utf-8'))
    return data['Items']['DBInstance']
Esempio n. 19
0
def fetch_RDSPage():
    from aliyunsdkrds.request.v20140815 import DescribeDBInstancesRequest
    request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    request.set_accept_format('json')

    request.add_query_param('RegionId', 'cn-hangzhou')
    request.add_query_param('PageSize', 1)
    request.add_query_param('PageNumber', 1)

    try:
        response = clt.do_action_with_exception(request)
    except:
        return {}
    data = json.loads(response.decode('utf-8'))
    return data['TotalRecordCount']
Esempio n. 20
0
 def getInstanceList(self, pageNumber, pageSize):
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     request.set_PageNumber(pageNumber)
     request.set_PageSize(pageSize)
     request.set_accept_format('json')
     try:
         result = self.clt.do_action_with_exception(request)
         print result
         result = json.loads(result)
         data = {
             'count': result['TotalRecordCount'],
             'results': result['Items']['DBInstance']
         }
         return True, data
     except Exception, ex:
         return False, str(ex)
Esempio n. 21
0
def fetch_MongoDBs(page):
    from aliyunsdkdds.request.v20151201 import DescribeDBInstancesRequest

    request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    request.set_accept_format('json')

    request.add_query_param('RegionId', 'cn-hangzhou')
    request.add_query_param('PageNumber', page)
    request.add_query_param('PageSize', 30)

    try:
        response = clt.do_action_with_exception(request)
    except:
        return {}
    data = json.loads(response.decode('utf-8'))
    return data['DBInstances']['DBInstance']
Esempio n. 22
0
 def get_rds(self, pageStart=0, pageSize=0):
     """
     获取rds列表
     :param pageStart:
     :param pageSize:
     :return:
     """
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     if pageStart:
         request.set_PageNumber(pageStart)
     if pageSize:
         request.set_PageSize(pageSize)  # 设置每页返回多少,默认为10条
     request.set_accept_format("json")
     result = json.loads(self.clt.do_action(request))
     print(result)
     return result
Esempio n. 23
0
 def get_DBInstance(self):
     DBInstance_dic = {}
     for regionId in self.get_DescribeRegions():
         clt = client.AcsClient(self.accesskey, self.accessSecret, regionId)
         request1 = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
         request1.set_action_name("DescribeDBInstances")
         request1.set_accept_format('json')
         try:
             result = clt.do_action(request1)
             data = json.loads(result)
             items = data['Items']['DBInstance']
             if items:
                 DBInstance_dic[regionId] = items[0]['DBInstanceId']
             else:
                 continue
         except Exception:
             pass
     return DBInstance_dic
Esempio n. 24
0
def update_Rds():
    Rds_Info = {}
    client = AcsClient(Config.configs['AliAK']['AccessKey'],
                       Config.configs['AliAK']['AccessKeySecret'], RegionId)
    request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
    request.set_PageSize(100)
    response = client.do_action_with_exception(request)
    RdsInfo = json.loads(response)

    for DBInstance in RdsInfo['Items']['DBInstance']:
        request = DescribeDBInstanceAttributeRequest.DescribeDBInstanceAttributeRequest(
        )
        request.set_DBInstanceId(DBInstance['DBInstanceId'])
        response = client.do_action_with_exception(request)
        Rds_Info[DBInstance['DBInstanceId']] = json.loads(
            response.decode('utf-8'))['Items']['DBInstanceAttribute'][0]

    conn.set('Rds_Info', json.dumps(Rds_Info))
Esempio n. 25
0
	def query_mysql(self):
		try:
			for zone in current_app.config['ALIYUN_ZONE']:
				client = AcsClient(current_app.config['ALIYUN_ACCESS_KEYID'], current_app.config['ALIYUN_ACCESS_KEY_SECRET'], zone)
				request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
				request.set_accept_format('json')
				response = json.loads(client.do_action_with_exception(request))
				self.DBid.append(response['Items']['DBInstance'])
		except Exception as e:
			raise e
		for zone in current_app.config['ALIYUN_ZONE']:
			client = AcsClient(current_app.config['ALIYUN_ACCESS_KEYID'], current_app.config['ALIYUN_ACCESS_KEY_SECRET'],zone)
			for ids in sum(self.DBid, []):
				request = DescribeDBInstanceAttributeRequest.DescribeDBInstanceAttributeRequest()
				request.set_accept_format('json')
				request.set_DBInstanceId(ids['DBInstanceId'])
				response = json.loads(client.do_action_with_exception(request))
				self.DBinfo.append(response['Items']['DBInstanceAttribute'])
			return self.DBinfo
Esempio n. 26
0
    def get_TotalPages(self, action_name):
        Total = 0
        request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
        request.set_accept_format('json')
        request.set_PageSize('10')
        result = json.loads(self.client.do_action_with_exception(request))
        TotalCount = float(result['TotalRecordCount'])
        PageSize = float(result['PageRecordCount'])

        if TotalCount > PageSize:
            try:
                # TotalCount = float(result['TotalCount'])
                # PageSize = float(result['PageSize'])
                return int(round(TotalCount / PageSize))
            except Exception as e:
                print e.message
                return Total
        else:
            return 1
Esempio n. 27
0
    def request_get_instances(self, page):
        request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
        self.request_to_json(request)
        request.add_query_param('RegionId', 'cn-hangzhou')
        request.add_query_param('PageNumber', page)
        request.add_query_param('PageSize', settings.ALIYUN_PAGESIZE)
        try:
            response = self.clt.do_action_with_exception(request)
        except:
            return {}
        return self.get_json_results(response).get('Items').get('DBInstance')



    # @staticmethod
    # def get_aliyun_models(json_results):
    #     return {
    #         'aliyun_id': json_results.get('DBInstanceId'),
    #         'name': json_results.get('DBInstanceDescription')
    #     }
 def get_rds_whitelistip_info(
     self,
     ip,
 ) -> typing.Generator:
     """
     Get WhitelistIP info of RDS Data Security.
     :param ip: IP to get info.
     :return: Dict, {"DBInstanceId": ..., }.
     """
     client = self.get_cloud_client()
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     response = client.do_action_with_exception(request)
     for instance in json.loads(
         (response.decode("utf-8")))["Items"]["DBInstance"]:
         request_sub = DescribeDBInstanceIPArrayListRequest.DescribeDBInstanceIPArrayListRequest(
         )
         request_sub.set_DBInstanceId(instance["DBInstanceId"])
         response_sub = client.do_action_with_exception(request_sub)
         data_sub = json.loads((response_sub.decode("utf-8")))
         if re.search(self.get_ip_pattern(ip), str(data_sub)):
             for config in data_sub["Items"]["DBInstanceIPArray"]:
                 if re.search(self.get_ip_pattern(ip), str(config)):
                     whitelistip_info = {
                         "DBInstanceId":
                         instance["DBInstanceId"],
                         "DBInstanceIPArrayName":
                         config["DBInstanceIPArrayName"],
                         "DBInstanceIPArrayAttribute":
                         config["DBInstanceIPArrayAttribute"],
                         "WhitelistNetworkType":
                         config["WhitelistNetworkType"],
                         "SecurityIPType":
                         config["SecurityIPType"],
                         "CheckInfo":
                         config
                     }
                     logger.info(
                         "get_rds_whitelistip_info:\n\t{whitelistip_info}".
                         format(whitelistip_info=whitelistip_info))
                     yield whitelistip_info
                     break
Esempio n. 29
0
 def get_rds_instances(self, pageSize=100):
     request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
     request.set_accept_format('json')
     attributeRequest = DescribeDBInstanceAttributeRequest.DescribeDBInstanceAttributeRequest()
     attributeRequest.set_accept_format('json')
     for clt in self.clt_conn_list:
         pageNumber = 1
         while True:
             request.set_query_params(dict(PageNumber=pageNumber, PageSize=pageSize))
             clt_result = json.loads(clt.do_action_with_exception(request), encoding='utf-8')
             region_result = clt_result['Items']['DBInstance']
             pageNumber += 1
             if len(region_result) == 0:
                 print(pageNumber, clt_result['PageRecordCount'])
                 break
             for Instance in region_result:
                 attributeRequest.add_query_param("action_name", "DescribeDBInstanceAttribute")
                 attributeRequest.add_query_param("DBInstanceId", Instance['DBInstanceId'])
                 r = json.loads(clt.do_action_with_exception(attributeRequest))
                 attr = r['Items']['DBInstanceAttribute'][0]
                 expired_time = attr.get('ExpireTime')
                 if not expired_time:
                     expired_time = None
                 yield {
                     'instance_id': attr.get('DBInstanceId'),
                     'region': attr.get('RegionId'),
                     'instance_name': attr.get('DBInstanceDescription'),
                     'network_type': attr.get('InstanceNetworkType'),
                     'engine_version': attr.get('EngineVersion'),
                     'status': attr.get('DBInstanceStatus'),
                     'expired_time': expired_time,
                     'connection_string': attr.get('ConnectionString'),
                     'connections': attr.get('MaxConnections'),
                     'cpu': attr.get('DBInstanceCPU'),
                     'memory': attr.get('DBInstanceMemory'),
                     'iops': attr.get('MaxIOPS'),
                     'storage': attr.get('DBInstanceStorage')
                 }
Esempio n. 30
0
    def list_rds(self, name_only=False, **kwargs):
        """
        获取实例列表
        https://help.aliyun.com/document_detail/26232.html?spm=a2c4g.11186623.6.1322.16ff69b2We0YoY
        :param name_only: 是否只返回name列表
        :param kwargs:
        :return:
        """
        result_list = []
        request = DescribeDBInstancesRequest.DescribeDBInstancesRequest()
        regions = self.get_regions(id_only=True)
        for region in regions:
            request.set_PageSize(100)
            request.set_PageNumber(1)
            for k, v in kwargs.items():
                request.add_query_param(k, v)
            request.add_query_param('RegionId', region)
            result = self.client.do_action(request)
            result_list.extend(result.get('Items', {}).get('DBInstance', []))

            total_count = float(result.get('TotalCount', 0))
            if not total_count:
                continue
            page_count = float(result.get('PageSize', 1))
            _p = total_count / page_count
            if _p > 1:
                for _p_num in range(2, int(_p) + 2):
                    # 防止限流
                    time.sleep(1)
                    request.set_PageNumber(_p_num)
                    result = self.client.do_action(request)
                    result_list.extend(
                        result.get('Items', {}).get('DBInstance', []))

        if name_only:
            result_list = [i['InstanceName'] for i in result_list]
        return result_list