阿里云自动提升临时带宽自动化脚本

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
import datetime,time


currentGt=4  # max add 
dev="eth0"  #set dev
devio=0     #0 out /  1 in
key=[<ccessKeyId>,<accessSecret>]  #key
ecsformat,autopay,ecsid = ['cn-shenzhen' , 'true' , 'i-wz9c913ulnzfabbtm22d']  #ecsinfo

ecsinfo=ecsformat,autopay,ecsid  
ecsidlist=[ecsid]
##############################################################    逻辑部分
def main():
  while 1==1:
    current,currentuse,Judge=getCurrentUseNetwork(key,ecsformat,ecsidlist)
    Oder = 1024
    if int(Judge) > 950 and int(Judge) <= 1000:
      date=datetime.datetime.now()
      start_time=(2019,date.strftime("%m"),date.strftime("%d"),date.strftime("%H"),date.strftime("%M"),00)
      start,stop=start_end(start_time, 4)
      aliyunpay(key,ecsinfo,start,stop,currentuse + currentGt)
      Oder=currentuse + currentGt
      time.sleep(250)
    elif int(Judge) > 1000 :
      date=datetime.datetime.now()
      start_time=(2019,date.strftime("%m"),date.strftime("%d"),date.strftime("%H"),date.strftime("%M"),00)
      start,stop=start_end(start_time, 4)
      aliyunpay(key,ecsinfo,start,stop,current)
      print current
      Oder=current
    else :
      print "use :" Judge / 1000 "%"
    breaks=0
    while 1==1:
      if Oder == 1024 :
        break
      current,currentuse,Judge=getCurrentUseNetwork(key,ecsformat,ecsidlist)
      if Oder == currentuse :
         Oder = 1024
         print Oder,currentuse
         break
      else:
         breaks+=1
         print Oder,currentuse
         time.sleep(5)
      if breaks > 20 :
        print Oder,currentuse
        exit(0)
############################################################### apiyunpay 提升固定带宽(认证信息,ecs的信息,启动时间,结束时间,提升到多少)

def aliyunpay(key,ecsinfo,startTime,endTime,NetworkMuch):
  if len(key) != 2 or len(ecsinfo) != 3 :
    print("ERROR: AutoNetWork.aliyunpay([ccessKeyId,accessSecret],[ecsformat,autopay,ecsid,network_much],start,stop)")
    exit(0)
  ccessKeyId,accessSecret=key
  ecsformat,autopay,ecsid=ecsinfo
  if autopay == "true" or autopay == "1" or autopay == "yes" or autopay == "ok" :
    autopay=1
  else :
    autopay=0
  client = AcsClient(ccessKeyId , accessSecret , ecsformat)
  request = CommonRequest()
  request.set_accept_format('json')
  request.set_domain('ecs.aliyuncs.com')
  request.set_method('POST')
  request.set_version('2014-05-26')
  request.set_action_name('ModifyInstanceNetworkSpec')
  request.add_query_param('RegionId', ecsformat)
  request.add_query_param('AutoPay', bool(autopay))
  request.add_query_param('StartTime',startTime)
  request.add_query_param('EndTime', endTime)
  request.add_query_param('InstanceId', ecsid)
  request.add_query_param('InternetMaxBandwidthOut', NetworkMuch)
  response = client.do_action(request)
  print(response)
#################################### currentNetwork 获取当前固定带宽(认证信息,服务器所在区编号,服务器列表)
def currentNetwork(key,ecsformat,ecsidlist):
  ccessKeyId,accessSecret=key
  client = AcsClient(ccessKeyId , accessSecret , ecsformat)
  request = CommonRequest()
  request.set_accept_format('json')
  request.set_domain('ecs.aliyuncs.com')
  request.set_method('POST')
  request.set_version('2014-05-26')
  request.set_action_name('DescribeInstances')
  request.add_query_param('RegionId', ecsformat)
  request.add_query_param('InstanceIds', ecsidlist)
  response = client.do_action(request)
  db=json.loads(response)
  return (db["Instances"]["Instance"])[0]["InternetMaxBandwidthOut"]
############################################# start_end 修正时间格式获取设置结束时间 参数(启动时间列表[年,月,日,时,分,秒],购买时长) 返回值(启动时间,结束时间)
def start_end(start_time, Ago):
  if len(start_time) < 6:     
    print ("ERROR:  aliyunAutoNetWork.py on function(AutoNetWork.start_end())  start_time is 'list' len()=6 ")
    print("Parameter type : AutoNetWork.start_end([ year, month , day , hour , Minute ,second ] ,Age)")
    print("Example: AutoNetWork.start_end([2018,12,30,23,59,59],Ago])")
    exit(0)
  else :
    year,month,day,hour,Minute,second=start_time
  year, month , day , hour , Minute ,second = start_time
  defaulttime=datetime.datetime(int(year), int(month) , int(day) , int(hour) , int(Minute) ,int(second), 00 ) - datetime.timedelta(hours=8)
  defaulttime=defaulttime+datetime.timedelta(minutes=3)
  startTime=defaulttime.strftime("%Y-%m-%dT%H:%MZ")
  endTime=(defaulttime + datetime.timedelta(hours=Ago)).strftime("%Y-%m-%dT%HZ")
  return startTime,endTime

#################################################get_net_data(传入设备的名称)  是在信息中读取当前的流量值 netInOut(传入要获取设备的名称) 是获取每分钟的值返回(入,出)
def get_net_data(netdev):
 with open('/proc/net/dev', 'r') as f:
  for line in f:
    if line.find(netdev) >= 0:
     receive = line.split(':')[1].split()[0]
     transmit = line.split(':')[1].split()[8]
     return float(receive),float(transmit)
def netInOut(dev):
 revc,send=get_net_data(dev)
 time.sleep(1)
 revcs,sends=get_net_data(dev)
 return (((sends - send) / 1024 / 1024 ) * 8 ) , (((revcs - revc) / 1024 / 1024) * 8  )
#########################################################获取当前状态信息 参数=> (阿里云认证[列表]服务器所在区域编号,服务器id[列表]) 返回 (1分钟内平均带宽,当前使用的带宽,带宽使用率百分比)
def getCurrentUseNetwork(key,ecsformat,ecsidlist):
  netinfo=netInOut(dev)[devio]
  i=1
  while i <= 19:
    netinfo=netinfo + netInOut(dev)[devio]
    i+=1
  current=netinfo / 20
  currentuse=currentNetwork(key,ecsformat,ecsidlist)   
  Judge = current /  currentuse
  return int((current)+ currentGt ),int(currentuse),int(float('%.3f' % Judge)  * 1000)
main()
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值