import { Api } from './api'; import { Connection, TestRequest, ConnectionPoolType, SocketResult, ConnectionLicInfo, ResultType, checkDriverStatusParams } from './crud.typings'; import { requestGet, requestDelete, requestPost, requestPut } from './crud.service'; import { editStatusEvent, errorCode } from '@constants/env'; export class DecisionApi implements Api { isDec = true; getConnectionList(): Promise<{ data?: Connection[] }> { return requestGet('list', {}); } getConnectionLicInfo(): Promise<{ data?: ConnectionLicInfo }> { return requestGet('lic/info', {}); } deleteConnection(connectionName: string) { return requestDelete('', { connectionName, }); } addConnection(data: Connection) { const form = { ...data, connectionId: data.connectionId || data.connectionName, connectionData: JSON.stringify(data.connectionData), }; return requestPost('', form); } updateConnection(data: Connection) { const form = { ...data, connectionData: JSON.stringify(data.connectionData), }; return requestPut('', form); } testConnection(data: Connection): Promise { const form = { ...data, connectionData: JSON.stringify(data.connectionData), }; return requestPost('test', form); } /** * 获取驱动加载路径 * @returns */ getDriverLoadPath(data: Connection): Promise> { const form = { ...data, connectionData: JSON.stringify(data.connectionData), }; return requestPost('driver/path', form); } /** * 检测驱动冲突状态 * @param data 驱动路径 */ checkDriverStatus(data: checkDriverStatusParams): Promise> { return requestGet(Dec.Utils.getEncodeURL('test/driver/conflict', '', data)); } getConnectionPool(name: string): Promise<{ data?: ConnectionPoolType }> { return requestGet(`pool/info?connectionName=${encodeURIComponent(name)}`, {}); } getSimpleDriverList(): Promise<{ data: any[] }> { return new Promise(resolve => { Dec.reqGet('/v10/drivers/simple/list', '', re => { resolve(re); }); }); } getConnectionStatus(name: string): Promise { // TODO: 当前emit同步回调已无法执行 this.sendEditStatusEvent(name, editStatusEvent.OPEN); if (!Dec.socket?.connected) { return Promise.resolve({ data: 'success' }); } return new Promise((resolve, rejected) => { this.addEventListener(editStatusEvent.OPEN, res => { const data = JSON.parse(res.data); if (data.errorCode) { let errorMessage = ''; switch (data.errorCode) { case errorCode.CONNECTION_DELETED: errorMessage = 'Dec-Dcm_Connection_Deleted'; break; case errorCode.CONNECTION_UNDER_EDIT: errorMessage = 'Dec-Dcm_Connection_Is_Using'; break; default: errorMessage = data.errorMessage; break; } BI.Msg.toast(BI.i18nText(errorMessage, data.errorMessage), { level: 'error', }); rejected(data); } else { resolve(res); } }); }); } setEditedConnectionStatus(name: string): Promise { return this.sendEditStatusEvent(name, editStatusEvent.CONNECTION_EDITED); } shutdownConnectionStatus(name: string): Promise { return this.sendEditStatusEvent(name, editStatusEvent.CONNECTION_RELEASED); } getSocketStatus(): boolean { return !!Dec?.socket?.connected; } isDriverError(errorCode: string) { if (Dec) { return DecCst.ErrorCode.LACK_DRIVER === errorCode; } return false; } getCipher(password: string) { return BI.Providers.getProvider('dec.provider.cipher') .getCompleteCipher(password); } getPlain(cipher: string) { return BI.Providers.getProvider('dec.provider.cipher') .getCompletePlain(cipher); } getHyperlink(name: string) { return Dec.system[DecCst.Hyperlink.DECISION_HYPERLINK_CONFIG][name]; } changePrincipal(value: any) { return requestPost(`switch/principal`, value); } getPrincipals(keytab: string) { return requestGet(`/principals?keytabPath=${keytab}`, {}); } getTimeOut(): Promise<{ data?: any }> { return requestGet('kdc/timeout', {}); } putTimeOut(value: number) { return requestPut(`kdc/timeout?timeout=${value}`, {}) } // 获取当前lic是否可以使用JNDI数据库类型 getJNDIDatabaseStatus(): Promise<{ data?: boolean }> { return requestGet('databasetype/limit', {}); } private sendEditStatusEvent(name: string, type: string): Promise { return new Promise(resolve => { if (Dec?.socket?.connected) { Dec.socket.emit(type, BI.encode(name), (re: any) => { resolve(re); }); } else { resolve({ data: 'success' }); } }); } private addEventListener(name: string, callback: Function) { if (!Dec.socket) return; if (Dec.socket.hasListeners(name)) { Dec.socket.removeListener(name); } Dec.socket.on(name, callback); } }