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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
利用Python的Django框架中的ORM建立查询API
Apr 20 Python
Python实现文件按照日期命名的方法
Jul 09 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
python实现简易版计算器
Jun 22 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python中如何打包用户自定义模块
Sep 23 Python
python中操作文件的模块的方法总结
Feb 04 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中文汉字验证码
2007/04/08 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
2019/03/22 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
2017/04/27 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
开源Web应用框架Django图文教程
2017/03/09 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
实习鉴定范文
2013/12/19 职场文书
会计助理岗位职责
2014/02/17 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
坎儿井导游词
2015/02/09 职场文书
摩登时代观后感
2015/06/03 职场文书
党员转正介绍人意见
2015/06/03 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
Elasticsearch 基本查询和组合查询
2022/04/19 Python