├── .gitignore
├── .travis.yml
├── LICENSE
├── NOTICE
├── README.md
├── app-conf
├── AggregatorConf.xml
├── AutoTuningConf.xml
├── FetcherConf.xml
├── GeneralConf.xml
├── HeuristicConf.xml
├── JobTypeConf.xml
├── SchedulerConf.xml
└── elephant.conf
├── app
├── Global.java
├── com
│ └── linkedin
│ │ └── drelephant
│ │ ├── AutoTuner.java
│ │ ├── DrElephant.java
│ │ ├── ElephantContext.java
│ │ ├── ElephantRunner.java
│ │ ├── analysis
│ │ ├── AnalyticJob.java
│ │ ├── AnalyticJobGenerator.java
│ │ ├── AnalyticJobGeneratorHadoop2.java
│ │ ├── ApplicationType.java
│ │ ├── ElephantBackfillFetcher.java
│ │ ├── ElephantFetcher.java
│ │ ├── HDFSContext.java
│ │ ├── HadoopAggregatedData.java
│ │ ├── HadoopApplicationData.java
│ │ ├── HadoopMetricsAggregator.java
│ │ ├── HadoopSystemContext.java
│ │ ├── Heuristic.java
│ │ ├── HeuristicResult.java
│ │ ├── HeuristicResultDetails.java
│ │ ├── JobType.java
│ │ ├── Metrics.java
│ │ ├── Severity.java
│ │ └── SeverityThresholds.scala
│ │ ├── clients
│ │ ├── WorkflowClient.java
│ │ └── azkaban
│ │ │ ├── AzkabanJobStatusUtil.java
│ │ │ └── AzkabanWorkflowClient.java
│ │ ├── configurations
│ │ ├── aggregator
│ │ │ ├── AggregatorConfiguration.java
│ │ │ └── AggregatorConfigurationData.java
│ │ ├── fetcher
│ │ │ ├── FetcherConfiguration.java
│ │ │ └── FetcherConfigurationData.java
│ │ ├── heuristic
│ │ │ ├── HeuristicConfiguration.java
│ │ │ └── HeuristicConfigurationData.java
│ │ ├── jobtype
│ │ │ └── JobTypeConfiguration.java
│ │ └── scheduler
│ │ │ ├── SchedulerConfiguration.java
│ │ │ └── SchedulerConfigurationData.java
│ │ ├── exceptions
│ │ ├── EventException.java
│ │ ├── ExceptionFinder.java
│ │ ├── HadoopException.java
│ │ ├── JobState.java
│ │ ├── LoggingEvent.java
│ │ ├── MRClient.java
│ │ ├── MRJobLogAnalyzer.java
│ │ ├── MRTaskLogAnalyzer.java
│ │ ├── StackTraceFrame.java
│ │ └── azkaban
│ │ │ └── AzkabanJobLogAnalyzer.java
│ │ ├── mapreduce
│ │ ├── MapReduceMetricsAggregator.java
│ │ ├── TaskLevelAggregatedMetrics.java
│ │ ├── data
│ │ │ ├── MapReduceApplicationData.java
│ │ │ ├── MapReduceCounterData.java
│ │ │ └── MapReduceTaskData.java
│ │ ├── fetchers
│ │ │ ├── MapReduceFSFetcherHadoop2.java
│ │ │ ├── MapReduceFetcher.java
│ │ │ └── MapReduceFetcherHadoop2.java
│ │ └── heuristics
│ │ │ ├── CommonConstantsHeuristic.java
│ │ │ ├── DistributedCacheLimitHeuristic.java
│ │ │ ├── ExceptionHeuristic.java
│ │ │ ├── GenericGCHeuristic.java
│ │ │ ├── GenericMemoryHeuristic.java
│ │ │ ├── GenericSkewHeuristic.java
│ │ │ ├── JobQueueLimitHeuristic.java
│ │ │ ├── MapperGCHeuristic.java
│ │ │ ├── MapperMemoryHeuristic.java
│ │ │ ├── MapperSkewHeuristic.java
│ │ │ ├── MapperSpeedHeuristic.java
│ │ │ ├── MapperSpillHeuristic.java
│ │ │ ├── MapperTimeHeuristic.java
│ │ │ ├── ReducerGCHeuristic.java
│ │ │ ├── ReducerMemoryHeuristic.java
│ │ │ ├── ReducerSkewHeuristic.java
│ │ │ ├── ReducerTimeHeuristic.java
│ │ │ └── ShuffleSortHeuristic.java
│ │ ├── math
│ │ └── Statistics.java
│ │ ├── metrics
│ │ └── CustomGarbageCollectorMetricSet.java
│ │ ├── priorityexecutor
│ │ ├── Priority.java
│ │ ├── PriorityBasedThreadPoolExecutor.java
│ │ └── RunnableWithPriority.java
│ │ ├── schedulers
│ │ ├── AirflowScheduler.java
│ │ ├── AzkabanScheduler.java
│ │ ├── NoScheduler.java
│ │ ├── OozieScheduler.java
│ │ ├── PinballScheduler.java
│ │ └── Scheduler.java
│ │ ├── security
│ │ └── HadoopSecurity.java
│ │ ├── spark
│ │ ├── SparkMetricsAggregator.scala
│ │ ├── data
│ │ │ ├── SparkApplicationData.scala
│ │ │ ├── SparkLogDerivedData.scala
│ │ │ └── SparkRestDerivedData.scala
│ │ ├── fetchers
│ │ │ ├── FSFetcher.scala
│ │ │ ├── SparkFetcher.scala
│ │ │ ├── SparkLogClient.scala
│ │ │ ├── SparkRestClient.scala
│ │ │ └── statusapiv1
│ │ │ │ ├── StageStatus.java
│ │ │ │ └── statusapiv1.scala
│ │ ├── heuristics
│ │ │ ├── ConfigurationHeuristic.scala
│ │ │ ├── ExecutorGcHeuristic.scala
│ │ │ ├── ExecutorsHeuristic.scala
│ │ │ ├── JobsHeuristic.scala
│ │ │ └── StagesHeuristic.scala
│ │ └── legacydata
│ │ │ ├── LegacyDataConverters.scala
│ │ │ ├── SparkApplicationData.java
│ │ │ ├── SparkEnvironmentData.java
│ │ │ ├── SparkExecutorData.java
│ │ │ ├── SparkGeneralData.java
│ │ │ ├── SparkJobProgressData.java
│ │ │ └── SparkStorageData.java
│ │ ├── tez
│ │ ├── TezMetricsAggregator.java
│ │ ├── TezTaskLevelAggregatedMetrics.java
│ │ ├── data
│ │ │ ├── TezApplicationData.java
│ │ │ ├── TezCounterData.java
│ │ │ └── TezTaskData.java
│ │ ├── fetchers
│ │ │ └── TezFetcher.java
│ │ └── heuristics
│ │ │ ├── GenericDataSkewHeuristic.java
│ │ │ ├── GenericGCHeuristic.java
│ │ │ ├── GenericMemoryHeuristic.java
│ │ │ ├── MapperDataSkewHeuristic.java
│ │ │ ├── MapperGCHeuristic.java
│ │ │ ├── MapperMemoryHeuristic.java
│ │ │ ├── MapperSpeedHeuristic.java
│ │ │ ├── MapperSpillHeuristic.java
│ │ │ ├── MapperTimeHeuristic.java
│ │ │ ├── ReducerDataSkewHeuristic.java
│ │ │ ├── ReducerGCHeuristic.java
│ │ │ ├── ReducerMemoryHeuristic.java
│ │ │ ├── ReducerTimeHeuristic.java
│ │ │ ├── TezScopeDataSkewHeuristic.java
│ │ │ ├── TezScopeGCHeuristic.java
│ │ │ ├── TezScopeMemoryHeuristic.java
│ │ │ ├── TezScopeSpeedHeuristic.java
│ │ │ └── TezScopeTimeHeuristic.java
│ │ ├── tony
│ │ ├── TonyMetricsAggregator.java
│ │ ├── data
│ │ │ ├── TonyApplicationData.java
│ │ │ └── TonyTaskData.java
│ │ ├── fetchers
│ │ │ └── TonyFetcher.java
│ │ ├── heuristics
│ │ │ ├── TaskGPUHeuristic.java
│ │ │ └── TaskMemoryHeuristic.java
│ │ └── util
│ │ │ └── TonyUtils.java
│ │ ├── tuning
│ │ ├── AutoTuningAPIHelper.java
│ │ ├── AzkabanJobCompleteDetector.java
│ │ ├── BaselineComputeUtil.java
│ │ ├── FitnessComputeUtil.java
│ │ ├── JobCompleteDetector.java
│ │ ├── JobTuningInfo.java
│ │ ├── PSOParamGenerator.java
│ │ ├── ParamGenerator.java
│ │ ├── Particle.java
│ │ └── TuningInput.java
│ │ └── util
│ │ ├── HadoopUtils.scala
│ │ ├── InfoExtractor.java
│ │ ├── MemoryFormatUtils.java
│ │ ├── SparkUtils.scala
│ │ ├── ThreadContextMR2.java
│ │ ├── Utils.java
│ │ └── YarnURLUtils.java
├── controllers
│ ├── Application.java
│ ├── AutoTuningMetricsController.java
│ ├── ControllerUtil.java
│ ├── IdUrlPair.java
│ ├── MetricsController.java
│ ├── PaginationStats.java
│ └── api
│ │ └── v1
│ │ ├── .Web.java.swp
│ │ ├── JsonKeys.java
│ │ └── Web.java
├── models
│ ├── AppHeuristicResult.java
│ ├── AppHeuristicResultDetails.java
│ ├── AppResult.java
│ ├── BackfillInfo.java
│ ├── FlowDefinition.java
│ ├── FlowExecution.java
│ ├── JobDefinition.java
│ ├── JobExecution.java
│ ├── JobSavedState.java
│ ├── JobSuggestedParamSet.java
│ ├── JobSuggestedParamValue.java
│ ├── TuningAlgorithm.java
│ ├── TuningJobDefinition.java
│ ├── TuningJobExecutionParamSet.java
│ └── TuningParameter.java
├── org
│ └── apache
│ │ └── spark
│ │ ├── deploy
│ │ └── history
│ │ │ ├── SparkDataCollection.scala
│ │ │ └── SparkFSFetcher.scala
│ │ └── storage
│ │ └── StorageStatusTrackingListener.scala
└── views
│ ├── help
│ ├── helpNoData.scala.html
│ ├── mapreduce
│ │ ├── helpDistributedCacheLimit.scala.html
│ │ ├── helpException.scala.html
│ │ ├── helpGC.scala.html
│ │ ├── helpJobQueueLimit.scala.html
│ │ ├── helpMapperMemory.scala.html
│ │ ├── helpMapperSkew.scala.html
│ │ ├── helpMapperSpeed.scala.html
│ │ ├── helpMapperSpill.scala.html
│ │ ├── helpMapperTime.scala.html
│ │ ├── helpMemory.scala.html
│ │ ├── helpReducerMemory.scala.html
│ │ ├── helpReducerSkew.scala.html
│ │ ├── helpReducerTime.scala.html
│ │ └── helpShuffleSort.scala.html
│ ├── metrics
│ │ ├── helpRuntime.scala.html
│ │ ├── helpUsedResources.scala.html
│ │ ├── helpWaittime.scala.html
│ │ └── helpWastedResources.scala.html
│ ├── spark
│ │ ├── helpBestProperties.scala.html
│ │ ├── helpConfigurationHeuristic.scala.html
│ │ ├── helpEventLogLimit.scala.html
│ │ ├── helpExecutorGcHeuristic.scala.html
│ │ ├── helpExecutorLoad.scala.html
│ │ ├── helpExecutorsHeuristic.scala.html
│ │ ├── helpJobRuntime.scala.html
│ │ ├── helpJobsHeuristic.scala.html
│ │ ├── helpMemoryLimit.scala.html
│ │ ├── helpStageRuntime.scala.html
│ │ └── helpStagesHeuristic.scala.html
│ ├── tez
│ │ ├── helpGC.scala.html
│ │ ├── helpMapperDataSkew.scala.html
│ │ ├── helpMapperSpeed.scala.html
│ │ ├── helpMapperSpill.scala.html
│ │ ├── helpMapperTime.scala.html
│ │ ├── helpMemory.scala.html
│ │ ├── helpReducerDataSkew.scala.html
│ │ ├── helpReducerTime.scala.html
│ │ ├── helpScopeTaskDataSkew.scala.html
│ │ ├── helpScopeTaskTime.scala.html
│ │ └── helpShuffleSort.scala.html
│ └── tony
│ │ ├── helpTaskGPU.scala.html
│ │ └── helpTaskMemory.scala.html
│ ├── index.scala.html
│ ├── main.scala.html
│ ├── newmain.scala.html
│ ├── page
│ ├── comparePage.scala.html
│ ├── flowHistoryPage.scala.html
│ ├── helpPage.scala.html
│ ├── homePage.scala.html
│ ├── jobHistoryPage.scala.html
│ ├── oldFlowHistoryPage.scala.html
│ ├── oldHelpPage.scala.html
│ ├── oldJobHistoryPage.scala.html
│ └── searchPage.scala.html
│ ├── results
│ ├── compareResults.scala.html
│ ├── flowDefinitionIdDetails.scala.html
│ ├── flowDetails.scala.html
│ ├── flowHistoryResults.scala.html
│ ├── flowMetricsHistoryResults.scala.html
│ ├── jobDetails.scala.html
│ ├── jobHistoryResults.scala.html
│ ├── jobMetricsHistoryResults.scala.html
│ ├── oldFlowHistoryResults.scala.html
│ ├── oldFlowMetricsHistoryResults.scala.html
│ ├── oldJobHistoryResults.scala.html
│ ├── oldJobMetricsHistoryResults.scala.html
│ └── searchResults.scala.html
│ └── tags
│ ├── aggregatedMetrics.scala.html
│ ├── column.scala.html
│ ├── jobHeader.scala.html
│ ├── jobSummary.scala.html
│ ├── pagination.scala.html
│ ├── panel.scala.html
│ └── searchPanel.scala.html
├── baseline.conf
├── build.sbt
├── checkstyle.sbt
├── common.sh
├── compile.conf
├── compile.sh
├── conf
├── application.conf
├── evolutions
│ └── default
│ │ ├── 1.sql
│ │ ├── 2.sql
│ │ ├── 3.sql
│ │ ├── 4.sql
│ │ ├── 5.sql
│ │ └── 6.sql
├── log4j.properties
└── routes
├── cpd.sbt
├── findbugs.sbt
├── images
└── wiki
│ ├── compare-page.png
│ ├── critical.png
│ ├── dashboard.png
│ ├── dr-elephant-logo-150x150.png
│ ├── dr-elephant-logo-300x300.png
│ ├── flow-history.png
│ ├── flowhistorymetrics.png
│ ├── job-history.png
│ ├── jobdetails.png
│ ├── jobhistorymetrics.png
│ ├── low.png
│ ├── moderate.png
│ ├── none.png
│ ├── search.png
│ ├── severe.png
│ └── suggestions.png
├── jacoco.sbt
├── project
├── Dependencies.scala
├── build.properties
├── checkstyle-config.xml
├── checkstyle-java.header
├── checkstyle-noframes-severity-sorted-modified.xsl
├── checkstyle-suppressions.xml
├── findbugs-exclude-filters.xml
├── plugins.sbt
├── scalastyle-config.xml
└── scalastyle_xml_to_html.py
├── public
├── assets
│ ├── analytics
│ │ └── track.js
│ ├── bootstrap-datepicker
│ │ ├── css
│ │ │ └── datepicker.css
│ │ └── js
│ │ │ └── bootstrap-datepicker.js
│ ├── bootstrap
│ │ ├── css
│ │ │ ├── bootstrap-theme.css
│ │ │ ├── bootstrap-theme.css.map
│ │ │ ├── bootstrap-theme.min.css
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ └── bootstrap.min.css
│ │ ├── fonts
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ └── glyphicons-halflings-regular.woff
│ │ └── js
│ │ │ ├── bootstrap.js
│ │ │ └── bootstrap.min.js
│ ├── d3
│ │ ├── d3.js
│ │ └── d3.min.js
│ └── jquery
│ │ ├── jquery-1.9.0.min.js
│ │ └── jquery.deserialize.min.js
├── css
│ ├── application.css
│ └── main.css
├── images
│ ├── favicon.png
│ ├── loading.gif
│ ├── logo.png
│ ├── runtime.png
│ ├── usedmemory.png
│ ├── waittime.png
│ └── wastedmemory.png
└── js
│ ├── flowhistoryform.js
│ ├── flowresourcehistoryform.js
│ ├── flowtimehistoryform.js
│ ├── graphresourcesmetricsutility.js
│ ├── graphtimemetricsutility.js
│ ├── graphutility.js
│ ├── jobhistoryform.js
│ ├── jobresourcesmetricshistoryform.js
│ ├── jobtimehistoryform.js
│ ├── resourcegraphtooltiputility.js
│ ├── searchform.js
│ ├── searchpanel.js
│ └── timegraphtooltiputility.js
├── resolver.conf.template
├── scalastyle.sbt
├── scripts
├── pso
│ ├── pso_param_generation.py
│ └── restartable_pso.py
├── start.sh
└── stop.sh
├── test
├── com
│ └── linkedin
│ │ └── drelephant
│ │ ├── BackfillTest.java
│ │ ├── analysis
│ │ ├── AnalyticJobGeneratorHadoop2Test.java
│ │ ├── AnalyticJobTest.java
│ │ ├── SeverityTest.java
│ │ └── SeverityThresholdsTest.scala
│ │ ├── configurations
│ │ ├── fetcher
│ │ │ └── FetcherConfigurationTest.java
│ │ ├── heuristic
│ │ │ └── HeuristicConfigurationTest.java
│ │ ├── jobtype
│ │ │ └── JobTypeConfigurationTest.java
│ │ └── scheduler
│ │ │ └── SchedulerConfigurationTest.java
│ │ ├── exceptions
│ │ ├── EventExceptionTest.java
│ │ ├── MRJobLogAnalyzerTest.java
│ │ └── azkaban
│ │ │ └── AzkabanJobLogAnalyzerTest.java
│ │ ├── mapreduce
│ │ ├── TestTaskLevelAggregatedMetrics.java
│ │ ├── fetchers
│ │ │ ├── MapReduceFSFetcherHadoop2Test.java
│ │ │ └── MapReduceFetcherHadoop2Test.java
│ │ └── heuristics
│ │ │ ├── DistributedCacheLimitHeuristicTest.java
│ │ │ ├── JobQueueLimitHeuristicTest.java
│ │ │ ├── MapperGCHeuristicTest.java
│ │ │ ├── MapperMemoryHeuristicTest.java
│ │ │ ├── MapperSkewHeuristicTest.java
│ │ │ ├── MapperSpeedHeuristicTest.java
│ │ │ ├── MapperSpillHeuristicTest.java
│ │ │ ├── MapperTimeHeuristicTest.java
│ │ │ ├── ReducerGCHeuristicTest.java
│ │ │ ├── ReducerMemoryHeuristicTest.java
│ │ │ ├── ReducerSkewHeuristicTest.java
│ │ │ ├── ReducerTimeHeuristicTest.java
│ │ │ └── ShuffleSortHeuristicTest.java
│ │ ├── math
│ │ └── StatisticsTest.java
│ │ ├── priorityexecutor
│ │ └── PriorityBasedThreadPoolExecutorTest.java
│ │ ├── schedulers
│ │ ├── AirflowSchedulerTest.java
│ │ ├── AzkabanSchedulerTest.java
│ │ ├── OozieSchedulerTest.java
│ │ └── PinballSchedulerTest.java
│ │ ├── spark
│ │ ├── SparkMetricsAggregatorTest.scala
│ │ ├── data
│ │ │ └── SparkApplicationDataTest.scala
│ │ ├── fetchers
│ │ │ ├── SparkFetcherTest.scala
│ │ │ ├── SparkLogClientTest.scala
│ │ │ └── SparkRestClientTest.scala
│ │ ├── heuristics
│ │ │ ├── ConfigurationHeuristicTest.scala
│ │ │ ├── ExecutorGcHeuristicTest.scala
│ │ │ ├── ExecutorsHeuristicTest.scala
│ │ │ ├── JobsHeuristicTest.scala
│ │ │ └── StagesHeuristicTest.scala
│ │ └── legacydata
│ │ │ ├── LegacyDataConvertersTest.scala
│ │ │ └── MockSparkApplicationData.java
│ │ ├── tez
│ │ ├── TezTaskLevelAggregatedMetricsTest.java
│ │ ├── fetchers
│ │ │ └── TezFetcherTest.java
│ │ └── heuristics
│ │ │ ├── MapperDataSkewHeuristicTest.java
│ │ │ ├── MapperGCHeuristicTest.java
│ │ │ ├── MapperMemoryHeuristicTest.java
│ │ │ ├── MapperSpeedHeuristicTest.java
│ │ │ ├── MapperSpillHeuristicTest.java
│ │ │ ├── MapperTimeHeuristicTest.java
│ │ │ ├── ReducerDataSkewHeuristicTest.java
│ │ │ ├── ReducerGCHeuristicTest.java
│ │ │ ├── ReducerMemoryHeuristicTest.java
│ │ │ └── ReducerTimeHeuristicTest.java
│ │ ├── tony
│ │ ├── TonyMetricsAggregatorTest.java
│ │ ├── fetchers
│ │ │ └── TonyFetcherTest.java
│ │ ├── heuristics
│ │ │ └── TaskMemoryHeuristicTest.java
│ │ └── util
│ │ │ └── TonyUtilsTest.java
│ │ ├── tuning
│ │ └── PSOParamGeneratorTest.java
│ │ └── util
│ │ ├── HadoopUtilsTest.scala
│ │ ├── InfoExtractorTest.java
│ │ ├── MemoryFormatUtilsTest.java
│ │ ├── SparkUtilsTest.scala
│ │ └── UtilsTest.java
├── common
│ ├── DBTestUtil.java
│ ├── TestConstants.java
│ └── TestUtil.java
├── controllers
│ ├── ApplicationTest.java
│ └── MetricsControllerTest.java
├── org
│ └── apache
│ │ └── spark
│ │ └── deploy
│ │ └── history
│ │ ├── SparkDataCollectionTest.java
│ │ └── SparkFsFetcherTest.scala
├── resources
│ ├── AggregatorConf.xml
│ ├── AutoTuningConf.xml
│ ├── FetcherConf.xml
│ ├── GeneralConf.xml
│ ├── HeuristicConf.xml
│ ├── JobTypeConf.xml
│ ├── SchedulerConf.xml
│ ├── configurations
│ │ ├── fetcher
│ │ │ ├── FetcherConfTest1.xml
│ │ │ ├── FetcherConfTest10.xml
│ │ │ ├── FetcherConfTest11.xml
│ │ │ ├── FetcherConfTest2.xml
│ │ │ ├── FetcherConfTest3.xml
│ │ │ ├── FetcherConfTest4.xml
│ │ │ ├── FetcherConfTest5.xml
│ │ │ ├── FetcherConfTest6.xml
│ │ │ ├── FetcherConfTest7.xml
│ │ │ ├── FetcherConfTest8.xml
│ │ │ └── FetcherConfTest9.xml
│ │ ├── heuristic
│ │ │ ├── HeuristicConfTest1.xml
│ │ │ ├── HeuristicConfTest2.xml
│ │ │ ├── HeuristicConfTest3.xml
│ │ │ ├── HeuristicConfTest4.xml
│ │ │ └── HeuristicConfTest5.xml
│ │ ├── jobtype
│ │ │ ├── JobTypeConfTest1.xml
│ │ │ ├── JobTypeConfTest2.xml
│ │ │ ├── JobTypeConfTest3.xml
│ │ │ ├── JobTypeConfTest4.xml
│ │ │ ├── JobTypeConfTest5.xml
│ │ │ └── JobTypeConfTest6.xml
│ │ └── scheduler
│ │ │ ├── SchedulerConfTest1.xml
│ │ │ ├── SchedulerConfTest2.xml
│ │ │ └── SchedulerConfTest3.xml
│ ├── core-site.xml
│ ├── elephant.conf
│ ├── history
│ │ ├── done
│ │ │ └── 2018
│ │ │ │ └── 05
│ │ │ │ └── 17
│ │ │ │ └── 000000
│ │ │ │ ├── job_1526555215992_0001-1526555642677-user-QuasiMonteCarlo-1526555658299-1-1-SUCCEEDED-default-1526555648931.jhist
│ │ │ │ ├── job_1526555215992_0001_conf.xml
│ │ │ │ ├── job_1526555215992_0002-1526555694494-user-QuasiMonteCarlo-1526555709175-1-1-SUCCEEDED-default-1526555699708.jhist
│ │ │ │ └── job_1526555215992_0002_conf.xml
│ │ └── done_intermediate
│ │ │ └── user
│ │ │ ├── job_1526555215992_0004-1526567229183-user-QuasiMonteCarlo-1526567243482-1-1-SUCCEEDED-default-1526567234171.jhist
│ │ │ └── job_1526555215992_0004_conf.xml
│ ├── log4j.properties
│ ├── mapred-site.xml
│ ├── mrdata
│ │ ├── mapperTaskCounter1.properties
│ │ ├── mapperTaskCounter2.properties
│ │ ├── mapperTaskCounter3.properties
│ │ ├── reducerTaskCounter1.properties
│ │ ├── sampleJobConf.properties
│ │ └── sampleJobCounter.properties
│ ├── spark-defaults.conf
│ ├── spark_event_logs
│ │ ├── event_log_1
│ │ └── event_log_2
│ ├── test-init.sql
│ └── tunein-test1.sql
└── rest
│ └── RestAPITest.java
├── travis.sh
└── web
├── app
├── adapters
│ └── application.js
├── app.js
├── components
│ ├── heuristic-details-list.js
│ ├── loading-panel.js
│ ├── map-reduce-exception.js
│ ├── paging-panel.js
│ ├── search-panel.js
│ ├── single-heuristic-detail.js
│ ├── single-tab.js
│ ├── user-tabs.js
│ └── user-tags.js
├── controllers
│ ├── app.js
│ ├── dashboard.js
│ ├── dashboard
│ │ ├── app.js
│ │ ├── job.js
│ │ └── workflow.js
│ ├── job.js
│ ├── not-found.js
│ ├── search.js
│ ├── user-details.js
│ ├── workflow-exceptions.js
│ └── workflow.js
├── helpers
│ ├── eq.js
│ ├── get-bootstrap-severity-code.js
│ ├── get-color-for-severity.js
│ ├── get-date.js
│ ├── get-duration-breakdown.js
│ ├── get-percentage.js
│ ├── get-resource-in-gb-hours-value.js
│ ├── get-resource-in-gbhours.js
│ ├── gt.js
│ ├── not-empty.js
│ └── url-encode.js
├── index.html
├── initializers
│ ├── component-router-injector.js
│ └── notification-injector.js
├── models
│ ├── application-summary.js
│ ├── application.js
│ ├── dashboard-summary.js
│ ├── exception-status.js
│ ├── job-summary.js
│ ├── job.js
│ ├── search-option.js
│ ├── search-result.js
│ ├── user-detail.js
│ ├── users.js
│ ├── workflow-exception.js
│ ├── workflow-summary.js
│ └── workflow.js
├── resolver.js
├── router.js
├── routes
│ ├── app.js
│ ├── dashboard.js
│ ├── dashboard
│ │ ├── app.js
│ │ ├── job.js
│ │ └── workflow.js
│ ├── index.js
│ ├── job.js
│ ├── not-found.js
│ ├── search.js
│ ├── user-details.js
│ ├── work-in-progress.js
│ ├── workflow-exceptions.js
│ └── workflow.js
├── serializers
│ ├── app.js
│ ├── application-summary.js
│ ├── application.js
│ ├── job-summary.js
│ ├── job.js
│ ├── workflow-summary.js
│ └── workflow.js
├── styles
│ ├── app.css
│ └── partials
│ │ ├── aggregated-metrics.css
│ │ ├── application-menu.css
│ │ ├── application.css
│ │ ├── breadcrumbs.css
│ │ ├── dashboard-header.css
│ │ ├── heuristic-detail.css
│ │ ├── heuristics-summary.css
│ │ ├── jobs-severity.css
│ │ ├── loading-panel.css
│ │ ├── navbar.css
│ │ ├── not-found.css
│ │ ├── search-panel.css
│ │ ├── search.css
│ │ ├── user-detail.css
│ │ ├── user-tabs.css
│ │ └── user-tags.css
├── templates
│ ├── app.hbs
│ ├── application.hbs
│ ├── components
│ │ ├── aggregated-metrics.hbs
│ │ ├── application-list.hbs
│ │ ├── flow-list.hbs
│ │ ├── heuristic-details-list.hbs
│ │ ├── heuristics-summary.hbs
│ │ ├── job-list.hbs
│ │ ├── jobs-severity.hbs
│ │ ├── loading-panel.hbs
│ │ ├── map-reduce-exception.hbs
│ │ ├── paging-panel.hbs
│ │ ├── search-panel.hbs
│ │ ├── single-application.hbs
│ │ ├── single-flow.hbs
│ │ ├── single-heuristic-detail.hbs
│ │ ├── single-job.hbs
│ │ ├── single-tab.hbs
│ │ ├── tasks-severity.hbs
│ │ ├── user-tabs.hbs
│ │ └── user-tags.hbs
│ ├── dashboard.hbs
│ ├── dashboard
│ │ ├── app.hbs
│ │ ├── job.hbs
│ │ └── workflow.hbs
│ ├── job.hbs
│ ├── loading.hbs
│ ├── not-found.hbs
│ ├── search.hbs
│ ├── user-details.hbs
│ ├── work-in-progress.hbs
│ ├── workflow-exceptions.hbs
│ └── workflow.hbs
└── utils
│ └── scheduler.js
├── bower.json
├── config
└── environment.js
├── ember-cli-build.js
├── package.json
├── public
└── assets
│ └── images
│ ├── loading.gif
│ ├── logo.png
│ ├── runtime.png
│ ├── usedmemory.png
│ ├── waittime.png
│ └── wastedmemory.png
├── testem.js
└── tests
├── helpers
├── destroy-app.js
├── module-for-acceptance.js
├── resolver.js
└── start-app.js
├── index.html
├── integration
└── components
│ ├── aggregated-metrics-test.js
│ ├── heuristic-details-list-test.js
│ ├── heuristics-summary-test.js
│ ├── jobs-severity-test.js
│ ├── single-application-test.js
│ ├── single-flow-test.js
│ ├── single-heuristic-detail-test.js
│ ├── single-job-test.js
│ ├── single-tab-test.js
│ ├── tasks-severity-test.js
│ └── user-tabs-test.js
├── test-helper.js
└── unit
├── helpers
├── eq-test.js
├── get-bootstrap-severity-code-test.js
├── get-color-for-severity-test.js
├── get-date-test.js
├── get-duration-breakdown-test.js
├── get-percentage-test.js
├── get-resource-in-gbhours-test.js
├── gt-test.js
├── not-empty-test.js
└── url-encode-test.js
└── utils
└── scheduler-test.js
/.gitignore:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2016 LinkedIn Corp.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | # use this file except in compliance with the License. You may obtain a copy of
6 | # 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, WITHOUT
12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | # License for the specific language governing permissions and limitations under
14 | # the License.
15 | #
16 |
17 | # general
18 | *~
19 | *.log
20 | dr_elephant.log.*
21 | tmp
22 | dump
23 | .history
24 | /*.iml
25 | /dr-elephant-*/
26 | /out
27 |
28 | # Eclipse
29 | .settings
30 | .cache
31 | .project
32 | .classpath
33 | .scala_dependencies
34 | bin
35 |
36 | # IDEA
37 | /.idea
38 | /.idea_modules
39 |
40 | # SBT
41 | dist
42 | project/project
43 | project/boot
44 | project/target
45 | project/plugins/target
46 | target
47 | .target
48 |
49 | # Play
50 | logs
51 | RUNNING_PID
52 |
53 | # macOS
54 | .DS_Store
55 |
56 | *.jar
57 |
58 | #web
59 | public/assets/ember/
60 | public/assets/fonts/
61 | web/bower_components/
62 | web/node_modules/
63 | web/package-lock.json
64 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: scala
2 | sudo: true
3 | jdk:
4 | - openjdk8
5 | python: "2.6"
6 | install:
7 | - sudo pip install inspyred
8 | - sudo pip install argparse
9 |
10 | script:
11 | - ./travis.sh
12 |
13 | # only build PRs plus branches master and customSHSWork (not all branch pushes)
14 | branches:
15 | only:
16 | - master
17 | - customSHSWork
18 |
19 | env:
20 | - PSO_DIR_PATH=$TRAVIS_BUILD_DIR/scripts/pso/
21 |
22 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/analysis/ApplicationType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.analysis;
18 |
19 | /**
20 | * Manages and represents supported application types.
21 | */
22 | public class ApplicationType {
23 | private final String _name;
24 |
25 | public ApplicationType(String name) {
26 | _name = name.toUpperCase();
27 | }
28 |
29 | @Override
30 | public int hashCode() {
31 | return _name.hashCode();
32 | }
33 |
34 | @Override
35 | public boolean equals(Object other) {
36 | if (other instanceof ApplicationType) {
37 | return ((ApplicationType) other).getName().equals(getName());
38 | }
39 | return false;
40 | }
41 |
42 | /**
43 | * Get the name
44 | *
45 | * @return the name of the application type
46 | */
47 | public String getName() {
48 | return _name;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/analysis/ElephantBackfillFetcher.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.analysis;
18 |
19 | import java.util.List;
20 |
21 | /**
22 | * Interface to be implemented by fetchers to support backfill.
23 | */
24 | public interface ElephantBackfillFetcher {
25 | /**
26 | * Fetches a list of jobs to be backfilled for analysis by Dr. Elephant. It is recommended that the backfill fetcher
27 | * sets the app type for each job by calling {@link AnalyticJob#setAppType(ApplicationType)}.
28 | *
29 | * @param startTime Start time from when jobs have to be backfilled.
30 | * @param endTime End time upto which jobs can be backfilled.
31 | * @return list of jobs to be backfilled for analysis.
32 | * @throws Exception
33 | */
34 | List fetchJobsForBackfill(long startTime, long endTime) throws Exception;
35 | }
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/analysis/ElephantFetcher.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.analysis;
18 |
19 | /**
20 | * The interface to define common methods for each fetcher.
21 | *
22 | * There would be a different fetcher implementation given a different Hadoop version and a different application type.
23 | */
24 | public interface ElephantFetcher {
25 |
26 | /**
27 | * Given an application id, fetches the data object
28 | *
29 | * @param job The job being analysed
30 | * @return the fetched data
31 | * @throws Exception
32 | */
33 | public T fetchData(AnalyticJob job)
34 | throws Exception;
35 | }
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/analysis/HadoopMetricsAggregator.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.analysis;
18 |
19 | public interface HadoopMetricsAggregator {
20 | public void aggregate(HadoopApplicationData data);
21 | public HadoopAggregatedData getResult();
22 | }
23 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/analysis/Heuristic.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.analysis;
18 |
19 | import com.linkedin.drelephant.configurations.heuristic.HeuristicConfigurationData;
20 |
21 |
22 | /**
23 | * This interface defines the Heuristic rule interface.
24 | *
25 | * @param An implementation that extends from HadoopApplicationData
26 | */
27 | public interface Heuristic {
28 | /**
29 | * Given an application data instance, returns the analyzed heuristic result.
30 | *
31 | * @param data The data to analyze
32 | * @return The heuristic result
33 | */
34 | public HeuristicResult apply(T data);
35 |
36 | /**
37 | * Get the heuristic Configuration
38 | *
39 | * @return the heuristic configuration data
40 | */
41 | public HeuristicConfigurationData getHeuristicConfData();
42 | }
43 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/analysis/HeuristicResultDetails.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.analysis;
18 |
19 | import java.util.ArrayList;
20 | import java.util.List;
21 |
22 |
23 | /**
24 | * Holds the analysis details for each Heuristic
25 | */
26 | public class HeuristicResultDetails {
27 |
28 | private String _name;
29 | private String _value;
30 | private String _details;
31 |
32 | public HeuristicResultDetails(String name, String value) {
33 | this(name, value, null);
34 | }
35 |
36 | public HeuristicResultDetails(String name, String value, String details) {
37 | this._name = name;
38 | this._value = value;
39 | this._details = details;
40 | }
41 |
42 | public String getDetails() {
43 | return _details;
44 | }
45 |
46 | public String getValue() {
47 | return _value;
48 | }
49 |
50 | public String getName() {
51 | return _name;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/configurations/scheduler/SchedulerConfigurationData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.configurations.scheduler;
18 |
19 | import java.util.Map;
20 |
21 |
22 | /**
23 | * Scheduler Configuration Holder
24 | */
25 | public class SchedulerConfigurationData {
26 | private final String _schedulerName;
27 | private final String _className;
28 | private final Map _paramMap;
29 |
30 | public SchedulerConfigurationData(String schedulerName, String className, Map paramMap) {
31 | _schedulerName = schedulerName;
32 | _className = className;
33 | _paramMap = paramMap;
34 | }
35 |
36 | public String getSchedulerName() {
37 | return _schedulerName;
38 | }
39 |
40 | public String getClassName() {
41 | return _className;
42 | }
43 |
44 | public Map getParamMap() {
45 | return _paramMap;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/exceptions/JobState.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.exceptions;
18 |
19 | /**
20 | * This enum represents the state of the job
21 | */
22 | public enum JobState {
23 | SCRIPTFAIL, SCHEDULERFAIL, MRFAIL, SUCCEEDED, KILLED
24 | }
25 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/mapreduce/heuristics/CommonConstantsHeuristic.java:
--------------------------------------------------------------------------------
1 | package com.linkedin.drelephant.mapreduce.heuristics;
2 |
3 | public class CommonConstantsHeuristic {
4 |
5 | public static final String MAPPER_SPEED="Mapper Speed";
6 | public static final String TOTAL_INPUT_SIZE_IN_MB="Total input size in MB";
7 | }
8 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/mapreduce/heuristics/MapperGCHeuristic.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.mapreduce.heuristics;
18 |
19 | import com.linkedin.drelephant.mapreduce.data.MapReduceApplicationData;
20 | import com.linkedin.drelephant.mapreduce.data.MapReduceTaskData;
21 | import com.linkedin.drelephant.configurations.heuristic.HeuristicConfigurationData;
22 |
23 |
24 | public class MapperGCHeuristic extends GenericGCHeuristic {
25 |
26 | public MapperGCHeuristic(HeuristicConfigurationData heuristicConfData) {
27 | super(heuristicConfData);
28 | }
29 |
30 | @Override
31 | protected MapReduceTaskData[] getTasks(MapReduceApplicationData data) {
32 | return data.getMapperData();
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/mapreduce/heuristics/MapperMemoryHeuristic.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.mapreduce.heuristics;
18 |
19 | import com.linkedin.drelephant.mapreduce.data.MapReduceApplicationData;
20 | import com.linkedin.drelephant.mapreduce.data.MapReduceTaskData;
21 | import com.linkedin.drelephant.configurations.heuristic.HeuristicConfigurationData;
22 |
23 |
24 | public class MapperMemoryHeuristic extends GenericMemoryHeuristic {
25 | public static final String MAPPER_MEMORY_CONF = "mapreduce.map.memory.mb";
26 |
27 | public MapperMemoryHeuristic(HeuristicConfigurationData _heuristicConfData) {
28 | super(MAPPER_MEMORY_CONF, _heuristicConfData);
29 | }
30 |
31 | @Override
32 | protected MapReduceTaskData[] getTasks(MapReduceApplicationData data) {
33 | return data.getMapperData();
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/mapreduce/heuristics/ReducerGCHeuristic.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.mapreduce.heuristics;
18 |
19 | import com.linkedin.drelephant.mapreduce.data.MapReduceApplicationData;
20 | import com.linkedin.drelephant.mapreduce.data.MapReduceTaskData;
21 | import com.linkedin.drelephant.configurations.heuristic.HeuristicConfigurationData;
22 |
23 |
24 | public class ReducerGCHeuristic extends GenericGCHeuristic {
25 |
26 | public ReducerGCHeuristic(HeuristicConfigurationData _heuristicConfData) {
27 | super(_heuristicConfData);
28 | }
29 |
30 | @Override
31 | protected MapReduceTaskData[] getTasks(MapReduceApplicationData data) {
32 | return data.getReducerData();
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/mapreduce/heuristics/ReducerMemoryHeuristic.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.mapreduce.heuristics;
18 |
19 | import com.linkedin.drelephant.mapreduce.data.MapReduceApplicationData;
20 | import com.linkedin.drelephant.mapreduce.data.MapReduceTaskData;
21 | import com.linkedin.drelephant.configurations.heuristic.HeuristicConfigurationData;
22 |
23 |
24 | public class ReducerMemoryHeuristic extends GenericMemoryHeuristic {
25 | public static final String REDUCER_MEMORY_CONF = "mapreduce.reduce.memory.mb";
26 |
27 | public ReducerMemoryHeuristic(HeuristicConfigurationData _heuristicConfData) {
28 | super(REDUCER_MEMORY_CONF, _heuristicConfData);
29 | }
30 |
31 | @Override
32 | protected MapReduceTaskData[] getTasks(MapReduceApplicationData data) {
33 | return data.getReducerData();
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/priorityexecutor/Priority.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.priorityexecutor;
18 |
19 | public enum Priority {
20 | MIN_PRIORITY(Integer.MIN_VALUE),
21 | LOW(-100),
22 | NORMAL(0),
23 | HIGH(100),
24 | MAX_PRIORITY(Integer.MAX_VALUE);
25 |
26 | private int intPriority;
27 |
28 | Priority(int priority) {
29 | intPriority = priority;
30 | }
31 |
32 | /**
33 | * Get integer priority.
34 | * @return priority in integer.
35 | */
36 | public int getPriority() {
37 | return intPriority;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/spark/data/SparkLogDerivedData.scala:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.spark.data
18 |
19 | import org.apache.spark.scheduler.SparkListenerEnvironmentUpdate
20 |
21 |
22 | case class SparkLogDerivedData(environmentUpdate: SparkListenerEnvironmentUpdate) {
23 | def appConfigurationProperties: Map[String, String] = environmentUpdate.environmentDetails("Spark Properties").toMap
24 | }
25 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/spark/data/SparkRestDerivedData.scala:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.spark.data
18 |
19 | import com.linkedin.drelephant.spark.fetchers.statusapiv1.{ApplicationInfo, ExecutorSummary, JobData, StageData}
20 |
21 |
22 | case class SparkRestDerivedData(
23 | applicationInfo: ApplicationInfo,
24 | jobDatas: Seq[JobData],
25 | stageDatas: Seq[StageData],
26 | executorSummaries: Seq[ExecutorSummary],
27 | private[spark] val logDerivedData: Option[SparkLogDerivedData] = None)
28 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/spark/fetchers/statusapiv1/StageStatus.java:
--------------------------------------------------------------------------------
1 | /*
2 | *Added this class to accommodate the status "PENDING" for stages.
3 | *
4 | *TODO: remove this class if using the spark version having "PENDING" StageStatus.
5 | */
6 |
7 | package com.linkedin.drelephant.spark.fetchers.statusapiv1;
8 |
9 | import org.apache.spark.util.EnumUtil;
10 |
11 | public enum StageStatus {
12 | ACTIVE,
13 | COMPLETE,
14 | FAILED,
15 | SKIPPED,
16 | PENDING;
17 |
18 | private StageStatus() {
19 | }
20 |
21 | public static StageStatus fromString(String str) {
22 | return (StageStatus) EnumUtil.parseIgnoreCase(StageStatus.class, str);
23 | }
24 | }
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/spark/legacydata/SparkApplicationData.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.spark.legacydata;
18 |
19 | import com.linkedin.drelephant.analysis.HadoopApplicationData;
20 |
21 |
22 | /**
23 | * This holds a collection of all SparkApplicationData
24 | */
25 | public interface SparkApplicationData extends HadoopApplicationData {
26 |
27 | public boolean isThrottled();
28 |
29 | public SparkGeneralData getGeneralData();
30 |
31 | public SparkEnvironmentData getEnvironmentData();
32 |
33 | public SparkExecutorData getExecutorData();
34 |
35 | public SparkJobProgressData getJobProgressData();
36 |
37 | public SparkStorageData getStorageData();
38 | }
39 |
--------------------------------------------------------------------------------
/app/com/linkedin/drelephant/tez/heuristics/ReducerGCHeuristic.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2017 Electronic Arts Inc.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *
16 | */
17 | package com.linkedin.drelephant.tez.heuristics;
18 |
19 | import com.linkedin.drelephant.configurations.heuristic.HeuristicConfigurationData;
20 | import com.linkedin.drelephant.tez.data.TezApplicationData;
21 | import com.linkedin.drelephant.tez.data.TezTaskData;
22 | import org.apache.log4j.Logger;
23 |
24 |
25 | /**
26 | * Analyses garbage collection efficiency
27 | */
28 | public class ReducerGCHeuristic extends GenericGCHeuristic {
29 |
30 | private static final Logger logger = Logger.getLogger(ReducerGCHeuristic.class);
31 |
32 | public ReducerGCHeuristic(HeuristicConfigurationData heuristicConfData) {
33 | super(heuristicConfData);
34 | }
35 |
36 | @Override
37 | protected TezTaskData[] getTasks(TezApplicationData data) {
38 | return data.getReduceTaskData();
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/app/controllers/api/v1/.Web.java.swp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/app/controllers/api/v1/.Web.java.swp
--------------------------------------------------------------------------------
/app/views/help/helpNoData.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 |
18 | This means that the JobTracker no longer provides information to Dr. Elephant for that job.
19 | The JobTracker wipes job data fairly quickly, and sometimes, will result in an empty set of data for certain jobs.
20 |
--------------------------------------------------------------------------------
/app/views/help/mapreduce/helpDistributedCacheLimit.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2017 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 |
Jobs which put large files(> 500MB) in the distributed cache are flagged.
18 |
Files as part of the following are considered.
19 |
20 |
21 | mapreduce.job.cache.files
22 |
23 |
24 | mapreduce.job.cache.archives
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/views/help/mapreduce/helpException.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 |
18 | Dr. Elephant now starts to provide exception info for failed jobs.
19 | The stacktrace is the exception of the failed task that caused this job to fail.
20 | Some failed jobs does not have a valid stacktrace reported by Hadoop. In this case, Dr. Elephant cannot provide the stacktrace.
21 | If Dr. Elephant cannot provide the exception, try to mine by yourself in its job history page.
22 | For example, some real exceptions appear at the end of the Application Master log.
23 | Some real exceptions appear in the task log.
24 | We hope to provide your more insights over these exceptions in the future.
25 |
--------------------------------------------------------------------------------
/app/views/help/mapreduce/helpMapperMemory.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 | @helpMemory()
--------------------------------------------------------------------------------
/app/views/help/mapreduce/helpReducerMemory.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 | @helpMemory()
--------------------------------------------------------------------------------
/app/views/help/metrics/helpRuntime.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 | @import com.linkedin.drelephant.analysis.Metrics;
18 |
19 |
20 | The runtime metrics shows the total runtime of your job.
21 |
22 |
23 |
Calculation
24 |
25 | The runtime of the job is the difference between the time when the job was submitted to the resource manager and when the job finished.
26 |
27 |
28 |
Example
29 | Let the submit time of a job be 1461837302868 ms
30 | Let the finish time of the job be 1461840952182 ms
31 | The runtime of the job will be 1461840952182 - 1461837302868 = 3649314 ms or 1.01 hours
32 |
33 |
--------------------------------------------------------------------------------
/app/views/help/spark/helpConfigurationHeuristic.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
The results from this heuristic primarily inform you about key app
17 | configuration settings, including driver memory, driver cores, executor cores,
18 | executor instances, executor memory, and the serializer.
19 |
It also checks the values of dynamically allocated min and max executors, the specified yarn jars, executor and driver memory overhead and whether other configuration values are within threshold.
20 |
Suggestions
21 |
Suggestions based on the configurations you have set are given in the heuristic result itself.
--------------------------------------------------------------------------------
/app/views/help/spark/helpEventLogLimit.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 | Spark's event log passer currently cannot handle very large event log files. It will take too long for Dr Elephant to
18 | analyze it that might endanger the entire server. Therefore, currently we sets up a limit (100MB) for event log files,
19 | and will by-pass the log-fetching process if the log size exceeds the limit.
20 |
--------------------------------------------------------------------------------
/app/views/help/spark/helpExecutorGcHeuristic.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 |
This analysis shows how much time a job is spending in GC. To normalise the results across all jobs, the ratio of the time a job spends in Gc to the total run time of the job is calculated.
18 |
A job is flagged if the ratio is too high, meaning the job spends too much time in GC.
19 |
Suggestions
20 |
We recommend increasing the executor memory.
--------------------------------------------------------------------------------
/app/views/help/spark/helpJobsHeuristic.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
This heuristic reports job failures and high task failure rates for
17 | each job.
18 |
19 |
Job/task failures can occur for a number of reasons, so it is
20 | recommended to look at the YARN application error logs.
21 |
--------------------------------------------------------------------------------
/app/views/help/spark/helpStagesHeuristic.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
This heuristic reports stage failures, high task failure rates for
17 | each stage, and long average executor runtimes for each stage.
18 |
19 |
Stage/task failures can occur for a number of reasons, so it is
20 | recommended to look at the YARN application error logs.
21 |
--------------------------------------------------------------------------------
/app/views/index.scala.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | DrElephant
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/views/page/homePage.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 | @(numJobsAnalyzed: Int, numJobsSevere: Int, numJobsCritical: Int)(results: Html)
18 |
19 | @*
20 | * The layout of the homepage of Dr. Elephant or the dashboard
21 | *
22 | * @param numJobsAnalyzed The count of total jobs analysed by Dr. Elephant
23 | * @param numJobsSevere The number of jobs which are in severe state
24 | * @param numJobsCritical The number of jobs which are in critical state
25 | * @param results The results to be displayed on the dashboard
26 | *@
27 |
28 | @main("Dr. Elephant", "dashboard") {
29 |
30 |
Hello there, I've been busy!
31 |
I looked through @numJobsAnalyzed jobs today.
32 | About @numJobsSevere of them could use some tuning.
33 | About @numJobsCritical of them need some serious attention!
34 |
35 |
36 | @results
37 | }
38 |
--------------------------------------------------------------------------------
/app/views/results/searchResults.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 | @(title: String, results: java.util.List[models.AppResult])
18 |
19 | @*
20 | * The layout of the job results.
21 | *
22 | * @param title The title of the search results
23 | * @param results The search results to be displayed
24 | *@
25 |
26 |
41 |
--------------------------------------------------------------------------------
/app/views/tags/column.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 | @(width: Int)(content: Html)
17 |
18 | @content
19 |
--------------------------------------------------------------------------------
/app/views/tags/jobHeader.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 | @(result: models.AppResult)
18 |
19 | @*
20 | * The job header includes the following info,
21 | * The user who ran the job
22 | * The job type
23 | * The job id
24 | * And the analysis time
25 | *
26 | * @param result The job of type AppResult
27 | *@
28 |
29 |
30 |
[@result.username] [@result.jobType] @result.id
31 |
32 |
@result.name
33 |
34 |
35 |
39 |
--------------------------------------------------------------------------------
/app/views/tags/jobSummary.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 |
17 | @(result: models.AppResult)
18 |
19 | @*
20 | * Displays a brief info of the job.
21 | * The job block includes, the job header and the heuristic info.
22 | *
23 | * @param result The job of type AppResult
24 | *@
25 |
26 | @tags.jobHeader(result)
27 |
32 | @tags.aggregatedMetrics(result)
--------------------------------------------------------------------------------
/app/views/tags/panel.scala.html:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *@
16 | @()(title: Html)(body: Html)
17 |
18 |
19 |
@title
20 |
21 |
22 | @body
23 |
24 |
--------------------------------------------------------------------------------
/checkstyle.sbt:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2016 LinkedIn Corp.
3 | //
4 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | // use this file except in compliance with the License. You may obtain a copy of
6 | // 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, WITHOUT
12 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | // License for the specific language governing permissions and limitations under
14 | // the License.
15 | //
16 |
17 | //
18 | // sbt-checkstyle-plugin specific configurations go in this file
19 | //
20 |
21 | // Path and name of checkstyle configuration file
22 | checkstyleConfigLocation := CheckstyleConfigLocation.File("project/checkstyle-config.xml")
23 |
24 | // Generate HTML report in addition to default XML report by applying XSLT transformations
25 | checkstyleXsltTransformations := {
26 | Some(Set(CheckstyleXSLTSettings(baseDirectory(_ / "project/checkstyle-noframes-severity-sorted-modified.xsl").value, target(_ / "checkstyle-report.html").value)))
27 | }
28 |
--------------------------------------------------------------------------------
/compile.conf:
--------------------------------------------------------------------------------
1 | hadoop_version=2.7.3
2 | spark_version=1.6.2
3 | play_opts="-Dsbt.repository.config=app-conf/resolver.conf"
4 |
--------------------------------------------------------------------------------
/conf/evolutions/default/2.sql:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2016 LinkedIn Corp.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | # use this file except in compliance with the License. You may obtain a copy of
6 | # 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, WITHOUT
12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | # License for the specific language governing permissions and limitations under
14 | # the License.
15 | #
16 |
17 | # --- Indexing on queue for search by queue feature
18 | # --- !Ups
19 |
20 | create index yarn_app_result_i8 on yarn_app_result (queue_name);
21 |
22 | # --- !Downs
23 |
24 | drop index yarn_app_result_i8 on yarn_app_result;
25 |
26 |
--------------------------------------------------------------------------------
/conf/evolutions/default/3.sql:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2016 LinkedIn Corp.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | # use this file except in compliance with the License. You may obtain a copy of
6 | # 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, WITHOUT
12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | # License for the specific language governing permissions and limitations under
14 | # the License.
15 | #
16 |
17 | # --- Indexing on queue for seach by queue feature
18 | # --- !Ups
19 |
20 | alter table yarn_app_result add column resource_used BIGINT UNSIGNED DEFAULT 0 COMMENT 'The resources used by the job in MB Seconds';
21 | alter table yarn_app_result add column resource_wasted BIGINT UNSIGNED DEFAULT 0 COMMENT 'The resources wasted by the job in MB Seconds';
22 | alter table yarn_app_result add column total_delay BIGINT UNSIGNED DEFAULT 0 COMMENT 'The total delay in starting of mappers and reducers';
23 |
24 | # --- !Downs
25 |
26 | alter table yarn_app_result drop resource_used;
27 | alter table yarn_app_result drop resource_wasted;
28 | alter table yarn_app_result drop total_delay;
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/conf/evolutions/default/4.sql:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2016 LinkedIn Corp.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | # use this file except in compliance with the License. You may obtain a copy of
6 | # 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, WITHOUT
12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | # License for the specific language governing permissions and limitations under
14 | # the License.
15 | #
16 |
17 | # --- Indexing on severity,finish_time for count on welcome page
18 | # --- !Ups
19 |
20 | create index yarn_app_result_i9 on yarn_app_result (severity,finish_time);
21 |
22 | # --- !Downs
23 |
24 | drop index yarn_app_result_i9 on yarn_app_result;
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/conf/evolutions/default/6.sql:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2016 LinkedIn Corp.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | # use this file except in compliance with the License. You may obtain a copy of
6 | # 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, WITHOUT
12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | # License for the specific language governing permissions and limitations under
14 | # the License.
15 | #
16 |
17 | # --- !Ups
18 |
19 | CREATE TABLE backfill_info (
20 | app_type VARCHAR(20) NOT NULL COMMENT 'Application/Job Type e.g, Pig, Hive, Spark, HadoopJava',
21 | backfill_ts BIGINT UNSIGNED NOT NULL COMMENT 'The timestamp at which backfill should start from',
22 |
23 | PRIMARY KEY (app_type)
24 | );
25 |
26 | # --- !Downs
27 |
28 | DROP TABLE backfill_info;
29 |
--------------------------------------------------------------------------------
/conf/log4j.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2016 LinkedIn Corp.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | # use this file except in compliance with the License. You may obtain a copy of
6 | # 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, WITHOUT
12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | # License for the specific language governing permissions and limitations under
14 | # the License.
15 | #
16 |
17 | #Define the root logger with appender file
18 | log4j.rootLogger = INFO, FA
19 |
20 | #File Appender
21 | log4j.appender.FA=org.apache.log4j.DailyRollingFileAppender
22 | log4j.appender.FA.File=../logs/elephant/dr_elephant.log
23 | log4j.appender.FA.layout=org.apache.log4j.PatternLayout
24 | log4j.appender.FA.layout.ConversionPattern=%d{MM-dd-yyyy HH:mm:ss} %-5p [%t] %c %x: %m%n
25 | log4j.appender.FA.DatePattern='.'yyyy-MM-dd
26 | log4j.appender.FA.ImmediateFlush=true
27 | log4j.appender.FA.Append=true
28 |
--------------------------------------------------------------------------------
/cpd.sbt:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2016 LinkedIn Corp.
3 | //
4 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | // use this file except in compliance with the License. You may obtain a copy of
6 | // 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, WITHOUT
12 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | // License for the specific language governing permissions and limitations under
14 | // the License.
15 | //
16 |
17 | //
18 | // cpd4sbt plugin settings for integrating with CPD which is used for code duplication
19 | //
20 | import de.johoop.cpd4sbt._
21 |
22 | // By default language will be Java but this will be changed to run for Scala as well
23 | // while running build through Travis CI.
24 | cpdLanguage := Language.Java
25 |
26 | // Take distinct source directories to ensure whole file is not reported as duplicate
27 | // of itself.
28 | cpdSourceDirectories in Compile := (cpdSourceDirectories in Compile).value.distinct
29 |
--------------------------------------------------------------------------------
/findbugs.sbt:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2016 LinkedIn Corp.
3 | //
4 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | // use this file except in compliance with the License. You may obtain a copy of
6 | // 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, WITHOUT
12 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | // License for the specific language governing permissions and limitations under
14 | // the License.
15 | //
16 |
17 | import de.johoop.findbugs4sbt.FindBugs._
18 | import de.johoop.findbugs4sbt.Priority
19 |
20 | findbugsSettings
21 |
22 | // Only High priority Findbugs issues will be generated
23 | findbugsPriority := Priority.High
24 |
25 | // Exclude filters file to filter out certain files, folders or issues
26 | findbugsExcludeFilters := Some(scala.xml.XML.loadFile(baseDirectory.value / "project" / "findbugs-exclude-filters.xml"))
27 |
--------------------------------------------------------------------------------
/images/wiki/compare-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/compare-page.png
--------------------------------------------------------------------------------
/images/wiki/critical.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/critical.png
--------------------------------------------------------------------------------
/images/wiki/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/dashboard.png
--------------------------------------------------------------------------------
/images/wiki/dr-elephant-logo-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/dr-elephant-logo-150x150.png
--------------------------------------------------------------------------------
/images/wiki/dr-elephant-logo-300x300.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/dr-elephant-logo-300x300.png
--------------------------------------------------------------------------------
/images/wiki/flow-history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/flow-history.png
--------------------------------------------------------------------------------
/images/wiki/flowhistorymetrics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/flowhistorymetrics.png
--------------------------------------------------------------------------------
/images/wiki/job-history.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/job-history.png
--------------------------------------------------------------------------------
/images/wiki/jobdetails.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/jobdetails.png
--------------------------------------------------------------------------------
/images/wiki/jobhistorymetrics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/jobhistorymetrics.png
--------------------------------------------------------------------------------
/images/wiki/low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/low.png
--------------------------------------------------------------------------------
/images/wiki/moderate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/moderate.png
--------------------------------------------------------------------------------
/images/wiki/none.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/none.png
--------------------------------------------------------------------------------
/images/wiki/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/search.png
--------------------------------------------------------------------------------
/images/wiki/severe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/severe.png
--------------------------------------------------------------------------------
/images/wiki/suggestions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/images/wiki/suggestions.png
--------------------------------------------------------------------------------
/jacoco.sbt:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2016 LinkedIn Corp.
3 | //
4 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | // use this file except in compliance with the License. You may obtain a copy of
6 | // 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, WITHOUT
12 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | // License for the specific language governing permissions and limitations under
14 | // the License.
15 | //
16 |
17 | import de.johoop.jacoco4sbt.JacocoPlugin._
18 | import de.johoop.jacoco4sbt._
19 |
20 | // Baselining coverage thresholds to current coverage values so that build fails with any drop in coverage
21 | jacoco.settings ++ Seq(
22 | jacoco.thresholds in jacoco.Config := Thresholds(
23 | instruction = 62,
24 | method = 65,
25 | branch = 41,
26 | complexity = 47,
27 | line = 62,
28 | clazz = 81)
29 | )
30 |
31 | parallelExecution in jacoco.Config := false
32 |
33 | jacoco.outputDirectory in jacoco.Config := file("target/jacoco")
34 |
35 | jacoco.reportFormats in jacoco.Config := Seq(XMLReport(encoding = "utf-8"), HTMLReport("utf-8"))
36 |
37 | jacoco.excludes in jacoco.Config := Seq("views*", "*Routes*", "controllers*routes*", "controllers*Reverse*", "controllers*javascript*", "controller*ref*")
38 |
--------------------------------------------------------------------------------
/project/build.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2016 LinkedIn Corp.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | # use this file except in compliance with the License. You may obtain a copy of
6 | # 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, WITHOUT
12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | # License for the specific language governing permissions and limitations under
14 | # the License.
15 | #
16 |
17 | sbt.version=0.13.9
18 |
--------------------------------------------------------------------------------
/project/checkstyle-java.header:
--------------------------------------------------------------------------------
1 | ^/\*$
2 | ^ \* Copyright \d{4} LinkedIn Corp.$
3 | ^ \*$
4 | ^ \* Licensed under the Apache License, Version 2.0 \(the "License"\); you may not$
5 | ^ \* use this file except in compliance with the License. You may obtain a copy of$
6 | ^ \* 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, WITHOUT$
12 | ^ \* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the$
13 | ^ \* License for the specific language governing permissions and limitations under$
14 | ^ \* the License.$
15 | ^ \*/$
16 |
--------------------------------------------------------------------------------
/project/checkstyle-suppressions.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
20 |
21 |
22 |
24 |
25 |
--------------------------------------------------------------------------------
/project/plugins.sbt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 | // Comment to get more information during initialization
17 | logLevel := Level.Warn
18 |
19 | // The Typesafe repository
20 | resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/"
21 |
22 | // Use the Play sbt plugin for Play projects
23 | addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.2.2"))
24 |
25 | // Jacoco code coverage plugin
26 | addSbtPlugin("de.johoop" % "jacoco4sbt" % "2.1.6")
27 |
28 | // Findbugs plugin
29 | addSbtPlugin("de.johoop" % "findbugs4sbt" % "1.4.0")
30 |
31 | // Copy paste detector plugin
32 | addSbtPlugin("de.johoop" % "cpd4sbt" % "1.2.0")
33 |
34 | // Checkstyle plugin
35 | addSbtPlugin("com.etsy" % "sbt-checkstyle-plugin" % "3.1.1")
36 |
37 | // Scalastyle plugin
38 | addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")
39 |
--------------------------------------------------------------------------------
/public/assets/analytics/track.js:
--------------------------------------------------------------------------------
1 | /*
2 | Paste the tracking javascript snippet into this file for web analytics.
3 | This javascript file will be included into every page in the application.
4 | See comments section above 'enable.analytics' in the application.conf file for
5 | more information.
6 | */
--------------------------------------------------------------------------------
/public/assets/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/assets/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/public/assets/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/assets/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/public/assets/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/assets/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/public/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/images/favicon.png
--------------------------------------------------------------------------------
/public/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/images/loading.gif
--------------------------------------------------------------------------------
/public/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/images/logo.png
--------------------------------------------------------------------------------
/public/images/runtime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/images/runtime.png
--------------------------------------------------------------------------------
/public/images/usedmemory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/images/usedmemory.png
--------------------------------------------------------------------------------
/public/images/waittime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/images/waittime.png
--------------------------------------------------------------------------------
/public/images/wastedmemory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/public/images/wastedmemory.png
--------------------------------------------------------------------------------
/public/js/flowresourcehistoryform.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | $(document).ready(function(){
18 |
19 | /* Plot graph for data obtained from ajax call */
20 | $.getJSON('/rest/flowmetricsgraphdata?id=' + queryString()['flow-def-id'], function(data) {
21 | updateExecTimezone(data);
22 |
23 | // Compute the jobDefId list such that the job numbers in the tooltip match the corresponding job in the table.
24 | var jobDefList = [];
25 | for (var i = data.length - 1 ; i >=0 ; i--) {
26 | for (var j = 0; j < data[i].jobmetrics.length; j++) {
27 | var jobDefUrl = data[i].jobmetrics[j]["jobdefurl"];
28 | if (jobDefList.indexOf(jobDefUrl) == -1) {
29 | jobDefList.push(jobDefUrl);
30 | }
31 | }
32 | }
33 |
34 | plotter(data, jobDefList);
35 | });
36 |
37 | loadTableTooltips();
38 | });
39 |
--------------------------------------------------------------------------------
/public/js/flowtimehistoryform.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | $(document).ready(function(){
18 |
19 | /* Plot graph for data obtained from ajax call */
20 | $.getJSON('/rest/flowmetricsgraphdata?id=' + queryString()['flow-def-id'], function(data) {
21 | updateExecTimezone(data);
22 |
23 | // Compute the jobDefId list such that the job numbers in the tooltip match the corresponding job in the table.
24 | var jobDefList = [];
25 | for (var i = data.length - 1 ; i >=0 ; i--) {
26 | for (var j = 0; j < data[i].jobmetrics.length; j++) {
27 | var jobDefUrl = data[i].jobmetrics[j]["jobdefurl"];
28 | if (jobDefList.indexOf(jobDefUrl) == -1) {
29 | jobDefList.push(jobDefUrl);
30 | }
31 | }
32 | }
33 |
34 | plotter(data, jobDefList);
35 | });
36 |
37 | loadTableTooltips();
38 | });
39 |
40 |
--------------------------------------------------------------------------------
/public/js/jobresourcesmetricshistoryform.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | $(document).ready(function(){
18 |
19 | /* Plot graph for data obtained from ajax call */
20 | $.getJSON('/rest/jobmetricsgraphdata?id=' + queryString()['job-def-id'], function(data) {
21 | updateExecTimezone(data);
22 | plotter(data, []);
23 | });
24 |
25 | loadTableTooltips();
26 | });
27 |
28 |
--------------------------------------------------------------------------------
/public/js/jobtimehistoryform.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | $(document).ready(function(){
18 |
19 | /* Plot graph for data obtained from ajax call */
20 | $.getJSON('/rest/jobmetricsgraphdata?id=' + queryString()['job-def-id'], function(data) {
21 | updateExecTimezone(data);
22 | plotter(data, []);
23 | });
24 |
25 | loadTableTooltips();
26 | });
27 |
28 |
--------------------------------------------------------------------------------
/public/js/searchpanel.js:
--------------------------------------------------------------------------------
1 |
2 | $('.search_opt').on("click",function(){
3 | $('#search_concept').text($(this).text())
4 | console.log($(this).text());
5 | });
6 |
7 | $('#search_button').on("click", function() {
8 | let text = $('#primary_search').val();
9 | let type = $('#search_concept').text();
10 | let encodedurl = encodeURIComponent(text);
11 | if(type=='Workflow') {
12 | let transition = "/new#/workflow?workflowid=" + encodedurl;
13 | window.location = transition
14 | } else if (type=='Job') {
15 | let transition = "/new#/job?jobid=" + encodedurl;
16 | window.location = transition;
17 | } else if (type=='Application') {
18 | let transition = "/new#/app?applicationid=" + encodedurl;
19 | window.location = transition;
20 | }
21 | });
--------------------------------------------------------------------------------
/resolver.conf.template:
--------------------------------------------------------------------------------
1 | [repositories]
2 | local
3 | # label ":" url [ ["," ivyPattern] "," artifactPattern [", mavenCompatible"]]
4 | # custom_resolver : repo_url, [organization]/[module]/[revision]/[module]-[revision].ivy, [organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext], mavenCompatible
5 |
--------------------------------------------------------------------------------
/scalastyle.sbt:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright 2016 LinkedIn Corp.
3 | //
4 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | // use this file except in compliance with the License. You may obtain a copy of
6 | // 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, WITHOUT
12 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | // License for the specific language governing permissions and limitations under
14 | // the License.
15 | //
16 |
17 | //
18 | // scalastyle-sbt-plugin specific configurations go in this file
19 | //
20 |
21 | // Do not fail on scalastyle errors as we want to baseline error numbers till
22 | // we fix all errors. We would fail the CI build if any new errors are introduced
23 | // through a PR.
24 | scalastyleFailOnError := false
25 |
26 | // Scalastyle config file location.
27 | scalastyleConfig := file("project/scalastyle-config.xml")
28 |
--------------------------------------------------------------------------------
/scripts/stop.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | #
4 | # Copyright 2016 LinkedIn Corp.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
7 | # use this file except in compliance with the License. You may obtain a copy of
8 | # the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15 | # License for the specific language governing permissions and limitations under
16 | # the License.
17 | #
18 |
19 | # Navigate to project root dir
20 | script_dir=`which $0`
21 | script_dir=`dirname $script_dir`
22 | project_root=$script_dir/../
23 | cd $project_root
24 |
25 | # If file RUNNING_PID exists, it means Dr. Elephant is running
26 | if [ -f RUNNING_PID ];
27 | then
28 | echo "Dr.Elephant is running."
29 | else
30 | echo "Dr.Elephant is not running."
31 | exit 1
32 | fi
33 |
34 | # RUNNING_PID contains PID of our Dr. Elephant instance
35 | proc=`cat RUNNING_PID`
36 |
37 | echo "Killing Dr.Elephant...."
38 | kill $proc
39 |
40 | # Wait for a while
41 | sleep 1
42 |
43 | # Play should remove RUNNING_PID when we kill the running process
44 | if [ ! -f RUNNING_PID ];
45 | then
46 | echo "Dr.Elephant is killed."
47 | else
48 | echo "Failed to kill Dr.Elephant."
49 | exit 1
50 | fi
51 |
--------------------------------------------------------------------------------
/test/com/linkedin/drelephant/mapreduce/fetchers/MapReduceFetcherHadoop2Test.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | package com.linkedin.drelephant.mapreduce.fetchers;
18 |
19 | import java.util.regex.Matcher;
20 | import java.util.regex.Pattern;
21 |
22 | import com.linkedin.drelephant.util.ThreadContextMR2;
23 | import org.junit.Assert;
24 | import org.junit.Test;
25 |
26 |
27 | public class MapReduceFetcherHadoop2Test {
28 |
29 | @Test
30 | public void testDiagnosticMatcher() {
31 | Matcher matcher = ThreadContextMR2.getDiagnosticMatcher("Task task_1443068695259_9143_m_000475 failed 1 time");
32 | Assert.assertEquals(".*[\\s\\u00A0]+(task_[0-9]+_[0-9]+_[m|r]_[0-9]+)[\\s\\u00A0]+.*", matcher.pattern().toString());
33 | Assert.assertEquals(true, matcher.matches());
34 | Assert.assertEquals(1, matcher.groupCount());
35 | Assert.assertEquals("task_1443068695259_9143_m_000475", matcher.group(1));
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/test/com/linkedin/drelephant/tez/fetchers/TezFetcherTest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2017 Electronic Arts Inc.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | *
16 | */
17 | package com.linkedin.drelephant.tez.fetchers;
18 |
19 | import java.util.regex.Matcher;
20 | import org.junit.Assert;
21 | import org.junit.Test;
22 | import com.linkedin.drelephant.util.ThreadContextMR2;
23 |
24 | public class TezFetcherTest {
25 |
26 | @Test
27 | public void testDiagnosticMatcher() {
28 | Matcher matcher = ThreadContextMR2.getDiagnosticMatcher("Task task_1443068695259_9143_m_000475 failed 1 time");
29 | Assert.assertEquals(".*[\\s\\u00A0]+(task_[0-9]+_[0-9]+_[m|r]_[0-9]+)[\\s\\u00A0]+.*", matcher.pattern().toString());
30 | Assert.assertEquals(true, matcher.matches());
31 | Assert.assertEquals(1, matcher.groupCount());
32 | Assert.assertEquals("task_1443068695259_9143_m_000475", matcher.group(1));
33 | }
34 |
35 | }
--------------------------------------------------------------------------------
/test/resources/SchedulerConf.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 | airflow
23 | com.linkedin.drelephant.schedulers.AirflowScheduler
24 |
25 | http://localhost:8000
26 |
27 |
28 |
29 |
30 | azkaban
31 | com.linkedin.drelephant.schedulers.AzkabanScheduler
32 |
33 |
34 |
35 | oozie
36 | com.linkedin.drelephant.schedulers.OozieScheduler
37 |
38 | http://oozie/
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest1.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | mapreduce
21 | com.linkedin.drelephant.mapreduce.fetchers.MapReduceFetcherHadoop2
22 |
23 |
24 | spark
25 | org.apache.spark.deploy.history.SparkFSFetcher
26 |
27 |
28 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest10.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | mapreduce
21 | com.linkedin.drelephant.mapreduce.fetchers.MapReduceFSFetcherHadoop2
22 |
23 | true
24 | 200
25 | PST
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest11.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | mapreduce
21 | com.linkedin.drelephant.mapreduce.fetchers.MapReduceFSFetcherHadoop2
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest2.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | mapreduce
21 | com.linkedin.drelephant.mapreduce.fetchers.MapReduceFetcherHadoop2
22 |
23 |
24 | spark
25 | org.apache.spark.deploy.history.SparkFSFetcher
26 |
27 |
28 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest3.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | mapreduce
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest4.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | com.linkedin.drelephant.mapreduce.fetchers.MapReduceFetcherHadoop2
21 |
22 |
23 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest5.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | spark
21 | org.apache.spark.deploy.history.SparkFSFetcher
22 |
23 | 50
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest6.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | spark
21 | org.apache.spark.deploy.history.SparkFSFetcher
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest7.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | spark
21 | org.apache.spark.deploy.history.SparkFSFetcher
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest8.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | spark
21 | org.apache.spark.deploy.history.SparkFSFetcher
22 |
23 | sample-ha3.grid.example.com:50070,sample-ha4.grid.example.com:50070
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/test/resources/configurations/fetcher/FetcherConfTest9.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | mapreduce
21 | com.linkedin.drelephant.mapreduce.fetchers.MapReduceFSFetcherHadoop2
22 |
23 |
24 |
--------------------------------------------------------------------------------
/test/resources/configurations/jobtype/JobTypeConfTest2.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 | Spark
22 | spark
23 | spark.app.id
24 |
25 |
26 |
27 | Pig
28 | mapreduce
29 | pig.script
30 |
31 |
32 | mapreduce
33 | hive.mapred.mode
34 |
35 |
36 | Cascading
37 | mapreduce
38 | cascading.app.frameworks
39 |
40 |
41 | HadoopJava
42 | mapreduce
43 | mapred.child.java.opts
44 |
45 |
46 |
--------------------------------------------------------------------------------
/test/resources/configurations/jobtype/JobTypeConfTest3.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 | Spark
22 | spark
23 |
24 |
25 |
26 | Pig
27 | mapreduce
28 |
29 |
30 | Hive
31 | mapreduce
32 | hive.mapred.mode
33 |
34 |
35 | Cascading
36 | mapreduce
37 | cascading.app.frameworks
38 |
39 |
40 | HadoopJava
41 | mapreduce
42 | mapred.child.java.opts
43 |
44 |
45 |
--------------------------------------------------------------------------------
/test/resources/configurations/jobtype/JobTypeConfTest4.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 | Spark
22 | spark
23 | spark.app.id
24 |
25 |
26 |
27 | Pig
28 | pig.script
29 |
30 |
31 | Hive
32 | hive.mapred.mode
33 |
34 |
35 | Cascading
36 | mapreduce
37 | cascading.app.frameworks
38 |
39 |
40 | HadoopJava
41 | mapreduce
42 | mapred.child.java.opts
43 |
44 |
45 |
--------------------------------------------------------------------------------
/test/resources/configurations/jobtype/JobTypeConfTest5.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | Voldemort
21 | mapreduce
22 | mapred.reducer.class
23 | [(voldemort)
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/test/resources/configurations/scheduler/SchedulerConfTest1.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 | airflow
22 | com.linkedin.drelephant.schedulers.AirflowScheduler
23 |
24 | http://localhost:8000
25 |
26 |
27 |
28 |
29 | azkaban
30 | com.linkedin.drelephant.schedulers.AzkabanScheduler
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/test/resources/configurations/scheduler/SchedulerConfTest2.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 | airflow
22 |
23 | http://localhost:8000
24 |
25 |
26 |
27 |
28 | azkaban
29 | com.linkedin.drelephant.schedulers.AzkabanScheduler
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/test/resources/configurations/scheduler/SchedulerConfTest3.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 | airflow
22 | com.linkedin.drelephant.schedulers.AirflowScheduler
23 |
24 | http://localhost:8000
25 |
26 |
27 |
28 |
29 | com.linkedin.drelephant.schedulers.AzkabanScheduler
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/test/resources/log4j.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2016 LinkedIn Corp.
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | # use this file except in compliance with the License. You may obtain a copy of
6 | # 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, WITHOUT
12 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | # License for the specific language governing permissions and limitations under
14 | # the License.
15 | #
16 |
17 | #Define the root logger with appender file
18 | log4j.rootLogger = INFO, FA
19 |
20 | #File Appender
21 | log4j.appender.FA=org.apache.log4j.DailyRollingFileAppender
22 | log4j.appender.FA.File=dr_elephant.log
23 | log4j.appender.FA.layout=org.apache.log4j.PatternLayout
24 | log4j.appender.FA.layout.ConversionPattern=%d{MM-dd-yyyy HH:mm:ss} %-5p [%t] %c %x: %m%n
25 | log4j.appender.FA.DatePattern='.'yyyy-MM-dd
26 | log4j.appender.FA.ImmediateFlush=true
27 | log4j.appender.FA.Append=true
28 |
--------------------------------------------------------------------------------
/test/resources/mapred-site.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | mapreduce.jobhistory.done-dir
23 | test/resources/history/done
24 |
25 |
26 |
27 | mapreduce.jobhistory.intermediate-done-dir
28 | test/resources/history/done_intermediate
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/test/resources/mrdata/mapperTaskCounter1.properties:
--------------------------------------------------------------------------------
1 | org.apache.hadoop.mapreduce.FileSystemCounter={FILE_LARGE_READ_OPS=0, FILE_WRITE_OPS=0, HDFS_READ_OPS=4, HDFS_BYTES_READ=268, HDFS_LARGE_READ_OPS=0, FILE_READ_OPS=0, FILE_BYTES_WRITTEN=117858, FILE_BYTES_READ=0, HDFS_WRITE_OPS=0, HDFS_BYTES_WRITTEN=0}
2 | org.apache.hadoop.mapreduce.lib.input.FileInputFormatCounter={BYTES_READ=118}
3 | org.apache.hadoop.mapreduce.TaskCounter={MAP_OUTPUT_MATERIALIZED_BYTES=28, SPILLED_RECORDS=2, MERGED_MAP_OUTPUTS=0, VIRTUAL_MEMORY_BYTES=0, MAP_INPUT_RECORDS=1, SPLIT_RAW_BYTES=150, FAILED_SHUFFLE=0, MAP_OUTPUT_BYTES=18, PHYSICAL_MEMORY_BYTES=0, GC_TIME_MILLIS=46, MAP_OUTPUT_RECORDS=2, COMBINE_INPUT_RECORDS=0, CPU_MILLISECONDS=0, COMMITTED_HEAP_BYTES=201326592}
--------------------------------------------------------------------------------
/test/resources/mrdata/mapperTaskCounter2.properties:
--------------------------------------------------------------------------------
1 | org.apache.hadoop.mapreduce.FileSystemCounter={FILE_LARGE_READ_OPS=0, FILE_WRITE_OPS=0, HDFS_READ_OPS=4, HDFS_BYTES_READ=268, HDFS_LARGE_READ_OPS=0, FILE_READ_OPS=0, FILE_BYTES_WRITTEN=117858, FILE_BYTES_READ=0, HDFS_WRITE_OPS=0, HDFS_BYTES_WRITTEN=0}
2 | org.apache.hadoop.mapreduce.lib.input.FileInputFormatCounter={BYTES_READ=118}
3 | org.apache.hadoop.mapreduce.TaskCounter={MAP_OUTPUT_MATERIALIZED_BYTES=28, SPILLED_RECORDS=2, MERGED_MAP_OUTPUTS=0, VIRTUAL_MEMORY_BYTES=0, MAP_INPUT_RECORDS=1, SPLIT_RAW_BYTES=150, FAILED_SHUFFLE=0, MAP_OUTPUT_BYTES=18, PHYSICAL_MEMORY_BYTES=0, GC_TIME_MILLIS=46, MAP_OUTPUT_RECORDS=2, COMBINE_INPUT_RECORDS=0, CPU_MILLISECONDS=0, COMMITTED_HEAP_BYTES=201326592}
--------------------------------------------------------------------------------
/test/resources/mrdata/mapperTaskCounter3.properties:
--------------------------------------------------------------------------------
1 | org.apache.hadoop.mapreduce.FileSystemCounter={FILE_LARGE_READ_OPS=0, FILE_WRITE_OPS=0, HDFS_READ_OPS=4, HDFS_BYTES_READ=268, HDFS_LARGE_READ_OPS=0, FILE_READ_OPS=0, FILE_BYTES_WRITTEN=117858, FILE_BYTES_READ=0, HDFS_WRITE_OPS=0, HDFS_BYTES_WRITTEN=0}
2 | org.apache.hadoop.mapreduce.lib.input.FileInputFormatCounter={BYTES_READ=118}
3 | org.apache.hadoop.mapreduce.TaskCounter={MAP_OUTPUT_MATERIALIZED_BYTES=28, SPILLED_RECORDS=2, MERGED_MAP_OUTPUTS=0, VIRTUAL_MEMORY_BYTES=0, MAP_INPUT_RECORDS=1, SPLIT_RAW_BYTES=150, FAILED_SHUFFLE=0, MAP_OUTPUT_BYTES=18, PHYSICAL_MEMORY_BYTES=0, GC_TIME_MILLIS=43, MAP_OUTPUT_RECORDS=2, COMBINE_INPUT_RECORDS=0, CPU_MILLISECONDS=0, COMMITTED_HEAP_BYTES=201326592}
--------------------------------------------------------------------------------
/test/resources/mrdata/reducerTaskCounter1.properties:
--------------------------------------------------------------------------------
1 | org.apache.hadoop.mapreduce.FileSystemCounter={FILE_LARGE_READ_OPS=0, FILE_WRITE_OPS=0, HDFS_READ_OPS=3, HDFS_BYTES_READ=0, HDFS_LARGE_READ_OPS=0, FILE_READ_OPS=0, FILE_BYTES_WRITTEN=117847, FILE_BYTES_READ=72, HDFS_WRITE_OPS=3, HDFS_BYTES_WRITTEN=215}
2 | org.apache.hadoop.mapreduce.lib.output.FileOutputFormatCounter={BYTES_WRITTEN=97}
3 | org.apache.hadoop.mapreduce.TaskCounter={REDUCE_INPUT_RECORDS=6, SPILLED_RECORDS=6, MERGED_MAP_OUTPUTS=3, VIRTUAL_MEMORY_BYTES=0, FAILED_SHUFFLE=0, REDUCE_SHUFFLE_BYTES=84, PHYSICAL_MEMORY_BYTES=0, GC_TIME_MILLIS=38, REDUCE_INPUT_GROUPS=2, COMBINE_OUTPUT_RECORDS=0, SHUFFLED_MAPS=3, REDUCE_OUTPUT_RECORDS=0, COMBINE_INPUT_RECORDS=0, CPU_MILLISECONDS=0, COMMITTED_HEAP_BYTES=147849216}
4 | Shuffle Errors={CONNECTION=0, WRONG_LENGTH=0, BAD_ID=0, WRONG_REDUCE=0, IO_ERROR=0, WRONG_MAP=0}
--------------------------------------------------------------------------------
/test/resources/mrdata/sampleJobConf.properties:
--------------------------------------------------------------------------------
1 | azkaban.link.job.url=https://elephant.linkedin.com:8443/manager?project=b2-confirm-email-reminder&flow=reminder&job=overwriter-reminder2
2 | azkaban.link.attempt.url=https://elephant.linkedin.com:8443/executor?execid=1654676&job=overwriter-reminder2&attempt=0
3 | azkaban.link.workflow.url=https://elephant.linkedin.com:8443/manager?project=b2-confirm-email-reminder&flow=reminder
4 | azkaban.link.execution.url=https://elephant.linkedin.com:8443/executor?execid=1654676
5 |
--------------------------------------------------------------------------------
/test/resources/mrdata/sampleJobCounter.properties:
--------------------------------------------------------------------------------
1 | org.apache.hadoop.mapreduce.FileSystemCounter={FILE_LARGE_READ_OPS=0, FILE_WRITE_OPS=0, HDFS_READ_OPS=15, HDFS_BYTES_READ=804, HDFS_LARGE_READ_OPS=0, FILE_READ_OPS=0, FILE_BYTES_WRITTEN=471421, FILE_BYTES_READ=72, HDFS_WRITE_OPS=3, HDFS_BYTES_WRITTEN=215}
2 | org.apache.hadoop.mapreduce.JobCounter={TOTAL_LAUNCHED_MAPS=3, VCORES_MILLIS_REDUCES=1870, MB_MILLIS_MAPS=7876608, TOTAL_LAUNCHED_REDUCES=1, SLOTS_MILLIS_REDUCES=1870, VCORES_MILLIS_MAPS=7692, MB_MILLIS_REDUCES=1914880, SLOTS_MILLIS_MAPS=7692, MILLIS_REDUCES=1870, MILLIS_MAPS=7692, DATA_LOCAL_MAPS=3}
3 | org.apache.hadoop.mapreduce.lib.output.FileOutputFormatCounter={BYTES_WRITTEN=97}
4 | org.apache.hadoop.mapreduce.lib.input.FileInputFormatCounter={BYTES_READ=354}
5 | org.apache.hadoop.mapreduce.TaskCounter={MAP_OUTPUT_MATERIALIZED_BYTES=84, REDUCE_INPUT_RECORDS=6, SPILLED_RECORDS=12, MERGED_MAP_OUTPUTS=3, VIRTUAL_MEMORY_BYTES=0, MAP_INPUT_RECORDS=3, SPLIT_RAW_BYTES=450, FAILED_SHUFFLE=0, MAP_OUTPUT_BYTES=54, REDUCE_SHUFFLE_BYTES=84, PHYSICAL_MEMORY_BYTES=0, GC_TIME_MILLIS=173, REDUCE_INPUT_GROUPS=2, COMBINE_OUTPUT_RECORDS=0, SHUFFLED_MAPS=3, REDUCE_OUTPUT_RECORDS=0, MAP_OUTPUT_RECORDS=6, COMBINE_INPUT_RECORDS=0, CPU_MILLISECONDS=0, COMMITTED_HEAP_BYTES=751828992}
6 | Shuffle Errors={CONNECTION=0, WRONG_LENGTH=0, BAD_ID=0, WRONG_REDUCE=0, IO_ERROR=0, WRONG_MAP=0}
--------------------------------------------------------------------------------
/test/resources/spark-defaults.conf:
--------------------------------------------------------------------------------
1 | spark.yarn.historyServer.address = jh1.grid.example.com:18080
2 | spark.eventLog.enabled = true
3 | spark.eventLog.compress = true
4 | spark.eventLog.dir = hdfs://nn1.grid.example.com:9000/logs/spark
5 |
--------------------------------------------------------------------------------
/test/resources/spark_event_logs/event_log_2:
--------------------------------------------------------------------------------
1 | {"Event":"SparkListenerLogStart","Spark Version":"1.4.1"}
2 | {"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"driver","Host":"127.0.0.1","Port":54157},"Maximum Memory":515411804,"Timestamp":1475761114342}
3 | {"Event":"SparkListenerEnvironmentUpdate","Spark Properties":{"spark.serializer":"org.apache.spark.serializer.KryoSerializer","spark.storage.memoryFraction":"0.3","spark.driver.memory":"2G","spark.executor.instances":"900","spark.executor.memory":"1g","spark.shuffle.memoryFraction":"0.5"},"JVM Information":{},"System Properties":{},"Classpath Entries":{}}
4 | {"Event":"SparkListenerApplicationStart","App Name":"app","App ID":"application_1","Timestamp":1475761112578,"User":"foo","App Attempt ID":"1"}
5 |
--------------------------------------------------------------------------------
/web/app/adapters/application.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 | import Ember from 'ember';
19 |
20 | export default DS.JSONAPIAdapter.extend({
21 | namespace: 'rest'
22 | });
23 |
24 | export default DS.RESTAdapter.extend({
25 | namespace: 'rest',
26 | pathForType: function (type) {
27 | return Ember.String.pluralize(type);
28 | }
29 | });
30 |
--------------------------------------------------------------------------------
/web/app/app.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 | import Resolver from './resolver';
19 | import loadInitializers from 'ember-load-initializers';
20 | import config from './config/environment';
21 |
22 | let App;
23 |
24 | Ember.MODEL_FACTORY_INJECTIONS = true;
25 |
26 | App = Ember.Application.extend({
27 | modulePrefix: config.modulePrefix,
28 | podModulePrefix: config.podModulePrefix,
29 | Resolver
30 | });
31 |
32 | loadInitializers(App, config.modulePrefix);
33 |
34 | export default App;
35 |
--------------------------------------------------------------------------------
/web/app/components/heuristic-details-list.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Component.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/components/loading-panel.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Component.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/components/map-reduce-exception.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Component.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/components/single-heuristic-detail.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Component.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/components/single-tab.js:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | * Copyright 2016 LinkedIn Corp.
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | * use this file except in compliance with the License. You may obtain a copy of
7 | * the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | * License for the specific language governing permissions and limitations under
15 | * the License.
16 | */
17 |
18 | import Ember from 'ember';
19 |
20 | export default Ember.Component.extend({
21 | });
22 |
--------------------------------------------------------------------------------
/web/app/components/user-tabs.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Component.extend({
20 | newUser: null, // this is binded to the text box for adding user
21 | showInputBox: false,
22 | actions: {
23 |
24 | /**
25 | * sets showInputBox to true to show the input box
26 | */
27 | showInput() {
28 | this.set("showInputBox", true);
29 | },
30 |
31 | /**
32 | * sets showInputBox to false to hide the input box
33 | */
34 | resetInput() {
35 | this.set("showInputBox", false);
36 | }
37 | }
38 | });
39 |
--------------------------------------------------------------------------------
/web/app/components/user-tags.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Component.extend({
20 | showInputBox: false,
21 | actions: {
22 |
23 | /**
24 | * sets showInputBox to true to show the input box
25 | */
26 | showInput() {
27 | this.set("showInputBox", true);
28 | },
29 |
30 | /**
31 | * sets showInputBox to false to hide the input box
32 | */
33 | resetInput() {
34 | this.set("showInputBox", false);
35 | }
36 | }
37 | });
38 |
--------------------------------------------------------------------------------
/web/app/controllers/app.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Controller.extend({
20 | queryParams: ['applicationid'],
21 | applicationid: null
22 | });
23 |
--------------------------------------------------------------------------------
/web/app/controllers/job.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Controller.extend({
20 | queryParams: ['jobid'],
21 | jobid: null
22 | });
23 |
--------------------------------------------------------------------------------
/web/app/controllers/not-found.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Controller.extend({
4 | queryParams: ['previous'],
5 | previous: null,
6 | });
7 |
--------------------------------------------------------------------------------
/web/app/controllers/workflow.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Controller.extend({
20 | queryParams: ['workflowid'],
21 | workflowid: null,
22 | });
23 |
--------------------------------------------------------------------------------
/web/app/helpers/eq.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | /**
20 | * helper takes two parameters and returns true if both are equal else returns false
21 | * @param params The parameters for the helper
22 | * @returns {boolean}
23 | */
24 | export function eq(params) {
25 | if (params[0] === params[1]) {
26 | return true;
27 | }
28 | return false;
29 | }
30 |
31 | export default Ember.Helper.helper(eq);
32 |
--------------------------------------------------------------------------------
/web/app/helpers/get-bootstrap-severity-code.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | /** Map to convert serverity to bootstrap class **/
20 | const SEVERITY_TO_BOOTSTRAP_MAP = {
21 | critical: "danger",
22 | severe: "severe",
23 | moderate: "warning",
24 | low: "success",
25 | none:"success"
26 | };
27 |
28 | /**
29 | * This helper takes the serverity as the parameter value and returns the corresponding bootstrap code
30 | * @param params The parameters
31 | * @returns one of {"danger","severe","warning","success"}
32 | */
33 | export function getBootstrapSeverityCode(params) {
34 | let [severity] = params;
35 | if (severity == null) {
36 | return SEVERITY_TO_BOOTSTRAP_MAP.none;
37 | }
38 | return SEVERITY_TO_BOOTSTRAP_MAP[severity.toLowerCase()];
39 | }
40 |
41 | export default Ember.Helper.helper(getBootstrapSeverityCode);
42 |
--------------------------------------------------------------------------------
/web/app/helpers/get-color-for-severity.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 |
20 | /** Map to convert severity to color **/
21 | const SEVERITY_TO_COLOR_CODE_MAP = {
22 | critical: "#D9534F",
23 | severe: "#E4804E",
24 | moderate: "#F0AD4E",
25 | low: "#5CB85C",
26 | none:"#5CB85C"
27 | };
28 |
29 | /**
30 | * Returns the color based on the severity
31 | * @param params The severity value
32 | * @returns The color based on the serverity
33 | */
34 | export function getColorForSeverity(params) {
35 | let [severity] = params;
36 | if(severity==null) {
37 | return SEVERITY_TO_COLOR_CODE_MAP.none;
38 | }
39 | return SEVERITY_TO_COLOR_CODE_MAP[severity.toLowerCase()];
40 | }
41 |
42 | export default Ember.Helper.helper(getColorForSeverity);
43 |
--------------------------------------------------------------------------------
/web/app/helpers/get-date.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | /**
20 | * Returns the date from milliseconds
21 | * @param params The date to convert
22 | * @returns The converted date
23 | */
24 | export function getDate(params) {
25 | let [date] = params;
26 | return new Date(date);
27 | }
28 |
29 | export default Ember.Helper.helper(getDate);
30 |
--------------------------------------------------------------------------------
/web/app/helpers/get-percentage.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | /**
20 | * Calculates the percentage given two params
21 | * @param params The arguments for percentage
22 | * @returns The percentage in the form PP.PP%
23 | */
24 | export function getPercentage(params) {
25 | let [arg1, arg2] = params;
26 | if(Number(arg2)===0) {
27 | return "0%";
28 | }
29 |
30 | var percentage = ( arg1 / arg2 ) * 100;
31 | var percentString = percentage.toFixed(2).toString()+ "%";
32 | return percentString;
33 | }
34 |
35 | export default Ember.Helper.helper(getPercentage);
36 |
--------------------------------------------------------------------------------
/web/app/helpers/get-resource-in-gb-hours-value.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 | const mbs_in_one_gb = 1024;
19 | const seconds_in_one_hour = 3600;
20 | export function getResourceInGbHoursValue(params/*, hash*/) {
21 | let [MBSeconds] = params;
22 | if (MBSeconds == 0) {
23 | return "0 GB Hours";
24 | }
25 |
26 | var GBseconds = MBSeconds/mbs_in_one_gb;
27 | var GBHours = GBseconds / seconds_in_one_hour;
28 |
29 | if ((GBHours * 1000).toFixed(0) == 0) {
30 | return "0 GB Hours";
31 | }
32 |
33 | var GBHoursString = GBHours.toFixed(3).toString();
34 | return GBHoursString;
35 | }
36 |
37 | export default Ember.Helper.helper(getResourceInGbHoursValue);
38 |
--------------------------------------------------------------------------------
/web/app/helpers/get-resource-in-gbhours.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | const mbs_in_one_gb = 1024;
20 | const seconds_in_one_hour = 3600;
21 |
22 | /**
23 | * Returns the resource after converting to GB Hours
24 | * @param params The resource in MB Seconds
25 | * @returns Resource in GB Hours
26 | */
27 | export function getResourceInGBHours(params) {
28 | let [MBSeconds] = params;
29 | if (MBSeconds == 0) {
30 | return "0 GB Hours";
31 | }
32 |
33 | var GBseconds = MBSeconds/mbs_in_one_gb;
34 | var GBHours = GBseconds / seconds_in_one_hour;
35 |
36 | if ((GBHours * 1000).toFixed(0) == 0) {
37 | return "0 GB Hours";
38 | }
39 |
40 | var GBHoursString = GBHours.toFixed(3).toString();
41 | GBHoursString = GBHoursString + " GB Hours";
42 | return GBHoursString;
43 | }
44 |
45 | export default Ember.Helper.helper(getResourceInGBHours);
46 |
--------------------------------------------------------------------------------
/web/app/helpers/gt.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export function gt(params) {
20 | let[first,second] = params;
21 | return first>second;
22 | }
23 |
24 | export default Ember.Helper.helper(gt);
25 |
--------------------------------------------------------------------------------
/web/app/helpers/not-empty.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | /**
20 | * Checks if a given string is empty
21 | * @param params
22 | * @returns {boolean}
23 | */
24 | export function notEmpty(params) {
25 | let [id] = params;
26 | if(id=="" || id==null) {
27 | return false;
28 | }
29 | return true;
30 | }
31 |
32 | export default Ember.Helper.helper(notEmpty);
33 |
--------------------------------------------------------------------------------
/web/app/helpers/url-encode.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | /**
20 | * Encodes a url
21 | * @param params The url to encode
22 | * @returns The encoded url
23 | */
24 | export function urlEncode(params) {
25 | let [uri] = params;
26 | return encodeURIComponent(uri);
27 | }
28 |
29 | export default Ember.Helper.helper(urlEncode);
30 |
--------------------------------------------------------------------------------
/web/app/index.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | DrElephant
23 |
24 |
25 |
26 | {{content-for "head"}}
27 |
28 |
29 |
30 |
31 | {{content-for "head-footer"}}
32 |
33 |
34 | {{content-for "body"}}
35 |
36 |
37 |
38 |
39 | {{content-for "body-footer"}}
40 |
41 |
42 |
--------------------------------------------------------------------------------
/web/app/initializers/component-router-injector.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | export function initialize(application) {
18 | // Injects all Ember components with a router object:
19 | application.inject('component', 'router', 'router:main');
20 | }
21 |
22 | export default {
23 | name: 'component-router-injector',
24 | initialize: initialize
25 | };
26 |
--------------------------------------------------------------------------------
/web/app/initializers/notification-injector.js:
--------------------------------------------------------------------------------
1 | export function initialize(application) {
2 | application.inject('controller', 'notifications', 'service:notification-messages');
3 | }
4 |
5 | export default {
6 | name: 'inject-notifications',
7 | initialize: initialize
8 | };
9 |
--------------------------------------------------------------------------------
/web/app/models/application-summary.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.Model.extend({
20 | username: DS.attr("string"),
21 | starttime: DS.attr("date"),
22 | finishtime: DS.attr("date"),
23 | runtime: DS.attr("string"),
24 | waittime: DS.attr("string"),
25 | resourceused: DS.attr("string"),
26 | resourcewasted: DS.attr("string"),
27 | severity: DS.attr("string"),
28 | heuristicsummary: DS.attr(),
29 | jobname: DS.attr("string")
30 | });
31 |
32 |
--------------------------------------------------------------------------------
/web/app/models/application.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.Model.extend({
20 | username: DS.attr('string'),
21 | jobtype: DS.attr('string'),
22 | mapreducejobname: DS.attr('string'),
23 | starttime: DS.attr('date'),
24 | finishtime: DS.attr('date'),
25 | runtime: DS.attr('string'),
26 | waittime: DS.attr('string'),
27 | resourceused: DS.attr('string'),
28 | resourcewasted: DS.attr('string'),
29 | severity: DS.attr('string'),
30 | trackingurl : DS.attr('string'),
31 | jobexecid: DS.attr('string'),
32 | jobdefid: DS.attr('string'),
33 | flowexecid: DS.attr('string'),
34 | flowdefid: DS.attr('string'),
35 | yarnappheuristicresults: DS.attr(),
36 | queue: DS.attr("string")
37 | });
38 |
--------------------------------------------------------------------------------
/web/app/models/dashboard-summary.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.Model.extend({
20 | total: DS.attr("string"),
21 | critical: DS.attr("string"),
22 | severe: DS.attr("string"),
23 | moderate: DS.attr("string"),
24 | low: DS.attr("string"),
25 | none: DS.attr("string")
26 | });
27 |
--------------------------------------------------------------------------------
/web/app/models/exception-status.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.Model.extend({
20 | exceptionenabled: DS.attr("string"),
21 | schedulers: DS.attr()
22 | });
23 |
--------------------------------------------------------------------------------
/web/app/models/search-option.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.Model.extend({
20 | jobcategory: DS.attr(),
21 | severities: DS.attr()
22 | });
23 |
--------------------------------------------------------------------------------
/web/app/models/search-result.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.Model.extend({
20 | start: DS.attr(),
21 | end: DS.attr(),
22 | total: DS.attr(),
23 | summaries: DS.attr()
24 | });
25 |
--------------------------------------------------------------------------------
/web/app/models/user-detail.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.Model.extend({
20 | totalapplications: DS.attr("string"),
21 | totalworkflows: DS.attr("string"),
22 | totaljobs: DS.attr("string"),
23 | resourceused: DS.attr("string"),
24 | resourcewasted: DS.attr("string"),
25 | runtime: DS.attr("string"),
26 | waittime: DS.attr("string"),
27 | summaries: DS.attr(),
28 | total: DS.attr(),
29 | start: DS.attr(),
30 | end: DS.attr()
31 | });
32 |
--------------------------------------------------------------------------------
/web/app/models/workflow-exception.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.Model.extend({
20 | name: DS.attr("string"),
21 | type: DS.attr("string"),
22 | applications: DS.attr(),
23 | status: DS.attr("string"),
24 | exceptionSummary: DS.attr("string")
25 | });
26 |
--------------------------------------------------------------------------------
/web/app/models/workflow-summary.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 | import Scheduler from 'dr-elephant/utils/scheduler';
19 |
20 | export default DS.Model.extend({
21 | username: DS.attr("string"),
22 | starttime: DS.attr("date"),
23 | finishtime: DS.attr("date"),
24 | runtime: DS.attr("string"),
25 | waittime: DS.attr("string"),
26 | resourceused: DS.attr("string"),
27 | resourcewasted: DS.attr("string"),
28 | severity: DS.attr("string"),
29 | jobsseverity: DS.attr(),
30 | queue: DS.attr("string"),
31 | scheduler: DS.attr("string"),
32 | flowdefid: DS.attr("string"),
33 | flowexecid: DS.attr("string"),
34 | flowname: Ember.computed('flowdefid', 'flowexecid', 'scheduler', function () {
35 | var scheduler = new Scheduler();
36 | return scheduler.getFlowName(this.get('flowexecid'), this.get('flowdefid'), this.get('scheduler'));
37 | })
38 | });
39 |
--------------------------------------------------------------------------------
/web/app/resolver.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Resolver from 'ember-resolver';
18 |
19 | export default Resolver;
20 |
--------------------------------------------------------------------------------
/web/app/routes/app.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Route.extend({
20 |
21 | beforeModel: function (transition) {
22 | this.applicationid = transition.queryParams.applicationid;
23 | },
24 |
25 | model(){
26 | this.applications = this.store.queryRecord('application', {applicationid: this.get("applicationid")});
27 | return this.applications;
28 | },
29 | actions: {
30 | error(error, transition) {
31 | if (error.errors[0].status == 404) {
32 | return this.transitionTo('not-found', { queryParams: {'previous': window.location.href}});
33 | }
34 | }
35 | }
36 | });
37 |
--------------------------------------------------------------------------------
/web/app/routes/dashboard.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Route.extend({
20 | afterModel() {
21 | this.transitionTo('dashboard.workflow');
22 | },
23 | model(){
24 | this.dashboardSummary = this.store.queryRecord('dashboard-summary',{});
25 | return this.dashboardSummary;
26 | }
27 | });
28 |
--------------------------------------------------------------------------------
/web/app/routes/dashboard/job.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 | import Users from 'dr-elephant/models/users';
19 |
20 | export default Ember.Route.extend({
21 | users: new Users(),
22 | beforeModel(){
23 | this.usernames = this.users.getUsernames();
24 | this.set('usernames',this.users.getUsernames());
25 | },
26 | model(){
27 | /** Do not load jobs here, jobs will be loaded in afterModel **/
28 | return Ember.RSVP.hash({
29 | usernames: this.users.getUsernames(),
30 | jobs: {}
31 | });
32 | },
33 | afterModel() {
34 | /** once the page is rendered, click on the current user tab **/
35 | Ember.run.scheduleOnce('afterRender', this, function() {
36 | if(this.users.getActiveUser()==null) {
37 | Ember.$("#all a").trigger("click");
38 | } else {
39 | Ember.$("#" + this.users.getActiveUser()).trigger("click");
40 | }
41 | });
42 | }
43 | });
44 |
--------------------------------------------------------------------------------
/web/app/routes/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Route.extend({
20 | beforeModel() {
21 | this.transitionTo('dashboard.workflow');
22 | }
23 | });
24 |
--------------------------------------------------------------------------------
/web/app/routes/job.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Route.extend({
20 | beforeModel: function (transition) {
21 | this.jobid = transition.queryParams.jobid;
22 | },
23 | model(){
24 | this.jobs = this.store.queryRecord('job', {jobid: this.get("jobid")});
25 | return this.jobs;
26 | },
27 | actions: {
28 | error(error, transition) {
29 | if (error.errors[0].status == 404) {
30 | return this.transitionTo('not-found', { queryParams: {'previous': window.location.href}});
31 | }
32 | }
33 | }
34 | });
35 |
--------------------------------------------------------------------------------
/web/app/routes/not-found.js:
--------------------------------------------------------------------------------
1 | import Ember from 'ember';
2 |
3 | export default Ember.Route.extend({
4 |
5 | });
6 |
--------------------------------------------------------------------------------
/web/app/routes/work-in-progress.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default Ember.Route.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/serializers/app.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.RESTSerializer.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/serializers/application-summary.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.RESTSerializer.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/serializers/application.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.RESTSerializer.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/serializers/job-summary.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.RESTSerializer.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/serializers/job.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.RESTSerializer.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/serializers/workflow-summary.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.RESTSerializer.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/serializers/workflow.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import DS from 'ember-data';
18 |
19 | export default DS.RESTSerializer.extend({
20 | });
21 |
--------------------------------------------------------------------------------
/web/app/styles/partials/aggregated-metrics.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | .aggregated-metrics-block {
18 | font-size: 13px;
19 | color: #5e6365;
20 | font-family: 'Shift', sans-serif;
21 | padding-left: 10px;
22 | }
23 |
24 | .usedmemory-td {
25 | width: 175px;
26 | }
27 |
28 | .wastedmemory-td {
29 | width: 100px
30 | }
31 |
32 | .runtime-td {
33 | width: 120px;
34 | }
35 |
36 | .waittime-td {
37 | width: 100px;
38 | }
39 |
40 |
--------------------------------------------------------------------------------
/web/app/styles/partials/application-menu.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | /** Dashboard menu **/
18 | .menu-workflow {
19 | width: 100%;
20 | }
21 |
22 | .wf-button {
23 | background-color: white; /* Green */
24 | display: inline-block;
25 | cursor: pointer;
26 | border-radius: 3px;
27 | font-size: 14px;
28 | font-weight: 500;
29 | border: #0084BF 1px solid;
30 | color: #0084BF;
31 | }
32 |
33 | .wf-button:hover {
34 | background-color: #008cc9;
35 | color: white;
36 | }
37 |
38 | .menu-workflow > .active {
39 | background-color: #008cc9;
40 | color: white;
41 | opacity: 0.7;
42 | border: 1px #008cc9 solid;
43 | box-shadow: none;
44 | }
45 |
--------------------------------------------------------------------------------
/web/app/styles/partials/application.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | body {
18 | background: #E7E9EC !important; /* Adding !important forces the browser to overwrite the default style applied by Bootstrap */
19 | }
20 |
--------------------------------------------------------------------------------
/web/app/styles/partials/heuristic-detail.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | .heuristic-item:hover {
18 | background: grey;
19 | }
20 |
21 | .heuristic-detail-table {
22 | width: 100%;
23 | margin: 10px 20px 10px 20px;
24 | }
25 |
26 | .heuristic-detail-table td {
27 | width: 50%;
28 | }
29 |
--------------------------------------------------------------------------------
/web/app/styles/partials/jobs-severity.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | /**
18 | jobs severity
19 | **/
20 |
21 | .horizontal-list {
22 | margin: 0;
23 | padding: 0;
24 | list-style-type: none;
25 | }
26 |
27 | .horizontal-list li {
28 | float: left;
29 | }
30 |
31 | .scnd-font-color {
32 | color: #9099b7;
33 | }
34 |
35 | /** severity text **/
36 |
37 | .severity-horizontal-list li {
38 | width: 75px;
39 | border: none;
40 | text-align: center;
41 | }
42 |
43 | .severity-text {
44 | margin: 0;
45 | padding: 0px 0 5px;
46 | font-size: 12px;
47 | }
48 |
49 | .severity-count {
50 | margin: 0;
51 | padding: 0 0 0px 0px;
52 | font-size: 20px;
53 | }
54 |
55 | .job-severity-block {
56 | padding-bottom: 5px;
57 | }
58 |
--------------------------------------------------------------------------------
/web/app/styles/partials/loading-panel.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | .loading-panel-div {
18 | background: white; width: 100%;height: 800px; opacity: 0.5;
19 | }
20 |
21 | .loading-image {
22 | margin: auto; display: block; padding-top: 200px;
23 | }
24 |
--------------------------------------------------------------------------------
/web/app/styles/partials/not-found.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | .not-found-container {
18 | margin-left: 100px;
19 | margin-top: 100px;
20 | margin-bottom: 100px;
21 | }
--------------------------------------------------------------------------------
/web/app/styles/partials/search-panel.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | .search-component {
18 | height: 35px;
19 | margin: 0px;
20 | }
21 |
--------------------------------------------------------------------------------
/web/app/styles/partials/user-tags.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | .user-tags {
18 | margin: 10px 10px 10px 10px;
19 | padding: 5px 5px 5px 5px;
20 | }
21 |
22 | .tag-list {
23 | margin-right: 10px;
24 | padding:10px;
25 | }
--------------------------------------------------------------------------------
/web/app/templates/components/application-list.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 | {{#each applications as |application|}}
20 | {{single-application application=application}}
21 | {{/each}}
--------------------------------------------------------------------------------
/web/app/templates/components/flow-list.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 | {{#each workflows as |flow|}}
20 | {{single-flow flow=flow}}
21 | {{/each}}
--------------------------------------------------------------------------------
/web/app/templates/components/heuristic-details-list.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 | {{#each heuristic-details as |yarnappheuristicresult|}}
20 | {{single-heuristic-detail yarnappheuristicresult=yarnappheuristicresult}}
21 | {{/each}}
--------------------------------------------------------------------------------
/web/app/templates/components/heuristics-summary.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 | {{#each heuristics as |heuristic|}}
20 |
{{heuristic.name}}
21 | {{/each}}
22 |
--------------------------------------------------------------------------------
/web/app/templates/components/job-list.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 | {{#each jobs as |job|}}
20 | {{single-job job=job}}
21 | {{/each}}
--------------------------------------------------------------------------------
/web/app/templates/components/jobs-severity.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
20 | {{#each jobsseverity as |severity|}}
21 |
22 |
{{severity.count}}
23 |
{{severity.severity}}
24 |
25 | {{/each}}
26 |
--------------------------------------------------------------------------------
/web/app/templates/components/loading-panel.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
20 |
21 |
{{message}}
22 |
--------------------------------------------------------------------------------
/web/app/templates/components/paging-panel.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
--------------------------------------------------------------------------------
/web/app/templates/components/single-tab.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
--------------------------------------------------------------------------------
/web/app/templates/components/tasks-severity.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
20 | {{#each tasksseverity as |severity|}}
21 |
22 |
{{severity.count}}
23 |
{{severity.severity}}
24 |
25 | {{/each}}
26 |
--------------------------------------------------------------------------------
/web/app/templates/components/user-tags.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
--------------------------------------------------------------------------------
/web/app/templates/dashboard/app.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 | {{!-- The user tabs. Tabs can be added and deleted --}}
20 | {{user-tabs deleteTab=(action "deleteTab") setTab=(action "changeTab") addTab=(action "addTab") usernames=model.usernames}}
21 | {{#if loading}}
22 | {{loading-panel message="loading applications... "}}
23 | {{else}}
24 | {{application-list applications=model.applications}}
25 | {{/if}}
26 |
--------------------------------------------------------------------------------
/web/app/templates/dashboard/job.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 | {{!-- The user tabs. Tabs can be added and deleted --}}
20 | {{user-tabs deleteTab=(action "deleteTab") setTab=(action "changeTab") addTab=(action "addTab") usernames=model.usernames}}
21 | {{#if loading}}
22 | {{loading-panel message="loading jobs..."}}
23 | {{else}}
24 | {{job-list jobs=model.jobs}}
25 | {{/if}}
--------------------------------------------------------------------------------
/web/app/templates/dashboard/workflow.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 | {{!-- The user tabs. Tabs can be added and deleted --}}
20 | {{user-tabs deleteTab=(action "deleteTab") setTab=(action "changeTab") addTab=(action "addTab") usernames=model.usernames showInputBox=showInputBox}}
21 |
22 | {{!-- The list of flows of the user --}}
23 | {{#if loading}}
24 | {{loading-panel message="loading flows..."}}
25 | {{else}}
26 | {{flow-list workflows=model.workflows}}
27 | {{/if}}
28 |
--------------------------------------------------------------------------------
/web/app/templates/loading.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
loading...
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/web/app/templates/not-found.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
Oops!
27 |
I can't seem to find what you are looking for.
28 |
29 |
30 |
You can go {{#link-to "dashboard.workflow" class="active"}}home{{/link-to}} or {{#link-to "search"}}search{{/link-to}} something.
42 |
--------------------------------------------------------------------------------
/web/app/templates/work-in-progress.hbs:
--------------------------------------------------------------------------------
1 | {{!--
2 |
3 | Copyright 2016 LinkedIn Corp.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not
6 | use this file except in compliance with the License. You may obtain a copy of
7 | the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 | License for the specific language governing permissions and limitations under
15 | the License.
16 |
17 | --}}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
Work in progress
28 |
29 |
This page is work in progress. Please check back after some time
30 |
31 |
32 |
You can go {{#link-to "dashboard.workflow" class="active"}}home{{/link-to}} or {{#link-to "search"}}
33 | search{{/link-to}} something.
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/web/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dr-elephant",
3 | "dependencies": {
4 | "ember": "2.6.2",
5 | "ember-cli-shims": "0.1.1",
6 | "ember-cli-test-loader": "0.2.2",
7 | "ember-qunit-notifications": "0.1.0",
8 | "bootstrap": "3.3.7",
9 | "d3": "4.2.6",
10 | "bootstrap-datepicker": "^1.6.4"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/web/public/assets/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/web/public/assets/images/loading.gif
--------------------------------------------------------------------------------
/web/public/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/web/public/assets/images/logo.png
--------------------------------------------------------------------------------
/web/public/assets/images/runtime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/web/public/assets/images/runtime.png
--------------------------------------------------------------------------------
/web/public/assets/images/usedmemory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/web/public/assets/images/usedmemory.png
--------------------------------------------------------------------------------
/web/public/assets/images/waittime.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/web/public/assets/images/waittime.png
--------------------------------------------------------------------------------
/web/public/assets/images/wastedmemory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linkedin/dr-elephant/916c25d5845f534ec2648fe17d978cd48a8bd284/web/public/assets/images/wastedmemory.png
--------------------------------------------------------------------------------
/web/testem.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | /*jshint node:true*/
18 | module.exports = {
19 | "framework": "qunit",
20 | "test_page": "tests/index.html?hidepassed",
21 | "disable_watching": true,
22 | "launch_in_ci": [
23 | "PhantomJS"
24 | ],
25 | "launch_in_dev": [
26 | "PhantomJS",
27 | "Chrome"
28 | ]
29 | };
30 |
--------------------------------------------------------------------------------
/web/tests/helpers/destroy-app.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 |
19 | export default function destroyApp(application) {
20 | Ember.run(application, 'destroy');
21 | }
22 |
--------------------------------------------------------------------------------
/web/tests/helpers/module-for-acceptance.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { module } from 'qunit';
18 | import Ember from 'ember';
19 | import startApp from '../helpers/start-app';
20 | import destroyApp from '../helpers/destroy-app';
21 |
22 | const { RSVP: { Promise } } = Ember;
23 |
24 | export default function(name, options = {}) {
25 | module(name, {
26 | beforeEach() {
27 | this.application = startApp();
28 |
29 | if (options.beforeEach) {
30 | return options.beforeEach.apply(this, arguments);
31 | }
32 | },
33 |
34 | afterEach() {
35 | let afterEach = options.afterEach && options.afterEach.apply(this, arguments);
36 | return Promise.resolve(afterEach).then(() => destroyApp(this.application));
37 | }
38 | });
39 | }
40 |
--------------------------------------------------------------------------------
/web/tests/helpers/resolver.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Resolver from '../../resolver';
18 | import config from '../../config/environment';
19 |
20 | const resolver = Resolver.create();
21 |
22 | resolver.namespace = {
23 | modulePrefix: config.modulePrefix,
24 | podModulePrefix: config.podModulePrefix
25 | };
26 |
27 | export default resolver;
28 |
--------------------------------------------------------------------------------
/web/tests/helpers/start-app.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import Ember from 'ember';
18 | import Application from '../../app';
19 | import config from '../../config/environment';
20 |
21 | export default function startApp(attrs) {
22 | let application;
23 |
24 | let attributes = Ember.merge({}, config.APP);
25 | attributes = Ember.merge(attributes, attrs); // use defaults, but you can override;
26 |
27 | Ember.run(() => {
28 | application = Application.create(attributes);
29 | application.setupForTesting();
30 | application.injectTestHelpers();
31 | });
32 |
33 | return application;
34 | }
35 |
--------------------------------------------------------------------------------
/web/tests/integration/components/jobs-severity-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { moduleForComponent, test } from 'ember-qunit';
18 | import hbs from 'htmlbars-inline-precompile';
19 |
20 | moduleForComponent('jobs-severity', 'Integration | Component | jobs severity', {
21 | integration: true
22 | });
23 |
24 | test('Tests for the job severity component', function(assert) {
25 |
26 | this.set("jobsseverity", [
27 | {
28 | severity: "Severe",
29 | count: 1
30 | },
31 | {
32 | severity: "Moderate",
33 | count: 2
34 | },
35 | {
36 | severity: "Critical",
37 | count: 1
38 | }
39 | ]);
40 | this.render(hbs`{{jobs-severity jobsseverity=jobsseverity}}`);
41 |
42 | assert.equal(this.$('#job_severities').text().trim().split("\n").join("").replace(/ /g, ''), '1Severe2Moderate1Critical');
43 |
44 | });
45 |
--------------------------------------------------------------------------------
/web/tests/integration/components/single-tab-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { moduleForComponent, test } from 'ember-qunit';
18 | import hbs from 'htmlbars-inline-precompile';
19 |
20 | moduleForComponent('single-tab', 'Integration | Component | single tab', {
21 | integration: true
22 | });
23 |
24 | test('Test for single-tab component', function(assert) {
25 |
26 | this.set("name","user1");
27 | this.render(hbs`{{single-tab name=name}}`);
28 | assert.equal(this.$().text().trim(), 'user1');
29 |
30 | this.set("name","");
31 | this.render(hbs`{{single-tab name=name}}`);
32 | assert.equal(this.$().text().trim(), '');
33 |
34 |
35 | this.set("name","all");
36 | this.render(hbs`{{single-tab name=name}}`);
37 | assert.equal(this.$().text().trim(), 'all');
38 |
39 | });
40 |
--------------------------------------------------------------------------------
/web/tests/test-helper.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import resolver from './helpers/resolver';
18 | import {
19 | setResolver
20 | } from 'ember-qunit';
21 |
22 | setResolver(resolver);
23 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/eq-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { eq } from 'dr-elephant/helpers/eq';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | eq');
21 |
22 | test('Test for eq helper', function(assert) {
23 | let result = eq([100,100]);
24 | assert.ok(result);
25 | result = eq([10,100]);
26 | assert.ok(!result);
27 | result = eq(["100","100"]);
28 | assert.ok(result);
29 | result = eq(["100","10"]);
30 | assert.ok(!result);
31 | result = eq(["100",100]);
32 | assert.ok(!result);
33 | result = eq([100.00,100.00]);
34 | assert.ok(result);
35 | result = eq([100.0,100.1]);
36 | assert.ok(!result);
37 | });
38 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/get-bootstrap-severity-code-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { getBootstrapSeverityCode } from 'dr-elephant/helpers/get-bootstrap-severity-code';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | get bootstrap severity code');
21 |
22 | test('Test for getBootstrapSeverityCode helper', function(assert) {
23 | let result = getBootstrapSeverityCode(["critical"]);
24 | assert.equal("danger",result);
25 | result = getBootstrapSeverityCode(["severe"]);
26 | assert.equal("severe",result);
27 | result = getBootstrapSeverityCode(["moderate"]);
28 | assert.equal("warning",result);
29 | result = getBootstrapSeverityCode(["low"]);
30 | assert.equal("success",result);
31 | result = getBootstrapSeverityCode(["none"]);
32 | assert.equal("success",result);
33 | });
34 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/get-color-for-severity-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { getColorForSeverity } from 'dr-elephant/helpers/get-color-for-severity';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | get color for severity');
21 |
22 | test('Test for getColorForSeverity helper', function(assert) {
23 | let result = getColorForSeverity(["critical"]);
24 | assert.equal(result,"#D9534F");
25 | result = getColorForSeverity(["severe"]);
26 | assert.equal(result,"#E4804E");
27 | result = getColorForSeverity(["moderate"]);
28 | assert.equal(result,"#F0AD4E");
29 | result = getColorForSeverity(["low"]);
30 | assert.equal(result,"#5CB85C");
31 | result = getColorForSeverity(["none"]);
32 | assert.equal(result,"#5CB85C");
33 | });
34 |
35 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/get-date-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { getDate } from 'dr-elephant/helpers/get-date';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | get date');
21 |
22 | test('test for getDate helper', function(assert) {
23 | let result = getDate([42]);
24 | assert.ok(result);
25 | });
26 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/get-duration-breakdown-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { getDurationBreakdown } from 'dr-elephant/helpers/get-duration-breakdown';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | get duration breakdown');
21 |
22 | test('Test for getDurationBreakdown helper', function(assert) {
23 | let result = getDurationBreakdown([10000000]);
24 | assert.equal(result,"02:46:40");
25 | result = getDurationBreakdown([0]);
26 | assert.equal(result,"00:00:00");
27 | result = getDurationBreakdown([1]);
28 | assert.equal(result,"00:00:00");
29 | result = getDurationBreakdown([1000]);
30 | assert.equal(result,"00:00:01");
31 | result = getDurationBreakdown([3600000]);
32 | assert.equal(result,"01:00:00");
33 | result = getDurationBreakdown([60000]);
34 | assert.equal(result,"00:01:00");
35 | });
36 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/get-percentage-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { getPercentage } from 'dr-elephant/helpers/get-percentage';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | get percentage');
21 |
22 | test('Test for getPercentage helper', function(assert) {
23 | let result = getPercentage([5,200]);
24 | assert.equal(result,"2.50%");
25 | result = getPercentage([50,200]);
26 | assert.equal(result,"25.00%");
27 | result = getPercentage([0,100]);
28 | assert.equal(result,"0.00%");
29 | result = getPercentage([100,100]);
30 | assert.equal(result,"100.00%");
31 | result = getPercentage([0,0]);
32 | assert.equal(result,"0%");
33 | result = getPercentage([1,20]);
34 | assert.equal(result,"5.00%");
35 | result = getPercentage([100,20]);
36 | assert.equal(result,"500.00%");
37 | });
38 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/get-resource-in-gbhours-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { getResourceInGBHours } from 'dr-elephant/helpers/get-resource-in-gbhours';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | get resource in gbhours');
21 |
22 | test('Test for getResourceInGBHours helper', function(assert) {
23 | let result = getResourceInGBHours([100001010]);
24 | assert.equal(result,"27.127 GB Hours");
25 | result = getResourceInGBHours([0]);
26 | assert.equal(result,"0 GB Hours");
27 | result = getResourceInGBHours([100]);
28 | assert.equal(result,"0 GB Hours");
29 | result = getResourceInGBHours([-1]);
30 | assert.equal(result,"0 GB Hours");
31 | result = getResourceInGBHours([33]);
32 | assert.equal(result,"0 GB Hours");
33 | result = getResourceInGBHours([3080328048302480]);
34 | assert.equal(result,"835592461.020 GB Hours");
35 | });
36 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/gt-test.js:
--------------------------------------------------------------------------------
1 |
2 | import { gt } from 'dr-elephant/helpers/gt';
3 | import { module, test } from 'qunit';
4 |
5 | module('Unit | Helper | gt');
6 |
7 | // Replace this with your real tests.
8 | test('it works', function(assert) {
9 | let result = gt([42,30]);
10 | assert.ok(result);
11 | result = gt([30,42])
12 | assert.ok(!result);
13 | result = gt([-1,30]);
14 | assert.ok(!result);
15 | result = gt([30,-1]);
16 | assert.ok(result);
17 | result = gt([-1,-5]);
18 | assert.ok(result);
19 | result = gt([-9,-5]);
20 | assert.ok(!result);
21 | });
22 |
23 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/not-empty-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { notEmpty } from 'dr-elephant/helpers/not-empty';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | not empty');
21 |
22 | test('Test for notEmpty helper', function(assert) {
23 | let result = notEmpty(["this is not empty"]);
24 | assert.ok(result);
25 | result = notEmpty([""]);
26 | assert.ok(!result);
27 | });
28 |
--------------------------------------------------------------------------------
/web/tests/unit/helpers/url-encode-test.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2016 LinkedIn Corp.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 | * use this file except in compliance with the License. You may obtain a copy of
6 | * 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, WITHOUT
12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 | * License for the specific language governing permissions and limitations under
14 | * the License.
15 | */
16 |
17 | import { urlEncode } from 'dr-elephant/helpers/url-encode';
18 | import { module, test } from 'qunit';
19 |
20 | module('Unit | Helper | url encode');
21 |
22 | test('Test for urlEncode helper', function(assert) {
23 | let result = urlEncode(["http://localhost:8090?flowid=abc&page=5&heuristic=Mapper Spill Heuristic"]);
24 | assert.equal(result,"http%3A%2F%2Flocalhost%3A8090%3Fflowid%3Dabc%26page%3D5%26heuristic%3DMapper%20Spill%20Heuristic");
25 | });
26 |
--------------------------------------------------------------------------------