Esempio n. 1
0
def get_pfm():
    start = datetime.datetime.now()
    # logger.info(u"开始获取...{}".format(start))
    host_info_list = HostInfo.objects.filter(is_delete=False,
                                             bk_os_name__contains='linux')
    ip_list = []
    for host_info in host_info_list:
        ip_list.append({
            'ip': host_info.bk_host_innerip,
            'bk_cloud_id': host_info.bk_cloud_id
        })
    if host_info_list:
        username = host_info_list[0].last_user
        bk_biz_id = host_info_list[0].bk_biz_id
        client = get_client_by_user(username)
        script_content = '''#!/bin/bash
MEMORY=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')
DISK=$(df -h | awk '$NF=="/"{printf "%s", $5}')
CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%", $(NF-2)}')
DATE=$(date "+%Y-%m-%d %H:%M:%S")
echo -e "$DATE|$MEMORY|$DISK|$CPU"
            '''
        data = {'ip_list': ip_list, 'bk_biz_id': bk_biz_id}
        res = fast_execute_script_esb(client, username, data,
                                      base64.b64encode(script_content))
        time.sleep(5)
        if res['data']:
            params = {}
            params.update({
                'bk_biz_id': data['bk_biz_id'],
                'job_instance_id': res['data']['job_instance_id']
            })
            res = get_job_instance_log_esb(client, username, params)

            for i in range(5):
                if res['data'][0]['status'] != 3:
                    time.sleep(2)
                    res = get_job_instance_log_esb(client, username, params)
                else:
                    break

            if res['data'][0]['status'] == 3:
                # 处理性能数据
                try:
                    pfm_data = res['data'][0]['step_results'][0]['ip_logs']
                except KeyError:
                    pfm_data = []
                for item in pfm_data:
                    result = item['log_content'].split('|')
                    check_time = result[0]
                    mem = result[1]
                    disk = result[2]
                    cpu = result[3]
                    ip = item['ip']
                    host_info = HostInfo.objects.get(bk_host_innerip=ip)
                    host_pfm = HostPerformance.objects.create(
                        bk_host_innerip=host_info,
                        check_time=datetime.datetime.strptime(
                            check_time, "%Y-%m-%d %H:%M:%S"),
                        mem=mem,
                        disk=disk,
                        cpu=cpu)
Esempio n. 2
0
def get_load5(request):
    host_info_list = HostInfo.objects.filter(is_delete=False)
    ip_list = []
    if not host_info_list:
        return
    else:
        username = host_info_list[0].last_user
        bk_biz_id = host_info_list[0].bk_biz_id

    for host_info in host_info_list:
        ip_list.append({
            'ip': host_info.bk_host_innerip,
            'bk_cloud_id': host_info.bk_cloud_id
        })

    client = get_client_by_user(username)
    data = {
        'bk_biz_id': bk_biz_id,
        "bk_job_id": 1,
        "steps": [
            {
                "account": "root",
                "pause": 0,
                "is_param_sensitive": 0,
                "creator": "admin",
                "script_timeout": 1000,
                "last_modify_user": "******",
                "block_order": 1,
                "name": "查看磁盘使用情况",
                "script_content": "#!/bin/bash\n\n# 查看磁盘使用情况\n\ndf -h",
                "block_name": "查看磁盘使用情况",
                "create_time": "2019-04-08 10:10:13 +0800",
                "last_modify_time": "2019-04-08 10:10:58 +0800",
                "ip_list": ip_list,
                "step_id": 1,
                "script_id": 7,
                "script_param": "",
                "type": 1,
                "order": 1,
                "script_type": 1
            }
        ]
    }
    res = execute_job_esb(client, username, data)
    time.sleep(5)
    if res['data']:
        params = {'bk_biz_id': data['bk_biz_id'], 'job_instance_id': res['data']['job_instance_id']}
        res = get_job_instance_log_esb(client, 'admin', params)

        for i in range(5):
            if res['data'][0]['status'] != 3:
                time.sleep(2)
                res = get_job_instance_log_esb(client, 'admin', params)
            else:
                break

        if res['data'][0]['status'] == 3:
            # 处理性能数据
            try:
                for result in res['data'][0]['step_results'][0]['ip_logs']:
                    disk = result['log_content'].split('\n')

                    ip = result['ip']
                    check_time = result['start_time'].split(' +')[0]
                    host_info = HostInfo.objects.get(bk_host_innerip=ip)
                    HostDisk.objects.create(disk=json.dumps(disk),
                                            check_time=datetime.datetime.strptime(check_time, "%Y-%m-%d %H:%M:%S"),
                                            bk_host_innerip=host_info)
                    logger.info(u'写入一条磁盘数据')
            except KeyError:
                logger.error(u"找不到负载数据")
Esempio n. 3
0
def get_mem():
    host_info_list = HostInfo.objects.filter(is_delete=False)
    ip_list = []
    if not host_info_list:
        return
    else:
        username = host_info_list[0].last_user
        bk_biz_id = host_info_list[0].bk_biz_id

    for host_info in host_info_list:
        ip_list.append({
            'ip': host_info.bk_host_innerip,
            'bk_cloud_id': host_info.bk_cloud_id
        })

    client = get_client_by_user(username)
    data = {
        'bk_biz_id':
        bk_biz_id,
        "bk_job_id":
        1,
        "steps": [{
            "account": "root",
            "pause": 0,
            "is_param_sensitive": 0,
            "creator": "admin",
            "script_timeout": 1000,
            "last_modify_user": "******",
            "block_order": 1,
            "name": "查看内存状态",
            "script_content": "#!/bin/bash\n\n# 查看内存状态\n\nfree -m",
            "block_name": "查看内存状态",
            "create_time": "2019-04-08 10:08:41 +0800",
            "last_modify_time": "2019-04-08 10:08:43 +0800",
            "ip_list": ip_list,
            "step_id": 1,
            "script_id": 4,
            "script_param": "",
            "type": 1,
            "order": 1,
            "script_type": 1
        }]
    }
    res = execute_job_esb(client, username, data)
    time.sleep(5)
    if res['data']:
        params = {
            'bk_biz_id': data['bk_biz_id'],
            'job_instance_id': res['data']['job_instance_id']
        }
        res = get_job_instance_log_esb(client, 'admin', params)

        for i in range(5):
            if res['data'][0]['status'] != 3:
                time.sleep(2)
                res = get_job_instance_log_esb(client, 'admin', params)
            else:
                break

        if res['data'][0]['status'] == 3:
            # 处理性能数据
            try:
                for result in res['data'][0]['step_results'][0]['ip_logs']:
                    mem = result['log_content'].split('\n')[1].split(' ')
                    real_mem = []
                    for item in mem:
                        if item:
                            real_mem.append(item)

                    ip = result['ip']
                    check_time = result['start_time'].split(' +')[0]
                    host_info = HostInfo.objects.get(bk_host_innerip=ip)
                    HostMem.objects.create(
                        used_mem=real_mem[2],
                        free_mem=real_mem[3],
                        check_time=datetime.datetime.strptime(
                            check_time, "%Y-%m-%d %H:%M:%S"),
                        bk_host_innerip=host_info)
            except KeyError:
                logger.error(u"找不到内存数据")