国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python3編程實現獲取阿里云ECS實例及監控的方法

2019-11-25 15:55:36
字體:
來源:轉載
供稿:網友

本文實例講述了Python3編程實現獲取阿里云ECS實例及監控的方法。分享給大家供大家參考,具體如下:

#!/usr/bin/env python3.5# -*- coding:utf8 -*-try: import httplibexcept ImportError:  import http.client as httplibimport sys,datetimeimport urllibimport urllib.requestimport urllib.errorimport urllib.parseimport timeimport jsonimport base64import hmac,sslimport uuidfrom hashlib import sha1# 解決 訪問ssl網站證書的問題try:  _create_unverified_https_context = ssl._create_unverified_contextexcept AttributeError:  # Legacy Python that doesn't verify HTTPS certificates by default  passelse:  # Handle target environment that doesn't support HTTPS verification  ssl._create_default_https_context = _create_unverified_https_contextclass aliyunclient:  def __init__(self):    self.access_id = '阿里云access_id'    self.access_secret ='阿里云secret'    #監控獲取ECS URL    self.url = 'https://ecs.aliyuncs.com'  # #簽名  def sign(self,accessKeySecret, parameters):    sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0])    canonicalizedQueryString = ''    for (k,v) in sortedParameters:      canonicalizedQueryString += '&' + self.percent_encode(k) + '=' + self.percent_encode(v)    stringToSign = 'GET&%2F&' + self.percent_encode(canonicalizedQueryString[1:]) # 使用get請求方法    bs = accessKeySecret +'&'    bs = bytes(bs,encoding='utf8')    stringToSign = bytes(stringToSign,encoding='utf8')    h = hmac.new(bs, stringToSign, sha1)    # 進行編碼    signature = base64.b64encode(h.digest()).strip()    return signature  def percent_encode(self,encodeStr):    encodeStr = str(encodeStr)    res = urllib.request.quote(encodeStr)    res = res.replace('+', '%20')    res = res.replace('*', '%2A')    res = res.replace('%7E', '~')    return res  # 構建除共公參數外的所有URL  def make_url(self,params):    timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())    parameters = {      'Format' : 'JSON',      'Version' : '2014-05-26',      'AccessKeyId' : self.access_id,      'SignatureVersion' : '1.0',      'SignatureMethod' : 'HMAC-SHA1',      'SignatureNonce' : str(uuid.uuid1()),      'TimeStamp' : timestamp,    }    for key in params.keys():      parameters[key] = params[key]    signature = self.sign(self.access_secret,parameters)    parameters['Signature'] = signature    url = self.url + "/?" + urllib.parse.urlencode(parameters)    return url  def do_action(self,params):    url = self.make_url(params)    # print(url)    request = urllib.request.Request(url)    try:      conn = urllib.request.urlopen(request)      response = conn.read().decode()    except urllib.error.HTTPError as e:      print(e.read().strip())      raise SystemExit(e)    try:      res = json.loads(response)    except ValueError as e:      raise SystemExit(e)    return res# 繼承原始類class client(aliyunclient):  def __init__(self,InstanceIds):    aliyunclient.__init__(self)    self.InstanceIds = InstanceIds    # ECS 區域    self.RegionId = "cn-shanghai"  # 時間UTC轉換  def timestrip(self):    UTCC = datetime.datetime.utcnow()    utcbefore5 = UTCC - datetime.timedelta(minutes =5)    Endtime = datetime.datetime.strftime(UTCC, "%Y-%m-%dT%H:%M:%SZ")    StartTime = datetime.datetime.strftime(utcbefore5, "%Y-%m-%dT%H:%M:%SZ")    return (StartTime,Endtime)  def DescribeInstanceMonitorData(self):    '''    構造實例監控序列函數    '''    self.tt = self.timestrip()    action_dict ={"StartTime":self.tt[0],"Endtime":self.tt[1],"Action":"DescribeInstanceMonitorData","RegionId":self.RegionId,"InstanceId":self.InstanceId}    return action_dict  def DescribeInstances(self):    '''    構建實例配置查詢函數    '''    action_dict = {"Action":"DescribeInstances","RegionId":self.RegionId,"InstanceIds":self.InstanceIds}    return action_dict  def alis_main(self):    res = self.do_action(self.DescribeInstances())    listarry = len(res["Instances"]["Instance"])    a = {}    cpu = 0    InternetBandwidth = 0    instanlist = {"data":a}    # 調用所有符合條件的實例配置數據    for i in range(0,listarry):      self.InstanceId = res["Instances"]["Instance"][i]["InstanceId"]      BandwidthOUT = res["Instances"]["Instance"][i]["InternetMaxBandwidthOut"]      # 調用計算該實例的監控數據      monitordata = self.do_action(self.DescribeInstanceMonitorData())      data = monitordata["MonitorData"]["InstanceMonitorData"]      for i in range(0,len(data)):        cpu += data[i]["CPU"]        InternetBandwidth += data[i]["InternetBandwidth"]      # 對該實例數據生成字典      arry = {"BandwidthOUT":BandwidthOUT,"cpu":cpu/len(data),"InternetBandwidth":InternetBandwidth/len(data)}      # 將新數據重構到原字典數據      a.setdefault(self.InstanceId,arry)    return instanlistif __name__ == "__main__":  # 傳實例ID 列表進去  clt= client(["i-11cy8adf2x"])  res = clt.alis_main()  print(res)# 獲取的結果如下:{'data': {'i-11cy8adf2x': {'InternetBandwidth': 0.0, 'cpu': 4.0, 'BandwidthOUT': 4}}}# 解釋 獲取所有實例的 當前配置的帶寬值 當前占用的CPU% 當前占用的出口帶寬 kbps

更多關于Python相關內容可查看本站專題:《Python Socket編程技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大洼县| 瑞金市| 阿城市| 全州县| 清苑县| 大名县| 新干县| 荔浦县| 兴宁市| 措勤县| 盐源县| 合江县| 泸定县| 乌兰察布市| 新津县| 宁晋县| 华亭县| 湟中县| 咸丰县| 东海县| 鸡西市| 乌苏市| 竹溪县| 林西县| 岐山县| 延庆县| 莱西市| 绥阳县| 渝中区| 海晏县| 蒲江县| 嘉鱼县| 建湖县| 时尚| 邢台市| 竹山县| 乐至县| 琼中| 铅山县| 富源县| 江口县|