Python3编程实现获取阿里云ECS实例及监控的方法


Posted in Python onAugust 18, 2017

本文实例讲述了Python3编程实现获取阿里云ECS实例及监控的方法。分享给大家供大家参考,具体如下:

#!/usr/bin/env python3.5
# -*- coding:utf8 -*-
try: import httplib
except ImportError:
  import http.client as httplib
import sys,datetime
import urllib
import urllib.request
import urllib.error
import urllib.parse
import time
import json
import base64
import hmac,ssl
import uuid
from hashlib import sha1
# 解决 访问ssl网站证书的问题
try:
  _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
  # Legacy Python that doesn't verify HTTPS certificates by default
  pass
else:
  # Handle target environment that doesn't support HTTPS verification
  ssl._create_default_https_context = _create_unverified_https_context
class 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 instanlist
if __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程序设计有所帮助。

Python 相关文章推荐
Python import自定义模块方法
Feb 12 Python
Python找出9个连续的空闲端口
Feb 01 Python
python下如何查询CS反恐精英的服务器信息
Jan 17 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
Python实现 版本号对比功能的实例代码
Apr 18 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
如何基于Python批量下载音乐
Nov 11 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
Django REST Swagger实现指定api参数
Jul 07 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 #Python
Python绑定方法与非绑定方法详解
Aug 18 #Python
python字典DICT类型合并详解
Aug 17 #Python
Python时间的精准正则匹配方法分析
Aug 17 #Python
Python实现运行其他程序的四种方式实例分析
Aug 17 #Python
python进阶_浅谈面向对象进阶
Aug 17 #Python
Python 比较两个数组的元素的异同方法
Aug 17 #Python
You might like
最简单的PHP程序--记数器
2006/10/09 PHP
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
详解python3百度指数抓取实例
2016/12/12 Python
Django uwsgi Nginx 的生产环境部署详解
2019/02/02 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
解决python3输入的坑——input()
2020/12/05 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
小学生考试获奖感言
2014/01/30 职场文书
投资合作协议书
2014/04/17 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
民间借贷协议书范本
2014/10/01 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
2019思想汇报范文
2019/05/21 职场文书
导游词之江西赣州
2019/10/15 职场文书