mirror of https://github.com/openspug/spug
fix issues
parent
bc88c5c815
commit
cc3dd9ec31
|
@ -5,6 +5,7 @@ from django_redis import get_redis_connection
|
|||
from libs.helper import make_ali_request, make_tencent_request
|
||||
from libs.ssh import SSH, AuthenticationException
|
||||
from libs.utils import AttrDict, human_datetime
|
||||
from libs.validators import ip_validator
|
||||
from apps.host.models import HostExtend
|
||||
from apps.setting.utils import AppSetting
|
||||
from collections import defaultdict
|
||||
|
@ -12,6 +13,7 @@ from datetime import datetime, timezone
|
|||
from concurrent import futures
|
||||
import ipaddress
|
||||
import json
|
||||
import math
|
||||
import os
|
||||
|
||||
|
||||
|
@ -181,35 +183,56 @@ def fetch_tencent_instances(ak, ac, region_id, page_number=1):
|
|||
|
||||
|
||||
def fetch_host_extend(ssh):
|
||||
commands = [
|
||||
"lscpu | grep '^CPU(s)' | awk '{print $2}'",
|
||||
"free -m | awk 'NR==2{print $2}'",
|
||||
"hostname -I",
|
||||
"cat /etc/os-release | grep PRETTY_NAME | awk -F \\\" '{print $2}'",
|
||||
"fdisk -l 2> /dev/null | grep '^Disk /' | awk '{print $5}'",
|
||||
"fdisk -l 2> /dev/null | grep '^磁盘 /' | awk '{print $4}' | awk -F',' '{print $2}'"
|
||||
]
|
||||
public_ip_address = set()
|
||||
private_ip_address = set()
|
||||
response = {'disk': []}
|
||||
with ssh:
|
||||
code, out = ssh.exec_command_raw(';'.join(commands))
|
||||
if code != 0:
|
||||
raise Exception(out)
|
||||
response = {'disk': [], 'public_ip_address': [], 'private_ip_address': []}
|
||||
for index, line in enumerate(out.strip().split('\n')):
|
||||
if index == 0:
|
||||
response['cpu'] = int(line)
|
||||
elif index == 1:
|
||||
response['memory'] = round(int(line) / 1000, 1)
|
||||
elif index == 2:
|
||||
for ip in line.split():
|
||||
code, out = ssh.exec_command_raw('nproc')
|
||||
if code != 0:
|
||||
code, out = ssh.exec_command_raw("grep -c 'model name' /proc/cpuinfo")
|
||||
if code == 0:
|
||||
response['cpu'] = int(out.strip())
|
||||
|
||||
code, out = ssh.exec_command_raw("cat /etc/os-release | grep PRETTY_NAME | awk -F \\\" '{print $2}'")
|
||||
if code == 0:
|
||||
response['os_name'] = out.strip()
|
||||
|
||||
code, out = ssh.exec_command_raw('hostname -I')
|
||||
if code == 0:
|
||||
for ip in out.strip().split():
|
||||
if ipaddress.ip_address(ip).is_global:
|
||||
response['public_ip_address'].append(ip)
|
||||
public_ip_address.add(ip)
|
||||
else:
|
||||
response['private_ip_address'].append(ip)
|
||||
elif index == 3:
|
||||
response['os_name'] = line
|
||||
elif line:
|
||||
response['disk'].append(round(int(line) / 1024 / 1024 / 1024, 0))
|
||||
return response
|
||||
private_ip_address.add(ip)
|
||||
|
||||
ssh_hostname = ssh.arguments.get('hostname')
|
||||
if ip_validator(ssh_hostname):
|
||||
if ipaddress.ip_address(ssh_hostname).is_global:
|
||||
public_ip_address.add(ssh_hostname)
|
||||
else:
|
||||
private_ip_address.add(ssh_hostname)
|
||||
|
||||
code, out = ssh.exec_command_raw('lsblk -dbn -o SIZE -e 11 2> /dev/null')
|
||||
if code == 0:
|
||||
for item in out.strip().splitlines():
|
||||
item = item.strip()
|
||||
response['disk'].append(math.ceil(int(item) / 1024 / 1024 / 1024))
|
||||
|
||||
code, out = ssh.exec_command_raw("dmidecode -t 17 | grep -E 'Size: [0-9]+' | awk '{s+=$2} END {print s,$3}'")
|
||||
if code == 0:
|
||||
size, unit = out.strip().split()
|
||||
if unit == 'GB':
|
||||
response['memory'] = size
|
||||
else:
|
||||
response['memory'] = round(int(size) / 1024, 0)
|
||||
else:
|
||||
code, out = ssh.exec_command_raw("free -m | awk 'NR==2{print $2}'")
|
||||
if code == 0:
|
||||
response['memory'] = math.ceil(int(out) / 1024)
|
||||
|
||||
response['public_ip_address'] = list(public_ip_address)
|
||||
response['private_ip_address'] = list(private_ip_address)
|
||||
return response
|
||||
|
||||
|
||||
def batch_sync_host(token, hosts, password):
|
||||
|
|
Loading…
Reference in New Issue