├── .auroraversion ├── .bowerrc ├── .gitattributes ├── .github └── pull_request_template.md ├── .gitignore ├── .isort.cfg ├── .reviewboardrc ├── 3rdparty ├── javascript │ └── scheduler │ │ └── assets │ │ ├── bower_components │ │ ├── bootstrap │ │ │ ├── .bower.json │ │ │ ├── Gruntfile.js │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ ├── dist │ │ │ │ ├── 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 │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ ├── grunt │ │ │ │ ├── bs-glyphicons-data-generator.js │ │ │ │ ├── bs-lessdoc-parser.js │ │ │ │ ├── bs-raw-files-generator.js │ │ │ │ └── shrinkwrap.js │ │ │ ├── js │ │ │ │ ├── affix.js │ │ │ │ ├── alert.js │ │ │ │ ├── button.js │ │ │ │ ├── carousel.js │ │ │ │ ├── collapse.js │ │ │ │ ├── dropdown.js │ │ │ │ ├── modal.js │ │ │ │ ├── popover.js │ │ │ │ ├── scrollspy.js │ │ │ │ ├── tab.js │ │ │ │ ├── tooltip.js │ │ │ │ └── transition.js │ │ │ ├── less │ │ │ │ ├── alerts.less │ │ │ │ ├── badges.less │ │ │ │ ├── bootstrap.less │ │ │ │ ├── breadcrumbs.less │ │ │ │ ├── button-groups.less │ │ │ │ ├── buttons.less │ │ │ │ ├── carousel.less │ │ │ │ ├── close.less │ │ │ │ ├── code.less │ │ │ │ ├── component-animations.less │ │ │ │ ├── dropdowns.less │ │ │ │ ├── forms.less │ │ │ │ ├── glyphicons.less │ │ │ │ ├── grid.less │ │ │ │ ├── input-groups.less │ │ │ │ ├── jumbotron.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── media.less │ │ │ │ ├── mixins.less │ │ │ │ ├── modals.less │ │ │ │ ├── navbar.less │ │ │ │ ├── navs.less │ │ │ │ ├── normalize.less │ │ │ │ ├── pager.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── popovers.less │ │ │ │ ├── print.less │ │ │ │ ├── progress-bars.less │ │ │ │ ├── responsive-utilities.less │ │ │ │ ├── scaffolding.less │ │ │ │ ├── tables.less │ │ │ │ ├── theme.less │ │ │ │ ├── thumbnails.less │ │ │ │ ├── tooltip.less │ │ │ │ ├── type.less │ │ │ │ ├── utilities.less │ │ │ │ ├── variables.less │ │ │ │ └── wells.less │ │ │ ├── package.json │ │ │ └── test-infra │ │ │ │ ├── README.md │ │ │ │ ├── npm-shrinkwrap.canonical.json │ │ │ │ ├── requirements.txt │ │ │ │ ├── s3_cache.py │ │ │ │ ├── sauce_browsers.yml │ │ │ │ └── uncached-npm-install.sh │ │ └── jquery │ │ │ ├── .bower.json │ │ │ ├── MIT-LICENSE.txt │ │ │ ├── bower.json │ │ │ ├── dist │ │ │ ├── jquery.js │ │ │ ├── jquery.min.js │ │ │ └── jquery.min.map │ │ │ └── src │ │ │ ├── ajax.js │ │ │ ├── ajax │ │ │ ├── jsonp.js │ │ │ ├── load.js │ │ │ ├── parseJSON.js │ │ │ ├── parseXML.js │ │ │ ├── script.js │ │ │ ├── var │ │ │ │ ├── nonce.js │ │ │ │ └── rquery.js │ │ │ └── xhr.js │ │ │ ├── attributes.js │ │ │ ├── attributes │ │ │ ├── attr.js │ │ │ ├── classes.js │ │ │ ├── prop.js │ │ │ ├── support.js │ │ │ └── val.js │ │ │ ├── callbacks.js │ │ │ ├── core.js │ │ │ ├── core │ │ │ ├── access.js │ │ │ ├── init.js │ │ │ ├── parseHTML.js │ │ │ ├── ready.js │ │ │ └── var │ │ │ │ └── rsingleTag.js │ │ │ ├── css.js │ │ │ ├── css │ │ │ ├── addGetHookIf.js │ │ │ ├── curCSS.js │ │ │ ├── defaultDisplay.js │ │ │ ├── hiddenVisibleSelectors.js │ │ │ ├── support.js │ │ │ ├── swap.js │ │ │ └── var │ │ │ │ ├── cssExpand.js │ │ │ │ ├── getStyles.js │ │ │ │ ├── isHidden.js │ │ │ │ ├── rmargin.js │ │ │ │ └── rnumnonpx.js │ │ │ ├── data.js │ │ │ ├── data │ │ │ ├── Data.js │ │ │ ├── accepts.js │ │ │ └── var │ │ │ │ ├── data_priv.js │ │ │ │ └── data_user.js │ │ │ ├── deferred.js │ │ │ ├── deprecated.js │ │ │ ├── dimensions.js │ │ │ ├── effects.js │ │ │ ├── effects │ │ │ ├── Tween.js │ │ │ └── animatedSelector.js │ │ │ ├── event.js │ │ │ ├── event │ │ │ ├── alias.js │ │ │ └── support.js │ │ │ ├── exports │ │ │ ├── amd.js │ │ │ └── global.js │ │ │ ├── intro.js │ │ │ ├── jquery.js │ │ │ ├── manipulation.js │ │ │ ├── manipulation │ │ │ ├── _evalUrl.js │ │ │ ├── support.js │ │ │ └── var │ │ │ │ └── rcheckableType.js │ │ │ ├── offset.js │ │ │ ├── outro.js │ │ │ ├── queue.js │ │ │ ├── queue │ │ │ └── delay.js │ │ │ ├── selector-native.js │ │ │ ├── selector-sizzle.js │ │ │ ├── selector.js │ │ │ ├── serialize.js │ │ │ ├── traversing.js │ │ │ ├── traversing │ │ │ ├── findFilter.js │ │ │ └── var │ │ │ │ └── rneedsContext.js │ │ │ ├── var │ │ │ ├── arr.js │ │ │ ├── class2type.js │ │ │ ├── concat.js │ │ │ ├── hasOwn.js │ │ │ ├── indexOf.js │ │ │ ├── pnum.js │ │ │ ├── push.js │ │ │ ├── rnotwhite.js │ │ │ ├── slice.js │ │ │ ├── strundefined.js │ │ │ ├── support.js │ │ │ └── toString.js │ │ │ └── wrap.js │ │ └── js │ │ └── thrift.js └── python │ ├── BUILD │ └── requirements.txt ├── CHANGELOG ├── CONTRIBUTING.md ├── KEYS ├── LICENSE ├── NOTICE ├── README.md ├── RELEASE-NOTES.md ├── Vagrantfile ├── api └── src │ └── main │ └── thrift │ └── org │ └── apache │ ├── aurora │ └── gen │ │ ├── BUILD │ │ ├── api.thrift │ │ ├── storage.thrift │ │ └── test.thrift │ └── thermos │ ├── BUILD │ └── thermos_internal.thrift ├── build-support ├── embed_runner_in_executor.py ├── generate-build-properties ├── hooks │ └── pre-commit ├── jenkins │ ├── build.sh │ └── review_feedback.py ├── packer │ ├── README.md │ ├── aurora-release.json │ ├── aurora.json │ └── build.sh ├── pex ├── python │ ├── checkstyle-check │ ├── clean.sh │ ├── isort-check │ ├── isort-run │ ├── make-mesos-native-egg │ └── make-pycharm-virtualenv ├── release │ ├── changelog │ ├── make-python-sdists │ ├── release │ ├── release-candidate │ └── verify-release-candidate ├── thrift │ ├── .gitignore │ └── thriftw ├── tools │ └── list-missing-shipits └── virtualenv ├── build.gradle ├── buildSrc ├── build.gradle ├── gradle.properties └── src │ └── main │ └── groovy │ └── org │ └── apache │ └── aurora │ └── build │ ├── ThriftEntitiesPlugin.groovy │ └── ThriftPlugin.groovy ├── commons └── src │ ├── main │ └── java │ │ └── org │ │ └── apache │ │ └── aurora │ │ └── common │ │ ├── application │ │ ├── Lifecycle.java │ │ ├── ShutdownRegistry.java │ │ └── ShutdownStage.java │ │ ├── base │ │ ├── Command.java │ │ ├── Commands.java │ │ ├── Consumers.java │ │ ├── ExceptionalCommand.java │ │ ├── ExceptionalSupplier.java │ │ └── MorePreconditions.java │ │ ├── collections │ │ ├── Iterables2.java │ │ └── Pair.java │ │ ├── inject │ │ ├── Bindings.java │ │ └── TimedInterceptor.java │ │ ├── net │ │ ├── InetSocketAddressHelper.java │ │ └── http │ │ │ └── handlers │ │ │ ├── AbortHandler.java │ │ │ ├── ContentionPrinter.java │ │ │ ├── HealthHandler.java │ │ │ ├── QuitHandler.java │ │ │ ├── ThreadStackPrinter.java │ │ │ ├── TimeSeriesDataSource.java │ │ │ ├── VarsHandler.java │ │ │ └── VarsJsonHandler.java │ │ ├── quantity │ │ ├── Amount.java │ │ ├── Data.java │ │ ├── Time.java │ │ └── Unit.java │ │ ├── stats │ │ ├── JvmStats.java │ │ ├── Percentile.java │ │ ├── Rate.java │ │ ├── Ratio.java │ │ ├── RecordingStat.java │ │ ├── RecordingStatImpl.java │ │ ├── RequestStats.java │ │ ├── SampledStat.java │ │ ├── SlidingStats.java │ │ ├── Stat.java │ │ ├── StatImpl.java │ │ ├── StatRegistry.java │ │ ├── Stats.java │ │ ├── StatsProvider.java │ │ ├── TimeSeries.java │ │ ├── TimeSeriesRepository.java │ │ └── TimeSeriesRepositoryImpl.java │ │ ├── testing │ │ ├── TearDownTestCase.java │ │ └── easymock │ │ │ └── EasyMockTest.java │ │ ├── util │ │ ├── BackoffHelper.java │ │ ├── BackoffStrategy.java │ │ ├── BuildInfo.java │ │ ├── Clock.java │ │ ├── Random.java │ │ ├── Sampler.java │ │ ├── StateMachine.java │ │ ├── TruncatedBinaryBackoff.java │ │ ├── templating │ │ │ └── StringTemplateHelper.java │ │ └── testing │ │ │ ├── FakeBuildInfo.java │ │ │ ├── FakeClock.java │ │ │ └── FakeTicker.java │ │ └── zookeeper │ │ ├── Credentials.java │ │ ├── SingletonService.java │ │ ├── ZooKeeperUtils.java │ │ └── testing │ │ ├── BaseZooKeeperTest.java │ │ └── ZooKeeperTestServer.java │ └── test │ ├── java │ └── org │ │ └── apache │ │ └── aurora │ │ └── common │ │ ├── base │ │ ├── ConsumersTest.java │ │ └── MorePreconditionsTest.java │ │ ├── collections │ │ ├── Iterables2Test.java │ │ └── PairTest.java │ │ ├── inject │ │ └── BindingsTest.java │ │ ├── net │ │ ├── InetSocketAddressHelperTest.java │ │ └── http │ │ │ └── handlers │ │ │ ├── StatSupplierTestBase.java │ │ │ ├── TimeSeriesDataSourceTest.java │ │ │ ├── VarsHandlerTest.java │ │ │ └── VarsJsonHandlerTest.java │ │ ├── quantity │ │ └── AmountTest.java │ │ ├── stats │ │ ├── PercentileTest.java │ │ ├── RateTest.java │ │ ├── SlidingStatsTest.java │ │ ├── StatsTest.java │ │ └── TimeSeriesRepositoryImplTest.java │ │ ├── testing │ │ └── easymock │ │ │ └── EasyMockTestTest.java │ │ ├── util │ │ ├── BackoffHelperTest.java │ │ ├── SamplerTest.java │ │ ├── StateMachineTest.java │ │ ├── TruncatedBinaryBackoffTest.java │ │ ├── templating │ │ │ └── StringTemplateHelperTest.java │ │ └── testing │ │ │ └── FakeClockTest.java │ │ └── zookeeper │ │ └── ZooKeeperUtilsTest.java │ └── resources │ └── org │ └── apache │ └── aurora │ └── common │ └── util │ └── templating │ └── template.st ├── config ├── checkstyle │ ├── apache.header │ ├── apache.header.regex │ ├── checkstyle.xml │ └── suppressions.xml ├── legacy_untested_classes.txt ├── pmd │ ├── common.xml │ ├── main.xml │ └── test.xml └── spotbugs │ └── excludeFilter.xml ├── docs ├── README.md ├── additional-resources │ ├── presentations.md │ └── tools.md ├── development │ ├── client.md │ ├── committers-guide.md │ ├── db-migration.md │ ├── design-documents.md │ ├── design │ │ └── command-hooks.md │ ├── scheduler.md │ ├── thermos.md │ ├── thrift.md │ └── ui.md ├── features │ ├── constraints.md │ ├── containers.md │ ├── cron-jobs.md │ ├── custom-executors.md │ ├── job-updates.md │ ├── mesos-fetcher.md │ ├── multitenancy.md │ ├── resource-isolation.md │ ├── service-discovery.md │ ├── services.md │ ├── sla-metrics.md │ ├── sla-requirements.md │ └── webhooks.md ├── getting-started │ ├── overview.md │ ├── tutorial.md │ └── vagrant.md ├── images │ ├── CPUavailability.png │ ├── CompletedTasks.png │ ├── HelloWorldJob.png │ ├── RoleJobs.png │ ├── RunningJob.png │ ├── ScheduledJobs.png │ ├── TaskBreakdown.png │ ├── aurora_hierarchy.png │ ├── aurora_logo.png │ ├── components.odg │ ├── components.png │ ├── debug-client-test.png │ ├── debugging-client-test.png │ ├── killedtask.png │ ├── lifeofatask.png │ ├── presentations │ │ ├── 02_19_2015_aurora_adopters_panel_thumb.png │ │ ├── 02_19_2015_aurora_at_tellapart_thumb.png │ │ ├── 02_19_2015_aurora_at_twitter_thumb.png │ │ ├── 02_28_2015_apache_aurora_thumb.png │ │ ├── 03_07_2015_aurora_mesos_in_practice_at_twitter_thumb.png │ │ ├── 03_25_2014_introduction_to_aurora_thumb.png │ │ ├── 04_30_2015_monolith_to_microservices_thumb.png │ │ ├── 08_21_2014_past_present_future_thumb.png │ │ ├── 09_20_2015_shipping_code_with_aurora_thumb.png │ │ ├── 09_20_2015_twitter_production_scale_thumb.png │ │ ├── 10_08_2015_mesos_aurora_on_a_small_scale_thumb.png │ │ └── 10_08_2015_sla_aware_maintenance_for_operators_thumb.png │ ├── runningtask.png │ ├── stderr.png │ ├── stdout.png │ └── storage_hierarchy.png ├── operations │ ├── backup-restore.md │ ├── configuration.md │ ├── installation.md │ ├── monitoring.md │ ├── security.md │ ├── storage.md │ ├── troubleshooting.md │ └── upgrades.md └── reference │ ├── client-cluster-configuration.md │ ├── client-commands.md │ ├── client-hooks.md │ ├── configuration-best-practices.md │ ├── configuration-templating.md │ ├── configuration-tutorial.md │ ├── configuration.md │ ├── observer-configuration.md │ ├── scheduler-configuration.md │ ├── scheduler-endpoints.md │ └── task-lifecycle.md ├── examples ├── jobs │ ├── cron_hello_world.aurora │ ├── hello_docker_engine.aurora │ ├── hello_docker_image.aurora │ ├── hello_world.aurora │ └── hello_world_variable_update.aurora └── vagrant │ ├── aurorabuild.sh │ ├── clusters.json │ ├── clusters_direct.json │ ├── clusters_kerberos.json │ ├── config │ └── announcer-auth.json │ ├── mesos_config │ ├── README.md │ ├── etc_mesos-master │ │ ├── ip │ │ └── roles │ └── etc_mesos-slave │ │ ├── appc_store_dir │ │ ├── containerizers │ │ ├── docker_registry │ │ ├── executor_registration_timeout │ │ ├── hostname │ │ ├── image_providers │ │ ├── image_provisioner_backend │ │ ├── ip │ │ ├── isolation │ │ ├── modules │ │ ├── resource_estimator │ │ ├── resources │ │ └── work_dir │ ├── provision-dev-cluster.sh │ ├── systemd │ ├── aurora-scheduler-kerberos.service │ ├── aurora-scheduler.service │ └── thermos.service │ └── test_tutorial.sh ├── pants ├── pants.ini ├── rbt ├── settings.gradle ├── src ├── dist │ └── etc │ │ └── shiro.example.ini ├── jmh │ └── java │ │ └── org │ │ └── apache │ │ └── aurora │ │ └── benchmark │ │ ├── BenchmarkSettings.java │ │ ├── Hosts.java │ │ ├── JobUpdates.java │ │ ├── Offers.java │ │ ├── SchedulingBenchmarks.java │ │ ├── SnapshotBenchmarks.java │ │ ├── StateManagerBenchmarks.java │ │ ├── StatusUpdateBenchmark.java │ │ ├── TaskStoreBenchmarks.java │ │ ├── Tasks.java │ │ ├── ThriftApiBenchmarks.java │ │ ├── UpdateStoreBenchmarks.java │ │ └── fakes │ │ ├── FakeDriver.java │ │ ├── FakeEventSink.java │ │ ├── FakeOfferManager.java │ │ ├── FakeRescheduleCalculator.java │ │ ├── FakeSchedulerDriver.java │ │ └── FakeStatsProvider.java ├── main │ ├── java │ │ └── org │ │ │ └── apache │ │ │ └── aurora │ │ │ ├── GuavaUtils.java │ │ │ ├── GuiceUtils.java │ │ │ ├── Protobufs.java │ │ │ ├── codec │ │ │ └── ThriftBinaryCodec.java │ │ │ └── scheduler │ │ │ ├── AppStartup.java │ │ │ ├── BatchWorker.java │ │ │ ├── SchedulerLifecycle.java │ │ │ ├── SchedulerModule.java │ │ │ ├── SchedulerServicesModule.java │ │ │ ├── TaskIdGenerator.java │ │ │ ├── TaskStatusHandler.java │ │ │ ├── TaskStatusHandlerImpl.java │ │ │ ├── TaskVars.java │ │ │ ├── TierInfo.java │ │ │ ├── TierManager.java │ │ │ ├── TierModule.java │ │ │ ├── app │ │ │ ├── AppModule.java │ │ │ ├── LifecycleModule.java │ │ │ ├── MoreModules.java │ │ │ ├── SchedulerMain.java │ │ │ ├── ServiceGroupMonitor.java │ │ │ └── VolumeConverter.java │ │ │ ├── async │ │ │ └── AsyncModule.java │ │ │ ├── base │ │ │ ├── AsyncUtil.java │ │ │ ├── Conversions.java │ │ │ ├── InstanceKeys.java │ │ │ ├── JobKeys.java │ │ │ ├── Jobs.java │ │ │ ├── Numbers.java │ │ │ ├── Query.java │ │ │ ├── SchedulerException.java │ │ │ ├── TaskGroupKey.java │ │ │ ├── Tasks.java │ │ │ └── UserProvidedStrings.java │ │ │ ├── config │ │ │ ├── CliOptions.java │ │ │ ├── CommandLine.java │ │ │ ├── converters │ │ │ │ ├── ClassConverter.java │ │ │ │ ├── DataAmountConverter.java │ │ │ │ ├── DockerParameterConverter.java │ │ │ │ ├── InetSocketAddressConverter.java │ │ │ │ └── TimeAmountConverter.java │ │ │ ├── splitters │ │ │ │ └── CommaSplitter.java │ │ │ ├── types │ │ │ │ ├── DataAmount.java │ │ │ │ └── TimeAmount.java │ │ │ └── validators │ │ │ │ ├── NotEmptyIterable.java │ │ │ │ ├── NotEmptyString.java │ │ │ │ ├── NotNegativeAmount.java │ │ │ │ ├── NotNegativeNumber.java │ │ │ │ ├── PositiveAmount.java │ │ │ │ ├── PositiveNumber.java │ │ │ │ └── ReadableFile.java │ │ │ ├── configuration │ │ │ ├── ConfigurationManager.java │ │ │ ├── SanitizedConfiguration.java │ │ │ └── executor │ │ │ │ ├── ExecutorConfig.java │ │ │ │ ├── ExecutorModule.java │ │ │ │ ├── ExecutorSettings.java │ │ │ │ ├── ExecutorSettingsLoader.java │ │ │ │ └── Executors.java │ │ │ ├── cron │ │ │ ├── CronException.java │ │ │ ├── CronJobManager.java │ │ │ ├── CronPredictor.java │ │ │ ├── CronScheduler.java │ │ │ ├── CrontabEntry.java │ │ │ ├── SanitizedCronJob.java │ │ │ └── quartz │ │ │ │ ├── AuroraCronJob.java │ │ │ │ ├── AuroraCronJobFactory.java │ │ │ │ ├── CronJobManagerImpl.java │ │ │ │ ├── CronLifecycle.java │ │ │ │ ├── CronModule.java │ │ │ │ ├── CronPredictorImpl.java │ │ │ │ ├── CronSchedulerImpl.java │ │ │ │ └── Quartz.java │ │ │ ├── discovery │ │ │ ├── CuratorServiceDiscoveryModule.java │ │ │ ├── CuratorServiceGroupMonitor.java │ │ │ ├── CuratorSingletonService.java │ │ │ ├── Encoding.java │ │ │ ├── FlaggedZooKeeperConfig.java │ │ │ ├── ServiceDiscoveryBindings.java │ │ │ ├── ServiceDiscoveryModule.java │ │ │ ├── ServiceInstance.java │ │ │ └── ZooKeeperConfig.java │ │ │ ├── events │ │ │ ├── EventSink.java │ │ │ ├── NotifyingSchedulingFilter.java │ │ │ ├── PubsubEvent.java │ │ │ ├── PubsubEventModule.java │ │ │ ├── Webhook.java │ │ │ ├── WebhookInfo.java │ │ │ └── WebhookModule.java │ │ │ ├── filter │ │ │ ├── AttributeAggregate.java │ │ │ ├── AttributeFilter.java │ │ │ ├── ConstraintMatcher.java │ │ │ ├── SchedulingFilter.java │ │ │ └── SchedulingFilterImpl.java │ │ │ ├── http │ │ │ ├── AbortCallback.java │ │ │ ├── AbstractFilter.java │ │ │ ├── Agents.java │ │ │ ├── CorsFilter.java │ │ │ ├── Cron.java │ │ │ ├── HttpService.java │ │ │ ├── HttpStatsFilter.java │ │ │ ├── JerseyTemplateServlet.java │ │ │ ├── JettyServerModule.java │ │ │ ├── LeaderHealth.java │ │ │ ├── LeaderRedirect.java │ │ │ ├── LeaderRedirectFilter.java │ │ │ ├── LogConfig.java │ │ │ ├── Maintenance.java │ │ │ ├── Mname.java │ │ │ ├── Offers.java │ │ │ ├── PendingTasks.java │ │ │ ├── QuitCallback.java │ │ │ ├── Quotas.java │ │ │ ├── Services.java │ │ │ ├── State.java │ │ │ ├── StructDump.java │ │ │ ├── Tiers.java │ │ │ ├── Utilization.java │ │ │ └── api │ │ │ │ ├── ApiBeta.java │ │ │ │ ├── ApiModule.java │ │ │ │ ├── GsonMessageBodyHandler.java │ │ │ │ ├── TContentAwareServlet.java │ │ │ │ └── security │ │ │ │ ├── AuthorizeHeaderToken.java │ │ │ │ ├── AuthorizingParam.java │ │ │ │ ├── FieldGetter.java │ │ │ │ ├── FieldGetters.java │ │ │ │ ├── HttpSecurityModule.java │ │ │ │ ├── IniShiroRealmModule.java │ │ │ │ ├── Kerberos5Realm.java │ │ │ │ ├── Kerberos5ShiroRealmModule.java │ │ │ │ ├── KerberosPrincipalConverter.java │ │ │ │ ├── ShiroAuthenticatingThriftInterceptor.java │ │ │ │ ├── ShiroAuthorizingInterceptor.java │ │ │ │ ├── ShiroAuthorizingParamInterceptor.java │ │ │ │ ├── ShiroIniConverter.java │ │ │ │ ├── ShiroKerberosAuthenticationFilter.java │ │ │ │ ├── ShiroKerberosPermissiveAuthenticationFilter.java │ │ │ │ ├── ShiroUtils.java │ │ │ │ └── ThriftFieldGetter.java │ │ │ ├── log │ │ │ ├── Log.java │ │ │ └── mesos │ │ │ │ ├── LogInterface.java │ │ │ │ ├── MesosLog.java │ │ │ │ └── MesosLogStreamModule.java │ │ │ ├── maintenance │ │ │ ├── MaintenanceController.java │ │ │ └── MaintenanceModule.java │ │ │ ├── mesos │ │ │ ├── CommandLineDriverSettingsModule.java │ │ │ ├── Driver.java │ │ │ ├── DriverFactory.java │ │ │ ├── DriverFactoryImpl.java │ │ │ ├── DriverSettings.java │ │ │ ├── FrameworkInfoFactory.java │ │ │ ├── LibMesosLoadingModule.java │ │ │ ├── MesosCallbackHandler.java │ │ │ ├── MesosSchedulerImpl.java │ │ │ ├── MesosTaskFactory.java │ │ │ ├── ProtosConversion.java │ │ │ ├── SchedulerDriverModule.java │ │ │ ├── SchedulerDriverService.java │ │ │ ├── TaskStatusStats.java │ │ │ ├── TestExecutorSettings.java │ │ │ ├── VersionedDriverFactory.java │ │ │ ├── VersionedMesosSchedulerImpl.java │ │ │ └── VersionedSchedulerDriverService.java │ │ │ ├── metadata │ │ │ ├── MetadataModule.java │ │ │ └── NearestFit.java │ │ │ ├── offers │ │ │ ├── Deferment.java │ │ │ ├── HostOffer.java │ │ │ ├── HostOffers.java │ │ │ ├── OfferManager.java │ │ │ ├── OfferManagerImpl.java │ │ │ ├── OfferManagerModule.java │ │ │ ├── OfferOrder.java │ │ │ ├── OfferOrderBuilder.java │ │ │ ├── OfferSet.java │ │ │ ├── OfferSetImpl.java │ │ │ ├── OfferSettings.java │ │ │ └── RandomJitterReturnDelay.java │ │ │ ├── preemptor │ │ │ ├── BiCache.java │ │ │ ├── PendingTaskProcessor.java │ │ │ ├── PendingTaskProcessorModule.java │ │ │ ├── PreemptionProposal.java │ │ │ ├── PreemptionVictim.java │ │ │ ├── PreemptionVictimFilter.java │ │ │ ├── PreemptionVictimFilterModule.java │ │ │ ├── Preemptor.java │ │ │ ├── PreemptorMetrics.java │ │ │ └── PreemptorModule.java │ │ │ ├── pruning │ │ │ ├── JobUpdateHistoryPruner.java │ │ │ ├── PruningModule.java │ │ │ └── TaskHistoryPruner.java │ │ │ ├── quota │ │ │ ├── QuotaCheckResult.java │ │ │ ├── QuotaInfo.java │ │ │ ├── QuotaManager.java │ │ │ └── QuotaModule.java │ │ │ ├── reconciliation │ │ │ ├── KillRetry.java │ │ │ ├── ReconciliationModule.java │ │ │ ├── TaskReconciler.java │ │ │ └── TaskTimeout.java │ │ │ ├── resources │ │ │ ├── AcceptedOffer.java │ │ │ ├── AuroraResourceConverter.java │ │ │ ├── MesosResourceConverter.java │ │ │ ├── ResourceBag.java │ │ │ ├── ResourceManager.java │ │ │ ├── ResourceMapper.java │ │ │ ├── ResourceSettings.java │ │ │ └── ResourceType.java │ │ │ ├── scheduling │ │ │ ├── RescheduleCalculator.java │ │ │ ├── SchedulingModule.java │ │ │ ├── TaskAssigner.java │ │ │ ├── TaskAssignerImpl.java │ │ │ ├── TaskAssignerImplModule.java │ │ │ ├── TaskGroup.java │ │ │ ├── TaskGroups.java │ │ │ ├── TaskScheduler.java │ │ │ ├── TaskSchedulerImpl.java │ │ │ └── TaskThrottler.java │ │ │ ├── sla │ │ │ ├── MetricCalculator.java │ │ │ ├── SlaAlgorithm.java │ │ │ ├── SlaGroup.java │ │ │ ├── SlaManager.java │ │ │ ├── SlaModule.java │ │ │ └── SlaUtil.java │ │ │ ├── spi │ │ │ ├── Permissions.java │ │ │ └── package-info.java │ │ │ ├── state │ │ │ ├── ClusterState.java │ │ │ ├── ClusterStateImpl.java │ │ │ ├── PartitionManager.java │ │ │ ├── SideEffect.java │ │ │ ├── StateChangeResult.java │ │ │ ├── StateManager.java │ │ │ ├── StateManagerImpl.java │ │ │ ├── StateModule.java │ │ │ ├── TaskStateMachine.java │ │ │ ├── TransitionResult.java │ │ │ └── UUIDGenerator.java │ │ │ ├── stats │ │ │ ├── AsyncStatsModule.java │ │ │ ├── CachedCounters.java │ │ │ ├── ResourceCounter.java │ │ │ ├── SlotSizeCounter.java │ │ │ ├── StatsModule.java │ │ │ └── TaskStatCalculator.java │ │ │ ├── storage │ │ │ ├── AttributeStore.java │ │ │ ├── CallOrderEnforcingStorage.java │ │ │ ├── CronJobStore.java │ │ │ ├── HostMaintenanceStore.java │ │ │ ├── JobUpdateStore.java │ │ │ ├── QuotaStore.java │ │ │ ├── SchedulerStore.java │ │ │ ├── SnapshotStore.java │ │ │ ├── Snapshotter.java │ │ │ ├── Storage.java │ │ │ ├── TaskStore.java │ │ │ ├── Util.java │ │ │ ├── backup │ │ │ │ ├── BackupModule.java │ │ │ │ ├── BackupReader.java │ │ │ │ ├── Recovery.java │ │ │ │ ├── StorageBackup.java │ │ │ │ └── TemporaryStorage.java │ │ │ ├── durability │ │ │ │ ├── DurableStorage.java │ │ │ │ ├── DurableStorageModule.java │ │ │ │ ├── Loader.java │ │ │ │ ├── Persistence.java │ │ │ │ ├── Recovery.java │ │ │ │ ├── RecoveryTool.java │ │ │ │ ├── ThriftBackfill.java │ │ │ │ ├── TransactionRecorder.java │ │ │ │ └── WriteRecorder.java │ │ │ ├── log │ │ │ │ ├── Entries.java │ │ │ │ ├── EntrySerializer.java │ │ │ │ ├── LogManager.java │ │ │ │ ├── LogPersistence.java │ │ │ │ ├── LogPersistenceModule.java │ │ │ │ ├── SnapshotDeduplicator.java │ │ │ │ ├── SnapshotModule.java │ │ │ │ ├── SnapshotService.java │ │ │ │ ├── SnapshotterImpl.java │ │ │ │ ├── StreamManager.java │ │ │ │ ├── StreamManagerFactory.java │ │ │ │ └── StreamManagerImpl.java │ │ │ └── mem │ │ │ │ ├── Interner.java │ │ │ │ ├── MemAttributeStore.java │ │ │ │ ├── MemCronJobStore.java │ │ │ │ ├── MemHostMaintenanceStore.java │ │ │ │ ├── MemJobUpdateStore.java │ │ │ │ ├── MemQuotaStore.java │ │ │ │ ├── MemSchedulerStore.java │ │ │ │ ├── MemStorage.java │ │ │ │ ├── MemStorageModule.java │ │ │ │ └── MemTaskStore.java │ │ │ ├── testing │ │ │ └── FakeStatsProvider.java │ │ │ ├── thrift │ │ │ ├── AuditMessages.java │ │ │ ├── ReadOnlySchedulerImpl.java │ │ │ ├── Responses.java │ │ │ ├── SchedulerThriftInterface.java │ │ │ ├── Thresholds.java │ │ │ ├── ThriftModule.java │ │ │ ├── aop │ │ │ │ ├── AnnotatedAuroraAdmin.java │ │ │ │ ├── AopModule.java │ │ │ │ ├── LoggingInterceptor.java │ │ │ │ ├── ServerInfoInterceptor.java │ │ │ │ ├── ThriftStatsExporterInterceptor.java │ │ │ │ └── ThriftWorkload.java │ │ │ └── auth │ │ │ │ └── DecoratedThrift.java │ │ │ └── updater │ │ │ ├── InstanceAction.java │ │ │ ├── InstanceActionHandler.java │ │ │ ├── InstanceStateProvider.java │ │ │ ├── InstanceUpdater.java │ │ │ ├── JobDiff.java │ │ │ ├── JobUpdateController.java │ │ │ ├── JobUpdateControllerImpl.java │ │ │ ├── JobUpdateEventSubscriber.java │ │ │ ├── JobUpdateStateMachine.java │ │ │ ├── OneWayJobUpdater.java │ │ │ ├── SideEffect.java │ │ │ ├── SlaKillController.java │ │ │ ├── StateEvaluator.java │ │ │ ├── UpdateAgentReserver.java │ │ │ ├── UpdateConfigurationException.java │ │ │ ├── UpdateFactory.java │ │ │ ├── UpdateInProgressException.java │ │ │ ├── UpdateStateException.java │ │ │ ├── UpdaterModule.java │ │ │ ├── Updates.java │ │ │ └── strategy │ │ │ ├── ActiveLimitedStrategy.java │ │ │ ├── BatchStrategy.java │ │ │ ├── QueueStrategy.java │ │ │ ├── UpdateStrategy.java │ │ │ └── VariableBatchStrategy.java │ ├── python │ │ └── apache │ │ │ ├── __init__.py │ │ │ ├── aurora │ │ │ ├── __init__.py │ │ │ ├── admin │ │ │ │ ├── BUILD │ │ │ │ ├── __init__.py │ │ │ │ ├── admin.py │ │ │ │ ├── admin_util.py │ │ │ │ ├── aurora_admin.py │ │ │ │ ├── help.py │ │ │ │ ├── host_maintenance.py │ │ │ │ └── maintenance.py │ │ │ ├── client │ │ │ │ ├── BUILD │ │ │ │ ├── __init__.py │ │ │ │ ├── api │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── command_runner.py │ │ │ │ │ ├── health_check.py │ │ │ │ │ ├── instance_watcher.py │ │ │ │ │ ├── job_monitor.py │ │ │ │ │ ├── restarter.py │ │ │ │ │ ├── scheduler_client.py │ │ │ │ │ ├── sla.py │ │ │ │ │ ├── task_util.py │ │ │ │ │ └── updater_util.py │ │ │ │ ├── base.py │ │ │ │ ├── binding_helper.py │ │ │ │ ├── binding_helpers │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── docker_helper.py │ │ │ │ ├── cli │ │ │ │ │ ├── .auroraversion │ │ │ │ │ ├── BUILD │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── client.py │ │ │ │ │ ├── command_hooks.py │ │ │ │ │ ├── config.py │ │ │ │ │ ├── context.py │ │ │ │ │ ├── cron.py │ │ │ │ │ ├── diff_formatter.py │ │ │ │ │ ├── jobs.py │ │ │ │ │ ├── options.py │ │ │ │ │ ├── quota.py │ │ │ │ │ ├── sla.py │ │ │ │ │ ├── task.py │ │ │ │ │ └── update.py │ │ │ │ ├── config.py │ │ │ │ ├── docker │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── docker_client.py │ │ │ │ └── hooks │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── hooked_api.py │ │ │ ├── common │ │ │ │ ├── BUILD │ │ │ │ ├── __init__.py │ │ │ │ ├── aurora_job_key.py │ │ │ │ ├── auth │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── auth_module.py │ │ │ │ │ └── auth_module_manager.py │ │ │ │ ├── cluster.py │ │ │ │ ├── cluster_option.py │ │ │ │ ├── clusters.py │ │ │ │ ├── health_check │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── http_signaler.py │ │ │ │ │ └── shell.py │ │ │ │ ├── pex_version.py │ │ │ │ ├── shellify.py │ │ │ │ └── transport.py │ │ │ ├── config │ │ │ │ ├── BUILD │ │ │ │ ├── __init__.py │ │ │ │ ├── loader.py │ │ │ │ ├── port_resolver.py │ │ │ │ ├── repl.py │ │ │ │ ├── resource.py │ │ │ │ ├── schema │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── base.py │ │ │ │ └── thrift.py │ │ │ ├── executor │ │ │ │ ├── BUILD │ │ │ │ ├── __init__.py │ │ │ │ ├── aurora_executor.py │ │ │ │ ├── bin │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── thermos_executor_main.py │ │ │ │ ├── common │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── announcer.py │ │ │ │ │ ├── announcer_zkauth_schema.py │ │ │ │ │ ├── executor_detector.py │ │ │ │ │ ├── executor_timeout.py │ │ │ │ │ ├── health_checker.py │ │ │ │ │ ├── kill_manager.py │ │ │ │ │ ├── path_detector.py │ │ │ │ │ ├── resource_manager.py │ │ │ │ │ ├── sandbox.py │ │ │ │ │ ├── status_checker.py │ │ │ │ │ ├── task_info.py │ │ │ │ │ └── task_runner.py │ │ │ │ ├── executor_base.py │ │ │ │ ├── executor_vars.py │ │ │ │ ├── http_lifecycle.py │ │ │ │ ├── status_manager.py │ │ │ │ └── thermos_task_runner.py │ │ │ ├── kerberos │ │ │ │ ├── BUILD │ │ │ │ ├── __init__.py │ │ │ │ └── auth_module.py │ │ │ └── tools │ │ │ │ ├── BUILD │ │ │ │ ├── __init__.py │ │ │ │ ├── java │ │ │ │ ├── organize_imports.py │ │ │ │ └── thrift_wrapper_codegen.py │ │ │ │ ├── thermos.py │ │ │ │ └── thermos_observer.py │ │ │ └── thermos │ │ │ ├── __init__.py │ │ │ ├── cli │ │ │ ├── BUILD │ │ │ ├── __init__.py │ │ │ ├── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── help.py │ │ │ │ ├── inspect.py │ │ │ │ ├── kill.py │ │ │ │ ├── read.py │ │ │ │ ├── run.py │ │ │ │ ├── simplerun.py │ │ │ │ ├── status.py │ │ │ │ └── tail.py │ │ │ ├── common.py │ │ │ └── main.py │ │ │ ├── common │ │ │ ├── BUILD │ │ │ ├── __init__.py │ │ │ ├── ckpt.py │ │ │ ├── constants.py │ │ │ ├── excepthook.py │ │ │ ├── options.py │ │ │ ├── path.py │ │ │ ├── planner.py │ │ │ ├── process_util.py │ │ │ └── statuses.py │ │ │ ├── config │ │ │ ├── BUILD │ │ │ ├── __init__.py │ │ │ ├── loader.py │ │ │ ├── schema.py │ │ │ ├── schema_base.py │ │ │ └── schema_helpers.py │ │ │ ├── core │ │ │ ├── BUILD │ │ │ ├── __init__.py │ │ │ ├── helper.py │ │ │ ├── muxer.py │ │ │ ├── process.py │ │ │ └── runner.py │ │ │ ├── monitoring │ │ │ ├── BUILD │ │ │ ├── __init__.py │ │ │ ├── detector.py │ │ │ ├── disk.py │ │ │ ├── monitor.py │ │ │ ├── process.py │ │ │ ├── process_collector_psutil.py │ │ │ └── resource.py │ │ │ ├── observer │ │ │ ├── BUILD │ │ │ ├── __init__.py │ │ │ ├── detector.py │ │ │ ├── http │ │ │ │ ├── __init__.py │ │ │ │ ├── assets │ │ │ │ │ ├── bootstrap.css │ │ │ │ │ ├── favicon.ico │ │ │ │ │ ├── jquery.js │ │ │ │ │ ├── jquery.pailer.js │ │ │ │ │ └── observer.js │ │ │ │ ├── configure.py │ │ │ │ ├── diagnostics.py │ │ │ │ ├── file_browser.py │ │ │ │ ├── http_observer.py │ │ │ │ ├── json.py │ │ │ │ ├── static_assets.py │ │ │ │ ├── templates │ │ │ │ │ ├── filebrowse.tpl │ │ │ │ │ ├── filelist.tpl │ │ │ │ │ ├── home.tpl │ │ │ │ │ ├── index.tpl │ │ │ │ │ ├── logbrowse.tpl │ │ │ │ │ ├── main.tpl │ │ │ │ │ ├── process.tpl │ │ │ │ │ ├── rawtask.tpl │ │ │ │ │ └── task.tpl │ │ │ │ ├── templating.py │ │ │ │ └── vars_endpoint.py │ │ │ ├── observed_task.py │ │ │ └── task_observer.py │ │ │ ├── runner │ │ │ ├── BUILD │ │ │ ├── __init__.py │ │ │ └── thermos_runner.py │ │ │ └── testing │ │ │ ├── BUILD │ │ │ ├── __init__.py │ │ │ └── runner.py │ └── resources │ │ ├── logback.xml │ │ ├── org │ │ └── apache │ │ │ └── aurora │ │ │ └── scheduler │ │ │ ├── http │ │ │ ├── agents.st │ │ │ ├── logconfig.st │ │ │ ├── no-leader.html │ │ │ ├── structdump.st │ │ │ └── utilization.st │ │ │ └── tiers.json │ │ └── scheduler │ │ └── assets │ │ ├── graphview │ │ ├── dygraph-combined.js │ │ ├── dygraph-extra.js │ │ ├── grapher.js │ │ ├── graphview.html │ │ └── parser.js │ │ ├── images │ │ ├── aurora.png │ │ ├── aurora_logo.png │ │ ├── aurora_logo_white.png │ │ └── viz.png │ │ ├── index.html │ │ └── scheduler │ │ └── index.html └── test │ ├── java │ └── org │ │ └── apache │ │ └── aurora │ │ ├── GuavaUtilsTest.java │ │ ├── GuiceUtilsTest.java │ │ ├── LifecycleShutdownListenerTest.java │ │ ├── ProtobufsTest.java │ │ ├── codec │ │ └── ThriftBinaryCodecTest.java │ │ └── scheduler │ │ ├── BatchWorkerTest.java │ │ ├── HostOfferTest.java │ │ ├── SchedulerLifecycleTest.java │ │ ├── TaskStatusHandlerImplTest.java │ │ ├── TaskVarsTest.java │ │ ├── TierManagerTest.java │ │ ├── TierModuleTest.java │ │ ├── app │ │ ├── MoreModulesTest.java │ │ ├── SchedulerIT.java │ │ ├── VolumeConverterTest.java │ │ └── local │ │ │ ├── FakeMaster.java │ │ │ ├── FakeNonVolatileStorage.java │ │ │ ├── LocalSchedulerMain.java │ │ │ └── simulator │ │ │ ├── ClusterSimulatorModule.java │ │ │ ├── FakeSlaves.java │ │ │ └── events │ │ │ ├── OfferAccepted.java │ │ │ └── Started.java │ │ ├── async │ │ └── AsyncModuleTest.java │ │ ├── base │ │ ├── AsyncUtilTest.java │ │ ├── ConversionsTest.java │ │ ├── JobsTest.java │ │ ├── NumbersTest.java │ │ ├── TaskTestUtil.java │ │ └── TasksTest.java │ │ ├── config │ │ ├── CommandLineTest.java │ │ └── CustomModule.java │ │ ├── configuration │ │ ├── ConfigurationManagerTest.java │ │ └── executor │ │ │ ├── ExecutorModuleTest.java │ │ │ └── ExecutorSettingsLoaderTest.java │ │ ├── cron │ │ ├── CrontabEntryTest.java │ │ ├── ExpectedPrediction.java │ │ └── quartz │ │ │ ├── AuroraCronJobTest.java │ │ │ ├── CronIT.java │ │ │ ├── CronJobManagerImplTest.java │ │ │ ├── CronPredictorImplTest.java │ │ │ └── QuartzTestUtil.java │ │ ├── discovery │ │ ├── BaseCuratorDiscoveryTest.java │ │ ├── CuratorDiscoveryModuleTest.java │ │ ├── CuratorServiceGroupMonitorTest.java │ │ ├── CuratorSingletonServiceTest.java │ │ ├── EncodingTest.java │ │ └── ZooKeeperConfigTest.java │ │ ├── events │ │ ├── NotifyingSchedulingFilterTest.java │ │ ├── PubsubEventModuleTest.java │ │ └── WebhookTest.java │ │ ├── filter │ │ ├── AttributeAggregateTest.java │ │ └── SchedulingFilterImplTest.java │ │ ├── http │ │ ├── AbstractJettyTest.java │ │ ├── CorsFilterTest.java │ │ ├── CronTest.java │ │ ├── LeaderHealthTest.java │ │ ├── LeaderRedirectTest.java │ │ ├── MaintenanceTest.java │ │ ├── MnameTest.java │ │ ├── OffersTest.java │ │ ├── PendingTasksTest.java │ │ ├── QuitCallbackTest.java │ │ ├── ServicesTest.java │ │ ├── ServletFilterTest.java │ │ ├── StateTest.java │ │ ├── StructDumpTest.java │ │ ├── TestUtils.java │ │ ├── TiersTest.java │ │ └── api │ │ │ ├── ApiBetaTest.java │ │ │ ├── ApiIT.java │ │ │ └── security │ │ │ ├── AuthorizeHeaderTokenTest.java │ │ │ ├── HttpSecurityIT.java │ │ │ ├── Kerberos5ShiroRealmModuleTest.java │ │ │ ├── KerberosPrincipalConverterTest.java │ │ │ ├── ShiroAuthenticatingThriftInterceptorTest.java │ │ │ ├── ShiroAuthorizingInterceptorTest.java │ │ │ ├── ShiroAuthorizingParamInterceptorTest.java │ │ │ ├── ShiroIniConverterTest.java │ │ │ ├── ShiroKerberosAuthenticationFilterTest.java │ │ │ ├── ShiroKerberosPermissiveAuthenticationFilterTest.java │ │ │ └── ThriftFieldGetterTest.java │ │ ├── log │ │ └── mesos │ │ │ └── MesosLogTest.java │ │ ├── maintenance │ │ └── MaintenanceControllerImplTest.java │ │ ├── mesos │ │ ├── CommandLineDriverSettingsModuleTest.java │ │ ├── FrameworkInfoFactoryImplTest.java │ │ ├── MesosCallbackHandlerTest.java │ │ ├── MesosSchedulerImplTest.java │ │ ├── MesosTaskFactoryImplTest.java │ │ ├── ProtosConversionTest.java │ │ ├── SchedulerDriverServiceTest.java │ │ ├── TaskExecutors.java │ │ ├── TaskStatusStatsTest.java │ │ ├── VersionedMesosSchedulerImplTest.java │ │ └── VersionedSchedulerDriverServiceTest.java │ │ ├── metadata │ │ └── NearestFitTest.java │ │ ├── offers │ │ ├── OfferManagerImplTest.java │ │ ├── Offers.java │ │ └── RandomJitterReturnDelayTest.java │ │ ├── preemptor │ │ ├── BiCacheTest.java │ │ ├── ClusterStateImplTest.java │ │ ├── PendingTaskProcessorTest.java │ │ ├── PreemptionVictimFilterTest.java │ │ ├── PreemptionVictimTest.java │ │ ├── PreemptorImplTest.java │ │ └── PreemptorModuleTest.java │ │ ├── pruning │ │ ├── JobUpdateHistoryPrunerTest.java │ │ └── TaskHistoryPrunerTest.java │ │ ├── quota │ │ ├── QuotaCheckResultTest.java │ │ └── QuotaManagerImplTest.java │ │ ├── reconciliation │ │ ├── KillRetryTest.java │ │ ├── TaskReconcilerTest.java │ │ └── TaskTimeoutTest.java │ │ ├── resources │ │ ├── AcceptedOfferTest.java │ │ ├── AuroraResourceConverterTest.java │ │ ├── MesosResourceConverterTest.java │ │ ├── PortMapperTest.java │ │ ├── ResourceBagTest.java │ │ ├── ResourceManagerTest.java │ │ ├── ResourceTestUtil.java │ │ └── ResourceTypeTest.java │ │ ├── scheduling │ │ ├── RescheduleCalculatorImplTest.java │ │ ├── TaskAssignerImplTest.java │ │ ├── TaskGroupsTest.java │ │ ├── TaskSchedulerImplTest.java │ │ └── TaskThrottlerTest.java │ │ ├── sla │ │ ├── MetricCalculatorTest.java │ │ ├── SlaAlgorithmTest.java │ │ ├── SlaManagerTest.java │ │ ├── SlaModuleTest.java │ │ ├── SlaTestUtil.java │ │ └── SlaUtilTest.java │ │ ├── state │ │ ├── PartitionManagerTest.java │ │ ├── PubsubTestUtil.java │ │ ├── StateManagerImplTest.java │ │ └── TaskStateMachineTest.java │ │ ├── stats │ │ ├── AsyncStatsModuleTest.java │ │ ├── ResourceCounterTest.java │ │ └── SlotSizeCounterTest.java │ │ ├── storage │ │ ├── AbstractAttributeStoreTest.java │ │ ├── AbstractCronJobStoreTest.java │ │ ├── AbstractHostMaintenanceStoreTest.java │ │ ├── AbstractJobUpdateStoreTest.java │ │ ├── AbstractQuotaStoreTest.java │ │ ├── AbstractSchedulerStoreTest.java │ │ ├── AbstractTaskStoreTest.java │ │ ├── backup │ │ │ ├── RecoveryTest.java │ │ │ └── StorageBackupTest.java │ │ ├── durability │ │ │ ├── DataCompatibilityTest.java │ │ │ ├── DurableStorageTest.java │ │ │ ├── Generator.java │ │ │ ├── RecoveryTest.java │ │ │ ├── ThriftBackfillTest.java │ │ │ ├── TransactionRecorderTest.java │ │ │ └── WriteRecorderTest.java │ │ ├── entities │ │ │ └── IHostAttributesTest.java │ │ ├── log │ │ │ ├── FakeLog.java │ │ │ ├── LogManagerTest.java │ │ │ ├── LogPersistenceTest.java │ │ │ ├── NonVolatileStorageTest.java │ │ │ ├── SnapshotDeduplicatorImplTest.java │ │ │ ├── SnapshotServiceTest.java │ │ │ ├── SnapshotterImplIT.java │ │ │ └── testing │ │ │ │ └── LogOpMatcher.java │ │ ├── mem │ │ │ ├── InternerTest.java │ │ │ ├── MemAttributeStoreTest.java │ │ │ ├── MemCronJobStoreTest.java │ │ │ ├── MemHostMaintenanceStoreTest.java │ │ │ ├── MemJobUpdateStoreTest.java │ │ │ ├── MemQuotaStoreTest.java │ │ │ ├── MemSchedulerStoreTest.java │ │ │ ├── MemStorageTest.java │ │ │ ├── MemTaskStoreTest.java │ │ │ └── StorageTransactionTest.java │ │ └── testing │ │ │ ├── StorageEntityUtil.java │ │ │ └── StorageTestUtil.java │ │ ├── testing │ │ ├── BatchWorkerUtil.java │ │ └── FakeScheduledExecutor.java │ │ ├── thrift │ │ ├── AuditMessagesTest.java │ │ ├── Fixtures.java │ │ ├── ReadOnlySchedulerImplTest.java │ │ ├── SchedulerThriftInterfaceTest.java │ │ ├── ThriftIT.java │ │ └── aop │ │ │ ├── AnnotatedAuroraAdminTest.java │ │ │ ├── LoggingInterceptorTest.java │ │ │ ├── MockDecoratedThrift.java │ │ │ ├── ServerInfoInterceptorTest.java │ │ │ └── ThriftStatsExporterInterceptorTest.java │ │ └── updater │ │ ├── AddTaskTest.java │ │ ├── EnumsTest.java │ │ ├── InstanceUpdaterTest.java │ │ ├── JobDiffTest.java │ │ ├── JobUpdateEventSubscriberTest.java │ │ ├── JobUpdateStateMachineTest.java │ │ ├── JobUpdaterIT.java │ │ ├── KillTaskTest.java │ │ ├── NullAgentReserverTest.java │ │ ├── OneWayJobUpdaterTest.java │ │ ├── SlaKillControllerTest.java │ │ ├── UpdateAgentReserverImplTest.java │ │ ├── UpdateFactoryImplTest.java │ │ └── strategy │ │ ├── BatchStrategyTest.java │ │ ├── QueueStrategyTest.java │ │ └── VariableBatchStrategyTest.java │ ├── python │ └── apache │ │ ├── aurora │ │ ├── BUILD │ │ ├── admin │ │ │ ├── BUILD │ │ │ ├── test_admin.py │ │ │ ├── test_admin_sla.py │ │ │ ├── test_admin_util.py │ │ │ ├── test_host_maintenance.py │ │ │ ├── test_maintenance.py │ │ │ └── util.py │ │ ├── api_util.py │ │ ├── client │ │ │ ├── BUILD │ │ │ ├── api │ │ │ │ ├── BUILD │ │ │ │ ├── test_api.py │ │ │ │ ├── test_health_check.py │ │ │ │ ├── test_instance_watcher.py │ │ │ │ ├── test_job_monitor.py │ │ │ │ ├── test_restarter.py │ │ │ │ ├── test_scheduler_client.py │ │ │ │ ├── test_sla.py │ │ │ │ ├── test_task_util.py │ │ │ │ └── test_updater_util.py │ │ │ ├── binding_helpers │ │ │ │ └── test_docker_helper.py │ │ │ ├── cli │ │ │ │ ├── BUILD │ │ │ │ ├── test_add.py │ │ │ │ ├── test_api_from_cli.py │ │ │ │ ├── test_client.py │ │ │ │ ├── test_command_hooks.py │ │ │ │ ├── test_config_noun.py │ │ │ │ ├── test_context.py │ │ │ │ ├── test_create.py │ │ │ │ ├── test_cron.py │ │ │ │ ├── test_diff.py │ │ │ │ ├── test_diff_formatter.py │ │ │ │ ├── test_inspect.py │ │ │ │ ├── test_kill.py │ │ │ │ ├── test_open.py │ │ │ │ ├── test_options.py │ │ │ │ ├── test_plugins.py │ │ │ │ ├── test_quota.py │ │ │ │ ├── test_restart.py │ │ │ │ ├── test_sla.py │ │ │ │ ├── test_status.py │ │ │ │ ├── test_supdate.py │ │ │ │ ├── test_task.py │ │ │ │ ├── test_version.py │ │ │ │ └── util.py │ │ │ ├── docker │ │ │ │ ├── BUILD │ │ │ │ └── test_docker_client.py │ │ │ ├── fake_scheduler_proxy.py │ │ │ ├── hooks │ │ │ │ ├── BUILD │ │ │ │ ├── test_hooked_api.py │ │ │ │ └── test_non_hooked_api.py │ │ │ ├── test_base.py │ │ │ ├── test_binding_helper.py │ │ │ └── test_config.py │ │ ├── common │ │ │ ├── BUILD │ │ │ ├── health_check │ │ │ │ ├── BUILD │ │ │ │ ├── test_http_signaler.py │ │ │ │ └── test_shell.py │ │ │ ├── test_aurora_job_key.py │ │ │ ├── test_cluster.py │ │ │ ├── test_cluster_option.py │ │ │ ├── test_clusters.py │ │ │ ├── test_pex_version.py │ │ │ ├── test_shellify.py │ │ │ └── test_transport.py │ │ ├── config │ │ │ ├── BUILD │ │ │ ├── test_base.py │ │ │ ├── test_constraint_parsing.py │ │ │ ├── test_loader.py │ │ │ ├── test_resources.py │ │ │ └── test_thrift.py │ │ ├── executor │ │ │ ├── BUILD │ │ │ ├── bin │ │ │ │ ├── BUILD │ │ │ │ └── test_thermos_executor_entry_point.py │ │ │ ├── common │ │ │ │ ├── BUILD │ │ │ │ ├── fixtures.py │ │ │ │ ├── test_announcer.py │ │ │ │ ├── test_executor_detector.py │ │ │ │ ├── test_executor_timeout.py │ │ │ │ ├── test_health_checker.py │ │ │ │ ├── test_kill_manager.py │ │ │ │ ├── test_path_detector.py │ │ │ │ ├── test_resource_manager.py │ │ │ │ ├── test_resource_manager_integration.py │ │ │ │ ├── test_sandbox.py │ │ │ │ ├── test_status_checker.py │ │ │ │ └── test_task_info.py │ │ │ ├── test_executor_base.py │ │ │ ├── test_executor_vars.py │ │ │ ├── test_http_lifecycle.py │ │ │ ├── test_status_manager.py │ │ │ ├── test_thermos_executor.py │ │ │ └── test_thermos_task_runner.py │ │ └── tools │ │ │ └── BUILD │ │ └── thermos │ │ ├── cli │ │ ├── BUILD │ │ ├── commands │ │ │ ├── BUILD │ │ │ ├── test_import.py │ │ │ └── test_simplerun.py │ │ ├── test_common.py │ │ └── test_main.py │ │ ├── common │ │ ├── BUILD │ │ ├── test_pathspec.py │ │ ├── test_planner.py │ │ └── test_task_planner.py │ │ ├── config │ │ ├── BUILD │ │ └── test_schema.py │ │ ├── core │ │ ├── BUILD │ │ ├── test_angry.py │ │ ├── test_ephemerals.py │ │ ├── test_failing_runner.py │ │ ├── test_failure_limit.py │ │ ├── test_finalization.py │ │ ├── test_helper.py │ │ ├── test_process.py │ │ ├── test_runner_integration.py │ │ ├── test_runner_log_config.py │ │ └── test_staged_kill.py │ │ ├── monitoring │ │ ├── BUILD │ │ ├── test_detector.py │ │ ├── test_disk.py │ │ ├── test_process_collector_psutil.py │ │ └── test_resource.py │ │ └── observer │ │ ├── BUILD │ │ ├── http │ │ ├── BUILD │ │ └── test_file_browser.py │ │ └── test_observer_task_detector.py │ ├── resources │ └── org │ │ └── apache │ │ ├── aurora │ │ └── scheduler │ │ │ ├── configuration │ │ │ └── executor │ │ │ │ ├── test-missing-field.json │ │ │ │ ├── test-multiple-executor.json │ │ │ │ └── test-single-executor.json │ │ │ ├── cron │ │ │ └── expected-predictions.json │ │ │ ├── http │ │ │ └── api │ │ │ │ └── security │ │ │ │ ├── shiro-example.ini │ │ │ │ ├── shiro-malformed-extra-sections.ini │ │ │ │ ├── shiro-malformed-no-sections.ini │ │ │ │ └── shiro-missing-sections.ini │ │ │ └── storage │ │ │ └── durability │ │ │ └── goldens │ │ │ ├── current │ │ │ ├── pruneJobUpdateHistory │ │ │ ├── removeHostMaintenanceRequest │ │ │ ├── removeJob │ │ │ ├── removeJobUpdate │ │ │ ├── removeLock │ │ │ ├── removeQuota │ │ │ ├── removeTasks │ │ │ ├── saveCronJob │ │ │ ├── saveFrameworkId │ │ │ ├── saveHostAttributes │ │ │ ├── saveHostMaintenanceRequest │ │ │ ├── saveJobInstanceUpdateEvent │ │ │ ├── saveJobUpdate │ │ │ ├── saveJobUpdateEvent │ │ │ ├── saveLock │ │ │ ├── saveQuota │ │ │ └── saveTasks │ │ │ └── read-compatible │ │ │ ├── 1-pruneJobUpdateHistory │ │ │ ├── 10-saveJobUpdate │ │ │ ├── 11-saveJobUpdateEvent │ │ │ ├── 12-saveJobInstanceUpdateEvent │ │ │ ├── 13-saveLock │ │ │ ├── 14-saveQuota │ │ │ ├── 15-saveTasks │ │ │ ├── 16-saveHostMaintenanceRequest │ │ │ ├── 17-removeHostMaintenanceRequest │ │ │ ├── 2-removeJob │ │ │ ├── 3-removeJobUpdate │ │ │ ├── 4-removeLock │ │ │ ├── 5-removeQuota │ │ │ ├── 6-removeTasks │ │ │ ├── 7-saveCronJob │ │ │ ├── 8-saveFrameworkId │ │ │ └── 9-saveHostAttributes │ │ └── thermos │ │ └── root │ │ ├── checkpoints │ │ ├── README │ │ ├── failure │ │ │ ├── coordinator.p1 │ │ │ ├── coordinator.p2 │ │ │ ├── coordinator.p3 │ │ │ └── runner │ │ ├── failure_limit │ │ │ ├── coordinator.a │ │ │ ├── coordinator.b │ │ │ └── runner │ │ ├── hello_world │ │ │ ├── coordinator.echo │ │ │ └── runner │ │ ├── ordering │ │ │ ├── coordinator.echo_one │ │ │ ├── coordinator.echo_three │ │ │ ├── coordinator.echo_two │ │ │ └── runner │ │ ├── ports │ │ │ ├── coordinator.echo │ │ │ └── runner │ │ ├── sleep60-lost │ │ │ ├── coordinator.sleep │ │ │ └── runner │ │ └── sleep60 │ │ │ ├── coordinator.sleep │ │ │ └── runner │ │ ├── logs │ │ ├── failure │ │ │ ├── p1 │ │ │ │ └── 0 │ │ │ │ │ └── stdout │ │ │ ├── p2 │ │ │ │ ├── 0 │ │ │ │ │ └── stdout │ │ │ │ └── 1 │ │ │ │ │ └── stdout │ │ │ └── p3 │ │ │ │ ├── 0 │ │ │ │ └── stdout │ │ │ │ ├── 1 │ │ │ │ └── stdout │ │ │ │ └── 2 │ │ │ │ └── stdout │ │ ├── failure_limit │ │ │ └── a │ │ │ │ └── 0 │ │ │ │ └── stdout │ │ ├── hello_world │ │ │ └── echo │ │ │ │ └── 0 │ │ │ │ └── stdout │ │ ├── ordering │ │ │ ├── echo_one │ │ │ │ └── 0 │ │ │ │ │ └── stdout │ │ │ ├── echo_three │ │ │ │ └── 0 │ │ │ │ │ └── stdout │ │ │ └── echo_two │ │ │ │ └── 0 │ │ │ │ └── stdout │ │ └── ports │ │ │ └── echo │ │ │ └── 0 │ │ │ └── stdout │ │ ├── sandbox │ │ ├── p1 │ │ ├── p2 │ │ └── p3 │ │ └── tasks │ │ ├── active │ │ └── sleep60-lost │ │ └── finished │ │ ├── failure │ │ ├── failure_limit │ │ ├── hello_world │ │ ├── ordering │ │ ├── ports │ │ └── sleep60 │ └── sh │ └── org │ └── apache │ └── aurora │ └── e2e │ ├── Dockerfile.netcat │ ├── Dockerfile.python │ ├── check-fs.sh │ ├── ephemeral_daemon_with_final.aurora │ ├── generate_mesos_maintenance_schedule.py │ ├── http │ ├── http_example.aurora │ ├── http_example_bad_healthcheck.aurora │ └── http_example_updated.aurora │ ├── http_example.py │ ├── partition_aware.aurora │ ├── run-server.sh │ ├── sla_coordinator.py │ ├── sla_policy.aurora │ ├── test_bypass_leader_redirect_end_to_end.sh │ ├── test_daemonizing_process.aurora │ ├── test_end_to_end.sh │ ├── test_kerberos_end_to_end.sh │ └── validate_serverset.py └── ui ├── .babelrc ├── .eslintrc ├── package.json ├── plugin ├── js │ └── components │ │ ├── PluginExample.js │ │ └── plugin.css └── package.json ├── src ├── __mocks__ │ └── react.js └── main │ ├── js │ ├── client │ │ └── scheduler-client.js │ ├── components │ │ ├── Breadcrumb.js │ │ ├── ConfigDiff.js │ │ ├── CronJobPreview.js │ │ ├── Diff.js │ │ ├── Icon.js │ │ ├── InstanceHistory.js │ │ ├── InstanceHistoryItem.js │ │ ├── InstanceViz.js │ │ ├── JobConfig.js │ │ ├── JobHistory.js │ │ ├── JobList.js │ │ ├── JobListItem.js │ │ ├── JobOverview.js │ │ ├── JobStatus.js │ │ ├── Layout.js │ │ ├── Loading.js │ │ ├── Navigation.js │ │ ├── Pagination.js │ │ ├── PluginExample.js │ │ ├── RoleList.js │ │ ├── RoleQuota.js │ │ ├── StateMachine.js │ │ ├── Tabs.js │ │ ├── TaskConfig.js │ │ ├── TaskConfigSummary.js │ │ ├── TaskDetails.js │ │ ├── TaskList.js │ │ ├── TaskListItem.js │ │ ├── TaskListItemActions.js │ │ ├── TaskNeighbors.js │ │ ├── TaskStateMachine.js │ │ ├── TaskStatus.js │ │ ├── Time.js │ │ ├── UpdateConfig.js │ │ ├── UpdateDetails.js │ │ ├── UpdateDiff.js │ │ ├── UpdateInstanceEvents.js │ │ ├── UpdateInstanceSummary.js │ │ ├── UpdateList.js │ │ ├── UpdatePreview.js │ │ ├── UpdateSettings.js │ │ ├── UpdateStateMachine.js │ │ ├── UpdateStatus.js │ │ ├── UpdateTime.js │ │ ├── UpdateTitle.js │ │ └── __tests__ │ │ │ ├── Breadcrumb-test.js │ │ │ ├── ConfigDiff-test.js │ │ │ ├── Diff-test.js │ │ │ ├── InstanceHistory-test.js │ │ │ ├── InstanceHistoryItem-test.js │ │ │ ├── InstanceViz-test.js │ │ │ ├── JobConfig-test.js │ │ │ ├── JobHistory-test.js │ │ │ ├── JobList-test.js │ │ │ ├── JobStatus-test.js │ │ │ ├── Pagination-test.js │ │ │ ├── RoleQuota-test.js │ │ │ ├── StateMachine-test.js │ │ │ ├── Tabs-test.js │ │ │ ├── TaskDetails-test.js │ │ │ ├── TaskList-test.js │ │ │ ├── TaskListItem-test.js │ │ │ ├── TaskNeighbors-test.js │ │ │ ├── UpdateDiff-test.js │ │ │ ├── UpdateInstanceEvents-test.js │ │ │ ├── UpdateList-test.js │ │ │ └── UpdateStatus-test.js │ ├── index.js │ ├── pages │ │ ├── Home.js │ │ ├── Instance.js │ │ ├── Job.js │ │ ├── Jobs.js │ │ ├── Task.js │ │ ├── Update.js │ │ ├── Updates.js │ │ └── __tests__ │ │ │ ├── Home-test.js │ │ │ ├── Instance-test.js │ │ │ ├── Job-test.js │ │ │ ├── Jobs-test.js │ │ │ ├── Task-test.js │ │ │ ├── Update-test.js │ │ │ └── Updates-test.js │ ├── test-utils │ │ ├── Builder.js │ │ ├── JobBuilders.js │ │ ├── TaskBuilders.js │ │ ├── UpdateBuilders.js │ │ └── __tests__ │ │ │ └── Builder-test.js │ └── utils │ │ ├── Common.js │ │ ├── Job.js │ │ ├── Quota.js │ │ ├── Task.js │ │ ├── Thrift.js │ │ ├── Update.js │ │ └── __tests__ │ │ ├── Common-test.js │ │ ├── Task-test.js │ │ └── Update-test.js │ ├── resources │ ├── SourceSansPro-Black.ttf │ ├── SourceSansPro-Bold.ttf │ ├── SourceSansPro-Regular.ttf │ ├── SourceSansPro-Semibold.ttf │ └── source-sans-pro.css │ └── sass │ ├── app.scss │ ├── components │ ├── _base.scss │ ├── _breadcrumb.scss │ ├── _diff.scss │ ├── _home-page.scss │ ├── _instance-page.scss │ ├── _instance-viz.scss │ ├── _job-list-page.scss │ ├── _job-page.scss │ ├── _layout.scss │ ├── _navigation.scss │ ├── _pagination.scss │ ├── _state-machine.scss │ ├── _status.scss │ ├── _tables.scss │ ├── _task-list.scss │ ├── _update-list.scss │ └── _update-page.scss │ └── modules │ ├── _all.scss │ ├── _colors.scss │ └── _typography.scss ├── test-setup.js └── webpack.config.js /.auroraversion: -------------------------------------------------------------------------------- 1 | 0.23.0-SNAPSHOT 2 | -------------------------------------------------------------------------------- /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "cwd": "3rdparty/javascript" 3 | } 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | 3 | /gradlew export-ignore 4 | /gradle export-ignore 5 | 6 | *.pyc export-ignore 7 | *.zip export-ignore 8 | *.gzip export-ignore 9 | *.tar export-ignore 10 | *.tar.gz export-ignore 11 | 12 | # All files that are binary and whose line endings should not be modified. 13 | *.png binary 14 | *.jpg binary 15 | *.odg binary 16 | *.ttf binary 17 | gradle/wrapper/gradle-wrapper.jar binary 18 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ### Description: 2 | 3 | 4 | 5 | 6 | ### Testing Done: 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.box 2 | *.iml 3 | *.ipr 4 | *.iws 5 | *.pyc 6 | *~ 7 | *bundle.js* 8 | *.svg 9 | .gradle 10 | /.cache/ 11 | /.coverage 12 | /.idea/ 13 | /.settings/ 14 | /.classpath/ 15 | /.project/ 16 | /.pants.* 17 | /.pids/ 18 | /.vagrant/ 19 | /api/dist/ 20 | /api/out/ 21 | /atlassian-ide-plugin.xml 22 | /build-support/*.pex 23 | /build-support/*.venv 24 | /build-support/python/*.venv 25 | /build-support/virtualenv-* 26 | /build/ 27 | /buildSrc/build/ 28 | /buildSrc/dist/ 29 | /commons-args/dist/ 30 | /commons-args/out/ 31 | /commons/dist/ 32 | /commons/out/ 33 | /dist/ 34 | /gradle-app.setting 35 | /out/ 36 | /requirements.txt 37 | /third_party/ 38 | /ui/dist/ 39 | /ui/node_modules/ 40 | /ui/out/ 41 | src/main/resources/scheduler/assets/js/*.ttf 42 | -------------------------------------------------------------------------------- /.isort.cfg: -------------------------------------------------------------------------------- 1 | # This is the isort (https://github.com/timothycrosley/isort) configuration for 2 | # Python import sorting in the aurora repository. 3 | # 4 | # To apply against the repository run: 5 | # $ build-support/isort-run 6 | # 7 | # To check that the repository passes the import order check: 8 | # $ build-support/isort-check 9 | # 10 | # If you would like to install the isort checker as a local git hook, just run 11 | # $ cp -f build-support/hooks/pre-commit .git/hooks/pre-commit 12 | # and these checks will be done automatically for each commit. 13 | # 14 | 15 | [settings] 16 | line_length=100 17 | known_first_party=apache 18 | multi_line_output=3 19 | forced_separate=gen 20 | default_section=THIRDPARTY 21 | not_skip=__init__.py 22 | combine_as_imports=True 23 | -------------------------------------------------------------------------------- /.reviewboardrc: -------------------------------------------------------------------------------- 1 | REPOSITORY = "aurora" 2 | REVIEWBOARD_URL = "https://reviews.apache.org" 3 | TARGET_GROUPS = "Aurora" 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "version": "3.1.1", 4 | "main": [ 5 | "./dist/css/bootstrap.css", 6 | "./dist/js/bootstrap.js", 7 | "./dist/fonts/glyphicons-halflings-regular.eot", 8 | "./dist/fonts/glyphicons-halflings-regular.svg", 9 | "./dist/fonts/glyphicons-halflings-regular.ttf", 10 | "./dist/fonts/glyphicons-halflings-regular.woff" 11 | ], 12 | "ignore": [ 13 | "**/.*", 14 | "_config.yml", 15 | "CNAME", 16 | "composer.json", 17 | "CONTRIBUTING.md", 18 | "docs", 19 | "js/tests" 20 | ], 21 | "dependencies": { 22 | "jquery": ">= 1.9.0" 23 | }, 24 | "homepage": "https://github.com/twbs/bootstrap", 25 | "_release": "3.1.1", 26 | "_resolution": { 27 | "type": "version", 28 | "tag": "v3.1.1", 29 | "commit": "a365d8689c3f3cee7f1acf86b61270ecca8e106d" 30 | }, 31 | "_source": "git://github.com/twbs/bootstrap.git", 32 | "_target": "~3.1.1", 33 | "_originalSource": "bootstrap", 34 | "_direct": true 35 | } -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "version": "3.1.1", 4 | "main": [ 5 | "./dist/css/bootstrap.css", 6 | "./dist/js/bootstrap.js", 7 | "./dist/fonts/glyphicons-halflings-regular.eot", 8 | "./dist/fonts/glyphicons-halflings-regular.svg", 9 | "./dist/fonts/glyphicons-halflings-regular.ttf", 10 | "./dist/fonts/glyphicons-halflings-regular.woff" 11 | ], 12 | "ignore": [ 13 | "**/.*", 14 | "_config.yml", 15 | "CNAME", 16 | "composer.json", 17 | "CONTRIBUTING.md", 18 | "docs", 19 | "js/tests" 20 | ], 21 | "dependencies": { 22 | "jquery": ">= 1.9.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/3rdparty/javascript/scheduler/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/3rdparty/javascript/scheduler/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/3rdparty/javascript/scheduler/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/3rdparty/javascript/scheduler/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/3rdparty/javascript/scheduler/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/3rdparty/javascript/scheduler/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/less/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | button& { 27 | padding: 0; 28 | cursor: pointer; 29 | background: transparent; 30 | border: 0; 31 | -webkit-appearance: none; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/less/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | &.in { 21 | display: block; 22 | } 23 | } 24 | .collapsing { 25 | position: relative; 26 | height: 0; 27 | overflow: hidden; 28 | .transition(height .35s ease); 29 | } 30 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/less/jumbotron.less: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding: @jumbotron-padding; 8 | margin-bottom: @jumbotron-padding; 9 | color: @jumbotron-color; 10 | background-color: @jumbotron-bg; 11 | 12 | h1, 13 | .h1 { 14 | color: @jumbotron-heading-color; 15 | } 16 | p { 17 | margin-bottom: (@jumbotron-padding / 2); 18 | font-size: @jumbotron-font-size; 19 | font-weight: 200; 20 | } 21 | 22 | .container & { 23 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container 24 | } 25 | 26 | .container { 27 | max-width: 100%; 28 | } 29 | 30 | @media screen and (min-width: @screen-sm-min) { 31 | padding-top: (@jumbotron-padding * 1.6); 32 | padding-bottom: (@jumbotron-padding * 1.6); 33 | 34 | .container & { 35 | padding-left: (@jumbotron-padding * 2); 36 | padding-right: (@jumbotron-padding * 2); 37 | } 38 | 39 | h1, 40 | .h1 { 41 | font-size: (@font-size-base * 4.5); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: @thumbnail-padding; 10 | margin-bottom: @line-height-computed; 11 | line-height: @line-height-base; 12 | background-color: @thumbnail-bg; 13 | border: 1px solid @thumbnail-border; 14 | border-radius: @thumbnail-border-radius; 15 | .transition(all .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | &:extend(.img-responsive); 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // Add a hover state for linked versions only 25 | a&:hover, 26 | a&:focus, 27 | a&.active { 28 | border-color: @link-color; 29 | } 30 | 31 | // Image captions 32 | .caption { 33 | padding: @thumbnail-caption-padding; 34 | color: @thumbnail-caption-color; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/less/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | .clearfix(); 11 | } 12 | .center-block { 13 | .center-block(); 14 | } 15 | .pull-right { 16 | float: right !important; 17 | } 18 | .pull-left { 19 | float: left !important; 20 | } 21 | 22 | 23 | // Toggling content 24 | // ------------------------- 25 | 26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 27 | .hide { 28 | display: none !important; 29 | } 30 | .show { 31 | display: block !important; 32 | } 33 | .invisible { 34 | visibility: hidden; 35 | } 36 | .text-hide { 37 | .text-hide(); 38 | } 39 | 40 | 41 | // Hide from screenreaders and browsers 42 | // 43 | // Credit: HTML5 Boilerplate 44 | 45 | .hidden { 46 | display: none !important; 47 | visibility: hidden !important; 48 | } 49 | 50 | 51 | // For Affix plugin 52 | // ------------------------- 53 | 54 | .affix { 55 | position: fixed; 56 | } 57 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/less/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/test-infra/requirements.txt: -------------------------------------------------------------------------------- 1 | boto==2.20.0 2 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/bootstrap/test-infra/uncached-npm-install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cp test-infra/npm-shrinkwrap.canonical.json npm-shrinkwrap.json 3 | npm install 4 | rm npm-shrinkwrap.json 5 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "version": "2.1.1", 4 | "main": "dist/jquery.js", 5 | "license": "MIT", 6 | "ignore": [ 7 | "**/.*", 8 | "build", 9 | "speed", 10 | "test", 11 | "*.md", 12 | "AUTHORS.txt", 13 | "Gruntfile.js", 14 | "package.json" 15 | ], 16 | "devDependencies": { 17 | "sizzle": "1.10.19", 18 | "requirejs": "2.1.10", 19 | "qunit": "1.14.0", 20 | "sinon": "1.8.1" 21 | }, 22 | "keywords": [ 23 | "jquery", 24 | "javascript", 25 | "library" 26 | ], 27 | "homepage": "https://github.com/jquery/jquery", 28 | "_release": "2.1.1", 29 | "_resolution": { 30 | "type": "version", 31 | "tag": "2.1.1", 32 | "commit": "4dec426aa2a6cbabb1b064319ba7c272d594a688" 33 | }, 34 | "_source": "git://github.com/jquery/jquery.git", 35 | "_target": ">= 1.9.0", 36 | "_originalSource": "jquery" 37 | } -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "version": "2.1.1", 4 | "main": "dist/jquery.js", 5 | "license": "MIT", 6 | "ignore": [ 7 | "**/.*", 8 | "build", 9 | "speed", 10 | "test", 11 | "*.md", 12 | "AUTHORS.txt", 13 | "Gruntfile.js", 14 | "package.json" 15 | ], 16 | "devDependencies": { 17 | "sizzle": "1.10.19", 18 | "requirejs": "2.1.10", 19 | "qunit": "1.14.0", 20 | "sinon": "1.8.1" 21 | }, 22 | "keywords": [ 23 | "jquery", 24 | "javascript", 25 | "library" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/ajax/parseJSON.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Support: Android 2.3 6 | // Workaround failure to string-cast null input 7 | jQuery.parseJSON = function( data ) { 8 | return JSON.parse( data + "" ); 9 | }; 10 | 11 | return jQuery.parseJSON; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/ajax/parseXML.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Cross-browser xml parsing 6 | jQuery.parseXML = function( data ) { 7 | var xml, tmp; 8 | if ( !data || typeof data !== "string" ) { 9 | return null; 10 | } 11 | 12 | // Support: IE9 13 | try { 14 | tmp = new DOMParser(); 15 | xml = tmp.parseFromString( data, "text/xml" ); 16 | } catch ( e ) { 17 | xml = undefined; 18 | } 19 | 20 | if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 21 | jQuery.error( "Invalid XML: " + data ); 22 | } 23 | return xml; 24 | }; 25 | 26 | return jQuery.parseXML; 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../core" 3 | ], function( jQuery ) { 4 | return jQuery.now(); 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/\?/); 3 | }); 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | // Return jQuery for attributes-only inclusion 10 | return jQuery; 11 | }); 12 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // Match a standalone tag 3 | return (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); 4 | }); 5 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/css/addGetHookIf.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | 3 | function addGetHookIf( conditionFn, hookFn ) { 4 | // Define the hook, we'll check on the first run if it's really needed. 5 | return { 6 | get: function() { 7 | if ( conditionFn() ) { 8 | // Hook not needed (or it's not possible to use it due to missing dependency), 9 | // remove it. 10 | // Since there are no other hooks for marginRight, remove the whole object. 11 | delete this.get; 12 | return; 13 | } 14 | 15 | // Hook needed; redefine it so that the support test is not executed again. 16 | 17 | return (this.get = hookFn).apply( this, arguments ); 18 | } 19 | }; 20 | } 21 | 22 | return addGetHookIf; 23 | 24 | }); 25 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/css/hiddenVisibleSelectors.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../selector" 4 | ], function( jQuery ) { 5 | 6 | jQuery.expr.filters.hidden = function( elem ) { 7 | // Support: Opera <= 12.12 8 | // Opera reports offsetWidths and offsetHeights less than zero on some elements 9 | return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; 10 | }; 11 | jQuery.expr.filters.visible = function( elem ) { 12 | return !jQuery.expr.filters.hidden( elem ); 13 | }; 14 | 15 | }); 16 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/css/swap.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // A method for quickly swapping in/out CSS properties to get correct calculations. 6 | jQuery.swap = function( elem, options, callback, args ) { 7 | var ret, name, 8 | old = {}; 9 | 10 | // Remember the old values, and insert the new ones 11 | for ( name in options ) { 12 | old[ name ] = elem.style[ name ]; 13 | elem.style[ name ] = options[ name ]; 14 | } 15 | 16 | ret = callback.apply( elem, args || [] ); 17 | 18 | // Revert the old values 19 | for ( name in options ) { 20 | elem.style[ name ] = old[ name ]; 21 | } 22 | 23 | return ret; 24 | }; 25 | 26 | return jQuery.swap; 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return [ "Top", "Right", "Bottom", "Left" ]; 3 | }); 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/css/var/getStyles.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return function( elem ) { 3 | return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); 4 | }; 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/css/var/isHidden.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../core", 3 | "../../selector" 4 | // css is assumed 5 | ], function( jQuery ) { 6 | 7 | return function( elem, el ) { 8 | // isHidden might be called from jQuery#filter function; 9 | // in that case, element will be second argument 10 | elem = el || elem; 11 | return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); 12 | }; 13 | }); 14 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/^margin/); 3 | }); 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/data/accepts.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | /** 6 | * Determines whether an object can have data 7 | */ 8 | jQuery.acceptData = function( owner ) { 9 | // Accepts only: 10 | // - Node 11 | // - Node.ELEMENT_NODE 12 | // - Node.DOCUMENT_NODE 13 | // - Object 14 | // - Any 15 | /* jshint -W018 */ 16 | return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 17 | }; 18 | 19 | return jQuery.acceptData; 20 | }); 21 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/data/var/data_priv.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/data/var/data_user.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/deprecated.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "./traversing" 4 | ], function( jQuery ) { 5 | 6 | // The number of elements contained in the matched element set 7 | jQuery.fn.size = function() { 8 | return this.length; 9 | }; 10 | 11 | jQuery.fn.andSelf = jQuery.fn.addBack; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/effects/animatedSelector.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../selector", 4 | "../effects" 5 | ], function( jQuery ) { 6 | 7 | jQuery.expr.filters.animated = function( elem ) { 8 | return jQuery.grep(jQuery.timers, function( fn ) { 9 | return elem === fn.elem; 10 | }).length; 11 | }; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | support.focusinBubbles = "onfocusin" in window; 6 | 7 | return support; 8 | 9 | }); 10 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/exports/global.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../var/strundefined" 4 | ], function( jQuery, strundefined ) { 5 | 6 | var 7 | // Map over jQuery in case of overwrite 8 | _jQuery = window.jQuery, 9 | 10 | // Map over the $ in case of overwrite 11 | _$ = window.$; 12 | 13 | jQuery.noConflict = function( deep ) { 14 | if ( window.$ === jQuery ) { 15 | window.$ = _$; 16 | } 17 | 18 | if ( deep && window.jQuery === jQuery ) { 19 | window.jQuery = _jQuery; 20 | } 21 | 22 | return jQuery; 23 | }; 24 | 25 | // Expose jQuery and $ identifiers, even in 26 | // AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 27 | // and CommonJS for browser emulators (#13566) 28 | if ( typeof noGlobal === strundefined ) { 29 | window.jQuery = window.$ = jQuery; 30 | } 31 | 32 | }); 33 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/jquery.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "./selector", 4 | "./traversing", 5 | "./callbacks", 6 | "./deferred", 7 | "./core/ready", 8 | "./data", 9 | "./queue", 10 | "./queue/delay", 11 | "./attributes", 12 | "./event", 13 | "./event/alias", 14 | "./manipulation", 15 | "./manipulation/_evalUrl", 16 | "./wrap", 17 | "./css", 18 | "./css/hiddenVisibleSelectors", 19 | "./serialize", 20 | "./ajax", 21 | "./ajax/xhr", 22 | "./ajax/script", 23 | "./ajax/jsonp", 24 | "./ajax/load", 25 | "./effects", 26 | "./effects/animatedSelector", 27 | "./offset", 28 | "./dimensions", 29 | "./deprecated", 30 | "./exports/amd", 31 | "./exports/global" 32 | ], function( jQuery ) { 33 | 34 | return jQuery; 35 | 36 | }); 37 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/manipulation/_evalUrl.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../ajax" 3 | ], function( jQuery ) { 4 | 5 | jQuery._evalUrl = function( url ) { 6 | return jQuery.ajax({ 7 | url: url, 8 | type: "GET", 9 | dataType: "script", 10 | async: false, 11 | global: false, 12 | "throws": true 13 | }); 14 | }; 15 | 16 | return jQuery._evalUrl; 17 | 18 | }); 19 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/^(?:checkbox|radio)$/i); 3 | }); 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/outro.js: -------------------------------------------------------------------------------- 1 | })); 2 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/queue/delay.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../queue", 4 | "../effects" // Delay is optional because of this dependency 5 | ], function( jQuery ) { 6 | 7 | // Based off of the plugin by Clint Helfers, with permission. 8 | // http://blindsignals.com/index.php/2009/07/jquery-delay/ 9 | jQuery.fn.delay = function( time, type ) { 10 | time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 11 | type = type || "fx"; 12 | 13 | return this.queue( type, function( next, hooks ) { 14 | var timeout = setTimeout( next, time ); 15 | hooks.stop = function() { 16 | clearTimeout( timeout ); 17 | }; 18 | }); 19 | }; 20 | 21 | return jQuery.fn.delay; 22 | }); 23 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/selector-sizzle.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./core", 3 | "sizzle" 4 | ], function( jQuery, Sizzle ) { 5 | 6 | jQuery.find = Sizzle; 7 | jQuery.expr = Sizzle.selectors; 8 | jQuery.expr[":"] = jQuery.expr.pseudos; 9 | jQuery.unique = Sizzle.uniqueSort; 10 | jQuery.text = Sizzle.getText; 11 | jQuery.isXMLDoc = Sizzle.isXML; 12 | jQuery.contains = Sizzle.contains; 13 | 14 | }); 15 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define([ "./selector-sizzle" ]); 2 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | return jQuery.expr.match.needsContext; 6 | }); 7 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return []; 3 | }); 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // [[Class]] -> type pairs 3 | return {}; 4 | }); 5 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.concat; 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.hasOwnProperty; 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.indexOf; 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; 3 | }); 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.push; 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/rnotwhite.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return (/\S+/g); 3 | }); 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.slice; 5 | }); 6 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/strundefined.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | return typeof undefined; 3 | }); 4 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define(function() { 2 | // All support tests are defined in their respective modules. 3 | return {}; 4 | }); 5 | -------------------------------------------------------------------------------- /3rdparty/javascript/scheduler/assets/bower_components/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.toString; 5 | }); 6 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Apache Aurora 2 | Copyright 2014-2016 The Apache Software Foundation 3 | 4 | This product includes software developed at 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /api/src/main/thrift/org/apache/thermos/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | import os 16 | 17 | python_thrift_library( 18 | sources = ['thermos_internal.thrift'], 19 | provides = setup_py( 20 | name = 'apache.thermos.thrift', 21 | version = open(os.path.join(get_buildroot(), '.auroraversion')).read().strip().upper(), 22 | description = 'Autogenerated Thermos thrift schemas.', 23 | ), 24 | dependencies = [ 25 | '3rdparty/python:thrift', 26 | ], 27 | ) 28 | -------------------------------------------------------------------------------- /build-support/embed_runner_in_executor.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | """Package thermos_runner within thermos_executor.""" 16 | 17 | import contextlib 18 | import zipfile 19 | 20 | with contextlib.closing(zipfile.ZipFile('dist/thermos_executor.pex', 21 | 'a')) as zf: 22 | zf.writestr('apache/aurora/executor/resources/__init__.py', '') 23 | zf.write('dist/thermos_runner.pex', 24 | 'apache/aurora/executor/resources/thermos_runner.pex') 25 | -------------------------------------------------------------------------------- /build-support/packer/aurora-release.json: -------------------------------------------------------------------------------- 1 | { 2 | "variables": { 3 | "base_box_ovf": "{{env `UBUNTU_OVF`}}", 4 | "cloud_token": "{{env `VAGRANT_CLOUD_TOKEN`}}", 5 | "version": "{{env `BOX_VERSION`}}" 6 | }, 7 | "builders": [{ 8 | "type": "virtualbox-ovf", 9 | "source_path": "{{user `base_box_ovf`}}", 10 | "ssh_username": "vagrant", 11 | "ssh_password": "vagrant", 12 | "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", 13 | "headless": true, 14 | "vboxmanage": [ 15 | ["modifyvm", "{{.Name}}", "--memory", "4096"], 16 | ["modifyvm", "{{.Name}}", "--cpus", "2"] 17 | ] 18 | }], 19 | "provisioners": [{ 20 | "type": "shell", 21 | "execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E bash '{{.Path}}'", 22 | "scripts": [ 23 | "build.sh" 24 | ] 25 | }], 26 | "post-processors": [[ 27 | { 28 | "type": "vagrant" 29 | }, 30 | { 31 | "type": "vagrant-cloud", 32 | "box_tag": "apache-aurora/dev-environment", 33 | "access_token": "{{user `cloud_token`}}", 34 | "version": "{{user `version`}}" 35 | } 36 | ] 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /build-support/packer/aurora.json: -------------------------------------------------------------------------------- 1 | { 2 | "variables": { 3 | "base_box_ovf": "{{env `UBUNTU_OVF`}}" 4 | }, 5 | "builders": [{ 6 | "type": "virtualbox-ovf", 7 | "source_path": "{{user `base_box_ovf`}}", 8 | "ssh_username": "vagrant", 9 | "ssh_password": "vagrant", 10 | "shutdown_command": "echo 'vagrant' | sudo -S shutdown -P now", 11 | "headless": true, 12 | "vboxmanage": [ 13 | ["modifyvm", "{{.Name}}", "--memory", "4096"], 14 | ["modifyvm", "{{.Name}}", "--cpus", "2"] 15 | ] 16 | }], 17 | "provisioners": [{ 18 | "type": "shell", 19 | "execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E bash '{{.Path}}'", 20 | "scripts": [ 21 | "build.sh" 22 | ] 23 | }], 24 | "post-processors": ["vagrant"] 25 | } 26 | -------------------------------------------------------------------------------- /build-support/python/checkstyle-check: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Copyright 2014 Apache Software Foundation 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of 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, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | set -e 18 | 19 | HERE=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd) 20 | 21 | # Lint everything except targets with native Mesos deps that might be missing on dev machines 22 | $HERE/../../pants lint.pythonstyle src/{main,test}/python:: --tag=-mesos-native 23 | -------------------------------------------------------------------------------- /build-support/python/clean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | set -ux 16 | 17 | AURORA_BASE=$(dirname "$0")/../.. 18 | rm -rf "$HOME/.pex" 19 | rm -rf "$AURORA_BASE/.pants.d" 20 | rm -rf "$AURORA_BASE/.python" 21 | rm -f "$AURORA_BASE/pants.pex" 22 | find "$AURORA_BASE" -name '*.pyc' | xargs rm -f 23 | -------------------------------------------------------------------------------- /build-support/python/isort-check: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | set -e 15 | 16 | HERE=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd) 17 | $HERE/../../pants fmt.isort src/{main,test}/python:: -- --diff 18 | -------------------------------------------------------------------------------- /build-support/python/isort-run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | set -e 15 | 16 | HERE=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd) 17 | $HERE/../../pants fmt.isort src/{main,test}/python:: 18 | -------------------------------------------------------------------------------- /build-support/thrift/.gitignore: -------------------------------------------------------------------------------- 1 | /thrift 2 | -------------------------------------------------------------------------------- /buildSrc/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | 15 | if (gradle.gradleVersion != GRADLE_VERSION) { 16 | throw new GradleException("Building is only supported with gradle version: $GRADLE_VERSION .") 17 | } 18 | -------------------------------------------------------------------------------- /buildSrc/gradle.properties: -------------------------------------------------------------------------------- 1 | # When upgrading gradle versions, be sure to update the relevant files in the aurora-packaging 2 | # repo as well. See https://reviews.apache.org/r/39113/ for an example. 3 | GRADLE_VERSION = 4.10.2 4 | -------------------------------------------------------------------------------- /commons/src/main/java/org/apache/aurora/common/base/Command.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.common.base; 15 | 16 | /** 17 | * A command that does not throw any checked exceptions. 18 | * 19 | * @author John Sirois 20 | */ 21 | public interface Command extends ExceptionalCommand { 22 | // convenience typedef 23 | } 24 | -------------------------------------------------------------------------------- /commons/src/main/java/org/apache/aurora/common/base/Commands.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.common.base; 15 | 16 | /** 17 | * Utility functions for working with commands. 18 | * 19 | * @author John Sirois 20 | */ 21 | public final class Commands { 22 | 23 | /** 24 | * A command that does nothing when executed. 25 | */ 26 | public static final Command NOOP = () -> { 27 | // noop 28 | }; 29 | 30 | private Commands() { 31 | // utility 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /commons/src/main/java/org/apache/aurora/common/stats/StatRegistry.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.common.stats; 15 | 16 | /** 17 | * A registry of stats. 18 | * 19 | * @author William Farner 20 | */ 21 | public interface StatRegistry { 22 | 23 | /** 24 | * Gets all stats in the registry. 25 | * 26 | * @return All registered stats. 27 | */ 28 | Iterable> getStats(); 29 | } 30 | -------------------------------------------------------------------------------- /commons/src/test/resources/org/apache/aurora/common/util/templating/template.st: -------------------------------------------------------------------------------- 1 | $header$ 2 | 3 | $items:{ item | 4 | The $item.name$ costs \$$item.price$. 5 | }$ 6 | 7 | $footer$ 8 | -------------------------------------------------------------------------------- /config/checkstyle/apache.header: -------------------------------------------------------------------------------- 1 | Licensed under the Apache License, Version 2.0 (the "License"); 2 | you may not use this file except in compliance with the License. 3 | You may obtain a copy of the License at 4 | 5 | http://www.apache.org/licenses/LICENSE-2.0 6 | 7 | Unless required by applicable law or agreed to in writing, software 8 | distributed under the License is distributed on an "AS IS" BASIS, 9 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | See the License for the specific language governing permissions and 11 | limitations under the License. 12 | -------------------------------------------------------------------------------- /config/checkstyle/apache.header.regex: -------------------------------------------------------------------------------- 1 | ^\/\*\*$ 2 | ^ \* Licensed under the Apache License, Version 2.0 \(the "License"\);$ 3 | ^ \* you may not use this file except in compliance with the License.$ 4 | ^ \* You may obtain a copy of the License at$ 5 | ^ \*$ 6 | ^ \* http://www.apache.org/licenses/LICENSE-2.0$ 7 | ^ \*$ 8 | ^ \* Unless required by applicable law or agreed to in writing, software$ 9 | ^ \* distributed under the License is distributed on an "AS IS" BASIS,$ 10 | ^ \* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.$ 11 | ^ \* See the License for the specific language governing permissions and$ 12 | ^ \* limitations under the License.$ 13 | ^ \*/ 14 | -------------------------------------------------------------------------------- /docs/images/CPUavailability.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/CPUavailability.png -------------------------------------------------------------------------------- /docs/images/CompletedTasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/CompletedTasks.png -------------------------------------------------------------------------------- /docs/images/HelloWorldJob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/HelloWorldJob.png -------------------------------------------------------------------------------- /docs/images/RoleJobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/RoleJobs.png -------------------------------------------------------------------------------- /docs/images/RunningJob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/RunningJob.png -------------------------------------------------------------------------------- /docs/images/ScheduledJobs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/ScheduledJobs.png -------------------------------------------------------------------------------- /docs/images/TaskBreakdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/TaskBreakdown.png -------------------------------------------------------------------------------- /docs/images/aurora_hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/aurora_hierarchy.png -------------------------------------------------------------------------------- /docs/images/aurora_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/aurora_logo.png -------------------------------------------------------------------------------- /docs/images/components.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/components.odg -------------------------------------------------------------------------------- /docs/images/components.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/components.png -------------------------------------------------------------------------------- /docs/images/debug-client-test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/debug-client-test.png -------------------------------------------------------------------------------- /docs/images/debugging-client-test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/debugging-client-test.png -------------------------------------------------------------------------------- /docs/images/killedtask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/killedtask.png -------------------------------------------------------------------------------- /docs/images/lifeofatask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/lifeofatask.png -------------------------------------------------------------------------------- /docs/images/presentations/02_19_2015_aurora_adopters_panel_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/02_19_2015_aurora_adopters_panel_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/02_19_2015_aurora_at_tellapart_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/02_19_2015_aurora_at_tellapart_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/02_19_2015_aurora_at_twitter_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/02_19_2015_aurora_at_twitter_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/02_28_2015_apache_aurora_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/02_28_2015_apache_aurora_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/03_07_2015_aurora_mesos_in_practice_at_twitter_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/03_07_2015_aurora_mesos_in_practice_at_twitter_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/03_25_2014_introduction_to_aurora_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/03_25_2014_introduction_to_aurora_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/04_30_2015_monolith_to_microservices_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/04_30_2015_monolith_to_microservices_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/08_21_2014_past_present_future_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/08_21_2014_past_present_future_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/09_20_2015_shipping_code_with_aurora_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/09_20_2015_shipping_code_with_aurora_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/09_20_2015_twitter_production_scale_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/09_20_2015_twitter_production_scale_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/10_08_2015_mesos_aurora_on_a_small_scale_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/10_08_2015_mesos_aurora_on_a_small_scale_thumb.png -------------------------------------------------------------------------------- /docs/images/presentations/10_08_2015_sla_aware_maintenance_for_operators_thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/presentations/10_08_2015_sla_aware_maintenance_for_operators_thumb.png -------------------------------------------------------------------------------- /docs/images/runningtask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/runningtask.png -------------------------------------------------------------------------------- /docs/images/stderr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/stderr.png -------------------------------------------------------------------------------- /docs/images/stdout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/stdout.png -------------------------------------------------------------------------------- /docs/images/storage_hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/docs/images/storage_hierarchy.png -------------------------------------------------------------------------------- /docs/reference/scheduler-endpoints.md: -------------------------------------------------------------------------------- 1 | # HTTP endpoints 2 | 3 | There are a number of HTTP endpoints that the Aurora scheduler exposes. These allow various 4 | operational tasks to be performed on the scheduler. Below is an (incomplete) list of such endpoints 5 | and a brief explanation of what they do. 6 | 7 | ## Leader health 8 | The /leaderhealth endpoint enables performing health checks on the scheduler instances inorder 9 | to forward requests to the leading scheduler. This is typically used by a load balancer such as 10 | HAProxy or AWS ELB. 11 | 12 | When a HTTP GET request is issued on this endpoint, it responds as follows: 13 | 14 | - If the instance that received the GET request is the leading scheduler, a HTTP status code of 15 | `200 OK` is returned. 16 | - If the instance that received the GET request is not the leading scheduler but a leader does 17 | exist, a HTTP status code of `503 SERVICE_UNAVAILABLE` is returned. 18 | - If no leader currently exists or the leader is unknown, a HTTP status code of `502 BAD_GATEWAY` 19 | is returned. 20 | -------------------------------------------------------------------------------- /examples/jobs/cron_hello_world.aurora: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | # cron_hello_world.aurora 16 | # A cron job that runs every 5 minutes. 17 | jobs = [ 18 | Job( 19 | cluster = 'devcluster', 20 | role = 'www-data', 21 | environment = 'test', 22 | name = 'cron_hello_world', 23 | cron_schedule = '*/5 * * * *', 24 | task = SimpleTask( 25 | 'cron_hello_world', 26 | 'echo "Hello world from cron, the time is now $(date --rfc-822)"'), 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /examples/jobs/hello_world.aurora: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | hello = Process( 16 | name = 'hello', 17 | cmdline = """ 18 | while true; do 19 | echo hello world 20 | sleep 10 21 | done 22 | """) 23 | 24 | task = SequentialTask( 25 | processes = [hello], 26 | resources = Resources(cpu = 1.0, ram = 128*MB, disk = 128*MB)) 27 | 28 | jobs = [Service( 29 | task = task, cluster = 'devcluster', role = 'www-data', environment = 'prod', name = 'hello')] -------------------------------------------------------------------------------- /examples/vagrant/clusters.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "name": "devcluster", 3 | "zk": "192.168.33.7", 4 | "scheduler_zk_path": "/aurora/scheduler", 5 | "auth_mechanism": "UNAUTHENTICATED", 6 | "slave_run_directory": "latest", 7 | "slave_root": "/var/lib/mesos" 8 | }] -------------------------------------------------------------------------------- /examples/vagrant/clusters_direct.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "name": "devcluster", 3 | "scheduler_uri": "http://localhost:8081", 4 | "auth_mechanism": "UNAUTHENTICATED", 5 | "slave_run_directory": "latest", 6 | "slave_root": "/var/lib/mesos" 7 | }] -------------------------------------------------------------------------------- /examples/vagrant/clusters_kerberos.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "name": "devcluster", 3 | "zk": "192.168.33.7", 4 | "scheduler_zk_path": "/aurora/scheduler", 5 | "auth_mechanism": "KERBEROS", 6 | "slave_run_directory": "latest", 7 | "slave_root": "/var/lib/mesos" 8 | }] -------------------------------------------------------------------------------- /examples/vagrant/config/announcer-auth.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth": [ 3 | { 4 | "scheme": "digest", 5 | "credential": "user:pass" 6 | } 7 | ], 8 | "acl": [ 9 | { 10 | "scheme": "digest", 11 | "credential": "user:pass", 12 | "permissions": { 13 | "read": true, 14 | "create": true, 15 | "delete": true, 16 | "write": true 17 | } 18 | }, 19 | { 20 | "scheme": "world", 21 | "credential": "anyone", 22 | "permissions": { 23 | "read": true, 24 | "delete": true 25 | } 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/README.md: -------------------------------------------------------------------------------- 1 | # Configuring the mesos package provided by mesosphere 2 | 3 | The mesosphere mesos package for debian is configured by creating files whose names match command 4 | line argument and environment variables. 5 | 6 | When setting up our environment, the files under directories `etc_mesos-master` and 7 | `etc_mesos-slave` are copied to `/etc/mesos-master` and `/etc/mesos-slave`, respectively. 8 | 9 | For more details, and the script that reads these files, see 10 | [here](https://github.com/mesosphere/mesos-deb-packaging/blob/fd3c3866a847d07a8beb0cf8811f173406f910df/mesos-init-wrapper#L12-L48). 11 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-master/ip: -------------------------------------------------------------------------------- 1 | 192.168.33.7 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-master/roles: -------------------------------------------------------------------------------- 1 | aurora-role 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/appc_store_dir: -------------------------------------------------------------------------------- 1 | /tmp/mesos/images/appc 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/containerizers: -------------------------------------------------------------------------------- 1 | docker,mesos 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/docker_registry: -------------------------------------------------------------------------------- 1 | /tmp/mesos/images/docker 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/executor_registration_timeout: -------------------------------------------------------------------------------- 1 | 1mins 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/hostname: -------------------------------------------------------------------------------- 1 | 192.168.33.7 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/image_providers: -------------------------------------------------------------------------------- 1 | appc,docker 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/image_provisioner_backend: -------------------------------------------------------------------------------- 1 | copy 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/ip: -------------------------------------------------------------------------------- 1 | 192.168.33.7 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/isolation: -------------------------------------------------------------------------------- 1 | filesystem/linux,disk/du,docker/runtime 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/modules: -------------------------------------------------------------------------------- 1 | { 2 | "libraries": { 3 | "file": "/usr/lib/libfixed_resource_estimator.so", 4 | "modules": { 5 | "name": "org_apache_mesos_FixedResourceEstimator", 6 | "parameters": { 7 | "key": "resources", 8 | "value": "cpus:3;mem:512" 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/resource_estimator: -------------------------------------------------------------------------------- 1 | org_apache_mesos_FixedResourceEstimator 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/resources: -------------------------------------------------------------------------------- 1 | cpus(aurora-role):0.5;cpus(*):3.5;mem(aurora-role):1024;disk:20000;gpus(*):4 2 | -------------------------------------------------------------------------------- /examples/vagrant/mesos_config/etc_mesos-slave/work_dir: -------------------------------------------------------------------------------- 1 | /var/lib/mesos 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | rootProject.name = 'aurora' 15 | include 'ui', 'api', 'buildSrc', 'commons-args', 'commons' 16 | -------------------------------------------------------------------------------- /src/dist/etc/shiro.example.ini: -------------------------------------------------------------------------------- 1 | # Licensed under the Apache License, Version 2.0 (the "License"); 2 | # you may not use this file except in compliance with the License. 3 | # You may obtain a copy of the License at 4 | # 5 | # http://www.apache.org/licenses/LICENSE-2.0 6 | # 7 | # Unless required by applicable law or agreed to in writing, software 8 | # distributed under the License is distributed on an "AS IS" BASIS, 9 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | # See the License for the specific language governing permissions and 11 | # limitations under the License. 12 | # 13 | # Example shiro.ini. 14 | # For a reference on how to configure this, see 15 | # http://shiro.apache.org/configuration.html#Configuration-INISections 16 | # Note that only the [users] and [roles] sections are supported, configuration of protected urls 17 | # and the objects Shiro uses is done via command-line flags or deliberately left unconfigurable. 18 | [users] 19 | aurora = secret, admin 20 | 21 | [roles] 22 | admin = * 23 | -------------------------------------------------------------------------------- /src/jmh/java/org/apache/aurora/benchmark/fakes/FakeEventSink.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.benchmark.fakes; 15 | 16 | import org.apache.aurora.scheduler.events.EventSink; 17 | import org.apache.aurora.scheduler.events.PubsubEvent; 18 | 19 | public class FakeEventSink implements EventSink { 20 | @Override 21 | public void post(PubsubEvent event) { 22 | // no-op 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/TaskStatusHandler.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler; 15 | 16 | import org.apache.mesos.v1.Protos.TaskStatus; 17 | 18 | /** 19 | * A handler of task status updates. 20 | */ 21 | public interface TaskStatusHandler { 22 | /** 23 | * Informs the status handler that a status update has been received for a task. 24 | * 25 | * @param status The status update. 26 | */ 27 | void statusUpdate(TaskStatus status); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/config/types/DataAmount.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | 15 | package org.apache.aurora.scheduler.config.types; 16 | 17 | import org.apache.aurora.common.quantity.Amount; 18 | import org.apache.aurora.common.quantity.Data; 19 | 20 | public class DataAmount extends Amount { 21 | public DataAmount(int number, Data unit) { 22 | super(number, unit, Integer.MAX_VALUE); 23 | } 24 | 25 | @Override protected Integer scale(double multiplier) { 26 | return (int) (getValue() * multiplier); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/config/types/TimeAmount.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | 15 | package org.apache.aurora.scheduler.config.types; 16 | 17 | import org.apache.aurora.common.quantity.Amount; 18 | import org.apache.aurora.common.quantity.Time; 19 | 20 | public class TimeAmount extends Amount { 21 | public TimeAmount(long number, Time unit) { 22 | super(number, unit, Long.MAX_VALUE); 23 | } 24 | 25 | @Override protected Long scale(double multiplier) { 26 | return (long) (getValue() * multiplier); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/configuration/executor/Executors.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.configuration.executor; 15 | 16 | import org.apache.mesos.v1.Protos.ExecutorID; 17 | 18 | /** 19 | * Utility class for executor-related fields. 20 | */ 21 | public final class Executors { 22 | private Executors() { 23 | // Utility class. 24 | } 25 | 26 | public static final ExecutorID PLACEHOLDER_EXECUTOR_ID = ExecutorID.newBuilder() 27 | .setValue("PLACEHOLDER") 28 | .build(); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/cron/CronException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.cron; 15 | 16 | /** 17 | * Exception class to signal a failure in the underlying cron implementation. 18 | */ 19 | public class CronException extends Exception { 20 | public CronException(String msg) { 21 | super(msg); 22 | } 23 | 24 | public CronException(String msg, Throwable t) { 25 | super(msg, t); 26 | } 27 | 28 | public CronException(Throwable t) { 29 | super(t); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/events/EventSink.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.events; 15 | 16 | /** 17 | * A publishing channel for pubsub events, which will cause the event to be announced to relevant 18 | * subscribers. 19 | */ 20 | public interface EventSink { 21 | 22 | /** 23 | * Posts an event. 24 | * 25 | * @param event Event to announce. 26 | */ 27 | void post(PubsubEvent event); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/http/HttpService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.http; 15 | 16 | import com.google.common.net.HostAndPort; 17 | 18 | /** 19 | * The HTTP service provided by the application. 20 | */ 21 | public interface HttpService { 22 | 23 | /** 24 | * Gets the address that can be used by clients to access the service. 25 | * 26 | * @return Service address. 27 | */ 28 | HostAndPort getAddress(); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/offers/OfferOrder.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.offers; 15 | 16 | /** 17 | * The default ordering for OfferManager to return offers in. 18 | */ 19 | public enum OfferOrder { 20 | CPU, 21 | MEMORY, 22 | DISK, 23 | REVOCABLE_CPU, 24 | RANDOM 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/scheduling/TaskAssignerImplModule.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.scheduling; 15 | 16 | import javax.inject.Singleton; 17 | 18 | import com.google.inject.AbstractModule; 19 | 20 | /** 21 | * The default TaskAssigner implementation. 22 | */ 23 | public class TaskAssignerImplModule extends AbstractModule { 24 | 25 | @Override 26 | protected void configure() { 27 | bind(TaskAssigner.class).to(TaskAssignerImpl.class); 28 | bind(TaskAssignerImpl.class).in(Singleton.class); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/spi/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | /** 15 | * Service Provider Interface for Aurora. Java classes outside this package, even public ones, 16 | * will not necessarily be backwards ABI-compatible across releases unless they are explicitly 17 | * documented as being part of a public API or SPI. 18 | */ 19 | @ParametersAreNonnullByDefault 20 | package org.apache.aurora.scheduler.spi; 21 | 22 | import javax.annotation.ParametersAreNonnullByDefault; 23 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/state/UUIDGenerator.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.state; 15 | 16 | import java.util.UUID; 17 | 18 | /** 19 | * Wraps {@link java.util.UUID#randomUUID()} to facilitate unit testing. 20 | */ 21 | public interface UUIDGenerator { 22 | UUID createNew(); 23 | 24 | class UUIDGeneratorImpl implements UUIDGenerator { 25 | @Override 26 | public UUID createNew() { 27 | return UUID.randomUUID(); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/storage/log/StreamManagerFactory.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.storage.log; 15 | 16 | import org.apache.aurora.scheduler.log.Log; 17 | 18 | /** 19 | * Creates a StreamManager from an open stream. 20 | */ 21 | interface StreamManagerFactory { 22 | StreamManager create(Log.Stream stream); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/org/apache/aurora/scheduler/updater/UpdateConfigurationException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.updater; 15 | 16 | /** 17 | * Thrown when an invalid job update configuration is encountered. 18 | */ 19 | public class UpdateConfigurationException extends Exception { 20 | public UpdateConfigurationException(String msg) { 21 | super(msg); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/python/apache/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | __import__('pkg_resources').declare_namespace(__name__) 16 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | __import__('pkg_resources').declare_namespace(__name__) 16 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/admin/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/client/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | __import__('pkg_resources').declare_namespace(__name__) 16 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/client/binding_helpers/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/client/cli/.auroraversion: -------------------------------------------------------------------------------- 1 | ../../../../../../../.auroraversion -------------------------------------------------------------------------------- /src/main/python/apache/aurora/client/cli/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | resources( 16 | name = 'auroraversion', 17 | sources = [ '.auroraversion' ] 18 | ) 19 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/client/docker/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/common/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/common/auth/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/common/health_check/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/config/repl.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | import code 16 | 17 | from twitter.common.lang import Compatibility 18 | 19 | from apache.aurora.config.loader import AuroraConfigLoader 20 | 21 | code.interact('Mesos Config REPL', 22 | local=Compatibility.exec_function(AuroraConfigLoader.DEFAULT_SCHEMA, globals())) 23 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/config/schema/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/executor/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | __import__('pkg_resources').declare_namespace(__name__) 16 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/executor/bin/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/executor/common/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/executor/common/task_runner.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | from abc import abstractmethod 16 | 17 | from twitter.common.lang import Interface 18 | 19 | from .status_checker import StatusChecker 20 | 21 | 22 | class TaskError(Exception): 23 | pass 24 | 25 | 26 | class TaskRunner(StatusChecker): 27 | # For now, TaskRunner should just maintain the StatusChecker API. 28 | pass 29 | 30 | 31 | class TaskRunnerProvider(Interface): 32 | @abstractmethod 33 | def from_assigned_task(self, assigned_task, sandbox): 34 | pass 35 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/kerberos/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/aurora/tools/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | __import__('pkg_resources').declare_namespace(__name__) 16 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | __import__('pkg_resources').declare_namespace(__name__) 16 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/cli/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/cli/commands/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/common/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/common/constants.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | DEFAULT_CHECKPOINT_ROOT = "/var/run/thermos" 16 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/common/statuses.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | INTERNAL_ERROR = 101 16 | INVALID_TASK = 102 17 | UNKNOWN_ERROR = 103 18 | UNKNOWN_USER = 104 19 | TERMINAL_TASK = 105 20 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/config/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | import os 16 | 17 | 18 | python_library( 19 | name = 'config', 20 | sources = rglobs('*.py'), 21 | dependencies = [ 22 | '3rdparty/python:pystachio', 23 | '3rdparty/python:twitter.common.lang', 24 | 'src/main/python/apache/thermos/common', 25 | ], 26 | provides = setup_py( 27 | name = 'apache.thermos.config', 28 | version = open(os.path.join(get_buildroot(), '.auroraversion')).read().strip().upper(), 29 | description = 'Thermos configuration schema and loader.', 30 | ) 31 | ) 32 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/config/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/config/schema.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | from .schema_base import * # noqa 16 | from .schema_helpers import * # noqa 17 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/core/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | __import__('pkg_resources').declare_namespace(__name__) 16 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/monitoring/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/observer/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/observer/http/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/observer/http/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/main/python/apache/thermos/observer/http/assets/favicon.ico -------------------------------------------------------------------------------- /src/main/python/apache/thermos/observer/http/templating.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | import os 16 | 17 | import pkg_resources 18 | 19 | 20 | class HttpTemplate(object): 21 | @staticmethod 22 | def load(name): 23 | return pkg_resources.resource_string( 24 | __name__, os.path.join('templates', '%s.tpl' % name)) 25 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/runner/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/python/apache/thermos/testing/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | -------------------------------------------------------------------------------- /src/main/resources/org/apache/aurora/scheduler/http/structdump.st: -------------------------------------------------------------------------------- 1 | 14 | 15 | Aurora Struct Dump 16 | $id$ 17 | 18 |
19 |       $structPretty$
20 |     
21 | 22 | $if(exception)$ 23 | Exception: $exception$ 24 | $endif$ 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/resources/org/apache/aurora/scheduler/tiers.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": "preemptible", 3 | "tiers": 4 | { 5 | "preferred": 6 | { 7 | "preemptible": false, 8 | "revocable": false 9 | }, 10 | "preemptible": 11 | { 12 | "preemptible": true, 13 | "revocable": false 14 | }, 15 | "revocable": 16 | { 17 | "preemptible": true, 18 | "revocable": true 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/resources/scheduler/assets/images/aurora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/main/resources/scheduler/assets/images/aurora.png -------------------------------------------------------------------------------- /src/main/resources/scheduler/assets/images/aurora_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/main/resources/scheduler/assets/images/aurora_logo.png -------------------------------------------------------------------------------- /src/main/resources/scheduler/assets/images/aurora_logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/main/resources/scheduler/assets/images/aurora_logo_white.png -------------------------------------------------------------------------------- /src/main/resources/scheduler/assets/images/viz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/main/resources/scheduler/assets/images/viz.png -------------------------------------------------------------------------------- /src/test/java/org/apache/aurora/GuavaUtilsTest.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora; 15 | 16 | import com.google.common.collect.ImmutableList; 17 | import com.google.common.collect.ImmutableSet; 18 | 19 | import org.junit.Test; 20 | 21 | import static org.junit.Assert.assertEquals; 22 | 23 | public class GuavaUtilsTest { 24 | @Test 25 | public void testToImmutableSet() { 26 | assertEquals( 27 | ImmutableSet.of("b", "c", "a"), 28 | ImmutableList.of("a", "b", "c").stream().collect(GuavaUtils.toImmutableSet())); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/test/java/org/apache/aurora/scheduler/app/local/simulator/events/Started.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.app.local.simulator.events; 15 | 16 | /** 17 | * Event indicating that the driver has started. 18 | */ 19 | public class Started { 20 | } 21 | -------------------------------------------------------------------------------- /src/test/java/org/apache/aurora/scheduler/base/ConversionsTest.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package org.apache.aurora.scheduler.base; 15 | 16 | import org.apache.mesos.v1.Protos; 17 | import org.junit.Test; 18 | 19 | import static org.junit.Assert.assertNotNull; 20 | 21 | public class ConversionsTest { 22 | @Test 23 | public void testAllStatesHandled() { 24 | for (Protos.TaskState state : Protos.TaskState.values()) { 25 | assertNotNull(Conversions.convertProtoState(state)); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_library( 16 | name = 'aurora', 17 | sources = [ 'api_util.py' ], 18 | dependencies = [ 19 | 'api/src/main/thrift/org/apache/aurora/gen', 20 | 'src/main/python/apache/aurora/client', 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/client/api/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'api', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | '3rdparty/python:mox', 21 | 'api/src/main/thrift/org/apache/aurora/gen', 22 | 'src/main/python/apache/aurora/client', 23 | 'src/main/python/apache/aurora/common', 24 | 'src/test/python/apache/aurora/client:lib_fake_scheduler_proxy', 25 | ], 26 | ) 27 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/client/cli/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'cli', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | '3rdparty/python:twitter.common.contextutil', 21 | 'src/main/python/apache/aurora/client', 22 | 'src/test/python/apache/aurora', 23 | ] 24 | ) 25 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/client/docker/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'docker', 17 | sources = globs('*py'), 18 | dependencies = [ 19 | '3rdparty/python:requests', 20 | '3rdparty/python:requests-mock', 21 | '3rdparty/python:twitter.common.contextutil', 22 | 'src/main/python/apache/aurora/client' 23 | ] 24 | ) 25 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/client/hooks/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests(name = 'hooks', 16 | sources = globs('*.py'), 17 | dependencies = [ 18 | '3rdparty/python:mock', 19 | 'src/main/python/apache/aurora/common', 20 | 'src/main/python/apache/aurora/client', 21 | ], 22 | ) 23 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/common/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'common', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | '3rdparty/python:twitter.common.contextutil', 21 | '3rdparty/python:twitter.common.options', 22 | 'api/src/main/thrift/org/apache/aurora/gen', 23 | 'src/main/python/apache/aurora/common', 24 | ] 25 | ) 26 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/common/health_check/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'health_check', 17 | sources = globs('*py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | '3rdparty/python:mox', 21 | 'src/main/python/apache/aurora/common', 22 | ] 23 | ) 24 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/config/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'config', 17 | sources = globs('*py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | '3rdparty/python:requests-mock', 21 | '3rdparty/python:twitter.common.contextutil', 22 | 'api/src/main/thrift/org/apache/aurora/gen', 23 | 'src/main/python/apache/aurora/config', 24 | 'src/main/python/apache/aurora/client', 25 | ], 26 | coverage = [ 27 | 'apache.aurora.config', 28 | 'apache.thermos.config' 29 | ] 30 | ) 31 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/executor/bin/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'bin', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | 'src/main/python/apache/aurora/executor', 21 | ], 22 | ) 23 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/executor/test_executor_vars.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | from apache.aurora.executor.executor_vars import ExecutorVars 16 | 17 | 18 | def test_init(): 19 | self = ExecutorVars() 20 | assert self._orphan is False 21 | samples = self.metrics.sample() 22 | assert samples['orphan'] == 0 23 | 24 | 25 | def test_sample(): 26 | self = ExecutorVars() 27 | assert self.sample() is True 28 | -------------------------------------------------------------------------------- /src/test/python/apache/aurora/tools/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'tools', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | 'src/main/python/apache/aurora/tools:thermos_observer', 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /src/test/python/apache/thermos/cli/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'cli', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | 'src/main/python/apache/thermos/cli', 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /src/test/python/apache/thermos/cli/commands/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'commands', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | 'src/main/python/apache/thermos/cli', 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /src/test/python/apache/thermos/cli/test_main.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | 16 | def test_noop(): 17 | from apache.thermos.cli import main 18 | assert main is not None 19 | -------------------------------------------------------------------------------- /src/test/python/apache/thermos/common/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'common', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:twitter.common.testing', 20 | 'src/main/python/apache/thermos/common', 21 | 'src/main/python/apache/thermos/config', 22 | ], 23 | ) 24 | -------------------------------------------------------------------------------- /src/test/python/apache/thermos/config/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'config', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:twitter.common.collections', 20 | 'src/main/python/apache/thermos/config', 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /src/test/python/apache/thermos/core/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'core', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | '3rdparty/python:psutil', 21 | '3rdparty/python:twitter.common.contextutil', 22 | '3rdparty/python:twitter.common.quantity', 23 | '3rdparty/python:twitter.common.process', 24 | 'src/main/python/apache/thermos/config', 25 | 'src/main/python/apache/thermos/core', 26 | 'src/main/python/apache/thermos/monitoring', 27 | 'src/main/python/apache/thermos/testing', 28 | ] 29 | ) 30 | -------------------------------------------------------------------------------- /src/test/python/apache/thermos/observer/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'observer', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | 'src/main/python/apache/thermos/monitoring', 21 | 'src/main/python/apache/thermos/observer', 22 | ] 23 | ) 24 | -------------------------------------------------------------------------------- /src/test/python/apache/thermos/observer/http/BUILD: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | python_tests( 16 | name = 'http', 17 | sources = globs('*.py'), 18 | dependencies = [ 19 | '3rdparty/python:mock', 20 | '3rdparty/python:requests', 21 | 'src/main/python/apache/thermos/monitoring', 22 | 'src/main/python/apache/thermos/observer', 23 | ] 24 | ) 25 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/configuration/executor/test-missing-field.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "executor": { 4 | } 5 | } 6 | ] 7 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/http/api/security/shiro-example.ini: -------------------------------------------------------------------------------- 1 | ; 2 | ; Licensed under the Apache License, Version 2.0 (the "License"); 3 | ; you may not use this file except in compliance with the License. 4 | ; You may obtain a copy of the License at 5 | ; 6 | ; http://www.apache.org/licenses/LICENSE-2.0 7 | ; 8 | ; Unless required by applicable law or agreed to in writing, software 9 | ; distributed under the License is distributed on an "AS IS" BASIS, 10 | ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | ; See the License for the specific language governing permissions and 12 | ; limitations under the License. 13 | ; 14 | 15 | ; For documentation on the format see http://shiro.apache.org/configuration.html 16 | ; Note that we only use the [users] and [roles] sections - others are configured by Guice. 17 | ; Unsuitable for production use. 18 | [users] 19 | root = secret, admin 20 | wfarner = password, eng 21 | ksweeney = 12345 22 | 23 | [roles] 24 | admin = * 25 | eng = thrift.AuroraSchedulerManager:* 26 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/http/api/security/shiro-malformed-extra-sections.ini: -------------------------------------------------------------------------------- 1 | ; 2 | ; Licensed under the Apache License, Version 2.0 (the "License"); 3 | ; you may not use this file except in compliance with the License. 4 | ; You may obtain a copy of the License at 5 | ; 6 | ; http://www.apache.org/licenses/LICENSE-2.0 7 | ; 8 | ; Unless required by applicable law or agreed to in writing, software 9 | ; distributed under the License is distributed on an "AS IS" BASIS, 10 | ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | ; See the License for the specific language governing permissions and 12 | ; limitations under the License. 13 | ; 14 | 15 | ; Malformed ini file for test 16 | [users] 17 | root = secret, admin 18 | 19 | [roles] 20 | admin = * 21 | 22 | ; Documentation found with a web search might suggest creating this section; however our shiro 23 | ; wiring is done with Guice. 24 | [main] 25 | myRealm = com.company.shiro.realm.MyRealm 26 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/http/api/security/shiro-malformed-no-sections.ini: -------------------------------------------------------------------------------- 1 | ; 2 | ; Licensed under the Apache License, Version 2.0 (the "License"); 3 | ; you may not use this file except in compliance with the License. 4 | ; You may obtain a copy of the License at 5 | ; 6 | ; http://www.apache.org/licenses/LICENSE-2.0 7 | ; 8 | ; Unless required by applicable law or agreed to in writing, software 9 | ; distributed under the License is distributed on an "AS IS" BASIS, 10 | ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | ; See the License for the specific language governing permissions and 12 | ; limitations under the License. 13 | ; 14 | 15 | ;; Oops, forgot to uncomment this. 16 | ;[users] 17 | ;root = secret -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/http/api/security/shiro-missing-sections.ini: -------------------------------------------------------------------------------- 1 | ; 2 | ; Licensed under the Apache License, Version 2.0 (the "License"); 3 | ; you may not use this file except in compliance with the License. 4 | ; You may obtain a copy of the License at 5 | ; 6 | ; http://www.apache.org/licenses/LICENSE-2.0 7 | ; 8 | ; Unless required by applicable law or agreed to in writing, software 9 | ; distributed under the License is distributed on an "AS IS" BASIS, 10 | ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | ; See the License for the specific language governing permissions and 12 | ; limitations under the License. 13 | ; 14 | 15 | ; This section could be provided by another Realm. 16 | ;[users] 17 | ;root = secret, admin 18 | 19 | [roles] 20 | admin = * 21 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/pruneJobUpdateHistory: -------------------------------------------------------------------------------- 1 | { 2 | "17": { 3 | "rec": { 4 | "1": { 5 | "i32": 2 6 | }, 7 | "2": { 8 | "i64": 4 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/removeHostMaintenanceRequest: -------------------------------------------------------------------------------- 1 | { 2 | "20": { 3 | "rec": { 4 | "1": { 5 | "str": "string-value" 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/removeJob: -------------------------------------------------------------------------------- 1 | { 2 | "5": { 3 | "rec": { 4 | "2": { 5 | "rec": { 6 | "1": { 7 | "str": "string-value" 8 | }, 9 | "2": { 10 | "str": "string-value" 11 | }, 12 | "3": { 13 | "str": "string-value" 14 | } 15 | } 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/removeJobUpdate: -------------------------------------------------------------------------------- 1 | { 2 | "18": { 3 | "rec": { 4 | "1": { 5 | "set": [ 6 | "rec", 7 | 1, 8 | { 9 | "1": { 10 | "rec": { 11 | "1": { 12 | "str": "string-value" 13 | }, 14 | "2": { 15 | "str": "string-value" 16 | }, 17 | "3": { 18 | "str": "string-value" 19 | } 20 | } 21 | }, 22 | "2": { 23 | "str": "string-value" 24 | } 25 | } 26 | ] 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/removeLock: -------------------------------------------------------------------------------- 1 | { 2 | "13": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "rec": { 8 | "1": { 9 | "str": "string-value" 10 | }, 11 | "2": { 12 | "str": "string-value" 13 | }, 14 | "3": { 15 | "str": "string-value" 16 | } 17 | } 18 | } 19 | } 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/removeQuota: -------------------------------------------------------------------------------- 1 | { 2 | "9": { 3 | "rec": { 4 | "1": { 5 | "str": "string-value" 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/removeTasks: -------------------------------------------------------------------------------- 1 | { 2 | "7": { 3 | "rec": { 4 | "1": { 5 | "set": [ 6 | "str", 7 | 1, 8 | "string-value" 9 | ] 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/saveFrameworkId: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "rec": { 4 | "1": { 5 | "str": "string-value" 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/saveHostAttributes: -------------------------------------------------------------------------------- 1 | { 2 | "10": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "str": "string-value" 8 | }, 9 | "2": { 10 | "set": [ 11 | "rec", 12 | 1, 13 | { 14 | "1": { 15 | "str": "string-value" 16 | }, 17 | "2": { 18 | "set": [ 19 | "str", 20 | 1, 21 | "string-value" 22 | ] 23 | } 24 | } 25 | ] 26 | }, 27 | "3": { 28 | "i32": 1 29 | }, 30 | "4": { 31 | "str": "string-value" 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/saveHostMaintenanceRequest: -------------------------------------------------------------------------------- 1 | { 2 | "19": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "str": "string-value" 8 | }, 9 | "2": { 10 | "rec": { 11 | "3": { 12 | "rec": { 13 | "1": { 14 | "str": "string-value" 15 | }, 16 | "2": { 17 | "str": "string-value" 18 | } 19 | } 20 | } 21 | } 22 | }, 23 | "3": { 24 | "i64": 4 25 | }, 26 | "4": { 27 | "i64": 4 28 | } 29 | } 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/saveJobInstanceUpdateEvent: -------------------------------------------------------------------------------- 1 | { 2 | "16": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "i32": 2 8 | }, 9 | "2": { 10 | "i64": 4 11 | }, 12 | "3": { 13 | "i32": 1 14 | }, 15 | "4": { 16 | "str": "string-value" 17 | } 18 | } 19 | }, 20 | "3": { 21 | "rec": { 22 | "1": { 23 | "rec": { 24 | "1": { 25 | "str": "string-value" 26 | }, 27 | "2": { 28 | "str": "string-value" 29 | }, 30 | "3": { 31 | "str": "string-value" 32 | } 33 | } 34 | }, 35 | "2": { 36 | "str": "string-value" 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/saveJobUpdateEvent: -------------------------------------------------------------------------------- 1 | { 2 | "15": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "i32": 0 8 | }, 9 | "2": { 10 | "i64": 4 11 | }, 12 | "3": { 13 | "str": "string-value" 14 | }, 15 | "4": { 16 | "str": "string-value" 17 | } 18 | } 19 | }, 20 | "3": { 21 | "rec": { 22 | "1": { 23 | "rec": { 24 | "1": { 25 | "str": "string-value" 26 | }, 27 | "2": { 28 | "str": "string-value" 29 | }, 30 | "3": { 31 | "str": "string-value" 32 | } 33 | } 34 | }, 35 | "2": { 36 | "str": "string-value" 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/saveLock: -------------------------------------------------------------------------------- 1 | { 2 | "12": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "rec": { 8 | "1": { 9 | "rec": { 10 | "1": { 11 | "str": "string-value" 12 | }, 13 | "2": { 14 | "str": "string-value" 15 | }, 16 | "3": { 17 | "str": "string-value" 18 | } 19 | } 20 | } 21 | } 22 | }, 23 | "2": { 24 | "str": "string-value" 25 | }, 26 | "3": { 27 | "str": "string-value" 28 | }, 29 | "4": { 30 | "i64": 4 31 | }, 32 | "5": { 33 | "str": "string-value" 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/current/saveQuota: -------------------------------------------------------------------------------- 1 | { 2 | "8": { 3 | "rec": { 4 | "1": { 5 | "str": "string-value" 6 | }, 7 | "2": { 8 | "rec": { 9 | "4": { 10 | "set": [ 11 | "rec", 12 | 1, 13 | { 14 | "3": { 15 | "i64": 4 16 | } 17 | } 18 | ] 19 | } 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/1-pruneJobUpdateHistory: -------------------------------------------------------------------------------- 1 | { 2 | "17": { 3 | "rec": { 4 | "1": { 5 | "i32": 2 6 | }, 7 | "2": { 8 | "i64": 4 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/11-saveJobUpdateEvent: -------------------------------------------------------------------------------- 1 | { 2 | "15": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "i32": 0 8 | }, 9 | "2": { 10 | "i64": 4 11 | }, 12 | "3": { 13 | "str": "string-value" 14 | }, 15 | "4": { 16 | "str": "string-value" 17 | } 18 | } 19 | }, 20 | "3": { 21 | "rec": { 22 | "1": { 23 | "rec": { 24 | "1": { 25 | "str": "string-value" 26 | }, 27 | "2": { 28 | "str": "string-value" 29 | }, 30 | "3": { 31 | "str": "string-value" 32 | } 33 | } 34 | }, 35 | "2": { 36 | "str": "string-value" 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/12-saveJobInstanceUpdateEvent: -------------------------------------------------------------------------------- 1 | { 2 | "16": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "i32": 2 8 | }, 9 | "2": { 10 | "i64": 4 11 | }, 12 | "3": { 13 | "i32": 1 14 | } 15 | } 16 | }, 17 | "3": { 18 | "rec": { 19 | "1": { 20 | "rec": { 21 | "1": { 22 | "str": "string-value" 23 | }, 24 | "2": { 25 | "str": "string-value" 26 | }, 27 | "3": { 28 | "str": "string-value" 29 | } 30 | } 31 | }, 32 | "2": { 33 | "str": "string-value" 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/13-saveLock: -------------------------------------------------------------------------------- 1 | { 2 | "12": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "rec": { 8 | "1": { 9 | "rec": { 10 | "1": { 11 | "str": "string-value" 12 | }, 13 | "2": { 14 | "str": "string-value" 15 | }, 16 | "3": { 17 | "str": "string-value" 18 | } 19 | } 20 | } 21 | } 22 | }, 23 | "2": { 24 | "str": "string-value" 25 | }, 26 | "3": { 27 | "str": "string-value" 28 | }, 29 | "4": { 30 | "i64": 4 31 | }, 32 | "5": { 33 | "str": "string-value" 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/14-saveQuota: -------------------------------------------------------------------------------- 1 | { 2 | "8": { 3 | "rec": { 4 | "1": { 5 | "str": "role" 6 | }, 7 | "2": { 8 | "rec": { 9 | "1": { 10 | "dbl": 2.0 11 | }, 12 | "2": { 13 | "i64": 1 14 | }, 15 | "3": { 16 | "i64": 1 17 | }, 18 | "4": { 19 | "set": [ 20 | "rec", 21 | 3, 22 | { 23 | "1": { 24 | "dbl": 2.0 25 | } 26 | }, 27 | { 28 | "3": { 29 | "i64": 1 30 | } 31 | }, 32 | { 33 | "2": { 34 | "i64": 1 35 | } 36 | } 37 | ] 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/16-saveHostMaintenanceRequest: -------------------------------------------------------------------------------- 1 | { 2 | "19": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "str": "string-value" 8 | }, 9 | "2": { 10 | "rec": { 11 | "3": { 12 | "rec": { 13 | "1": { 14 | "str": "string-value" 15 | }, 16 | "2": { 17 | "i64": 4 18 | } 19 | } 20 | } 21 | } 22 | }, 23 | "3": { 24 | "i64": 4 25 | } 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/17-removeHostMaintenanceRequest: -------------------------------------------------------------------------------- 1 | { 2 | "20": { 3 | "rec": { 4 | "1": { 5 | "str": "string-value" 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/2-removeJob: -------------------------------------------------------------------------------- 1 | { 2 | "5": { 3 | "rec": { 4 | "2": { 5 | "rec": { 6 | "1": { 7 | "str": "string-value" 8 | }, 9 | "2": { 10 | "str": "string-value" 11 | }, 12 | "3": { 13 | "str": "string-value" 14 | } 15 | } 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/3-removeJobUpdate: -------------------------------------------------------------------------------- 1 | { 2 | "18": { 3 | "rec": { 4 | "1": { 5 | "set": [ 6 | "rec", 7 | 1, 8 | { 9 | "1": { 10 | "rec": { 11 | "1": { 12 | "str": "string-value" 13 | }, 14 | "2": { 15 | "str": "string-value" 16 | }, 17 | "3": { 18 | "str": "string-value" 19 | } 20 | } 21 | }, 22 | "2": { 23 | "str": "string-value" 24 | } 25 | } 26 | ] 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/4-removeLock: -------------------------------------------------------------------------------- 1 | { 2 | "13": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "rec": { 8 | "1": { 9 | "str": "string-value" 10 | }, 11 | "2": { 12 | "str": "string-value" 13 | }, 14 | "3": { 15 | "str": "string-value" 16 | } 17 | } 18 | } 19 | } 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/5-removeQuota: -------------------------------------------------------------------------------- 1 | { 2 | "9": { 3 | "rec": { 4 | "1": { 5 | "str": "string-value" 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/6-removeTasks: -------------------------------------------------------------------------------- 1 | { 2 | "7": { 3 | "rec": { 4 | "1": { 5 | "set": [ 6 | "str", 7 | 1, 8 | "string-value" 9 | ] 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/8-saveFrameworkId: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "rec": { 4 | "1": { 5 | "str": "string-value" 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/aurora/scheduler/storage/durability/goldens/read-compatible/9-saveHostAttributes: -------------------------------------------------------------------------------- 1 | { 2 | "10": { 3 | "rec": { 4 | "1": { 5 | "rec": { 6 | "1": { 7 | "str": "string-value" 8 | }, 9 | "2": { 10 | "set": [ 11 | "rec", 12 | 1, 13 | { 14 | "1": { 15 | "str": "string-value" 16 | }, 17 | "2": { 18 | "set": [ 19 | "str", 20 | 1, 21 | "string-value" 22 | ] 23 | } 24 | } 25 | ] 26 | }, 27 | "3": { 28 | "i32": 1 29 | }, 30 | "4": { 31 | "str": "string-value" 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/README: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | For details on these files, see docs/test-resource-generation.md. 16 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/failure/coordinator.p1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/failure/coordinator.p1 -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/failure/coordinator.p2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/failure/coordinator.p2 -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/failure/coordinator.p3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/failure/coordinator.p3 -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/failure/runner: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/failure/runner -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/failure_limit/coordinator.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/failure_limit/coordinator.a -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/failure_limit/coordinator.b: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/failure_limit/coordinator.b -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/failure_limit/runner: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/failure_limit/runner -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/hello_world/coordinator.echo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/hello_world/coordinator.echo -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/hello_world/runner: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/hello_world/runner -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/ordering/coordinator.echo_one: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/ordering/coordinator.echo_one -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/ordering/coordinator.echo_three: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/ordering/coordinator.echo_three -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/ordering/coordinator.echo_two: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/ordering/coordinator.echo_two -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/ordering/runner: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/ordering/runner -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/ports/coordinator.echo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/ports/coordinator.echo -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/ports/runner: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/ports/runner -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/sleep60-lost/coordinator.sleep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/sleep60-lost/coordinator.sleep -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/sleep60-lost/runner: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/sleep60-lost/runner -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/sleep60/coordinator.sleep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/sleep60/coordinator.sleep -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/checkpoints/sleep60/runner: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/src/test/resources/org/apache/thermos/root/checkpoints/sleep60/runner -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/failure/p1/0/stdout: -------------------------------------------------------------------------------- 1 | p1 pinging 2 | current count 1 3 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/failure/p2/0/stdout: -------------------------------------------------------------------------------- 1 | p2 pinging 2 | current count 1 3 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/failure/p2/1/stdout: -------------------------------------------------------------------------------- 1 | p2 pinging 2 | current count 2 3 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/failure/p3/0/stdout: -------------------------------------------------------------------------------- 1 | p3 pinging 2 | current count 1 3 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/failure/p3/1/stdout: -------------------------------------------------------------------------------- 1 | p3 pinging 2 | current count 2 3 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/failure/p3/2/stdout: -------------------------------------------------------------------------------- 1 | p3 pinging 2 | current count 3 3 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/failure_limit/a/0/stdout: -------------------------------------------------------------------------------- 1 | hello world 2 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/hello_world/echo/0/stdout: -------------------------------------------------------------------------------- 1 | hello world 2 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/ordering/echo_one/0/stdout: -------------------------------------------------------------------------------- 1 | hello brian 2 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/ordering/echo_three/0/stdout: -------------------------------------------------------------------------------- 1 | hello bill 2 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/ordering/echo_two/0/stdout: -------------------------------------------------------------------------------- 1 | hello john 2 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/logs/ports/echo/0/stdout: -------------------------------------------------------------------------------- 1 | 50000 50001 2 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/sandbox/p1: -------------------------------------------------------------------------------- 1 | ping 2 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/sandbox/p2: -------------------------------------------------------------------------------- 1 | ping 2 | ping 3 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/sandbox/p3: -------------------------------------------------------------------------------- 1 | ping 2 | ping 3 | ping 4 | -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/tasks/active/sleep60-lost: -------------------------------------------------------------------------------- 1 | {"processes": [{"cmdline": "sleep 60; echo hello world", "daemon": 0, "max_failures": 1, "name": "sleep"}], "name": "sleep", "max_failures": 1, "min_successes": 0, "max_concurrency": 0, "resources": {"disk": 0, "best_effort": 0, "ram": 8388608, "cpu": 0.01}, "user": "{{thermos.user}}"} -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/tasks/finished/failure_limit: -------------------------------------------------------------------------------- 1 | {"processes": [{"cmdline": "echo hello world", "daemon": 0, "max_failures": 1, "name": "a"}, {"cmdline": "exit 1", "daemon": 0, "max_failures": 1, "name": "b"}, {"cmdline": "echo hello world", "daemon": 0, "max_failures": 1, "name": "c"}], "name": "failing_task", "max_failures": 2, "user": "{{thermos.user}}", "max_concurrency": 0, "resources": {"disk": 16384, "ram": 16777216, "cpu": 1.0}, "constraints": [{"order": ["a", "b", "c"]}]} -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/tasks/finished/hello_world: -------------------------------------------------------------------------------- 1 | {"processes": [{"cmdline": "echo hello world", "daemon": 0, "max_failures": 1, "name": "echo"}], "name": "echo", "max_failures": 1, "user": "{{thermos.user}}", "max_concurrency": 0, "resources": {"disk": 0, "ram": 8388608, "cpu": 0.01}} -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/tasks/finished/ordering: -------------------------------------------------------------------------------- 1 | {"processes": [{"cmdline": "sleep 60; echo hello brian", "daemon": 0, "max_failures": 1, "name": "echo_one"}, {"cmdline": "sleep 60; echo hello john", "daemon": 0, "max_failures": 1, "name": "echo_two"}, {"cmdline": "sleep 60; echo hello bill", "daemon": 0, "max_failures": 1, "name": "echo_three"}], "name": "echo_complex", "max_failures": 1, "user": "{{thermos.user}}", "max_concurrency": 0, "resources": {"disk": 1048576, "ram": 1048576, "cpu": 0.10000000000000001}, "constraints": [{"order": ["echo_one", "echo_two", "echo_three"]}]} -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/tasks/finished/ports: -------------------------------------------------------------------------------- 1 | {"processes": [{"cmdline": "echo {{thermos.ports[hello]}} {{thermos.ports[world]}}", "daemon": 0, "max_failures": 1, "name": "echo"}], "name": "echo", "max_failures": 1, "user": "{{thermos.user}}", "max_concurrency": 0, "resources": {"disk": 0, "ram": 8388608, "cpu": 0.01}} -------------------------------------------------------------------------------- /src/test/resources/org/apache/thermos/root/tasks/finished/sleep60: -------------------------------------------------------------------------------- 1 | {"processes": [{"cmdline": "sleep 60; echo hello world", "daemon": 0, "max_failures": 1, "name": "sleep"}], "name": "sleep", "max_failures": 1, "user": "{{thermos.user}}", "max_concurrency": 0, "resources": {"disk": 0, "ram": 8388608, "cpu": 0.01}} -------------------------------------------------------------------------------- /src/test/sh/org/apache/aurora/e2e/Dockerfile.netcat: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | FROM buildpack-deps:stretch 16 | 17 | RUN apt-get update && apt-get install -y netcat-openbsd 18 | COPY run-server.sh /usr/local/bin 19 | COPY check-fs.sh /usr/local/bin 20 | -------------------------------------------------------------------------------- /src/test/sh/org/apache/aurora/e2e/Dockerfile.python: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed under the Apache License, Version 2.0 (the "License"); 3 | # you may not use this file except in compliance with the License. 4 | # You may obtain a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, 10 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | # See the License for the specific language governing permissions and 12 | # limitations under the License. 13 | # 14 | 15 | FROM python:2.7-slim-stretch 16 | 17 | COPY http_example.py /tmp/ 18 | -------------------------------------------------------------------------------- /src/test/sh/org/apache/aurora/e2e/check-fs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Checking volume mounts..." 3 | if [ ! -f "/etc/rsyslog.d.container/50-default.conf" ]; then 4 | echo "Mounted file was not found"; 5 | exit 1 6 | fi 7 | -------------------------------------------------------------------------------- /src/test/sh/org/apache/aurora/e2e/run-server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Starting up server..." 3 | while true 4 | do 5 | echo -e "HTTP/1.1 200 OK\r\n\r\nHello from a filesystem image." | nc -l "$1" 6 | done 7 | -------------------------------------------------------------------------------- /ui/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "react"] 3 | } 4 | -------------------------------------------------------------------------------- /ui/plugin/js/components/PluginExample.js: -------------------------------------------------------------------------------- 1 | // This is an example of how to replace components with your own custom UI logic. 2 | import React from 'react'; 3 | 4 | // You can import the original OSS component if you'd just like to wrap it. 5 | import OSSPluginExample from '../../../src/main/js/components/PluginExample'; 6 | 7 | // Add your own CSS by importing files directly 8 | import './plugin.css'; 9 | 10 | // And then be sure to match the interface of the file you're injecting. For Home, we just 11 | // need to make sure we export a component by default. 12 | export default function () { 13 | return
and my own internal logic!
; 14 | } 15 | -------------------------------------------------------------------------------- /ui/plugin/js/components/plugin.css: -------------------------------------------------------------------------------- 1 | .custom-home { 2 | background-color: #EEE; 3 | } 4 | -------------------------------------------------------------------------------- /ui/plugin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aurora-ui-plugin", 3 | "version": "1.0.0", 4 | "description": "Use this package.json to enter your own custom npm dependencies (for custom UIs)", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "dependencies": {} 9 | } 10 | -------------------------------------------------------------------------------- /ui/src/__mocks__/react.js: -------------------------------------------------------------------------------- 1 | const react = require('react'); 2 | // Resolution for requestAnimationFrame not supported in jest error : 3 | // https://github.com/facebook/react/issues/9102#issuecomment-283873039 4 | global.window = global; 5 | window.addEventListener = () => {}; 6 | window.requestAnimationFrame = () => { 7 | throw new Error('requestAnimationFrame is not supported in Node'); 8 | }; 9 | module.exports = react; -------------------------------------------------------------------------------- /ui/src/main/js/client/scheduler-client.js: -------------------------------------------------------------------------------- 1 | import { isNully } from 'utils/Common'; 2 | 3 | function getBaseUrl() { 4 | // Power feature: load a different Scheduler URL from local storage to test against live APIs. 5 | // 6 | // In your browser console: 7 | // window.localStorage.apiUrl = 'http://myauroracluster.com'; 8 | // 9 | // To remove the item: 10 | // window.localStorage.removeItem('apiUrl') 11 | if (window && window.localStorage) { 12 | return isNully(window.localStorage.apiUrl) ? '' : window.localStorage.apiUrl; 13 | } 14 | return ''; 15 | } 16 | 17 | function makeClient() { 18 | const transport = new Thrift.Transport(`${getBaseUrl()}/api`); 19 | const protocol = new Thrift.Protocol(transport); 20 | return new ReadOnlySchedulerClient(protocol); 21 | } 22 | 23 | export default makeClient(); 24 | -------------------------------------------------------------------------------- /ui/src/main/js/components/CronJobPreview.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import moment from 'moment'; 3 | 4 | import { RelativeTime } from 'components/Time'; 5 | 6 | export default function CronJobPreview({ cronJob }) { 7 | return (
8 | Cron job, next run will be at 9 | {moment(cronJob.nextCronRunMs).utc().format('MMMM Do YYYY, h:mm:ss a')} UTC ( 10 | ) 11 | 12 |
); 13 | } 14 | -------------------------------------------------------------------------------- /ui/src/main/js/components/Diff.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { diffJson } from 'diff'; 3 | 4 | import { clone } from 'utils/Common'; 5 | import { isThermos } from 'utils/Task'; 6 | 7 | function maybeParseThermos(task) { 8 | if (isThermos(task)) { 9 | const modifiedTask = clone(task); 10 | modifiedTask.executorConfig.data = JSON.parse(task.executorConfig.data); 11 | return modifiedTask; 12 | } 13 | return task; 14 | } 15 | 16 | export default function Diff({ left, right }) { 17 | const result = diffJson(maybeParseThermos(left), maybeParseThermos(right)); 18 | return (
19 | {result.map((r, i) => ( 20 | 21 | {r.value} 22 | ))} 23 |
); 24 | } 25 | -------------------------------------------------------------------------------- /ui/src/main/js/components/Icon.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default function Icon({ name }) { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /ui/src/main/js/components/InstanceHistory.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import InstanceHistoryItem from 'components/InstanceHistoryItem'; 4 | import PanelGroup, { Container, StandardPanelTitle } from 'components/Layout'; 5 | 6 | import { isNully } from 'utils/Common'; 7 | import { getLastEventTime } from 'utils/Task'; 8 | 9 | export default function InstanceHistory({ tasks }) { 10 | if (isNully(tasks) || tasks.length === 0) { 11 | return
; 12 | } 13 | 14 | const sortedTasks = tasks.sort((a, b) => { 15 | return getLastEventTime(a) > getLastEventTime(b) ? -1 : 1; 16 | }); 17 | return ( 18 | }> 19 | {sortedTasks.map((t) => )} 20 | 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /ui/src/main/js/components/InstanceViz.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | export default function InstanceViz({ instances, jobKey }) { 5 | const {job: {role, environment, name}} = jobKey; 6 | const className = (instances.length > 1000) 7 | ? 'small' 8 | : (instances.length > 100) ? 'medium' : 'big'; 9 | 10 | return (
    11 | {instances.map((i) => { 12 | return ( 15 |
  • 16 | ); 17 | })} 18 |
); 19 | } 20 | -------------------------------------------------------------------------------- /ui/src/main/js/components/JobConfig.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import ConfigDiff from 'components/ConfigDiff'; 4 | import Loading from 'components/Loading'; 5 | import TaskConfigSummary, { CronConfigSummary } from 'components/TaskConfigSummary'; 6 | 7 | import { isNully, sort } from 'utils/Common'; 8 | 9 | export function CronJobConfig({ cronJob }) { 10 | return (
11 |
12 | 13 |
14 |
); 15 | } 16 | 17 | export default function JobConfig({ cronJob, groups }) { 18 | if (isNully(groups) && isNully(cronJob)) { 19 | return ; 20 | } 21 | 22 | if (!isNully(cronJob)) { 23 | return ; 24 | } 25 | 26 | const sorted = sort(groups, (g) => g.instances[0].first); 27 | return (
28 |
29 | {sorted.map((group, i) => )} 30 |
31 | 32 |
); 33 | } 34 | -------------------------------------------------------------------------------- /ui/src/main/js/components/JobHistory.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import PanelGroup from 'components/Layout'; 4 | import { Tab } from 'components/Tabs'; 5 | import TaskList from 'components/TaskList'; 6 | 7 | import { sort } from 'utils/Common'; 8 | import { getLastEventTime, isActive } from 'utils/Task'; 9 | 10 | export default function ({ pendingReasons, tasks }) { 11 | const terminalTasks = sort(tasks.filter((t) => !isActive(t)), (t) => getLastEventTime(t), true); 12 | return ( 13 | 14 | 15 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /ui/src/main/js/components/JobOverview.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import JobHistory from 'components/JobHistory'; 4 | import JobStatus from 'components/JobStatus'; 5 | import PanelGroup from 'components/Layout'; 6 | import Loading from 'components/Loading'; 7 | import Tabs from 'components/Tabs'; 8 | 9 | import { isNully } from 'utils/Common'; 10 | 11 | export default function JobOverview(props) { 12 | if (isNully(props.tasks)) { 13 | return ; 14 | } 15 | 16 | return ( 20 | {JobStatus(props)} 21 | {JobHistory(props)} 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /ui/src/main/js/components/Loading.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default function Loading() { 4 | return
Loading...
; 5 | } 6 | -------------------------------------------------------------------------------- /ui/src/main/js/components/Navigation.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | export default function Navigation({ fluid }) { 5 | return ( 6 | 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /ui/src/main/js/components/PluginExample.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // See $/ui/plugin/src/js/component/PluginExample for an explanation of how to inject 4 | // your own custom components into the Aurora UI. 5 | export default function PluginExample() { 6 | return
Hello, World!
; 7 | } 8 | -------------------------------------------------------------------------------- /ui/src/main/js/components/TaskConfig.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default function TaskConfig({ config }) { 4 | return
{JSON.stringify(config, null, 2)}
; 5 | } 6 | -------------------------------------------------------------------------------- /ui/src/main/js/components/TaskDetails.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default function TaskDetails({ task }) { 4 | return (
5 |
6 |
Task ID
7 | {task.assignedTask.taskId} 8 | view raw config 9 |
10 | {task.assignedTask.slaveHost ?
11 |
Host
12 | {task.assignedTask.slaveHost} 13 | 14 | view sandbox 15 | 16 |
: null} 17 |
); 18 | } 19 | -------------------------------------------------------------------------------- /ui/src/main/js/components/TaskListItemActions.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { isThermos } from 'utils/Task'; 4 | 5 | export default function ({ task }) { 6 | if (isThermos(task.assignedTask.task)) { 7 | return (); 12 | } else { 13 | return (
14 | {task.assignedTask.slaveHost} 15 |
); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ui/src/main/js/components/TaskNeighbors.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | import { isNullyOrEmpty } from 'utils/Common'; 5 | 6 | export function NeighborTaskItem({ assignedTask }) { 7 | const { role, environment, name } = assignedTask.task.job; 8 | const taskKey = `${role}/${environment}/${name}/${assignedTask.instanceId}`; 9 | return ( 10 |
11 | 12 | 13 | {taskKey} 14 | 15 | 16 |
17 | ); 18 | } 19 | 20 | export default function TaskNeighbors({ tasks }) { 21 | return (isNullyOrEmpty(tasks) ?
22 | : (
23 |
host neighbors
24 | {tasks.map((t) => 25 | )} 26 |
)); 27 | } 28 | -------------------------------------------------------------------------------- /ui/src/main/js/components/TaskStateMachine.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import StateMachine from 'components/StateMachine'; 4 | 5 | import { getClassForScheduleStatus, taskToStateMachine } from 'utils/Task'; 6 | 7 | export default function TaskStateMachine({ task }) { 8 | const states = taskToStateMachine(task); 9 | return ; 10 | } 11 | -------------------------------------------------------------------------------- /ui/src/main/js/components/Time.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment'; 2 | import React from 'react'; 3 | 4 | export function RelativeTime({ ts }) { 5 | return {moment(ts).fromNow()}; 6 | } 7 | -------------------------------------------------------------------------------- /ui/src/main/js/components/UpdateConfig.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import PanelGroup, { Container, StandardPanelTitle } from 'components/Layout'; 4 | import TaskConfig from 'components/TaskConfig'; 5 | import UpdateDiff from 'components/UpdateDiff'; 6 | 7 | import { isNully } from 'utils/Common'; 8 | 9 | export default function UpdateConfig({ update }) { 10 | if (isNully(update.update.instructions.desiredState)) { 11 | return null; 12 | } else if (update.update.instructions.initialState.length > 0) { 13 | return ; 14 | } 15 | 16 | return ( 17 | }> 18 | 19 | 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /ui/src/main/js/components/UpdateInstanceSummary.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import InstanceViz from 'components/InstanceViz'; 4 | 5 | import { instanceSummary, updateStats } from 'utils/Update'; 6 | 7 | function UpdateStats({ update }) { 8 | const stats = updateStats(update); 9 | return (
10 |
Instance Summary
11 | 12 | {stats.instancesUpdated} / {stats.totalInstancesToBeUpdated} ({stats.progress}%) 13 | 14 |
); 15 | }; 16 | 17 | export default function UpdateInstanceSummary({ update }) { 18 | return (
19 | 20 | 21 |
); 22 | } 23 | -------------------------------------------------------------------------------- /ui/src/main/js/components/UpdateStateMachine.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import StateMachine from 'components/StateMachine'; 4 | 5 | import { addClass } from 'utils/Common'; 6 | import { UPDATE_STATUS } from 'utils/Thrift'; 7 | import { getClassForUpdateStatus } from 'utils/Update'; 8 | 9 | export default function UpdateStateMachine({ update }) { 10 | const events = update.updateEvents; 11 | const states = events.map((e, i) => ({ 12 | className: addClass( 13 | getClassForUpdateStatus(e.status), 14 | (i === events.length - 1) ? ' active' : ''), 15 | state: UPDATE_STATUS[e.status], 16 | message: e.message, 17 | timestamp: e.timestampMs 18 | })); 19 | const className = getClassForUpdateStatus(events[events.length - 1].status); 20 | return ; 21 | } 22 | -------------------------------------------------------------------------------- /ui/src/main/js/components/UpdateStatus.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import UpdateTime from 'components/UpdateTime'; 4 | 5 | import { UPDATE_STATUS } from 'utils/Thrift'; 6 | import { isInProgressUpdate } from 'utils/Update'; 7 | 8 | export default function UpdateStatus({ update }) { 9 | const time = isInProgressUpdate(update) ? '' : ; 10 | return (
11 |
12 | 13 | Update started by {update.update.summary.user} 14 | 15 | 16 | 17 | Status: {UPDATE_STATUS[update.update.summary.state.status]} 18 | 19 |
20 | {time} 21 |
); 22 | } 23 | -------------------------------------------------------------------------------- /ui/src/main/js/components/UpdateTitle.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { IconPanelTitle } from 'components/Layout'; 4 | 5 | import { statusDispatcher } from 'utils/Update'; 6 | 7 | const titleDispatch = { 8 | success: (update) => { 9 | return ; 10 | }, 11 | warning: (update) => { 12 | return ; 13 | }, 14 | error: (update) => { 15 | return ; 16 | }, 17 | inProgress: (update) => { 18 | return ; 19 | } 20 | }; 21 | 22 | const titleDispatcher = statusDispatcher(titleDispatch); 23 | 24 | export default function UpdateTitle({ update }) { 25 | return titleDispatcher(update); 26 | } 27 | -------------------------------------------------------------------------------- /ui/src/main/js/components/__tests__/JobHistory-test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import JobHistory from '../JobHistory'; 5 | import TaskList from '../TaskList'; 6 | 7 | import { ScheduledTaskBuilder } from 'test-utils/TaskBuilders'; 8 | 9 | describe('JobHistory', () => { 10 | it('Should render a task list only with terminal tasks', () => { 11 | const tasks = [ 12 | ScheduledTaskBuilder.status(ScheduleStatus.PENDING).build(), 13 | ScheduledTaskBuilder.status(ScheduleStatus.FINISHED).build() 14 | ]; 15 | const el = shallow(JobHistory({tasks})); 16 | expect(el.contains()).toBe(true); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /ui/src/main/js/components/__tests__/StateMachine-test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import StateMachine, { StateMachineToggle } from '../StateMachine'; 5 | 6 | describe('StateMachineToggle', () => { 7 | it('Should toggle the display state when clicked', () => { 8 | const states = [{ 9 | state: 'One', 10 | timestamp: 0 11 | }, { 12 | state: 'Two', 13 | timestamp: 0 14 | }]; 15 | 16 | const el = shallow(); 17 | expect(el.state().expanded).toBe(false); 18 | expect(el.contains()).toBe(true); 19 | 20 | el.simulate('click'); 21 | 22 | expect(el.state().expanded).toBe(true); 23 | expect(el.contains()).toBe(true); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /ui/src/main/js/components/__tests__/TaskDetails-test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import TaskDetails from '../TaskDetails'; 5 | 6 | import { AssignedTaskBuilder, ScheduledTaskBuilder } from 'test-utils/TaskBuilders'; 7 | 8 | describe('TaskDetails', () => { 9 | it('Does not show host when slaveHost is null', () => { 10 | const task = ScheduledTaskBuilder.assignedTask( 11 | AssignedTaskBuilder.slaveHost(null).build()).build(); 12 | const el = shallow(); 13 | 14 | expect(el.find('div.active-task-details-host').length).toBe(0); 15 | }); 16 | 17 | it('Shows host link when slaveHost is present', () => { 18 | const task = ScheduledTaskBuilder.assignedTask( 19 | AssignedTaskBuilder.slaveHost('test').build()).build(); 20 | const el = shallow(); 21 | 22 | expect(el.find('div.active-task-details-host').length).toBe(1); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /ui/src/main/js/components/__tests__/TaskListItem-test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import TaskListItem from '../TaskListItem'; 5 | import TaskStateMachine from '../TaskStateMachine'; 6 | 7 | import { ScheduledTaskBuilder } from 'test-utils/TaskBuilders'; 8 | 9 | describe('TaskListItem', () => { 10 | it('Should not show any state machine element by default', () => { 11 | const el = shallow(); 12 | expect(el.find(TaskStateMachine).length).toBe(0); 13 | expect(el.find('tr.expanded').length).toBe(0); 14 | }); 15 | 16 | it('Should show the state machine and add expanded to row when expand link is clicked', () => { 17 | const el = shallow(); 18 | el.find('.task-list-item-expander').simulate('click'); 19 | expect(el.find(TaskStateMachine).length).toBe(1); 20 | expect(el.find('tr.expanded').length).toBe(1); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /ui/src/main/js/components/__tests__/TaskNeighbors-test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import TaskNeighbors, { NeighborTaskItem } from '../TaskNeighbors'; 5 | 6 | describe('TaskNeighbors', () => { 7 | it('Should contain empty div if empty', () => { 8 | const tasks = []; 9 | const el = shallow(); 10 | expect(el.find(NeighborTaskItem).length).toBe(0); 11 | expect(el.contains(
)).toBe(true); 12 | }); 13 | 14 | it('Should be visible if not empty', () => { 15 | const tasks = [ 16 | {assignedTask: {taskId: 0}, job: {role: 'test-role', env: 'test-env', name: 'test-name'}}, 17 | {assignedTask: {taskId: 1}, job: {role: 'test-role', env: 'test-env', name: 'test-name'}} 18 | ]; 19 | const el = shallow(); 20 | expect(el.find(NeighborTaskItem).length).toBe(2); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /ui/src/main/js/components/__tests__/UpdateList-test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import Loading from '../Loading'; 5 | import UpdateList from '../UpdateList'; 6 | 7 | describe('UpdateList', () => { 8 | it('Handles null by showing Loading', () => { 9 | const el = shallow(); 10 | expect(el.contains()).toBe(true); 11 | }); 12 | 13 | it('Does not show loading when data is passed, even an empty list', () => { 14 | const el = shallow(); 15 | expect(el.contains()).toBe(false); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /ui/src/main/js/components/__tests__/UpdateStatus-test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import UpdateStatus from '../UpdateStatus'; 5 | import UpdateTime from '../UpdateTime'; 6 | 7 | import { builderWithStatus } from 'test-utils/UpdateBuilders'; 8 | 9 | describe('UpdateStatus', () => { 10 | it('Should show UpdateTime when update terminal', () => { 11 | const update = builderWithStatus(JobUpdateStatus.ROLLED_FORWARD).build(); 12 | 13 | const el = shallow(); 14 | expect(el.contains()).toBe(true); 15 | }); 16 | 17 | it('Should NOT show UpdateTime when update in-progress', () => { 18 | const update = builderWithStatus(JobUpdateStatus.ROLLING_FORWARD).build(); 19 | 20 | const el = shallow(); 21 | expect(el.find(UpdateTime).length).toBe(0); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /ui/src/main/js/pages/__tests__/Updates-test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import { UpdatesFetcher } from '../Updates'; 5 | import UpdateList from 'components/UpdateList'; 6 | 7 | const TEST_CLUSTER = 'test-cluster'; 8 | 9 | function createMockApi(updates) { 10 | const api = {}; 11 | api.getJobUpdateSummaries = (query, handler) => handler({ 12 | result: { 13 | getJobUpdateSummariesResult: { 14 | updateSummaries: updates 15 | } 16 | }, 17 | serverInfo: { 18 | clusterName: TEST_CLUSTER 19 | } 20 | }); 21 | return api; 22 | } 23 | 24 | const updates = [{}]; // only testing pass-through here... 25 | const states = []; 26 | 27 | describe('UpdatesFetcher', () => { 28 | it('Should render update list with updates when mounted', () => { 29 | const el = shallow( 30 | {}} states={states} />); 31 | expect(el.contains()); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /ui/src/main/js/test-utils/Builder.js: -------------------------------------------------------------------------------- 1 | import { clone } from 'utils/Common'; 2 | 3 | /** 4 | * Generates an immutable object builder from a base object. Each mutation 5 | * clones the builder and also populates fields with values present in the 6 | * original struct. 7 | * 8 | * Usage: 9 | * 10 | * const x = createBuilder({hello: 'world', test: true}); 11 | * x.hello('universe').build(); // {hello: 'universe', test: true}; 12 | */ 13 | export default function createBuilder(base) { 14 | function Builder() { 15 | this._entity = clone(base); 16 | } 17 | 18 | Object.keys(base).forEach((key) => { 19 | Builder.prototype[key] = function (value) { 20 | const updated = clone(this._entity); 21 | updated[key] = value; 22 | return createBuilder(updated); 23 | }; 24 | }); 25 | 26 | Builder.prototype.build = function () { 27 | return clone(this._entity); 28 | }; 29 | 30 | return new Builder(); 31 | } 32 | -------------------------------------------------------------------------------- /ui/src/main/js/test-utils/JobBuilders.js: -------------------------------------------------------------------------------- 1 | import createBuilder from 'test-utils/Builder'; 2 | 3 | import { TaskConfigBuilder } from './TaskBuilders'; 4 | 5 | const ROLE = 'test-role'; 6 | const ENV = 'test-env'; 7 | const NAME = 'test-name'; 8 | const USER = 'test-user'; 9 | 10 | const JOB_KEY = { 11 | role: ROLE, 12 | environment: ENV, 13 | name: NAME 14 | }; 15 | 16 | export const JobConfigurationBuilder = createBuilder({ 17 | key: JOB_KEY, 18 | owner: {user: USER}, 19 | cronSchedule: null, 20 | cronCollisionPolicy: 0, 21 | taskConfig: TaskConfigBuilder.build(), 22 | instanceCount: 1 23 | }); 24 | 25 | export const JobStatsBuilder = createBuilder({ 26 | activeTaskCount: 0, 27 | pendingTaskCount: 0, 28 | finishedTaskCount: 0, 29 | failedTaskCount: 0 30 | }); 31 | 32 | export const JobSummaryBuilder = createBuilder({ 33 | job: JobConfigurationBuilder.build(), 34 | stats: JobStatsBuilder.build(), 35 | nextCronRunMs: null 36 | }); 37 | -------------------------------------------------------------------------------- /ui/src/main/js/utils/Job.js: -------------------------------------------------------------------------------- 1 | export const TASK_COUNTS = [ 2 | 'pendingTaskCount', 'activeTaskCount', 'finishedTaskCount', 'failedTaskCount' 3 | ]; 4 | -------------------------------------------------------------------------------- /ui/src/main/js/utils/Quota.js: -------------------------------------------------------------------------------- 1 | const UNITS = ['MiB', 'GiB', 'TiB', 'PiB', 'EiB']; 2 | 3 | export function formatMb(sizeInMb) { 4 | const unitIdx = (sizeInMb > 0) ? Math.floor(Math.log(sizeInMb) / Math.log(1024)) : 0; 5 | return (sizeInMb / Math.pow(1024, unitIdx)).toFixed(2) + '' + UNITS[unitIdx]; 6 | } 7 | -------------------------------------------------------------------------------- /ui/src/main/js/utils/__tests__/Common-test.js: -------------------------------------------------------------------------------- 1 | import { pluralize } from '../Common'; 2 | 3 | describe('pluralize', () => { 4 | it('Should treat empty lists as plural (e.g. zero tasks are...)', () => { 5 | expect(pluralize([], 'task')).toBe('tasks'); 6 | }); 7 | 8 | it('Should treat lists with multiple as plural', () => { 9 | expect(pluralize([1, 2, 3], 'task')).toBe('tasks'); 10 | }); 11 | 12 | it('Should treat single element lists as singular', () => { 13 | expect(pluralize([1], 'task')).toBe('task'); 14 | }); 15 | 16 | it('Should allow you to set your own plural form', () => { 17 | expect(pluralize([1, 2], 'task', 'beetlejuice')).toBe('beetlejuice'); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /ui/src/main/js/utils/__tests__/Task-test.js: -------------------------------------------------------------------------------- 1 | import { instanceRangeToString } from '../Task'; 2 | 3 | function range(first, last) { 4 | return {first, last}; 5 | } 6 | 7 | describe('instanceRangeToString', () => { 8 | it('Should handle single instance ranges', () => { 9 | expect(instanceRangeToString([range(0, 0)])).toBe('0'); 10 | }); 11 | 12 | it('Should handle multiple single instance ranges', () => { 13 | expect(instanceRangeToString([range(0, 0), range(1, 1), range(2, 2)])).toBe('0, 1, 2'); 14 | }); 15 | 16 | it('Should handle instance ranges', () => { 17 | expect(instanceRangeToString([range(0, 5), range(6, 6), range(7, 7)])).toBe('0 - 5, 6, 7'); 18 | }); 19 | }); 20 | -------------------------------------------------------------------------------- /ui/src/main/resources/SourceSansPro-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/ui/src/main/resources/SourceSansPro-Black.ttf -------------------------------------------------------------------------------- /ui/src/main/resources/SourceSansPro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/ui/src/main/resources/SourceSansPro-Bold.ttf -------------------------------------------------------------------------------- /ui/src/main/resources/SourceSansPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/ui/src/main/resources/SourceSansPro-Regular.ttf -------------------------------------------------------------------------------- /ui/src/main/resources/SourceSansPro-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/ui/src/main/resources/SourceSansPro-Semibold.ttf -------------------------------------------------------------------------------- /ui/src/main/resources/source-sans-pro.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Source Sans Pro'; 3 | src: local('Source Sans Pro'), url('./SourceSansPro-Regular.ttf'); 4 | } 5 | 6 | @font-face { 7 | font-family: 'Source Sans Pro'; 8 | font-weight: 600; 9 | src: local('Source Sans Pro SemiBold'), url('./SourceSansPro-Semibold.ttf'); 10 | } 11 | 12 | @font-face { 13 | font-family: 'Source Sans Pro'; 14 | font-weight: 700; 15 | src: local('Source Sans Pro Bold'), url('./SourceSansPro-Bold.ttf'); 16 | } 17 | 18 | @font-face { 19 | font-family: 'Source Sans Pro'; 20 | font-weight: 900; 21 | src: local('Source Sans Pro Black'), url('./SourceSansPro-Black.ttf'); 22 | } 23 | -------------------------------------------------------------------------------- /ui/src/main/sass/app.scss: -------------------------------------------------------------------------------- 1 | /* Variables, Mix-Ins, etc. */ 2 | @import 'components/base'; 3 | 4 | /* Main grid elements and aesthetics. */ 5 | @import 'components/layout'; 6 | 7 | /* Indiviudal Components */ 8 | @import 'components/breadcrumb'; 9 | @import 'components/diff'; 10 | @import 'components/instance-viz'; 11 | @import 'components/navigation'; 12 | @import 'components/pagination'; 13 | @import 'components/state-machine'; 14 | @import 'components/status'; 15 | @import 'components/tables'; 16 | @import 'components/task-list'; 17 | @import 'components/update-list'; 18 | 19 | /* Page Styles */ 20 | @import 'components/home-page'; 21 | @import 'components/instance-page'; 22 | @import 'components/job-page'; 23 | @import 'components/job-list-page'; 24 | @import 'components/update-page'; -------------------------------------------------------------------------------- /ui/src/main/sass/components/_base.scss: -------------------------------------------------------------------------------- 1 | @import '../modules/all'; 2 | 3 | html, html a { 4 | -webkit-font-smoothing: antialiased !important; 5 | text-shadow: 1px 1px 1px rgba(0,0,0,0.004); 6 | } 7 | 8 | html, body { 9 | font-family: $font_stack; 10 | background-color: $main_bg_color; 11 | } 12 | 13 | body { 14 | padding-bottom: 50px; 15 | } -------------------------------------------------------------------------------- /ui/src/main/sass/components/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .aurora-breadcrumb { 2 | padding: 15px 0; 3 | border-bottom: 1px solid #EEE; 4 | background-color: #FFF; 5 | margin-bottom: 10px; 6 | 7 | h2 { 8 | margin: 0; 9 | font-size: 19px; 10 | } 11 | 12 | a:last-child { 13 | font-weight: 700; 14 | } 15 | 16 | span { 17 | margin: 0 8px; 18 | } 19 | } -------------------------------------------------------------------------------- /ui/src/main/sass/components/_diff.scss: -------------------------------------------------------------------------------- 1 | .task-diff { 2 | font-family: 'Courier', sans-serif; 3 | font-size: 12px; 4 | border: 1px solid $grid_highlight_color; 5 | 6 | .diff-picker { 7 | font-family: $font_stack; 8 | background-color: $grid_color; 9 | border-bottom: 1px solid $grid_highlight_color; 10 | text-transform: uppercase; 11 | padding: 15px 20px 5px 20px; 12 | color: #555; 13 | font-size: 14px; 14 | font-weight: 700; 15 | 16 | div { 17 | font-weight: 700; 18 | margin: 0px 10px; 19 | } 20 | } 21 | 22 | .diff-view { 23 | overflow: auto; 24 | 25 | span { 26 | display: block; 27 | padding: 2px 10px; 28 | width: 100%; 29 | background-color: $content_box_color; 30 | } 31 | 32 | span.same { 33 | background-color: rgba(0, 0, 0, 0.01); 34 | } 35 | 36 | span.removed { 37 | background-color: #ffd7dc; 38 | } 39 | 40 | span.added { 41 | background-color: #c8f7d5; 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /ui/src/main/sass/components/_home-page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/aurora/11ebaeeb071cb182c388a40755e84f60dda32260/ui/src/main/sass/components/_home-page.scss -------------------------------------------------------------------------------- /ui/src/main/sass/components/_navigation.scss: -------------------------------------------------------------------------------- 1 | .nav-divider { 2 | height: 3px; 3 | margin-top: -20px; 4 | } 5 | 6 | .navbar { 7 | text-transform: uppercase; 8 | font-size: 11px; 9 | border-radius: 0px; 10 | background-color: $main_contrast_color; 11 | margin-bottom: 0px; 12 | } 13 | 14 | .navbar-nav>li>a { 15 | line-height: 25px; 16 | font-size: 14px; 17 | color: $content_box_color; 18 | } 19 | 20 | .navbar-nav>li> a:hover { 21 | background-color: #444; 22 | } 23 | 24 | .navbar-brand { 25 | height: auto; 26 | padding: 10px 15px; 27 | } 28 | 29 | .navbar img { 30 | height: 35px; 31 | } -------------------------------------------------------------------------------- /ui/src/main/sass/components/_pagination.scss: -------------------------------------------------------------------------------- 1 | .pagination-wrapper { 2 | text-align: center; 3 | 4 | li { 5 | cursor: pointer; 6 | cursor: hand; 7 | } 8 | 9 | li.active { 10 | cursor: default; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ui/src/main/sass/components/_status.scss: -------------------------------------------------------------------------------- 1 | .img-circle { 2 | width: 10px; 3 | height: 10px; 4 | background-color: #CCC; 5 | display: inline-block; 6 | border-radius: 50%; 7 | 8 | &.okay { 9 | background-color: $colors_success; 10 | } 11 | 12 | &.error { 13 | background-color: $colors_error; 14 | } 15 | 16 | &.attention { 17 | background-color: $colors_warning; 18 | } 19 | 20 | &.in-progress { 21 | background-color: $colors_highlight; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ui/src/main/sass/modules/_all.scss: -------------------------------------------------------------------------------- 1 | @import './typography'; 2 | @import './colors'; -------------------------------------------------------------------------------- /ui/src/main/sass/modules/_colors.scss: -------------------------------------------------------------------------------- 1 | /* Layout Colors */ 2 | $main_bg_color: rgba(0, 0, 0, 0.02); 3 | $content_box_color: #FFF; 4 | $main_contrast_color: #222; 5 | $grid_color: #EEE; 6 | $grid_highlight_color: #DDD; 7 | 8 | $primary_font_color: #222; 9 | $secondary_font_color: #999; 10 | 11 | $success_color: #74C080; 12 | $success_secondary_color: #afe8b8; 13 | 14 | $error_color: #d63c39; 15 | $error_secondary_color: rgb(230, 101, 98); 16 | 17 | // Use to signify something is in a good state. 18 | $colors_success_light: #afe8b8; 19 | $colors_success: #74C080; 20 | $colors_success_dark: #628a68; 21 | 22 | // Use to attract user's attention to negative behavior. 23 | $colors_error_light: rgb(230, 101, 98); 24 | $colors_error: #d63c39; 25 | $colors_error_dark: #882422; 26 | 27 | // Use to highlight something that *may* need attention. 28 | $colors_warning_light: #f5d96c; 29 | $colors_warning: #f3c200; 30 | $colors_warning_dark: #d4a900; 31 | 32 | // Use to highlight something important, but that is currently operating as expected. 33 | $colors_highlight_light: #8ac5f9; 34 | $colors_highlight: #5FA2DD; 35 | $colors_highlight_dark: #3b71a0; -------------------------------------------------------------------------------- /ui/src/main/sass/modules/_typography.scss: -------------------------------------------------------------------------------- 1 | $font_stack: 'Source Sans Pro', Helvetica, sans-serif; 2 | 3 | $light: 100; 4 | $normal: 400; 5 | $bold: 500; 6 | $heavy: 700; 7 | $title: 900; 8 | --------------------------------------------------------------------------------