Esempio n. 1
0
def get_client_name(request):
    utils = request.POST.get('utils', '')

    try:
        utils = int(utils)
        utils_manage = UtilsManage.objects.get(id=utils)
    except:
        return JsonResponse({
            "ret": 0,
            "data": "Commvault工具未配置。",
        })
    else:
        _, sqlserver_credit = get_credit_info(utils_manage.content)
        try:
            dm = SQLApi.CVApi(sqlserver_credit)
            clientname_list = dm.get_clients_name()

        except Exception as e:
            print(e)
            return JsonResponse({
                "ret": 0,
                "data": "获取客户端基础信息失败。",
            })
        else:
            return JsonResponse({
                "ret": 1,
                "data": clientname_list,
            })
Esempio n. 2
0
def get_backup_status(request):
    whole_list = []
    utils_manage_id = request.POST.get('utils_manage_id', '')

    try:
        utils_manage_id = int(utils_manage_id)
        utils_manage = UtilsManage.objects.get(id=utils_manage_id)
    except:
        return JsonResponse({
            "ret": 0,
            "data": "Commvault工具未配置。",
        })
    else:
        _, sqlserver_credit = get_credit_info(utils_manage.content)
        try:
            dm = SQLApi.CVApi(sqlserver_credit)
            whole_list = dm.get_backup_status()

            for num, wl in enumerate(whole_list):
                clientname_rowspan = get_rowspan(whole_list,
                                                 clientname=wl['clientname'])
                idataagent_rowspan = get_rowspan(whole_list,
                                                 clientname=wl['clientname'],
                                                 idataagent=wl['idataagent'])
                type_rowspan = get_rowspan(whole_list,
                                           clientname=wl['clientname'],
                                           idataagent=wl['idataagent'],
                                           type=wl['type'])
                # 时间
                try:
                    whole_list[num][
                        "startdate"] = "{:%Y-%m-%d %H:%M:%S}".format(
                            whole_list[num]["startdate"])
                except Exception as e:
                    whole_list[num]["startdate"] = ""

                whole_list[num]['clientname_rowspan'] = clientname_rowspan
                whole_list[num]['idataagent_rowspan'] = idataagent_rowspan
                whole_list[num]['type_rowspan'] = type_rowspan

            dm.close()
        except Exception as e:
            return JsonResponse({
                "ret": 0,
                "data": "获取备份状态信息失败。",
            })
        return JsonResponse({
            "ret": 1,
            "data": whole_list,
        })
Esempio n. 3
0
def get_backup_content(request):
    utils_manage_id = request.POST.get('utils_manage_id', '')

    try:
        utils_manage_id = int(utils_manage_id)
        utils_manage = UtilsManage.objects.get(id=utils_manage_id)
    except:
        return JsonResponse({
            "ret": 0,
            "data": "Commvault工具未配置。",
        })
    else:
        _, sqlserver_credit = get_credit_info(utils_manage.content)

        whole_list = []
        try:
            dm = SQLApi.CVApi(sqlserver_credit)
            whole_list = dm.get_backup_content()

            for num, wl in enumerate(whole_list):
                clientname_rowspan = get_rowspan(whole_list,
                                                 clientname=wl['clientname'])
                idataagent_rowspan = get_rowspan(whole_list,
                                                 clientname=wl['clientname'],
                                                 idataagent=wl['idataagent'])
                type_rowspan = get_rowspan(whole_list,
                                           clientname=wl['clientname'],
                                           idataagent=wl['idataagent'],
                                           type=wl['type'])
                subclient_rowspan = get_rowspan(whole_list,
                                                clientname=wl['clientname'],
                                                idataagent=wl['idataagent'],
                                                type=wl['type'],
                                                subclient=wl['subclient'])
                whole_list[num]['clientname_rowspan'] = clientname_rowspan
                whole_list[num]['idataagent_rowspan'] = idataagent_rowspan
                whole_list[num]['type_rowspan'] = type_rowspan
                whole_list[num]['subclient_rowspan'] = subclient_rowspan

        except Exception as e:
            print(e)
            return JsonResponse({
                "ret": 0,
                "data": "获取存储策略信息失败。",
            })
        else:
            return JsonResponse({
                "ret": 1,
                "data": whole_list,
            })
Esempio n. 4
0
def get_dashboard(request):
    util = request.POST.get('util', '')
    startdate = (datetime.datetime.now() -
                 datetime.timedelta(hours=24)).strftime("%Y-%m-%d")
    enddate = (datetime.datetime.now()).strftime("%Y-%m-%d")

    clientid = ''
    jobstatus = ''
    try:
        util = int(util)
    except:
        return JsonResponse({
            "ret": 0,
            "data": [],
        })
    # 24小时作业显示成功,执行中,失败状态的个数
    error_job_list = []
    show_job_status_num = ''
    util_manages = UtilsManage.objects.exclude(state='9').filter(id=util)
    if len(util_manages) > 0:
        util = util_manages[0]
        if util.util_type.upper() == 'COMMVAULT':
            commvault_credit, sqlserver_credit = get_credit_info(util.content)

            try:
                dm = SQLApi.CVApi(sqlserver_credit)
                # 24小时作业
                _, show_job_status_num = dm.get_cv_joblist(startdate=startdate,
                                                           enddate=enddate,
                                                           clientid=clientid,
                                                           jobstatus=jobstatus)

                # 异常事件
                job_list = dm.display_error_job_list(startdate=startdate,
                                                     enddate=enddate,
                                                     clientid=clientid)
                error_job_list = job_list[0:50]
            except Exception as e:
                print(e)
                return JsonResponse({
                    "ret": 0,
                    "data": "获取信息失败。",
                })
    return JsonResponse({
        "error_job_list": error_job_list,
        "show_job_status_num": show_job_status_num,
    })
Esempio n. 5
0
def oraclerecoverydata(request):
    if request.user.is_authenticated():
        origin_id = request.GET.get('origin_id', '')
        result = []
        try:
            origin_id = int(origin_id)
            origin = Origin.objects.get(id=origin_id)
            utils_manage = origin.utils
            _, sqlserver_credit = get_credit_info(utils_manage.content)
            dm = SQLApi.CVApi(sqlserver_credit)
            result = dm.get_oracle_backup_job_list(origin.client_name)
            dm.close()
        except Exception as e:
            print(e)

        return JsonResponse({"data": result})
    else:
        return HttpResponseRedirect("/login")
Esempio n. 6
0
def get_frameworkstate(request):
    util = request.POST.get('util', '')
    try:
        util = int(util)
    except:
        raise Http404()
    state = 0
    util_manages = UtilsManage.objects.exclude(state='9').filter(id=util)
    if len(util_manages) > 0:
        util = util_manages[0]
        if util.util_type.upper() == 'COMMVAULT':
            commvault_credit, sqlserver_credit = get_credit_info(util.content)
            # 先判断网络
            netresult = ping(commvault_credit["webaddr"])
            if netresult is not None:
                # 网络正常时取接口信息
                cvToken = CV_RestApi_Token()
                commvault_credit["token"] = ""
                commvault_credit["lastlogin"] = 0
                cvToken.login(commvault_credit)
                if not cvToken.isLogin:
                    state = 1
                # 网络正常时取数据库信息
                dm = SQLApi.CVApi(sqlserver_credit)
                if dm.isconnected() is not None:
                    # 数据库正常时取ma信息
                    ma_info = dm.get_ma_info()
                    for ma in ma_info:
                        netresult = ping(ma["InterfaceName"])
                        if netresult is None:
                            state = 1
                    for ma in ma_info:
                        if ma["Offline"] == 0:
                            break
                        else:
                            state = 2
            else:
                state = 2
    return JsonResponse({
        "ret": 1,
        "data": state,
    })
Esempio n. 7
0
def get_top5_app_capacity(request):
    util = request.POST.get('util', '')
    top5_app_list = []
    try:
        util = int(util)
        utils_manage = UtilsManage.objects.get(id=util)
    except:
        return JsonResponse({
            "ret": 0,
            "data": "Commvault工具未配置。",
        })
    else:
        _, sqlserver_credit = get_credit_info(utils_manage.content)

        try:
            dm = SQLApi.CVApi(sqlserver_credit)
            ret = dm.get_backup_content()
        except:
            pass
        else:
            # 客户端相同的应用程序大小相加
            client_name = ""
            for r in ret:
                if r["clientname"] == client_name:
                    continue
                app_capacity = 0
                client_name = r["clientname"]

                for ir in ret:
                    if client_name == ir["clientname"]:
                        app_capacity += ir["numbytesuncomp"]
                top5_app_list.append({
                    "client_name":
                    client_name,
                    "app_capacity":
                    round(app_capacity / 1024 / 1024 / 1024, 2)
                })

                # str(round(int(pfu[0].AllocatedBaseSize)/1024,2))+'GB'
                client_name = r["clientname"]
    top5_app_list.sort(key=lambda e: e['app_capacity'], reverse=True)
    return JsonResponse({"data": str(top5_app_list)})
Esempio n. 8
0
def get_instance_list(um):
    # 解析出账户信息
    _, sqlserver_credit = get_credit_info(um.content)

    #############################################
    # clientid, clientname, agent, instance, os #
    #############################################
    dm = SQLApi.CVApi(sqlserver_credit)

    instance_data = dm.get_all_instance()

    dm.close()
    instance_list = []
    for od in instance_data:
        instance_list.append({
            "clientid": od["clientid"],
            "clientname": od["clientname"],
            "agent": od["agent"],
            "instance": od["instance"],
        })
    return {'utils_manage': um.id, 'instance_list': instance_list}
Esempio n. 9
0
def get_display_error_job(request):
    util = request.GET.get('util', '')
    startdate = request.GET.get('startdate', '')
    enddate = request.GET.get('enddate', '')
    clientid = request.GET.get('clientid', '')

    try:
        clientid = int(clientid)
    except:
        clientid = ""

    try:
        util = int(util)
    except:
        return JsonResponse({
            "ret": 0,
            "data": [],
        })
    job_list = []
    util_manages = UtilsManage.objects.exclude(state='9').filter(id=util)
    if len(util_manages) > 0:
        util = util_manages[0]
        if util.util_type.upper() == 'COMMVAULT':
            commvault_credit, sqlserver_credit = get_credit_info(util.content)

            try:
                dm = SQLApi.CVApi(sqlserver_credit)
                job_list = dm.display_error_job_list(startdate=startdate,
                                                     enddate=enddate,
                                                     clientid=clientid)

            except Exception as e:
                print(e)
                return JsonResponse({
                    "ret": 0,
                    "data": "获取信息失败。",
                })

    return JsonResponse({"data": job_list})
Esempio n. 10
0
def get_client_info(request):
    utils_manage_id = request.POST.get('utils_manage_id', '')

    try:
        utils_manage_id = int(utils_manage_id)
        utils_manage = UtilsManage.objects.get(id=utils_manage_id)
    except:
        return JsonResponse({
            "ret": 0,
            "data": "Commvault工具未配置。",
        })
    else:
        _, sqlserver_credit = get_credit_info(utils_manage.content)
        try:
            dm = SQLApi.CVApi(sqlserver_credit)
            whole_list = dm.get_clients_info()
            dm.close()
            for client in whole_list:
                client["net"] = "正常"
                # for i in range(4):
                #     netresult = os.system(u'ping -n 1 ' + client["network_interface"])
                #     if netresult == 0:
                #         client["net"] = "正常"
                #         break;
                # else:
                #     client["net"] = "中断"

        except Exception as e:
            print(e)
            return JsonResponse({
                "ret": 0,
                "data": "获取客户端基础信息失败。",
            })
        else:
            return JsonResponse({
                "ret": 1,
                "data": whole_list,
            })
Esempio n. 11
0
def dooraclerecovery(request):
    if request.user.is_authenticated():
        sourceClient = request.POST.get('sourceClient', '')
        destClient = request.POST.get('destClient', '')
        restoreTime = request.POST.get('restoreTime', '')
        browseJobId = request.POST.get('browseJobId', '')
        agent = request.POST.get('agent', '')
        data_path = request.POST.get('data_path', '')
        copy_priority = request.POST.get('copy_priority', '')

        try:
            copy_priority = int(copy_priority)
        except:
            pass

        data_sp = request.POST.get('data_sp', '')

        #################################
        # sourceClient>> instance_name  #
        #################################
        instance = ""
        try:
            cur_origin = Origin.objects.exclude(state="9").get(
                client_name=sourceClient)
        except Origin.DoesNotExist as e:
            return HttpResponse("恢复任务启动失败, 源客户端不存在。")
        else:
            oracle_info = json.loads(cur_origin.info)

            if oracle_info:
                try:
                    instance = oracle_info["instance"]
                except:
                    pass
            if not instance:
                return HttpResponse("恢复任务启动失败, 数据库实例不存在。")

            utils_content = cur_origin.utils.content if cur_origin.utils else ""
            commvault_credit, sqlserver_credit = get_credit_info(utils_content)

            # restoreTime对应curSCN号
            dm = SQLApi.CVApi(sqlserver_credit)
            oraclecopys = dm.get_oracle_backup_job_list(sourceClient)
            # print("> %s" % restoreTime)
            curSCN = ""
            if restoreTime:
                for i in oraclecopys:
                    if i["subclient"] == "default" and i[
                            'LastTime'] == restoreTime:
                        # print('>>>>>1')
                        print(i['LastTime'])
                        curSCN = i["cur_SCN"]
                        break
            else:
                for i in oraclecopys:
                    if i["subclient"] == "default":
                        # print('>>>>>2')
                        curSCN = i["cur_SCN"]
                        break

            if copy_priority == 2:
                # 辅助拷贝状态
                auxcopys = dm.get_all_auxcopys()
                jobs_controller = dm.get_job_controller()

                dm.close()

                # 判断当前存储策略是否有辅助拷贝未完成
                auxcopy_completed = True
                for job in jobs_controller:
                    if job['storagePolicy'] == data_sp and job[
                            'operation'] == "Aux Copy":
                        auxcopy_completed = False
                        break
                # 假设未恢复成功
                # auxcopy_status = 'ERROR'
                print('当前备份记录对应的辅助拷贝状态 %s' % auxcopy_completed)
                if not auxcopy_completed:
                    # 找到成功的辅助拷贝,开始时间在辅助拷贝前的、值对应上的主拷贝备份时间点(最终转化UTC)
                    for auxcopy in auxcopys:
                        if auxcopy['storagepolicy'] == data_sp and auxcopy[
                                'jobstatus'] in ["Completed", "Success"]:
                            bytesxferred = auxcopy['bytesxferred']

                            end_tag = False
                            for orcl_copy in oraclecopys:
                                try:
                                    orcl_copy_starttime = datetime.datetime.strptime(
                                        orcl_copy['StartTime'],
                                        "%Y-%m-%d %H:%M:%S")
                                    aux_copy_starttime = datetime.datetime.strptime(
                                        auxcopy['startdate'],
                                        "%Y-%m-%d %H:%M:%S")
                                    if orcl_copy[
                                        'numbytesuncomp'] == bytesxferred and orcl_copy_starttime < aux_copy_starttime and \
                                            orcl_copy['subclient'] == "default":
                                        # 获取enddate,转化时间
                                        curSCN = orcl_copy['cur_SCN']
                                        end_tag = True
                                        break
                                except Exception as e:
                                    print(e)
                            if end_tag:
                                break

            dm.close()
            # print('Rac %s' % curSCN)
            oraRestoreOperator = {
                "curSCN": curSCN,
                "browseJobId": None,
                "data_path": data_path,
                "copy_priority": copy_priority,
                "restoreTime": restoreTime
            }
            # print("> %s > %s, %s, %s" % (oraRestoreOperator, sourceClient, destClient, instance))

            cvToken = CV_RestApi_Token()
            cvToken.login(commvault_credit)
            cvAPI = CV_API(cvToken)
            if agent.upper() == "ORACLE DATABASE":
                if cvAPI.restoreOracleBackupset(sourceClient, destClient,
                                                instance, oraRestoreOperator):
                    return HttpResponse("恢复任务已经启动。" + cvAPI.msg)
                else:
                    return HttpResponse("恢复任务启动失败。" + cvAPI.msg)
            elif agent.upper() == "ORACLE RAC":
                oraRestoreOperator["browseJobId"] = browseJobId
                if cvAPI.restoreOracleRacBackupset(sourceClient, destClient,
                                                   instance,
                                                   oraRestoreOperator):
                    return HttpResponse("恢复任务已经启动。" + cvAPI.msg)
                else:
                    return HttpResponse("恢复任务启动失败。" + cvAPI.msg)
            else:
                return HttpResponse("无当前模块,恢复任务启动失败。")
    else:
        return HttpResponseRedirect("/login")
Esempio n. 12
0
def get_schedule_policy(request):
    whole_list = []
    utils_manage_id = request.POST.get('utils_manage_id', '')

    try:
        utils_manage_id = int(utils_manage_id)
        utils_manage = UtilsManage.objects.get(id=utils_manage_id)
    except:
        return JsonResponse({
            "ret": 0,
            "data": "Commvault工具未配置。",
        })
    else:
        _, sqlserver_credit = get_credit_info(utils_manage.content)
        try:
            # all_client_manage = Origin.objects.exclude(state="9").values("client_name")
            # tmp_client_manage = [tmp_client["client_name"] for tmp_client in all_client_manage]

            dm = SQLApi.CVApi(sqlserver_credit)
            whole_list = dm.get_schedule_policy()
            ordered_whole_list = []
            dm.close()
            for num, wl in enumerate(whole_list):

                schedule_dict = OrderedDict()

                clientname_rowspan = get_rowspan(whole_list,
                                                 clientname=wl['clientname'])
                idataagent_rowspan = get_rowspan(whole_list,
                                                 clientname=wl['clientname'],
                                                 idataagent=wl['idataagent'])
                type_rowspan = get_rowspan(whole_list,
                                           clientname=wl['clientname'],
                                           idataagent=wl['idataagent'],
                                           type=wl['type'])
                # 子客户端,计划策略,备份类型
                subclient_rowspan = get_rowspan(whole_list,
                                                clientname=wl['clientname'],
                                                idataagent=wl['idataagent'],
                                                type=wl['type'],
                                                subclient=wl['subclient'])
                if wl['scheduePolicy']:
                    scheduePolicy_rowspan = get_rowspan(
                        whole_list,
                        clientname=wl['clientname'],
                        idataagent=wl['idataagent'],
                        type=wl['type'],
                        subclient=wl['subclient'],
                        scheduePolicy=wl['scheduePolicy'])
                else:
                    scheduePolicy_rowspan = 1
                if wl['schedbackuptype'] and wl['scheduePolicy']:
                    schedbackuptype_rowspan = get_rowspan(
                        whole_list,
                        clientname=wl['clientname'],
                        idataagent=wl['idataagent'],
                        type=wl['type'],
                        subclient=wl['subclient'],
                        scheduePolicy=wl['scheduePolicy'],
                        schedbackuptype=wl['schedbackuptype'])
                else:
                    schedbackuptype_rowspan = 1
                schedule_dict['clientname_rowspan'] = clientname_rowspan
                schedule_dict['idataagent_rowspan'] = idataagent_rowspan
                schedule_dict['type_rowspan'] = type_rowspan
                schedule_dict['subclient_rowspan'] = subclient_rowspan
                schedule_dict['scheduePolicy_rowspan'] = scheduePolicy_rowspan
                schedule_dict[
                    'schedbackuptype_rowspan'] = schedbackuptype_rowspan

                schedule_dict["clientname"] = wl["clientname"]
                schedule_dict["idataagent"] = wl["idataagent"]
                schedule_dict["type"] = wl["type"]
                schedule_dict["subclient"] = wl["subclient"]
                schedule_dict["scheduePolicy"] = wl["scheduePolicy"] if wl[
                    "scheduePolicy"] else "无"
                schedule_dict["schedbackuptype"] = wl["schedbackuptype"] if wl[
                    "schedbackuptype"] else "无"
                schedule_dict["schedpattern"] = wl["schedpattern"] if wl[
                    "schedpattern"] else "无"

                schedule_dict["option"] = {
                    "schedpattern": wl["schedpattern"],
                    "schednextbackuptime": wl["schednextbackuptime"],
                    "scheduleName": wl["scheduleName"],
                    "schedinterval": wl["schedinterval"],
                    "schedbackupday": wl["schedbackupday"],
                    "schedbackuptype": wl["schedbackuptype"],
                }

                ordered_whole_list.append(schedule_dict)

        except Exception as e:
            print(e)
            return JsonResponse({
                "ret": 0,
                "data": "获取计划策略信息失败。",
            })
        else:
            return JsonResponse({
                "ret": 1,
                "data": ordered_whole_list,
            })
Esempio n. 13
0
def get_ma_disk_space(request):
    """
    获取总容量
    :param request:
    :return:
    """
    status = 1
    data = []
    info = ''
    utils_id = request.POST.get('util', '')

    # 监控页面url 磁盘空间 url
    funs = Fun.objects.all()
    disk_space = "/"
    client_list = "/"
    for fun in funs:
        if "disk_space" in fun.url:
            disk_space = "{0}?util={1}".format(fun.url, utils_id)
        if "client_list" in fun.url:
            client_list = "{0}?util={1}".format(fun.url, utils_id)
    try:
        utils_id = int(utils_id)
        utils_manage = UtilsManage.objects.get(id=utils_id)
    except:
        status = 0
        info = 'Commvault工具未配置。'
    else:
        _, sqlserver_credit = get_credit_info(utils_manage.content)
        try:
            dm = SQLApi.CVApi(sqlserver_credit)
            ret = dm.get_library_space_info()
            dm.close()
            capacity_available = 0
            space_reserved = 0
            total_space = 0
            for r in ret:
                if type(r["CapacityAvailable"]) == int:
                    capacity_available += r["CapacityAvailable"]
                if type(r["SpaceReserved"]) == int:
                    space_reserved += r["SpaceReserved"]
                if type(r["TotalSpaceMB"]) == int:
                    total_space += r["TotalSpaceMB"]

            capacity_available_percent = round(
                (capacity_available / total_space) * 100, 2)
            space_reserved_percent = round(
                (space_reserved / total_space) * 100, 2)
            used_space_percent = round(
                (100 - capacity_available_percent - space_reserved_percent), 2)
            data = {
                "capacity_available_percent":
                capacity_available_percent,
                "space_reserved_percent":
                space_reserved_percent,
                "used_space_percent":
                used_space_percent,
                "total_space":
                round(total_space / 1024 / 1024, 2),
                "used_space":
                round((total_space - space_reserved - capacity_available) /
                      1024 / 1024, 2),
                "bk_space_href":
                disk_space,
                "client_list_href":
                client_list
            }
        except:
            pass

    return JsonResponse({
        "status": status,
        "info": info,
        "data": data,
    })
Esempio n. 14
0
def get_disk_space(request):
    # MA rowspan 总记录数
    # 库 rowspan 相同库记录数
    status = 1
    data = []
    info = ''
    utils_manage_id = request.POST.get('utils_manage_id', '')

    try:
        utils_manage_id = int(utils_manage_id)
        utils_manage = UtilsManage.objects.get(id=utils_manage_id)
    except:
        status = 0
        info = 'Commvault工具未配置。'
    else:
        _, sqlserver_credit = get_credit_info(utils_manage.content)
        try:
            dm = SQLApi.CVApi(sqlserver_credit)
            data = dm.get_library_space_info()
            dm.close()

            # 遍历所有记录 总记录数
            def get_rowspan(total_list, **kwargs):
                row_span = 0
                display_name = kwargs.get('DisplayName', '')
                library_name = kwargs.get('LibraryName', '')
                if all([display_name, library_name]):
                    for tl in total_list:
                        if tl['DisplayName'] == display_name and tl[
                                'LibraryName'] == library_name:
                            row_span += 1
                if display_name and not library_name:
                    for tl in total_list:
                        if tl['DisplayName'] == display_name:
                            row_span += 1
                return row_span

            for num, lsi in enumerate(data):
                display_name_rowspan = get_rowspan(
                    data, DisplayName=lsi['DisplayName'])
                library_name_rowspan = get_rowspan(
                    data,
                    DisplayName=lsi['DisplayName'],
                    LibraryName=lsi['LibraryName'])

                # 时间
                try:
                    data[num][
                        "LastBackupTime"] = "{:%Y-%m-%d %H:%M:%S}".format(
                            data[num]["LastBackupTime"])
                except Exception as e:
                    data[num]["LastBackupTime"] = ""
                # 是否可用
                if data[num]["Offline"] == 0:
                    data[num][
                        "Offline"] = '<i class="fa fa-plug" style="color:green; height:20px;width:14px;"></i>'
                else:
                    data[num][
                        "Offline"] = '<i class="fa fa-plug" style="color:red; height:20px;width:14px;"></i>'

                data[num]['display_name_rowspan'] = display_name_rowspan
                data[num]['library_name_rowspan'] = library_name_rowspan

        except Exception as e:
            print(e)
            status = 0
            info = '获取磁盘容量信息失败: {e}。'.format(e=e)
    return JsonResponse({"status": status, "info": info, "data": data})
Esempio n. 15
0
def get_framework(request):
    util = request.POST.get('util', '')
    try:
        util = int(util)
    except:
        raise Http404()
    frameworkdata = {}
    util_manages = UtilsManage.objects.exclude(state='9').filter(id=util)
    if len(util_manages) > 0:
        util = util_manages[0]
        if util.util_type.upper() == 'COMMVAULT':
            commvault_credit, sqlserver_credit = get_credit_info(util.content)

            commserve = {
                'host': '无法获取',
                'version': '无法获取',
                'sp': '无法获取',
                'os': '无法获取',
                'net': '无法获取',
                'apiport': '无法获取',
                'apiconnect': '无法获取',
                'dbname': '无法获取',
                'dbconnect': '无法获取',
            }
            mas = []

            # 先判断网络
            netresult = ping(commvault_credit["webaddr"])
            if netresult is not None:
                commserve["net"] = "正常"
                # 网络正常时取数据库信息
                commserve["dbname"] = sqlserver_credit["SQLServerDataBase"]
                dm = SQLApi.CVApi(sqlserver_credit)
                if dm.isconnected() is not None:
                    commserve["dbconnect"] = "正常"

                    # 数据库连接正常,取cs信息
                    commserv_info = dm.get_commserv_info()
                    if commserv_info is not None:
                        commserve["host"] = commserv_info[3]
                        commserve["version"] = commserv_info[0]
                        commserve["sp"] = commserv_info[1]
                        commserve["os"] = commserv_info[2]
                    # 数据库连接正常,取ma信息
                    ma_info = dm.get_ma_info()
                    for ma in ma_info:
                        netresult = ping(ma["InterfaceName"])
                        if netresult is not None:
                            ma["net"] = "正常"
                        else:
                            ma["net"] = "中断"
                        if ma["Offline"] == 0:
                            ma["Offline"] = "在线"
                        else:
                            ma["Offline"] = "离线"
                        try:
                            ma["TotalSpaceMB"] = round(
                                ma["TotalSpaceMB"] / 1024 / 1024, 2)
                        except:
                            pass
                        try:
                            ma["TotalFreeSpaceMB"] = round(
                                ma["TotalFreeSpaceMB"] / 1024 / 1024, 2)
                        except:
                            pass
                        try:
                            ma["Percent"] = round(
                                (ma["TotalSpaceMB"] - ma["TotalFreeSpaceMB"]) /
                                ma["TotalSpaceMB"] * 100, 2)
                        except:
                            ma["Percent"] = 0
                        try:
                            ma["SpaceReserved"] = round(
                                ma["SpaceReserved"] / 1024 / 1024, 2)
                        except:
                            pass
                        ma["CapacityAvailable"] = ma["TotalFreeSpaceMB"]
                        try:
                            ma["CapacityAvailable"] = ma[
                                "TotalFreeSpaceMB"] - ma["SpaceReserved"]
                        except:
                            pass
                        mas.append(ma)
                    frameworkdata["ma"] = mas

                else:
                    commserve["dbconnect"] = "中断"
                commserve["apiport"] = commvault_credit["port"]
                # 网络正常时取接口信息
                cvToken = CV_RestApi_Token()
                commvault_credit["token"] = ""
                commvault_credit["lastlogin"] = 0
                cvToken.login(commvault_credit)
                if cvToken.isLogin:
                    commserve["apiconnect"] = "正常"
                else:
                    commserve["apiconnect"] = "中断"

            else:
                commserve["net"] = "中断"

            frameworkdata["commserve"] = commserve

    return JsonResponse({
        "ret": 1,
        "data": frameworkdata,
    })