#!/usr/bin/env python
#coding=utf-8
import json
import os
import xlwt
import math
from datetime import datetime, timedelta
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
# from aliyunsdkcms.request.v20190101.DescribeMonitoringAgentHostsRequest import DescribeMonitoringAgentHostsRequest
# from aliyunsdkcms.request.v20190101.DescribeMetricDataRequest import DescribeMetricDataRequest
# from aliyunsdkcms.request.v20190101.DescribeMetricLastRequest import DescribeMetricLastRequest
def data_write(filepath, datas):
f = xlwt.Workbook()
sheet1 = f.add_sheet(u'InstanceEcs', cell_overwrite_ok=True)
line_01 = ['HostName', 'InstanceId', 'OperatingSystem', 'Region', 'CreateTime', 'OSType', 'Status',
'Cpu', 'Memory', 'InstanceChargeType', 'PrimaryIpAddress', 'MacAddress', 'Administrator','Project']
for x in range(len(line_01)):
sheet1.write(0, x, line_01[x], setStyle("宋体"))
i = 1 # i 值为excel从第几行开始写
for data in datas:
for j in range(len(data)):
sheet1.write(i, j, data[j])
i = i + 1
f.save(filepath)
def setStyle(name):
style = xlwt.XFStyle()
font = xlwt.Font()
pattern = xlwt.Pattern()
alignment = xlwt.Alignment()
font.colour_index = 1 # 字体颜色
font.name = name # 字体
font.bold = True # 加粗
alignment.horz = 2 # 对齐方式,居中
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 23 # 背景颜色
style.alignment = alignment
style.pattern = pattern
style.font = font
return style
def get_start_timestamp(time):
start_datetime = datetime.now() - timedelta(days=time)
start_timestamp = int(start_datetime.timestamp()*1000)
return start_timestamp
def get_connect_with_ecs():
Regions = ['cn-shenzhen', 'cn-hongkong', 'ap-south-1', 'eu-central-1']
for region in Regions:
client = AcsClient('xxx', 'xxx', region)
# return client
GetInstanceForEcs(client) # 调用ecs获取函数
def GetInstanceForEcs(client):
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_PageSize(100)
# request.set_PageNumber(2)
request.set_protocol_type('https')
request.set_accept_format('json')
response = client.do_action_with_exception(request)
data = (str(response, encoding='utf-8'))
# print(data)
data_dict = json.loads(data)
print(data_dict.get('TotalCount')) # 该区域总数
pagenum = math.ceil(int(data_dict.get('TotalCount')) / 100) # 获取页码数
for page in range(1, pagenum + 1):
request.set_PageNumber(page)
response = client.do_action_with_exception(request)
page_data = (str(response, encoding='utf-8'))
page_data_dict = json.loads(page_data)
InstancesDataClean(page_data_dict) # 调用instance 数据清洗
def InstancesDataClean(data):
global ecs_lists
instances = data.get('Instances').get('Instance')
for ecs in instances:
ecs_list = []
ecs_list.append(ecs.get('HostName')) # 主机名
ecs_list.append(ecs.get('InstanceId')) # instanceid
ecs_list.append(ecs.get('OSNameEn')) # "CentOS 7.5 64 bit"
ecs_list.append(ecs.get('RegionId')) # 区域
ecs_list.append(ecs.get('CreationTime')) # 创建时间
ecs_list.append(ecs.get('OSType'))
ecs_list.append(ecs.get('Status'))
ecs_list.append(ecs.get('Cpu'))
ecs_list.append(ecs.get('Memory'))
ecs_list.append(ecs.get('InstanceChargeType')) # 付费类型
for net in ecs.get('NetworkInterfaces').get('NetworkInterface'):
ecs_list.append(net.get('PrimaryIpAddress'))
ecs_list.append(net.get('MacAddress'))
if ecs.get('Tags') is not None:
for tag in ecs.get('Tags').get('Tag'):
if tag.get('TagKey') == "负责人":
ecs_list.append(tag.get('TagValue')) # 负责人
elif tag.get('TagKey') == "系统":
ecs_list.append(tag.get('TagValue')) # 项目名
# print(ecs_list)
ecs_lists.append(ecs_list)
# return ecs_lists
if __name__ == '__main__':
try:
# base_dir = os.path.dirname(os.path.abspath(__file__))
html_dir = "/var/www/html/prod/Alicloudecs"
finall_file = os.path.join(html_dir, "%s.xlsx" % (datetime.now().strftime("%Y-%m-%d")))
ecs_lists = []
get_connect_with_ecs()
data_write(finall_file, ecs_lists)
except ServerException as e:
print(e)
except ClientException as e:
print(e)