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()
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
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])
def getFileFullPath(self, widgetObj, title, fileType, defaultPath=Util.getWinDesktop()): file = QtWidgets.QFileDialog.getOpenFileName(widgetObj, title, defaultPath, fileType) return file[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
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
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
def closeEvent(self, event): reply = Util.mesInfomation(self, '确定要退出吗?', '提示', '是', '否') if reply.clickedButton().text() == '是': event.accept() else: event.ignore()
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
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, '保存成功')
def finishedNifi(self, WidgetObj, re): if re: Util.mesInfomation(WidgetObj, '更新完成') else: Util.mesInfomation(WidgetObj, '更新失败')
def createFullDB(self, mainWidgetObj): Util.mesInfomation(mainWidgetObj, '数据库升级功能开发中,敬请期待')
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('复制类型不存在')