From 24add5cf87eff0ea9611c61129d532e4623f22a8 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Wed, 20 Mar 2019 05:34:35 +0300 Subject: [PATCH 01/17] Update nokia RAML20 paraser to v2.2.0 --- mediation/bin/boda-nokiacmdataparser.jar | Bin 0 -> 97533 bytes mediation/bin/boda_nokiacmdataparser.jar | Bin 8252 -> 0 bytes mediation/conf/cm/nokia_raml20_parser.cfg | 164 ++++++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 mediation/bin/boda-nokiacmdataparser.jar delete mode 100644 mediation/bin/boda_nokiacmdataparser.jar create mode 100644 mediation/conf/cm/nokia_raml20_parser.cfg diff --git a/mediation/bin/boda-nokiacmdataparser.jar b/mediation/bin/boda-nokiacmdataparser.jar new file mode 100644 index 0000000000000000000000000000000000000000..1e3aaf7e204598590f847a5ac91601e0bf19f877 GIT binary patch literal 97533 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 gRrx;~ve*9Cp|Kt%_)Zt3Sn!Jm4ETdkFup&;S4c literal 0 HcmV?d00001 diff --git a/mediation/bin/boda_nokiacmdataparser.jar b/mediation/bin/boda_nokiacmdataparser.jar deleted file mode 100644 index 12e0c473ddc7c30f194ed063afbc78bef94c8999..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8252 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 diff --git a/mediation/conf/cm/nokia_raml20_parser.cfg b/mediation/conf/cm/nokia_raml20_parser.cfg new file mode 100644 index 0000000..172ab4f --- /dev/null +++ b/mediation/conf/cm/nokia_raml20_parser.cfg @@ -0,0 +1,164 @@ +A2NE:FILENAME,DATETIME,VERSION,DISTNAME,MOID +A2ST:FILENAME,DATETIME,VERSION,DISTNAME,MOID,AAL2EndAddress,VCI,VPI,interfaceNumber,stcAlarmEnable,unitNumber +A2UT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,VCI,VPI,interfaceNumber,pid,queue2Weight,queue3Weight,queue4Weight,unitNumber +ACCP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,egressBandwidth,ingressBandwidth,maxNumVCIBitsSupported,maxNumVPIBitsSupported,upcNpc +ADCE:FILENAME,DATETIME,VERSION,DISTNAME,MOID,frequencyBandInUse,gprsMsTxPwrMaxCCH1x00,msTxPwrMaxGSM1x00,address,name,targetCellDN,adjCellBsicBcc,adjCellBsicNcc,adjacentCellIdCI,adjacentCellIdLac,adjacentCellIdMCC,adjacentCellIdMNC,adjcIndex,amrDadlbTargetCell,bcchFrequency,chainedAdjacentCell,dadlbTargetCell,drThreshold,enableDerivedHandoverPower,enableHoMarginLevQual,gprsEnabled,gprsMsTxpwrMaxCCH,gprsPenaltyTime,gprsRxlevAccessMin,gprsTemporaryOffset,hcsPriorityClass,hcsThreshold,hoLevelUmbrella,hoLoadFactor,hoMarginDelayTime,hoMarginLev,hoMarginPbgt,hoMarginQual,hoPriorityLevel,hoTargetArea,msTxPwrMaxGSM,neighbourCellRanking,rac,rxLevMinCell,synchronized,trhoTargetLevel +ADJG:FILENAME,DATETIME,VERSION,DISTNAME,MOID,AdjgMCC,AdjgMNC,TargetCellDN,ADJGChangeOrigin,ADJGType,AdjgBCC,AdjgBCCH,AdjgBandIndicator,AdjgCI,AdjgLAC,AdjgNCC,AdjgSIB,AdjgTxPwrMaxRACH,AdjgTxPwrMaxTCH,NrtHopgIdentifier,RtHopgIdentifier,name +ADJI:FILENAME,DATETIME,VERSION,DISTNAME,MOID,AdjiMCC,AdjiMNC,TargetCellDN,name,ADJIChangeOrigin,AdjiCI,AdjiCPICHTxPwr,AdjiComLoadMeasDRNCCellNCHO,AdjiEcNoOffsetNCHO,AdjiHandlingBlockedCellSLHO,AdjiLAC,AdjiNCHOHSPASupport,AdjiRAC,AdjiRNCid,AdjiSIB,AdjiScrCode,AdjiTxDiv,AdjiTxPwrDPCH,AdjiTxPwrRACH,AdjiUARFCN,BlindHOTargetCell,NrtHopiIdentifier,RtHopiIdentifier +ADJL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,barredLteAdjCellGroup,barredLteAdjCellList,barredLteAdjCellPattern,barredLteAdjCellPatternSense,earfcn,lteAdjCellMcc,lteAdjCellMinBand,lteAdjCellMinRxLevel,lteAdjCellMnc,lteAdjCellPriority,lteAdjCellReselectLowerThr,lteAdjCellReselectUpperThr,lteAdjCellTac,name,ADJLChangeOrigin,AdjLEARFCN,AdjLMeasBw,AdjLSelectFreq,HopLIdentifier +ADJS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,AdjsMCC,AdjsMNC,TargetCellDN,ADJSChangeOrigin,AdjsCI,AdjsCPICHTxPwr,AdjsDERR,AdjsEcNoOffset,AdjsLAC,AdjsRAC,AdjsRNCid,AdjsSIB,AdjsScrCode,AdjsTxDiv,AdjsTxPwrRACH,HSDPAHopsIdentifier,NrtHopsIdentifier,RTWithHSDPAHopsIdentifier,RtHopsIdentifier,SRBHopsIdentifier,name +ADJW:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,name,targetCellDN,AdjwCId,intSystemDaEcioThr,lac,mcc,minEcnoThreshold,mnc,rncId,sac,scramblingCode,txDiversityInd,uarfcn +ADR4GW:FILENAME,DATETIME,VERSION,DISTNAME,MOID,bfdId,preference,routeType +AMGR:FILENAME,DATETIME,VERSION,DISTNAME,MOID,ldapConnectionType,primaryLdapPort,primaryLdapServer +ANBA:FILENAME,DATETIME,VERSION,DISTNAME,MOID,VCI,VPI,interfaceNumber,nbapType,unitNumber +ANRPRL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,actAlsoForUeBasedANR,anrThresRSRPNbCell,anrThresRSRPNbCellMobEv,anrThresRSRQNbCell,nrLimitInterFreq,nrLimitIntraFreq,targetCarrierFreq +ANTL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,alDcVoltageEnabled,antId,antennaRoundTripDelay,antennaTotalLoss,cableLength,communication3gppEnabled,feederLoss,feederVoltage,multiplexerAmount,multiplexerLoss,multiplexerTotalDelay,multiplexerType,rModId,ulDelay,velocityFactor,vswrMajorAlarm,vswrMinorAlarm,additionalRxGain,forcedVoltage +BCF:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,latitude,longitude,name,adminState,autoUnlAllowed,batteryBackupProcedure,bcchTrxBatbuTimer,bcfOutputInUse,bcfType,clockSource,externalAlarmDefinition_inputId_inputTextId_polarity_reportingRoute_severity,lapdLinkName,lapdLinkNumber,masterClockBcf,normTrxBatbuTimer,rxDifferenceLimit,syncMode,synchEnabled,synchStatus,outputDefinition_textId,notificationOrigin +BFD:FILENAME,DATETIME,VERSION,DISTNAME,MOID,bfdActivation,bfdAdminUp,bfdDestAddress,bfdDetectMult,bfdSourceIpAddr,bfdSourceUdpPort,bfdType,desMinTxInt,function,reqMinRxInt,bfdGrp +BFDGRP:FILENAME,DATETIME,VERSION,DISTNAME,MOID +BSC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,bscOptions,dcsMacrocellThreshold,dcsMicrocellThreshold,address,name,neSwRelease,adjCellFreqsInMeasBAInfo,alrmChFail,alrmNoOfSei,alrmSchFail,alrmSdcch,alrmSeizReq,alrmTch,amhLowerLoadThreshold,amhMaxLoadOfTgtCell,amhTrhoGuardTime,amhUpperLoadThreshold,amrConfInHandovers,amrSetGradesEnabl,ansiEnvironment,batteryBackupTimer,bcsuLoadThr,bscType,btsLoadDepTchRateLower,btsLoadDepTchRateUpper,callReleaseLimit,delayHoPcEmergencyCalls,dfcaAmrFrConnection_softBlockingCn,dfcaAmrHrConnection_softBlockingCn,dfcaFrConnection_softBlockingCn,disableExtDr,disableIntHo,dtmFragmentationPenalty,emerCallOnFacch,extraTrxBcsuNumber,extraTrxMaxTrxInBcsu,fepInPcHoUse,frTchALim,freeTSLsCsDowngrade,freeTSLsCsUpgrade,freqInMeasBAInfo,gprsTerritoryCalc,gsmMacrocellThreshold,gsmMicrocellThreshold,hoPrefOrderInterfDl,hoPrefOrderInterfUl,hrTchALim,inactCriteria,inactEventsPerHour,incomeRateThreshold,initAmrChannelRate,internalHoToExternal,intraSegSdcchHoGuard,ishoPreferredForNonDtmMs,lapdLoadThr,loadRateChSearch,maxBcfCapacity,maxBtsCapacity,maxHldSdcch,maxHldTch,maxOnHiIf,maxTchTransactionRate,maxTrxCapacityHw,maxTrxCapacityReal,meanBepLimitUL_Prof0_2tsl,meanBepLimitUL_Prof0_3tsl,meanBepLimitUL_Prof0_4tsl,meanBepLimitUL_Prof1_2tsl,meanBepLimitUL_Prof1_3tsl,meanBepLimitUL_Prof1_4tsl,meanBepLimitUL_Prof2_3tsl,meanBepLimitUL_Prof2_4tsl,measPrdCh,measPrdFail,measPrdSdcch,measTchMhold,minHiIf,minHldTch,msDistanceBehaviour,msSpeedC11,msSpeedC12,noOfPrefCells,nokBtsOffHour,nokBtsOffMinute,nokBtsOnHour,nokBtsOnMinute,ordinaryCallOnFacch,pagingAnsOnFacch,pcuMaxNoDLtbfInCH,pcuMaxNoULtbfInCH,pfcAckBlerLimit_legacyStream,pfcAckBlerLimit_limit10004000ms,pfcAckBlerLimit_limit10150ms,pfcAckBlerLimit_limit200950ms,pfcAckBlerLimit_notAvailable,pfcUnackBlerLimit_legacyStream,pfcUnackBlerLimit_limit110e1,pfcUnackBlerLimit_limit110e2,pfcUnackBlerLimit_limit110e3,pfcUnackBlerLimit_limit710e3,pfcUnackBlerLimit_notAvailable,prdHighIf,prdNokBts,qcActionTriggerThr_drop,qcActionTriggerThr_nccr,qcActionTriggerThr_qosRenego,qcActionTriggerThr_realloca,reestablishOnFacch,rnwConfId,rnwFallbackConfId,rnwPlanConfId,rnwPlanDatabaseState,rtsl0PrefInTCHAlloc,rxAntSupPer,rxLevBalance,rxLevelBasedTchAccess,rxqualLimitUL_Prof0_2tsl,rxqualLimitUL_Prof0_3tsl,rxqualLimitUL_Prof0_4tsl,rxqualLimitUL_Prof1_2tsl,rxqualLimitUL_Prof1_3tsl,rxqualLimitUL_Prof1_4tsl,rxqualLimitUL_Prof2_3tsl,rxqualLimitUL_Prof2_4tsl,sacchRepeatWindow,saicDlCIOffset,schedStepSizeDlHighPrior,schedStepSizeDlLowPrior,schedStepSizeDlNormPrior,schedStepSizeUlPrior1,schedStepSizeUlPrior2,schedStepSizeUlPrior3,schedStepSizeUlPrior4,schedulingWeight_backgroundARP1,schedulingWeight_backgroundARP2,schedulingWeight_backgroundARP3,schedulingWeight_interactive1ARP1,schedulingWeight_interactive1ARP2,schedulingWeight_interactive1ARP3,schedulingWeight_interactive2ARP1,schedulingWeight_interactive2ARP2,schedulingWeight_interactive2ARP3,schedulingWeight_interactive3ARP1,schedulingWeight_interactive3ARP2,schedulingWeight_interactive3ARP3,schedulingWeight_streamingARP1,schedulingWeight_streamingARP2,schedulingWeight_streamingARP3,sdcchAlLimit,signallingPointCodeIN0,signallingPointCodeIN1,signallingPointCodeNA0,signallingPointCodeNA1,slowAmrLaEnabled,supervisionPeriod,tchRateInternalHo,tchTransactionCount,terrUpdGuardTGprs,triggerMeasPeriod,variableDlStepSize,wcdmaRanSaiPenalty +BTS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,notAllowedAccessClasses,plmnPermitted,frequencyBandInUse,gprsMsTxPwrMaxCCH1x00,minMsTxPower,msTxPwrMaxCCH1x00,msTxPwrMaxGSM1x00,address,angle,cellType,insiteGateway,name,adaptiveLaAlgorithm,adminState,allowIMSIAttachDetach,amhLowerLoadThreshold,amhMaxLoadOfTgtCell,amhTrhoGuardTime,amhUpperLoadThreshold,amrConfFrCodecModeSet,amrConfFrDlThreshold1,amrConfFrDlThreshold2,amrConfFrDlThreshold3,amrConfFrHysteresis1,amrConfFrHysteresis2,amrConfFrHysteresis3,amrConfFrInitCodecMode,amrConfFrStartMode,amrConfFrUlThreshold1,amrConfFrUlThreshold2,amrConfFrUlThreshold3,amrConfHrCodecModeSet,amrConfHrDlThreshold1,amrConfHrDlThreshold2,amrConfHrDlThreshold3,amrConfHrHysteresis1,amrConfHrHysteresis2,amrConfHrHysteresis3,amrConfHrInitCodecMode,amrConfHrStartMode,amrConfHrUlThreshold1,amrConfHrUlThreshold2,amrConfHrUlThreshold3,amrHoFrInHoThrDlRxQual,amrHoFrThrDlRxQual,amrHoFrThrUlRxQual,amrHoHrInHoThrDlRxQual,amrHoHrThrDlRxQual,amrHoHrThrUlRxQual,amrPocFrPcLThrDlRxQual,amrPocFrPcLThrUlRxQual,amrPocFrPcUThrDlRxQual,amrPocFrPcUThrUlRxQual,amrPocHrPcLThrDlRxQual,amrPocHrPcLThrUlRxQual,amrPocHrPcUThrDlRxQual,amrPocHrPcUThrUlRxQual,antennaHopping,bsIdentityCodeBCC,bsIdentityCodeNCC,btsIsHopping,btsLoadInSeg,btsLoadThreshold,btsMeasAver,btsSpLoadDepTchRateLower,btsSpLoadDepTchRateUpper,callReestablishmentAllowed,cellBarQualify,cellBarred,cellId,cellLoadForChannelSearch,cellNumberInBtsHw,cellReselectHysteresis,cellReselectOffset,cellReselectParamInd,cnThreshold,dedicatedGPRScapacity,defaultGPRScapacity,directGPRSAccessBts,diversityUsed,dlNoiseLevel,drInUse,drMethod,dtxMode,earlySendingIndication,egprsEnabled,egprsInitMcsAckMode,egprsInitMcsUnAckMode,egprsLinkAdaptEnabled,egprsMaxBlerAckMode,egprsMaxBlerUnAckMode,egprsMeanBepOffset8psk,egprsMeanBepOffsetGmsk,emergencyCallRestricted,fddQMin,fddQOffset,gprsEnabled,gprsMsTxpwrMaxCCH,gprsNonBCCHRxlevLower,gprsNonBCCHRxlevUpper,gprsRxlevAccessMin,gsmPriority,hcsPriorityClass,hcsThreshold,hoppingMode,hoppingSequenceNumber1,hoppingSequenceNumber2,idleStateBcchAllocListId,inactEndTimeHour,inactEndTimeMinute,inactStartTimeHour,inactStartTimeMinute,inactWeekDays,csAckDl,csAckUl,csExtAckDl,csExtAckUl,csExtUnackDl,csExtUnackUl,csUnackDl,csUnackUl,initMcsExtAckMode,initMcsExtUnackMode,interferenceAveragingProcessAverPeriod,interferenceAveragingProcessBoundary0,interferenceAveragingProcessBoundary1,interferenceAveragingProcessBoundary2,interferenceAveragingProcessBoundary3,interferenceAveragingProcessBoundary4,interferenceAveragingProcessBoundary5,locationAreaIdLAC,locationAreaIdMCC,locationAreaIdMNC,lowPriorityThr,maioOffset,maioStep,masterBcf,maxGPRSCapacity,maxNumberOfRepetition,maxNumberRetransmission,maxQueueLength,maxTimeLimitDirectedRetry,measListUsedDuringMeas,measurementBCCHAllocation,minTimeLimitDirectedRetry,msMaxDistInCallSetup,msPriorityUsedInQueueing,msTxPwrMaxCCH,msTxPwrMaxGSM,multiBandCell,multiBandCellReporting,nbrOfSlotsSpreadTrans,newEstabCausesSupport,noOfBlocksForAccessGrant,noOfMFramesBetweenPaging,nonBCCHLayerOffset,nsei,nwName,pcuCsHopping,pcuCsNonHopping,pcuDlBlerCpHopping,pcuDlBlerCpNonHop,pcuDlLaRiskLevel,pcuUlBlerCpHopping,pcuUlBlerCpNonHop,pcuUlLaRiskLevel,penaltyTime,powerOffset,preferBCCHfreqGPRS2,prioritySearchThr,psei,qSearchI,qSearchP,queuePriorityNonUrgentHo,queuePriorityUsed,queueingPriorityCall,queueingPriorityHandover,raReselectHysteresis,rac,radioLinkTimeout,radioLinkTimeoutAmr,radiusExtension,reselectionAlgorithmHysteresis,rxLevAccessMin,sectorId,segmentId,segmentName,smsCbUsed,stircEnabled,tchRateIntraCellHo,temporaryOffset,throughputFactor_cs1cs4dlcs,throughputFactor_cs1cs4ulcs,throughputFactor_mcs1mcs4ulcs,throughputFactor_mcs1mcs9dlcs,throughputFactor_mcs1mcs9ulcs,timeHysteresis,timeLimitCall,timeLimitHandover,timerPeriodicUpdateMs,trxPriorityInTchAlloc,ulNoiseLevel,usedMobileAllocation,utranQualRxLevelMargin,utranThresholdReselection,wcdmaPriority +BTSSCL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,btsId,btsName,btsSyncMode,ext1ppsClkOutOn,ext2M048ClkInUse,ext2M048ClkOutOn,gpsCtrlBlockForCoLocatedBts,gpsInUse,holdOverModeUsed,rfSharingEnabled,syncPropagationEnabled,tdmSyncInUse +BTSSCW:FILENAME,DATETIME,VERSION,DISTNAME,MOID,a20WLicencesInUse,actDistributedSite15,actRfChaining,antLineSupervisionEnabled,antRxLevelMonitoringEnabled,antTiltSupportEnabled,btsConfiguration,btsId,btsName,cqiDefaultHsCellFach,ext2M048ClkInUse,extendedBtsSiteCapacity,fdeEnabled,gpsCtrlBlockForCoLocatedBts,gpsInUse,happyBitPingFiltUse,happyBitUphThreshold,hsdpa16QAMSupport,hsdpaBbResAllocation,hsdpaFairPacketSched,hsdpaSchedList_hsdpaThroughputStep_mod_sched,intShutdownInUse,iubClkInUse,maxIubDelayThreshold,midIubDelayThreshold,minIubDelayThreshold,numberOfBlindRepetitionHsCellFach,numberOfHSDPASet1,numberOfHSDPASet2,numberOfHSDPASet3,numberOfHSUPASet1,numberOfR99ChannelElements,qosSchedList_ccPolicy_id_weight,reservationPercentage,rncType,sharedHsdpaSheduler,singleCellInUse,actEthernetSec,assocMaxRetrans,ext2M048ClkOutOn,mainsPowerAlarmId,numOfLines,pathMaxRetrans,syncPropagationEnabled,aldSwDownloadEnabled +CABINET:FILENAME,DATETIME,VERSION,DISTNAME,MOID,cabinetType,locationName +CCFA:FILENAME,DATETIME,VERSION,DISTNAME,MOID,enableBundleUtlStatistics,ubrPlusEnabled,vccBundleEnabled +CERTH:FILENAME,DATETIME,VERSION,DISTNAME,MOID,btsCertificateUpdateTime,caCertificateUpdateTime,cmpServerIpAddress,cmpServerPort,crServerIpAddress,crServerPort,crlUpdatePeriod,CRLDPSource,CRLUsageEnabled,cmpDirectory +CESIF:FILENAME,DATETIME,VERSION,DISTNAME,MOID,cesMinUDPPort +CMOB:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,ACBarredListSystem,CMOBChangeOrigin,CellAccessRestriction,RestrictionGroupName,RestrictionGroupType,TrafficRestriction +COCO:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AAL2LossRatio,AAL2Multiplexing,AAL2MuxDelay,AAL2QueueHSDPAWithFC,AAL2QueueHSDPAWithoutFC,AAL2QueueHSUPA,AAL2QueueNRTDCHWithoutFC,AAL2QueueRTDCH,AAL2SignLinkTP_AAL2SigCDVT01Egr_AAL2SigCDVT01Ing_AAL2SigEarlyPacketDiscard_AAL2SigEgressMDCR_AAL2SigEgressUBRShare_AAL2SigIngressMDCR_AAL2SigIngressUBRShare_AAL2SigPCR01Egr_AAL2SigPCR01Ing_AAL2SigPartialPacketDiscard_AAL2SigServiceCategory_AAL2SignLinkATMIfId_AAL2SignLinkTPId_AAL2SignLinkVCI_AAL2SignLinkVPI,AAL2TP_AAL2PathId_AAL2PathType_AAL2SignLinkATMIfId_AAL2SignLinkVCI_AAL2SignLinkVPI_AAL2UPATMIfId_AAL2UPCDVT01Egr_AAL2UPCDVT01Ing_AAL2UPEgressMDCR_AAL2UPEgressUBRShare_AAL2UPIngressMDCR_AAL2UPIngressUBRShare_AAL2UPPCR01Egr_AAL2UPPCR01Ing_AAL2UPServiceCategory_AAL2UPUsage_AAL2UPVCI_AAL2UPVPI_COCOA2EA_VCCInBundle_WAMId,ATMEPProfileId,CNBAPCDVT01Egr,CNBAPCDVT01Ing,CNBAPEarlyPacketDiscard,CNBAPEgressMDCR,CNBAPEgressUBRShare,CNBAPIngressMDCR,CNBAPIngressUBRShare,CNBAPPCR01Egr,CNBAPPCR01Ing,CNBAPPartialPacketDiscard,CNBAPServiceCategory,CNBAPTPATMIfId,CNBAPVCI,CNBAPVPI,COCOChangeOrigin,CalculateCDVT,CreateATMTP,DNBAPTP_CControlPortID_DNBAPATMIfId_DNBAPCDVT01Egr_DNBAPCDVT01Ing_DNBAPEarlyPacketDiscard_DNBAPEgressMDCR_DNBAPEgressUBRShare_DNBAPIngressMDCR_DNBAPIngressUBRShare_DNBAPPCR01Egr_DNBAPPCR01Ing_DNBAPPartialPacketDiscard_DNBAPServiceCategory_DNBAPVCI_DNBAPVPI,GenerateAAL2Num,InternalHSDPAFCMethodBTS,VCCBundleParams_VCCBundleEBS_VCCBundleId_VCCBundlePCR,VPLTP_COCOVPI_VPLTPATMIfId_VPLTPCDVT01Egr_VPLTPEgressMDCR_VPLTPPCR01Egr_VPLTPServiceCategory_VPLTPTrafficShaping,WBTSId +CONNECTOR:FILENAME,DATETIME,VERSION,DISTNAME,MOID,destinationConnector,destinationHolder,location +CTRLTS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,extCellTraceRep,extUeTraceRep,maxUeTraceSessions,netActIpAddr,omsTracePortNum,tceTracePortNum,cellTraceRepMode,ueTraceRepMode,taTracing +DAP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,bcsuID,firstTSL,lastTSL,logicalBCSUAddress,pcmCircuit_ID,pcuID,psei +ETHLK:FILENAME,DATETIME,VERSION,DISTNAME,MOID,acceptableFrameTypes,administrativeState,flushFdbOnLos,l2BurstSize,l2IngressRate,l2ShaperRate,linkFlappingPreventionTimer,linkOAMEnabled,macAddr,portDefaultPriority,portDefaultVlanId,speedAndDuplex,synchEMode,l2VlanIdList_highValue_lowValue,l2VlanIdList_highValue +FMCG:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AMRDirReCell,DLDPCHTxPwrClOffset,FMCGChangeOrigin,GSMcauseCPICHEcNo,GSMcauseCPICHrscp,GSMcauseTxPwrDL,GSMcauseTxPwrUL,GSMcauseUplinkQuality,GsmDLTxPwrThrAMR,GsmDLTxPwrThrCS,GsmDLTxPwrThrNrtPS,GsmDLTxPwrThrRtPS,GsmMaxMeasPeriod,GsmMeasAveWindow,GsmMeasRepInterval,GsmMinHoInterval,GsmMinMeasInterval,GsmMinSLHOInterval,GsmNcellSearchPeriod,GsmUETxPwrFilterCoeff,GsmUETxPwrThrAMR,GsmUETxPwrThrCS,GsmUETxPwrThrNrtPS,GsmUETxPwrThrRtPS,GsmUETxPwrTimeHyst,ISHOClcauseCPICHEcNo,ISHOClcauseCPICHrscp,ISHOClcauseTxPwrDL,ISHOClcauseTxPwrUL,MaxBSICIdentTime +FMCI:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,FMCIChangeOrigin,IFHOcauseCPICHEcNo,IFHOcauseCPICHrscp,IFHOcauseTxPwrDL,IFHOcauseTxPwrUL,IFHOcauseUplinkQuality,InterFreqDLTxPwrThrAMR,InterFreqDLTxPwrThrCS,InterFreqDLTxPwrThrNrtPS,InterFreqDLTxPwrThrRtPS,InterFreqMaxMeasPeriod,InterFreqMeasAveWindow,InterFreqMeasRepInterval,InterFreqMinHoInterval,InterFreqMinMeasInterval,InterFreqMinSLHOInterval,InterFreqNcellSearchPeriod,InterFreqUETxPwrFilterCoeff,InterFreqUETxPwrThrAMR,InterFreqUETxPwrThrCS,InterFreqUETxPwrThrNrtPS,InterFreqUETxPwrThrRtPS,InterFreqUETxPwrTimeHyst,MBLBMobilityOffset,MBLBMobilityRABComb +FMCS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,ActiveSetWeightingCoefficient,AdditionReportingInterval,AdditionTime,AdditionWindow,DSRepBasedSHO,DropReportingInterval,DropTime,DropWindow,EDCHAddEcNoOffset,EDCHRemEcNoOffset,EcNoFilterCoefficient,FMCSChangeOrigin,HHoEcNoCancel,HHoEcNoCancelTime,HHoEcNoThreshold,HHoEcNoTimeHysteresis,HHoRscpCancel,HHoRscpCancelTime,HHoRscpFilterCoefficient,HHoRscpThreshold,HHoRscpTimeHysteresis,MaxActiveSetSize,ReplacementReportingInterval,ReplacementTime,ReplacementWindow +FTM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,adaptationVersionMajor,locationName,softwareReleaseVersion,systemTitle,userLabel +FUUNIT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,functionalUnitType,supportedByUnit +GPC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,name,qcTputThrModes_egprsDlRlcAckMode,qcTputThrModes_egprsUlRlcAckMode,qcTputThrModes_gprsDlRlcAckMode,qcTputThrModes_gprsUlRlcAckMode +GTPU:FILENAME,DATETIME,VERSION,DISTNAME,MOID,gtpuN3Reqs,gtpuPathSupint,gtpuT3Resp,sgwIpAddressList_sgwIpAddress_transportNwId +HOC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,allAdjacentCellsAveraged,allUtranAdjAver,amhTrafficControlIUO,amhTrafficControlMCN,amhTrhoPbgtMargin,averagingWindowSizeAdjCell,ddeThresholdsLevNx,ddeThresholdsLevPx,ddeThresholdsLevRxLevel,ddeWindow,enaFastAveCallSetup,enaFastAveHo,enaFastAvePc,enaHierCellHo,enableIntraHoDl,enableIntraHoUl,enableMsDistance,enablePowerBudgetHo,enableSddchHandover,enableUmbrellaHo,erfdEnabled,erfdOver,failMoveThreshold,gsmPlmnPriorisation,hoAvaragingLevDLWeighting,hoAvaragingLevDlWindowSize,hoAveragingLevUlWeighting,hoAveragingLevUlWindowSize,hoAveragingQualDlWeighting,hoAveragingQualDlWindowSize,hoAveragingQualUlWeighting,hoAveragingQualUlWindowSize,hoPeriodPbgt,hoPeriodUmbrella,hoTLDlPx,hoTLDlRxLevel,hoTLUlNx,hoTLUlPx,hoTLUlRxLevel,hoTQDlNx,hoTQDlPx,hoTQDlRxQual,hoTQUlNx,hoTQUlPx,hoTQUlRxQual,hoThrInterferenceDlNx,hoThrInterferenceDlPx,hoThresholdsInterferenceDlRxLevel,hoThresholdsInterferenceULNx,hoThresholdsInterferenceULPx,hoThresholdsInterferenceULRxLevel,hoThresholdsLevDLNx,hoThresholdsRapidLevUl,hoThresholdsRapidLevUlN,interSystemDa,intraHoLoRxLevLimAmrHr,intraHoLoRxQualLimAmr,intraHoUpRxLevLimAmrHr,maxMsDistanceHoThreshold,minIntBetweenHoReq,minIntBetweenUnsuccHoAttempt,minIntUnsuccIsHo,minMsDistanceHoThreshold,modifiedAveWinNCell,modifiedNoz,msDHoThrParamN8,msDistanceAveragingParamHreqave,msDistanceHoThresholdParamMsRangeMax,msDistanceHoThresholdParamP8,multiratRep,noOfZeroResUtran,nonBcchLayerAccessThr,nonBcchLayerExitThr_nx,nonBcchLayerExitThr_px,numberOfZeroResults,qSearchC,rxLevel,utranAveragingNumber,utranHoThScTpdc,wcdmaRanCellPenalty,name +HOPG:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AdjgHCSpriority,AdjgHCSthreshold,AdjgMinRxLevNCHO,AdjgPenaltyTime,AdjgPenaltyTimeNCHO,AdjgPriorityCoverage,AdjgPrioritySLHO,AdjgQoffset1,AdjgQrxlevMin,AdjgRxLevMinHO,AdjgTempOffset1,HOPGChangeOrigin +HOPI:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AdjiEcNoMargin,AdjiHCSpriority,AdjiHCSthreshold,AdjiMinEcNo,AdjiMinEcNoNCHO,AdjiMinRSCP,AdjiMinRscpNCHO,AdjiPenaltyTime,AdjiPenaltyTimeNCHO,AdjiPlossMargin,AdjiPriorityCoverage,AdjiPriorityDCellCAHO,AdjiPriorityHSCAHO,AdjiPriorityMIMOCAHO,AdjiPriorityQuality,AdjiPrioritySLHO,AdjiQoffset1,AdjiQoffset2,AdjiQqualMin,AdjiQrxlevMin,AdjiTempOffset1,AdjiTempOffset2,BlindHORSCPThr,HOPIChangeOrigin +HOPL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AdjLAbsPrioCellReselec,AdjLFreqPriority,AdjLQqualminEUTRA,AdjLQrxlevminEUTRA,AdjLThreshigh,AdjLThreshigh2,AdjLThreslow,AdjLThreslow2,HOPLChangeOrigin +HOPS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AdjsHCSpriority,AdjsHCSthreshold,AdjsPenaltyTime,AdjsQoffset1,AdjsQoffset2,AdjsQqualMin,AdjsQrxlevMin,AdjsTempOffset1,AdjsTempOffset2,EcNoAveragingWindow,EnableInterRNCsho,EnableRRCRelease,HHOMarginAverageEcNo,HHOMarginPeakEcNo,HOPSChangeOrigin,HSDPAAvailabilityIur,HSUPAAvailabilityIur,ReleaseMarginAverageEcNo,ReleaseMarginPeakEcNo +HW:FILENAME,DATETIME,VERSION,DISTNAME,MOID,NEType,locationName,operationalState,systemTitle,vendorName,serialNumber,softwareReleaseVersion,systemReleaseVersion +IAIF:FILENAME,DATETIME,VERSION,DISTNAME,MOID,VCI,VPI,destIpAddr,interfaceNumber,unitNumber,atmIfId,encapsulationMethod,usage,vci,vpi +IBFD:FILENAME,DATETIME,VERSION,DISTNAME,MOID,alarmEnabled,bfdEnabled,dstIp,ipbrId,profileId,sessionType,srcIp +IBFP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,desiredMinTx,detectMult,dscp,profileName,requiredMinRx +IDNS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,cache,localDomain,roundRobin,serverIPAddr_addrValue_addrVer,serverIpAddress,serverIpAddress2 +IDSP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,dscpProfileName,profileList_dscpNumber_phb +IEIF:FILENAME,DATETIME,VERSION,DISTNAME,MOID,cir,confCost,helloInterval,ipAddr_localIpAddr_netmask,mtu,mtuMismatchDetection,ospfWithBfd,qosEnabled,retransInterval,routerDeadInterval,sbs,sbsTotal,shapedBandwidth,sir,sirTotal,trafficPathShapingEnable,transmitDelay,upperLayerShaping,vlanEnabled,vlanId,IPV4Addr_addrTypeIPV4_addrValueIPV4_destAddrIPV4_netmask,administrativeState,ifType,IPV4Addr_addrTypeIPV4_addrValueIPV4_netmask,localIpAddr,localIpv6Addr,localIpv6PrefixLength,netmask,wfqSchedQueueWeight +IFPG:FILENAME,DATETIME,VERSION,DISTNAME,MOID,transIfPuPtrs +IGIF:FILENAME,DATETIME,VERSION,DISTNAME,MOID,RncEthernetBw,ethInterfaceRate +IHCP:FILENAME,DATETIME,VERSION,DISTNAME,MOID +IICP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,dscp,echoReplyTmout,echoReqPeriod,maxLostPkt,payloadLength +IMAG:FILENAME,DATETIME,VERSION,DISTNAME,MOID,administrativeState,imaVersionId,interfaceNumber,interfaces,minNumLinks,unitNumber +INTP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,ntpServers +IPBR:FILENAME,DATETIME,VERSION,DISTNAME,MOID,committedBW,committedDcnBW,committedSigBW,ifcFlag,ipBasedRouteName,localMuxUDPPort,maxMuxPackets,ratio,remoteMuxUDPPort,routeBW,udpMuxDSCP,udpMuxEnabled +IPHB:FILENAME,DATETIME,VERSION,DISTNAME,MOID,phbProfileName,profileList_maxDrop_maxThreshold_minThreshold_phb_quePriority_queWeight_schedule_vlanPri,profileList_maxDrop_maxThreshold_minThreshold_phb_quePriority_schedule_vlanPri +IPNB:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,CNBAPICSUIndex,SCTPPortNumberCNBAP,DNBAP_CControlPortID_DNBAPICSUIndex_SCTPPortNumberDNBAP,IPBasedRouteId,IPNBChangeOrigin,MaxSCTPFrameSize,MinSCTPPortIub,NBAPDSCP,NodeBIPAddress,WBTSId +IPNO:FILENAME,DATETIME,VERSION,DISTNAME,MOID,bfdHoldUpTime,btsId,btsIpAddr,btsSubnetMacAddr,cesopsnIpAddress,disableFtp,enableSoam,flexBusIpAddr,fpLocalUdpPort,fpMuxAmount,fpMuxDelay,fpRemoteUdpPort,ftmIpAddr,ftmNetmask,iHSPAmode,icmpResponseEnabled,linkOAMLoopbackSupport,mtu,oamCir,oamTlvReply,omsTls,ret1IpAddr,rncIpAddr,transportMode,twampMessageRate,cPlaneIpAddress,mPlaneIpAddress,planeMacAddr,sPlaneIpAddress,twampFlag_twampIpAddress_twampReflFlag_udpEchoFlag,uPlane2IpAddress,uPlaneIpAddress,IPForwardingIPV4,defaultTTL,subnetsAreLocal,hostName,actFastIpRerouting,actIpTnlMeasure,actIpv6,actSeparationRanSharing,cPlaneIpv6Address,ftmBtsSubnetAddress,ftmBtsSubnetMask,mainTransportNwId,oamIpAddr,retransTimer,secOmsIpAddr,servingOms,servingOmsAdminSetting,twampReflectorPort,uPlaneIpv6Address,wfqSchedOamWeight +IPQM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,BackgroundTCToDSCP,ConversationalTCToDSCP,IPQMChangeOrigin,InteractiveTHP1TCToDSCP,InteractiveTHP2TCToDSCP,InteractiveTHP3TCToDSCP,StreamingTCToDSCP +IPRM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,RmExceptions_sourceTwoDiscr_userLabel +IPRO:FILENAME,DATETIME,VERSION,DISTNAME,MOID,addrValueIPV4,ifName,ipBasedRouteId,phbAF1,phbAF2,phbAF3,phbAF4,phbBE,phbEF +IPRT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,staticRoutes_bfdId_destIpAddr_gateway_netmask_preference +IPRTV6:FILENAME,DATETIME,VERSION,DISTNAME,MOID +IPSECC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,ipSecEnabled,ipSecEmBypassCtrlIpAddr,ipSecEmBypassEnabled,ipSecEmBypassPingTimer,ipSecEmBypassState +IQOS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,dspmProfileId,dspmProfileName,phbProfileId,phbProfileName,status +ISBFP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,desiredMinTx,detectMult,dscp,holdupTime,profileName,requiredMinRx +ITRKGRP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,trkGrpBoolVal,trkGrpOperation,trkType +ITRKOBJ:FILENAME,DATETIME,VERSION,DISTNAME,MOID +IUBSNT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,IPV4MaskLength,IPV4SubnetAddress,assocMaxRetrans,hbInterval,maxInitRetrans,pathMaxRetrans,rtoInitial,rtoMax,rtoMin,sackPeriod,validCookieLife +IUCS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AAL2PTSigForIuCS,CNDomainVersion,CNId,CSCNNRI_NRIMaxForCSCN_NRIMinForCSCN,CSFlexiIuWeight,DefaultCN,IUCSChangeOrigin,IUOIdentifier,IuState,MinUDPPortCS,NetworkInd,RelocationSupport,RtcpActivation,SignPointCode,TRafC,TRatC,TigOR,TinTR +IUCSIP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,DestIPAddressCS,IPBasedRouteIdCS,IPNetmaskCS,IPQMIdCS,IUCSIPChangeOrigin +IUO:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,CSCNDRXLength,CS_T3212,IUOChangeOrigin,IuBarringDelayTimerCS,IuBarringDelayTimerPS,IuBarringRecoveryGroupCS,IuBarringRecoveryGroupPS,IuBarringRecoveryTimerCS,IuBarringRecoveryTimerPS,IubTransportSharingInd,NRILengthForCSCN,NRILengthForPSCN,NullNRIForCSPool,NullNRIForPSPool,OperatorWeight,MCC,MNC,MNCLength,PSCNDRXLength,PS_NMO +IUPS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,CNDomainVersion,CNId,CellFACHRelocSupport,DefaultCN,IUOIdentifier,IUPSChangeOrigin,IuState,NetworkInd,PSCNNRI_NRIMaxForPSCN_NRIMinForPSCN,PSFlexiIuWeight,RelocationSupport,SignPointCode,TDataFwd,TRafC,TRatC,TigOR,TinTR +IUPSIP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,DestIPAddressPS,IPBasedRouteIdPS,IPNetmaskPS,IPQMIdPS,IUPSIPChangeOrigin +IUR:FILENAME,DATETIME,VERSION,DISTNAME,MOID,NeighbouringPLMNid_MCC_MNC,name,AAL2PTSigForIur,CellFACHnRncRelocSupport,DSCPHighIur,DSCPLowIur,DSCPMedDCHIur,DelayThresholdMaxIur,DelayThresholdMidIur,DelayThresholdMinIur,HSDPACCEnabledIur,HSDPAULCToDSCPIur,HSPAOverIur,HSUPACCIurEnabled,HSUPADLCToDSCPIur,IBTSSharing,IPBasedRouteIdIur,IURChangeOrigin,InterfaceMode,IurUPSupport,MaxFPDLFrameSizeIur,MaxIurNRTHSDSCHBitRate,MinUDPPortIur,NRncId,NRncNetworkInd,NRncRelocationSupport,NRncSignPointCode,NRncVersion,NeighbouringRNWElement,OverbookingSwitchIur,ProbabilityFactorMaxIur,RNSAPCongAndPreemption,ToAWEOffsetNRTDCHIP,ToAWEOffsetRTDCHIP,ToAWSOffsetNRTDCHIP,ToAWSOffsetRTDCHIP +IVIF:FILENAME,DATETIME,VERSION,DISTNAME,MOID,cESoPSN,cir,confCost,helloInterval,localIpAddr,mtuMismatchDetection,netmask,ospfWithBfd,qosEnabled,retransInterval,routerDeadInterval,sbs,sir,transmitDelay,vlanId,parentInterface,vid,localIpv6Addr,localIpv6PrefixLength,wfqSchedQueueWeight +L2SWI:FILENAME,DATETIME,VERSION,DISTNAME,MOID,defaultPCPUntagged,dscpMap_dscp_priorityQueue,enableLayer2Switching,l2PriorityQueueWeight2,l2PriorityQueueWeight3,l2PriorityQueueWeight4,portDefaultPriority,portDefaultVlanId,priorityQueueNonIP,priorityQueuePcp0,priorityQueuePcp1,priorityQueuePcp2,priorityQueuePcp3,priorityQueuePcp4,priorityQueuePcp5,priorityQueuePcp6,priorityQueuePcp7,qosClassification,vlanAwareSwitch,l2PriorityQueueWeight5,l2PriorityQueueWeight6,priorityQueueUntagged +LAPD:FILENAME,DATETIME,VERSION,DISTNAME,MOID,abisSigChannelSubSlot,bitRate,abisSigChannelTimeSlotPcm,abisSigChannelTimeSlotTsl,adminState,dChannelType,logicalBCSUAddress,name,parameterSetNumber,sapi,tei +LCELGW:FILENAME,DATETIME,VERSION,DISTNAME,MOID,accessBbCapacity,cellGroupName,dedicatedBbCapacity,hsupaBbDecodCapacity,hsupaBbMinimumUsers,lCelIdList,minNumHsfachUsers,sModId,shareOfHSDPAUser,shareOfHSUPALicences +LCELL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,resourceList_antlId_txRxUsage +LCELW:FILENAME,DATETIME,VERSION,DISTNAME,MOID,allowedCarrierList,cellRange,defaultCarrier,expirationTime,hspaMapping,intShutdownTimeout,maxCarrierPower,mimoType,rachCapacity,resourceList_antlId_txRxUsage,shutdownStepAmount,shutdownWindow,vamEnabled +LNADJ:FILENAME,DATETIME,VERSION,DISTNAME,MOID,guGroupIdList_mcc_mmeGroupId_mnc,name,mcc,mnc,targetBtsDn,adjEnbId,cPlaneIpAddr,cPlaneIpAddrCtrl,x2LinkStatus +LNADJL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,bcPlmnIdList_mcc_mnc,mcc,mnc,dlTrmBw,ecgiAdjEnbId,ecgiLcrId,fDlEarfcn,fUlEarfcn,phyCellId,sourceOfData,tac,ulTrmBw +LNADJW:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,mcc,mnc,targetCellDn,srvccHoInd,uTargetCid,uTargetFreq,uTargetLac,uTargetRac,uTargetRncId,uTargetScFdd +LNBTS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,mcc,mnc,name,act1xCsfb,act8EpsBearers,actCMAS,actCSFBRedir,actCellTrace,actCellTraceWithIMSI,actCiphering,actCompChecks,actConvVoice,actCplaneOvlHandling,actCsfbPsHoToUtra,actDLCAggr,actDistributedSite,actDualBand,actDualCarrier,actDualRx1xCsfb,actERabModify,actETWS,actEmerCallRedir,actEnhAcAndGbrServices,actFlexBbUsage,actGsmRedirWithSI,actHOtoHrpd,actHOtoWcdma,actHeNBMobility,actHighPrioServices,actHighRrc,actHoFromUtran,actIMSEmerSessR9,actIdleLB,actIfHo,actImmHRPD,actImmXrtt,actInterFreqLB,actIntraFreqLoadBal,actLPPaOtdoa,actLTES1Ho,actLocRep,actMDTCellTrace,actMFBI,actMultBearers,actMultGbrBearers,actNonGbrServiceDiff,actOTNRecovery,actOperatorQCI,actOperatorQCIGBR,actOptMmeSelection,actPdcpRohc,actRIMforGSM,actRedirect,actRfChaining,actS1Flex,actS1OlHandling,actSelMobPrf,actSrvccToGsm,actSrvccToWcdma,actSubscriberTrace,actUeBasedAnrInterFreqLte,actUeBasedAnrIntraFreqLte,actUeBasedAnrUtran,actUlCoMp,actZUC,acteNACCtoGSM,amRlcPBTab1dlPollByte,amRlcPBTab1ueCategory,amRlcPBTab1ulPollByte,amRlcPBTab2dlPollByte,amRlcPBTab2ueCategory,amRlcPBTab2ulPollByte,amRlcPBTab3dlPollByte,amRlcPBTab3ueCategory,amRlcPBTab3ulPollByte,amRlcPBTab4dlPollByte,amRlcPBTab4ueCategory,amRlcPBTab4ulPollByte,amRlcPBTab5dlPollByte,amRlcPBTab5ueCategory,amRlcPBTab5ulPollByte,anrIfTRSC,anrOmExtEnable,anrRobLevel,caMinDlAmbr,eea0,eea1,eea2,eea3,congWeightAlg,defProfIdxAM,defProfIdxUM,enableAutoLock,enableGrflShdn,enbName,etwsPrimNotifBcDur,hpsSessArpMax,hpsSessArpMin,eia0,eia1,eia2,eia3,keyRefrMarg,maxNumOfLnadjLimit,maxNumPreEmptions,maxNumX2LinksIn,maxNumX2LinksOut,minNotActivatedUtraRSCFS,moProfileSelect,nRimRirG,nullFallback,operationalState,otnRecoveryPeriod,actInHORed,actRrcConnRed,pbrNonGbr,pdcpProf1pdcpProfileId,pdcpProf1statusRepReq,pdcpProf1tDiscard,pdcpProf101pdcpProfileId,pdcpProf101rohcMaxCid,pdcpProf101snSize,pdcpProf101tDiscard,pdcpProf102pdcpProfileId,pdcpProf102snSize,pdcpProf102tDiscard,pdcpProf103pdcpProfileId,pdcpProf103snSize,pdcpProf103tDiscard,pdcpProf104pdcpProfileId,pdcpProf104snSize,pdcpProf104tDiscard,pdcpProf2pdcpProfileId,pdcpProf2statusRepReq,pdcpProf2tDiscard,pdcpProf3pdcpProfileId,pdcpProf3statusRepReq,pdcpProf3tDiscard,pdcpProf4pdcpProfileId,pdcpProf4statusRepReq,pdcpProf4tDiscard,pdcpProf5pdcpProfileId,pdcpProf5statusRepReq,pdcpProf5tDiscard,prioTopoHO,prohibitLBHOTimer,prohibitPsHOtoWcdma,pwsWithEmAreaId,qciTab1delayTarget,qciTab1drxProfileIndex,qciTab1dscp,qciTab1enforceTtiBundling,qciTab1lcgid,qciTab1maxGbrDl,qciTab1maxGbrUl,qciTab1pdcpProfIdx,qciTab1prio,qciTab1qci,qciTab1qciSupp,qciTab1resType,qciTab1rlcMode,qciTab1rlcProfIdx,qciTab1schedulBSD,qciTab1schedulPrio,qciTab2delayTarget,qciTab2drxProfileIndex,qciTab2dscp,qciTab2enforceTtiBundling,qciTab2l2OHFactorDL,qciTab2l2OHFactorUL,qciTab2lcgid,qciTab2maxGbrDl,qciTab2maxGbrUl,qciTab2pdcpProfIdx,qciTab2prio,qciTab2qci,qciTab2qciSupp,qciTab2resType,qciTab2rlcMode,qciTab2rlcProfIdx,qciTab2schedulBSD,qciTab2schedulPrio,qciTab3delayTarget,qciTab3drxProfileIndex,qciTab3dscp,qciTab3enforceTtiBundling,qciTab3l2OHFactorDL,qciTab3l2OHFactorUL,qciTab3lcgid,qciTab3maxGbrDl,qciTab3maxGbrUl,qciTab3pdcpProfIdx,qciTab3prio,qciTab3qci,qciTab3qciSupp,qciTab3resType,qciTab3rlcMode,qciTab3rlcProfIdx,qciTab3schedulBSD,qciTab3schedulPrio,qciTab4delayTarget,qciTab4drxProfileIndex,qciTab4dscp,qciTab4enforceTtiBundling,qciTab4l2OHFactorDL,qciTab4l2OHFactorUL,qciTab4lcgid,qciTab4maxGbrDl,qciTab4maxGbrUl,qciTab4pdcpProfIdx,qciTab4prio,qciTab4qci,qciTab4qciSupp,qciTab4resType,qciTab4rlcMode,qciTab4rlcProfIdx,qciTab4schedulBSD,qciTab4schedulPrio,qciTab5drxProfileIndex,qciTab5dscp,qciTab5enforceTtiBundling,qciTab5lcgid,qciTab5pdcpProfIdx,qciTab5prio,qciTab5qci,qciTab5qciSupp,qciTab5resType,qciTab5rlcMode,qciTab5rlcProfIdx,qciTab5schedulBSD,qciTab5schedulPrio,qciTab5schedulType,qciTab5schedulWeight,qciTab6drxProfileIndex,qciTab6dscp,qciTab6enforceTtiBundling,qciTab6lcgid,qciTab6pdcpProfIdx,qciTab6prio,qciTab6qci,qciTab6qciSupp,qciTab6resType,qciTab6rlcMode,qciTab6rlcProfIdx,qciTab6schedulBSD,qciTab6schedulPrio,qciTab6schedulWeight,qciTab7drxProfileIndex,qciTab7dscp,qciTab7enforceTtiBundling,qciTab7lcgid,qciTab7pdcpProfIdx,qciTab7prio,qciTab7qci,qciTab7qciSupp,qciTab7resType,qciTab7rlcMode,qciTab7rlcProfIdx,qciTab7schedulBSD,qciTab7schedulPrio,qciTab7schedulWeight,qciTab8drxProfileIndex,qciTab8dscp,qciTab8enforceTtiBundling,qciTab8lcgid,qciTab8pdcpProfIdx,qciTab8prio,qciTab8qci,qciTab8qciSupp,qciTab8resType,qciTab8rlcMode,qciTab8rlcProfIdx,qciTab8schedulBSD,qciTab8schedulPrio,qciTab8schedulWeight,qciTab9drxProfileIndex,qciTab9dscp,qciTab9enforceTtiBundling,qciTab9lcgid,qciTab9pdcpProfIdx,qciTab9prio,qciTab9qci,qciTab9qciSupp,qciTab9resType,qciTab9rlcMode,qciTab9rlcProfIdx,qciTab9schedulBSD,qciTab9schedulPrio,qciTab9schedulWeight,rachAccessForHoFromUtran,recoveryResetDelay,rlcProf1pollPdu,rlcProf1rlcProfileId,rlcProf1tPollRetr,rlcProf1tProhib,rlcProf1tReord,rlcProf101rlcProfileId,rlcProf101snFieldLengthDL,rlcProf101snFieldLengthUL,rlcProf101tReord,rlcProf102rlcProfileId,rlcProf102snFieldLengthDL,rlcProf102snFieldLengthUL,rlcProf102tReord,rlcProf103rlcProfileId,rlcProf103snFieldLengthDL,rlcProf103snFieldLengthUL,rlcProf103tReord,rlcProf104rlcProfileId,rlcProf104snFieldLengthDL,rlcProf104snFieldLengthUL,rlcProf104tReord,rlcProf2pollPdu,rlcProf2rlcProfileId,rlcProf2tPollRetr,rlcProf2tProhib,rlcProf2tReord,rlcProf3pollPdu,rlcProf3rlcProfileId,rlcProf3tPollRetr,rlcProf3tProhib,rlcProf3tReord,rlcProf4pollPdu,rlcProf4rlcProfileId,rlcProf4tPollRetr,rlcProf4tProhib,rlcProf4tReord,rlcProf5pollPdu,rlcProf5rlcProfileId,rlcProf5tPollRetr,rlcProf5tProhib,rlcProf5tReord,s1InducedCellDeactDelayTime,sCellActivationCyclePeriod,sCellActivationMethod,sCellDeactivationTimereNB,sCellpCellHARQFdbkUsage,shutdownStepAmount,shutdownWindow,supportedNumOfLnadj,tRimKaG,tRimPollG,tRimRirG,tS1RelPrepG,tS1RelPrepL,tS1RelPrepU,tagMaxAM,tagMaxUM,timDelACContPreempt,ttiBundlingDuringHoMeas,txPathFailureMode,ulpcRssiMaxIAw,voiceSuppMatchInd +LNCEL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,deploymentType,furtherPlmnIdL_mcc_mnc_cellReserve,mcc,mnc,name,a1TimeToTriggerDeactInterMeas,a2TimeToTriggerActGERANMeas,a2TimeToTriggerActHrpdMeas,a2TimeToTriggerActInterFreqMeas,a2TimeToTriggerActWcdmaMeas,a2TimeToTriggerRedirect,a3Offset,a3ReportInterval,a3TimeToTrigger,a5ReportInterval,a5TimeToTrigger,actDlsOldtc,actDlsVoicePacketAgg,actDrx,actFastMimoSwitch,actLdPdcch,actModulationSchemeUL,actNoIntraBandIFMeasurements,actOlLaPdcch,actOtdoa,actPrsTxDiv,actPuschMask,actRepeaterMode,actSixIfMeasurements,actSmartDrx,actSuperCell,actTtiBundling,actUlGrpHop,actUlLnkAdp,actUlpcMethod,addAUeRrHo,addAUeTcHo,addEmergencySessions,addGbrTrafficRrHo,addGbrTrafficTcHo,addNumDrbRadioReasHo,addNumDrbTimeCriticalHo,addNumQci1DrbRadioReasHo,addNumQci1DrbTimeCriticalHo,addSpectrEmi,administrativeState,anrUtraRscpThres,applyOutOfSyncState,blankedPucch,tC2KMeasReport,tC2KRelocPrep,tC2kRelocExec,tULHOPrepTransfer,celResTiFHM,celResTiFMM,cellBarred,cellCapClass,cellIndOffServ,cellName,cellReSelPrio,cellResourceSharingMode,cellSelectionInfoV920qQualMinR9,cellSrPeriod,cellType,cqiAperEnable,cqiAperMode,cqiPerNp,cqiPerSbCycK,cqiPerSimulAck,dFpucchF1,dFpucchF1b,dFpucchF2,dFpucchF2a,dFpucchF2b,dSrTransMax,defPagCyc,deltaMargin,deltaPreMsg3,deltaPucchShift,deltaTfEnabled,dl64QamEnable,dlCellPwrRed,dlChBw,dlInterferenceEnable,dlInterferenceLevel,dlInterferenceModulation,dlMimoMode,dlOlqcEnable,dlPathlossChg,dlPcfichBoost,dlPhichBoost,dlRsBoost,dlTargetBler,dlamcCqiDef,dlamcEnable,dlpcMimoComp,dlsDciCch,dlsFdAlg,dlsOldtcTarget,dlsUsePartPrb,drxApplyDeviceType,drxProfile1drxProfileIndex,drxProfile1drxProfilePriority,drxProfile101drxInactivityT,drxProfile101drxLongCycle,drxProfile101drxOnDuratT,drxProfile101drxProfileIndex,drxProfile101drxProfilePriority,drxProfile101drxRetransT,drxProfile102drxInactivityT,drxProfile102drxLongCycle,drxProfile102drxOnDuratT,drxProfile102drxProfileIndex,drxProfile102drxProfilePriority,drxProfile102drxRetransT,drxProfile103drxInactivityT,drxProfile103drxLongCycle,drxProfile103drxOnDuratT,drxProfile103drxProfileIndex,drxProfile103drxProfilePriority,drxProfile103drxRetransT,drxProfile2drxInactivityT,drxProfile2drxLongCycle,drxProfile2drxOnDuratT,drxProfile2drxProfileIndex,drxProfile2drxProfilePriority,drxProfile2drxRetransT,drxProfile3drxInactivityT,drxProfile3drxLongCycle,drxProfile3drxOnDuratT,drxProfile3drxProfileIndex,drxProfile3drxProfilePriority,drxProfile3drxRetransT,drxProfile4drxInactivityT,drxProfile4drxLongCycle,drxProfile4drxOnDuratT,drxProfile4drxProfileIndex,drxProfile4drxProfilePriority,drxProfile4drxRetransT,drxProfile5drxInactivityT,drxProfile5drxLongCycle,drxProfile5drxOnDuratT,drxProfile5drxProfileIndex,drxProfile5drxProfilePriority,drxProfile5drxRetransT,drxSmartProfile2drxInactivityT,drxSmartProfile2drxLongCycle,drxSmartProfile2drxOnDuratT,drxSmartProfile2drxProfileIndex,drxSmartProfile2drxProfilePriority,drxSmartProfile2drxRetransT,drxSmartProfile2drxShortCycle,drxSmartProfile2drxShortCycleT,drxSmartProfile2smartStInactFactor,drxSmartProfile3drxInactivityT,drxSmartProfile3drxLongCycle,drxSmartProfile3drxOnDuratT,drxSmartProfile3drxProfileIndex,drxSmartProfile3drxProfilePriority,drxSmartProfile3drxRetransT,drxSmartProfile3drxShortCycle,drxSmartProfile3drxShortCycleT,drxSmartProfile3smartStInactFactor,drxSmartProfile4drxInactivityT,drxSmartProfile4drxLongCycle,drxSmartProfile4drxOnDuratT,drxSmartProfile4drxProfileIndex,drxSmartProfile4drxProfilePriority,drxSmartProfile4drxRetransT,drxSmartProfile4drxShortCycle,drxSmartProfile4drxShortCycleT,drxSmartProfile4smartStInactFactor,drxSmartProfile5drxInactivityT,drxSmartProfile5drxLongCycle,drxSmartProfile5drxOnDuratT,drxSmartProfile5drxProfileIndex,drxSmartProfile5drxProfilePriority,drxSmartProfile5drxRetransT,drxSmartProfile5drxShortCycle,drxSmartProfile5drxShortCycleT,drxSmartProfile5smartStInactFactor,eCallAcBarred,eUlLaAtbPeriod,eUlLaBlerAveWin,eUlLaDeltaMcs,eUlLaLowMcsThr,eUlLaLowPrbThr,eUlLaPrbIncDecFactor,earfcnDL,earfcnUL,enableAmcPdcch,enableBetterCellHo,enableCovHo,enableDl16Qam,enableLowAgg,enablePcPdcch,eutraCelId,altitude,confidence,degreesOfLatitude,degreesOfLongitude,directionOfAltitude,latitudeSign,orientationOfMajorAxis,uncertaintyAltitude,uncertaintySemiMajor,uncertaintySemiMinor,fUlLAAtbTrigThr,filterCoeff,filterCoefficientCSFBCpichEcn0,filterCoefficientCSFBCpichRscp,filterCoefficientCpichEcn0,filterCoefficientCpichRscp,filterCoefficientRSRP,filterCoefficientRSRQ,filterCoefficientRSSI,gbrCongHandling,grpAssigPUSCH,harqMaxMsg3,harqMaxTrDl,harqMaxTrUl,harqMaxTrUlTtiBundling,hopModePusch,tC2KRelocOverallHrpd,tC2KRelocPrepHrpd,tUlHoPrepTransferHrpd,hysA3Offset,hysThreshold2GERAN,hysThreshold2Hrpd,hysThreshold2InterFreq,hysThreshold2Wcdma,hysThreshold2a,hysThreshold3,hysThreshold4,iFLBBearCheckTimer,iFLBHighLoadGBRDL,iFLBHighLoadNonGBRDL,iFLBHighLoadPdcch,iFLBNomNumPrb,iFLBRetryTimer,iFLBTargetLoadGBRDL,iFLBTargetLoadNonGBRDL,iFLBTargetLoadPdcch,idleLBCelResWeight,idleLBPercentageOfUes,ilReacTimerUl,inactivityTimer,iniMcsDl,iniMcsUl,iniPrbsUl,intrFrqCelRes,intraPresAntP,lcrId,loadBalancingProfile,lowerMarginCIO,maxBitrateDl,maxBitrateUl,maxCrPgDl,maxCrRa4Dl,maxCrRaDl,maxCrSibDl,maxGbrTrafficLimit,maxNrSymPdcch,maxNumActDrb,maxNumActUE,maxNumCaConfUeDc,maxNumQci1Drb,maxNumRrc,maxNumRrcEmergency,maxNumUeDl,maxNumUeUl,mbrSelector,measQuantityCSFBUtra,measQuantityUtra,mimoClCqiThD,mimoClCqiThU,mimoClRiThD,mimoClRiThU,mimoOlCqiThD,mimoOlCqiThU,mimoOlRiThD,mimoOlRiThU,minBitrateDl,minBitrateUl,mobStateParamNCelChgHgh,mobStateParamNCelChgMed,mobStateParamTEval,mobStateParamTHystNorm,modPeriodCoeff,n1PucchAn,n310,n311,nCqiRb,offsetFreqIntra,operationalState,p0NomPucch,p0NomPusch,pMax,pagingNb,pdcchAggDefUe,pdcchAggMsg4,pdcchAggPaging,pdcchAggPreamb,pdcchAggRaresp,pdcchAggSib,pdcchAlpha,pdcchCqiShift,pdcchHarqTargetBler,pdcchUlDlBal,periodicCqiFeedbackType,activateMeas,measurementType,reportAmount,reportInterval,phichDur,phichRes,phyCellId,prachCS,prachConfIndex,prachFreqOff,prachHsFlag,prachPwrRamp,preambTxMax,primPlmnCellres,prsConfigurationIndex,prsMutingInfo,prsMutingInfoPatternLen,prsNumDlFrames,prsPowerBoost,pucchNAnCs,puschAckOffI,puschCqiOffI,puschRiOffI,qHyst,qQualMinR9,qrxlevmin,qrxlevminintraF,raContResoT,raLargeMcsUl,raMsgPoffGrB,raNondedPreamb,raPreGrASize,raRespWinSize,raSmallMcsUl,raSmallVolUl,rand,rcAmbrMgnDl,rcAmbrMgnUl,rcEnableDl,rcEnableUl,redBwEnDl,redBwMaxRbDl,redBwMaxRbUl,redBwMinRbUl,redBwRpaEnUl,riEnable,riPerM,riPerOffset,rootSeqIndex,a1ReportInterval,a2TimeToTriggerMobRsrq,hysThreshold2MobRsrq,threshold2MobRsrq,threshold2aRsrq,a2TimeToTriggerRedirectRsrq,hysThreshold4Rsrq,threshold4Rsrq,rttCellIdInfo,rttCsfbType,sIntraSearchPR9,sIntraSearchQR9,sIntrasearch,sNonIntraSearchPR9,sNonIntraSearchQR9,sNonIntrsearch,siWindowLen,sib2SchedulingsiMessagePeriodicity,sib2SchedulingsiMessageRepetition,sib2SchedulingsiMessageSibType,sib3SchedulingsiMessagePeriodicity,sib3SchedulingsiMessageRepetition,sib3SchedulingsiMessageSibType,sibSchedulingList_siMessagePeriodicity_siMessageRepetition_siMessageSibType,nCellChgHigh,nCellChgMed,qHystSfHigh,qHystSfMed,tEvaluation,tHystNormal,srbSchedWeightDl,srbSchedWeightUl,srsPwrOffset,stInactFactor,syncSigTxMode,t300,t301,t302,t304InterRAT,t304InterRATGsm,t304IntraLte,t304eNaccGsm,t310,t311,t320,tExtendedWait,tPageCorrInt,tPeriodicBsr,tPeriodicPhr,tProhibitPhr,tReTxBsrTime,tReselEutr,tStoreUeCntxt,taMaxOffset,taTimer,taTimerMargin,tac,threshSrvLow,threshold1,threshold2GERAN,threshold2Hrpd,threshold2InterFreq,threshold2Wcdma,threshold2a,threshold3,threshold3a,threshold4,timeToTriggerSfHigh,timeToTriggerSfMedium,ttiBundlingBlerTarget,ttiBundlingBlerThreshold,ttiBundlingSinrThreshold,ulChBw,ulCombinationMode,ulRsCs,ulTargetBler,ulamcAllTbEn,ulamcSwitchPer,ulatbEventPer,ulpcAlpha,p0NomPuschIAw,ulpcCEBalanceIAw,ulpcMinQualIAw,ulpcMinWaitForPc,ulpcRefPwrIAw,ulpcIniPrePwr,ulpcLowlevCch,ulpcLowqualCch,ulpcUplevCch,ulpcUpqualCch,ulpcLowlevSch,ulpcLowqualSch,ulpcUplevSch,ulpcUpqualSch,ulpcRarespTpc,ulpcReadPeriod,ulsFdPrbAssignAlg,ulsMaxPacketAgg,ulsMinRbPerUe,ulsMinTbs,ulsSchedMethod,deltaFPucchF1bCSr10,deltaFPucchF3r10,upperMarginCIO +LNHOW:FILENAME,DATETIME,VERSION,DISTNAME,MOID,b1ThresholdCSFBUtraEcn0,b1ThresholdCSFBUtraRscp,b1TimeToTriggerCSFBUtraMeas,b2Threshold1Utra,b2Threshold2UtraEcn0,b2Threshold2UtraRscp,b2TimeToTriggerUtraMeas,hysB1ThresholdCSFBUtra,hysB2ThresholdUtra,maxNumCsfbTargets,offsetFreqUtra,reportIntervalUtra,utraCarrierFreq +LNMME:FILENAME,DATETIME,VERSION,DISTNAME,MOID,accMmePlmnsList_mcc_mnc,administrativeState,ipAddrPrim,ipAddrSec,relMmeCap,s1LinkStatus,transportNwId +LNREL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,mcc,mnc,cellIndOffNeigh,ecgiAdjEnbId,ecgiLcrId,handoverAllowed,nrControl,nrStatus +LTAC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,tacLimitGbrEmergency,tacLimitGbrHandover,tacLimitGbrNormal,transportNwId +MAL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,frequency,frequencyBandInUse,address +MHA:FILENAME,DATETIME,VERSION,DISTNAME,MOID,active,aisgProtocol,alarmThresholdLevel,antBearing,antModel,antSerial,antlId,baseStationID,connection,downlinkDelay,gainResolution,hwVersion,installerID,lnaNumber,manufacturer,maxGain,mhaAisgModeEnabled,mhaAlarmDetection,mhaGain,mhaType,minGain,prodCode,releaseId3Gpp,scannedAntennaInterface,sectorID,serNum,substance,swVersion,tmaSubunitRxFreqBandMax,tmaSubunitRxFreqBandMin,tmaSubunitTxFreqBandMax,tmaSubunitTxFreqBandMin,tmaSubunitType,uplinkDelay,wmhConnector,installDate +MODULE:FILENAME,DATETIME,VERSION,DISTNAME,MOID,identificationCode,state,subrackSpecificType,userLabel,vendorName,serialNumber,version +MRBTS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,actSwMonitoring,autoConfBlocked,commissioningRequired,enAutoLicReq,resetToTestDedicated,sharedRfTechnologies,timeZone,unitList_primaryConnection_prodCode_unitName_unitNumber_variant,unitList_primaryConnection_prodCode_secondaryConnection_unitName_unitNumber_variant,name,actEthernetSec,cmSyncCheck,cmSyncCheckPeriod,configDataRevisionNumber,passUnitList_comment_name_serNum,passUnitList_comment_name_prodCode_serNum_version,passUnitList_comment_name_prodCode_serNum,passUnitList_comment_name_prodCode_version,passUnitList_name_prodCode_serNum_version,passUnitList_name,passUnitList_comment_name,passUnitList_comment_name_prodCode,passUnitList_name_prodCode_serNum +MTRACE:FILENAME,DATETIME,VERSION,DISTNAME,MOID,eutranTraceIdMcc,eutranTraceIdMnc,traceId,trcRecSessionRef,cellId,cellMaxActiveUEsTraced,cellTrcMode,cellTaTracing,tceCellTracePortNum,tceIpAddress,traceRrcMsgCategory,traceRrcNonUeSpecMsgList,traceRrcSetting,traceRrcUeSpecMsgList,traceS1MsgCategory,traceS1NonUeSpecMsgList,traceS1Setting,traceS1UeSpecMsgList,traceX2MsgCategory,traceX2NonUeSpecMsgList,traceX2Setting,traceX2UeSpecMsgList +NSE:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,pcuCapacity,localUdpPort,nseType,psei +NSVL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,dataWeight,ipAddressValue,ipAddressVersion,localUdpPort,nsEntityId,nsVirtualConnectionName,preconfSgsnIpEpInd,psei,signWeight,udpPort +OAMPRF:FILENAME,DATETIME,VERSION,DISTNAME,MOID,activeMode,alarmClearanceDelay,efEventThreshold,efEventWindow,efpEventThreshold,efpEventWindow,efssEventThreshold,efssEventWindow,eventRepetition,eventSupport,linkOAMProfileName,loopBackTime,loopbackSupported,testFrameRate,testFrameSize +OSPFV2:FILENAME,DATETIME,VERSION,DISTNAME,MOID,confPref,ospfEnabled,ospfRouterId,refBandwidth,spfDelay,spfHoldTime,spfMaxHoldTime +PCM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,name +PCU:FILENAME,DATETIME,VERSION,DISTNAME,MOID,abisInType,bcsuID,gbIfType,pcuAbisConnectionType,pcuID,pcuObjectState,piuType,psei +PISCHDLITEM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,ActionMode,NEList_BaseId,PIObjects,PlanName,StartDate,StopDate,periods_day_duration_hour_interval_minute,priority,scheduleIdentifier +PMCADM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,reportingIntervalPm +PMRNL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,mtCellAvailability,mtCellLoad,mtCellRes,mtCellThruput,mtEPSBearer,mtInterSysHo,mtInterSysHoEhrpdBc,mtInterSysHoGsmNb,mtInterSysHoUtranNb,mtIntereNBHo,mtIntraeNBHo,mtLTEHo,mtPowQualDL,mtPowQualUL,mtQoS,mtRRC,mtRadBearer,mtS1AP,mtTranspLoad,mtUEandServiceDiff,mtUEstate,mtX2AP,mteNBload,mtintraLTEHoNb +PMSCHDLS:FILENAME,DATETIME,VERSION,DISTNAME,MOID +PMTNL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,lte_ETHIF_Stats_Interval,lte_Ethernet_Link_Interval,lte_IPSec_Interval,lte_IP_Filtering_Interval,lte_IP_Stats_Interval,lte_PHB_Stats_Interval,lte_TAC_Statistics_Interval,lte_TOP_FreqSync_Stats_Interval,lte_TOP_PhaseSync_Stats_Interval,lte_TWAMP_Stats_Interval,lte_VLAN_IP_Stats_Interval,lte_VLAN_PHB_Stats_Interval,lte_VLAN_Stats_Interval +POC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,alpha,bepPeriod,bsTxPwrMax,bsTxPwrMax1x00,bsTxPwrMin,enableAla,gamma,maxPwrCompensation,minIntBetweenAla,pcALDlWeighting,pcALDlWindowSize,pcALUlWeighting,pcALUlWindowSize,pcAQLDlWeighting,pcAQLDlWindowSize,pcAQLUlWeighting,pcAQLUlWindowSize,pcControlEnabled,pcControlInterval,pcIncrStepSize,pcLTLevDlNx,pcLTLevDlPx,pcLTLevUlNx,pcLTLevUlPx,pcLTQual144Nx,pcLTQual144Px,pcLTQual144RxQual,pcLTQualDlNx,pcLTQualDlPx,pcLTQualDlRxQual,pcLTQualUlNx,pcLTQualUlPx,pcLTQualUlRxQual,pcLowerThresholdsLevDLRxLevel,pcLowerThresholsLevULRxLevel,pcRedStepSize,pcUTLevDlNx,pcUTLevDlPx,pcUTLevUlNx,pcUTLevUlPx,pcUTQualDlNx,pcUTQualDlPx,pcUTQualDlRxQual,pcUTQualUlNx,pcUTQualUlPx,pcUTQualUlRxQual,pcUpperThresholdsLevDLRxLevel,pcUpperThresholdsLevULRxLevel,powerDecrQualFactor,powerLimitAla,pwrDecrLimitBand0,pwrDecrLimitBand1,pwrDecrLimitBand2,tAvgT,tAvgW,name +PPTT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,administrativeState,interfaceNumber,pdhLbo,pdhLineType,unitNumber +PWNE:FILENAME,DATETIME,VERSION,DISTNAME,MOID,bfdTimer_bfdDetectMult_desiredMinTxIntvl_requiredMinRxIntvl,cwEnable +QOS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,perHopBehaviourWeightList_assuredForwardingClass1_assuredForwardingClass2_assuredForwardingClass3_assuredForwardingClass4_bestEffort,trafficTypesMap_dscpList_pHB_trafficType_vlanPrio,trafficTypesMap_pHB_trafficType_vlanPrio,dscpMap_dscp_pHB_vlanPrio,enablePhbCounters,assuredForwardingClass1,assuredForwardingClass2,assuredForwardingClass3,assuredForwardingClass4,bestEffort,sseDscpOverwrite,trafficTypesMap_dscp_trafficType +RA:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,nseiList,routingAreaIdLac,routingAreaIdMcc,routingAreaIdMnc,routingAreaIdRac +REDRT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,addGsmSIToRedirMsg,csFallBPrio,emerCallPrio,redirFreqUtra,redirRat,redirectPrio +RMOD:FILENAME,DATETIME,VERSION,DISTNAME,MOID,climateControlProfiling,connectionList_linkId_positionInChain_sModId,moduleLocation,prodCode,radioSiteId,serNum,linkSpeed +RNAC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AMRLoadTxPower,AMRNumofReconf,AMRwinSizeSCload,AdjustmentPeriod,AdjustmentRatio,BitRateSetPSNRT,DCHSlopeOfTheCurve,DLInLoopPCStepSizeCPC,DLLoadSource,DLmaxBitRateSF128,DLmaxBitRateSF16,DLmaxBitRateSF256,DLmaxBitRateSF32,DLmaxBitRateSF64,DLpuncturingLimit,DownlinkInnerLoopPCStepSize,DynHSUPABLERAlgTrgTime,DynHSUPABLERBurstDataRx,DynHSUPABLERContDataRx10,DynHSUPABLERContDataRx2,DynHSUPABLERFrameWinSiz,DynHSUPABLERMaxRateThrB,DynHSUPABLERMaxRateThrC10,DynHSUPABLERMaxRateThrC2,DynHSUPABLERPeakRateRx,DynHSUPABLERThrBurstyTP,DynHSUPABurstyPeriod,EDCHSlopeOfTheCurve,EmeCallLevelValue,EmeCallPCIValue,EmeCallPVIValue,ExpectReorderingPDCP,FOLPCSIRTgtModInt,FOLPCStepSizSIRTgt,FmaxPeriodPDCP,FmaxTimePDCP,FreePtxSafetyMarginStr,PrachBetaC120,PrachBetaC15,PrachBetaC30,PrachBetaC60,PrachBetaD120,PrachBetaD15,PrachBetaD30,PrachBetaD60,HeaderCompressionMethod,L1BurstDataBLERTrgtEDCH,L1ContBLERTrgtEDCH10,L1ContBLERTrgtEDCH2,L1PeakRateBLERTrgtEDCH,LoadBasedAMRCodecMode,MaxAdjustmentStep,MaxFreezingTime,MaxHeaderPDCP,MaxNumberOfReAttemptsCong,MinPrefChange,NonTCPspacePDCP,PCPreamble,PCrangeDL,PagingRestrictionInd,PeriodULRCAMR,PrefSubtract,RAU_LAU_RestrictionInd,RNACChangeOrigin,RNARDSACCell_DCH,RNARDSACCell_PCH,RNARDSACGuardTime,RRCConnSetupMsgSize,SRBDelay,SignallingLinkInactivityTimer,StepSizeForDCHBLER,StepSizeForEDCHBLER,TCPspacePDCP,TDMultForHSDPAStreaming,TFDCHZeroBitRate,ULFastOLPCDTXthld,ULmaxBitRateSF128,ULmaxBitRateSF16,ULmaxBitRateSF256,ULmaxBitRateSF32,ULmaxBitRateSF64,ULmaxBitRateSF8,ULpuncturingLimit,UlScrCodeMin,UpLinkInitialTransmitPowerMode,UpLinkRecoveryPeriodPowerMode +RNC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,ActivePRNC,AlarmSetforWCELBLINIT,CBCSourceIPAddress,CSAttachDetachAllowed,CommonMCC,CommonMNC,CommonMNCLength,ConnectionRetryCounter,DLBLERConfInterval,ExtendedULDLactivationTmr,MACLogChPriSRB1,MACLogChPriSRB2,MACLogChPriSRB3,MaxAMRCapacityErl,MaxCarrierConnectivity,MaxIubPSThroughputMbps,N302,N304,N308,OMSBackupIpAddress,OMSIpAddress,PWSMDuration,PWSMExceededTrafficDur,PageRep1stInterv,PageRep2ndInterv,RANAPprocInitWait,RNCChangeOrigin,RNCIPAddress,RNCName,RTservicesForPS,RestrictionInterval,RncClientTLSMode,RncOptions,SIB11_priority,SIB15_priority,SIB18_priority,SIB19Priority,SIB1_priority,SIB2_priority,SIB3_priority,SIB5_priority,SecOMSIpAddress,ServingOMS,ServingOMSAdminSetting,T302,T304,T305,T307,T308,T309,T314,T316,T317,ToAWE_NRT_DCH_tti10,ToAWE_NRT_DCH_tti20,ToAWE_NRT_DCH_tti40,ToAWE_RT_DCH_tti10,ToAWE_RT_DCH_tti20,ToAWE_RT_DCH_tti40,ToAWE_Speech,ToAWS_NRT_DCH_tti10,ToAWS_NRT_DCH_tti20,ToAWS_NRT_DCH_tti40,ToAWS_RT_DCH_tti10,ToAWS_RT_DCH_tti20,ToAWS_RT_DCH_tti40,ToAWS_Speech,ULBLERConfInterval,UL_DLcapacityReqWait,WCELIdleAlarmTimeout +RNFC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AMRCodecSetEnabled,AMRWithEDCH,AMRWithHSDSCH,AutomDLPlanUpdEnabled,BTSLoadIndSel,CCCHforCUCallowed,CMmasterSwitch,CSCallSetUpFACHPCHImpr,CSFBEnabled,CUCforPCHtoDCHallowed,CVUserInactInSignConnRel,DCH00SuppOnIurEnabled,DCHBitRateBalancing,DCHScheOverIur,DCHtoPCHEnabled,DLOptimisationUsage,DynUsageHSDPAReturnChannel,EUTRAdetection,FRLCEnabled,FastDormancyEnabled,FastPCHSwitchEnabled,FasterOLPCEnabled,FemtoHandoverControl,FlexULRLCEnabled,FlexUpgrUsage,HLSModeSelection,HSDPA16KBPSReturnChannel,HSDPA48UsersEnabled,HSDPADynamicResourceAllocation,HSDPAMobility,HSPAInterRNCMobility,HSPAOverIurExt,HSUPADynBLEREnabled,IFHOOverIurEnabled,IFHOOverIurExt,ISHOCancellation,ISHOInIurMobility,IuPSrelWait3G2GMultiServ,LFDProfEnabled,MIBPLMNIdIncluded,MOCNenabled,MRABRelocVendSpCorr,PBSpolicy,PPACEnabled,PSOpThroUsage,PWSMDriftAllowed,PostVerifPeriodDLSynch,PowerBalancing,RABDRAEnabled,RABFailDueUESTCorr,RNFCChangeOrigin,RRCSetupCCHEnabledR99,SIBCapabilityCheck,SLHOCmAllowedNRT,SRVCCEnabled,SignConnActivitySupervision,SubscriberTrace,WBAMRCodecSetEnabled +RNHSPA:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,WeightForARP1,WeightForARP2,WeightForARP3,ATOSRBsOnHSPA,N10msCPCOptObjective,N10msCQIDTXTimer,N10msCQIFeedbackCPC,N10msInacThrUEDRXCycle,N10msInacThrUEDTXCycl2,N10msMACDTXCycle,N10msMACInacThr,N10msUEDPCCHburst1,N10msUEDPCCHburst2,N10msUEDRXCycle,N10msUEDTXCycle1,N10msUEDTXCycle2,N10msUEDTXLongPreamble,N2msCPCOptObjective,N2msCQIDTXTimer,N2msCQIFeedbackCPC,N2msInacThrUEDRXCycle,N2msInacThrUEDTXCycl2,N2msMACDTXCycle,N2msMACInacThr,N2msUEDPCCHburst1,N2msUEDPCCHburst2,N2msUEDRXCycle,N2msUEDTXCycle1,N2msUEDTXCycle2,N2msUEDTXLongPreamble,S10msCPCOptObjective,S10msCQIDTXTimer,S10msCQIFeedbackCPC,S10msInacThrUEDRXCycle,S10msInacThrUEDTXCycl2,S10msMACDTXCycle,S10msMACInacThr,S10msUEDPCCHburst1,S10msUEDPCCHburst2,S10msUEDRXCycle,S10msUEDTXCycle1,S10msUEDTXCycle2,S10msUEDTXLongPreamble,S2msCPCOptObjective,S2msCQIDTXTimer,S2msCQIFeedbackCPC,S2msInacThrUEDRXCycle,S2msInacThrUEDTXCycl2,S2msMACDTXCycle,S2msMACInacThr,S2msUEDPCCHburst1,S2msUEDPCCHburst2,S2msUEDRXCycle,S2msUEDTXCycle1,S2msUEDTXCycle2,S2msUEDTXLongPreamble,V10msCPCOptObjective,V10msCQIDTXTimer,V10msCQIFeedbackCPC,V10msInacThrUEDRXCycle,V10msInacThrUEDTXCycl2,V10msMACDTXCycle,V10msMACInacThr,V10msUEDPCCHburst1,V10msUEDPCCHburst2,V10msUEDRXCycle,V10msUEDTXCycle1,V10msUEDTXCycle2,V10msUEDTXLongPreamble,V2msCPCOptObjective,V2msCQIDTXTimer,V2msCQIFeedbackCPC,V2msInacThrUEDRXCycle,V2msInacThrUEDTXCycl2,V2msMACDTXCycle,V2msMACInacThr,V2msUEDPCCHburst1,V2msUEDPCCHburst2,V2msUEDRXCycle,V2msUEDTXCycle1,V2msUEDTXCycle2,V2msUEDTXLongPreamble,CPICHECNOSRBHSPA,CPICHECNOThreEDCH2MS,CPICHRSCPThreEDCH2MS,CPICHRSCPThreSRBHSDPA,DCellVsMIMOPreference,DiscardTimerHSCSVoice,EDCHCTSwitchGuardTimer,EDCHMACdflowtputStrTtT,EDCHMaxHARQReTxStr,EDCHMaxHarqReTxSRB,EDCHMaxHarqReTxSRB2MS,EDCHMaxNumberOfHARQReTx,EDCHQOSClasses,EnablDelayHHO,EnablDelayStand,FDPCHAllocMinInterval,FDPCHAndSRBOnHSPATC,FDPCHSetupEC,FactorEDCHMaxBRPSstream,FactorEDCHMaxBitRate,FactorEDCHMaxBitRate2NRT,FactorEDCHMaxBitRate3NRT,HSDPACPICHCTSRepPer,HSDPACPICHEcNoThreshold,HSDPACellChangeRepetitionTime,HSDPAChaTypeSwitchWindow,HSDPAMaxCellChangeRepetition,HSDPAPeakRateLimitRABMax,HSDPAPriority,HSDPARRCdiversity,HSDPASRBWindow,HSDSCHCTSwitchGuardTimer,HSDSCHGuardTimerLowThroughput,HSDSCHQoSclasses,NBRForPri0DL,NBRForPri0UL,NBRForPri10DL,NBRForPri10UL,NBRForPri11DL,NBRForPri11UL,NBRForPri12DL,NBRForPri12UL,NBRForPri1DL,NBRForPri1UL,NBRForPri2DL,NBRForPri2UL,NBRForPri3DL,NBRForPri3UL,NBRForPri4DL,NBRForPri4UL,NBRForPri5DL,NBRForPri5UL,NBRForPri6DL,NBRForPri6UL,NBRForPri7DL,NBRForPri7UL,NBRForPri8DL,NBRForPri8UL,NBRForPri9DL,NBRForPri9UL,HSPDSCHAdjustPeriod,HappyBitDelayConditionEDCH,HsdschGuardTimerHO,InacUserNbrXXXOverNRT,InacUsersOverloadFact,MACdflowthroughputRelThr,MACdflowthroughputTimetoTrigger,MACdflowtputStrTtT,MACdflowutilStrTtT,MEHCQIFeedbackCycle,MEHHSUPAUserIncr,MaxBitRateNRTMACDFlow,MaxCSDelayRNCETTI10,MaxCSDelayRNCETTI2,MaxCSDelayUE,MaxEHARQReTxCSAMR10,MaxEHARQReTxCSAMR2,MaxReWaitTime,MaxReWaitTime2msTTI,MaxReWaitTimeRT,MaxSetOfEDPDCHCSAMR10,MaxSetOfEDPDCHCSAMR2,NRTRBBRWithEDCHStr,PeriodicityForSI,PowerOffsetEHARQVoice,PowerOffsetForSI,RNHSPAChangeOrigin,SmartHSPATimeToTrigger,SmartHSPATputAveWin,T1HSCSVoice,TGPLAMRHSDPAInterFreq,TGPLHSDPAInterFreq,ThresholdMaxEDPDCHSR1920kbps,ThresholdMaxEDPDCHSR3840kbps,ThresholdMaxEDPDCHSR960kbps,UPResAllocInCellDCHWait,VCPHSDPAPrevDuration,VCPHSDPAUserIncr,WeightDCHBG,WeightDCHTHP1,WeightDCHTHP2,WeightDCHTHP3,WeightHSPABG,WeightHSPATHP1,WeightHSPATHP2,WeightHSPATHP3 +RNMOBI:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AnchorFmciIdentifier,AnchorFmcsIdentifier,AnchorHopiIdentifier,AnchorHopsIdentifier,CellReselectionObservingTime,DRRCForHSDPALayerServices,DirectedRRCForHSDPALayerEnhanc,DisablePowerInHSDPALayeringDecision,EcnoDifferenceThreshold,EnableULQualDetRep,FastDormOverCpcPri,FastUECancel,FastUEPeriod,FastUEThreshold,GANetwARFCN,GANetwBCC,GANetwNCC,GapPositionSingleFrame,GsmHandoverAMR,GsmHandoverCS,GsmHandoverNrtPS,GsmHandoverRtPS,HSCAHORabCombSupport,HSDPACPICHAveWindow,HSDPACPICHReportPeriod,HSDPACellChangeMinInterval,HSDPALayerLoadShareThreshold,HSDPASIRErrorAveWindow,HSDPASIRErrorFilterCoefficient,HSDPASIRErrorReportPeriod,HSDPASIRErrorServCell,HSDPASIRErrorTargetCell,HSDPAServCellWindow,HSPADRNCEcNoOffset,HSPADRNCSIRErrorOffset,IBTSRabCombSupport,LHOMinNrtDchAllocTime,LowerRxTxTimeDiff,MBLBGuardTimer,MaxCellReselections,MaxNumISHOClPerAS,MultipleBSICIdent,NCHOFilterCoeffComLoadMeasDRNCCell,NCHOHystComLoadMeasDRNCCell,NCHOThrComLoadMeasDRNCCell,PreferBandForLayering,RANAPCause1LoadHO,RANAPCause2LoadHO,RANAPCause3LoadHO,RANAPCause1ServHO,RANAPCause2ServHO,RANAPCause3ServHO,RNMOBIChangeOrigin,SLHOHandlingOfCellLoadMeasNotAct,SLHOProfileBackgroundPSNRTData,SLHOProfileConvCSSpeech,SLHOProfileConvCSTData,SLHOProfileConvPSRTData,SLHOProfileConvPSSpeech,SLHOProfileInteractivePSNRTData,SLHOProfileStreamCSNTData,SLHOProfileStreamPSRTData,SLHOUseBackgroundPSNRTData,SLHOUseConvCSSpeech,SLHOUseConvCSTData,SLHOUseConvPSRTData,SLHOUseConvPSSpeech,SLHOUseInteractivePSNRTData,SLHOUseStreamCSNTData,SLHOUseStreamPSRTData,ServBtwnHSDPALayers,ServicesToHSDPALayer,SmartLTELayeringPrevT,SmartLTELayeringServ,TGPLdoubleframeNRTPSgsm,TGPLdoubleframeNRTPSinterFreq,TGPLsingleframeAMRgsm,TGPLsingleframeAMRinterFreq,TGPLsingleframeCSgsm,TGPLsingleframeCSinterFreq,TGPLsingleframeNRTPSgsm,TGPLsingleframeNRTPSinterFreq,TGPLsingleframeRTPSgsm,TGPLsingleframeRTPSinterFreq,TRelocOverall,TRelocPrep,UEQualityRepInterv,UETxPowerMaxRef,ULQualDetRepThreshold,UpperRxTxTimeDiff +RNPS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,ActivationTimeOffset,CellDCHtestTmr,CrQueuingTimeDL,CrQueuingTimeUL,DCHUtilBelowDowngradeThr,DCHUtilHighAveWin,DCHUtilHighBelowNRTDataRateThr,DCHUtilHighTimeToTrigger,DCHUtilLowerAveWin128,DCHUtilLowerAveWin256,DCHUtilLowerAveWin32,DCHUtilLowerAveWin384,DCHUtilLowerAveWin64,DCHUtilLowerDowngradeThr128,DCHUtilLowerDowngradeThr256,DCHUtilLowerDowngradeThr32,DCHUtilLowerDowngradeThr384,DCHUtilLowerDowngradeThr64,DCHUtilLowerTimeToTrigger128,DCHUtilLowerTimeToTrigger256,DCHUtilLowerTimeToTrigger32,DCHUtilLowerTimeToTrigger384,DCHUtilLowerTimeToTrigger64,DCHUtilMeasGuardTime,DCHUtilUpperAveWin128,DCHUtilUpperAveWin256,DCHUtilUpperAveWin32,DCHUtilUpperAveWin384,DCHUtilUpperAveWin64,DCHUtilUpperDowngradeThr128,DCHUtilUpperDowngradeThr256,DCHUtilUpperDowngradeThr32,DCHUtilUpperDowngradeThr384,DCHUtilUpperDowngradeThr64,DCHUtilUpperTimeToTrigger128,DCHUtilUpperTimeToTrigger256,DCHUtilUpperTimeToTrigger32,DCHUtilUpperTimeToTrigger384,DCHUtilUpperTimeToTrigger64,DLOptimisationProhibitTime,DLOptimisationPwrOffset,FactorMinPBSinterval,InactDetForStreamingRB,IurPriority,MEHTVMPendingTime,PriForBackARP1,PriForBackARP2,PriForBackARP3,PriForConvOnHSPA,PriForIntSignaling,PriForIntTHP1ARP1,PriForIntTHP1ARP2,PriForIntTHP1ARP3,PriForIntTHP2ARP1,PriForIntTHP2ARP2,PriForIntTHP2ARP3,PriForIntTHP3ARP1,PriForIntTHP3ARP2,PriForIntTHP3ARP3,PriForSRBsOnHSPA,PriForStreamARP1,PriForStreamARP2,PriForStreamARP3,RNPSChangeOrigin,RTOverNRTPriThresholdARP1,RTOverNRTPriThresholdARP2,RTOverNRTPriThresholdARP3,SmartInactTimerFACH,SmartInactivityTimerDCH,ToCellFACHinTest,TrafVolThresholdDLHigh,TrafVolThresholdDLHighDCH128,TrafVolThresholdDLHighDCH16,TrafVolThresholdDLHighDCH256,TrafVolThresholdDLHighDCH32,TrafVolThresholdDLHighDCH64,TrafVolThresholdDLHighDCH8,TrafVolThresholdULHigh,TrafVolThresholdULHighDCH128,TrafVolThresholdULHighDCH16,TrafVolThresholdULHighDCH256,TrafVolThresholdULHighDCH32,TrafVolThresholdULHighDCH64,TrafVolThresholdULHighDCH8,TrafVolTimeToTriggerDL,TrafVolTimeToTriggerUL,ULLoadStateTTT +RNRLC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,AMRLCBufMaxOverbook2NRT,AMRLCBufMaxOverbook3NRT,AMRLCMaximumBufferUE100,AMRLCMaximumBufferUE1150,AMRLCMaximumBufferUE1250,AMRLCMaximumBufferUE150,AMRLCMaximumBufferUE1500,AMRLCMaximumBufferUE1800,AMRLCMaximumBufferUE1k,AMRLCMaximumBufferUE200,AMRLCMaximumBufferUE2300,AMRLCMaximumBufferUE2550,AMRLCMaximumBufferUE300,AMRLCMaximumBufferUE50,AMRLCMaximumBufferUE500,AMRLCMaximumBufferUE750,AMRLCmaximumBufferUE400,AMRLCOnDCHOfNRTPSCount,AMRLCOnDCHOfNRTPSFilterReTX,AMRLCOnDCHOfNRTPSMaxDAT,AMRLCOnDCHOfNRTPSMaxMRW,AMRLCOnDCHOfNRTPSMaxRST,AMRLCOnDCHOfNRTPSPeriodMax,AMRLCOnDCHOfNRTPSPeriodMin,AMRLCOnDCHOfNRTPSPollPDU,AMRLCOnDCHOfNRTPSPollSDU,AMRLCOnDCHOfNRTPSPollWindow,AMRLCOnDCHOfNRTPSTriggers,AMRLCOnDCHOfSRB136MaxDAT,AMRLCOnDCHOfSRB136PeriodMax,AMRLCOnDCHOfSRB136PeriodMin,AMRLCOnDCHOfSRB136PollPDU,AMRLCOnDCHOfSRB136PollSDU,AMRLCOnDCHOfSRB136PollWindow,AMRLCOnDCHOfSRB136Triggers,AMRLCOnDCHOfSRB34MaxDAT,AMRLCOnDCHOfSRB34PeriodMax,AMRLCOnDCHOfSRB34PeriodMin,AMRLCOnDCHOfSRB34PollPDU,AMRLCOnDCHOfSRB34PollSDU,AMRLCOnDCHOfSRB34PollWindow,AMRLCOnDCHOfSRB34Triggers,AMRLCOnDCHOfStreamCount,AMRLCOnDCHOfStreamDiscardTime,AMRLCOnDCHOfStreamFilterReTX,AMRLCOnDCHOfStreamMaxDAT,AMRLCOnDCHOfStreamMaxMRW,AMRLCOnDCHOfStreamMaxRST,AMRLCOnDCHOfStreamPeriodMax,AMRLCOnDCHOfStreamPeriodMin,AMRLCOnDCHOfStreamPollPDU,AMRLCOnDCHOfStreamPollSDU,AMRLCOnDCHOfStreamPollWindow,AMRLCOnDCHOfStreamTriggers,AMRLCOnEDCHOfNRTPSCount,AMRLCOnEDCHOfNRTPSMaxDAT,AMRLCOnEDCHOfNRTPSMaxMRW,AMRLCOnEDCHOfNRTPSMaxRST,AMRLCOnEDCHOfNRTPSPeriodMax,AMRLCOnEDCHOfNRTPSPeriodMin,AMRLCOnEDCHOfNRTPSPollPDU,AMRLCOnEDCHOfNRTPSPollSDU,AMRLCOnEDCHOfNRTPSPollWindow,AMRLCOnEDCHOfNRTPSTriggers,EDCHStrPSCount,EDCHStrPSDiscardTime,EDCHStrPSMaxDAT,EDCHStrPSMaxMRW,EDCHStrPSMaxRST,EDCHStrPSPeriodMax,EDCHStrPSPeriodMin,EDCHStrPSPollPDU,EDCHStrPSPollSDU,EDCHStrPSPollWindow,EDCHStrPSTriggers,AMRLCOnFACHOfPSMaxDAT,AMRLCOnFACHOfPSMaxMRW,AMRLCOnFACHOfPSMaxRST,AMRLCOnFACHOfPSPeriodMax,AMRLCOnFACHOfPSPeriodMin,AMRLCOnFACHOfPSPollPDU,AMRLCOnFACHOfPSPollSDU,AMRLCOnFACHOfPSPollWindow,AMRLCOnFACHOfPSTriggers,AMRLCOnFACHOfSRBMaxDAT,AMRLCOnFACHOfSRBPeriodMax,AMRLCOnFACHOfSRBPeriodMin,AMRLCOnFACHOfSRBPollPDU,AMRLCOnFACHOfSRBPollSDU,AMRLCOnFACHOfSRBPollWindow,AMRLCOnFACHOfSRBTriggers,AMRLCOnHSDSCHOfNRTPSCount,AMRLCOnHSDSCHOfNRTPSFilterReTX,AMRLCOnHSDSCHOfNRTPSMaxDAT,AMRLCOnHSDSCHOfNRTPSMaxMRW,AMRLCOnHSDSCHOfNRTPSMaxRST,AMRLCOnHSDSCHOfNRTPSPeriodMax,AMRLCOnHSDSCHOfNRTPSPeriodMin,AMRLCOnHSDSCHOfNRTPSPollPDU,AMRLCOnHSDSCHOfNRTPSPollSDU,AMRLCOnHSDSCHOfNRTPSPollWindow,AMRLCOnHSDSCHOfNRTPSTriggers,HSDSCHStrDiscardTime,HSDSCHStrPSCount,HSDSCHStrPSFilterReTX,HSDSCHStrPSMaxDAT,HSDSCHStrPSMaxMRW,HSDSCHStrPSMaxRST,HSDSCHStrPSPeriodMax,HSDSCHStrPSPeriodMin,HSDSCHStrPSPollPDU,HSDSCHStrPSPollSDU,HSDSCHStrPSPollWindow,HSDSCHStrPSTriggers,AMRLCRelatTXWindowRate1,AMRLCRelatTXWindowRate1Size,AMRLCRelatTXWindowRate2,AMRLCRelatTXWindowRate2Size,AMRLCRelatTXWindowRate3,AMRLCRelatTXWindowRate3Size,AMRLCRelatTXWindowRate4,AMRLCRelatTXWindowRate4Size,AMRLCRelatTXWindowRate5,AMRLCRelatTXWindowRate5Size,AMRLCRelatTXWindowRate6,AMRLCRelatTXWindowRate6Size,AMRLCRelatTXWindowRate7,AMRLCRelatTXWindowRate7Size,AMRLCRelatTXWindowRate8,AMRLCRelatTXWindowRate8Size,AMRLCRespTimeDCH10,AMRLCRespTimeDCH20,AMRLCRespTimeDCH40,AMRLCRespTimeDCHRevHSDSCH,AMRLCRespTimeRevEDCH,AMRLCRespTimeEDCH,AMRLCRespTimeFACHAndRACH,AMRLCRespTimeHSDSCHRevDCH,AMRLCRespTimeHSDSCHRevEDCH,AMRLCSRB3n4PeriodMax,AMRLCSRB3n4RespTime,AMRLCRespTimeSRBHSPA,AMRLCSRBHSPAMaxDAT,AMRLCSRBHSPAPeriodMax,AMRLCSRBHSPAPeriodMin,AMRLCSRBHSPAPollPDU,AMRLCSRBHSPAPollSDU,AMRLCSRBHSPAPollWindow,AMRLCSRBHSPATriggers,AMRLCTXWindowSizeSRB2,AMRLCTXWindowSizeSRB3,AMRLCTXWindowSizeSRB4,PDUSizeBitRateThr,PDUSizeCodeThreshold,PDUSizeSIRThr,RLCConfOptionFPS,RNRLCChangeOrigin,SDUdiscardModeRTPS,UMRLCEVoiceDiscardTime +RNTRM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,A2EA,Af122AMRDL,Af122AMRUL,Af59AMRDL,Af59AMRUL,Af144CSStreDL,Af144CSStreUL,Af576CSStreDL,Af576CSStreUL,Af64CSConDL,Af64CSConUL,Af128And136DCCHDL,Af128And136DCCHUL,Af16And17DCCHDL,Af16And17DCCHUL,Af32And34DCCHDL,Af32And34DCCHUL,AfFACHCCDL,AfFACHCIDL,AfFACHContUL,AfFACHSDL,AfFACHUDL,AfRACH208UL,AfRACHContDL,AfRTHSDPA,AfRTHSUPA,AfSRBOnHSDPA,AfSRBOnHSUPA,Af128NRTDCHDL,Af128NRTDCHUL,Af16NRTDCHDL,Af16NRTDCHUL,Af256NRTDCHDL,Af256NRTDCHUL,Af32NRTDCHDL,Af32NRTDCHUL,Af384NRTDCHDL,Af384NRTDCHUL,Af64NRTDCHDL,Af64NRTDCHUL,Af8NRTDCHDL,Af8NRTDCHUL,AfPCHContUL,AfPCHDL,Af128RTPSAMDL,Af128RTPSAMUL,Af128RTPSUMDL,Af128RTPSUMUL,Af16RTPSAMDL,Af16RTPSAMUL,Af16RTPSUMDL,Af16RTPSUMUL,Af256RTPSAMDL,Af256RTPSUMDL,Af32RTPSAMDL,Af32RTPSAMUL,Af32RTPSUMDL,Af32RTPSUMUL,Af64RTPSAMDL,Af64RTPSAMUL,Af64RTPSUMDL,Af64RTPSUMUL,Af8RTPSAMDL,Af8RTPSAMUL,Af8RTPSUMDL,Af8RTPSUMUL,DSCPBTSOMToBTS,DSCPBTSOMToOMS,DSCPForGTPSignalling,EchoRequestSending,HSDPAFlowControlLowThresholdDedicatedVCC,HSDPAFlowControlLowThresholdSharedVCC,HSDPAFlowControlTargetDelayDedicatedVCC,HSDPAFlowControlTargetDelaySharedVCC,IPStackErrorTimer,IuDATree,IubDATree,IurDATree,N3Requests,RNTRMChangeOrigin,RespSyncCounterIP,RespSyncModEnableIP,RespSyncTimerIP,T3Response,THP1DelaySensitivitySwitch,THP2DelaySensitivitySwitch,THP3DelaySensitivitySwitch,ToAWEOffsetForOverbook,ToAWSOffsetForOverbook,ULCACSwitch,UsedSRBALCSet +RSTP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,actRstp,bridgeForwardDelay,bridgeHelloTime,bridgeIdentifierPriority,bridgeMaxAge,forcedProtocolVersion,transmitHoldCount +SBR4:FILENAME,DATETIME,VERSION,DISTNAME,MOID,netmask,srcIPAddr,subnet +SCTP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,assocMaxRetrans,maxTimeSctpSetup,pathMaxRetrans,rtoMax,rtoMin,sctpHeartbeatInterval +SMLC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,name +SMOD:FILENAME,DATETIME,VERSION,DISTNAME,MOID,climateControlProfiling,extAlList_cancelDelay_descr_id_inUse_polarity_severity_startDelay,moduleLocation,prodCode,serNum,syncMaster,technology +SPTT:FILENAME,DATETIME,VERSION,DISTNAME,MOID +SRT4:FILENAME,DATETIME,VERSION,DISTNAME,MOID,dstIPAddr,netmask,subnet +SRTT:FILENAME,DATETIME,VERSION,DISTNAME,MOID +STPG:FILENAME,DATETIME,VERSION,DISTNAME,MOID,ssmSelExt2M,ssmSelPDH,ssmSelSyncE,ssmType,synchERegenOn,synchroSourceList_clockProtocol_interfaceNumber_priority_ssmAcceptanceLevel_ssmEnabled_ssmTimeout_unitNumber,synchroSourceList_clockProtocol_priority_ssmEnabled_ssmTimeout_unitNumber +STPORT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,disableStpParticipation,portNumber,portPathCost,portPriority +SUBMODULE:FILENAME,DATETIME,VERSION,DISTNAME,MOID,identificationCode,serialNumber,unitType,vendorName,version +SUBRACK:FILENAME,DATETIME,VERSION,DISTNAME,MOID,dateOfLastService,identificationCode,interchangeability,locationName,serialNumber,subrackType,version +SVTT:FILENAME,DATETIME,VERSION,DISTNAME,MOID +SYNC:FILENAME,DATETIME,VERSION,DISTNAME,MOID +TAC:FILENAME,DATETIME,VERSION,DISTNAME,MOID +TCSM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,cardConfiguration_cardName_cardNumber,pcmConfiguration_pcmNumber_pcmType,tcsmType,name +TCTT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,interfaceNumber,unitNumber,administrativeState,connectivityPtr,operationalState +TID:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,ioTextValue +TMPAR:FILENAME,DATETIME,VERSION,DISTNAME,MOID,cacCommittedBitRate,dcnCommittedBitRate,externalNATIpAddress,farEndSctpSubnetIpAddress,farEndSctpSubnetMask,minSCTPPort,minUDPPort,signallingCommittedBitRate +TOPB:FILENAME,DATETIME,VERSION,DISTNAME,MOID +TOPF:FILENAME,DATETIME,VERSION,DISTNAME,MOID,acceptedClockQuality,actTopFreqSynch,announceRequestMode,ieeeTelecomProfile,logMeanSyncValue,topDomainNumber,masterIpAddr +TOPP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,acceptedClockQuality,actTopPhaseSynch,logMeanSyncValue,phaseErrorComp,topComMode,topDomainNumber,topEthMulticastAddress,masterIpAddr +TRDE:FILENAME,DATETIME,VERSION,DISTNAME,MOID,conformanceDefinition,minDesiredCellRate,peakCellRate,ubrShare,userLabel,egressCDVTolerancePCRCLP0plus1,egressPeakCellRateCLP0plus1,serviceCategory,ingressCDVTolerancePCRCLP0plus1,ingressPeakCellRateCLP0plus1,egressMDCR,egressUBRShare,ingressMDCR,ingressUBRShare +TRE:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,name,q1Address,unitType +TRX:FILENAME,DATETIME,VERSION,DISTNAME,MOID,address,name,adminState,bbUnitSupportsEdge,channel0AdminState,channel0Maio,channel0Pcm,channel0Subslot,channel0Tsl,channel0Type,channel1AdminState,channel1Maio,channel1Pcm,channel1Subslot,channel1Tsl,channel1Type,channel2AdminState,channel2Maio,channel2Pcm,channel2Subslot,channel2Tsl,channel2Type,channel3AdminState,channel3Maio,channel3Pcm,channel3Subslot,channel3Tsl,channel3Type,channel4AdminState,channel4Maio,channel4Pcm,channel4Subslot,channel4Tsl,channel4Type,channel5AdminState,channel5Maio,channel5Pcm,channel5Subslot,channel5Tsl,channel5Type,channel6AdminState,channel6Maio,channel6Pcm,channel6Subslot,channel6Tsl,channel6Type,channel7AdminState,channel7Maio,channel7Pcm,channel7Subslot,channel7Tsl,channel7Type,daPool_ID,eTrxInd,gprsEnabledTrx,halfRateSupport,initialFrequency,lapdLinkName,lapdLinkNumber,optimumRxLevDL,optimumRxLevUL,preferredBcchMark,subslotsForSignalling,trxAbilities,tsc,metroTrxType,notificationOrigin,numberOfTrxRfPowerLevels,trxOscCapability,trxRfPower +TWAMP:FILENAME,DATETIME,VERSION,DISTNAME,MOID,administrativeState,destIpAddress,destPort,dscp,messageSize,plrAlarmThreshold,rttAlarmThreshold,sourceIpAddress +TWAMPR:FILENAME,DATETIME,VERSION,DISTNAME,MOID +UFFIM:FILENAME,DATETIME,VERSION,DISTNAME,MOID,tResUtra,utrResTiFHM,utrResTiFMM,utrFddCarFrqL_dlCarFrqUtra_pMaxUtra_qQualMinUtra_qRxLevMinUtra_uCelResPrio_utraFrqThrH_utraFrqThrL +UNI:FILENAME,DATETIME,VERSION,DISTNAME,MOID,underlyingTTPPtr +UNIT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,unitTypeActual,unitTypeExpected,identificationCode,interchangeability,numberOfSlotsOccupied,operationalState,position,serialNumber,version,enableRP301Interface +VBTS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,ControllerIdPair_IHSPAadapterId_ServingRNCId,DediMeasRepPeriodCSdata,DediMeasRepPeriodPSdata,DedicatedMeasReportPeriod,HARQRVConfiguration,MeasFiltCoeff,NodeBRABReconfigSupport,VBTSChangeOrigin +VCCT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,VCI,VPI,interfaceNumber,trafficDescriptorId,unitNumber,administrativeState,egressFrameDiscardEnabled,ingressFrameDiscardEnabled,operationalState,segmentEndPoint,trafficDescriptorPtr +VCEL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,CSAMRModeSET,CSAMRModeSETWB,DirectSCCEnabled,EDCHMinimumSetETFCI,EbNoSetIdentifier,FastActOfTargetServCell,FastCompletionOfSCC,HHoMaxAllowedBitrateDL,HHoMaxAllowedBitrateUL,HSDPAFmcgIdentifier,HSDPAFmciIdentifier,HSDPAFmcsIdentifier,HSDPAHopsIdentifier,HSDPAenabled,HSPAFmcsIdentifier,HSPASCCSpecificATO,HSPwrOffsetUpdateDelay,HSUPAEnabled,InitialBitRateDL,InitialBitRateUL,LAC,MaxBitRateDLPSNRT,MaxBitRateULPSNRT,MaxTotalUplinkSymbolRate,MinAllowedBitRateDL,MinAllowedBitRateUL,NrtFmcgIdentifier,NrtFmciIdentifier,NrtFmcsIdentifier,NrtHopgIdentifier,NrtHopiIdentifier,NrtHopsIdentifier,PowerOffsetUpdMsgSize,PtxOffsetHSSCCH,RAC,RTWithHSDPAFmcgIdentifier,RTWithHSPAFmcsIdentifier,RTwithHSDPAFmciIdentifier,RTwithHSDPAFmcsIdentifier,RTwithHSDPAHopsIdentifier,RelocComm_in_InterRNC_HHO,RtFmcgIdentifier,RtFmciIdentifier,RtFmcsIdentifier,RtHopgIdentifier,RtHopiIdentifier,RtHopsIdentifier,RxDivIndicator,SRBDCHFmcsId,SRBHopsIdentifier,VCELChangeOrigin,WACSetIdentifier +VCTT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,VCI,VPI,aalProfilePtr,enableChannelUtlStatistics,interfaceNumber,unitNumber +VPCT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,VPI,interfaceNumber,trafficDescriptorId,unitNumber,administrativeState,operationalState,segmentEndPoint,trafficDescriptorPtr +VPTT:FILENAME,DATETIME,VERSION,DISTNAME,MOID,VPI,interfaceNumber,unitNumber,connectivityPtr +WAC:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,DCHUtilRelAveWin,DCHUtilRelThrDL,DCHUtilRelThrUL,DCHUtilRelTimeToTrigger,EDCHMACdFlowThroughputAveWin,EDCHMACdFlowThroughputRelThr,EDCHMACdFlowThroughputTimetoTrigger,HSDPAInitialBRULStrNRT,HSDPAMaxBitrateUL,HSDPAMinBRULStrNRT,HSDPAinitialBitrateUL,HSDPAminAllowedBitrateUL,InactCPCBatOptT,InactCPCNoBatOptT,InactNonCPCBatOptT,InactNonCPCNoBatOptT,InactivityTimerDownlinkDCH128,InactivityTimerDownlinkDCH16,InactivityTimerDownlinkDCH256,InactivityTimerDownlinkDCH32,InactivityTimerDownlinkDCH320,InactivityTimerDownlinkDCH384,InactivityTimerDownlinkDCH64,InactivityTimerDownlinkDCH8,InactivityTimerUplinkDCH128,InactivityTimerUplinkDCH16,InactivityTimerUplinkDCH256,InactivityTimerUplinkDCH32,InactivityTimerUplinkDCH320,InactivityTimerUplinkDCH384,InactivityTimerUplinkDCH64,InactivityTimerUplinkDCH8,MACdflowthroughputAveWin,MACdflowutilRelThr,MACdflowutilTimetoTrigger,MSActivitySupervision,PrxNoiseMaxTuneAbsolute,TrafVolPendingTimeDL,TrafVolPendingTimeUL,TrafVolThresholdULLow,UL_DL_activation_timer,WACChangeOrigin,WaitTimeRRCbackground,WaitTimeRRCconversational,WaitTimeRRCemergency,WaitTimeRRChighPrioritySignalling,WaitTimeRRCinterRATreselection,WaitTimeRRCinteractive,WaitTimeRRClowPrioritySignalling,WaitTimeRRCother,WaitTimeRRCregistration,WaitTimeRRCstreaming,WaitTimeRRCsubscribed,WaitTimeRRCunknown +WBTS:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,ATMInterfaceID,BTSAdditionalInfo,BTSIPAddress,BTSSupportForHSPACM,BlindHOIntraBTSQCheck,COCOId,DCNLinkStatus,DCNSecurityStatus,DLORLAveragingWindowSize,DSCPHigh,DSCPLow,DSCPMedDCH,DSCPMedHSPA,DediMeasRepPeriodCSdata,DediMeasRepPeriodPSdata,DedicatedMeasReportPeriod,DelayThresholdMax,DelayThresholdMax2msTTI,DelayThresholdMid,DelayThresholdMid2msTTI,DelayThresholdMin,DelayThresholdMin2msTTI,HARQRVConfiguration,HSDPA14MbpsPerUser,HSDPACCEnabled,HSDPAULCToDSCP,HSUPACCEnabled,HSUPADLCToDSCP,HSUPAXUsersEnabled,IPBasedRouteIdIub,IPBasedRouteIdIub2,IPBasedRouteIdIub3,IPBasedRouteIdIub4,IPNBId,InactCACThresholdATM,InactCACThresholdIP,InactUsersCIDThreshold,IntelligentSDPrioHO,IubTransportMedia,IubTransportSharing,LoadControlPeriodPS,MaxFPDLFrameSizeIub,MaxNumberEDCHLCG,MeasFiltCoeff,MinUDPPortIub,NESWVersion,NEType,NbrOfOverbookedHSDPAUsers,NodeBRABReconfigSupport,OverbookingSwitch,PDUSize656WithHSDSCH,PSAveragingWindowSize,PSRLAveragingWindowSize,PWSMAVTrafficVERLogic,PWSMEnableWakeUpTime,PWSMInUse,PWSMRemCellSDBeginHour,PWSMRemCellSDBeginMin,PWSMRemCellSDEndHour,PWSMRemCellSDEndMin,PWSMShutdownBeginHour,PWSMShutdownBeginMin,PWSMShutdownEndHour,PWSMShutdownEndMin,PWSMWeekday,ProbabilityFactorMax,ProbabilityFactorMax2msTTI,PrxAlpha,PrxMeasAveWindow,PrxTargetPSAdjustPeriod,PtxAlpha,PtxDPCHmax,PtxDPCHmin,PtxMeasAveWindow,RACHloadIndicationPeriod,RFSharingState,RRIndPeriod,RRMULDCHActivityFactorCSAMR,RRMULDCHActivityFactorCSNTData,RRMULDCHActivityFactorCSTData,RRMULDCHActivityFactorPSBackgr,RRMULDCHActivityFactorPSStream,RRMULDCHActivityFactorPSTHP1,RRMULDCHActivityFactorPSTHP2,RRMULDCHActivityFactorPSTHP3,RRMULDCHActivityFactorSRB,ReleaseTimerForSharedHSDPAallocation,SchedulingPeriod,SharedHSDPAVCCSelectionMethod,SharedHSDPAallocation,TQMId,TQMId2,TQMId3,TQMId4,ToAWEOffsetNRTDCHIP,ToAWEOffsetRTDCHIP,ToAWSOffsetNRTDCHIP,ToAWSOffsetRTDCHIP,VCI,VPI,WBTSChangeOrigin,WBTSName,WBTSSWBuildId,WinACRABsetupDL,WinACRABsetupUL,WinLCHSDPA,WinLCHSUPA +WCEL:FILENAME,DATETIME,VERSION,DISTNAME,MOID,WCELMCC,WCELMNC,name,ACBarredList,AICHTraTime,AMROverSC,AMROverTransmission,AMROverTxNC,AMROverTxNonHSPA,AMROverTxTotal,AMRSF,AMRTargetSC,AMRTargetTransmission,AMRTargetTxNC,AMRTargetTxNonHSPA,AMRTargetTxTotal,AMRUnderSC,AMRUnderTransmission,AMRUnderTxNC,AMRUnderTxNonHSPA,AMRUnderTxTotal,ATOSRBsOnHSPA,AbsPrioCellReselec,ActivationTimeOffset,AdminCellState,AdminPICState,AllowedPreambleSignatures,AllowedRACHSubChannels,AltScramblingCodeCM,AssignedPICPool,BlindHOEcNoThrTarget,BlindHORSCPThrTarget,CCHSetupEnabled,CIRForFDPCH,CId,CPCEnabled,CPICHEcNoSRBMapRRC,CPICHRSCPSRBMapRRC,CPICHtoRefRABoffset,CSAMRModeSET,CSAMRModeSETWB,CSGroupId,CUCEcNoThreshold,CUCRSCPThreshold,CableLoss,CellAdditionalInfo,CellBarred,CellRange,CellSelQualMeas,CellWeightForHSDPALayering,Cell_Reserved,CodeTreeOptTimer,CodeTreeOptimisation,CodeTreeOptimisationGuardTime,CodeTreeUsage,DCellAndMIMOUsage,DCellHSDPACapaHO,DCellHSDPAEnabled,DCellHSDPAFmcsId,DLLoadStateTTT,DPCHOverHSPDSCHThreshold,DPCModeChangeSupport,DRRCprxMargin,DRRCprxOffset,DRRCptxMargin,DRRCptxOffset,DefMeasCtrlReading,DeltaPrxMaxDown,DeltaPrxMaxUp,DeltaPtxMaxDown,DeltaPtxMaxUp,DirectSCCEnabled,DirectedRRCEnabled,DirectedRRCForHSDPALayerEnabled,EDCHCapability,EDCHMinSetETFCIT0,EDCHMinimumSetETFCI,EDCHOpState,EbNoSetIdentifier,FDPCHCodeChangeEnabled,FDPCHEnabled,FDPCHSetup,FachLoadMarginCCH,FachLoadThresholdCCH,FastActOfTargetServCell,FastCompletionOfSCC,FastHSPAMobilityEnabled,HCS_PRIO,HHoMaxAllowedBitrateDL,HHoMaxAllowedBitrateUL,HSCapabilityHONumbUE,HSCapabilityHOPeriod,HSDPA64QAMallowed,HSDPA64UsersEnabled,HSDPACPICHAveWindow,HSDPACPICHReportPeriod,HSDPACellChangeMinInterval,HSDPAFmcgIdentifier,HSDPAFmciIdentifier,HSDPAFmcsIdentifier,HSDPALayeringCommonChEnabled,HSDPAMaxCellChangeRepetition,HSDPASRBWindow,HSDPAServCellWindow,HSDPAcapability,HSDPAenabled,HSDSCHOpState,HSLoadStateHSDBRLimit,HSLoadStateHSDOffset,HSLoadStateHSUBRLimit,HSLoadStateHSUOffset,HSLoadStateHSUResThr,HSPA72UsersPerCell,HSPACapaHO,HSPAFmcsIdentifier,HSPAQoSEnabled,HSPASCCSpecificATO,HSPDSCHCodeSet,HSPDSCHMarginSF128,HSPwrOffsetUpdateDelay,HSUPA2MSTTIEnabled,HSUPAEnabled,HspaMultiNrtRabSupport,IncomingLTEISHO,InitialBitRateDL,InitialBitRateUL,InterFreqScaleTresel,InterRATScaleTresel,IntraFreq_Cell_Reselect_Ind,LAC,LHOCapaReqRejRateDL,LHOCapaReqRejRateUL,LHODelayOFFCapaReqRejRate,LHODelayOFFHardBlocking,LHODelayOFFInterference,LHODelayOFFResRateSC,LHOHardBlockingBaseLoad,LHOHardBlockingRatio,LHOHystTimeCapaReqRejRate,LHOHystTimeHardBlocking,LHOHystTimeInterference,LHOHystTimeResRateSC,LHONRTTrafficBaseLoad,LHONumbUEInterFreq,LHONumbUEInterRAT,LHOPwrOffsetDL,LHOPwrOffsetUL,LHOResRateSC,LHOWinSizeOFFCapaReqRejRate,LHOWinSizeOFFHardBlocking,LHOWinSizeOFFInterference,LHOWinSizeOFFResRateSC,LHOWinSizeONCapaReqRejRate,LHOWinSizeONHardBlocking,LHOWinSizeONInterference,LHOWinSizeONResRateSC,LTECellReselection,LoadBasedCPICHEcNoSRBHSPA,LoadBasedCPICHEcNoThreEDCH2MS,MBLBInactivityEnabled,MBLBLoadInfoDistr,MBLBMobilityEnabled,MBLBRABSetupEnabled,MBLBRABSetupMultiRAB,MBLBStateTransEnabled,MEHHSDPAUserNbrCQI,MEHHSUPAUserNbr2msTTI,MEHLoadStateTtT,MEHMaxHSUPAUsers,MEHQueueThreshold,MEHULLHSDPAUALimit,MHA,MIMOEnabled,MIMOHSDPACapaHO,MIMOWith64QAMUsage,MassEventHandler,MaxBitRateDLPSNRT,MaxBitRateULPSNRT,MaxCodeReleases,MaxDLPowerCapability,MaxIncrInterferenceUL,MaxNbrOfHSSCCHCodes,MaxNumbHSDPAUsersS,MaxNumbHSDSCHMACdFS,MaxNumberEDCHCell,MaxNumberHSDPAUsers,MaxNumberHSDSCHMACdFlows,MaxNumberUECmHO,MaxNumberUECmSLHO,MaxNumberUEHSPACmHO,MaxNumberUEHSPACmNCHO,MaxTotalUplinkSymbolRate,MinAllowedBitRateDL,MinAllowedBitRateUL,MultiplePLMNListIncluded,N300,N312,N312Conn,N313,N315,NASsignVolThrDL,NASsignVolThrUL,NCr,NbrOfSCCPCHs,NonHCSNcr,NonHCSTcrMax,NonHCSTcrMaxHyst,NrtFmcgIdentifier,NrtFmciIdentifier,NrtFmcsIdentifier,NumberEDCHReservedSHOBranchAdditions,OCULNRTDCHGrantedMinAllocT,OCdlNrtDCHgrantedMinAllocT,PBSgrantedMinDCHallocTequalP,PBSgrantedMinDCHallocThigherP,PBSgrantedMinDCHallocTlowerP,PCH24kbpsEnabled,PFLIdentifier,PICState,PI_amount,PRACHDelayRange,PRACHRequiredReceivedCI,PRACHScramblingCode,PRACH_preamble_retrans,PSGroupId,PTxPICH,PWSMAVLimitDCHSDPA,PWSMAVLimitNRTHSDPA,PWSMAVLimitRTDCH,PWSMAVLimitRTHSDPA,PWSMAVPwrNRTHSDPA,PWSMAVPwrRTHSDPA,PWSMCellGroup,PWSMEXPwrLimit,PWSMEXUsrLimit,PWSMSDLimitDCHSDPA,PWSMSDLimitNRTDCH,PWSMSDLimitNRTHSDPA,PWSMSDLimitRTDCH,PWSMSDLimitRTHSDPA,PWSMSDPwrNRTHSDPA,PWSMSDPwrRTDCH,PWSMSDPwrRTHSDPA,PWSMShutdownOrder,PWSMShutdownRemCell,PowerOffsetLastPreamblePRACHmessage,PO1_15,PO1_30,PO1_60,PowerOffsetUpdMsgSize,PowerRampStepPRACHpreamble,PowerSaveHSPAType,PriScrCode,PrxLoadMarginDCH,PrxLoadMarginEDCH,PrxLoadMarginMaxDCH,PrxMaxOrigTargetBTS,PrxMaxTargetBTS,PrxMeasFilterCoeff,PrxNoise,PrxNoiseAutotuning,PrxOffset,PrxTarget,PrxTargetMax,PrxTargetPSMax,PrxTargetPSMin,PrxTargetPSStepDown,PrxTargetPSStepUp,PtxAICH,PtxCellMax,PtxDLabsMax,PtxFDPCHMax,PtxFDPCHMin,PtxHighHSDPAPwr,PtxMarginCCH,PtxMaxEHICH,PtxMaxHSDPA,PtxMeasFilterCoeff,PtxOffset,PtxOffsetEAGCH,PtxOffsetEAGCHDPCCH,PtxOffsetEHICHDPCCH,PtxOffsetERGCH,PtxOffsetERGCHDPCCH,PtxOffsetExxCH2ms,PtxOffsetExxCHSHO,PtxOffsetFDPCHSHO,PtxOffsetHSDPA,PtxPSstreamAbsMax,PtxPrimaryCCPCH,PtxPrimaryCPICH,PtxPrimarySCH,PtxSCCPCH1,PtxSCCPCH2,PtxSCCPCH2SF128,PtxSCCPCH3,PtxSecSCH,PtxTarget,PtxTargetHSDPA,PtxTargetPSAdjustPeriod,PtxTargetPSMax,PtxTargetPSMin,PtxTargetPSStepDown,PtxTargetPSStepUp,PtxTargetTotMax,PtxTargetTotMin,PtxThresholdCCH,QHCS,Qhyst1,Qhyst1FACH,Qhyst1PCH,Qhyst2,Qhyst2FACH,Qhyst2PCH,QqualMin,QrxlevMin,RAC,RACHCapacity,RACHInterFreqMesQuant,RACHIntraFreqMesQuant,RACH_Tx_NB01max,RACH_Tx_NB01min,RACH_tx_Max,RACHmeasFilterCoeff,RNARGroupId,RRCconnRepTimer1,RRCconnRepTimer2,RTWithHSDPAFmcgIdentifier,RTWithHSDPAFmciIdentifier,RTWithHSDPAFmcsIdentifier,RTWithHSPAFmcsIdentifier,RachLoadMarginCCH,RachLoadThresholdCCH,RefServForCodePower,RelocComm_in_InterRNC_HHO,RsrvdSignaturesOffset,RtFmcgIdentifier,RtFmciIdentifier,RtFmcsIdentifier,RxDivIndicator,SAC,SHCS_RAT,SHCS_RATConn,SIB11Length,SIB11bisLength,SIB12Length,SIB4Indicator,SIB7factor,SIRDPCCHOffsetEDPCH,SRBBitRateRRCSetupEC,SRBDCHFmcsId,SRBHSPAFmcsId,SRBMapRRCSetupEC,SectorID,ServHONumbUEInterFreq,ServHONumbUEInterRAT,ServHOPeriodInterFreq,ServHOPeriodInterRAT,ShutdownStepAmount,ShutdownWindow,Sintersearch,SintersearchConn,Sintrasearch,SintrasearchConn,Slimit_SearchRAT,Slimit_SearchRATConn,SmartLTELayeringEnabled,SmartLTELayeringRSCP,SmartLTELayeringTSysSel,SmartLTELayeringUA,SmartTrafVolThrDL,SmartTrafVolThrUL,SpeedScaleTresel,Sprioritysearch1,Sprioritysearch2,SsearchHCS,SsearchHCSConn,Ssearch_RAT,Ssearch_RATConn,T300,T312,T312Conn,T313,T315,TBarred,TCrmax,TCrmaxHyst,TPCCommandERTarget,TargetNSEDCHToTotalEDCHPR,Tcell,Threshservlow,Threshservlow2,ToAWE_CCH,ToAWS_CCH,TrafVolThresholdDLLow,Treselection,TreselectionFACH,TreselectionPCH,UARFCN,UEtxPowerMaxDPCH,UEtxPowerMaxPRACH,UEtxPowerMaxPRACHConn,ULLoadStateHSUBRLimit,ULLoadStateHSUOffset,URAId,UTRAN_DRX_length,UseOfHCS,UsersPerHSSCCHCode,VCPMaxHSDPAUsers,VCPPtxOffset,VoiceCallPriority,VoiceOverrideSTHSUPA,WACSetIdentifier,WCELChangeOrigin,WCelState +WRAB:FILENAME,DATETIME,VERSION,DISTNAME,MOID,name,DeltaSIRAfterDownlink,DeltaSIRAfterUplink,DeltaSIRDownlink,DeltaSIRUplink,DownlinkOrthog,EDCHBLERAdjCSVoice10,EDCHBLERAdjCSVoice2,EbNoDCHOfPSNRTPriQua,EbNoDCHOfPSNRTPrim,EbNoDCHOfPSNRTSec,EbNoDCHOfPSNRTSecQua,EbNoDCHOfPSNRTSelQuaDL,EbNoDCHOfPSNRTSelQuaUL,EbNoDCHOfPSStrPriQua,EbNoDCHOfPSStrPrim,EbNoDCHOfPSStrSec,EbNoDCHOfPSStrSecQua,EbNoDCHOfPSStrSelQuaDL,EbNoDCHOfPSStrSelQuaUL,EbNoDCHOfSRB136,EbNoDCHOfSRB136Qua,EbNoDCHOfSRB34,EbNoDCHOfSRB34Qua,EbNoDCHRateGainCSAMR,EbNoDCHRateGainCSData,EbNoDCHRateGainPSData,EbNoDCHRateGainSFDown,EbNoDCHRateGainSFUp,EbNoDCHRateGainSRB,EbNoDCHRxDiv2,EbNoDCHRxDiv4,EbNoDCHTxDiv,EbNoEDCHCSAMR,EDCHPSStr128Kbps,EDCHPSStr16Kbps,EDCHPSStr248Kbps,EDCHPSStr32Kbps,EDCHPSStr64Kbps,EDCHPSStr8Kbps,EDCHPSStrOver248Kbps,EbNoDCHOfCSDataNT,EbNoDCHOfCSDataNTQua,EbNoDCHOfCSDataT,EbNoDCHOfCSDataTQua,EbNoDCHOfCSNBAMR122,EbNoDCHOfCSNBAMR59,EbNoDCHOfCSNBAMRQua,EbNoDCHOfCSNBAMRb,EbNoDCHOfCSNBAMRc,EbNoDCHOfCSWBAMR1265,EbNoDCHOfCSWBAMRQua,EbNoDCHOfCSWBAMRb,L1BLERTEDCHVoice10,L1BLERTEDCHVoice2,SIRDPCCHInitialDCH128,SIRDPCCHInitialDCH16,SIRDPCCHInitialDCH256,SIRDPCCHInitialDCH32,SIRDPCCHInitialDCH4,SIRDPCCHInitialDCH64,SIRDPCCHInitialDCH8,SIRDPCCHInitialDCHHS128,SIRDPCCHInitialDCHHS16,SIRDPCCHInitialDCHHS256,SIRDPCCHInitialDCHHS32,SIRDPCCHInitialDCHHS4,SIRDPCCHInitialDCHHS64,SIRDPCCHInitialDCHHS8,SIRDPCCHInitialDCHMax,SIRDPCCHInitialDCHMin,SIRDPCCHInitialDCHOffset,SIRDPCCHInitialDCHRxDiv2,SIRDPCCHInitialDCHRxDiv4,WRABChangeOrigin From 4cdc92a987c2402a6862486936c8187aee5f569d Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Wed, 20 Mar 2019 18:44:56 +0300 Subject: [PATCH 02/17] Remove windows carriage returns from queue_setup.sh --- docker-compose.yml | 4 +- ...m_sub_dag_parse_and_import_nokia_raml20.py | 66 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 mediation/dags/cm_sub_dag_parse_and_import_nokia_raml20.py diff --git a/docker-compose.yml b/docker-compose.yml index 3e2fc0f..62179a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,7 +26,7 @@ services: - "15670:15670" network_mode: "bridge" container_name: "bts-ce-msgbroker" - command: bash -c "./queue_setup.sh" + command: bash -c "cat ./queue_setup.sh | tr -d "\r" | bash -" hostname: rmq volumes: - ./queue_scripts/rabbitmq.config:/etc/rabbitmq/rabbitmq.config:ro @@ -62,7 +62,7 @@ services: container_name: "bts-ce-api" command: ["/wait-for-it.sh","database:5432","--","/migrate-and-start-web-server.sh"] bts-web: - image: registry.gitlab.com/bts-ce/bts-ce-web:v2.1.0 + image: registry.gitlab.com/bts-ce/bts-ce-web:2.1.0 ports: - "8888:80" network_mode: "bridge" diff --git a/mediation/dags/cm_sub_dag_parse_and_import_nokia_raml20.py b/mediation/dags/cm_sub_dag_parse_and_import_nokia_raml20.py new file mode 100644 index 0000000..9a5c9ff --- /dev/null +++ b/mediation/dags/cm_sub_dag_parse_and_import_nokia_raml20.py @@ -0,0 +1,66 @@ +import sys +import os +from airflow.models import DAG +from airflow.operators.bash_operator import BashOperator +from airflow.operators.python_operator import PythonOperator +from airflow.operators.python_operator import BranchPythonOperator +from airflow.operators.dummy_operator import DummyOperator +from airflow.operators.subdag_operator import SubDagOperator +from cm_sub_dag_import_huawei_gexport_files import import_huawei_gexport_parsed_csv + +sys.path.append('/mediation/packages'); + +from bts import NetworkBaseLine, Utils, ProcessCMData; + + +bts_utils = Utils(); + + +def parse_and_import_zte_excel(parent_dag_name, child_dag_name, start_date, schedule_interval): + """ + Parse and import ZTE xlsx files + + :param parent_dag_name: + :param child_dag_name: + :param start_date: + :param schedule_interval: + :return: + """ + dag_id = '%s.%s' % (parent_dag_name, child_dag_name) + + dag = DAG( + '%s.%s' % (parent_dag_name, child_dag_name), + schedule_interval=schedule_interval, + start_date=start_date, + ) + + parse_zte_excel_cm_files = BashOperator( + task_id='parse_zte_excel_cm_files', + bash_command='python /mediation/bin/parse_zte_excel.py -i /mediation/data/cm/zte/raw/excel -o /mediation/data/cm/zte/parsed/excel -c /mediation/conf/cm/zte_excel_parser.cfg', + dag=dag) + + import_zte_excel_csv = BashOperator( + task_id='import_zte_excel_parsed_csv', + bash_command='python /mediation/bin/load_cm_data_into_db.py zte_excel /mediation/data/cm/zte/parsed/excel', + dag=dag) + + t_run_zte_excel_insert_queries = BashOperator( + task_id='run_zte_excel_insert_queries', + bash_command='python /mediation/bin/run_cm_load_insert_queries.py zte_excel', + dag=dag) + + # Clear 4G CM data tables + def clear_zte_excel_cm_tables(): + pass + + t50 = PythonOperator( + task_id='clear_zte_excel_cm_tables', + python_callable=clear_zte_excel_cm_tables, + dag=dag) + + + dag.set_dependency('parse_zte_excel_cm_files', 'clear_zte_excel_cm_tables') + dag.set_dependency('clear_zte_excel_cm_tables', 'import_zte_excel_parsed_csv') + dag.set_dependency('import_zte_excel_parsed_csv', 'run_zte_excel_insert_queries') + + return dag \ No newline at end of file From ec61e3e4ce1a60b3a0fba4a4faa9770f32ab7ec9 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Thu, 21 Mar 2019 02:30:31 +0300 Subject: [PATCH 03/17] Add Nokia CM process tasks to cm_load DAG --- create_folders.bat | 2 +- create_folders.sh | 2 +- mediation/__init__.py | 0 mediation/dags/cm_load.py | 268 +++++++++++++++++- .../dags/cm_sub_dag_cm_load_house_keeping.py | 2 +- ...m_sub_dag_parse_and_import_nokia_raml20.py | 33 ++- mediation/packages/__init__.py | 0 mediation/packages/bts/__init__.py | 3 +- mediation/packages/bts/huawei_cm.py | 12 +- mediation/packages/bts/network_audit.py | 1 + mediation/packages/bts/nokia_cm.py | 124 ++++++++ mediation/packages/bts/zte_cm.py | 11 +- 12 files changed, 424 insertions(+), 34 deletions(-) create mode 100644 mediation/__init__.py create mode 100644 mediation/packages/__init__.py create mode 100644 mediation/packages/bts/nokia_cm.py diff --git a/create_folders.bat b/create_folders.bat index 59dfc45..5e2cb8a 100644 --- a/create_folders.bat +++ b/create_folders.bat @@ -15,7 +15,7 @@ Rem ZTE For %%i in (raw parsed) Do For %%j in (bulkcm excel backup) Do mkdir %MEDIATION_DIR%\zte\%%i\%%j Rem Nokia -For %%i in (raw parsed) Do For %%j in (raml2 backup) Do mkdir %MEDIATION_DIR%\nokia\%%i\%%j +For %%i in (raw parsed) Do For %%j in (raml20 backup) Do mkdir %MEDIATION_DIR%\nokia\%%i\%%j Rem Create reports folder mkdir mediation\data\reports \ No newline at end of file diff --git a/create_folders.sh b/create_folders.sh index 80e8045..905d135 100644 --- a/create_folders.sh +++ b/create_folders.sh @@ -15,7 +15,7 @@ mkdir -p $MEDIATION_DIR/huawei/{raw,parsed}/{gexport,nbi,mml,cfgsyn,rnp,motree,b mkdir -p $MEDIATION_DIR/zte/{raw,parsed}/{bulkcm,excel,backup} #Nokia -mkdir -p $MEDIATION_DIR/nokia/{raw,parsed}/{raml2,backup} +mkdir -p $MEDIATION_DIR/nokia/{raw,parsed}/{raml20,backup} # Create mediation data mkdir -p mediation/data/reports \ No newline at end of file diff --git a/mediation/__init__.py b/mediation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/mediation/dags/cm_load.py b/mediation/dags/cm_load.py index fd1973f..60b46b6 100644 --- a/mediation/dags/cm_load.py +++ b/mediation/dags/cm_load.py @@ -36,6 +36,7 @@ from cm_sub_dag_parse_and_import_zte_bulkcm import parse_and_import_zte_bulkcm from cm_sub_dag_parse_and_import_zte_excel import parse_and_import_zte_excel from cm_sub_dag_parse_and_import_huawei_rnp import parse_and_import_huawei_rnp +from cm_sub_dag_parse_and_import_nokia_raml20 import parse_and_import_nokia_raml20 from airflow.utils.trigger_rule import TriggerRule from cm_sub_dag_extract_externals import extract_network_externals from cm_sub_dag_cm_load_house_keeping import run_house_keeping_tasks @@ -43,13 +44,14 @@ sys.path.append('/mediation/packages') -from bts import NetworkBaseLine, Utils, ProcessCMData, HuaweiCM, EricssonCM, ZTECM +from bts import NetworkBaseLine, Utils, ProcessCMData, HuaweiCM, EricssonCM, ZTECM, NokiaCM bts_utils = Utils() process_cm_data = ProcessCMData(dbhost=os.environ.get('POSTGRES_HOST')) huawei_cm = HuaweiCM() ericsson_cm = EricssonCM() zte_cm = ZTECM() +nokia_cm = NokiaCM() schedule_interval = "@daily" # # bts_utils.get_setting('cm_dag_schedule_interval') @@ -105,6 +107,13 @@ dag=dag, ) +sub_dag_parse_and_import_nokia_raml20_cm_files = SubDagOperator( + subdag=parse_and_import_nokia_raml20('cm_load', 'parse_and_import_nokia_raml20', start_date=dag.start_date, + schedule_interval=dag.schedule_interval), + task_id='parse_and_import_nokia_raml20', + dag=dag, +) + sub_dag_parse_and_import_huawei_rnp_cm_files = SubDagOperator( subdag=parse_and_import_huawei_rnp('cm_load', 'parse_and_import_huawei_rnp', start_date=dag.start_date, schedule_interval=dag.schedule_interval), @@ -157,12 +166,6 @@ dag=dag, ) -# Backup raw files that have been parsed -t4 = BashOperator( - task_id='backup_3g4g_raw_files', - bash_command='echo 0;', - # bash_command='mv -f /mediation/data/cm/ericsson/3g4g/raw/in/* /mediation/data/cm/ericsson/3g4g/raw/out/ 2>/dev/null', - dag=dag) # Process ericsson RNCs @@ -928,12 +931,212 @@ def extract_zte_4g4g_nbrs(): task_zte_cm_done = DummyOperator(task_id='zte_cm_done', dag=dag) +def extract_nokia_bscs(): + nokia_cm.extract_nokia_bscs() + + +task_extract_nokia_bscs = PythonOperator( + task_id='extract_nokia_bscs', + python_callable=extract_nokia_bscs, + dag=dag) + + +def extract_nokia_rncs(): + nokia_cm.extract_nokia_rncs() + + +task_extract_nokia_rncs = PythonOperator( + task_id='extract_nokia_rncs', + python_callable=extract_nokia_rncs, + dag=dag) + + +def extract_nokia_enodes(): + nokia_cm.extract_nokia_enodes() + + +task_extract_nokia_enodes = PythonOperator( + task_id='extract_nokia_enodes', + python_callable=extract_nokia_enodes, + dag=dag) + + +def extract_nokia_2g_sites(): + nokia_cm.extract_nokia_2g_sites() + + +task_extract_nokia_2g_sites = PythonOperator( + task_id='extract_nokia_2g_sites', + python_callable=extract_nokia_2g_sites, + dag=dag) + +def extract_nokia_2g_cells(): + nokia_cm.extract_nokia_2g_cells() + + +task_extract_nokia_2g_cells = PythonOperator( + task_id='extract_nokia_2g_cells', + python_callable=extract_nokia_2g_cells, + dag=dag) + + +def extract_nokia_2g_cell_params(): + nokia_cm.extract_nokia_2g_cell_params() + + +task_extract_nokia_2g_cell_params = PythonOperator( + task_id='extract_nokia_2g_cell_params', + python_callable=extract_nokia_2g_cell_params, + dag=dag) + + +def extract_nokia_3g_sites(): + nokia_cm.extract_nokia_3g_sites() + + +task_extract_nokia_3g_sites = PythonOperator( + task_id='extract_nokia_3g_sites', + python_callable=extract_nokia_3g_sites, + dag=dag) + +def extract_nokia_3g_cells(): + nokia_cm.extract_nokia_3g_cells() + + +task_extract_nokia_3g_cells = PythonOperator( + task_id='extract_nokia_3g_cells', + python_callable=extract_nokia_3g_cells, + dag=dag) + + +def extract_nokia_3g_cell_params(): + nokia_cm.extract_nokia_3g_cell_params() + + +task_extract_nokia_3g_cell_params = PythonOperator( + task_id='extract_nokia_3g_cell_params', + python_callable=extract_nokia_3g_cell_params, + dag=dag) + + +def extract_nokia_4g_cells(): + nokia_cm.extract_nokia_4g_cells() + + +task_extract_nokia_4g_cells = PythonOperator( + task_id='extract_nokia_4g_cells', + python_callable=extract_nokia_4g_cells, + dag=dag) + + +def extract_nokia_4g_cell_params(): + nokia_cm.extract_nokia_4g_cell_params() + + +task_extract_nokia_4g_cell_params = PythonOperator( + task_id='extract_nokia_4g_cell_params', + python_callable=extract_nokia_4g_cell_params, + dag=dag) + + +def extract_nokia_2g2g_nbrs(): + nokia_cm.extract_nokia_2g2g_nbrs() + + +task_extract_nokia_2g2g_nbrs = PythonOperator( + task_id='extract_nokia_2g2g_nbrs', + python_callable=extract_nokia_2g2g_nbrs, + dag=dag) + + +def extract_nokia_2g3g_nbrs(): + nokia_cm.extract_nokia_2g3g_nbrs() + + +task_extract_nokia_2g3g_nbrs = PythonOperator( + task_id='extract_nokia_2g3g_nbrs', + python_callable=extract_nokia_2g3g_nbrs, + dag=dag) + + +def extract_nokia_2g4g_nbrs(): + nokia_cm.extract_nokia_2g4g_nbrs() + + +task_extract_nokia_2g4g_nbrs = PythonOperator( + task_id='extract_nokia_2g4g_nbrs', + python_callable=extract_nokia_2g4g_nbrs, + dag=dag) + + +def extract_nokia_3g2g_nbrs(): + nokia_cm.extract_nokia_3g2g_nbrs() + + +task_extract_nokia_3g2g_nbrs = PythonOperator( + task_id='extract_nokia_3g2g_nbrs', + python_callable=extract_nokia_3g2g_nbrs, + dag=dag) + + +def extract_nokia_3g3g_nbrs(): + nokia_cm.extract_nokia_3g3g_nbrs() + + +task_extract_nokia_3g3g_nbrs = PythonOperator( + task_id='extract_nokia_3g3g_nbrs', + python_callable=extract_nokia_3g3g_nbrs, + dag=dag) + + +def extract_nokia_3g4g_nbrs(): + nokia_cm.extract_nokia_3g4g_nbrs() + + +task_extract_nokia_3g4g_nbrs = PythonOperator( + task_id='extract_nokia_3g4g_nbrs', + python_callable=extract_nokia_3g4g_nbrs, + dag=dag) + + +def extract_nokia_4g2g_nbrs(): + nokia_cm.extract_nokia_4g2g_nbrs() + + +task_extract_nokia_4g2g_nbrs = PythonOperator( + task_id='extract_nokia_4g2g_nbrs', + python_callable=extract_nokia_4g2g_nbrs, + dag=dag) + + +def extract_nokia_4g3g_nbrs(): + nokia_cm.extract_nokia_4g3g_nbrs() + + +task_extract_nokia_4g3g_nbrs = PythonOperator( + task_id='extract_nokia_4g3g_nbrs', + python_callable=extract_nokia_4g3g_nbrs, + dag=dag) + + +def extract_nokia_4g4g_nbrs(): + nokia_cm.extract_nokia_4g4g_nbrs() + + +task_extract_nokia_4g4g_nbrs = PythonOperator( + task_id='extract_nokia_4g4g_nbrs', + python_callable=extract_nokia_4g4g_nbrs, + dag=dag) + +task_nokia_cm_done = DummyOperator(task_id='nokia_cm_done', dag=dag) + join_nokia_supported_task = DummyOperator( task_id='join_nokia_supported', trigger_rule=TriggerRule.ONE_SUCCESS, dag=dag ) + # Build dependency graph # dag.set_dependency('start_cm_load','is_ericsson_supported') dag.set_dependency('start_cm_load','process_ericsson') @@ -943,7 +1146,6 @@ def extract_zte_4g4g_nbrs(): dag.set_dependency('process_ericsson','parse_and_import_ericsson_bulkcm') -dag.set_dependency('parse_and_import_ericsson_bulkcm','backup_3g4g_raw_files') dag.set_dependency('parse_and_import_ericsson_bulkcm','process_eri_rncs') dag.set_dependency('parse_and_import_ericsson_bulkcm','process_eri_enodebs') dag.set_dependency('process_eri_rncs','extract_ericsson_3g_sites') @@ -951,7 +1153,6 @@ def extract_zte_4g4g_nbrs(): dag.set_dependency('process_eri_enodebs','extract_ericsson_4g_cells') dag.set_dependency('extract_ericsson_3g_cells','cell_extraction_done') -dag.set_dependency('backup_3g4g_raw_files','ericsson_cm_done') dag.set_dependency('extract_ericsson_3g_cells','extract_ericsson_3g2g_nbrs') @@ -1138,13 +1339,58 @@ def extract_zte_4g4g_nbrs(): dag.set_dependency('zte_cm_done','join_zte_supported') dag.set_dependency('join_zte_supported','end_cm_load') + # Nokia # ############################################## dag.set_dependency('start_cm_load','process_nokia') -dag.set_dependency('process_nokia','join_nokia_supported') -dag.set_dependency('join_nokia_supported','end_cm_load') +dag.set_dependency('process_nokia','parse_and_import_nokia_raml20') + +dag.set_dependency('parse_and_import_nokia_raml20','extract_nokia_bscs') +dag.set_dependency('parse_and_import_nokia_raml20','extract_nokia_rncs') +dag.set_dependency('parse_and_import_nokia_raml20','extract_nokia_enodes') + +dag.set_dependency('extract_nokia_bscs','extract_nokia_2g_sites') +dag.set_dependency('extract_nokia_2g_sites','extract_nokia_2g_cells') +dag.set_dependency('extract_nokia_2g_cells','extract_nokia_2g_cell_params') +dag.set_dependency('extract_nokia_2g_cell_params','nokia_cm_done') + +dag.set_dependency('extract_nokia_rncs','extract_nokia_3g_sites') +dag.set_dependency('extract_nokia_3g_sites','extract_nokia_3g_cells') +dag.set_dependency('extract_nokia_3g_cells','extract_nokia_3g_cell_params') +dag.set_dependency('extract_nokia_3g_cell_params','nokia_cm_done') + +dag.set_dependency('extract_nokia_enodes','extract_nokia_4g_cells') +dag.set_dependency('extract_nokia_4g_cells','extract_nokia_4g_cell_params') +dag.set_dependency('extract_nokia_4g_cell_params','nokia_cm_done') + +dag.set_dependency('extract_nokia_2g_cells','extract_nokia_2g2g_nbrs') +dag.set_dependency('extract_nokia_2g_cells','extract_nokia_2g3g_nbrs') +dag.set_dependency('extract_nokia_2g_cells','extract_nokia_2g4g_nbrs') +dag.set_dependency('extract_nokia_3g_cells','extract_nokia_3g2g_nbrs') +dag.set_dependency('extract_nokia_3g_cells','extract_nokia_3g3g_nbrs') +dag.set_dependency('extract_nokia_3g_cells','extract_nokia_3g4g_nbrs') + +dag.set_dependency('extract_nokia_4g_cells','extract_nokia_4g2g_nbrs') +dag.set_dependency('extract_nokia_4g_cells','extract_nokia_4g3g_nbrs') +dag.set_dependency('extract_nokia_4g_cells','extract_nokia_4g4g_nbrs') + +dag.set_dependency('extract_nokia_2g2g_nbrs','nokia_cm_done') +dag.set_dependency('extract_nokia_2g3g_nbrs','nokia_cm_done') +dag.set_dependency('extract_nokia_2g4g_nbrs','nokia_cm_done') + +dag.set_dependency('extract_nokia_3g2g_nbrs','nokia_cm_done') +dag.set_dependency('extract_nokia_3g3g_nbrs','nokia_cm_done') +dag.set_dependency('extract_nokia_3g4g_nbrs','nokia_cm_done') + + +dag.set_dependency('extract_nokia_4g2g_nbrs','nokia_cm_done') +dag.set_dependency('extract_nokia_4g3g_nbrs','nokia_cm_done') +dag.set_dependency('extract_nokia_4g4g_nbrs','nokia_cm_done') + +dag.set_dependency('nokia_cm_done','join_nokia_supported') +dag.set_dependency('join_nokia_supported','end_cm_load') # After dag.set_dependency('cell_extraction_done','end_cm_load') diff --git a/mediation/dags/cm_sub_dag_cm_load_house_keeping.py b/mediation/dags/cm_sub_dag_cm_load_house_keeping.py index 4f53a48..2eb311e 100644 --- a/mediation/dags/cm_sub_dag_cm_load_house_keeping.py +++ b/mediation/dags/cm_sub_dag_cm_load_house_keeping.py @@ -53,7 +53,7 @@ def run_house_keeping_tasks(parent_dag_name, child_dag_name, start_date, schedul backup_nokia_cm_dumps_task = BashOperator( task_id='backup_nokia_cm_dumps', - bash_command='mv -f /mediation/data/cm/nokia/raw/{raml2}/* /mediation/data/cm/nokia/raw/backup/ 2>/dev/null || true', + bash_command='mv -f /mediation/data/cm/nokia/raw/{raml20}/* /mediation/data/cm/nokia/raw/backup/ 2>/dev/null || true', dag=dag) diff --git a/mediation/dags/cm_sub_dag_parse_and_import_nokia_raml20.py b/mediation/dags/cm_sub_dag_parse_and_import_nokia_raml20.py index 9a5c9ff..6662119 100644 --- a/mediation/dags/cm_sub_dag_parse_and_import_nokia_raml20.py +++ b/mediation/dags/cm_sub_dag_parse_and_import_nokia_raml20.py @@ -16,7 +16,7 @@ bts_utils = Utils(); -def parse_and_import_zte_excel(parent_dag_name, child_dag_name, start_date, schedule_interval): +def parse_and_import_nokia_raml20(parent_dag_name, child_dag_name, start_date, schedule_interval): """ Parse and import ZTE xlsx files @@ -34,33 +34,32 @@ def parse_and_import_zte_excel(parent_dag_name, child_dag_name, start_date, sche start_date=start_date, ) - parse_zte_excel_cm_files = BashOperator( - task_id='parse_zte_excel_cm_files', - bash_command='python /mediation/bin/parse_zte_excel.py -i /mediation/data/cm/zte/raw/excel -o /mediation/data/cm/zte/parsed/excel -c /mediation/conf/cm/zte_excel_parser.cfg', + parse_nokia_raml20_cm_files = BashOperator( + task_id='parse_nokia_raml20_cm_files', + bash_command='java -jar /mediation/bin/boda-nokiacmdataparser.jar -i /mediation/data/cm/nokia/raw/raml20 -o /mediation/data/cm/nokia/parsed/raml20 -c /mediation/conf/cm/nokia_raml20_parser.cfg', dag=dag) - import_zte_excel_csv = BashOperator( - task_id='import_zte_excel_parsed_csv', - bash_command='python /mediation/bin/load_cm_data_into_db.py zte_excel /mediation/data/cm/zte/parsed/excel', + import_nokia_raml20_csv = BashOperator( + task_id='import_nokia_raml20_parsed_csv', + bash_command='python /mediation/bin/load_cm_data_into_db.py nokia_raml20 /mediation/data/cm/nokia/parsed/raml20', dag=dag) - t_run_zte_excel_insert_queries = BashOperator( - task_id='run_zte_excel_insert_queries', - bash_command='python /mediation/bin/run_cm_load_insert_queries.py zte_excel', + t_run_nokia_raml20_insert_queries = BashOperator( + task_id='run_nokia_raml20_insert_queries', + bash_command='python /mediation/bin/run_cm_load_insert_queries.py nokia_raml20', dag=dag) - # Clear 4G CM data tables - def clear_zte_excel_cm_tables(): + def clear_nokia_raml20_cm_tables(): pass t50 = PythonOperator( - task_id='clear_zte_excel_cm_tables', - python_callable=clear_zte_excel_cm_tables, + task_id='clear_nokia_raml20_cm_tables', + python_callable=clear_nokia_raml20_cm_tables, dag=dag) - dag.set_dependency('parse_zte_excel_cm_files', 'clear_zte_excel_cm_tables') - dag.set_dependency('clear_zte_excel_cm_tables', 'import_zte_excel_parsed_csv') - dag.set_dependency('import_zte_excel_parsed_csv', 'run_zte_excel_insert_queries') + dag.set_dependency('parse_nokia_raml20_cm_files', 'clear_nokia_raml20_cm_tables') + dag.set_dependency('clear_nokia_raml20_cm_tables', 'import_nokia_raml20_parsed_csv') + dag.set_dependency('import_nokia_raml20_parsed_csv', 'run_nokia_raml20_insert_queries') return dag \ No newline at end of file diff --git a/mediation/packages/__init__.py b/mediation/packages/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/mediation/packages/bts/__init__.py b/mediation/packages/bts/__init__.py index 41aa183..11c8f88 100644 --- a/mediation/packages/bts/__init__.py +++ b/mediation/packages/bts/__init__.py @@ -4,4 +4,5 @@ from .network_audit import NetworkAudit from .huawei_cm import HuaweiCM from .ericsson_cm import EricssonCM -from .zte_cm import ZTECM \ No newline at end of file +from .zte_cm import ZTECM +from .nokia_cm import NokiaCM \ No newline at end of file diff --git a/mediation/packages/bts/huawei_cm.py b/mediation/packages/bts/huawei_cm.py index 58cdf78..14f9d5e 100644 --- a/mediation/packages/bts/huawei_cm.py +++ b/mediation/packages/bts/huawei_cm.py @@ -10,7 +10,17 @@ class HuaweiCM(object): """Process Huawie configuration management data""" def __init__(self): - self.db_engine = create_engine('postgresql://bodastage:password@database/bts') + + #@TODO: Refactor + sqlalchemy_db_uri = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( + os.getenv("BTS_DB_USER", "bodastage"), + os.getenv("BTS_DB_PASS", "password"), + os.getenv("BTS_DB_HOST", "database"), + os.getenv("BTS_DB_PORT", "5432"), + os.getenv("BTS_DB_NAME", "bts"), + ) + + self.db_engine = create_engine(sqlalchemy_db_uri) def extract_live_network_bscs(self): """Extact BSCs from the live network""" diff --git a/mediation/packages/bts/network_audit.py b/mediation/packages/bts/network_audit.py index a91278b..f77b6ed 100644 --- a/mediation/packages/bts/network_audit.py +++ b/mediation/packages/bts/network_audit.py @@ -10,6 +10,7 @@ class NetworkAudit(object): def __init__(self): ''' Constructor for this class. ''' + #@TODO: Refactor sqlalchemy_db_uri = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( os.getenv("BTS_DB_USER", "bodastage"), os.getenv("BTS_DB_PASS", "password"), diff --git a/mediation/packages/bts/nokia_cm.py b/mediation/packages/bts/nokia_cm.py new file mode 100644 index 0000000..ec42608 --- /dev/null +++ b/mediation/packages/bts/nokia_cm.py @@ -0,0 +1,124 @@ +import psycopg2 +from sqlalchemy import create_engine, MetaData, Table +from sqlalchemy.orm import sessionmaker +from sqlalchemy.sql import text +import os + +class NokiaCM(object): + + def __init__(self): + ''' Constructor for this class. ''' + + #@TODO: Refactor + sqlalchemy_db_uri = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( + os.getenv("BTS_DB_USER", "bodastage"), + os.getenv("BTS_DB_PASS", "password"), + os.getenv("BTS_DB_HOST", "database"), + os.getenv("BTS_DB_PORT", "5432"), + os.getenv("BTS_DB_NAME", "bts"), + ) + + self.engine = create_engine(sqlalchemy_db_uri) + + + def extract_live_network_bscs(self): + pass + + def extract_live_network_rncs(self): + pass + + def extract_live_network_enodebs(self): + pass + + def extract_live_network_2g_sites(self): + pass + + def extract_live_network_2g_cells(self): + pass + + def extract_live_network_2g_cells_params(self): + pass + + def extract_live_network_3g_sites(self): + pass + + def extract_live_network_3g_cells(self): + pass + + def extract_live_network_3g_cells_params(self): + pass + + def extract_live_network_4g_cells(self): + pass + + def extract_live_network_2g_externals_on_2g(self): + pass + + def extract_live_network_2g_externals_on_3g(self): + pass + + def extract_live_network_2g_externals_on_4g(self): + pass + + def extract_live_network_3g_externals_on_2g(self): + pass + + def extract_live_network_3g_externals_on_3g(self): + pass + + def extract_live_network_3g_externals_on_4g(self): + pass + + def extract_live_network_4g_externals_on_2g(self): + pass + + def extract_live_network_4g_externals_on_3g(self): + pass + + def extract_live_network_4g_externals_on_4g(self): + pass + + def extract_live_network_externals_on_2g(self): + self.extract_live_network_2g_externals_on_2g() + self.extract_live_network_3g_externals_on_2g() + self.extract_live_network_4g_externals_on_2g() + + def extract_live_network_externals_on_3g(self): + self.extract_live_network_2g_externals_on_3g() + self.extract_live_network_3g_externals_on_3g() + self.extract_live_network_4g_externals_on_3g() + + def extract_live_network_externals_on_4g(self): + self.extract_live_network_2g_externals_on_4g() + self.extract_live_network_3g_externals_on_4g() + self.extract_live_network_4g_externals_on_4g() + + def extract_live_network_4g_cells_params(self): + pass + + def extract_live_network_2g2g_nbrs(self): + pass + + def extract_live_network_2g3g_nbrs(self): + pass + + def extract_live_network_2g4g_nbrs(self): + pass + + def extract_live_network_3g2g_nbrs(self): + pass + + def extract_live_network_3g3g_nbrs(self): + pass + + def extract_live_network_3g4g_nbrs(self): + pass + + def extract_live_network_4g2g_nbrs(self): + pass + + def extract_live_network_4g3g_nbrs(self): + pass + + def extract_live_network_4g4g_nbrs(self): + pass diff --git a/mediation/packages/bts/zte_cm.py b/mediation/packages/bts/zte_cm.py index b1005da..b89f2f8 100644 --- a/mediation/packages/bts/zte_cm.py +++ b/mediation/packages/bts/zte_cm.py @@ -10,7 +10,16 @@ class ZTECM(object): """Process ZTE configuration management data""" def __init__(self): - self.db_engine = create_engine('postgresql://bodastage:password@database/bts') + #@TODO: Refactor + sqlalchemy_db_uri = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( + os.getenv("BTS_DB_USER", "bodastage"), + os.getenv("BTS_DB_PASS", "password"), + os.getenv("BTS_DB_HOST", "database"), + os.getenv("BTS_DB_PORT", "5432"), + os.getenv("BTS_DB_NAME", "bts"), + ) + + self.db_engine = create_engine(sqlalchemy_db_uri) def extract_zte_bscs(self): Session = sessionmaker(bind=self.db_engine) From b68790d00e0feb32b8790f01228848087b5d3014 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Fri, 22 Mar 2019 00:36:12 +0300 Subject: [PATCH 04/17] Extract Nokia RNCs, BSCs, 2G cells and sites --- bts-ce-database | 2 +- mediation/bin/load_cm_data_into_db.py | 34 +++--- mediation/packages/bts/nokia_cm.py | 165 ++++++++++++++++++++++++-- 3 files changed, 176 insertions(+), 25 deletions(-) diff --git a/bts-ce-database b/bts-ce-database index 3d63b4f..e421730 160000 --- a/bts-ce-database +++ b/bts-ce-database @@ -1 +1 @@ -Subproject commit 3d63b4fc10278ebea563c6f427407483dfec4e3c +Subproject commit e4217309f74258b4d04edf7f7dba7a72b033d07b diff --git a/mediation/bin/load_cm_data_into_db.py b/mediation/bin/load_cm_data_into_db.py index 3459ef1..d8a0e13 100644 --- a/mediation/bin/load_cm_data_into_db.py +++ b/mediation/bin/load_cm_data_into_db.py @@ -2,7 +2,7 @@ # # Usage: load_cm_data_into_db.py # -#Note: The file names must match the table names in the schema. +# Note: The file names must match the table names in the schema. import os import sys @@ -10,9 +10,9 @@ import subprocess if len(sys.argv) != 3: - print("Format: {0} {1} {2}".format( os.path.basename(__file__), "", "")) - sys.exit() - + print("Format: {0} {1} {2}".format( os.path.basename(__file__), "", "")) + sys.exit() + schema= sys.argv[1] csv_folder=sys.argv[2] @@ -23,16 +23,16 @@ loader_env["PGPASSWORD"] = 'password' for file in os.listdir(csv_folder): - filename = os.path.basename(file) - mo_name = filename.replace(".csv","") - full_path = csv_folder + os.path.sep + file - - truncate_cmd="TRUNCATE TABLE {}.\"{}\";".format(schema, mo_name) - copy_cmd = "\COPY {}.\"{}\" FROM '{}' CSV HEADER;".format(schema, mo_name, full_path) - - print(truncate_cmd) - print(copy_cmd) - print("") - - subprocess.call(["psql", "-U", "bodastage", "-d", "bts","-h","database" ,"-c", truncate_cmd ], env=loader_env) - subprocess.call(["psql", "-U", "bodastage", "-d", "bts","-h","database" ,"-c", copy_cmd ], env=loader_env) \ No newline at end of file + filename = os.path.basename(file) + mo_name = filename.replace(".csv","") + full_path = csv_folder + os.path.sep + file + + truncate_cmd="TRUNCATE TABLE {}.\"{}\";".format(schema, mo_name) + copy_cmd = "\COPY {}.\"{}\" FROM '{}' CSV HEADER;".format(schema, mo_name, full_path) + + print(truncate_cmd) + print(copy_cmd) + print("") + + subprocess.call(["psql", "-U", "bodastage", "-d", "bts","-h","database" ,"-c", truncate_cmd ], env=loader_env) + subprocess.call(["psql", "-U", "bodastage", "-d", "bts","-h","database" ,"-c", copy_cmd ], env=loader_env) \ No newline at end of file diff --git a/mediation/packages/bts/nokia_cm.py b/mediation/packages/bts/nokia_cm.py index ec42608..5f69ae8 100644 --- a/mediation/packages/bts/nokia_cm.py +++ b/mediation/packages/bts/nokia_cm.py @@ -18,23 +18,174 @@ def __init__(self): os.getenv("BTS_DB_NAME", "bts"), ) - self.engine = create_engine(sqlalchemy_db_uri) - + self.db_engine = create_engine(sqlalchemy_db_uri) def extract_live_network_bscs(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + # BSC6900 + sql = """ + INSERT INTO live_network.nodes + (pk,date_added, date_modified, type,"name", vendor_pk, tech_pk, added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_nodes_pk'), + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified, + 'BSC' AS node_type, + TRIM(t1."name") AS "name" , + 4 AS vendor_pk, -- 1=Ericsson, 2=Huawei + 1 AS tech_pk , -- 1=gsm, 2-umts,3=lte + 0 AS added_by, + 0 AS modified_by + FROM nokia_cm."BSC" t1 + INNER JOIN cm_loads t3 on t3.pk = t1."LOADID" + LEFT OUTER JOIN live_network.nodes t2 ON TRIM(t1."name") = t2."name" + WHERE + t2."name" IS NULL + ON CONFLICT ON CONSTRAINT unique_nodes + DO NOTHING + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) def extract_live_network_rncs(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.nodes + (pk,date_added, date_modified, type,"name", vendor_pk, tech_pk, added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_nodes_pk'), + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified, + 'RNC' AS node_type, + TRIM(t1."name") AS "name" , + 4 AS vendor_pk, -- 1=Ericsson, 2=Huawei, 3-ZTE + 2 AS tech_pk , -- 1=gsm, 2-umts,3=lte + 0 AS added_by, + 0 AS modified_by + FROM nokia_cm."RNC" t1 + INNER JOIN cm_loads t3 on t3.pk = t1."LOADID" + LEFT OUTER JOIN live_network.nodes t2 ON TRIM(t1."name") = t2."name" + WHERE + t2."name" IS NULL + AND t3.is_current_load = true + ON CONFLICT ON CONSTRAINT unique_nodes + DO NOTHING + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_enodebs(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.sites + (pk, date_added,date_modified, tech_pk, vendor_pk, "name", added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_sites_pk'), + "DATETIME" AS date_added, + "DATETIME" AS date_modified, + 3 AS tech_pk , -- 1=gsm, 2-umts,3=lte, + 4 AS vendor_pk, -- 1=Ericsson, 2=Huawei + TRIM(t1."name"), + 0 AS added_by, + 0 AS modified_by + FROM + nokia_cm."LNBTS" t1 + INNER JOIN cm_loads t3 on t3.pk = t1."LOADID" + LEFT OUTER JOIN live_network.sites t2 ON TRIM(t1."name") = t2."name" + WHERE + t2."name" IS NULL + AND t3.is_current_load = true + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_2g_sites(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.sites + (pk, date_added,date_modified,added_by, modified_by, tech_pk, vendor_pk, name, node_pk) + SELECT DISTINCT + NEXTVAL('live_network.seq_sites_pk'), + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified, + 0 AS added_by, + 0 AS modified_by, + 1 AS tech_pk, -- tech 3 -lte, 2 -umts, 1-gms + 4 AS vendor_pk, -- 1- Ericsson, 2 - Huawei, 3 - zte, 4-nokika, etc... + CONCAT(TRIM(t1."name"),'(',TRIM(t1."lapdLinkName"),')') AS "name", + t3.pk as node_pk -- node primary key + from nokia_cm."BCF" t1 + INNER JOIN cm_loads t5 on t5.pk = t1."LOADID" + INNER JOIN nokia_cm."BSC" t2 ON t2."FILENAME" = t1."FILENAME" + AND t2."LOADID" = t1."LOADID" + AND SUBSTRING(t1."DISTNAME",'(BSC-\d+)') = SUBSTRING(t2."DISTNAME",'(BSC-\d+)') + INNER join live_network.nodes t3 on TRIM( t3."name") = TRIM(t2."name") + AND t3.vendor_pk = 4 and t3.tech_pk = 1 + LEFT JOIN live_network.sites t4 on t4."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."lapdLinkName"),')') + AND t4.vendor_pk = 4 and t4.tech_pk = 1 + WHERE + t4."name" IS NULL + AND t5.is_current_load = true + ON CONFLICT ON CONSTRAINT uq_site + DO NOTHING + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + session.close() def extract_live_network_2g_cells(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.cells + (pk, date_added,date_modified,added_by, modified_by, tech_pk, vendor_pk, name, site_pk) + SELECT DISTINCT + nextval('live_network.seq_cells_pk'), + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified, + 0 AS added_by, + 0 AS modified_by, + 1 AS tech_pk, -- tech 3 -lte, 2 -umts, 1-gms + 4 AS vendor_pk, -- 1- Ericsson, 2 - Huawei, 3 - ZTE, 4-Nokia + CONCAT(TRIM(t1."name"),'(',TRIM(t1."cellId"),')') AS name, + t4.pk as site_pk-- site primary key + FROM nokia_cm."BTS" t1 + -- LOAD + INNER JOIN cm_loads t8 on t8.pk = t1."LOADID" + INNER JOIN nokia_cm."BCF" t9 ON + t9."FILENAME" = t1."FILENAME" + AND t9."LOADID" = t1."LOADID" + AND CONCAT(TRIM(t9."DISTNAME"), '/BTS-',TRIM(t1."segmentId")) = TRIM(t1."DISTNAME") + INNER JOIN live_network.sites t4 ON + t4."name" = CONCAT(TRIM(t9."name"),'(',TRIM(t9."lapdLinkName"),')') + AND t4.vendor_pk = 4 + AND t4.tech_pk = 1 + LEFT JOIN live_network.cells t5 on t5."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."cellId",')')) + AND t5.tech_pk = 1 + AND t5.vendor_pk = 4 + WHERE + t5."name" IS NULL + AND t8.is_current_load = true + ON CONFLICT ON CONSTRAINT uq_live_cells + DO NOTHING + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_2g_cells_params(self): pass From 7556bca6ff32c50fda3d862bc9c6438c7cda93e0 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Fri, 22 Mar 2019 05:04:42 +0300 Subject: [PATCH 05/17] Extract Nokia 2G parameters --- mediation/packages/bts/nokia_cm.py | 74 +++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/mediation/packages/bts/nokia_cm.py b/mediation/packages/bts/nokia_cm.py index 5f69ae8..1268c3b 100644 --- a/mediation/packages/bts/nokia_cm.py +++ b/mediation/packages/bts/nokia_cm.py @@ -188,7 +188,79 @@ def extract_live_network_2g_cells(self): session.close() def extract_live_network_2g_cells_params(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + # @TODO: Update live_network.gsm_cells_data instead of truncating it + # Truncate paramete table + # self.db_engine.execute(text("TRUNCATE TABLE live_network.gsm_cells_data").execution_options(autocommit=True)) + # self.db_engine.execute(text("ALTER SEQUENCE live_network.seq_gsm_cells_data_pk RESTART WITH 1;"). + # execution_options(autocommit=True)) + + # The data is alot. Let's handle per site + site_sql = """SELECT pk, "name" from live_network.sites where vendor_pk = 2 and tech_pk = 1""" + + result = self.db_engine.execute(site_sql) + + # for row in result: + metadata = MetaData() + Site = Table('sites', metadata, autoload=True, autoload_with=self.db_engine, schema="live_network") + for site in session.query(Site).filter_by(vendor_pk=2).filter_by(tech_pk=1).yield_per(5): + (site_pk, site_name) = (site[0], site[1]) + + logging.info("Extracting cells parameters for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) + + sql = """ + INSERT INTO live_network.gsm_cells_data + (pk, name, cell_pk, ci, bcc, ncc, bsic, bcch, lac, latitude, longitude, cgi, azimuth, height, + mechanical_tilt, electrical_tilt, hsn, hopping_type, tch_carriers, mcc, mnc, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_gsm_cells_data_pk') as pk, + t1."CELLNAME" AS name, + t2.pk AS cell_pk, + t1."CI"::integer AS ci, + t1."BCC"::integer AS bcc, + t1."NCC"::integer AS ncc, + CONCAT(trim(t1."NCC"),trim(t1."BCC"))::integer AS bsic, + t4."FREQ"::integer AS bcch, + t1."LAC"::integer AS lac, + t6."LATIINT"::float AS latitude, + t6."LONGIINT"::float as longitude , + CONCAT( TRIM(t1."MCC"),'-', TRIM(t1."MNC"),'-',TRIM(t1."LAC"),'-',TRIM(t1."CI")) AS cgi, + t6."ANTAANGLE"::integer AS azimuth, + t6."ALTITUDE"::integer AS height, + null AS mechanical_tilt, + -- t1."SECTOR_ANGLE"::integer AS sector_angle, + -- t6."MAXTA" AS ta + -- t1."STATE" AS STATE -- ACTIVE or INACTIVE + null AS electrical_tilt, + null AS hsn, + null AS hopping_type, + null AS tch_carriers, + t1."MCC"::integer as mcc, + t1."MNC"::integer as mnc, + 0 AS modified_by, + 0 AS added_by, + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified + FROM huawei_cm."GCELL" t1 + INNER JOIN cm_loads t8 on t8.pk = t1."LOADID" + INNER JOIN live_network.cells t2 on t2."name" = t1."CELLNAME" AND t2.vendor_pk = 2 AND t2.tech_pk = 1 + INNER JOIN huawei_cm."GCELLBASICPARA" t3 on t3."FILENAME" = t1."FILENAME" AND t3."LOADID" = t1."LOADID" + INNER JOIN huawei_cm."GTRX" t4 on t4."FILENAME" = t1."FILENAME" AND t4."CELLID" = t1."CELLID" AND t4."LOADID" = t1."LOADID" + INNER JOIN live_network.sites t5 on t5.pk = t2.site_pk + INNER JOIN huawei_cm."GCELLLCS" t6 on t6."FILENAME" = t1."FILENAME" AND t6."CELLID" = t1."CELLID" AND t6."LOADID" = t1."LOADID" + INNER JOIN huawei_cm."CELLBIND2BTS" t7 on t7."CELLID" = t1."CELLID" AND t6."FILENAME" = t1."FILENAME" AND t7."LOADID" = t1."LOADID" + WHERE + t5."name" ='{0}' + AND t8.is_current_load = true + ; + """.format(site_name) + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() + def extract_live_network_3g_sites(self): pass From be88053ffabc6932767dbc1ca35725f9a5b8cd05 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Sat, 23 Mar 2019 04:47:30 +0300 Subject: [PATCH 06/17] Extract Nokia 3G parameters --- bts-ce-database | 2 +- docker-compose.yml | 2 +- mediation/dags/cm_load.py | 40 +++--- mediation/packages/bts/nokia_cm.py | 199 ++++++++++++++++++++++++++++- 4 files changed, 218 insertions(+), 25 deletions(-) diff --git a/bts-ce-database b/bts-ce-database index e421730..40de109 160000 --- a/bts-ce-database +++ b/bts-ce-database @@ -1 +1 @@ -Subproject commit e4217309f74258b4d04edf7f7dba7a72b033d07b +Subproject commit 40de109613a58323327ce1e7738c4780d42771ec diff --git a/docker-compose.yml b/docker-compose.yml index 62179a0..ea7e216 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,7 +26,7 @@ services: - "15670:15670" network_mode: "bridge" container_name: "bts-ce-msgbroker" - command: bash -c "cat ./queue_setup.sh | tr -d "\r" | bash -" + command: bash -c "rabbitmq-plugins enable rabbitmq_web_stomp; rabbitmq-server stop; rabbitmq-server start" hostname: rmq volumes: - ./queue_scripts/rabbitmq.config:/etc/rabbitmq/rabbitmq.config:ro diff --git a/mediation/dags/cm_load.py b/mediation/dags/cm_load.py index 60b46b6..3739cb0 100644 --- a/mediation/dags/cm_load.py +++ b/mediation/dags/cm_load.py @@ -932,7 +932,7 @@ def extract_zte_4g4g_nbrs(): def extract_nokia_bscs(): - nokia_cm.extract_nokia_bscs() + nokia_cm.extract_live_network_bscs() task_extract_nokia_bscs = PythonOperator( @@ -942,7 +942,7 @@ def extract_nokia_bscs(): def extract_nokia_rncs(): - nokia_cm.extract_nokia_rncs() + nokia_cm.extract_live_network_rncs() task_extract_nokia_rncs = PythonOperator( @@ -952,7 +952,7 @@ def extract_nokia_rncs(): def extract_nokia_enodes(): - nokia_cm.extract_nokia_enodes() + nokia_cm.extract_live_network_enodes() task_extract_nokia_enodes = PythonOperator( @@ -962,7 +962,7 @@ def extract_nokia_enodes(): def extract_nokia_2g_sites(): - nokia_cm.extract_nokia_2g_sites() + nokia_cm.extract_live_network_2g_sites() task_extract_nokia_2g_sites = PythonOperator( @@ -971,7 +971,7 @@ def extract_nokia_2g_sites(): dag=dag) def extract_nokia_2g_cells(): - nokia_cm.extract_nokia_2g_cells() + nokia_cm.extract_live_network_2g_cells() task_extract_nokia_2g_cells = PythonOperator( @@ -981,7 +981,7 @@ def extract_nokia_2g_cells(): def extract_nokia_2g_cell_params(): - nokia_cm.extract_nokia_2g_cell_params() + nokia_cm.extract_live_network_2g_cell_params() task_extract_nokia_2g_cell_params = PythonOperator( @@ -991,7 +991,7 @@ def extract_nokia_2g_cell_params(): def extract_nokia_3g_sites(): - nokia_cm.extract_nokia_3g_sites() + nokia_cm.extract_live_network_3g_sites() task_extract_nokia_3g_sites = PythonOperator( @@ -1000,7 +1000,7 @@ def extract_nokia_3g_sites(): dag=dag) def extract_nokia_3g_cells(): - nokia_cm.extract_nokia_3g_cells() + nokia_cm.extract_live_network_3g_cells() task_extract_nokia_3g_cells = PythonOperator( @@ -1010,7 +1010,7 @@ def extract_nokia_3g_cells(): def extract_nokia_3g_cell_params(): - nokia_cm.extract_nokia_3g_cell_params() + nokia_cm.extract_live_network_3g_cells_params() task_extract_nokia_3g_cell_params = PythonOperator( @@ -1020,7 +1020,7 @@ def extract_nokia_3g_cell_params(): def extract_nokia_4g_cells(): - nokia_cm.extract_nokia_4g_cells() + nokia_cm.extract_live_network_4g_cells() task_extract_nokia_4g_cells = PythonOperator( @@ -1030,7 +1030,7 @@ def extract_nokia_4g_cells(): def extract_nokia_4g_cell_params(): - nokia_cm.extract_nokia_4g_cell_params() + nokia_cm.extract_live_network_4g_cell_params() task_extract_nokia_4g_cell_params = PythonOperator( @@ -1040,7 +1040,7 @@ def extract_nokia_4g_cell_params(): def extract_nokia_2g2g_nbrs(): - nokia_cm.extract_nokia_2g2g_nbrs() + nokia_cm.extract_live_network_2g2g_nbrs() task_extract_nokia_2g2g_nbrs = PythonOperator( @@ -1050,7 +1050,7 @@ def extract_nokia_2g2g_nbrs(): def extract_nokia_2g3g_nbrs(): - nokia_cm.extract_nokia_2g3g_nbrs() + nokia_cm.extract_live_network_2g3g_nbrs() task_extract_nokia_2g3g_nbrs = PythonOperator( @@ -1060,7 +1060,7 @@ def extract_nokia_2g3g_nbrs(): def extract_nokia_2g4g_nbrs(): - nokia_cm.extract_nokia_2g4g_nbrs() + nokia_cm.extract_live_network_2g4g_nbrs() task_extract_nokia_2g4g_nbrs = PythonOperator( @@ -1070,7 +1070,7 @@ def extract_nokia_2g4g_nbrs(): def extract_nokia_3g2g_nbrs(): - nokia_cm.extract_nokia_3g2g_nbrs() + nokia_cm.extract_live_network_3g2g_nbrs() task_extract_nokia_3g2g_nbrs = PythonOperator( @@ -1080,7 +1080,7 @@ def extract_nokia_3g2g_nbrs(): def extract_nokia_3g3g_nbrs(): - nokia_cm.extract_nokia_3g3g_nbrs() + nokia_cm.extract_live_network_3g3g_nbrs() task_extract_nokia_3g3g_nbrs = PythonOperator( @@ -1090,7 +1090,7 @@ def extract_nokia_3g3g_nbrs(): def extract_nokia_3g4g_nbrs(): - nokia_cm.extract_nokia_3g4g_nbrs() + nokia_cm.extract_live_network_3g4g_nbrs() task_extract_nokia_3g4g_nbrs = PythonOperator( @@ -1100,7 +1100,7 @@ def extract_nokia_3g4g_nbrs(): def extract_nokia_4g2g_nbrs(): - nokia_cm.extract_nokia_4g2g_nbrs() + nokia_cm.extract_live_network_4g2g_nbrs() task_extract_nokia_4g2g_nbrs = PythonOperator( @@ -1110,7 +1110,7 @@ def extract_nokia_4g2g_nbrs(): def extract_nokia_4g3g_nbrs(): - nokia_cm.extract_nokia_4g3g_nbrs() + nokia_cm.extract_live_network_4g3g_nbrs() task_extract_nokia_4g3g_nbrs = PythonOperator( @@ -1120,7 +1120,7 @@ def extract_nokia_4g3g_nbrs(): def extract_nokia_4g4g_nbrs(): - nokia_cm.extract_nokia_4g4g_nbrs() + nokia_cm.extract_live_network_4g4g_nbrs() task_extract_nokia_4g4g_nbrs = PythonOperator( diff --git a/mediation/packages/bts/nokia_cm.py b/mediation/packages/bts/nokia_cm.py index 1268c3b..44e4883 100644 --- a/mediation/packages/bts/nokia_cm.py +++ b/mediation/packages/bts/nokia_cm.py @@ -3,6 +3,7 @@ from sqlalchemy.orm import sessionmaker from sqlalchemy.sql import text import os +import logging class NokiaCM(object): @@ -20,6 +21,14 @@ def __init__(self): self.db_engine = create_engine(sqlalchemy_db_uri) + self.logger = logging.getLogger('network-baseline') + handler = logging.StreamHandler() + formatter = logging.Formatter( + '%(asctime)s %(name)-12s %(levelname)-8s %(message)s') + handler.setFormatter(formatter) + self.logger.addHandler(handler) + self.logger.setLevel(logging.INFO) + def extract_live_network_bscs(self): Session = sessionmaker(bind=self.db_engine) session = Session() @@ -263,13 +272,197 @@ def extract_live_network_2g_cells_params(self): def extract_live_network_3g_sites(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.sites + (pk, date_added,date_modified,added_by, modified_by, tech_pk, vendor_pk, name, node_pk) + SELECT + NEXTVAL('live_network.seq_sites_pk'), + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified, + 0 AS added_by, + 0 AS modified_by, + 2, -- tech 3 -lte, 2 -umts, 1-gms + 4, -- 1- Ericsson, 2 - Huawei, 3-ZTE, 4-Nokia + TRIM(t1."name" ) as name, + t5.pk as node_pk + FROM + nokia_cm."WBTS" t1 + INNER JOIN cm_loads t2 ON + t2.pk = t1."LOADID" + INNER JOIN nokia_cm."RNC" t3 ON + t3."LOADID" = t1."LOADID" + AND t3."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*RNC-\d+') + AND t3."FILENAME" = t1."FILENAME" + INNER JOIN live_network.nodes t5 ON t5."name" = TRIM(t3."name") + LEFT JOIN live_network.sites t4 on t4."name" = TRIM(t1."name") + AND t4.vendor_pk = 4 and t4.tech_pk = 2 + WHERE + t4."name" IS NULL + AND t2.is_current_load = true + ON CONFLICT ON CONSTRAINT uq_site + DO NOTHING + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_3g_cells(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + metadata = MetaData() + Site = Table('sites', metadata, autoload=True, autoload_with=self.db_engine, schema="live_network") + sites = session.query(Site).filter_by(vendor_pk=4).filter_by(tech_pk=2).all() + + self.logger.info("Extracting live network 3G cells for Nokia...") + i = 0 + sites_len = len(sites) + while i < sites_len: + # Handle iterations at the end of the site list + end = i + 5; + if sites_len < i + 5: + end = sites_len + + placeholder_range = 5 + if end == sites_len: + placeholder_range = end - i + + site_list = list(map(lambda x: x[1], sites[i:end])) + + placeholders = [] + site_list_placeholders = {} + for r in range(placeholder_range): + placeholders.append(':p' + str(r)) + site_list_placeholders['p' + str(r)] = site_list[r] + + + i = i + 5 + sql = """ + INSERT INTO live_network.cells + (pk, date_added,date_modified,added_by, modified_by, tech_pk, vendor_pk, name, site_pk) + SELECT + nextval('live_network.seq_cells_pk'), + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified, + 0 AS added_by, + 0 AS modified_by, + 2 AS tech_pk, -- tech 3 -lte, 2 -umts, 1-gms + 4 AS vendor_pk, -- 1- Ericsson, 2 - Huawei, 3 - ZTE, 4-Nokia + CONCAT(TRIM(t1."name"),'(',TRIM(t1."CId"),')') AS name, + t4.pk as site_pk-- site primary key + FROM nokia_cm."WCEL" t1 + INNER JOIN cm_loads t6 ON + t6.pk = t1."LOADID" + INNER JOIN nokia_cm."WBTS" t7 on + t7."FILENAME" = t1."FILENAME" + AND t7."LOADID" = t1."LOADID" + AND TRIM(t7."DISTNAME") = SUBSTRING(t1."DISTNAME",'.*WBTS-\d+') + INNER JOIN nokia_cm."RNC" t8 ON + t8."FILENAME" = t1."FILENAME" + AND t8."LOADID" = t1."LOADID" + AND TRIM(t8."DISTNAME") = SUBSTRING(t1."DISTNAME", '.*RNC-\d+') + INNER JOIN live_network.nodes t3 on t3."name" = TRIM(t8."name" ) + AND t3.vendor_pk = 4 + AND t3.tech_pk = 2 + INNER JOIN live_network.sites t4 on t4."name" = TRIM(t7."name") + AND t4.vendor_pk = 4 + AND t4.tech_pk = 2 + AND t4.node_pk = t3.pk + LEFT JOIN live_network.cells t5 on t5."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."CId"),')') + AND t5.tech_pk = 2 + AND t5.vendor_pk = 4 + WHERE + t4."name" IN ({}) + AND t6.is_current_load = true + """.format(', '.join(placeholders)) + + self.db_engine.execute(text(sql).execution_options(autocommit=True), **site_list_placeholders) + + self.logger.info("Completed extraction of live network Nokia 3G cells") def extract_live_network_3g_cells_params(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + # Truncate paramete table + # self.db_engine.execute(text("TRUNCATE TABLE live_network.umts_cells_data").execution_options(autocommit=True)) + # self.db_engine.execute(text("ALTER SEQUENCE live_network.seq_umts_cells_data_pk RESTART WITH 1;"). + # execution_options(autocommit=True)) + + # The data is alot. Let's handle per site + site_sql = """SELECT pk, "name" from live_network.sites where vendor_pk = 4 and tech_pk = 2""" + + result = self.db_engine.execute(site_sql) + + for row in result: + (site_pk, site_name) = row + + self.logger.info("Extracting cells parameters for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) + + sql = """ + INSERT INTO live_network.umts_cells_data + (pk, date_added, date_modified, added_by, modified_by,bch_power,cell_id,cell_pk,lac,latitude, longitude, + maximum_transmission_power, "name", cpich_power, primary_sch_power, scrambling_code, rac, sac, + secondary_sch_power, site_pk, tech_pk, vendor_pk, uarfcn_dl,uarfcn_ul, ura_list, azimuth, cell_range, + height, site_sector_carrier, mcc,mnc,ura,localcellid, ci) + SELECT + NEXTVAL('live_network.seq_umts_cells_data_pk'), + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified, + 0 AS added_by, + 0 AS modified_by, + NULL AS bchpower, -- t5."BCHPOWER"::integer AS bch_power, + t1."CId"::integer, + t4.pk AS cell_pk, -- cellid + t1."LAC"::integer AS lac, + -- (t4."antennaPosition_latitude"::float/93206.76)*(-1::float*t4."antennaPosition_latitudeSign"::float) + null AS latitude, + -- t4."antennaPosition_longitude"::float/46603.38 AS longitude, + null AS longitude, + t1."PtxCellMax"::float AS maximum_transmission_power, + CONCAT(TRIM(t1."name"),'(',TRIM(t1."CId"),')') as cell_name, + t1."PtxPrimaryCPICH"::float AS cpich_power, + t1."PtxPrimarySCH"::float AS primary_sch_power, + t1."PriScrCode"::integer AS scrambling_code, + -- t1."LAC" AS lac, + t1."RAC"::integer, + t1."SAC"::integer, + t1."PtxSecSCH"::float AS secondary_sch_power, + t4.site_pk, -- site pk + 2, -- umts + 4, -- Nokia + t1."UARFCN"::integer as dl_uarfcn, + null as ul_uarfcn, -- t1."UARFCNUPLINK"::integer, + t1."URAId" AS ura_list , + null AS azimuth, -- azimuth, + null AS cell_range, -- cellrange, + null AS height, -- height + null AS site_sector_carrier, + t1."WCELMCC"::integer AS mcc, + t1."WCELMNC"::integer AS mnc, + t1."URAId" AS ura , + NULL AS locelcellid, -- t1."LOCELL"::integer AS localcellid, + t1."CId"::integer AS ci + FROM + nokia_cm."WCEL" t1 + INNER JOIN cm_loads t2 on t2.pk = t1."LOADID" + INNER JOIN nokia_cm."WBTS" t3 on + t3."FILENAME" = t1."FILENAME" + AND t3."LOADID" = t1."LOADID" + AND TRIM(t3."DISTNAME") = SUBSTRING(t1."DISTNAME",'.*WBTS-\d+') + LEFT JOIN live_network.cells t4 ON + t4.name = CONCAT(TRIM(t1."name"),'(',TRIM(t1."CId"),')') + WHERE TRIM(t3."name") = '{0}' + AND t2.is_current_load = true + """.format(site_name) + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_4g_cells(self): pass From 6998ee77fe132ec07d9a79310fac878609e7cb1c Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Mon, 25 Mar 2019 18:25:15 +0300 Subject: [PATCH 07/17] Extract Nokia relations --- bts-ce-database | 2 +- docker-compose.yml | 2 +- mediation/packages/bts/nokia_cm.py | 875 ++++++++++++++++++++++++++--- 3 files changed, 809 insertions(+), 70 deletions(-) diff --git a/bts-ce-database b/bts-ce-database index 40de109..f71b6ce 160000 --- a/bts-ce-database +++ b/bts-ce-database @@ -1 +1 @@ -Subproject commit 40de109613a58323327ce1e7738c4780d42771ec +Subproject commit f71b6cefcf6bc3cfd53f85e67a81f6454f29b808 diff --git a/docker-compose.yml b/docker-compose.yml index ea7e216..95b4ba8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -123,7 +123,7 @@ services: - "21:21" - "30000-30009:30000-30009" volumes: - - /home/bodastage/bts-ce/mediation/data:/home/ftpusers/bodastage + - ./mediation/data:/home/ftpusers/bodastage network_mode: "bridge" container_name: "bts-ce-ftp" # command: ["pure-pw","useradd","bodastage","-f", "/etc/pure-ftpd/passwd/pureftpd.passwd", "-m", "-u", "ftpuser", "-d", "/home/ftpusers/bodastage"] diff --git a/mediation/packages/bts/nokia_cm.py b/mediation/packages/bts/nokia_cm.py index 44e4883..e8dd6b1 100644 --- a/mediation/packages/bts/nokia_cm.py +++ b/mediation/packages/bts/nokia_cm.py @@ -196,7 +196,7 @@ def extract_live_network_2g_cells(self): session.close() - def extract_live_network_2g_cells_params(self): + def extract_live_network_2g_cell_params(self): Session = sessionmaker(bind=self.db_engine) session = Session() @@ -207,62 +207,73 @@ def extract_live_network_2g_cells_params(self): # execution_options(autocommit=True)) # The data is alot. Let's handle per site - site_sql = """SELECT pk, "name" from live_network.sites where vendor_pk = 2 and tech_pk = 1""" + site_sql = """SELECT pk, "name" from live_network.sites where vendor_pk = 4 and tech_pk = 1""" result = self.db_engine.execute(site_sql) # for row in result: metadata = MetaData() Site = Table('sites', metadata, autoload=True, autoload_with=self.db_engine, schema="live_network") - for site in session.query(Site).filter_by(vendor_pk=2).filter_by(tech_pk=1).yield_per(5): + for site in session.query(Site).filter_by(vendor_pk=4).filter_by(tech_pk=1).yield_per(5): (site_pk, site_name) = (site[0], site[1]) logging.info("Extracting cells parameters for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) sql = """ - INSERT INTO live_network.gsm_cells_data - (pk, name, cell_pk, ci, bcc, ncc, bsic, bcch, lac, latitude, longitude, cgi, azimuth, height, - mechanical_tilt, electrical_tilt, hsn, hopping_type, tch_carriers, mcc, mnc, modified_by, added_by, date_added, date_modified) - SELECT - NEXTVAL('live_network.seq_gsm_cells_data_pk') as pk, - t1."CELLNAME" AS name, - t2.pk AS cell_pk, - t1."CI"::integer AS ci, - t1."BCC"::integer AS bcc, - t1."NCC"::integer AS ncc, - CONCAT(trim(t1."NCC"),trim(t1."BCC"))::integer AS bsic, - t4."FREQ"::integer AS bcch, - t1."LAC"::integer AS lac, - t6."LATIINT"::float AS latitude, - t6."LONGIINT"::float as longitude , - CONCAT( TRIM(t1."MCC"),'-', TRIM(t1."MNC"),'-',TRIM(t1."LAC"),'-',TRIM(t1."CI")) AS cgi, - t6."ANTAANGLE"::integer AS azimuth, - t6."ALTITUDE"::integer AS height, - null AS mechanical_tilt, - -- t1."SECTOR_ANGLE"::integer AS sector_angle, - -- t6."MAXTA" AS ta - -- t1."STATE" AS STATE -- ACTIVE or INACTIVE - null AS electrical_tilt, - null AS hsn, - null AS hopping_type, - null AS tch_carriers, - t1."MCC"::integer as mcc, - t1."MNC"::integer as mnc, - 0 AS modified_by, - 0 AS added_by, - t1."DATETIME" AS date_added, - t1."DATETIME" AS date_modified - FROM huawei_cm."GCELL" t1 - INNER JOIN cm_loads t8 on t8.pk = t1."LOADID" - INNER JOIN live_network.cells t2 on t2."name" = t1."CELLNAME" AND t2.vendor_pk = 2 AND t2.tech_pk = 1 - INNER JOIN huawei_cm."GCELLBASICPARA" t3 on t3."FILENAME" = t1."FILENAME" AND t3."LOADID" = t1."LOADID" - INNER JOIN huawei_cm."GTRX" t4 on t4."FILENAME" = t1."FILENAME" AND t4."CELLID" = t1."CELLID" AND t4."LOADID" = t1."LOADID" - INNER JOIN live_network.sites t5 on t5.pk = t2.site_pk - INNER JOIN huawei_cm."GCELLLCS" t6 on t6."FILENAME" = t1."FILENAME" AND t6."CELLID" = t1."CELLID" AND t6."LOADID" = t1."LOADID" - INNER JOIN huawei_cm."CELLBIND2BTS" t7 on t7."CELLID" = t1."CELLID" AND t6."FILENAME" = t1."FILENAME" AND t7."LOADID" = t1."LOADID" - WHERE - t5."name" ='{0}' - AND t8.is_current_load = true + INSERT INTO live_network.gsm_cells_data + (pk, name, cell_pk, ci, bcc, ncc, bsic, bcch, lac, latitude, longitude, cgi, azimuth, height, + mechanical_tilt, electrical_tilt, hsn, hopping_type, tch_carriers, mcc, mnc, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_gsm_cells_data_pk') as pk, + CONCAT(TRIM(t1."name"),'(',TRIM(t1."cellId"), ')') AS name, + t5.pk AS cell_pk, + t1."cellId"::integer AS ci, + t1."bsIdentityCodeBCC"::integer AS bcc, + t1."bsIdentityCodeNCC"::integer AS ncc, + CONCAT(trim(t1."bsIdentityCodeNCC"),trim(t1."bsIdentityCodeBCC"))::integer AS bsic, + t2."initialFrequency"::integer AS bcch, + t1."locationAreaIdLAC"::integer AS lac, + NULL AS latitude, -- t6."LATIINT"::float AS latitude, + NULL AS longitude, -- t6."LONGIINT"::float as longitude , + CONCAT( TRIM(t1."locationAreaIdMCC"),'-', TRIM(t1."locationAreaIdMNC"),'-',TRIM(t1."locationAreaIdLAC"),'-',TRIM(t1."cellId")) AS cgi, + t1."angle"::float AS azimuth, + NULL AS height, -- t6."ALTITUDE"::integer AS height, + null AS mechanical_tilt, + -- t1."SECTOR_ANGLE"::integer AS sector_angle, + -- t6."MAXTA" AS ta + -- t1."STATE" AS STATE -- ACTIVE or INACTIVE + null AS electrical_tilt, + t1."hoppingSequenceNumber1"::integer AS hsn, + t1."hoppingMode" AS hopping_type, + null AS tch_carriers, + t1."locationAreaIdMCC"::integer as mcc, + t1."locationAreaIdMNC"::integer as mnc, + 0 AS modified_by, + 0 AS added_by, + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified + FROM nokia_cm."BTS" t1 + INNER JOIN nokia_cm."TRX" t2 ON + t1."DISTNAME" = SUBSTRING(t2."DISTNAME", '.*BTS-\d+') + AND t1."LOADID" = t2."LOADID" + -- LOAD + INNER JOIN cm_loads t8 on t8.pk = t1."LOADID" + INNER JOIN nokia_cm."BCF" t9 ON + t9."FILENAME" = t1."FILENAME" + AND t9."LOADID" = t1."LOADID" + AND CONCAT(TRIM(t9."DISTNAME"), '/BTS-',TRIM(t1."segmentId")) = TRIM(t1."DISTNAME") + INNER JOIN live_network.sites t4 ON + t4."name" = CONCAT(TRIM(t9."name"),'(',TRIM(t9."lapdLinkName"),')') + AND t4.vendor_pk = 4 + AND t4.tech_pk = 1 + INNER JOIN live_network.cells t5 on t5."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."cellId"), ')') + AND t5.tech_pk = 1 + AND t5.vendor_pk = 4 + WHERE + TRIM(t2."preferredBcchMark") = 'The TRX is a preferred TRX (P)' + AND + t4."name" ='{0}' + AND t8.is_current_load = true ; """.format(site_name) @@ -356,13 +367,13 @@ def extract_live_network_3g_cells(self): t4.pk as site_pk-- site primary key FROM nokia_cm."WCEL" t1 INNER JOIN cm_loads t6 ON - t6.pk = t1."LOADID" + t6.pk = t1."LOADID" INNER JOIN nokia_cm."WBTS" t7 on - t7."FILENAME" = t1."FILENAME" + t7."FILENAME" = t1."FILENAME" AND t7."LOADID" = t1."LOADID" AND TRIM(t7."DISTNAME") = SUBSTRING(t1."DISTNAME",'.*WBTS-\d+') INNER JOIN nokia_cm."RNC" t8 ON - t8."FILENAME" = t1."FILENAME" + t8."FILENAME" = t1."FILENAME" AND t8."LOADID" = t1."LOADID" AND TRIM(t8."DISTNAME") = SUBSTRING(t1."DISTNAME", '.*RNC-\d+') INNER JOIN live_network.nodes t3 on t3."name" = TRIM(t8."name" ) @@ -384,7 +395,7 @@ def extract_live_network_3g_cells(self): self.logger.info("Completed extraction of live network Nokia 3G cells") - def extract_live_network_3g_cells_params(self): + def extract_live_network_3g_cell_params(self): Session = sessionmaker(bind=self.db_engine) session = Session() @@ -455,7 +466,7 @@ def extract_live_network_3g_cells_params(self): AND t3."LOADID" = t1."LOADID" AND TRIM(t3."DISTNAME") = SUBSTRING(t1."DISTNAME",'.*WBTS-\d+') LEFT JOIN live_network.cells t4 ON - t4.name = CONCAT(TRIM(t1."name"),'(',TRIM(t1."CId"),')') + t4.name = CONCAT(TRIM(t1."name"),'(',TRIM(t1."CId"),')') WHERE TRIM(t3."name") = '{0}' AND t2.is_current_load = true """.format(site_name) @@ -465,34 +476,491 @@ def extract_live_network_3g_cells_params(self): session.close() def extract_live_network_4g_cells(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.cells + (pk, date_added,date_modified,added_by, modified_by, tech_pk, vendor_pk, name, site_pk) + SELECT + NEXTVAL('live_network.seq_cells_pk'), + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified, + 0 AS added_by, + 0 AS modified_by, + 3, -- tech 3 -lte, 2 -umts, 1-gms + 4, -- 1- Ericsson, 2 - Huawei, 3 - ZTE, 4-Nokia + CONCAT(TRIM(t1."name"),'(',TRIM(t1."eutraCelId"),')') AS name, + t5.pk as site_pk -- site primary key + FROM nokia_cm."LNCEL" t1 + INNER JOIN cm_loads t2 ON t2.pk = t1."LOADID" + INNER JOIN nokia_cm."LNBTS" t4 ON + t4."LOADID" = t1."LOADID" + AND t4."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*LNBTS-\d+') + INNER JOIN live_network.sites t5 on t5."name" = t4."name" + AND t5.vendor_pk = 4 and t5.tech_pk = 3 + LEFT JOIN live_network.cells t3 on t3."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."eutraCelId"),')') + AND t3.vendor_pk = 4 and t3.tech_pk = 3 + WHERE + t3."name" IS NULL + AND t2.is_current_load = true + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() + + def extract_live_network_4g_cells_params(self): + + Session = sessionmaker(bind=self.db_engine) + session = Session() + + # @TODO: Review how to reload this. Delete perhaps!! + # Truncate paramete table + # self.db_engine.execute(text("TRUNCATE TABLE live_network.lte_cells_data").execution_options(autocommit=True)) + # self.db_engine.execute(text("ALTER SEQUENCE live_network.seq_lte_cells_data_pk RESTART WITH 1;"). + # execution_options(autocommit=True)) + + # The data is alot. Let's handle per site + site_sql = """SELECT pk, "name" from live_network.sites where vendor_pk = 4 and tech_pk = 3""" + + result = self.db_engine.execute(site_sql) + + for row in result: + (site_pk, site_name) = row + + self.logger.info("Extracting cells parameters for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) + + sql = """ + INSERT INTO live_network.lte_cells_data + (pk, name, cell_pk, dl_earfcn, ul_earfcn, mcc, mnc, tac, pci, ecgi, rach_root_sequence, max_tx_power, latitude, longitude, + height, dl_bandwidth, ul_bandwidth, ta, ta_mode, tx_elements, rx_elements, scheduler, azimuth, mechanical_tilt, electrical_tilt, cell_range, + site_pk, tech_pk, vendor_pk, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_lte_cells_data_pk'), + CONCAT(TRIM(t1."name"),'(',TRIM(t1."eutraCelId"),')') AS name, + t3.pk AS cell_pk, + t1."earfcnUL"::integer AS uarfcn_dl, + NULL as uarfcn_ul, -- t3.dl_freq_low AS uarfcn_ul, + t1."mcc"::integer AS mcc, + t1."mnc"::integer AS mnc, + t1."tac"::integer AS tac, + t1."phyCellId"::integer AS pci, + null AS ecgi, + t1."rootSeqIndex" AS rach_root_sequence, + null AS max_tx_power, + null AS latitude, + null AS longitude, + t1."altitude" AS height, + t1."dlChBw" AS dl_bandwidth, + null AS ul_bandwidth, + null AS ta, + null AS ta_mode, + NULL AS tx_elements , -- t1."TXRXMODE"::integer AS tx_elements, -- @TODO: Conform + NULL AS rx_elements, -- t1."TXRXMODE"::integer AS rx_elements, -- @TODO: Conform + null as scheduler, --t7."DLSCHSTRATEGY"::integer AS scheduler, + null AS azimuth, + null AS mechanical_tilt, + null AS electrical_tilt, + null as cell_range, -- t1."CELLRADIUS"::integer AS cell_range, + t3.site_pk AS site_pk, + t3.tech_pk AS tech_pk, + t3.vendor_pk AS vendor_pk, + 0 AS modified_by, + 0 AS added_by, + t1."DATETIME" AS date_added, + t1."DATETIME" AS date_modified + FROM nokia_cm."LNCEL" t1 + INNER JOIN cm_loads t2 on t2.pk = t1."LOADID" + INNER JOIN live_network.cells t3 ON t3.name = CONCAT(TRIM(t1."name"),'(',TRIM(t1."eutraCelId"),')') + INNER JOIN nokia_cm."LNBTS" t4 ON + t4."LOADID" = t1."LOADID" + AND t4."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*LNBTS-\d+') + INNER JOIN live_network.sites t5 on + t5.pk = t3.site_pk + WHERE t5."name" = '{0}' + AND t8.is_current_load = true + """.format(site_name) + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_2g_externals_on_2g(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.gsm_external_cells + (pk, name, cell_pk, node_pk, mcc, mnc, lac, bcch, ncc, bcc, ci, modified_by, added_by, date_added, date_modified, rac) + SELECT + NEXTVAL('live_network.seq_gsm_external_cells_pk') AS pk, + CONCAT(TRIM(t1."name"),'(',TRIM(t1."adjacentCellIdCI"),')') AS "name", + t3.pk AS cell_pk, + t4.pk AS node_pk, + t1."adjacentCellIdMCC"::integer AS mcc, + t1."adjacentCellIdMNC"::integer AS mnc, + t1."adjacentCellIdLac"::integer AS lac, + t1."bcchFrequency"::integer AS bcch, + t1."adjCellBsicNcc"::integer AS ncc, + t1."adjCellBsicBcc"::integer AS bcc, + t1."adjacentCellIdCI"::integer AS ci, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified, + t1."rac" as rac + FROM + nokia_cm."ADCE" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + LEFT JOIN live_network.cells t3 on t3."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."adjacentCellIdCI"),')') + LEFT JOIN nokia_cm."BSC" t2 ON t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*BSC-\d+' ) + AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.nodes t4 on t4.name = TRIM(t2.name) + LEFT JOIN live_network.gsm_external_cells t5 on t5."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."adjacentCellIdCI"),')') + WHERE + t5.pk IS NULL + AND + t6.is_current_load = true + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) def extract_live_network_2g_externals_on_3g(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.gsm_external_cells + (pk, name, cell_pk, node_pk, mcc, mnc, lac, bcch, ncc, bcc, ci, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_gsm_external_cells_pk') AS pk, + CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjgCI"),')') AS "name", + t3.pk AS cell_pk, + t4.pk AS node_pk, + t1."AdjgMCC"::integer AS mcc, + t1."AdjgMNC"::integer AS mnc, + t1."AdjgLAC"::integer AS lac, + t1."AdjgBCCH"::integer AS bcch, + t1."AdjgNCC"::integer AS ncc, + t1."AdjgBCC"::integer AS bcc, + t1."AdjgCI"::integer AS ci, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified + FROM + nokia_cm."ADJG" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + LEFT JOIN live_network.cells t3 on t3."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjgCI"),')') + LEFT JOIN nokia_cm."RNC" t2 ON t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*RNC-\d+' ) + AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.nodes t4 on t4.name = TRIM(t2.name) + LEFT JOIN live_network.gsm_external_cells t5 on t5."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjgCI"),')') + WHERE + t5.pk IS NULL + AND t6.is_current_load = true + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + session.close() + + # @TODO: LNADJG definitions for import and load tables are missing. def extract_live_network_2g_externals_on_4g(self): pass def extract_live_network_3g_externals_on_2g(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.umts_external_cells + (pk, name, cell_pk, node_pk, mcc, mnc, lac, rncid, ci, psc, modified_by, added_by, date_added, date_modified, sac, uarfcn_dl) + SELECT + NEXTVAL('live_network.seq_umts_external_cells_pk') AS pk, + CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjwCId"),')') AS "name", + t3.pk AS cell_pk, + t4.pk AS node_pk, + t1."mcc"::integer AS mcc, + t1."mnc"::integer AS mnc, + t1."lac"::integer AS lac, + t1."rncId"::integer AS rncid, + t1."AdjwCId"::integer AS ci, + t1."scramblingCode"::integer AS psc, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified, + t1."sac"::integer, + t1."uarfcn"::integer as uarfcn_dl + FROM + nokia_cm."ADJW" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + LEFT JOIN live_network.cells t3 on t3."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjwCId"),')') + LEFT JOIN nokia_cm."BSC" t2 ON t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*BSC-\d+' ) + AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.nodes t4 on t4.name = TRIM(t2.name) + LEFT JOIN live_network.umts_external_cells t5 on t5."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjwCId"),')') + WHERE + t5.pk IS NULL + AND + t6.is_current_load = true + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_3g_externals_on_3g(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + # Inter-frequency + sql = """ + INSERT INTO live_network.umts_external_cells + (pk, name, cell_pk, node_pk, mnc, mcc, rnc_id, lac, rac, ci, psc, uarfcn_dl, uarfcn_ul, primary_cpich_power, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_umts_external_cells_pk') AS pk, + CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjiCI"),')') AS "name", + t3.pk AS cell_pk, + t4.pk AS node_pk, + t1."AdjiMNC"::integer AS mnc, + t1."AdjiMCC"::integer AS mcc, + t1."AdjiRNCid"::integer as rnc_id, + t1."AdjiLAC"::integer AS lac, + t1."AdjiRAC"::integer AS rac, + t1."AdjiCI"::integer AS ci, + t1."AdjiScrCode"::integer AS psc, + t1."AdjiUARFCN"::integer AS uarfcn_dl, + t1."AdjiCPICHTxPwr"::float as primary_cpich_power, + null as ul_uarfcn, -- t1."UARFCNUPLINK"::integer AS ul_uarfcn, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified + FROM + nokia_cm."ADJI" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + LEFT JOIN live_network.cells t3 on t3."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjiCI"),')') + LEFT JOIN nokia_cm."RNC" t2 ON t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*RNC-\d+' ) + AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.nodes t4 on t4.name = TRIM(t2.name) + LEFT JOIN live_network.umts_external_cells t5 on t5."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjiCI"),')') + + WHERE + t5.pk IS NULL + AND + t6.is_current_load = true + """ + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + # Intra-frequency + sql = """ + INSERT INTO live_network.umts_external_cells + (pk, name, cell_pk, node_pk, mnc, mcc, rnc_id, lac, rac, ci, psc, uarfcn_dl, uarfcn_ul, primary_cpich_power, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_umts_external_cells_pk') AS pk, + CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjsCI"),')') AS "name", + t3.pk AS cell_pk, + t4.pk AS node_pk, + t1."AdjsMNC"::integer AS mnc, + t1."AdjsMCC"::integer AS mcc, + t1."AdjsRNCid"::integer as rnc_id, + t1."AdjsLAC"::integer AS lac, + t1."AdjsRAC"::integer AS rac, + t1."AdjsCI"::integer AS ci, + t1."AdjsScrCode"::integer AS psc, + t7."UARFCN"::integer AS uarfcn_dl, + t1."AdjsCPICHTxPwr"::float as primary_cpich_power, + null as ul_uarfcn, -- t1."UARFCNUPLINK"::integer AS ul_uarfcn, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified + FROM + nokia_cm."ADJS" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + INNER JOIN nokia_cm."WCEL" t7 on t7."LOADID" = t1."LOADID" + AND t7."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*WCEL-\d+') + LEFT JOIN live_network.cells t3 on t3."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjsCI"),')') + LEFT JOIN nokia_cm."RNC" t2 ON t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*RNC-\d+' ) + AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.nodes t4 on t4.name = TRIM(t2.name) + LEFT JOIN live_network.umts_external_cells t5 on t5."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."AdjsCI"),')') + + WHERE + t5.pk IS NULL + AND + t6.is_current_load = true + """ + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_3g_externals_on_4g(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.umts_external_cells + (pk, name, cell_pk, mcc, mnc, lac, rac, rncid, ci, psc, uarfcn_dl, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_umts_external_cells_pk') AS pk, + CONCAT(TRIM(t1."name"),'(',TRIM(t1."uTargetCid"), ')') AS "name", + t3.pk AS cell_pk, + t1."mcc"::integer AS mcc, + t1."mnc"::integer AS mnc, + t1."uTargetLac"::integer AS lac, + t1."uTargetRac"::integer AS rac, + t1."uTargetRncId"::integer AS rncid, + t1."uTargetCid"::integer AS ci, + t1."uTargetScFdd"::integer AS psc, + t1."uTargetFreq"::integer AS uarfcn_dl, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified + FROM + nokia_cm."LNADJW" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + LEFT JOIN live_network.cells t3 on t3."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."uTargetCid"), ')') + LEFT JOIN live_network.umts_external_cells t4 on t4."name" = CONCAT(TRIM(t1."name"),'(',TRIM(t1."uTargetCid"), ')') + WHERE + t4.pk IS NULL + AND t6.is_current_load = true + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_4g_externals_on_2g(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.lte_external_cells + (pk, name, cell_pk, node_pk, mcc, mnc, pci, dl_earfcn, ci, tac, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_lte_external_cells_pk') AS pk, + CONCAT(TRIM(t1."name"),'(',NULL,')') AS "name", + t3.pk AS cell_pk, + t4.pk AS node_pk, + t1."lteAdjCellMcc"::integer AS mcc, + t1."lteAdjCellMnc"::integer AS mnc, + NULL AS pci, -- t1."PCID"::integer AS pci, + t1."earfcn"::integer AS dl_earfcn, + NULL AS ci, -- t1."CI"::integer AS ci, + t1."lteAdjCellTac"::integer AS tac, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified + FROM + nokia_cm."ADJL" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + LEFT JOIN nokia_cm."BSC" t2 ON t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*BSC-\d+' ) + AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.nodes t4 on t4.name = TRIM(t2.name) + LEFT JOIN live_network.lte_external_cells t5 ON + t5."name" = CONCAT(TRIM(t1."name"),'(',NULL,')') + AND t5."mcc" = t1."lteAdjCellMcc"::integer + AND t5."mnc" = t1."lteAdjCellMnc"::integer + AND t5."dl_earfcn" = t1."earfcn"::integer + LEFT JOIN live_network.cells t3 ON + t3."name" = CONCAT(TRIM(t1."name"),'(',NULL,')') + WHERE + t5.pk IS NULL + AND + t6.is_current_load = true + AND t1."DISTNAME" ~ '.*BSC.*' + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_4g_externals_on_3g(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.lte_external_cells + (pk, name, cell_pk, node_pk, mcc, mnc, pci, dl_earfcn, ci, tac, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_lte_external_cells_pk') AS pk, + CONCAT(TRIM(t1."name"),'(',NULL,')') AS "name", + t3.pk AS cell_pk, + t5.pk AS node_pk, + null as mcc, -- t1."MCC"::integer AS mcc, + null as mnc, -- t1."MNC"::integer AS mnc, + null as pci, -- t1."CELLPHYID"::integer AS pci, + t1."AdjLEARFCN"::integer AS dl_earfcn, + null as ci, -- t1."LTECELLINDEX"::integer AS ci, + null as tac, -- t1."TAC"::integer AS tac, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified + FROM + nokia_cm."ADJL" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + LEFT JOIN nokia_cm."RNC" t2 ON t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*RNC-\d+' ) + AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.nodes t4 on t4.name = TRIM(t2.name) + LEFT JOIN live_network.lte_external_cells t5 ON + t5."name" = CONCAT(TRIM(t1."name"),'(',NULL,')') + AND t5."dl_earfcn" = t1."AdjLEARFCN"::integer + LEFT JOIN live_network.cells t3 ON + t3."name" = CONCAT(TRIM(t1."name"),'(',NULL,')') + WHERE + t5.pk IS NULL + AND t6.is_current_load = true + AND t1."DISTNAME" ~ '.*RNC.*' + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_4g_externals_on_4g(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + sql = """ + INSERT INTO live_network.lte_external_cells + (pk, name, cell_pk, node_pk, mcc, mnc, pci, dl_earfcn, ci, tac, modified_by, added_by, date_added, date_modified) + SELECT + NEXTVAL('live_network.seq_lte_external_cells_pk') AS pk, + t1."ecgiLcrId" AS "name", + t3.pk AS cell_pk, + t1."mcc"::integer AS mcc, + t1."mnc"::integer AS mnc, + t1."phyCellId"::integer AS pci, + t1."fDlEarfcn"::integer AS dl_earfcn, + t1."fUlEarfcn"::integer AS ul_earfcn, + t1."ecgiLcrId"::integer AS ci, + t1."tac"::integer AS tac, + t1."ecgiAdjEnbId"::integer AS enodeb_id, + 0 AS modified_by, + 0 AS added_by, + now()::timestamp AS date_added, + now()::timestamp AS date_modified + FROM + nokia_cm."LNADJL" t1 + INNER JOIN cm_loads t6 on t6.pk = t1."LOADID" + LEFT JOIN live_network.cells t3 on t3."name" = t1."ecgiLcrId" + INNER JOIN live_network.sites t2 ON t2.pk = t3.site_pk + LEFT JOIN live_network.lte_external_cells t4 on t4."name" = t1."ecgiLcrId" + WHERE + t4.pk IS NULL + AND t6.is_current_load = true + """ + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_externals_on_2g(self): self.extract_live_network_2g_externals_on_2g() @@ -509,23 +977,246 @@ def extract_live_network_externals_on_4g(self): self.extract_live_network_3g_externals_on_4g() self.extract_live_network_4g_externals_on_4g() - def extract_live_network_4g_cells_params(self): - pass - def extract_live_network_2g2g_nbrs(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + metadata = MetaData() + Site = Table('sites', metadata, autoload=True, autoload_with=self.db_engine, schema="live_network") + for site in session.query(Site).filter_by(vendor_pk=4).filter_by(tech_pk=1).yield_per(5): + (site_pk, site_name) = (site[0], site[1]) + + self.logger.info("Extracting Nokia 2G-2G relations for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) + + sql = """ + INSERT INTO live_network.relations + (pk, svrnode_pk,svrsite_pk, svrtech_pk, svrvendor_pk, svrcell_pk,nbrnode_pk,nbrsite_pk,nbrtech_pk, nbrvendor_pk,nbrcell_pk,date_added,date_modified, added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_relations_pk'), + -- serving side + t4.node_pk AS svrnode_pk, + t3.site_pk AS svrsite_pk, + t4.tech_pk AS svrtech_pk, + t4.vendor_pk AS svrvendor_pk, + t4.pk AS svrcell_pk, + -- nbr side + t7.node_pk AS nbrnode_pk, + t6.site_pk AS nbrsite_pk, + t6.tech_pk AS nbrtech_pk, + t6.vendor_pk AS nbrvendor_pk, + t6.pk AS svrcell_pk, + t1."DATETIME" AS date_added , + t1."DATETIME" AS date_modified, + 0 as added_by, + 0 AS modified_by + FROM nokia_cm."ADJW" t1 + INNER JOIN cm_loads t9 on t9.pk = t1."LOADID" + INNER JOIN nokia_cm."BTS" t2 ON t2."FILENAME" = t1."FILENAME" AND t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*BTS-\d+') AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.cells t3 ON t3.name = CONCAT(TRIM(t2."name"),'(',TRIM(t2."cellId"),')') + AND t3.vendor_pk = 4 AND t3.tech_pk = 1 + INNER JOIN live_network.sites t4 ON t4.pk = t3.site_pk + -- nbr + INNER JOIN live_network.cells t6 ON SUBSTRING(t6.name,'(?!\()\d+(?=\)$)') = TRIM(t1."AdjwCId") AND t6.vendor_pk = 4 AND t6.tech_pk = 2 + INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk AND t7.tech_pk = 2 + WHERE + t3.site_pk = '{0}' + AND t8.is_current_load = true + """.format(site_pk) + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_2g3g_nbrs(self): - pass + """Extract Huawei 2G3G relations """ + """ + Extract Nokia 2G- 3G neighbour relations + """ + Session = sessionmaker(bind=self.db_engine) + session = Session() + + metadata = MetaData() + Site = Table('sites', metadata, autoload=True, autoload_with=self.db_engine, schema="live_network") + for site in session.query(Site).filter_by(vendor_pk=4).filter_by(tech_pk=1).yield_per(5): + (site_pk, site_name) = (site[0], site[1]) + + print("Extracting Nokia 2G- 3G relations for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) + + sql = """ + INSERT INTO live_network.relations + (pk, svrnode_pk,svrsite_pk, svrtech_pk, svrvendor_pk, svrcell_pk,nbrnode_pk,nbrsite_pk,nbrtech_pk, nbrvendor_pk,nbrcell_pk,date_added,date_modified, added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_relations_pk') as pk, + -- serving side + t4.node_pk AS svrnode_pk, + t3.site_pk AS svrsite_pk, + t4.tech_pk AS svrtech_pk, + t4.vendor_pk AS svrvendor_pk, + t4.pk AS svrcell_pk, + -- nbr side + t7.node_pk AS nbrnode_pk, + t6.site_pk AS nbrsite_pk, + t6.tech_pk AS nbrtech_pk, + t6.vendor_pk AS nbrvendor_pk, + t6.pk AS svrcell_pk, + t1."DATETIME" AS date_added , + t1."DATETIME" AS date_modified, + 0 as added_by, + 0 AS modified_by + FROM nokia_cm."ADJW" t1 + INNER JOIN cm_loads t9 on t9.pk = t1."LOADID" + INNER JOIN nokia_cm."BTS" t2 ON t2."FILENAME" = t1."FILENAME" AND t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*BTS-\d+') AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.cells t3 ON t3.name = CONCAT(TRIM(t2."name"),'(',TRIM(t2."cellId"),')') AND t3.vendor_pk = 4 AND t3.tech_pk = 1 + INNER JOIN live_network.sites t4 ON t4.pk = t3.site_pk AND t4.vendor_pk = 4 AND t4.tech_pk = 1 + -- nbr + INNER JOIN live_network.cells t6 ON SUBSTRING(t6.name,'(?!\()\d+(?=\)$)') = TRIM(t1."AdjwCId") AND t6.vendor_pk = 4 AND t6.tech_pk = 2 + INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk AND t7.vendor_pk = 4 AND t7.tech_pk = 2 + WHERE + t9.is_current_load = true + AND t3.site_pk = '{0}' + """.format(site_pk) + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_2g4g_nbrs(self): pass def extract_live_network_3g2g_nbrs(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + metadata = MetaData() + Site = Table('sites', metadata, autoload=True, autoload_with=self.db_engine, schema="live_network") + for site in session.query(Site).filter_by(vendor_pk=4).filter_by(tech_pk=2).yield_per(5): + (site_pk, site_name) = (site[0], site[1]) + + self.logger.info("Extracting Nokia 3G-2G relations for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) + + sql = """ + INSERT INTO live_network.relations + (pk, svrnode_pk,svrsite_pk, svrtech_pk, svrvendor_pk, svrcell_pk,nbrnode_pk,nbrsite_pk,nbrtech_pk, nbrvendor_pk,nbrcell_pk,date_added,date_modified, added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_relations_pk'), + -- serving side + t4.node_pk AS svrnode_pk, + t3.site_pk AS svrsite_pk, + t4.tech_pk AS svrtech_pk, + t4.vendor_pk AS svrvendor_pk, + t4.pk AS svrcell_pk, + -- nbr side + t7.node_pk AS nbrnode_pk, + t6.site_pk AS nbrsite_pk, + t6.tech_pk AS nbrtech_pk, + t6.vendor_pk AS nbrvendor_pk, + t6.pk AS svrcell_pk, + t1."DATETIME" AS date_added , + t1."DATETIME" AS date_modified, + 0 as added_by, + 0 AS modified_by + FROM nokia_cm."ADJG" t1 + INNER JOIN cm_loads t9 on t9.pk = t1."LOADID" + INNER JOIN nokia_cm."WCEL" t2 ON t2."FILENAME" = t1."FILENAME" AND t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*WCEL-\d+') AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.cells t3 ON t3.name = CONCAT(TRIM(t2."name"),'(',TRIM(t2."CId"),')') AND t3.vendor_pk = 4 AND t3.tech_pk = 2 + INNER JOIN live_network.sites t4 ON t4.pk = t3.site_pk + -- nbr + INNER JOIN live_network.cells t6 ON SUBSTRING(t6.name,'(?!\()\d+(?=\)$)') = TRIM(t1."AdjgCI") AND t6.tech_pk = 1 + INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk + WHERE + t3.site_pk = '{0}' + AND t8.is_current_load = true + AND t1."DISTNAME" ~ '.*WCEL-.*' + + """.format(site_pk) + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_3g3g_nbrs(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + metadata = MetaData() + Site = Table('sites', metadata, autoload=True, autoload_with=self.db_engine, schema="live_network") + for site in session.query(Site).filter_by(vendor_pk=4).filter_by(tech_pk=2).yield_per(5): + (site_pk, site_name) = (site[0], site[1]) + + self.logger.info("Extracting Nokia 3G-3G relations for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) + + sql = """ + INSERT INTO live_network.relations + (pk, svrnode_pk,svrsite_pk, svrtech_pk, svrvendor_pk, svrcell_pk,nbrnode_pk,nbrsite_pk,nbrtech_pk, nbrvendor_pk,nbrcell_pk,date_added,date_modified, added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_relations_pk'), + -- serving side + t4.node_pk AS svrnode_pk, + t3.site_pk AS svrsite_pk, + t4.tech_pk AS svrtech_pk, + t4.vendor_pk AS svrvendor_pk, + t4.pk AS svrcell_pk, + -- nbr side + t7.node_pk AS nbrnode_pk, + t6.site_pk AS nbrsite_pk, + t6.tech_pk AS nbrtech_pk, + t6.vendor_pk AS nbrvendor_pk, + t6.pk AS svrcell_pk, + t1."DATETIME" AS date_added , + t1."DATETIME" AS date_modified, + 0 as added_by, + 0 AS modified_by + FROM nokia_cm."ADJS" t1 + INNER JOIN cm_loads t8 on t8.pk = t1."LOADID" + INNER JOIN nokia_cm."WCEL" t2 ON t2."FILENAME" = t1."FILENAME" AND t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*WCEL-\d+') AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.cells t3 ON t3.name = CONCAT(TRIM(t2."name"),'(',TRIM(t2."CId"),')') AND t3.vendor_pk = 4 AND t3.tech_pk = 2 + INNER JOIN live_network.sites t4 ON t4.pk = t3.site_pk + -- nbr + INNER JOIN live_network.cells t6 ON SUBSTRING(t6.name,'(?!\()\d+(?=\)$)') = TRIM(t1."AdjsCI") AND t6.tech_pk = 1 + INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk + WHERE + t3.site_pk = '{0}' + AND t8.is_current_load = true + AND t1."DISTNAME" ~ '.*WCEL-.*' + """.format(site_pk) + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + sql = """ + INSERT INTO live_network.relations + (pk, svrnode_pk,svrsite_pk, svrtech_pk, svrvendor_pk, svrcell_pk,nbrnode_pk,nbrsite_pk,nbrtech_pk, nbrvendor_pk,nbrcell_pk,date_added,date_modified, added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_relations_pk'), + -- serving side + t4.node_pk AS svrnode_pk, + t3.site_pk AS svrsite_pk, + t4.tech_pk AS svrtech_pk, + t4.vendor_pk AS svrvendor_pk, + t4.pk AS svrcell_pk, + -- nbr side + t7.node_pk AS nbrnode_pk, + t6.site_pk AS nbrsite_pk, + t6.tech_pk AS nbrtech_pk, + t6.vendor_pk AS nbrvendor_pk, + t6.pk AS svrcell_pk, + t1."DATETIME" AS date_added , + t1."DATETIME" AS date_modified, + 0 as added_by, + 0 AS modified_by + FROM nokia_cm."ADJI" t1 + INNER JOIN cm_loads t8 on t8.pk = t1."LOADID" + INNER JOIN nokia_cm."WCEL" t2 ON t2."FILENAME" = t1."FILENAME" AND t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*WCEL-\d+') AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.cells t3 ON t3.name = CONCAT(TRIM(t2."name"),'(',TRIM(t2."CId"),')') AND t3.vendor_pk = 4 AND t3.tech_pk = 2 + INNER JOIN live_network.sites t4 ON t4.pk = t3.site_pk + -- nbr + INNER JOIN live_network.cells t6 ON SUBSTRING(t6.name,'(?!\()\d+(?=\)$)') = TRIM(t1."AdjiCI") AND t6.tech_pk = 1 + INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk + WHERE + t3.site_pk = '{0}' + AND t8.is_current_load = true + AND t1."DISTNAME" ~ '.*WCEL-.*' + """.format(site_pk) + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + session.close() def extract_live_network_3g4g_nbrs(self): pass @@ -534,7 +1225,55 @@ def extract_live_network_4g2g_nbrs(self): pass def extract_live_network_4g3g_nbrs(self): - pass + Session = sessionmaker(bind=self.db_engine) + session = Session() + + metadata = MetaData() + Site = Table('sites', metadata, autoload=True, autoload_with=self.db_engine, schema="live_network") + for site in session.query(Site).filter_by(vendor_pk=4).filter_by(tech_pk=2).yield_per(5): + (site_pk, site_name) = (site[0], site[1]) + + self.logger.info("Extracting Nokia 3G-2G relations for site_pk: {0}, site_name: {1}".format(site_pk, site_name)) + + sql = """ + INSERT INTO live_network.relations + (pk, svrnode_pk,svrsite_pk, svrtech_pk, svrvendor_pk, svrcell_pk,nbrnode_pk,nbrsite_pk,nbrtech_pk, nbrvendor_pk,nbrcell_pk,date_added,date_modified, added_by, modified_by) + SELECT + NEXTVAL('live_network.seq_relations_pk'), + -- serving side + t4.node_pk AS svrnode_pk, + t3.site_pk AS svrsite_pk, + t4.tech_pk AS svrtech_pk, + t4.vendor_pk AS svrvendor_pk, + t4.pk AS svrcell_pk, + -- nbr side + t7.node_pk AS nbrnode_pk, + t6.site_pk AS nbrsite_pk, + t6.tech_pk AS nbrtech_pk, + t6.vendor_pk AS nbrvendor_pk, + t6.pk AS svrcell_pk, + t1."DATETIME" AS date_added , + t1."DATETIME" AS date_modified, + 0 as added_by, + 0 AS modified_by + FROM nokia_cm."ADJG" t1 + INNER JOIN cm_loads t9 on t9.pk = t1."LOADID" + INNER JOIN nokia_cm."WCEL" t2 ON t2."FILENAME" = t1."FILENAME" AND t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*WCEL-\d+') AND t2."LOADID" = t1."LOADID" + INNER JOIN live_network.cells t3 ON t3.name = CONCAT(TRIM(t2."name"),'(',TRIM(t2."CId"),')') AND t3.vendor_pk = 4 AND t3.tech_pk = 3 + INNER JOIN live_network.sites t4 ON t4.pk = t3.site_pk + -- nbr + INNER JOIN live_network.cells t6 ON SUBSTRING(t6.name,'(?!\()\d+(?=\)$)') = TRIM(t1."uTargetCid") AND t6.tech_pk = 2 + INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk + WHERE + t3.site_pk = '{0}' + AND t8.is_current_load = true + AND t1."DISTNAME" ~ '.*WCEL-.*' + + """.format(site_pk) + + self.db_engine.execute(text(sql).execution_options(autocommit=True)) + + session.close() def extract_live_network_4g4g_nbrs(self): pass From 209ef1df6b5e6adb34366bdbe2fc08e270e12308 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Wed, 27 Mar 2019 23:36:02 +0300 Subject: [PATCH 08/17] Update Nokia CM parser to v2.2.1 --- bts-ce-database | 2 +- mediation/bin/boda-nokiacmdataparser.jar | Bin 97533 -> 97669 bytes mediation/conf/cm/nokia_raml20_parser.cfg | 229 ++++++++++++++-------- mediation/dags/cm_load.py | 16 +- mediation/packages/bts/nokia_cm.py | 2 +- 5 files changed, 156 insertions(+), 93 deletions(-) diff --git a/bts-ce-database b/bts-ce-database index f71b6ce..8109d4e 160000 --- a/bts-ce-database +++ b/bts-ce-database @@ -1 +1 @@ -Subproject commit f71b6cefcf6bc3cfd53f85e67a81f6454f29b808 +Subproject commit 8109d4eb5c430cb333a7618315a3fc5f3c6b069c diff --git a/mediation/bin/boda-nokiacmdataparser.jar b/mediation/bin/boda-nokiacmdataparser.jar index 1e3aaf7e204598590f847a5ac91601e0bf19f877..eb1d5e6d02cf379af29d7b84399a810f39e43e49 100644 GIT binary patch delta 8780 zcmV-SBD3B7`2~gh1r1P30|W{H00000S%G?y4I~3tfqH>7wKM^cJ_A;PdY8vO0UrZa zfqIweJ^?8MR)Kn#6+Zz$6IOwGPH&>w;5s1y0BJ=406YKym#=&QCYO#s0ULi))$;$$ z+@!flFSLZUEE=Ff>B^!A1(DJgsL~cFy9Zr zc)1G**EnGcULnPmI@hGQJMF59Us&2aUGw~ahHy}b$owP$A9Sfl#Wm9 z_>7LvI`BCc9EEGr@p*i~g)ibuQv6ejmmT132 z8)5&gj^9b+dmVppu_k}kNbzs!`B7^Bk>V#QewN}FDSma}Z!TDhzdP^`2ma}Tpzv$L zy<8CJgf3V`q?6_#n+sZmWeeHUDUBRD={h-eadKWwgr6`cT!gMO4;Vv3MBc&K6&BJvZB-=Pbr_t$jq;NQr#yDtfI^06Tr6|@h zO{Z}>jo0ZYohImXv`!OsDiM~G(y5fnq$n2wCrjUybec-Tb*d0e93#cCI!)85QmR$y zR87+zG$S1zpqYQ7uo@|5Nio~WEavd3(p;V9IcUBM9v6+b&;s$Fk90atr{i__Ql}Gi zI#CE03dx(Y!$rc~tJ7j(T&q)^PCnUKy-p1}HR|NI9dq3M;G!k8RAvTrYO+mPvWU+y zXe&Dz_#4uxnfcK&nHSb6qEl3=EiPJ4E98_`I_M;Xv}u3UQ>K*9L~u_Fg&T?@f%?Oj z6io{?H2A{f5FB&LXVz3ySIO`a?{aTZz#D8Rs)>gE!3G}gQW^?IqTXP1jyKTaLvS{Q zN<)E`reFji!<^6(^#_V7z0FMRtnoJlz0sC1Qy$)abo{>DlL%^}-rA+(CNPVPrjUO+ z4@c*Q{ZW5kn3oxIkc|AHqNIt6nIr0LDDy_W%r?{#ZElH{`NO{2Xei8Taq_mp(OLc` zmKBddFcy0wzRCW8ugWW3dL7S`CPEJp$s6Ww=BxC;VjvuGka8vWh)~^Fye7r3jaNFW zHQ6ZL-wE0_n%y+Adl`n=q$2NH8cc%Qko zF3oYtEq2W%(Wq5-$sTJ$E#X>jq%&c}7v__Qibg7ur022MduyW!T|}yb0oG*q zqUl>1^UuU!Zw%oK95V$Oa)Z(&|GYHPuyL z9k+jkt_gn;y)Zr2vl42XrdtA{=qhOwu^JSO8Xog8(gF@v_ceA>5D|zhS-15 zr6=K1y&972Br+>xv0yFu6&RHS>yp_~Q;451zf4)!Qeb z{z)zM^}evLZl*deCUYfJ9dXdf4*Cn9OI&^ywK*KB@V9}53 zc*?eV6V1&2AP-1K(R6RLkw<&`BQt+}4J`q0xO}Crwk0ZlXz5!?DIAisgX$0yvk|iQj=(tIA+rw z9ra#oTPddVyb48b((v?j#c`%(`~y=?DQ_bg=b%-5Tq+Kf2YgLDP;Lr)Sk8Zer4^rc zvd4w}i(3RS2X{K9Bu>O4>fQwUs>xPZ)p?e+wvjB4IDKbqYm(@gvwfM#Hmy1AtM{*D zV@e1YNu0VeN{$_2FRP3v^=c2kCpE_bcx(##@dvR(32a2cu$EMny2lI3l4} zwA8bGNY7SO0&KPMoX6%@cxrDpmF?ivz_fE}UXhsJArpxMhD?c=f!2!s5jiePE|*9h zKlRR)RGy$>zT;BKd(erSA;|M zp9k=1^YOZ^#Ihhct`=FH9trH8Xrs@=`2dSk=Ls!d!sih2aC(2>X`5lt*>n!`Th3m& zJRaRM>im)BfcGSi)#ISm2Axai^P#9vQy?MGK^GWwp>+0FogV4*guGGNcfHQY4MILoI)ICw5j)tI`~nF45&NyIR;0cvBuTuxCy$nORao}l1F&VdUhv=Qs%4owgjT)!8+&)11srD2dy>eD!N*VYYbY4OE?<0d09mu z;A`*(O2Q2-3UK2I30z}^TG zOGC{kh5ZeUQBO|oFwe;0BgT3r#rb+_7|fOR}VY%20vd!^RUBIecMV zOH*?p2Nq93$ip_dus$UGdFj%FWu&~snzs*^G5;HvW}Z6kf1K(mXyVx=uK(+)^MN0X z1P0wktsJA0^J~HH-Ui(+w)|JI<>K<0GplD7duD$za7CJZwf=g)Kvzc$@JBqsP}JjX z>l#>S&>eIwLXO3u)Eg9%6%x6`S~~I=XkZrhHRw)W8+)-7c!U%eOL2h|l@eLHr?}4< zbe9-VuhjPu#^vN4nw`8)`kO&_%RDSL=pMS4EBTDH9WFfvZKBN%y3e33w3Q=xYIS;) z;}(B<_BpvD+fHtO=QX~a=lz#1hcJJ(TnURk2W5BTW%8_$T2cJxltgYY!85+Y^U?$Z zof1hiJ9@K&Vg_xa?R*Vve+`pxZw5sN?J($m+G)@O^q`p3P6IFEbA(?dK>G!M`&qYC zW|$NKJ@w&GlZVr-!a}y8hXe?9kyfY-tdf7Wy(|>;@!-Ssh(V9aA!gJp^*1*QiHK3m zgr%5i;4~>#W2S@tZqQ@&xIs_QE(h&4=t(j0f6!A7dfK38=vf2j;yeTErC7=ZJx9+w z=mmpbq?a7@PlH~jTMc?eidSimLI0xHSj0exRq?t(Z_t~3Q#;_j!l1WA*e+HIP_2J5 z0NzfmWbX3bm3aChf1SE+%N^KeMp((&n+$rJ-f_^o2E8X6cwgjsQHl@fLkE4N;-t6E zppWS_IiSsK)tn&?l?Y$OQ8mA;WLEjC3a(i1rTJwQHM7)6WpzcFL7&j44*JZX&uLHG z+1jV327N(q8uX>`|4NFlS$FgeeJg*+{vEGh$Tk_D+CE(sfxhQm#)aW(TpX!df-nnH zl$+=W1JA=H2K`$+9~X-DSj{+u)iWg9pdaZ!Tw9pUtHteu-HD@0)K^!?29!Q46!iu? zQBKK=9rTkyKhrP5_E%1=JdK>pMwrOy;e1{$m#WUmd?;8a^{(6>VEtPi2K|4=ro`L+ zodp=g%MKc3&>!@tgZ3I4Xq+;B4qvo$l=$HeNJgKkP;_#rh3`IX`9(rg71c?-gHv7l zYg8?XDmy-Rb}-V?+#Cw?&dY>8 z+PIWg?)@^#wkD73JOOM^$m<0{!3OSR1FrK$YUTaX8{vc!VOY+=ujcTE8%zkWtDP{c z9B4MrD#jPgL@+#bYLpBHdbx?#8bY9FW`Su$SIXi*9N`> zD^lxLY%Dg7)@riVGnK}XZ=Z(`)8EE*L^HFSk4ilf1mp(|-%7undrpOVBKI~o`+|IO z1qb!i({}cHG-P%m^vFs1CgfC0n(wFw=Vb>vsMN3g>HbL4lY!<7hvi|x8&p6pKh{Ld zX8;!~H}N9fJtv_)>t%mZ{Vc)CvQEv;msru$&{TR!`4n$!ZizH@cr!DBwVfiZE{?42 zA{I;DEXO(~#q@(@*nQtuWz*_AP|QAwI%t=}zY*gh}r@`hQmI3gDhpG<#7@EqtBn=L5lTT!8Y zbCqYLY|ESv@bcZGmItD~_V3#WqxLnd13ro)9C`o}c3?)4D&I;`L6ASzD{D$w_kHBw zR|g$v7-?8>swywi3TY}BkGzqZc2DCu`&qBU<9PPL(DA-_T{DIZXvbUf$OuD$uV{u0 zGsCP-2TkeKyE=cPzNkokVY1%jyNE?3JdhC-~jO4kq_T@e6pk~>}w9Na!Ue% z4j|oWI7=B7ySDXJDtxln2SUn_a>|C4$+jvEAWler@9UQ=fheVht=Gr+r7YE935!tH zDP5=YQ%Qf_yW>A&Nnoc_d7gA7e#5hv%01Caq}u%h7#Ijs;4=Wog1&MSQME7OD?s>~ z>jYEz?;H4*+uy17_x$%mQv2Wh_aoCw{XgoPDX;LV{fpKAtM&aYY2NSr_eY2JpBCL- z^DFQ5>WkKwP*Y!<^|f35Y1Y?aeRb>Ww7xD(S6_d_YInh|{Ot)SKRR&P4S>fqmIdIF z+--olJAvkJ18pnV+N$nfK5tXH>j7N$IC)H;V2ezLa{T;nU}i*j@Fd-qoW$&Dny>nCc&P&-lKi-?=bT7zq z2vtFX9c_WP{x2wfYuYeLGX#a@yHfxnYYzBg?=m7sP+SFKaDn zg&xIDRSP%2r(4PVwo@RG=hE4lfcJ$}K z4bMX#cmWQ97a<#7hT-rEjE7gD4EC_I{|lzUYcK;|hq>H$9J~Rw@Fq0ETg>-uXoh## z+24SZ;a!G?_uyQ3A1;6o;8K71kYV6mSO*`$t?((_%^_erga4xp{ks|NUtnN09ruJbU^fMHk#Zg?_ja2Xif*(jf=4@i1`G ziO?U1aLq;IVHOT$XmWqjTFAg090pDSBHn)<$UjZJ4)d{q;mSqVVj&hWm>INAg+~oC z=qen}H5<5Dwh>&jLm#?W^ag2g2%U?gxaNRt-o@cu(;4oLU@#^XrZSkC*8=}eXqvwh zg7fpXL1-H^S2Ff2n_smHW)`@^F^Ck~vTWMOVtba&HqsrHj6gb#31Jf6c* zDuQq}BUpEmg?T4i-@ov8lL~XPF*geX7y=!ed2`F44~BW9lvydA(*_oT6A0YM$~i@Q z5LRu6Q>W!|<+SZ^dfs+8)>laGNBYKvk6*V z#71E+PUG_*ZCXN4$4#(XnL)8LS1{}1|F2?OE9_71Rv1z25&(6X0Gh<~k|d_pai$f@ zcE@aD!}xy!8*ynIQyJ?9@wuG=2A&B$@hs?z=fGfG%^rOon~@gkUt7efFq zg^TfWSc_M}b+{I8$E)F9+yGnfdUzCXgeUQ4cpq=!6>fu{u$58pb{vd%U>V-csB#a^ z#(QxQZszrO;8KiX6K=zmxEHpScCKj?X^3DUzRg;Fhedji zMf!-(`BNBxpD{dr4ny!O7U}CG5%NqCI%usbj<0+rv5D?s#df&7GCvNmF}R{CH#g68 zhk_j(8(6(_xUv>OylMwrg>Z+!O^Iwz@fLsS0LEB-Me%R0_~6y8tY@iQ)5?33%DPt2 zTKBfLZLJvij)K2}4S(lt{Rw>;&Ia?9D33IlM|L=o(!fhjXdo9XAp@GJ3q+_JEa$)} z+dZ7Ok;jHzjnf6*U_}B$SKthVp*DzcfUaTvcY}JI#mH_Nlg{5`8Bgc1V&*c&E5(0k zcfhp>G1yQQuU*F}=?=J_HDWJt-w=b1>p+(qO^*WijjC0_r`dy# zxFpNI18x!(9x1h(5gvhC1d(>Yt%_x_L+ZCNCq2vIZdH>Rn)u$;t99=a1@7Bb&$0xY zhJ#`A*CaL>+&(O+-HqFKB(*cSeP@4C+ugc%ZGrnP)$?CU|FQ!z-l0uAyOr#b7Iz;s&Oz)=frIWCuZ!#Bpr74hV9XKAvkjY=qg? z=v`1@jc#Q~SEKCI)?7~Iths-fAD_#CK0dlCF}gaznJqo;FxDXTgoxBl~GkLgqQ zBCLllxm??Xyc0(oAgC;bB7CS($fOnqgcV9j9+O4Fz5B(5g&x>|jRJqK@{cC0B~M^# zq0f-KfT8V#7;L_`GVfjmTInoxJal#yGCGSB*R!Duos(Fq3y(|qlI$uYv1mr(uD>*n z7>=hIfjDil=kf0DGk3Q|;Y3xuwn4Ddz18vui9p;m9bzD3MbF)g_gh#STR0YN0V^jp z{Uc7dO6YdMa-rD`A^v}KUk{Dete!g{M(k51ZS8HuPPMAo9`A`?GVPL3Y&Vk&hnZJc zDKI0oMcbJSrApNJO5><<<>(w z*Zb`P+a~vpV!O3KJaLMeOY};rcT1{gCe_{6y*o{K_uUAmby$C%V04~lI(v|dm+(R`TiBG1{C47hn;_VS4F z$a>x_ciWT1d$MikoOaIK43Ea(?=mi1e9YRL9-p)m9-p73Z-XbyU1+17J)Mg4O|T@( z(UUpsiotGq5^#S%$x2@jRb2ars+Do=DOD@x+S95woNLc03rTB*!R-!Nw431gtO#L0 z+sQfX@m6ka4__%4MF?c?10549Rl>Gz_JqRSx*;d6iH*}s6GvQM^H6#+3#OghOX zlB~3+uzxYm-krt=9FLFl5~1;dVm(foWx;~yp$mMr$ypu-Fpj%)0f@M z-nQg0`vqo4McUkZ!xpyLj zo3BB16{COs)f~dF;SjzahS0T~{#_5_=?18xjZi~3Lzr%bGwC)C*RAj%-42h?U*RRX z3--`G@Dpu92W`eIx(_GO7A&W&IG48L@$>-J(?c9~AI4MZF+7tV$0ukPK1;jtEqW5a zr>DtA&yr5hQ4e~N4xyJQm;Om(>1CQsuTllQPBVY#4XUNLXeqr*0s4?mp^xZB`k1!U zr}PAU#@(cQdzSK1ON=u_}v?27VmQUYlCG?|KMgP$j(9c?!e$iIbui8cQn|3Mv zsa;2VwWl@I-ea0iv^4D(&0zyA-R9H`TURZ^)GU$ zlNEc0N?U9yMac!5wZ~Ifc5`Q|crA1NQxdDLvJx2cnMJMzrzUc}2E^bE_nUFT0o}Au8#Bkt z|EufE2D{(lc_aAK$-K8a&Qp`#;Yo%3>15Ko$&&&yBYpo9-s?DFGfd96o{`LqX%6rK zXrsWT9RXdm(J)XO3prXbjMT=#F?@f2ny*cSMOq0g(I&x}S}9zjO@X!ARJcK_fNk0_ z@Q79gyR>R}L7NVrYBS(FZ8rR@%~2*gl@EC&48_yfkTh7rndRxKb^~8?&rr1&xOS$h z@nKlT;DT@PEIgZyp$mM8=kUQxGPpYNL~sR%K=Q=EKD16IPijmtxE+Q2L-$89_&Av`|K7xz znPP{4v@oP=5y;k-LxHveDz$%;lalM|M4nr%v?yAu#PcnEUXc2iGG~Whx3qJ>uC4Cm z*R2b!?D?Y9yw2{(>oVrG<^aFCU7VWNDIIxT%e*#p!po_6>3B)PW(KO80)W#!WjlOw zAAH*Oj+&;13Yqz(YKhA*r0y*Q4^SEg)0}ueZlm)c>;C~zO9KQ7000I62mn@rdbea? z0fqqsS%G?&?O_2l16YB2wp0CYqE06YKym(6?uJ%6=&34D`f^8d`d zN%JOsp(UK*kN_1*PpOJf5G`$iDs7RLTg9|Z+d!I>Bn5Om@jllJ6}(tit+%KUK-BeE z!TVb8d%bU0UDsoE`OiG>n=~ycu>1S`KicPgj(O&pXP%kw%=3h&{&W9B05E}ma>1u~ zfdeme0pSHsn28rj@qb4hFP85mI$kQ@%UpOlu9eyqQd}v;RZ^^zV!aesOL2`9*Gh4n z6xU0!L5e>~af1|pcHoWjy-A9jUD%1YNbOb!-sXb+@B$rg*YOS=@08YEI^M10Mjh|b zvBZV<;(a=9a^Yr->$pX}Tcy~h!*`jr~a%08lcla=^CWdU>1^wNa4|GsDE@0lVZ3OBV4o}jg-QhNuy}A z6k{?ehxV7zu~LkaB3JsxXHp*JyQqK)r6`hSv5x!kHs}DICS+2Ha44Yz9duA8+(`LS z9IPYDK2fJbbeg2oWSvTNnxfNGVR>jKO{2r4I9voQlfLPhR8ILiRfr}krI?}9Or2&) zwJMX2pnoGBG&>U>plVTAjTE&`o;`;Tl#bGAu7m1a@R%sOgX*Q2C;s!kPV;qIpu=Z6 zE!1g|P%jp`*JOuFg!|Dt9V3j7)oH0t$H~TgIyLCjs8f^eh$Z)fi~Q6qGh1|Owar|1 z9Ox9VRh$6)U8d7==0`!9*QQfQr?6Dp9kc?$F@L{uZe3Mv4T5|2GT%yHanKiPDXxn} z0-=^E2z|=Kp=it(ip}>0JNyXFws3hk*wGe>B4n8pI%0ufaka0VshxF!mXI&j5n;-M zx{prXoqGyFUCh_Ge9AOtk<}Is%;DkKf=D3dkMJ^+_K{H_T%0mdF>}OxEfv0)kJ*Mh zVt?%&v5G*%-xv!=j%QhUTaj3Opp9k4BM^)RU(`P%5cJphq)Tt&dD27}AR_r9+|7KI z9#{;7gZELc)E*J4AB)$f_;vBhWVHr;(Wtq$t1Vm+h{ntYYkWTIArKBB*xJHXO$Zr* zP!;oFxfiR(EWeL?^Mq%1UAQCC$c;=UjQS&d5;4(8 zRq9kz4+H(HV-a6tEUAlVZ79f^?4PpF>EUqD?+fuZGo}VYf!H(zEqDBU7QH;& zg#0xfZ4LfNy{|#Ix@U(QeZl#@NI=?Fr!CeRP)FYwZYypGH~ILmTKuZEG!$MQ@P9S7 ziR`Ax#Wm7XUM(j*NA>XX*-?L&pqBi(yB~;%rZ@9&NNHpU&#Fwn%R#wmwyAd3zzsPY zUmzr8OVY2BVG4_oH#;0@DQ4LlTm8knzc%);;>KX0xSZ?0P?KmVxeaG?IMU{e#bn~x z-X_lS2is>P=tT9cY!EUdqd6Q_Q-58}wF&!2=$rHx(F@aKGb^F7ZH^@%imp;NQMtO& z-yUNFWKx?i(!vMRKg}lD-NK5D$GyFYT5D1;vBpP;kh2fU5H$osEWLS*{gYdF=)&6LdZHNtBdXg?Rs3pZtqV-{m1#2Ooz^E+Llz+;O+QO{O z_LQE!$%XCkyI#a>Z;qDXEO}2=u3K@vaQ)fGqXR$1JY4E#}{km(ZPY}Tz^YP&=;v( z?QiUei62_}mJwf*bR^ew5PvVxH{xe^Nq8>HYF8#M7$aYEw%xzdA7bLsYT4DrtJ{Lb z(OAUqYb#bG(c*>Gvn!=0(I$D!raL;Ceb%6wb-T+8@JrJYjQMKZ-f z9ei9W4pavHZ9GtE3cG*q-lY|vcCyDs0u3F4m}7dKQkEcM5p`b@eSg(tE3E1~%Uat= zl}DVuH@0;tbj;bl!epD#9`QE^R3cD}SRZ6k;5a&?{OR*gd4@C@KNA#zf9z3n)Cbx0}j#aB5)MIkm4! z&hL?lBmhIEM9n~J#r~)qmnD}=q)wcA?@FpnQZe5t>Ezw#MC7Pm&-j1iC_LTmvT+ka z7{<&TL~E6Ux3vY72BZE)!HPEXn;Gc{g?PS|h|S`H$->lNT5NTCC7OFE%!={LQ|OV9Y#N2c2(V6t$=>M+zTP@UaAkeDt+7~pX>swY zRjZ1U%NDT^;|;os*7dHaZdo?M3?)a@t0eRCAh?7XG|+`MxqzZeq>bjmxC}jY~UEo$^0U z^%l1A>@wH?_1O8u_eBDOuA}QYGNoqK0^t1(+91aKCo$&I%DHoE=azcw8M&hE{>DIa zK(MPP2n3?uP&nrGb#;v@GUx`n3?bLzP=D?V3CSvnS7I$ad5kh}APzF<&%8FeSqhvW z#ko?PB}J8lmi}pOaR%Ke1~e%BErfwNb%$mr?~`sa=w_LRr3Q7(DIw6?90|91Ims$2VjGGJ66zwYP#JiHwCxq)ke>&)&{l)C z$suOdEf2J}3yFwP%7llZVc;w&)_7XYJdXk=U(9;GzL)RMgtQ61D^9H>@FS3ZiFstGvgZ@S@^ZjhE zw+Vw@5n=mSIY6yS0eCx&lCR4vSMtG&0!`|YEjM4A8Db?4&!vA9_KA}$q)IZ~;i`X0!v%2S}27S&dW`Vxo zT_%L#YC;^TT7obiQZ& zs>J+FMQlKs_2HN==#6nAUh1H44f+RtCv3mx+{)X^*=&@FoLJ()y+2&=Q$!3aB9M_8Q~7Tckfx8?!vp*hqV!Vq+n4S%-n)& z(-XBRY46s1WRzn~o`2GN($}4k*9(S2E!@dA+vJZn%0s0u%1I=`_}qP8&Ebo*m|kyJ zJ7FZ*+iadymb({{eb8*~zCPTl1Kta}bkD^5_82;P?^JAUtlGqhr+xTd%%_lBE}yVTYkZk2iq_qDhC zLws_D`}C&Mb@qBJY<3|G$W8nB<5WwU52pL(WqUiQ^w0U3foRIxfaZ@xO`aUx3zx#8tASG`*J*=d)`?OEeJvfU#qw+?ac&IiNT#}n^_L3f* zU5S>md{@_-HebHdau71RGA1@E$tc>@iFUqmZc`r}g0~&cC=I{QHjd0-ZhPBt%Z-kM1A%9^9W)!LMuND=A_+ve%rj>Q~ z*Zkde(1V7Nh83r(^7O2bri$^%7p?2|2A;cz^?JO5=j;m|?~B(pW5|eZyd`yvG8FiW zkCI_#=;?LPlwLicGwO?qEbU`b_U7aY!RI2%FJFi-q z@|wM;RlB`s_qu8-w@gkkW4=HrdZeGdNcT&cT_r)mN?X$=)0cD?`ey7+)c~tJ;e=VfkTiSgHh~n>w~$KjW9OREH%j zLPf81z0TiVY8VAG;Zpz@0v`AbJ_m#^xJ59F|GtE;xc#+if5U&@rnLXTf8Q~^)W28X zY=3zpSM49I{(o8DpHk-i%zwZ1X#Z-_{oDHfW_^FRzW;$;@|9N4zy?sXq&;-Rki22Gd6=G&#i9; zXWmwDZH7$MWpvT>>8ke4!_AN-MYa_EqWb?^tc1x|&#;7qs=vp|0GP`k%$?8je}S1waC%zu^m zKY)z9e3q+gUnZBYN_Bn0Y*aak3*h2KMn!;@2oOWjj6 z_f%PEI~>YFPAheKocVd%;4lrU3*4n~ID8#AZA#DrcTP%EFUStZp==$v3fv`em|jzm z9Z>De0{1v>m)Z)l8xtK9rNds3-L5)J1{s~;Ds^^(otM<(P-)u$gYShI?tfWvsFLpy z{AJx7>2b*5^)SF=+W}dHJ7J?IgL~G)E!$x>i(Fmmbk~%++_j~d+hGoO9OcQ3!(4YA z7jdZX(K|0~@BFmA3)1#3OxwFC(d%)#7kga!(z`^&FWdnKZ-=876>foJM7eP|c0FX> z3rpR{@djB!hN&9EqqG)>CXamw&kZ|RNyGO zm@b3mrVC&*EMi072|7H%?(ig=_EYTWPlFqtVNiY+_Jijj2VR5&;D05U3V(wNc$uC3 z6^4OV;V5_w7I5DZc%7l(4QPconeSWB4sWxwzYZtBJFo`cg|p#3hK2XxkMMU`%YEzM z1Gou3W*GPcwleHL!VbHWLHPv+Rd| zj8mx%52YARqZ4pCordLfK33AjSVfoN3|fmbX#>up8*#RRmw!8;AMZK9QVe5A@xe7L z#|WPAPT+V0oIb>2MAf;W(OWE}9DUIEJ<0q_vQRIk-PK1&DAg zjsy8upx0t9j%T=X(bcSzdM@mjV0H*;vdq z2juWB4&a*3aDO*}!I)H-%3^9>3j*7rZP9iJEy~{l;VsZ!&DgVIQOypRTj-9&AzEtl z*tC*TyT@iLamS=1V>@)P&97ucoTv}fJsA((z&`KrWDL|9Usf$RL&wftU*v59o5${P zY=hMrEa=>IdlyER2-;#jWaB*W;CvW`3t${Bgc4i~Q-5#?%)q1JDE=0Y8zwqF7V;=$aP!Lcn5C*mQz{XsAnCn<&TW|MIs zV8xVdScH?YlqH)Y(Sg5H@lZa%X^D6ahpGqy;1R4l-om^StnVNAdyfipvN1Oc0~i7w z!@Rk67=MB*c;ql(^bPpTGm)MHS6PU_aH=57wR50)~7>H|N zD4qdh@J#mTv!MXbfrIc|I2_N1S$F{i@gleoFM+jq8C;8(!!39PY{aW!6JEzGPXy2BD_tAEN=|LdHz%l{{W0MK7K7kivV+5!D=Ck(H6LUVIAn$EVqQpMhe0mKFOPOvdNg!(T|rE)Pp)msJVpf(}c}e9In;yg2+ZPl78~ zE|yMvqBFznyrfH{v4Vy84r}#Y7U_K!=_5YpPhkXp#_;qxjK!~5q_0y%$Tvmkp?|d_ z68Oqj4V&m5R&9k#s|ykU8;8qk^78UccPQM(v4Pb)pDXe!G<(%HxB}reftxbfp5iUi z0Zg*`iWA>F@xd!QSNhhd z-Q#d~s>uvZeD506x$E&l_bsYtMUqX+zOcD9g-sT>_fKi} zu$iX7UpVP`oTkC^bQrusW$+$NhmWZOzNJd|k!HfrbR;6p#!RZl!JM3pp;}Jb=5V5R z6enkOco;3<1Z*Kz)6qDej=|$Nar4tsTtUa-N#w(`r~xmgM!bUjxPOjXlnuu@G%sRY zna9~i2KYILSiqL+fDni2g?6bTdP`8pXkhxi}^df^pCx$#L)$TNxOZc9{ze5_nJjf8boLc8TEmI! z>ClJHNG{cf$0dA8c9oS}G%I=6Z%H7AV?84fr%iSj@9sWxcYm7{PShl7*9dmHH(UN7 z5r~_nLyTgq7`T)1eiLhB6UU-WVCAHyeH{ICOQW? z<@Mw78(^8oF_1azh{H~~@w=a3ovw!(u05%06%rzgs`9CV@R9G*{{d?$EzqgDedyFRX`=yJ9~_?&sO)-TO;~XgLUrexfXK-9ggujK!$oD|0o+^%*&x2@+oH98<;;=|wN|OA|B5`!? zx{;&h%WmfKibPQNt7bJrX(GeY)RaWaa!%cBCx7_s3D@-WaLj%tUE;=UCev!?tPxhm z9TvJtYMqSG9ChX~x~^p~zk(z5l^mhh!B|?)+1<4;m9B#tx*qE228hs&u!e5pXnZp~ zNS*L7-2yMs?eH4i1wYY7bkIHMp?h&U-G`O52^Y{7Jesy+Gd+mQ=pnq59>&e|C_YY) z;eVU71HYmt@E`Of{zlJG20cq|dX7fX^HfAH(gb>iCey2QB)vgP=q);x-li+*eY%l8 zppEn)JwYFF&&S;Qgv-w~JH4-E(ifVSzR?QlTWvCZryWJ#YkvAcTTcJfLiCe%BK@r0 zM!#wgGtCa#rM=G4=RM7)@oepDP1kwvq6b;+$a{!&ko!mBDb#Ohi_$S>fESaW=6^au3@tD&yeX!}g8JLToDI z$OD_T$JM+?b7#l%TITwzldB$Y<$ojQtBGX!CnSFbxto&=xh?#%6HCk16j=AI|~z2}5`VMc-VDr6==^I;%+YkvW_v?A!E z6~id41ah?lp+q|fj?fNNSdcL)uq-rm4?POJxH&@dbT<|TP zf~T@E^ntJNG(LFA?bal3{C}76h@@qc1**G{cXqyotwZw@&}!l2V{!PPbJvF^Im1=g z4PvNVV6}x{(-uLNwit$JOQ2Xg1}168ru;rL*%B;^pSlbNsCbGph1&qyYpe`4E` z4b|pX=Sz6`a2*U!JnVeL2a+!a_K|fm`BGzwG2JNKAGtq{!zZbP1%DfpXJ(4s3ZyNE zOf3jGS{MqocBs~(DY$EvffWcZx) zyw2#!>s;n_-d=u0J2ySA6MOQyoO!M7g_qsjEuN?5oR7=Zy@KEYLR^;N#LajwgP!OA z0Z>Z=1PTBE00;oEC;@c0>|g Date: Thu, 28 Mar 2019 12:25:10 +0300 Subject: [PATCH 09/17] Fix Nokia CM DAG task --- .gitignore | 3 ++- mediation/packages/bts/huawei_cm.py | 2 +- mediation/packages/bts/nokia_cm.py | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 14a928e..80e07ea 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ .idea/ *.xlsm *.xls -*.xlsx \ No newline at end of file +*.xlsx +mediation/data diff --git a/mediation/packages/bts/huawei_cm.py b/mediation/packages/bts/huawei_cm.py index 14f9d5e..e05280a 100644 --- a/mediation/packages/bts/huawei_cm.py +++ b/mediation/packages/bts/huawei_cm.py @@ -1669,7 +1669,7 @@ def extract_live_network_3g_cells(self): session.close() - def extract_live_network_3g_cells_params(self): + def extract_live_network_3g_cell_params(self): Session = sessionmaker(bind=self.db_engine) session = Session() diff --git a/mediation/packages/bts/nokia_cm.py b/mediation/packages/bts/nokia_cm.py index 155e491..ef07a31 100644 --- a/mediation/packages/bts/nokia_cm.py +++ b/mediation/packages/bts/nokia_cm.py @@ -1021,7 +1021,7 @@ def extract_live_network_2g2g_nbrs(self): INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk AND t7.tech_pk = 2 WHERE t3.site_pk = '{0}' - AND t8.is_current_load = true + AND t9.is_current_load = true """.format(site_pk) self.db_engine.execute(text(sql).execution_options(autocommit=True)) @@ -1126,7 +1126,7 @@ def extract_live_network_3g2g_nbrs(self): INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk WHERE t3.site_pk = '{0}' - AND t8.is_current_load = true + AND t9.is_current_load = true AND t1."DISTNAME" ~ '.*WCEL-.*' """.format(site_pk) @@ -1257,7 +1257,7 @@ def extract_live_network_4g3g_nbrs(self): t1."DATETIME" AS date_modified, 0 as added_by, 0 AS modified_by - FROM nokia_cm."ADJG" t1 + FROM nokia_cm."LNADJW" t1 INNER JOIN cm_loads t9 on t9.pk = t1."LOADID" INNER JOIN nokia_cm."WCEL" t2 ON t2."FILENAME" = t1."FILENAME" AND t2."DISTNAME" = SUBSTRING(t1."DISTNAME", '.*WCEL-\d+') AND t2."LOADID" = t1."LOADID" INNER JOIN live_network.cells t3 ON t3.name = CONCAT(TRIM(t2."name"),'(',TRIM(t2."CId"),')') AND t3.vendor_pk = 4 AND t3.tech_pk = 3 @@ -1267,7 +1267,7 @@ def extract_live_network_4g3g_nbrs(self): INNER JOIN live_network.sites t7 ON t7.pk = t6.site_pk WHERE t3.site_pk = '{0}' - AND t8.is_current_load = true + AND t9.is_current_load = true AND t1."DISTNAME" ~ '.*WCEL-.*' """.format(site_pk) From 407d3978d97f6dc1e1f5e165424313e19866e6a4 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Thu, 23 May 2019 03:54:06 +0300 Subject: [PATCH 10/17] Set initial memory for docker-machine with hyper-v to 2GB --- win/Setup.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/Setup.ps1 b/win/Setup.ps1 index cb43864..19420eb 100644 --- a/win/Setup.ps1 +++ b/win/Setup.ps1 @@ -208,7 +208,7 @@ if ( $UseHyperVDriver -eq $True ){ # Create docker machine Write-Host -NoNewline "Creating docker-machine..." - "& '$DockerForWindows\docker-machine.exe' create -d hyperv -hyper-virtual-switch BTSExternalSwitch default" | Invoke-Expression + "& '$DockerForWindows\docker-machine.exe' create -d hyperv --hyperv-memory 2048 --hyperv-virtual-switch BTSExternalSwitch default" | Invoke-Expression Write-Host "Done" Write-Host "" From 1dac1e8bee1403f197b055fd0c11251bfd838510 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Thu, 23 May 2019 03:59:30 +0300 Subject: [PATCH 11/17] Update features and requirements in README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 42f6dbc..4360b9c 100644 --- a/README.md +++ b/README.md @@ -13,16 +13,15 @@ Boda Telecom Suite Community Edition - An open source telecommunication network * CM managed object browsing * Automatic network baseline generation * Radio Access Network (RAN) audit (relations, conflicts, parameter values vs baseline ) -* Reporting - +* Reports that support tabular and different graphical presentation of data ## Requirements -* 4GB memory * 64 bit OS (Kernel version 3.10+ for Linux and build 10.0.14393+ for Windows) * [Docker](https://www.docker.com/get-docker) -* 5GB hard disk space +* Memery and disk space depend on the network /data size * Latest web browser + ## Deployment/Installation * Download latest release files (bts-ce-**version**) from https://github.com/bodastage/bts-ce/releases/latest @@ -36,7 +35,7 @@ Boda Telecom Suite Community Edition - An open source telecommunication network ```batch > bts setup ``` -* Open web broswer and paste the URL http://localhost on windows or http://192.168.99.100 +* Open web broswer and paste the URL http://localhost:8888 * Login with username: **btsuser@bodastage.org** and password: **password** ## Installing a new release @@ -66,6 +65,7 @@ This is achieved using the following 2 commands, - [PostgreSQL](https://www.postgresql.org/) - [Apache Airflow](https://airflow.apache.org/) - [ReactJs](http://reactjs.org/) +- [RabbitMQ](https://www.rabbitmq.com/) ## Resources From 92979b49030910996f4df9a1fe22ac94b5fccf00 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Thu, 23 May 2019 04:04:31 +0300 Subject: [PATCH 12/17] Update bts-ce-api to v1.2.1 --- bts-ce-api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bts-ce-api b/bts-ce-api index 732cb04..c0b6300 160000 --- a/bts-ce-api +++ b/bts-ce-api @@ -1 +1 @@ -Subproject commit 732cb0495cdac0b254b2cdca816e9f4291f6c0d0 +Subproject commit c0b63008da0abe2b00c51ad3f19b4d772ffc9800 From 26885f3c4c7776fd6d8f3a99c700f45cdb5581f3 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Thu, 23 May 2019 04:08:17 +0300 Subject: [PATCH 13/17] Update bts-ce-web to v2.1.2 --- bts-ce-web | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bts-ce-web b/bts-ce-web index 43a011d..61a9450 160000 --- a/bts-ce-web +++ b/bts-ce-web @@ -1 +1 @@ -Subproject commit 43a011db94a4d01c4f7e2235648c400bc929e3d5 +Subproject commit 61a945035d15ddd392010d5e3597ab2a58483fc2 From 9ad43e04e3657cc6553293ffc5d61cbe35e400b1 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Thu, 23 May 2019 04:15:12 +0300 Subject: [PATCH 14/17] Update bts-ce version in VERSION to v2.1.0 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 4011ae2..852700e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.0.0-rc3 \ No newline at end of file +v2.1.0 \ No newline at end of file From 11d17152a4f0d7efa56c1d340c16b84d58853d03 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Thu, 23 May 2019 12:35:50 +0300 Subject: [PATCH 15/17] Update bts-ce-reports to v0.0.1 --- bts-ce-reports | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bts-ce-reports b/bts-ce-reports index 0a47650..bf12fd3 160000 --- a/bts-ce-reports +++ b/bts-ce-reports @@ -1 +1 @@ -Subproject commit 0a4765083b795076c7b7e1e46b8919452f52816f +Subproject commit bf12fd3b4d22bf12d5b857aa3a720ea8add8bb31 From 10bbf359c7f197b4773ad64922e330743b0d9309 Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Mon, 27 May 2019 09:07:05 +0300 Subject: [PATCH 16/17] Update bts-ce-reports to 0.0.1 --- .travis.yml | 0 bts.bat | 2 +- docker-compose.yml | 9 ++++++--- 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..e69de29 diff --git a/bts.bat b/bts.bat index 7e9c384..f0a0dd0 100644 --- a/bts.bat +++ b/bts.bat @@ -67,7 +67,7 @@ If "%~1"=="" ( Rem Echo manage list modules -- List installed modules Echo ----------------------------------------------------- Echo Boda Telecom Suite - Community Edition - Echo Copyright 2017-2018. Bodastage Solutions. http://www.bodastage.com + Echo Copyright 2017-2019. Bodastage Solutions. http://www.bodastage.com ) Rem Run setup diff --git a/docker-compose.yml b/docker-compose.yml index 2793849..f9a033d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,7 +33,8 @@ services: - ./queue_scripts/definitions.json:/etc/rabbitmq/definitions.json:ro - ./queue_scripts/queue_setup.sh:/queue_setup.sh bts-api: - image: registry.gitlab.com/bts-ce/bts-ce-api +# image: registry.gitlab.com/bts-ce/bts-ce-api + image: bodastage/bts-ce-api:1.2.1 ports: - 8181:8181 restart: always @@ -62,7 +63,8 @@ services: container_name: "bts-ce-api" command: ["/wait-for-it.sh","database:5432","--","/migrate-and-start-web-server.sh"] bts-web: - image: registry.gitlab.com/bts-ce/bts-ce-web:2.1.0 +# image: registry.gitlab.com/bts-ce/bts-ce-web:2.1.2 + image: bodastage/bts-ce-web:2.1.2 restart: always ports: - "8888:80" @@ -133,7 +135,8 @@ services: # container_name: "bts-ce-ftp" # command: ["pure-pw","useradd","bodastage","-f", "/etc/pure-ftpd/passwd/pureftpd.passwd", "-m", "-u", "ftpuser", "-d", "/home/ftpusers/bodastage"] bts-reports: - image: registry.gitlab.com/bts-ce/bts-ce-reports +# image: registry.gitlab.com/bts-ce/bts-ce-reports:0.0.1 + image: bodastage/bts-ce-reports:0.0.1 restart: always environment: - POSTGRES_PASSWORD=password From 23f9f62a5ae0b7604ac11a553b41a629cf48a38d Mon Sep 17 00:00:00 2001 From: Emmanuel Robert Ssebaggala Date: Mon, 27 May 2019 10:04:46 +0300 Subject: [PATCH 17/17] Fix typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4360b9c..a7e63e5 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Boda Telecom Suite Community Edition - An open source telecommunication network * 64 bit OS (Kernel version 3.10+ for Linux and build 10.0.14393+ for Windows) * [Docker](https://www.docker.com/get-docker) -* Memery and disk space depend on the network /data size +* Memory and disk space depend on the network /data size * Latest web browser ## Deployment/Installation