Пример #1
0
 def updateNifiTemplate(self, mainWidgetObj, nifiConfItems, objsDict):
     nifiList = self._action.getNifiConfValue(nifiConfItems, objsDict)
     if not nifiList:
         Util.mesInfomation(mainWidgetObj, '请完善输入\选择项')
     else:
         reply = Util.mesInfomation(mainWidgetObj,
                                    '请确认Nifi中所有Processor的Queued是否为0 ', '确认',
                                    '已确认', '未确认')
         if reply.clickedButton().text() == '已确认':
             # 获得信号源按钮对象
             sender = mainWidgetObj.sender()
             # 实例化QThread
             self.thread = QtCore.QThread()
             # 实例化查询数据库对象
             self.nifi = NifiThread(WidgetObj=mainWidgetObj,
                                    nifiConfList=nifiList,
                                    btnObj=sender)
             # DBThread加载到线程中
             self.nifi.moveToThread(self.thread)
             # 绑定自定义信号,完成、停止线程
             self.nifi.finishSignal.connect(self.finishedNifi)
             self.nifi.stopThreadSignal.connect(self.thread.quit)
             # 绑定线程执行的槽函数
             self.thread.started.connect(self.nifi.updateNifiTemplate)
             # 执行线程
             self.thread.start()
Пример #2
0
    def setBiIncrementScheduleAndExtractSource(self):
        api = NifiApi(self.nifiConf['nifi.host'], self.nifiConf['nifi.user'],
                      self.nifiConf['nifi.pwd'])

        path = ['*', '*', u'Ods Group', u'Extract']
        sourceProIds = api.getProcessorIdsByPath(path)
        data = {
            "extract-source-id": self.nifiConf['bi.sourceid'],
            "extract-source-name": self.nifiConf['bi.sourcename']
        }

        path = [u'2.增量抽取流程', u'通用ETL增量抽取流程', u'Ods Group', u'Extract Data']
        incProId = api.getProcessorId(path)
        try:
            for proid in sourceProIds:
                api.updateProcessorConf(
                    proid, "Extract Data", "properties", data,
                    api.getProcessorInfo(proid)['revision']['version'])
            if incProId and self.nifiConf['bi.schedule']:
                api.updateProcessorConf(
                    incProId, "Extract Data", "schedulingPeriod",
                    self.nifiConf['bi.schedule'],
                    api.getProcessorInfo(incProId)['revision']['version'])
        except:
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, '更新增量抽取时间失败')
            return False
        return True
Пример #3
0
    def setComboBoxDB(self, dataList, cbObj, WidgetObj):

        if dataList[0] == 'Error':
            Util.mesInfomation(WidgetObj, '数据库信息不正确')
        elif dataList[0] == 'None':
            Util.mesInfomation(WidgetObj, '请完善数据库连接信息')
        else:
            cbObj.clear()
            for i in dataList:
                cbObj.addItem(i[0])
Пример #4
0
    def getFileFullPath(self,
                        widgetObj,
                        title,
                        fileType,
                        defaultPath=Util.getWinDesktop()):
        file = QtWidgets.QFileDialog.getOpenFileName(widgetObj, title,
                                                     defaultPath, fileType)

        return file[0]
Пример #5
0
    def saveConfItemsFile(self,
                          widgetObj,
                          configItem,
                          title,
                          fileType,
                          defaultFilename,
                          connector=":",
                          defaultPath=Util.getWinDesktop()):
        deployFile = QtWidgets.QFileDialog.getSaveFileName(
            widgetObj, title, defaultPath + '\\' + defaultFilename, fileType)

        if (deployFile[0]):
            if (not Util.writeFile(deployFile[0], configItem, connector)):
                Util.mesInfomation(widgetObj, '配置文件写入异常')
                return False
            return True
        else:
            return False
Пример #6
0
 def setTransactionAuth(self):
     api = NifiApi(self.nifiConf['nifi.host'], self.nifiConf['nifi.user'],
                   self.nifiConf['nifi.pwd'])
     data = {
         'nifi-user-name': self.nifiConf['nifi.user'],
         'nifi-user-password': self.nifiConf['nifi.pwd']
     }
     path = [[u'1.第一次抽取流程', u'TransactionManager'],
             [u'2.增量抽取流程', u'TransactionManager']]
     try:
         for i in path:
             proid = api.getProcessorId(i)
             if proid:
                 api.updateProcessorConf(
                     proid, "TransactionManager", "properties", data,
                     api.getProcessorInfo(proid)['revision']['version'])
     except:
         if self.widgetObj:
             Util.mesInfomation(self.widgetObj, '设置事务账号失败')
         return False
     return True
Пример #7
0
 def setIsExtractHis(self):
     path = [u'2.增量抽取流程', u'通用ETL增量抽取流程', u'Ods Group', u'Extract Data']
     api = NifiApi(self.nifiConf['nifi.host'], self.nifiConf['nifi.user'],
                   self.nifiConf['nifi.pwd'])
     proId = api.getProcessorId(path)
     rootId = api.getProcessGroups(
         'root')['processGroupFlow']['breadcrumb']['breadcrumb']['id']
     data = {'history-dbcp-service': None}
     try:
         if self.nifiConf['HistoryConnectionPool.enable'].lower() == 'true':
             for i in api.getAllConServices(rootId)['controllerServices']:
                 if i['component']['name'] == u'HistoryConnectionPool':
                     data['history-dbcp-service'] = i['component']['id']
         if proId:
             api.updateProcessorConf(
                 proId, "Extract Data", "properties", data,
                 api.getProcessorInfo(proId)['revision']['version'])
     except:
         if self.widgetObj:
             Util.mesInfomation(self.widgetObj, '设置抽取历史库失败')
         return False
     return True
Пример #8
0
 def closeEvent(self, event):
     reply = Util.mesInfomation(self, '确定要退出吗?', '提示', '是', '否')
     if reply.clickedButton().text() == '是':
         event.accept()
     else:
         event.ignore()
Пример #9
0
    def instanceTemplate(self):

        dbConf = self.getDBConf(self.nifiConf)

        # 判断Nifi是否启动
        if not self.startNifi(self.nifiConf['nifi.host'], 600):
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, 'NIfi未启动')
            return False

        # 初始化nifi,获得基础信息
        nifi = NifiApi(self.nifiConf['nifi.host'], self.nifiConf['nifi.user'],
                       self.nifiConf['nifi.pwd'])
        groupInfo = nifi.getProcessGroups('root')
        uuid = groupInfo['processGroupFlow']['breadcrumb']['breadcrumb']['id']

        try:
            # 遍历groups并依次停止删除groups
            for group in groupInfo['processGroupFlow']['flow'][
                    'processGroups']:
                nifi.updateProcessGroupState(
                    group['status']['aggregateSnapshot']['id'], 'STOPPED')
                nifi.delProcessGroup(
                    group['status']['aggregateSnapshot']['id'],
                    group['revision']['version'])
        except:
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, '删除Groups异常')
            return False

        try:
            # 获得所有模板,遍历并删除
            for template in nifi.getTemplates():
                nifi.deleteTemplates(template['id'])
        except:
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, '删除Templates异常')
            return False

        # 根据模板路径上传模板
        if not nifi.uploadTemplate(self.nifiConf['nifi.template'], uuid):
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, '上传Templates异常')
            return False

        try:
            # 停止全部连接池控制器
            for conServices in nifi.getAllConServices(
                    uuid)['controllerServices']:
                nifi.updateConService(
                    conserviceId=conServices['component']['id'],
                    version=conServices['revision']['version'],
                    state='DISABLED')
            # 删除控制器(停止和删除不能在同一循环下)
            for conServices in nifi.getAllConServices(
                    uuid)['controllerServices']:
                nifi.delConServices(conServices['component']['id'],
                                    conServices['revision']['version'])
        except:
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, '删除Controller Service异常')
            return False

        try:
            # 实例化模板
            for template in nifi.getTemplates():
                nifi.instantiateTemplate(uuid, template['id'])
        except:
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, '实例化Template异常')
            return False

        try:
            # 更新全部连接池控制器并启用
            for conServers in nifi.getAllConServices(
                    uuid)['controllerServices']:
                if conServers['component']['name'] in dbConf:
                    nifi.updateConService(
                        conserviceId=conServers['component']['id'],
                        version=conServers['revision']['version'],
                        data=dbConf[conServers['component']['name']])
        except:
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, '更新Controller Service异常')
            return False

        try:
            # 启用全部连接池控制器
            for conServers in nifi.getAllConServices(
                    uuid)['controllerServices']:
                if conServers['component'][
                        'name'] == u'HistoryConnectionPool' and self.nifiConf[
                            'HistoryConnectionPool.enable'].lower() != 'true':
                    pass
                elif conServers['component'][
                        'name'] == u'PPConnectionPool' and self.nifiConf[
                            'PPConnectionPool.enable'].lower() != 'true':
                    pass
                else:
                    nifi.updateConService(
                        conserviceId=conServers['component']['id'],
                        version=conServers['revision']['version'],
                        state='ENABLED')
        except:
            if self.widgetObj:
                Util.mesInfomation(self.widgetObj, '启用Controller Service异常')
            return False
        return True
Пример #10
0
 def nextClicked(self, mainWidgetObj, tabWidgetObj, btnObj, depBtn, manBtn,
                 deployItems, manifestItems, objsDict):
     pos = tabWidgetObj.currentIndex()
     tabCount = tabWidgetObj.count()
     if (pos < (tabCount - 1)):
         # 数据库下一步Check
         if (pos == 0):
             if not self._action.saveConfStep_1(objsDict):
                 Util.mesInfomation(mainWidgetObj, '输入\选择项不能为空,请输入')
                 return
         # 工艺参数下一步Check
         elif (pos == 1):
             if not self._action.saveConfStep_2(objsDict):
                 Util.mesInfomation(mainWidgetObj, '输入项不能为空,请输入')
                 return
         elif (pos == 2):
             if not self._action.saveConfStep_3(objsDict):
                 Util.mesInfomation(mainWidgetObj, '输入项不能为空,请输入')
                 return
         elif (pos == 3):
             if not self._action.saveConfStep_4(objsDict):
                 Util.mesInfomation(mainWidgetObj, '输入项不能为空,请输入')
                 return
         else:
             print('配置完成')
         # 改变按钮显示
         self.buttonChange(tabWidgetObj, btnObj, depBtn, manBtn)
         # 切换下一个tab
         tabWidgetObj.setCurrentIndex(tabWidgetObj.currentIndex() + 1)
     else:
         # 保存检查部署配置文件并获得部署配置的List
         deployList = self._action.getDeployConfValue(deployItems, objsDict)
         if (not deployList):
             Util.mesInfomation(mainWidgetObj, '请完善配置项')
         else:
             # 获得工厂定制的配置List
             manifestList = self._action.getManifestConfValue(
                 manifestItems, deployItems, objsDict)
             # 保存部署配置文件
             if not self._action.saveConfItemsFile(
                     mainWidgetObj, deployList, '请选择部署配置文件保存路径',
                     'YML Files(*.yml)', 'EXTRA VARIABLES.yml'):
                 return
             Util.mesInfomation(mainWidgetObj, '部署配置文件保存成功,请选择工厂定制文件保存路径')
             # 保存工厂定制文件
             if not self._action.saveConfItemsFile(
                     mainWidgetObj, manifestList, '请选择工厂定制文件保存路径',
                     'PROPERTIES Files(*.properties)',
                     'manifest.properties', '='):
                 return
             Util.mesInfomation(mainWidgetObj, '保存成功')
Пример #11
0
 def finishedNifi(self, WidgetObj, re):
     if re:
         Util.mesInfomation(WidgetObj, '更新完成')
     else:
         Util.mesInfomation(WidgetObj, '更新失败')
Пример #12
0
 def createFullDB(self, mainWidgetObj):
     Util.mesInfomation(mainWidgetObj, '数据库升级功能开发中,敬请期待')
Пример #13
0
 def copyConfClipboard(self, mainWidgetObj, type, deployItems,
                       manifestItems, objsDict):
     if type == 'deploy':
         deployItems = self._action.getDeployConfValue(
             deployItems, objsDict)
         if (not deployItems):
             Util.mesInfomation(mainWidgetObj, '请完善部署配置项')
             return
         else:
             Util.copyClipboardText(Util.dictTransforStr(deployItems))
             Util.mesInfomation(mainWidgetObj, '复制成功')
     elif type == 'manifest':
         manifestItems = self._action.getManifestConfValue(
             manifestItems, deployItems, objsDict)
         # 获得配置写入到系统剪贴板中
         Util.copyClipboardText(Util.dictTransforStr(manifestItems, '='))
         Util.mesInfomation(mainWidgetObj, '复制成功')
     else:
         print('复制类型不存在')