├── .gitignore
├── LICENSE
├── README.md
├── console
└── custom
│ ├── local.json
│ ├── settings.json
│ └── themes
│ ├── dark
│ ├── config.json
│ ├── dark.css
│ ├── dark.html
│ └── dark_logo.svg
│ └── purple
│ ├── config.json
│ ├── css
│ └── purple.css
│ └── images
│ └── purple_logo.svg
├── dt-demo
├── apex_checks.xml
├── dimensions
│ ├── .gitignore
│ ├── READEME.md
│ ├── XmlJavadocCommentsExtractor.xsl
│ ├── apex_checks.xml
│ ├── pom.xml
│ └── src
│ │ ├── assemble
│ │ └── appPackage.xml
│ │ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── datatorrent
│ │ │ │ └── demos
│ │ │ │ ├── dimensions
│ │ │ │ ├── InputGenerator.java
│ │ │ │ ├── ads
│ │ │ │ │ ├── AdInfo.java
│ │ │ │ │ ├── InputItemGenerator.java
│ │ │ │ │ ├── benchmark
│ │ │ │ │ │ ├── AdsDimensionsGenericBenchmark.java
│ │ │ │ │ │ └── AdsDimensionsStatsBenchmark.java
│ │ │ │ │ ├── generic
│ │ │ │ │ │ ├── AdsDimensionsDemo.java
│ │ │ │ │ │ ├── AdsDimensionsDemoDifferentTimeBuckets.java
│ │ │ │ │ │ ├── AdsDimensionsDemoManualEntry.java
│ │ │ │ │ │ └── AdsDimensionsDemoNoTime.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── stats
│ │ │ │ │ │ ├── AdsConverter.java
│ │ │ │ │ │ └── AdsDimensionsDemoPerformant.java
│ │ │ │ ├── sales
│ │ │ │ │ └── generic
│ │ │ │ │ │ ├── EnrichmentOperator.java
│ │ │ │ │ │ ├── JsonSalesGenerator.java
│ │ │ │ │ │ ├── JsonToMapConverter.java
│ │ │ │ │ │ ├── RandomWeightedMovableGenerator.java
│ │ │ │ │ │ ├── SalesDemo.java
│ │ │ │ │ │ └── SalesEvent.java
│ │ │ │ └── telecom
│ │ │ │ │ ├── app
│ │ │ │ │ ├── CDRDemoV2.java
│ │ │ │ │ ├── CallDetailRecordGenerateApp.java
│ │ │ │ │ ├── CustomerEnrichedInfoGenerateApp.java
│ │ │ │ │ ├── CustomerServiceDemoV2.java
│ │ │ │ │ ├── EnrichCDRApp.java
│ │ │ │ │ ├── TelecomDemoV2.java
│ │ │ │ │ └── TelecomDimensionsDemo.java
│ │ │ │ │ ├── conf
│ │ │ │ │ ├── ConfigUtil.java
│ │ │ │ │ ├── CustomerEnrichedInfoCassandraConfig.java
│ │ │ │ │ ├── CustomerEnrichedInfoHBaseConfig.java
│ │ │ │ │ ├── CustomerEnrichedInfoHiveConfig.java
│ │ │ │ │ ├── CustomerServiceCassandraConf.java
│ │ │ │ │ ├── CustomerServiceHBaseConf.java
│ │ │ │ │ ├── DataWarehouseConfig.java
│ │ │ │ │ ├── EnrichedCDRCassandraConfig.java
│ │ │ │ │ ├── EnrichedCDRHBaseConfig.java
│ │ │ │ │ ├── EnrichedCDRHiveConfig.java
│ │ │ │ │ ├── EnrichedCustomerServiceCassandraConf.java
│ │ │ │ │ ├── EnrichedCustomerServiceHBaseConf.java
│ │ │ │ │ ├── EnrichedCustomerServiceHiveConfig.java
│ │ │ │ │ └── TelecomDemoConf.java
│ │ │ │ │ ├── generate
│ │ │ │ │ ├── AbstractStringRandomGenerator.java
│ │ │ │ │ ├── CDRHBaseFieldInfo.java
│ │ │ │ │ ├── CallDetailRecordCustomerInfoGenerator.java
│ │ │ │ │ ├── CallDetailRecordRandomGenerator.java
│ │ │ │ │ ├── CharRandomGenerator.java
│ │ │ │ │ ├── CharRange.java
│ │ │ │ │ ├── CustomerEnrichedInfoCassandraRepo.java
│ │ │ │ │ ├── CustomerEnrichedInfoEmbededRepo.java
│ │ │ │ │ ├── CustomerEnrichedInfoHbaseRepo.java
│ │ │ │ │ ├── CustomerEnrichedInfoHiveRepo.java
│ │ │ │ │ ├── CustomerEnrichedInfoProvider.java
│ │ │ │ │ ├── CustomerInfoRandomGenerator.java
│ │ │ │ │ ├── CustomerServiceDefaultGenerator.java
│ │ │ │ │ ├── CustomerServiceRandomGenerator.java
│ │ │ │ │ ├── EnumStringRandomGenerator.java
│ │ │ │ │ ├── FixLengthStringRandomGenerator.java
│ │ │ │ │ ├── Generator.java
│ │ │ │ │ ├── GeneratorUtil.java
│ │ │ │ │ ├── ImeiGenerator.java
│ │ │ │ │ ├── ImsiGenerator.java
│ │ │ │ │ ├── LocationRepo.java
│ │ │ │ │ ├── MNCRepo.java
│ │ │ │ │ ├── MsisdnGenerator.java
│ │ │ │ │ ├── Range.java
│ │ │ │ │ ├── StringComposeGenerator.java
│ │ │ │ │ └── TACRepo.java
│ │ │ │ │ ├── hive
│ │ │ │ │ ├── HiveUtil.java
│ │ │ │ │ ├── TelecomHiveExecuteOperator.java
│ │ │ │ │ └── TelecomHiveOutputOperator.java
│ │ │ │ │ ├── model
│ │ │ │ │ ├── BytesSupport.java
│ │ │ │ │ ├── CallDetailRecord.java
│ │ │ │ │ ├── CallType.java
│ │ │ │ │ ├── CustomerEnrichedInfo.java
│ │ │ │ │ ├── CustomerInfo.java
│ │ │ │ │ ├── CustomerService.java
│ │ │ │ │ ├── DisconnectReason.java
│ │ │ │ │ ├── EnrichedCDR.java
│ │ │ │ │ ├── EnrichedCustomerService.java
│ │ │ │ │ ├── MNCInfo.java
│ │ │ │ │ ├── TACInfo.java
│ │ │ │ │ └── ZipCodeHelper.java
│ │ │ │ │ └── operator
│ │ │ │ │ ├── AppDataConfigurableSnapshotServer.java
│ │ │ │ │ ├── AppDataSimpleConfigurableSnapshotServer.java
│ │ │ │ │ ├── AppDataSingleSchemaDimensionStoreHDHTUpdateWithList.java
│ │ │ │ │ ├── AppDataSnapshotServerAggregate.java
│ │ │ │ │ ├── CDREnrichOperator.java
│ │ │ │ │ ├── CDRHdfsInputOperator.java
│ │ │ │ │ ├── CDRHdfsOutputOperator.java
│ │ │ │ │ ├── CDRStore.java
│ │ │ │ │ ├── CallDetailRecordGenerateOperator.java
│ │ │ │ │ ├── CustomerEnrichedInfoCassandraOutputOperator.java
│ │ │ │ │ ├── CustomerEnrichedInfoGenerateOperator.java
│ │ │ │ │ ├── CustomerEnrichedInfoHbaseOutputOperator.java
│ │ │ │ │ ├── CustomerEnrichedInfoHiveOutputOperator.java
│ │ │ │ │ ├── CustomerServiceCassandraOutputOperator.java
│ │ │ │ │ ├── CustomerServiceEnrichOperator.java
│ │ │ │ │ ├── CustomerServiceGenerateOperator.java
│ │ │ │ │ ├── CustomerServiceHbaseOutputOperator.java
│ │ │ │ │ ├── CustomerServiceStore.java
│ │ │ │ │ ├── EnrichedCDRCassandraOutputOperator.java
│ │ │ │ │ ├── EnrichedCDRHbaseInputOperator.java
│ │ │ │ │ ├── EnrichedCDRHbaseOutputOperator.java
│ │ │ │ │ ├── EnrichedCustomerServiceCassandraOutputOperator.java
│ │ │ │ │ ├── EnrichedCustomerServiceHbaseOutputOperator.java
│ │ │ │ │ ├── GeoDimensionStore.java
│ │ │ │ │ ├── RegionZipCombinationFilter.java
│ │ │ │ │ ├── RegionZipCombinationValidator.java
│ │ │ │ │ ├── TelecomDemoCassandraOutputOperator.java
│ │ │ │ │ └── TelecomDemoHBaseOutputOperator.java
│ │ │ │ └── hdht
│ │ │ │ └── benchmark
│ │ │ │ ├── Generator.java
│ │ │ │ ├── HDHTBenchmarkApplication.java
│ │ │ │ └── HDSOperator.java
│ │ └── resources
│ │ │ ├── META-INF
│ │ │ ├── properties-GenericDimensionsWithCsvMapParser.xml
│ │ │ └── properties.xml
│ │ │ ├── TelecomDemoV2-setup
│ │ │ ├── adsBenchmarkSchema.json
│ │ │ ├── adsGenericDataSchema.json
│ │ │ ├── adsGenericEventSchema.json
│ │ │ ├── adsGenericEventSchemaNoEnums.json
│ │ │ ├── adsGenericEventSchemaNoTime.json
│ │ │ ├── adsGenericEventSchemaTimeBuckets.json
│ │ │ ├── averageWaittimeSnapshotSchema.json
│ │ │ ├── cdrDemoV2EventSchema.json
│ │ │ ├── cdrDemoV2SnapshotSchema.json
│ │ │ ├── cdrGeoSchema.json
│ │ │ ├── csGeoSchema.json
│ │ │ ├── customerServiceDemoV2EventSchema.json
│ │ │ ├── customerenrichedinfo.csv
│ │ │ ├── products.txt
│ │ │ ├── salesGenericDataSchema.json
│ │ │ ├── salesGenericEventSchema.json
│ │ │ ├── satisfactionRatingSnapshotSchema.json
│ │ │ ├── serviceCallSnapshotSchema.json
│ │ │ ├── telecomDimensionsEventSchema.json
│ │ │ └── usLocationToZips.csv
│ │ ├── site
│ │ └── conf
│ │ │ └── my-app-conf1.xml
│ │ └── test
│ │ ├── java
│ │ └── com
│ │ │ └── datatorrent
│ │ │ └── demos
│ │ │ └── dimensions
│ │ │ ├── ads
│ │ │ ├── custom
│ │ │ │ └── AdsConverterTest.java
│ │ │ └── generic
│ │ │ │ ├── AdsDimensionsDemoTest.java
│ │ │ │ └── MockGenerator.java
│ │ │ ├── sales
│ │ │ └── generic
│ │ │ │ ├── MockGenerator.java
│ │ │ │ └── SalesDemoTest.java
│ │ │ └── telecom
│ │ │ ├── CDRDemoV2Tester.java
│ │ │ ├── CDREnrichTester.java
│ │ │ ├── CallDetailRecordGenerateAppTester.java
│ │ │ ├── CustomerEnrichedInfoEmbededRepoTester.java
│ │ │ ├── CustomerEnrichedInfoGenerateAppTester.java
│ │ │ ├── CustomerServiceDemoV2Tester.java
│ │ │ ├── CustomerServiceHbaseOutputOperatorTester.java
│ │ │ ├── DataWrapper.java
│ │ │ ├── EnrichCDRAppTester.java
│ │ │ ├── EnrichedCDRHbaseInputOperatorTester.java
│ │ │ ├── PointZipCodeRepoTester.java
│ │ │ ├── RegionZipDimensionalExpanderTester.java
│ │ │ ├── TelecomDimensionsDemoTester.java
│ │ │ ├── TelecomHiveOutputOperatorTester.java
│ │ │ └── TupleCacheOperator.java
│ │ └── resources
│ │ ├── adsquery.json
│ │ ├── log4j.properties
│ │ ├── salesquery.json
│ │ └── satisfactionRatingSnapshotSchema_test.json
├── machinedata
│ ├── XmlJavadocCommentsExtractor.xsl
│ ├── apex_checks.xml
│ ├── pom.xml
│ └── src
│ │ ├── assemble
│ │ └── appPackage.xml
│ │ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── datatorrent
│ │ │ │ └── demos
│ │ │ │ └── machinedata
│ │ │ │ ├── Application.java
│ │ │ │ ├── ApplicationHardcoded.java
│ │ │ │ ├── ApplicationPerformant.java
│ │ │ │ ├── InputReceiver.java
│ │ │ │ └── data
│ │ │ │ ├── AbstractMachineAggregatorHardcoded.java
│ │ │ │ ├── MachineAggregate.java
│ │ │ │ ├── MachineAggregatorAverage.java
│ │ │ │ ├── MachineAggregatorCount.java
│ │ │ │ ├── MachineAggregatorHardCodedCount.java
│ │ │ │ ├── MachineAggregatorHardCodedSum.java
│ │ │ │ ├── MachineAggregatorSum.java
│ │ │ │ ├── MachineHardCodedAggregate.java
│ │ │ │ ├── MachineHardCodedAggregateConverter.java
│ │ │ │ ├── MachineInfo.java
│ │ │ │ └── MachineKey.java
│ │ └── resources
│ │ │ ├── META-INF
│ │ │ └── properties.xml
│ │ │ └── machinedataschema.json
│ │ └── test
│ │ └── resources
│ │ └── log4j.properties
├── pom.xml
└── starter-app
│ ├── apex_checks.xml
│ ├── pom.xml
│ └── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ └── test
│ └── resources
│ └── log4j.properties
├── tools
├── README.md
└── monitor.py
├── training
├── metrics-app
│ ├── README.md
│ ├── XmlJavadocCommentsExtractor.xsl
│ ├── pom.xml
│ └── src
│ │ ├── assemble
│ │ └── appPackage.xml
│ │ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── datatorrent
│ │ │ │ └── apps
│ │ │ │ ├── AppMetricsService.java
│ │ │ │ ├── ApplicationCCP.java
│ │ │ │ ├── ApplicationCPPAppMetrics.java
│ │ │ │ ├── POJOGenerator.java
│ │ │ │ ├── PojoEvent.java
│ │ │ │ ├── TopNAccounts.java
│ │ │ │ └── TopNAggregator.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ ├── properties-test.xml
│ │ │ └── properties.xml
│ │ └── test
│ │ └── resources
│ │ └── log4j.properties
└── random-to-hdfs
│ ├── README.md
│ ├── XmlJavadocCommentsExtractor.xsl
│ ├── pom.xml
│ └── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── datatorrent
│ │ │ └── apps
│ │ │ ├── Application.java
│ │ │ └── POJOGenerator.java
│ └── resources
│ │ └── META-INF
│ │ ├── properties-test.xml
│ │ └── properties.xml
│ └── test
│ └── resources
│ └── log4j.properties
└── tutorials
├── README.md
├── cassandraInput
├── README.md
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── datatorrent
│ │ │ └── cassandra
│ │ │ ├── Application.java
│ │ │ └── TestUser.java
│ └── resources
│ │ └── META-INF
│ │ ├── example.cql
│ │ └── properties-CassandraInputApplication.xml
│ └── test
│ └── java
│ └── com
│ └── datatorrent
│ └── cassandra
│ └── CassandraApplicationTest.java
├── cassandraOutput
├── README.md
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ └── java
│ │ └── com
│ │ └── datatorrent
│ │ └── cassandra
│ │ ├── Application.java
│ │ └── TestUser.java
│ ├── site
│ └── conf
│ │ └── properties-CassandraOutputTestApp.xml
│ └── test
│ ├── java
│ └── com
│ │ └── datatorrent
│ │ └── cassandra
│ │ └── CassandraApplicationTest.java
│ └── resources
│ ├── example.cql
│ └── properties-CassandraOutputTestApp.xml
├── exactly-once
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── myapexapp
│ │ │ ├── Application.java
│ │ │ └── AtomicFileOutputApp.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── myapexapp
│ │ ├── ApplicationTest.java
│ │ └── AtomicFileOutputAppTest.java
│ └── resources
│ └── log4j.properties
├── fileIO-multiDir
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── fileIO
│ │ │ ├── Application.java
│ │ │ ├── FileReader.java
│ │ │ ├── FileReaderMultiDir.java
│ │ │ └── FileWriter.java
│ └── resources
│ │ ├── META-INF
│ │ └── properties.xml
│ │ └── unused-log4j.properties
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── fileIO
│ │ └── ApplicationTest.java
│ └── resources
│ └── log4j.properties
├── fileIO-simple
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── myapexapp
│ │ │ ├── Application.java
│ │ │ └── FileOutputOperator.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── myapexapp
│ │ └── ApplicationTest.java
│ └── resources
│ └── log4j.properties
├── fileIO
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── fileIO
│ │ │ ├── Application.java
│ │ │ ├── BytesFileWriter.java
│ │ │ ├── FileReader.java
│ │ │ ├── FileWriter.java
│ │ │ ├── ThroughputBasedApplication.java
│ │ │ └── ThroughputBasedReader.java
│ └── resources
│ │ ├── META-INF
│ │ ├── properties-FileIO.xml
│ │ └── properties-ThroughputBasedFileIO.xml
│ │ └── unused-log4j.properties
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── fileIO
│ │ ├── ApplicationTest.java
│ │ └── ThroughputBasedApplicationTest.java
│ └── resources
│ └── log4j.properties
├── fileOutput
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── fileOutput
│ │ │ ├── Application.java
│ │ │ ├── FileWriter.java
│ │ │ └── SequenceGenerator.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── fileOutput
│ │ └── ApplicationTest.java
│ └── resources
│ └── log4j.properties
├── fileToJdbc
├── .gitignore
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── FileToJdbcApp
│ │ │ ├── CustomParser.java
│ │ │ ├── FileReader.java
│ │ │ ├── FileToJdbcCsvParser.java
│ │ │ ├── FileToJdbcCustomParser.java
│ │ │ └── PojoEvent.java
│ └── resources
│ │ ├── META-INF
│ │ └── properties.xml
│ │ └── schema.json
│ ├── site
│ └── conf
│ │ ├── exampleCsvParser.xml
│ │ └── exampleCustomParser.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── FileToJdbcApp
│ │ └── ApplicationTest.java
│ └── resources
│ ├── example.sql
│ ├── log4j.properties
│ ├── test-input
│ └── sample.txt
│ └── test.xml
├── hdfs-sync
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── datatorrent
│ │ │ └── apps
│ │ │ └── copy
│ │ │ └── HDFSFileCopyApp.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ ├── cluster-memory-conf.xml
│ │ └── sandbox-memory-conf.xml
│ └── test
│ └── resources
│ └── log4j.properties
├── hdfs2kafka
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── myapexapp
│ │ │ └── Application.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── myapexapp
│ │ └── ApplicationTest.java
│ └── resources
│ └── log4j.properties
├── hdht
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ ├── Application.java
│ │ │ └── RandomNumberGenerator.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ ├── ApplicationTest.java
│ │ ├── HDHTAppTest.java
│ │ └── HDHTTestOperator.java
│ └── resources
│ └── log4j.properties
├── jdbcIngest
├── .gitignore
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── mydtapp
│ │ │ ├── FileLineOutputOperator.java
│ │ │ ├── JdbcHDFSApp.java
│ │ │ ├── JdbcPollerApplication.java
│ │ │ └── PojoEvent.java
│ └── resources
│ │ └── META-INF
│ │ ├── properties-PollJdbcToHDFSApp.xml
│ │ └── properties-SimpleJdbcToHDFSApp.xml
│ ├── site
│ └── conf
│ │ └── example.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── mydtapp
│ │ ├── ApplicationTest.java
│ │ ├── JdbcInputAppTest.java
│ │ └── JdbcPollerApplicationTest.java
│ └── resources
│ ├── example.sql
│ └── log4j.properties
├── jdbcToJdbc
├── .gitignore
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── mydtapp
│ │ │ ├── JdbcToJdbcApp.java
│ │ │ └── PojoEvent.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── example.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── mydtapp
│ │ ├── ApplicationTest.java
│ │ └── JdbcOperatorTest.java
│ └── resources
│ ├── example.sql
│ └── log4j.properties
├── jms-output-exactlyonce
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ ├── BatchSequenceGenerator.java
│ │ │ ├── JmsOutputApplication.java
│ │ │ ├── PassthroughFailOperator.java
│ │ │ ├── StringMessageJMSSinglePortOutputOperator.java
│ │ │ ├── ValidationApplication.java
│ │ │ └── ValidationToFile.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── JmsApplicationTest.java
│ └── resources
│ └── log4j.properties
├── jmsActiveMQ
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── jmsActiveMQ
│ │ │ ├── ActiveMQApplication.java
│ │ │ └── LineOutputOperator.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── jmsActiveMQ
│ │ └── ApplicationTest.java
│ └── resources
│ └── log4j.properties
├── jmsSqs
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── jmsSqs
│ │ │ ├── LineOutputOperator.java
│ │ │ └── SqsApplication.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── jmsSqs
│ │ └── ApplicationTest.java
│ └── resources
│ └── log4j.properties
├── kafka
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── myapexapp
│ │ │ ├── KafkaApp.java
│ │ │ └── LineOutputOperator.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ └── my-app-conf1.xml
│ └── test
│ ├── java
│ └── com
│ │ └── example
│ │ └── myapexapp
│ │ └── ApplicationTest.java
│ └── resources
│ └── log4j.properties
├── kinesisInput
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── example
│ │ │ └── kinesisInput
│ │ │ └── Application.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ └── test
│ └── resources
│ └── log4j.properties
├── maprapp
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── datatorrent
│ │ │ └── maprapp
│ │ │ ├── Application.java
│ │ │ └── Data.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ └── test
│ ├── java
│ └── com
│ │ └── datatorrent
│ │ └── maprapp
│ │ └── ApplicationTest.java
│ └── resources
│ └── log4j.properties
├── operatorTutorial
├── .gitignore
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── datatorrent
│ │ └── tutorials
│ │ └── operatorTutorial
│ │ └── WordCountOperator.java
│ └── test
│ ├── java
│ └── com
│ │ └── datatorrent
│ │ └── tutorials
│ │ └── operatorTutorial
│ │ └── WordCountOperatorTest.java
│ └── resources
│ ├── log4j.properties
│ └── stop-words
├── parser
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── datatorrent
│ │ │ └── tutorial
│ │ │ ├── csvparser
│ │ │ ├── AdDataGenerator.java
│ │ │ ├── Campaign.java
│ │ │ ├── FileOutputOperator.java
│ │ │ └── csvParserApplication.java
│ │ │ ├── fixedwidthparser
│ │ │ ├── Ad.java
│ │ │ ├── AdDataGenerator.java
│ │ │ └── fixedWidthParserApplication.java
│ │ │ └── xmlparser
│ │ │ ├── EmployeeBean.java
│ │ │ ├── EmployeeDataGenerator.java
│ │ │ ├── JavaSerializationStreamCodec.java
│ │ │ ├── XmlDocumentFormatter.java
│ │ │ └── xmlParserApplication.java
│ └── resources
│ │ └── META-INF
│ │ ├── properties-csvParseApplication.xml
│ │ ├── properties-fixedWidthParserApplication.xml
│ │ └── properties-xmlParseApplication.xml
│ └── test
│ ├── java
│ └── com
│ │ └── datatorrent
│ │ └── tutorial
│ │ ├── csvparser
│ │ └── csvParserApplicationTest.java
│ │ ├── fixedwidthparser
│ │ └── fixedWidthParserApplicationTest.java
│ │ └── xmlparser
│ │ └── xmlParserApplicationTest.java
│ └── resources
│ └── log4j.properties
├── s3-to-hdfs-sync
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── datatorrent
│ │ │ └── tutorial
│ │ │ └── s3input
│ │ │ └── S3ToHDFSSyncApplication.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ ├── site
│ └── conf
│ │ ├── cluster-memory-conf.xml
│ │ └── sandbox-memory-conf.xml
│ └── test
│ └── resources
│ └── log4j.properties
├── s3-tuple-output
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── datatorrent
│ │ │ └── tutorials
│ │ │ └── s3output
│ │ │ └── Application.java
│ └── resources
│ │ └── META-INF
│ │ └── properties.xml
│ └── test
│ └── resources
│ └── log4j.properties
├── s3output
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
│ ├── assemble
│ └── appPackage.xml
│ └── main
│ ├── java
│ └── com
│ │ └── example
│ │ └── s3output
│ │ └── Application.java
│ └── resources
│ └── META-INF
│ └── properties.xml
├── topnwords
├── app
│ ├── XmlJavadocCommentsExtractor.xsl
│ ├── pom.xml
│ └── src
│ │ ├── assemble
│ │ └── appPackage.xml
│ │ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── topNwordcount
│ │ │ │ ├── ApplicationWithQuerySupport.java
│ │ │ │ ├── FileWordCount.java
│ │ │ │ ├── LineReader.java
│ │ │ │ ├── WCPair.java
│ │ │ │ ├── WindowWordCount.java
│ │ │ │ ├── WordCountWriter.java
│ │ │ │ └── WordReader.java
│ │ └── resources
│ │ │ ├── META-INF
│ │ │ └── properties.xml
│ │ │ └── WordDataSchema.json
│ │ ├── site
│ │ └── conf
│ │ │ ├── low-mem.xml
│ │ │ └── my-app-conf1.xml
│ │ └── test
│ │ └── resources
│ │ └── log4j.properties
├── scripts
│ ├── aliases
│ ├── build-apex
│ ├── build-apex.cmd
│ ├── check-services
│ ├── newapp
│ └── newapp.cmd
└── webinar
│ ├── ApplicationWordCount.java
│ ├── FileWordCount.java
│ ├── LineReader.java
│ ├── WCPair.java
│ ├── WindowWordCount.java
│ ├── WordCountWriter.java
│ ├── WordReader.java
│ └── properties-SortedWordCount.xml
└── unifiers
├── README.md
├── XmlJavadocCommentsExtractor.xsl
├── pom.xml
└── src
├── assemble
└── appPackage.xml
├── main
├── java
│ └── com
│ │ └── example
│ │ └── myapexapp
│ │ ├── Application.java
│ │ ├── RandomInteger.java
│ │ ├── RangeFinder.java
│ │ └── ToConsole.java
└── resources
│ └── META-INF
│ └── properties.xml
├── site
└── conf
│ └── use-unifier.xml
└── test
├── java
└── com
│ └── example
│ └── myapexapp
│ └── ApplicationTest.java
└── resources
└── log4j.properties
/.gitignore:
--------------------------------------------------------------------------------
1 | .classpath
2 | .project
3 | .settings/
4 | .metadata/
5 | .idea/
6 | target/
7 |
8 | # Mobile Tools for Java (J2ME)
9 | .mtj.tmp/
10 |
11 | # Package Files #
12 | *.jar
13 | *.war
14 | *.ear
15 |
16 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
17 | hs_err_pid*
18 |
19 | .DS_Store
20 | .classpath
21 | .project
22 | .settings/
23 | .metadata/
24 | .idea/
25 | target/
26 | /front/dist_tmp
27 | *.iml
28 | npm-debug.log
29 | nb-configuration.xml
30 | hadoop.log
31 | .checkstyle
32 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DataTorrent Application Examples
2 |
3 | DataTorrent RTS, powered by Apache Apex, provides a high-performing, fault-tolerant, scalable, easy to use data processing platform for both batch and streaming data. It includes advanced management, monitoring, development, visualization, data ingestion and distribution features. For more information on Apache Apex, please go to https://apex.apache.org/
4 |
5 | This repository contains examples for new users to start developing data pipelines as an application. The complete documentation along with prerequisites, setup guide and tutorial is available on http://docs.datatorrent.com/
6 |
7 | ##Contact
8 |
9 | DataTorrent is at https://www.datatorrent.com/
10 |
11 | Apache Apex is at http://apex.apache.org and [subscribe](http://apex.apache.org/community.html) to the mailing lists.
12 |
13 | There is an active user community at http://stackoverflow.com/. Please tag the question with "apache-apex".
14 |
15 |
--------------------------------------------------------------------------------
/console/custom/local.json:
--------------------------------------------------------------------------------
1 | {
2 | "User Profile": "User Settings",
3 | "Roles": "Super Custom Roles"
4 | }
5 |
--------------------------------------------------------------------------------
/console/custom/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "disableStockThemes": false,
3 | "customDefaultTheme": "",
4 | "customThemes": [
5 | "dark",
6 | "purple"
7 | ],
8 | "customLocalization": "local.json",
9 | "defaultHomePage": "/ops"
10 | }
--------------------------------------------------------------------------------
/console/custom/themes/dark/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dark",
3 | "logo": "dark_logo.svg",
4 | "css": "dark.css",
5 | "html": "dark.html"
6 | }
--------------------------------------------------------------------------------
/console/custom/themes/dark/dark.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #333;
3 | color: white;
4 | }
--------------------------------------------------------------------------------
/console/custom/themes/dark/dark.html:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
Dark Theme Debugger
10 |
11 |
Console Settings
12 |
{{ settings | json }}
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/console/custom/themes/purple/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Purple",
3 | "logo": "images/purple_logo.svg",
4 | "css": "css/purple.css"
5 | }
--------------------------------------------------------------------------------
/console/custom/themes/purple/css/purple.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #d2bdde;
3 | }
--------------------------------------------------------------------------------
/dt-demo/dimensions/.gitignore:
--------------------------------------------------------------------------------
1 | /target/
2 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/READEME.md:
--------------------------------------------------------------------------------
1 | ## Dimensions Example
2 |
3 | This application demonstrates Apex platform capabilities such as
4 | - Massive multi dimensional computation with very low latency
5 | - Fault Tolerance without data loss
6 | - High scalability and throughput
7 |
8 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/XmlJavadocCommentsExtractor.xsl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/assemble/appPackage.xml:
--------------------------------------------------------------------------------
1 |
4 | appPackage
5 |
6 | jar
7 |
8 | false
9 |
10 |
11 | ${basedir}/target/
12 | /app
13 |
14 | ${project.artifactId}-${project.version}.jar
15 |
16 |
17 |
18 | ${basedir}/target/deps
19 | /lib
20 |
21 |
22 | ${basedir}/src/site/conf
23 | /conf
24 |
25 | *.xml
26 |
27 |
28 |
29 | ${basedir}/src/main/resources/META-INF
30 | /META-INF
31 |
32 |
33 | ${basedir}/src/main/resources/app
34 | /app
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/InputGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions;
6 |
7 | import com.datatorrent.api.InputOperator;
8 |
9 | /**
10 | * @since 3.1.0
11 | */
12 |
13 | public interface InputGenerator extends InputOperator
14 | {
15 | public OutputPort getOutputPort();
16 | }
17 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/ads/generic/AdsDimensionsDemoDifferentTimeBuckets.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.ads.generic;
6 |
7 | import org.apache.hadoop.conf.Configuration;
8 |
9 | import com.datatorrent.api.DAG;
10 | import com.datatorrent.api.annotation.ApplicationAnnotation;
11 |
12 | @ApplicationAnnotation(name = AdsDimensionsDemoDifferentTimeBuckets.APP_NAME)
13 | public class AdsDimensionsDemoDifferentTimeBuckets extends AdsDimensionsDemo
14 | {
15 | public static final String APP_NAME = "AdsDimensionsDemoDifferentTimeBuckets";
16 | public static final String EVENT_SCHEMA_LOCATION = "adsGenericEventSchemaTimeBuckets.json";
17 |
18 | @Override
19 | public void populateDAG(DAG dag, Configuration conf)
20 | {
21 | this.appName = APP_NAME;
22 | this.eventSchemaLocation = EVENT_SCHEMA_LOCATION;
23 | super.populateDAG(dag, conf);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/ads/generic/AdsDimensionsDemoManualEntry.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.ads.generic;
6 |
7 | import java.util.List;
8 |
9 | import org.apache.hadoop.conf.Configuration;
10 |
11 | import com.google.common.collect.Lists;
12 |
13 | import com.datatorrent.api.DAG;
14 | import com.datatorrent.api.annotation.ApplicationAnnotation;
15 |
16 | /**
17 | * @since 3.1.0
18 | */
19 | @ApplicationAnnotation(name = AdsDimensionsDemoManualEntry.APP_NAME)
20 | public class AdsDimensionsDemoManualEntry extends AdsDimensionsDemo
21 | {
22 | public static final String APP_NAME = "AdsDimensionsDemoGenericManualEntry";
23 | public static final String EVENT_SCHEMA_LOCATION = "adsGenericEventSchemaNoEnums.json";
24 |
25 | @Override
26 | public void populateDAG(DAG dag, Configuration conf)
27 | {
28 | this.appName = APP_NAME;
29 | this.eventSchemaLocation = EVENT_SCHEMA_LOCATION;
30 | this.advertisers = (List)Lists.newArrayList("starbucks","safeway","mcdonalds","macys","taco bell","walmart","khol's","san diego zoo","pandas","jack in the box","tomatina","ron swanson");
31 | super.populateDAG(dag, conf);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/ads/generic/AdsDimensionsDemoNoTime.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.ads.generic;
6 |
7 | import org.apache.hadoop.conf.Configuration;
8 |
9 | import com.datatorrent.api.DAG;
10 | import com.datatorrent.api.annotation.ApplicationAnnotation;
11 |
12 | @ApplicationAnnotation(name = AdsDimensionsDemoNoTime.APP_NAME)
13 | public class AdsDimensionsDemoNoTime extends AdsDimensionsDemo
14 | {
15 | public static final String APP_NAME = "AdsDimensionsDemoNoTime";
16 | public static final String EVENT_SCHEMA_LOCATION = "adsGenericEventSchemaNoTime.json";
17 |
18 | @Override
19 | public void populateDAG(DAG dag, Configuration conf)
20 | {
21 | this.appName = APP_NAME;
22 | this.eventSchemaLocation = EVENT_SCHEMA_LOCATION;
23 | super.populateDAG(dag, conf);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/ads/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2013 DataTorrent, Inc. ALL Rights Reserved.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /**
18 | * Ads dimension demo application, operators, and utilities.
19 | */
20 | package com.datatorrent.demos.dimensions.ads;
21 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/sales/generic/SalesEvent.java:
--------------------------------------------------------------------------------
1 | package com.datatorrent.demos.dimensions.sales.generic;
2 |
3 | /**
4 | * A single sales event
5 | */
6 | class SalesEvent
7 | {
8 |
9 | /* dimension keys */
10 | public long time;
11 | public int productId;
12 | public String customer;
13 | public String channel;
14 | public String region;
15 | /* metrics */
16 | public double sales;
17 | public double discount;
18 | public double tax;
19 | }
20 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/app/TelecomDemoV2.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.app;
6 |
7 | import org.slf4j.Logger;
8 | import org.slf4j.LoggerFactory;
9 |
10 | import org.apache.hadoop.conf.Configuration;
11 |
12 | import com.datatorrent.api.DAG;
13 | import com.datatorrent.api.StreamingApplication;
14 | import com.datatorrent.api.annotation.ApplicationAnnotation;
15 |
16 | @ApplicationAnnotation(name = TelecomDemoV2.APP_NAME)
17 | public class TelecomDemoV2 implements StreamingApplication
18 | {
19 | private static final transient Logger logger = LoggerFactory.getLogger(TelecomDemoV2.class);
20 |
21 | public static final String APP_NAME = "TelecomDemoV2";
22 |
23 | public static final int outputMask_HBase = 0x01;
24 | public static final int outputMask_Cassandra = 0x100;
25 |
26 | protected int outputMask = outputMask_Cassandra;
27 |
28 | @Override
29 | public void populateDAG(DAG dag, Configuration conf)
30 | {
31 | {
32 | CDRDemoV2 cdr = new CDRDemoV2(APP_NAME);
33 | cdr.setOutputMask(outputMask);
34 | cdr.populateDAG(dag, conf);
35 | }
36 |
37 | {
38 | CustomerServiceDemoV2 cs = new CustomerServiceDemoV2(APP_NAME);
39 | cs.setOutputMask(outputMask);
40 | cs.populateDAG(dag, conf);
41 | }
42 | }
43 |
44 | public int getOutputMask()
45 | {
46 | return outputMask;
47 | }
48 |
49 | public void setOutputMask(int outputMask)
50 | {
51 | this.outputMask = outputMask;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/ConfigUtil.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | import java.net.URI;
8 |
9 | import org.apache.hadoop.conf.Configuration;
10 |
11 | import com.datatorrent.api.Context.DAGContext;
12 | import com.datatorrent.api.DAG;
13 |
14 | public class ConfigUtil
15 | {
16 |
17 | public static final String PROP_GATEWAY_ADDRESS = "dt.gateway.listenAddress";
18 |
19 | public static URI getAppDataQueryPubSubURI(DAG dag, Configuration conf)
20 | {
21 | URI uri = URI.create("ws://" + getGatewayAddress(dag, conf) + "/pubsub");
22 | return uri;
23 | }
24 |
25 | public static String getGatewayAddress(DAG dag, Configuration conf)
26 | {
27 | String gatewayAddress = dag.getValue(DAGContext.GATEWAY_CONNECT_ADDRESS);
28 | if (gatewayAddress == null) {
29 | gatewayAddress = conf.get(PROP_GATEWAY_ADDRESS);
30 | }
31 | return gatewayAddress;
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/CustomerEnrichedInfoCassandraConfig.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class CustomerEnrichedInfoCassandraConfig extends DataWarehouseConfig
8 | {
9 | private static CustomerEnrichedInfoCassandraConfig instance;
10 |
11 | public static CustomerEnrichedInfoCassandraConfig instance()
12 | {
13 | if (instance == null) {
14 | synchronized (CustomerEnrichedInfoCassandraConfig.class) {
15 | if (instance == null) {
16 | instance = new CustomerEnrichedInfoCassandraConfig();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected CustomerEnrichedInfoCassandraConfig()
24 | {
25 | host = TelecomDemoConf.instance.getCassandraHost();
26 | port = TelecomDemoConf.instance.getCassandraPort();
27 | userName = TelecomDemoConf.instance.getCassandraUserName();
28 | password = TelecomDemoConf.instance.getCassandraPassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getCustomerEnrichedInfoTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/CustomerEnrichedInfoHBaseConfig.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class CustomerEnrichedInfoHBaseConfig extends DataWarehouseConfig
8 | {
9 | private static CustomerEnrichedInfoHBaseConfig instance;
10 |
11 | public static CustomerEnrichedInfoHBaseConfig instance()
12 | {
13 | if (instance == null) {
14 | synchronized (CustomerEnrichedInfoHBaseConfig.class) {
15 | if (instance == null) {
16 | instance = new CustomerEnrichedInfoHBaseConfig();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected CustomerEnrichedInfoHBaseConfig()
24 | {
25 | host = TelecomDemoConf.instance.getHbaseHost();
26 | port = TelecomDemoConf.instance.getHbasePort();
27 | userName = TelecomDemoConf.instance.getHbaseUserName();
28 | password = TelecomDemoConf.instance.getHbasePassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getCustomerEnrichedInfoTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/CustomerEnrichedInfoHiveConfig.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class CustomerEnrichedInfoHiveConfig extends DataWarehouseConfig
8 | {
9 | private static CustomerEnrichedInfoHiveConfig instance;
10 |
11 | public static CustomerEnrichedInfoHiveConfig instance()
12 | {
13 | if (instance == null) {
14 | synchronized (CustomerEnrichedInfoHiveConfig.class) {
15 | if (instance == null) {
16 | instance = new CustomerEnrichedInfoHiveConfig();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected CustomerEnrichedInfoHiveConfig()
24 | {
25 | host = TelecomDemoConf.instance.getHiveHost();
26 | port = TelecomDemoConf.instance.getHivePort();
27 | userName = TelecomDemoConf.instance.getHiveUserName();
28 | password = TelecomDemoConf.instance.getHivePassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getCustomerEnrichedInfoTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/CustomerServiceCassandraConf.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class CustomerServiceCassandraConf extends DataWarehouseConfig
8 | {
9 | private static CustomerServiceCassandraConf instance;
10 |
11 | public static CustomerServiceCassandraConf instance()
12 | {
13 | if (instance == null) {
14 | synchronized (CustomerServiceCassandraConf.class) {
15 | if (instance == null) {
16 | instance = new CustomerServiceCassandraConf();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected CustomerServiceCassandraConf()
24 | {
25 | host = TelecomDemoConf.instance.getCassandraHost();
26 | port = TelecomDemoConf.instance.getHbasePort();
27 | userName = TelecomDemoConf.instance.getCassandraUserName();
28 | password = TelecomDemoConf.instance.getCassandraPassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getCustomerServiceTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/CustomerServiceHBaseConf.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class CustomerServiceHBaseConf extends DataWarehouseConfig
8 | {
9 | private static CustomerServiceHBaseConf instance;
10 |
11 | public static CustomerServiceHBaseConf instance()
12 | {
13 | if (instance == null) {
14 | synchronized (CustomerServiceHBaseConf.class) {
15 | if (instance == null) {
16 | instance = new CustomerServiceHBaseConf();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected CustomerServiceHBaseConf()
24 | {
25 | host = TelecomDemoConf.instance.getHbaseHost();
26 | port = TelecomDemoConf.instance.getHbasePort();
27 | userName = TelecomDemoConf.instance.getHbaseUserName();
28 | password = TelecomDemoConf.instance.getHbasePassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getCustomerServiceTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/EnrichedCDRCassandraConfig.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class EnrichedCDRCassandraConfig extends DataWarehouseConfig
8 | {
9 | private static EnrichedCDRCassandraConfig instance;
10 |
11 | public static EnrichedCDRCassandraConfig instance()
12 | {
13 | if (instance == null) {
14 | synchronized (EnrichedCDRCassandraConfig.class) {
15 | if (instance == null) {
16 | instance = new EnrichedCDRCassandraConfig();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected EnrichedCDRCassandraConfig()
24 | {
25 | host = TelecomDemoConf.instance.getCassandraHost();
26 | port = TelecomDemoConf.instance.getCassandraPort();
27 | userName = TelecomDemoConf.instance.getCassandraUserName();
28 | password = TelecomDemoConf.instance.getCassandraPassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getCdrEnrichedRecordTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/EnrichedCDRHBaseConfig.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class EnrichedCDRHBaseConfig extends DataWarehouseConfig
8 | {
9 |
10 | private static EnrichedCDRHBaseConfig instance;
11 |
12 | public static EnrichedCDRHBaseConfig instance()
13 | {
14 | if (instance == null) {
15 | synchronized (EnrichedCDRHBaseConfig.class) {
16 | if (instance == null) {
17 | instance = new EnrichedCDRHBaseConfig();
18 | }
19 | }
20 | }
21 | return instance;
22 | }
23 |
24 | protected EnrichedCDRHBaseConfig()
25 | {
26 | host = TelecomDemoConf.instance.getHbaseHost();
27 | port = TelecomDemoConf.instance.getHbasePort();
28 | userName = TelecomDemoConf.instance.getHbaseUserName();
29 | password = TelecomDemoConf.instance.getHbasePassword();
30 | database = TelecomDemoConf.instance.getDatabase();
31 | tableName = TelecomDemoConf.instance.getCdrEnrichedRecordTableName();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/EnrichedCDRHiveConfig.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class EnrichedCDRHiveConfig extends DataWarehouseConfig
8 | {
9 | private static EnrichedCDRHiveConfig instance;
10 |
11 | public static EnrichedCDRHiveConfig instance()
12 | {
13 | if (instance == null) {
14 | synchronized (EnrichedCDRHiveConfig.class) {
15 | if (instance == null) {
16 | instance = new EnrichedCDRHiveConfig();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected EnrichedCDRHiveConfig()
24 | {
25 | host = TelecomDemoConf.instance.getHiveHost();
26 | port = TelecomDemoConf.instance.getHivePort();
27 | userName = TelecomDemoConf.instance.getHiveUserName();
28 | password = TelecomDemoConf.instance.getHivePassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getCdrEnrichedRecordTableName();
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/EnrichedCustomerServiceCassandraConf.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class EnrichedCustomerServiceCassandraConf extends DataWarehouseConfig
8 | {
9 | private static EnrichedCustomerServiceCassandraConf instance;
10 |
11 | public static EnrichedCustomerServiceCassandraConf instance()
12 | {
13 | if (instance == null) {
14 | synchronized (EnrichedCustomerServiceCassandraConf.class) {
15 | if (instance == null) {
16 | instance = new EnrichedCustomerServiceCassandraConf();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected EnrichedCustomerServiceCassandraConf()
24 | {
25 | host = TelecomDemoConf.instance.getCassandraHost();
26 | port = TelecomDemoConf.instance.getHbasePort();
27 | userName = TelecomDemoConf.instance.getCassandraUserName();
28 | password = TelecomDemoConf.instance.getCassandraPassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getEnrichedCustomerServiceTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/EnrichedCustomerServiceHBaseConf.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class EnrichedCustomerServiceHBaseConf extends DataWarehouseConfig
8 | {
9 | private static EnrichedCustomerServiceHBaseConf instance;
10 |
11 | public static EnrichedCustomerServiceHBaseConf instance()
12 | {
13 | if (instance == null) {
14 | synchronized (EnrichedCustomerServiceHBaseConf.class) {
15 | if (instance == null) {
16 | instance = new EnrichedCustomerServiceHBaseConf();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected EnrichedCustomerServiceHBaseConf()
24 | {
25 | host = TelecomDemoConf.instance.getHbaseHost();
26 | port = TelecomDemoConf.instance.getHbasePort();
27 | userName = TelecomDemoConf.instance.getHbaseUserName();
28 | password = TelecomDemoConf.instance.getHbasePassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getEnrichedCustomerServiceTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/conf/EnrichedCustomerServiceHiveConfig.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.conf;
6 |
7 | public class EnrichedCustomerServiceHiveConfig extends DataWarehouseConfig
8 | {
9 | private static EnrichedCustomerServiceHiveConfig instance;
10 |
11 | public static EnrichedCustomerServiceHiveConfig instance()
12 | {
13 | if (instance == null) {
14 | synchronized (EnrichedCustomerServiceHiveConfig.class) {
15 | if (instance == null) {
16 | instance = new EnrichedCustomerServiceHiveConfig();
17 | }
18 | }
19 | }
20 | return instance;
21 | }
22 |
23 | protected EnrichedCustomerServiceHiveConfig()
24 | {
25 | host = TelecomDemoConf.instance.getHiveHost();
26 | port = TelecomDemoConf.instance.getHivePort();
27 | userName = TelecomDemoConf.instance.getHiveUserName();
28 | password = TelecomDemoConf.instance.getHivePassword();
29 | database = TelecomDemoConf.instance.getDatabase();
30 | tableName = TelecomDemoConf.instance.getEnrichedCustomerServiceTableName();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/AbstractStringRandomGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | public abstract class AbstractStringRandomGenerator implements Generator
8 | {
9 | protected CharRandomGenerator charGenerator;
10 |
11 | @Override
12 | public String next()
13 | {
14 | if (charGenerator == null) {
15 | throw new RuntimeException("Please set the char generator first.");
16 | }
17 | final int stringLen = getStringLength();
18 | if (stringLen < 0) {
19 | throw new RuntimeException("The string lenght expect not less than zero.");
20 | }
21 | if (stringLen == 0) {
22 | return "";
23 | }
24 | char[] chars = new char[stringLen];
25 | for (int index = 0; index < stringLen; ++index) {
26 | chars[index] = charGenerator.next();
27 | }
28 | return new String(chars);
29 | }
30 |
31 | protected abstract int getStringLength();
32 | }
33 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/CDRHBaseFieldInfo.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | import com.datatorrent.contrib.hbase.HBaseFieldInfo;
8 |
9 | public class CDRHBaseFieldInfo extends HBaseFieldInfo
10 | {
11 | public CDRHBaseFieldInfo(String columnName, String columnExpression, SupportType type, String familyName)
12 | {
13 | super(columnName, columnExpression, type, familyName);
14 | }
15 |
16 | /**
17 | * get rid of the null point exception. should be fix it in
18 | * HBasePOJOPutOperator or HBaseFieldInfo
19 | */
20 | @Override
21 | public byte[] toBytes(Object value)
22 | {
23 | if (value == null) {
24 | return null;
25 | }
26 | return super.toBytes(value);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/CharRange.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | public class CharRange extends Range
8 | {
9 | public static final CharRange digits = new CharRange('0', '9');
10 | public static final CharRange lowerLetters = new CharRange('a', 'z');
11 | public static final CharRange upperLetters = new CharRange('A', 'Z');
12 |
13 | public CharRange()
14 | {
15 | this('a', 'z');
16 | }
17 |
18 | public CharRange(Character from, Character to)
19 | {
20 | super(from, to);
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/CustomerEnrichedInfoProvider.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | import com.datatorrent.demos.dimensions.telecom.model.CustomerEnrichedInfo.SingleRecord;
8 |
9 | public interface CustomerEnrichedInfoProvider
10 | {
11 | public SingleRecord getRandomCustomerEnrichedInfo();
12 | }
13 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/CustomerInfoRandomGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | import java.util.List;
8 |
9 | import com.google.common.collect.Lists;
10 |
11 | import com.datatorrent.demos.dimensions.telecom.model.CustomerInfo;
12 |
13 | public class CustomerInfoRandomGenerator implements Generator
14 | {
15 | private final MsisdnGenerator msidnGenerator = new MsisdnGenerator();
16 | private final ImsiGenerator imsiGenerator = new ImsiGenerator();
17 | private final ImeiGenerator imeiGenerator = new ImeiGenerator();
18 |
19 | private final int[] deviceNumArray = {1, 1, 1, 1, 1, 1, 2, 2, 3};
20 |
21 | @Override
22 | public CustomerInfo next()
23 | {
24 | //most customer only have one device.
25 | int deviceNumIndex = Generator.random.nextInt(deviceNumArray.length);
26 | int deviceNum = deviceNumArray[deviceNumIndex];
27 | List imeis = Lists.newArrayList();
28 | for (int i = 0; i < deviceNum; ++i) {
29 | imeis.add(imeiGenerator.next());
30 | }
31 | return new CustomerInfo(imsiGenerator.next(), msidnGenerator.next(), imeis);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/CustomerServiceRandomGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | import com.datatorrent.demos.dimensions.telecom.model.CustomerService;
8 | import com.datatorrent.demos.dimensions.telecom.model.CustomerService.IssueType;
9 |
10 | public class CustomerServiceRandomGenerator implements Generator
11 | {
12 | public static final int MAX_DURATION = 100;
13 | private ImsiGenerator imsiGenerator = new ImsiGenerator();
14 | private MsisdnGenerator msisdnGenerator = new MsisdnGenerator();
15 | private ImeiGenerator imeiGenerator = new ImeiGenerator();
16 |
17 | @Override
18 | public CustomerService next()
19 | {
20 | String imsi = imsiGenerator.next();
21 | String isdn = msisdnGenerator.next();
22 | String imei = imeiGenerator.next();
23 |
24 | int totalDuration = Generator.random.nextInt(MAX_DURATION);
25 | int wait = (int)(totalDuration * Math.random());
26 | String zipCode = LocationRepo.instance().getRandomZipCode();
27 | IssueType issueType = IssueType.values()[Generator.random.nextInt(IssueType.values().length)];
28 | boolean satisfied = (Generator.random.nextInt(1) == 0);
29 | return new CustomerService(imsi, isdn, imei, totalDuration, wait, zipCode, issueType, satisfied);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/EnumStringRandomGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | import java.util.Random;
8 |
9 | public class EnumStringRandomGenerator implements Generator
10 | {
11 | protected static final Random random = new Random();
12 | protected String[] candidates;
13 |
14 | public EnumStringRandomGenerator()
15 | {
16 | }
17 |
18 | public EnumStringRandomGenerator(String[] candidates)
19 | {
20 | if (candidates == null || candidates.length == 0) {
21 | throw new IllegalArgumentException("candidates can't null or empty.");
22 | }
23 | this.candidates = candidates;
24 | }
25 |
26 | public String next()
27 | {
28 | if (candidates.length == 1) {
29 | return candidates[0];
30 | }
31 | return candidates[random.nextInt(candidates.length)];
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/FixLengthStringRandomGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | public class FixLengthStringRandomGenerator extends AbstractStringRandomGenerator
8 | {
9 | protected int length;
10 |
11 | public FixLengthStringRandomGenerator()
12 | {
13 | }
14 |
15 | public FixLengthStringRandomGenerator(CharRandomGenerator charGenerator, int length)
16 | {
17 | if (length <= 0) {
18 | throw new IllegalArgumentException("The length should large than zero.");
19 | }
20 | this.length = length;
21 | this.charGenerator = charGenerator;
22 | }
23 |
24 | @Override
25 | protected int getStringLength()
26 | {
27 | return length;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/Generator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | import java.util.Random;
8 |
9 | public interface Generator
10 | {
11 | public static final Random random = new Random();
12 |
13 | public T next();
14 | }
15 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/GeneratorUtil.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | import java.util.Calendar;
8 |
9 | public class GeneratorUtil
10 | {
11 | public static long TIME_2010 = getTime2010();
12 |
13 | private static long getTime2010()
14 | {
15 | Calendar calendar2010 = Calendar.getInstance();
16 | calendar2010.set(2010, 1, 1, 0, 0, 0);
17 | return calendar2010.getTimeInMillis();
18 | }
19 |
20 | public static long getRecordId()
21 | {
22 | return (Calendar.getInstance().getTimeInMillis() - TIME_2010) * 1000;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/ImeiGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | /**
8 | *
9 | * IMEI format: TAC(8 digits) + serial number(6 digits) + checksum(1 digit)
10 | */
11 | public class ImeiGenerator implements Generator
12 | {
13 | private CharRandomGenerator digitCharGenerator = new CharRandomGenerator(CharRange.digits);
14 | private FixLengthStringRandomGenerator serialGenerator = new FixLengthStringRandomGenerator(digitCharGenerator, 6);
15 | //TODO: implement checksum later
16 | private FixLengthStringRandomGenerator checksumGenerator = new FixLengthStringRandomGenerator(digitCharGenerator, 1);
17 |
18 | public ImeiGenerator()
19 | {
20 | }
21 |
22 | @Override
23 | public String next()
24 | {
25 | return TACRepo.instance().getRandomTacInfo().getTacAsString() + serialGenerator.next() + checksumGenerator.next();
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/ImsiGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | /**
8 | * IMSI = MCC + MNC + MSIN
9 | *
10 | * @author bright
11 | *
12 | */
13 | public class ImsiGenerator implements Generator
14 | {
15 | private CharRandomGenerator digitCharGenerator = new CharRandomGenerator(CharRange.digits);
16 | private FixLengthStringRandomGenerator msinGenerator = new FixLengthStringRandomGenerator(digitCharGenerator, 9);
17 |
18 | public ImsiGenerator()
19 | {
20 | }
21 |
22 | @Override
23 | public String next()
24 | {
25 | return MNCRepo.instance().getRandomMncInfo().getMccMnc() + msinGenerator.next();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/MsisdnGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | public class MsisdnGenerator extends StringComposeGenerator
8 | {
9 | @SuppressWarnings("unchecked")
10 | public MsisdnGenerator()
11 | {
12 | super(new EnumStringRandomGenerator(new String[] {"01"}),
13 | new EnumStringRandomGenerator(new String[] {"408", "650", "510", "415", "925", "707"}),
14 | new FixLengthStringRandomGenerator(CharRandomGenerator.digitCharGenerator, 7));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/Range.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | public class Range
8 | {
9 | public final T from;
10 | public final T to;
11 |
12 | public Range(T from, T to)
13 | {
14 | this.from = from;
15 | this.to = to;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/generate/StringComposeGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2016 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.generate;
6 |
7 | import java.util.List;
8 |
9 | import com.google.common.collect.Lists;
10 |
11 | public class StringComposeGenerator implements Generator
12 | {
13 | private List> generators;
14 |
15 | public StringComposeGenerator()
16 | {
17 | }
18 |
19 | @SafeVarargs
20 | public StringComposeGenerator(Generator... generators)
21 | {
22 | if (generators == null || generators.length == 0) {
23 | return;
24 | }
25 | this.generators = Lists.newArrayList(generators);
26 | }
27 |
28 | @Override
29 | public String next()
30 | {
31 | StringBuilder sb = new StringBuilder();
32 | for (Generator generator : generators) {
33 | sb.append(generator.next());
34 | }
35 | return sb.toString();
36 | }
37 |
38 | public List> getGenerators()
39 | {
40 | return generators;
41 | }
42 |
43 | public void setGenerators(List> generators)
44 | {
45 | this.generators = generators;
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/hive/HiveUtil.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.hive;
6 |
7 | public class HiveUtil
8 | {
9 | public static final String driverName = "org.apache.hive.jdbc.HiveDriver";
10 | public static final String urlPrefix = "jdbc:hive2://";
11 |
12 | public static String getUrl(String host, int port, String database)
13 | {
14 | return String.format("%s%s:%d/%s", urlPrefix, host, port, database);
15 | }
16 |
17 | public static void verifyDriver() throws ClassNotFoundException
18 | {
19 | Class.forName(driverName);
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/model/BytesSupport.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.model;
6 |
7 | public interface BytesSupport
8 | {
9 | /**
10 | * convert this object to bytes
11 | *
12 | * @return
13 | */
14 | public byte[] toBytes();
15 | }
16 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/model/CallType.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.model;
6 |
7 | public enum CallType
8 | {
9 | MOC, MTC, SMS_MO("SMS-MO"), SMS_MT("SMS-MT"), DATA;
10 |
11 | private String label;
12 | private static final String[] labels = {"MOC", "MTC", "SMS-MO", "SMS-MT", "DATA"};
13 |
14 | private CallType()
15 | {
16 | this.label = name();
17 | }
18 |
19 | private CallType(String label)
20 | {
21 | this.label = label;
22 | }
23 |
24 | public String label()
25 | {
26 | return this.label;
27 | }
28 |
29 | public static String[] labels()
30 | {
31 | return labels;
32 | }
33 |
34 | public static CallType labelOf(String label)
35 | {
36 | for (CallType ct : CallType.values()) {
37 | if (ct.label().equals(label)) {
38 | return ct;
39 | }
40 | }
41 | throw new IllegalArgumentException("Invalid CallType label: " + label);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/model/CustomerInfo.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.model;
6 |
7 | import java.util.Collection;
8 | import java.util.Collections;
9 |
10 | /**
11 | * The information of the customer. We don't care about information such as
12 | * customer name etc. only care about the MSISDN, IMSI and IMEI etc. We identify
13 | * customer by IMSI.
14 | *
15 | * @author bright
16 | *
17 | */
18 | public class CustomerInfo
19 | {
20 | public final String imsi;
21 | public final String msisdn;
22 | public final Collection imeis; //one imsi can map to multiple device
23 |
24 | //used only by reflection
25 | protected CustomerInfo()
26 | {
27 | imsi = "";
28 | msisdn = "";
29 | imeis = Collections.emptyList();
30 | }
31 |
32 | public CustomerInfo(String imsi, String msisdn, Collection imeis)
33 | {
34 | this.imsi = imsi;
35 | this.msisdn = msisdn;
36 | this.imeis = Collections.unmodifiableCollection(imeis);
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/model/DisconnectReason.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.model;
6 |
7 | import java.util.Random;
8 |
9 | public enum DisconnectReason
10 | {
11 | NoResponse(9, "No Response"), CallComplete(10, "Call Complete"), CallDropped(11, "Call Dropped");
12 |
13 | private int code;
14 | private String label;
15 |
16 | private DisconnectReason()
17 | {
18 | }
19 |
20 | private DisconnectReason(int code, String label)
21 | {
22 | this.code = code;
23 | this.label = label;
24 | }
25 |
26 | public final int getCode()
27 | {
28 | return code;
29 | }
30 |
31 | public String getLabel()
32 | {
33 | return label;
34 | }
35 |
36 | private static Random random = new Random();
37 |
38 | public static DisconnectReason randomDisconnectReason()
39 | {
40 | final int size = DisconnectReason.values().length;
41 | return DisconnectReason.values()[random.nextInt(size)];
42 | }
43 |
44 | public static DisconnectReason fromCode(int code)
45 | {
46 | for (DisconnectReason dr : DisconnectReason.values()) {
47 | if (dr.code == code) {
48 | return dr;
49 | }
50 | }
51 | throw new IllegalArgumentException("Invalid disconnect code: " + code);
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/model/MNCInfo.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.model;
6 |
7 | public class MNCInfo
8 | {
9 | public enum Carrier
10 | {
11 | ATT("AT&T"), VZN("Verizon"), TMO("T-Mobile"), SPR("Sprint");
12 |
13 | public final String operatorCode;
14 | public final String operatorName;
15 |
16 | private Carrier(String operatorName)
17 | {
18 | this.operatorCode = name();
19 | this.operatorName = operatorName;
20 | }
21 |
22 | private Carrier(String operatorCode, String operatorName)
23 | {
24 | this.operatorCode = operatorCode;
25 | this.operatorName = operatorName;
26 | }
27 | }
28 |
29 | public final int mcc;
30 | public final int mnc;
31 | public final Carrier carrier;
32 |
33 | public MNCInfo(int mcc, int mnc, Carrier carrier)
34 | {
35 | this.mcc = mcc;
36 | this.mnc = mnc;
37 | this.carrier = carrier;
38 | }
39 |
40 | public String getMccMnc()
41 | {
42 | return String.format("%06d", mcc * 1000 + mnc);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/model/TACInfo.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.model;
6 |
7 | public class TACInfo
8 | {
9 | //tac is 8 digits, can be treat as int
10 | public final int tac;
11 | public final String manufacturer;
12 | public final String model;
13 |
14 | public TACInfo(int tac, String manufacturer, String model)
15 | {
16 | this.tac = tac;
17 | this.manufacturer = manufacturer;
18 | this.model = model;
19 | }
20 |
21 | public String getTacAsString()
22 | {
23 | return String.format("%08d", tac);
24 | }
25 |
26 | @Override
27 | public boolean equals(Object obj)
28 | {
29 | if (obj == null) {
30 | return false;
31 | }
32 | if (getClass() != obj.getClass()) {
33 | return false;
34 | }
35 | final TACInfo other = (TACInfo)obj;
36 |
37 | return this.tac == other.tac;
38 | }
39 |
40 | @Override
41 | public int hashCode()
42 | {
43 | return tac;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/model/ZipCodeHelper.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.model;
6 |
7 | public class ZipCodeHelper
8 | {
9 | public static ZipCodeHelper usZipCodeHelper = new ZipCodeHelper(5);
10 |
11 | protected static final String ZEROS = "0000000000";
12 |
13 | protected ZipCodeHelper(int zipCodeLength)
14 | {
15 | this.zipCodeLength = zipCodeLength;
16 | }
17 |
18 | private int zipCodeLength;
19 |
20 | public int toInt(String zip)
21 | {
22 | return Integer.parseInt(zip);
23 | }
24 |
25 | public String toString(int zipCode)
26 | {
27 | String zip = String.valueOf(zipCode);
28 | if (zip.length() == zipCodeLength) {
29 | return zip;
30 | }
31 | if (zip.length() < zipCodeLength) {
32 | return ZEROS.substring(0, zipCodeLength - zip.length()) + zip;
33 | }
34 | throw new IllegalArgumentException(
35 | "The length of zip (" + zipCode + ") is large than expected length (" + zipCodeLength + ")");
36 | }
37 |
38 | public boolean isZip(String str)
39 | {
40 | if (str == null || str.length() != zipCodeLength) {
41 | return false;
42 | }
43 | try {
44 | Integer.parseInt(str);
45 | } catch (Exception e) {
46 | return false;
47 | }
48 | return true;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/dt-demo/dimensions/src/main/java/com/datatorrent/demos/dimensions/telecom/operator/AppDataSimpleConfigurableSnapshotServer.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015 DataTorrent, Inc.
3 | * All rights reserved.
4 | */
5 | package com.datatorrent.demos.dimensions.telecom.operator;
6 |
7 | import java.util.Map;
8 |
9 | import org.slf4j.Logger;
10 | import org.slf4j.LoggerFactory;
11 |
12 | import com.datatorrent.lib.appdata.gpo.GPOMutable;
13 |
14 | /**
15 | * The tuple is a List of MutablePair
16 | *
17 | * @author bright
18 | *
19 | */
20 | public class AppDataSimpleConfigurableSnapshotServer extends AppDataConfigurableSnapshotServer