예제 #1
0
def search_host(request):
    client = get_client_by_request(request)
    param = json.loads(request.body)
    if param.get('ip'):
        param['ip'] = param['ip'].split('\n')

    result = CcApiAdapter.search_host(client, **param)
    monitor_list = MonitorHost.objects.all()
    result_list = []
    if result['result']:
        for host in result['data']['info']:
            result_list.append({
                'ip':
                host['host']['bk_host_innerip'],
                'os_name':
                host['host']['bk_os_name'],
                'host_name':
                host['host']['bk_host_name'],
                'bk_cloud_id':
                host['host']['bk_cloud_id'][0]['id'],
                'bk_cloud_name':
                host['host']['bk_cloud_id'][0]['bk_inst_name'],
                'bk_biz_id':
                host['biz'][0]['bk_biz_id'],
                'is_monitor':
                host['host']['bk_host_innerip']
                in [item.ip for item in monitor_list]
            })

    return my_render_json(result_list)
예제 #2
0
def get_file_data(request):
    id = request.GET.get('id')
    if id:
        client = get_client_by_request(request)
        instance = MonitorHost.objects.get(id=id)
        execute_param = {
            'bk_biz_id': instance.bk_biz_id,
            'ip_list': [{
                'ip': instance.ip,
                'bk_cloud_id': instance.bk_cloud_id,
            }],
            'job_id': 3,
        }
        is_success, log_dict = execute_job_and_get_log(client, **execute_param)
        if not is_success:
            return render_json({'result': False, 'message': '查询执行日志失败'})

        result_list = []
        key_list = ['file_sys', 'total', 'use', 'no_use', 'syl', 'gzd']
        key = host_key(instance.ip, instance.bk_cloud_id)
        rows = log_dict[key]['log_content'].split('\n')[1:]
        for row in rows:
            row_data_list = row.split()
            row_data = {}
            for i in xrange(len(key_list)):
                row_data[key_list[i]] = row_data_list[i]

            result_list.append(row_data)

        return my_render_json(result_list)
예제 #3
0
def list_host(request):
    # param = request.GET
    result_list = []
    for item in MonitorHost.objects.all():
        result_list.append(model_to_dict(item))

    return my_render_json(result_list)
예제 #4
0
def search_sys_data(request):
    client = get_client_by_request(request)
    param = json.loads(request.body)
    script_content = '''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"'''
    is_success, log_dict = execute_script_and_get_log(client,
                                                      param['bk_biz_id'],
                                                      param['ip_list'],
                                                      script_content)
    if is_success:
        log_info = {}
        for log in log_dict.values():
            log_info = log

        metrics = log_info['log_content'].split('|')
        return my_render_json({
            'mem': metrics[1][:-1],
            'disk': metrics[2][:-1],
            'cpu': metrics[3][:-1],
        })

    else:
        return render_json({'reuslt': False, 'message': '查询失败'})
예제 #5
0
def execute_job(request):
    # 存记录到表里
    # 执行job
    client = get_client_by_request(request)
    param = json.loads(request.body)
    hosts = param.pop('hosts')
    ip_list = [{
        'ip': h['bk_host_innerip'],
        'bk_cloud_id': h['bk_cloud_id']
    } for h in hosts]
    param['ip_list'] = ip_list
    execute_job_result = JobApiAdapter.execute_job(client, **param)
    if not execute_job_result['result']:
        return render_json({
            'result': False,
            'message': execute_job_result['message']
        })

    job_record = {
        'bk_biz_id': param['bk_biz_id'],
        'job_id': param['bk_job_id'],
        'job_instance_id': execute_job_result['data']['job_instance_id'],
        'ips': ','.join([h['ip'] for h in ip_list]),
        'create_user': request.user.username,
        'update_user': request.user.username,
    }
    JobRecord.objects.create(**job_record)

    return my_render_json()
예제 #6
0
def get_mem_data(request):
    id = request.GET.get('id')
    if id:
        client = get_client_by_request(request)
        instance = MonitorHost.objects.get(id=id)
        execute_param = {
            'bk_biz_id': instance.bk_biz_id,
            'ip_list': [{
                'ip': instance.ip,
                'bk_cloud_id': instance.bk_cloud_id,
            }],
            'job_id': 2,
        }
        is_success, log_dict = execute_job_and_get_log(client, **execute_param)
        if not is_success:
            return render_json({'result': False, 'message': '查询执行日志失败'})

        key = host_key(instance.ip, instance.bk_cloud_id)
        rows = log_dict[key]['log_content'].split('\n')
        data = rows[1][4:]
        mem_nums = data.split()
        total, use = float(mem_nums[0]), float(mem_nums[1])
        not_use = total - use
        return my_render_json({
            'title':
            '',
            'series': [{
                'value': use,
                'name': '使用'
            }, {
                'value': not_use,
                'name': '剩余'
            }]
        })
예제 #7
0
def get_estand_data(request):
    id = int(request.GET.get('id'))
    param = request.GET
    start_time = param['startTime']
    end_time = param['endTime']
    item = MonitorHost.objects.get(id=id)
    t = datetime.datetime.now() + datetime.timedelta(hours=-1)
    performance_data = HostLoadData.objects.filter(host=item,
                                                   create_time__gte=t)
    xAxis = []
    loads = []

    for data in performance_data:
        xAxis.append(str(data.create_time))
        loads.append(data.load)

    return my_render_json({
        "xAxis":
        xAxis,
        "series": [{
            "name": "load",
            "type": "line",
            "data": loads
        }]
    })
예제 #8
0
def get_monitor_host_list(request):
    ip = request.GET.get('ip', '')
    if ip:
        host_list = MonitorHost.objects.filter(ip=request.GET.get('ip', ''))
    else:
        host_list = MonitorHost.objects.all()

    result_list = []
    for item in host_list:
        result_list.append(model_to_dict(item))

    return my_render_json(result_list)
예제 #9
0
def remove_monitor(request):
    param = json.loads(request.body)
    host = {
        'ip': param['ip'],
        'bk_cloud_id': param['bk_cloud_id'],
        'bk_biz_id': param['bk_biz_id'],
    }
    try:
        instance = MonitorHost.objects.get(**host)
    except MonitorHost.DoesNotExist:
        pass
    else:
        instance.is_deleted = True
        instance.save()

    return my_render_json()
예제 #10
0
def add_monitor(request):
    param = json.loads(request.body)
    host = {
        'ip': param['ip'],
        'bk_cloud_id': param['bk_cloud_id'],
        'bk_biz_id': param['bk_biz_id'],
    }
    try:
        MonitorHost.objects.get(is_deleted=False, **host)
    except MonitorHost.DoesNotExist:
        host.update({
            'create_user': request.user.username,
            'update_user': request.user.username
        })
        MonitorHost.objects.create(**host)

    return my_render_json()
예제 #11
0
def search_record(request):
    param = request.GET
    record_list = JobRecord.objects.filter(bk_biz_id=param['bk_biz_id'])
    if param.get('ip'):
        record_list = record_list.filter(ips__contains=param['ip'])

    result_list = []
    for item in record_list:
        item_dict = model_to_dict(item)
        item_dict['status'] = item.get_status_display()
        item_dict['create_time'] = str(item.create_time)
        if item.log_content:
            item_dict['log_content'] = json.loads(item.log_content)
        else:
            item_dict['log_content'] = ''

        result_list.append(item_dict)

    return my_render_json(result_list)
예제 #12
0
def render_chart(request):
    param = request.GET
    try:
        instance = MonitorHost.objects.get(id=param['id'])
    except (MonitorHost.DoesNotExist,
            MonitorHost.MultipleObjectsReturned) as e:
        return render_json({'result': False, 'message': '该主机数据异常'})

    t = datetime.datetime.now() + datetime.timedelta(hours=-1)
    data_list = HostData.objects.filter(host=instance, create_time__gte=t)
    xAxis = []
    cpu_series = {'name': 'cpu', 'type': 'line', 'data': []}
    mem_series = {'name': 'mem', 'type': 'line', 'data': []}
    disk_series = {'name': 'disk', 'type': 'line', 'data': []}
    for data in data_list:
        xAxis.append(str(data.create_time))
        cpu_series['data'].append(float(data.cpu))
        mem_series['data'].append(float(data.mem))
        disk_series['data'].append(float(data.disk))

    return my_render_json({
        'xAxis': xAxis,
        'series': [cpu_series, mem_series, disk_series]
    })
예제 #13
0
def delete_monitor_host(request):
    param = json.loads(request.body)
    obj = MonitorHost.objects.get(**param)
    obj.delete()
    return my_render_json()
예제 #14
0
def modify_description(request):
    param = json.loads(request.body)
    MonitorHost.objects.filter(id=param['id']).update(
        update_user=request.user.username, description=param['description'])
    return my_render_json()