├── .dockerignore
├── .gitattributes
├── .github
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ └── gitlab-mirror.yml
├── .gitignore
├── .gitlab-ci.yml
├── .travis.yml
├── Dockerfile
├── LICENSE
├── README.md
├── build-scale.sh
├── build-support.sh
├── dev-build-push.sh
├── dockerfiles
├── examples
│ ├── ace
│ │ ├── Dockerfile
│ │ ├── ace.batchwiz
│ │ ├── ace.wiz
│ │ ├── centroid.py
│ │ ├── job_type.yml
│ │ ├── oli-vis.wmd
│ │ └── runOpticks.sh
│ ├── binary-parse
│ │ ├── Dockerfile
│ │ ├── job_type.yml
│ │ └── parse_binary.sh
│ ├── landsat-base
│ │ ├── Dockerfile
│ │ └── epel-release-7-5.noarch.rpm
│ ├── landsat-ndwi
│ │ ├── Dockerfile
│ │ ├── job_type.yml
│ │ └── landsat_ndwi.py
│ ├── landsat-parse
│ │ ├── Dockerfile
│ │ ├── job_type.yml
│ │ └── parse_landsat.sh
│ ├── landsat-tiles
│ │ ├── Dockerfile
│ │ ├── job_type.yml
│ │ └── landsat_tiles.sh
│ ├── pca
│ │ ├── Dockerfile
│ │ ├── job_type.yml
│ │ ├── pca.batchwiz
│ │ ├── pca.wiz
│ │ └── runOpticks.sh
│ ├── read-bytes-seed
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── scale-job.py
│ │ └── seed.manifest.json
│ ├── read-bytes
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ └── scale-job.py
│ ├── source-metadata
│ │ ├── Dockerfile
│ │ ├── generate-metadata.sh
│ │ └── seed.manifest.json
│ ├── tad
│ │ ├── Dockerfile
│ │ ├── centroid.py
│ │ ├── job_type.yml
│ │ ├── runOpticks.sh
│ │ ├── tad.batchwiz
│ │ └── tad.wiz
│ ├── test-seed
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── seed.manifest.json
│ │ └── test.py
│ └── vash
│ │ ├── Dockerfile
│ │ ├── Vash.jar
│ │ ├── job_type.yml
│ │ └── run.sh
├── fluentd
│ ├── Dockerfile
│ ├── README.md
│ ├── fluent.conf
│ └── scripts
│ │ ├── entrypoint.sh
│ │ └── inject-es-config.py
├── framework
│ └── scale
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── app-templates
│ │ ├── db.json
│ │ ├── elasticsearch.json
│ │ ├── fluentd.json
│ │ ├── logstash.json
│ │ ├── rabbitmq.json
│ │ ├── silo.json
│ │ ├── ui.json
│ │ └── webserver.json
│ │ ├── bootstrap.py
│ │ ├── country_data.json.bz2
│ │ ├── entryPoint.sh
│ │ └── scale.conf
└── vault
│ ├── Dockerfile
│ ├── Readme.md
│ ├── config.hcl
│ └── run-vault
├── generate-release.sh
├── graphics
├── PoweredByScale
│ ├── pbscale-large-earth.png
│ ├── pbscale-large-earth.svg
│ ├── pbscale-large-fill.png
│ ├── pbscale-large-fill.svg
│ ├── pbscale-large.ai
│ ├── pbscale-small-earth.png
│ ├── pbscale-small-earth.svg
│ ├── pbscale-small-fill.png
│ ├── pbscale-small-fill.svg
│ └── pbscale-small.ai
├── images
│ ├── icon-service-scale-large.png
│ ├── icon-service-scale-medium.png
│ ├── icon-service-scale-small.png
│ ├── icons
│ │ ├── android-chrome-192x192.png
│ │ ├── android-chrome-512x512.png
│ │ ├── apple-touch-icon.png
│ │ ├── browserconfig.xml
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon.ico
│ │ ├── manifest.json
│ │ ├── mstile-144x144.png
│ │ ├── mstile-150x150.png
│ │ ├── mstile-310x150.png
│ │ ├── mstile-310x310.png
│ │ ├── mstile-70x70.png
│ │ └── safari-pinned-tab.svg
│ ├── navigation-logo.png
│ ├── navigation-logo.psd
│ ├── scale3-a-gradient-1.png
│ ├── scale3-a-gradient.png
│ ├── scale3-a-solid.png
│ ├── scale3-b-gradient.png
│ ├── scale3-b-solid-240.png
│ ├── scale3-b-solid-60.png
│ ├── scale3-b-solid.png
│ ├── scale3-lightbg-200.png
│ ├── scale3-lightbg-48.png
│ ├── scale3-lightbg-64.png
│ ├── scale3-transparent-128.png
│ └── scale3.ai
├── models
│ ├── Scale_Base.stl
│ ├── Scale_Logo.stl
│ ├── Scale_Model.JPG
│ └── models.txt
├── scale3-logo.svg
└── scale3.ai
├── hooks
└── build
├── push-docs.sh
├── scale-ui
└── index.html
├── scale
├── .dockerignore
├── .gitignore
├── README.md
├── accounts
│ ├── __init__.py
│ ├── apps.py
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ └── scale_superuser.py
│ ├── serializers.py
│ ├── static
│ │ └── accounts
│ │ │ └── geoaxis.png
│ ├── templates
│ │ └── accounts
│ │ │ └── login.html
│ ├── test
│ │ ├── __init__.py
│ │ └── test_views.py
│ ├── urls.py
│ └── views.py
├── batch
│ ├── __init__.py
│ ├── apps.py
│ ├── configuration
│ │ ├── __init__.py
│ │ ├── configuration.py
│ │ ├── exceptions.py
│ │ └── json
│ │ │ ├── __init__.py
│ │ │ └── configuration_v6.py
│ ├── definition
│ │ ├── __init__.py
│ │ ├── definition.py
│ │ ├── exceptions.py
│ │ └── json
│ │ │ ├── __init__.py
│ │ │ └── definition_v6.py
│ ├── exceptions.py
│ ├── fixtures
│ │ └── batch_job_types.json
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ └── scale_batch_creator.py
│ ├── messages
│ │ ├── __init__.py
│ │ ├── create_batch_recipes.py
│ │ └── update_batch_metrics.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20170412_1225.py
│ │ ├── 0003_auto_20170706_1948.py
│ │ ├── 0004_auto_20180122_1444.py
│ │ ├── 0005_auto_20180314_1827.py
│ │ ├── 0006_auto_20180401_0218.py
│ │ ├── 0007_auto_20180516_1915.py
│ │ ├── 0008_auto_20190226_1255.py
│ │ ├── 0009_auto_20190531_1318.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── configuration
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_configuration_v6.py
│ │ │ └── test_configuration.py
│ │ ├── definition
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_definition_v6.py
│ │ │ └── test_definition.py
│ │ ├── management
│ │ │ ├── __init__.py
│ │ │ └── commands
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_scale_batch_creator.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ ├── test_create_batch_recipes.py
│ │ │ └── test_update_batch_metrics.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── cli
│ ├── __init__.py
│ └── management
│ │ ├── __init__.py
│ │ └── commands
│ │ ├── __init__.py
│ │ └── migratedata.py
├── data
│ ├── __init__.py
│ ├── apps.py
│ ├── data
│ │ ├── __init__.py
│ │ ├── data.py
│ │ ├── data_util.py
│ │ ├── exceptions.py
│ │ ├── json
│ │ │ ├── __init__.py
│ │ │ ├── data_v1.py
│ │ │ └── data_v6.py
│ │ └── value.py
│ ├── dataset
│ │ ├── __init__.py
│ │ ├── dataset.py
│ │ └── json
│ │ │ ├── __init__.py
│ │ │ └── dataset_v6.py
│ ├── exceptions.py
│ ├── filter
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── filter.py
│ │ └── json
│ │ │ ├── __init__.py
│ │ │ └── filter_v6.py
│ ├── interface
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── interface.py
│ │ ├── json
│ │ │ ├── __init__.py
│ │ │ └── interface_v6.py
│ │ └── parameter.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── data
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_data_v1.py
│ │ │ │ └── test_data_v6.py
│ │ │ ├── test_data.py
│ │ │ └── test_value.py
│ │ ├── dataset
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_dataset_v6.py
│ │ │ └── test_dataset.py
│ │ ├── filter
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_filter_v6.py
│ │ │ └── test_filter.py
│ │ ├── interface
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_interface_v6.py
│ │ │ ├── test_interface.py
│ │ │ └── test_parameter.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── diagnostic
│ ├── __init__.py
│ ├── apps.py
│ ├── exceptions.py
│ ├── fixtures
│ │ ├── diagnostic_errors.json
│ │ ├── diagnostic_job_types.json
│ │ └── diagnostic_recipe_types.json
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ ├── scale_bake.py
│ │ │ ├── scale_count.py
│ │ │ ├── scale_hello.py
│ │ │ └── scale_roulette.py
│ ├── test
│ │ ├── __init__.py
│ │ └── test_views.py
│ ├── urls.py
│ └── views.py
├── docs
│ ├── Makefile
│ ├── _static
│ │ ├── images
│ │ │ └── architecture
│ │ │ │ ├── Scale_Architecture.pptx
│ │ │ │ └── overview.png
│ │ ├── scale3-transparent-128.png
│ │ └── style.css
│ ├── _templates
│ │ └── layout.html
│ ├── algorithm_integration
│ │ ├── index.rst
│ │ ├── results_manifest.rst
│ │ ├── step1.rst
│ │ ├── step2.rst
│ │ ├── step3.rst
│ │ ├── step4.rst
│ │ └── step5.rst
│ ├── architecture
│ │ ├── django
│ │ │ ├── .gitignore
│ │ │ └── index.rst
│ │ ├── index.rst
│ │ ├── jobs
│ │ │ ├── batch_definition.rst
│ │ │ ├── error_interface.rst
│ │ │ ├── exe_configuration.rst
│ │ │ ├── index.rst
│ │ │ ├── job_configuration.rst
│ │ │ ├── job_data.rst
│ │ │ ├── job_interface.rst
│ │ │ ├── recipe_data.rst
│ │ │ ├── recipe_definition.rst
│ │ │ ├── resources.rst
│ │ │ ├── seed.rst
│ │ │ └── task_results.rst
│ │ ├── logs.rst
│ │ ├── messaging.rst
│ │ ├── overview.rst
│ │ ├── port.rst
│ │ ├── scan.rst
│ │ ├── strike.rst
│ │ ├── triggers.rst
│ │ └── workspaces.rst
│ ├── build_openapi_docs.py
│ ├── build_wiki_docs.py
│ ├── cli
│ │ ├── getting_started.rst
│ │ ├── index.rst
│ │ └── overview.rst
│ ├── conf.py
│ ├── development
│ │ └── index.rst
│ ├── images
│ │ └── algorithm_integration
│ │ │ ├── new_recipe.png
│ │ │ ├── new_recipe_entry.png
│ │ │ ├── recipe_input.png
│ │ │ ├── setting_up_trigger.png
│ │ │ └── trigger_input.png
│ ├── index.rst
│ ├── install
│ │ └── index.rst
│ ├── make.bat
│ ├── overview
│ │ └── index.rst
│ ├── rest
│ │ ├── index.rst
│ │ └── v6
│ │ │ ├── batch.rst
│ │ │ ├── batch.yml
│ │ │ ├── data.rst
│ │ │ ├── data.yml
│ │ │ ├── deprecated.rst
│ │ │ ├── diagnostic.rst
│ │ │ ├── diagnostic.yml
│ │ │ ├── error.rst
│ │ │ ├── error.yml
│ │ │ ├── ingest.rst
│ │ │ ├── ingest.yml
│ │ │ ├── job.rst
│ │ │ ├── job.yml
│ │ │ ├── job_type.rst
│ │ │ ├── job_type.yml
│ │ │ ├── metrics.rst
│ │ │ ├── metrics.yml
│ │ │ ├── node.rst
│ │ │ ├── node.yml
│ │ │ ├── openapi.yml
│ │ │ ├── queue.rst
│ │ │ ├── queue.yml
│ │ │ ├── recipe.rst
│ │ │ ├── recipe.yml
│ │ │ ├── recipe_type.rst
│ │ │ ├── recipe_type.yml
│ │ │ ├── scale_file.rst
│ │ │ ├── scale_file.yml
│ │ │ ├── scan.rst
│ │ │ ├── scan.yml
│ │ │ ├── scheduler.rst
│ │ │ ├── scheduler.yml
│ │ │ ├── strike.rst
│ │ │ ├── strike.yml
│ │ │ ├── system.rst
│ │ │ ├── system.yml
│ │ │ ├── timeline.rst
│ │ │ ├── timeline.yml
│ │ │ ├── workspace.rst
│ │ │ └── workspace.yml
│ └── wiki
│ │ ├── mkdocs.yml
│ │ └── scale.wiki
│ │ └── setup_wiki_git.sh
├── environment
│ ├── cent7-init.sh
│ ├── cloud-init.sh
│ ├── legacy-cloud-init.sh
│ ├── mac-init.sh
│ └── win-init.bat
├── error
│ ├── __init__.py
│ ├── apps.py
│ ├── exceptions.py
│ ├── fixtures
│ │ └── basic_errors.json
│ ├── handlers.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20151217_1319.py
│ │ ├── 0003_error_is_builtin.py
│ │ ├── 0004_error_should_be_retried.py
│ │ ├── 0005_auto_20180621_2110.py
│ │ ├── 0006_update_retried.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── ingest
│ ├── __init__.py
│ ├── apps.py
│ ├── fixtures
│ │ ├── ingest_errors.json
│ │ └── ingest_job_types.json
│ ├── handlers
│ │ ├── __init__.py
│ │ ├── file_handler.py
│ │ └── file_rule.py
│ ├── ingest_event_serializers.py
│ ├── ingest_job.py
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ ├── scale_ingest.py
│ │ │ ├── scale_scan.py
│ │ │ └── scale_strike.py
│ ├── messages
│ │ ├── __init__.py
│ │ └── create_ingest_jobs.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20160414_0937.py
│ │ ├── 0003_auto_20160711_1044.py
│ │ ├── 0004_auto_20160711_1058.py
│ │ ├── 0005_auto_20160728_1243.py
│ │ ├── 0006_auto_20161202_1621.py
│ │ ├── 0007_auto_20170127_1327.py
│ │ ├── 0008_auto_20170127_1332.py
│ │ ├── 0009_scan.py
│ │ ├── 0010_auto_20170206_1646.py
│ │ ├── 0011_auto_20170302_2130.py
│ │ ├── 0012_scan_file_count.py
│ │ ├── 0013_auto_20170406_1517.py
│ │ ├── 0014_auto_20170412_1225.py
│ │ ├── 0015_ingestevent.py
│ │ ├── 0016_ingest_data_type_tags.py
│ │ ├── 0017_populate_data_type_tags.py
│ │ ├── 0018_remove_ingest_data_type.py
│ │ ├── 0019_filename_index.py
│ │ └── __init__.py
│ ├── models.py
│ ├── scan
│ │ ├── __init__.py
│ │ ├── configuration
│ │ │ ├── __init__.py
│ │ │ ├── exceptions.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── configuration_v6.py
│ │ │ └── scan_configuration.py
│ │ └── scanners
│ │ │ ├── __init__.py
│ │ │ ├── dir_scanner.py
│ │ │ ├── exceptions.py
│ │ │ ├── factory.py
│ │ │ ├── s3_scanner.py
│ │ │ └── scanner.py
│ ├── serializers.py
│ ├── strike
│ │ ├── __init__.py
│ │ ├── configuration
│ │ │ ├── __init__.py
│ │ │ ├── exceptions.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── configuration_v6.py
│ │ │ └── strike_configuration.py
│ │ └── monitors
│ │ │ ├── __init__.py
│ │ │ ├── dir_monitor.py
│ │ │ ├── exceptions.py
│ │ │ ├── factory.py
│ │ │ ├── monitor.py
│ │ │ └── s3_monitor.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ └── test_create_ingest_jobs.py
│ │ ├── scan
│ │ │ ├── __init__.py
│ │ │ ├── configuration
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_scan_configuration.py
│ │ │ └── scanners
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_dir_scanner.py
│ │ │ │ └── test_s3_scanner.py
│ │ ├── strike
│ │ │ ├── __init__.py
│ │ │ ├── configuration
│ │ │ │ ├── __init__.py
│ │ │ │ ├── json
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── test_configuration_v6.py
│ │ │ │ └── test_strike_configuration.py
│ │ │ └── monitors
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_dir_monitor.py
│ │ │ │ └── test_s3_monitor.py
│ │ ├── test_app.py
│ │ ├── test_ingest_job.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ ├── triggers
│ │ │ ├── __init__.py
│ │ │ └── test_ingest_recipe_handler.py
│ │ └── utils.py
│ ├── triggers
│ │ ├── __init__.py
│ │ └── ingest_recipe_handler.py
│ ├── urls.py
│ └── views.py
├── job
│ ├── __init__.py
│ ├── apps.py
│ ├── clock.py
│ ├── configuration
│ │ ├── __init__.py
│ │ ├── configuration.py
│ │ ├── data
│ │ │ ├── __init__.py
│ │ │ ├── data_file.py
│ │ │ ├── exceptions.py
│ │ │ ├── job_connection.py
│ │ │ └── job_data.py
│ │ ├── exceptions.py
│ │ ├── interface
│ │ │ ├── __init__.py
│ │ │ ├── exceptions.py
│ │ │ ├── job_interface.py
│ │ │ ├── job_interface_1_0.py
│ │ │ ├── job_interface_1_1.py
│ │ │ ├── job_interface_1_2.py
│ │ │ ├── job_interface_1_3.py
│ │ │ └── scale_file.py
│ │ ├── json
│ │ │ ├── __init__.py
│ │ │ └── job_config_v6.py
│ │ ├── mount.py
│ │ └── results
│ │ │ ├── __init__.py
│ │ │ ├── exceptions.py
│ │ │ ├── job_results.py
│ │ │ └── results_manifest
│ │ │ ├── __init__.py
│ │ │ ├── results_manifest.py
│ │ │ └── results_manifest_1_0.py
│ ├── data
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── job_connection.py
│ │ ├── job_data.py
│ │ └── types.py
│ ├── deprecation.py
│ ├── error
│ │ ├── __init__.py
│ │ ├── error.py
│ │ └── mapping.py
│ ├── errors.py
│ ├── exceptions.py
│ ├── execution
│ │ ├── __init__.py
│ │ ├── configuration
│ │ │ ├── __init__.py
│ │ │ ├── configurators.py
│ │ │ ├── docker_param.py
│ │ │ ├── exceptions.py
│ │ │ ├── input_file.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── exe_config.py
│ │ │ │ ├── exe_config_1_0.py
│ │ │ │ └── exe_config_1_1.py
│ │ │ ├── volume.py
│ │ │ └── workspace.py
│ │ ├── container.py
│ │ ├── exceptions.py
│ │ ├── job_exe.py
│ │ ├── manager.py
│ │ ├── metrics.py
│ │ └── tasks
│ │ │ ├── __init__.py
│ │ │ ├── cleanup_task.py
│ │ │ ├── exe_task.py
│ │ │ ├── json
│ │ │ ├── __init__.py
│ │ │ └── results
│ │ │ │ ├── __init__.py
│ │ │ │ └── task_results.py
│ │ │ ├── main_task.py
│ │ │ ├── post_task.py
│ │ │ ├── pre_task.py
│ │ │ └── pull_task.py
│ ├── fixtures
│ │ ├── basic_job_errors.json
│ │ └── basic_system_job_types.json
│ ├── handlers
│ │ ├── __init__.py
│ │ └── inputs
│ │ │ ├── __init__.py
│ │ │ ├── base_input.py
│ │ │ ├── file.py
│ │ │ ├── files.py
│ │ │ └── property.py
│ ├── job_type_serializers.py
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ ├── scale_clock.py
│ │ │ ├── scale_post_steps.py
│ │ │ └── scale_pre_steps.py
│ ├── messages
│ │ ├── __init__.py
│ │ ├── blocked_jobs.py
│ │ ├── cancel_jobs.py
│ │ ├── cancel_jobs_bulk.py
│ │ ├── completed_jobs.py
│ │ ├── create_jobs.py
│ │ ├── failed_jobs.py
│ │ ├── job_exe_end.py
│ │ ├── pending_jobs.py
│ │ ├── process_job_input.py
│ │ ├── publish_job.py
│ │ ├── purge_jobs.py
│ │ ├── running_jobs.py
│ │ ├── spawn_delete_files_job.py
│ │ ├── uncancel_jobs.py
│ │ └── unpublish_jobs.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_jobexecution_job_metrics.py
│ │ ├── 0003_auto_20151016_0849.py
│ │ ├── 0004_auto_20151020_1059.py
│ │ ├── 0005_auto_20151030_1402.py
│ │ ├── 0006_auto_20151106_1608.py
│ │ ├── 0007_job_job_type_rev.py
│ │ ├── 0008_jobtype_trigger_rule.py
│ │ ├── 0009_jobtype_revision_num.py
│ │ ├── 0010_auto_20151208_1503.py
│ │ ├── 0011_jobtype_max_scheduled.py
│ │ ├── 0012_auto_20160310_1318.py
│ │ ├── 0013_auto_20160316_1805.py
│ │ ├── 0014_auto_20160317_1208.py
│ │ ├── 0015_auto_20160420_1345.py
│ │ ├── 0016_auto_20160421_1553.py
│ │ ├── 0017_auto_20160426_1556.py
│ │ ├── 0018_auto_20160804_1402.py
│ │ ├── 0019_taskupdate.py
│ │ ├── 0020_auto_20161110_1517.py
│ │ ├── 0021_auto_20161115_1524.py
│ │ ├── 0022_jobtype_configuration.py
│ │ ├── 0023_jobtype_shared_mem_required.py
│ │ ├── 0024_auto_20170412_1225.py
│ │ ├── 0025_auto_20170504_1534.py
│ │ ├── 0026_auto_20170510_1151.py
│ │ ├── 0027_auto_20170615_1652.py
│ │ ├── 0028_jobinputfile.py
│ │ ├── 0029_auto_20170707_1034.py
│ │ ├── 0030_remove_job_configuration.py
│ │ ├── 0031_auto_20170822_1544.py
│ │ ├── 0032_job_node.py
│ │ ├── 0033_auto_20180105_2113.py
│ │ ├── 0034_auto_20180112_1759.py
│ │ ├── 0035_auto_20180122_1444.py
│ │ ├── 0036_auto_20180123_2042.py
│ │ ├── 0037_auto_20180314_1827.py
│ │ ├── 0038_auto_20180622_1510.py
│ │ ├── 0039_auto_20180622_1827.py
│ │ ├── 0040_auto_20180709_1807.py
│ │ ├── 0041_jobtypetag.py
│ │ ├── 0042_auto_20180802_1830.py
│ │ ├── 0043_remove_jobtypetag_job_type.py
│ │ ├── 0044_jobtypetag_job_type.py
│ │ ├── 0045_auto_20180830_1812.py
│ │ ├── 0046_jobtyperevision_docker_image.py
│ │ ├── 0047_jobtype_versionarray.py
│ │ ├── 0048_auto_20180913_1632.py
│ │ ├── 0049_auto_20180927_1531.py
│ │ ├── 0050_job_configuration.py
│ │ ├── 0051_auto_20190211_1500.py
│ │ ├── 0052_jobtype_is_published.py
│ │ ├── 0053_jobtype_unmet_resources.py
│ │ ├── 0054_convert_manifest.py
│ │ ├── 0055_jobtype_v5_deprecation.py
│ │ ├── 0056_convert_strike_jobs.py
│ │ ├── 0057_auto_20190603_1846.py
│ │ └── __init__.py
│ ├── models.py
│ ├── seed
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── manifest.py
│ │ ├── metadata.py
│ │ ├── results
│ │ │ ├── __init__.py
│ │ │ ├── job_results.py
│ │ │ └── outputs_json.py
│ │ ├── schema
│ │ │ ├── seed.manifest.schema.json
│ │ │ └── seed.metadata.schema.json
│ │ └── types.py
│ ├── serializers.py
│ ├── tasks
│ │ ├── __init__.py
│ │ ├── base_task.py
│ │ ├── health_task.py
│ │ ├── manager.py
│ │ ├── node_task.py
│ │ ├── pull_task.py
│ │ └── update.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── configuration
│ │ │ ├── __init__.py
│ │ │ ├── data
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_job_connection.py
│ │ │ │ └── test_job_data.py
│ │ │ ├── interface
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_configuration_interface.py
│ │ │ │ ├── test_job_interface.py
│ │ │ │ └── test_scale_file.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_job_config_v6.py
│ │ │ ├── results
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_job_results.py
│ │ │ │ └── test_results_manifest.py
│ │ │ └── test_configuration.py
│ │ ├── error
│ │ │ ├── __init__.py
│ │ │ ├── test_error.py
│ │ │ └── test_mapping.py
│ │ ├── execution
│ │ │ ├── __init__.py
│ │ │ ├── configuration
│ │ │ │ ├── __init__.py
│ │ │ │ ├── json
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── test_exe_config.py
│ │ │ │ └── test_configurators.py
│ │ │ ├── tasks
│ │ │ │ ├── __init__.py
│ │ │ │ ├── json
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── results
│ │ │ │ │ │ ├── __init__.py
│ │ │ │ │ │ └── test_task_results.py
│ │ │ │ ├── test_post_task.py
│ │ │ │ └── test_pre_task.py
│ │ │ ├── test_job_exe.py
│ │ │ ├── test_manager.py
│ │ │ └── test_metrics.py
│ │ ├── management
│ │ │ ├── __init__.py
│ │ │ └── commands
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_scale_post_steps.py
│ │ │ │ └── test_scale_pre_steps.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ ├── test_blocked_jobs.py
│ │ │ ├── test_cancel_jobs.py
│ │ │ ├── test_cancel_jobs_bulk.py
│ │ │ ├── test_completed_jobs.py
│ │ │ ├── test_create_jobs.py
│ │ │ ├── test_failed_jobs.py
│ │ │ ├── test_job_exe_end.py
│ │ │ ├── test_pending_jobs.py
│ │ │ ├── test_process_job_input.py
│ │ │ ├── test_publish_job.py
│ │ │ ├── test_purge_jobs.py
│ │ │ ├── test_running_jobs.py
│ │ │ ├── test_spawn_delete_files_job.py
│ │ │ ├── test_uncancel_jobs.py
│ │ │ └── test_unpublish_jobs.py
│ │ ├── seed
│ │ │ ├── __init__.py
│ │ │ ├── results
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_job_results.py
│ │ │ ├── test_job_data.py
│ │ │ ├── test_manifest.py
│ │ │ ├── test_metadata.py
│ │ │ └── test_types.py
│ │ ├── tasks
│ │ │ ├── __init__.py
│ │ │ ├── test_base_task.py
│ │ │ └── test_manager.py
│ │ ├── test_clock.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── manage.py
├── mesos_api
│ ├── __init__.py
│ ├── api.py
│ ├── apps.py
│ ├── offers.py
│ ├── tasks.py
│ ├── unversioned
│ │ ├── __init__.py
│ │ └── agent.py
│ └── utils.py
├── messaging
│ ├── __init__.py
│ ├── apps.py
│ ├── backends
│ │ ├── __init__.py
│ │ ├── amqp.py
│ │ ├── backend.py
│ │ ├── factory.py
│ │ └── sqs.py
│ ├── exceptions.py
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ ├── scale_echo_message.py
│ │ │ ├── scale_message_handler.py
│ │ │ └── scale_send_message.py
│ ├── manager.py
│ ├── messages
│ │ ├── __init__.py
│ │ ├── chain.py
│ │ ├── echo.py
│ │ ├── factory.py
│ │ ├── fail.py
│ │ └── message.py
│ └── test
│ │ ├── __init__.py
│ │ ├── test_apps.py
│ │ ├── test_backends.py
│ │ ├── test_manager.py
│ │ ├── test_manager_singleton.py
│ │ └── test_messages.py
├── metrics
│ ├── __init__.py
│ ├── apps.py
│ ├── daily_metrics.py
│ ├── fixtures
│ │ ├── metrics_job_types.json
│ │ └── metrics_trigger_rules.json
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ └── scale_daily_metrics.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20151007_1352.py
│ │ ├── 0003_metricsingest.py
│ │ ├── 0004_auto_20151104_1640.py
│ │ ├── 0005_auto_20160415_1636.py
│ │ ├── 0006_metricserror.py
│ │ ├── 0007_auto_20161013_2333.py
│ │ ├── 0008_occurred_datetime.py
│ │ ├── 0009_revert_datetime.py
│ │ ├── 0010_occurred_datetime.py
│ │ └── __init__.py
│ ├── models.py
│ ├── registry.py
│ ├── serializers.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── test_daily_metrics.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── node
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_node_pause_reason.py
│ │ ├── 0003_node_is_paused_errors.py
│ │ ├── 0004_auto_20170524_1639.py
│ │ ├── 0005_auto_20181220_2014.py
│ │ ├── 0006_node_last_offer_received.py
│ │ └── __init__.py
│ ├── models.py
│ ├── resources
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── gpu_manager.py
│ │ ├── json
│ │ │ ├── __init__.py
│ │ │ └── resources.py
│ │ ├── node_resources.py
│ │ └── resource.py
│ ├── serializers.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── resources
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_resources.py
│ │ │ └── test_gpu_manager.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── pip
│ ├── docs.txt
│ ├── production.txt
│ └── requirements.txt
├── product
│ ├── __init__.py
│ ├── apps.py
│ ├── configuration
│ │ ├── __init__.py
│ │ └── product_data_file.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20160622_1344.py
│ │ ├── 0003_auto_20170127_1319.py
│ │ ├── 0004_auto_20170127_1324.py
│ │ ├── 0005_auto_20170127_1344.py
│ │ ├── 0006_auto_20170127_1348.py
│ │ ├── 0007_fileancestrylink_batch.py
│ │ ├── 0009_auto_20170301_1130.py
│ │ ├── 0010_auto_20170727_1349.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── configuration
│ │ │ ├── __init__.py
│ │ │ └── test_product_data_file.py
│ │ ├── test_models.py
│ │ └── utils.py
│ └── types.py
├── queue
│ ├── __init__.py
│ ├── apps.py
│ ├── fixtures
│ │ └── queue_trigger_rules.json
│ ├── job_exe.py
│ ├── job_load.py
│ ├── messages
│ │ ├── __init__.py
│ │ ├── queued_jobs.py
│ │ ├── requeue_jobs.py
│ │ └── requeue_jobs_bulk.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_jobload.py
│ │ ├── 0003_auto_20151023_1104.py
│ │ ├── 0004_remove_queue_is_job_type_paused.py
│ │ ├── 0005_queue_node_required.py
│ │ ├── 0006_auto_20160316_1625.py
│ │ ├── 0007_auto_20160421_1643.py
│ │ ├── 0008_auto_20160421_1648.py
│ │ ├── 0009_auto_20170412_1225.py
│ │ ├── 0010_auto_20170615_1704.py
│ │ ├── 0011_auto_20170616_1052.py
│ │ ├── 0012_auto_20170616_1101.py
│ │ ├── 0013_auto_20170720_1702.py
│ │ ├── 0014_queue.py
│ │ ├── 0015_auto_20170731_1527.py
│ │ ├── 0016_auto_20180123_2037.py
│ │ ├── 0017_queue_docker_image.py
│ │ ├── 0018_queue_docker_image_populate.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ ├── test_queued_jobs.py
│ │ │ ├── test_requeue_jobs.py
│ │ │ └── test_requeue_jobs_bulk.py
│ │ ├── test_job_load.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── recipe
│ ├── __init__.py
│ ├── apps.py
│ ├── configuration
│ │ ├── __init__.py
│ │ ├── configuration.py
│ │ ├── data
│ │ │ ├── __init__.py
│ │ │ ├── exceptions.py
│ │ │ ├── recipe_connection.py
│ │ │ └── recipe_data.py
│ │ ├── definition
│ │ │ ├── __init__.py
│ │ │ ├── exceptions.py
│ │ │ └── recipe_definition.py
│ │ ├── exceptions.py
│ │ └── json
│ │ │ ├── __init__.py
│ │ │ └── recipe_config_v6.py
│ ├── definition
│ │ ├── __init__.py
│ │ ├── connection.py
│ │ ├── definition.py
│ │ ├── exceptions.py
│ │ ├── json
│ │ │ ├── __init__.py
│ │ │ ├── definition_v1.py
│ │ │ └── definition_v6.py
│ │ └── node.py
│ ├── diff
│ │ ├── __init__.py
│ │ ├── diff.py
│ │ ├── exceptions.py
│ │ ├── forced_nodes.py
│ │ ├── json
│ │ │ ├── __init__.py
│ │ │ ├── diff_v6.py
│ │ │ └── forced_nodes_v6.py
│ │ └── node.py
│ ├── exceptions.py
│ ├── handlers
│ │ ├── __init__.py
│ │ ├── connection.py
│ │ ├── graph.py
│ │ ├── graph_delta.py
│ │ └── node.py
│ ├── instance
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── json
│ │ │ ├── __init__.py
│ │ │ └── recipe_v6.py
│ │ ├── node.py
│ │ └── recipe.py
│ ├── messages
│ │ ├── __init__.py
│ │ ├── create_conditions.py
│ │ ├── create_recipes.py
│ │ ├── process_condition.py
│ │ ├── process_recipe_input.py
│ │ ├── purge_recipe.py
│ │ ├── supersede_recipe_nodes.py
│ │ ├── update_recipe.py
│ │ ├── update_recipe_definition.py
│ │ └── update_recipe_metrics.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20151106_1409.py
│ │ ├── 0003_recipe_recipe_type_rev.py
│ │ ├── 0004_recipetype_trigger_rule.py
│ │ ├── 0005_recipetype_revision_num.py
│ │ ├── 0006_auto_20151125_1404.py
│ │ ├── 0007_auto_20160310_1318.py
│ │ ├── 0008_auto_20160317_1208.py
│ │ ├── 0009_auto_20160511_2204.py
│ │ ├── 0010_auto_20160330_1412.py
│ │ ├── 0011_auto_20160330_1505.py
│ │ ├── 0012_auto_20160330_1659.py
│ │ ├── 0013_auto_20160331_1127.py
│ │ ├── 0014_auto_20160608_1402.py
│ │ ├── 0015_recipefile.py
│ │ ├── 0016_recipefile_data.py
│ │ ├── 0017_auto_20170412_1225.py
│ │ ├── 0018_recipefile_recipe_input.py
│ │ ├── 0019_recipetype_is_system.py
│ │ ├── 0020_auto_20180119_0055.py
│ │ ├── 0020_recipe_batch.py
│ │ ├── 0021_auto_20180219_1916.py
│ │ ├── 0022_auto_20180307_1617.py
│ │ ├── 0023_auto_20180523_1247.py
│ │ ├── 0024_auto_20180523_2057.py
│ │ ├── 0025_auto_20180608_0114.py
│ │ ├── 0026_auto_20180723_1914.py
│ │ ├── 0027_auto_20181008_1756.py
│ │ ├── 0027_auto_20181016_1344.py
│ │ ├── 0028_auto_20181016_1349.py
│ │ ├── 0029_auto_20181016_1431.py
│ │ ├── 0030_auto_20181024_1607.py
│ │ ├── 0031_auto_20181026_1417.py
│ │ ├── 0032_recipe_type_link_tables.py
│ │ ├── 0033_auto_20181102_0307.py
│ │ ├── 0034_recipe_configuration.py
│ │ ├── 0035_auto_20190126_2340.py
│ │ ├── 0036_remove_recipetype_version.py
│ │ ├── 0037_remove_recipetype_trigger_rule.py
│ │ └── __init__.py
│ ├── models.py
│ ├── seed
│ │ ├── __init__.py
│ │ ├── recipe_connection.py
│ │ ├── recipe_data.py
│ │ ├── recipe_definition.py
│ │ └── schema
│ │ │ └── recipe_definition_2_0.json
│ ├── serializers.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── configuration
│ │ │ ├── __init__.py
│ │ │ ├── data
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_recipe_data.py
│ │ │ ├── definition
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_recipe_definition.py
│ │ │ ├── json
│ │ │ │ └── test_recipe_config_v6.py
│ │ │ └── test_configuration.py
│ │ ├── definition
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_definition_v1.py
│ │ │ │ └── test_definition_v6.py
│ │ │ └── test_definition.py
│ │ ├── diff
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_diff_v6.py
│ │ │ │ └── test_forced_nodes_v6.py
│ │ │ └── test_diff.py
│ │ ├── handlers
│ │ │ ├── __init__.py
│ │ │ ├── test_graph.py
│ │ │ └── test_graph_delta.py
│ │ ├── instance
│ │ │ ├── __init__.py
│ │ │ ├── json
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_recipe_v6.py
│ │ │ └── test_recipe.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ ├── test_create_conditions.py
│ │ │ ├── test_create_recipes.py
│ │ │ ├── test_process_condition.py
│ │ │ ├── test_process_recipe_input.py
│ │ │ ├── test_purge_recipe.py
│ │ │ ├── test_supersede_recipe_nodes.py
│ │ │ ├── test_update_recipe.py
│ │ │ ├── test_update_recipe_definition.py
│ │ │ └── test_update_recipe_metrics.py
│ │ ├── test_models.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── scale
│ ├── .gitignore
│ ├── __init__.py
│ ├── __init__.py.template
│ ├── custom_logging.py
│ ├── local_settings_DOCS.py
│ ├── local_settings_TRAVIS-CI.py
│ ├── local_settings_dev.py
│ ├── local_settings_docker.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── scheduler
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── cleanup
│ │ ├── __init__.py
│ │ ├── manager.py
│ │ └── node.py
│ ├── cluster_utils.py
│ ├── configuration.py
│ ├── database
│ │ ├── __init__.py
│ │ └── updater.py
│ ├── dependencies
│ │ ├── __init__.py
│ │ └── manager.py
│ ├── fixtures
│ │ └── scheduler_errors.json
│ ├── initialize.py
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ ├── load_all_data.py
│ │ │ ├── scale_db_update.py
│ │ │ └── scale_scheduler.py
│ ├── manager.py
│ ├── messages
│ │ ├── __init__.py
│ │ └── restart_scheduler.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20151007_1352.py
│ │ ├── 0003_auto_20160201_0846.py
│ │ ├── 0004_auto_20170209_1616.py
│ │ ├── 0005_scheduler_queue_mode.py
│ │ ├── 0006_scheduler_status.py
│ │ ├── 0007_scheduler_num_message_handlers.py
│ │ ├── 0008_auto_20171103_1334.py
│ │ ├── 0009_scheduler_debugging_level.py
│ │ ├── 0010_scheduler_resource_level.py
│ │ ├── 0011_auto_20180517_1559.py
│ │ ├── 0012_remove_scheduler_resource_level.py
│ │ ├── 0013_auto_20181220_2014.py
│ │ ├── 0014_clusterresources.py
│ │ ├── 0015_auto_20200812_1929.py
│ │ └── __init__.py
│ ├── models.py
│ ├── node
│ │ ├── __init__.py
│ │ ├── agent.py
│ │ ├── conditions.py
│ │ ├── manager.py
│ │ └── node_class.py
│ ├── recon
│ │ ├── __init__.py
│ │ └── manager.py
│ ├── resources
│ │ ├── __init__.py
│ │ ├── agent.py
│ │ ├── manager.py
│ │ └── offer.py
│ ├── scale_scheduler.py
│ ├── scheduling
│ │ ├── __init__.py
│ │ ├── manager.py
│ │ └── scheduling_node.py
│ ├── serializers.py
│ ├── sync
│ │ ├── __init__.py
│ │ ├── job_type_manager.py
│ │ └── workspace_manager.py
│ ├── task
│ │ ├── __init__.py
│ │ └── manager.py
│ ├── tasks
│ │ ├── __init__.py
│ │ ├── db_update_task.py
│ │ ├── manager.py
│ │ ├── services
│ │ │ ├── __init__.py
│ │ │ ├── messaging
│ │ │ │ ├── __init__.py
│ │ │ │ ├── message_handler_task.py
│ │ │ │ └── messaging_service.py
│ │ │ └── service.py
│ │ └── system_task.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── database
│ │ │ ├── __init__.py
│ │ │ └── test_updater.py
│ │ ├── dependencies
│ │ │ ├── __init__.py
│ │ │ └── test_manager.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ └── test_restart_scheduler.py
│ │ ├── node
│ │ │ ├── __init__.py
│ │ │ ├── test_conditions.py
│ │ │ ├── test_manager.py
│ │ │ └── test_node_class.py
│ │ ├── resources
│ │ │ ├── __init__.py
│ │ │ └── test_manager.py
│ │ ├── scheduling
│ │ │ ├── __init__.py
│ │ │ ├── test_manager.py
│ │ │ └── test_node.py
│ │ ├── sync
│ │ │ ├── __init__.py
│ │ │ ├── test_job_type_manager.py
│ │ │ ├── test_scheduler_manager.py
│ │ │ └── test_workspace_manager.py
│ │ ├── tasks
│ │ │ ├── __init__.py
│ │ │ ├── services
│ │ │ │ ├── __init__.py
│ │ │ │ └── messaging
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── test_messaging_service.py
│ │ │ └── test_manager.py
│ │ ├── test_initialize.py
│ │ ├── test_scheduler.py
│ │ └── test_views.py
│ ├── threads
│ │ ├── __init__.py
│ │ ├── base_thread.py
│ │ ├── messaging.py
│ │ ├── recon.py
│ │ ├── schedule.py
│ │ ├── scheduler_status.py
│ │ ├── sync.py
│ │ ├── task_handling.py
│ │ └── task_update.py
│ ├── urls.py
│ ├── vault
│ │ ├── __init__.py
│ │ └── manager.py
│ └── views.py
├── shared_resource
│ ├── __init__.py
│ ├── apps.py
│ └── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20170412_1225.py
│ │ ├── 0003_auto_20170426_0952.py
│ │ └── __init__.py
├── source
│ ├── __init__.py
│ ├── apps.py
│ ├── configuration
│ │ ├── __init__.py
│ │ └── source_data_file.py
│ ├── messages
│ │ ├── __init__.py
│ │ └── purge_source_file.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20170127_1336.py
│ │ ├── 0003_auto_20170127_1342.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ └── test
│ │ ├── __init__.py
│ │ ├── configuration
│ │ ├── __init__.py
│ │ └── test_source_data_file.py
│ │ ├── messages
│ │ ├── __init__.py
│ │ └── test_purge_source_file.py
│ │ ├── test_models.py
│ │ └── utils.py
├── storage
│ ├── __init__.py
│ ├── apps.py
│ ├── brokers
│ │ ├── __init__.py
│ │ ├── broker.py
│ │ ├── exceptions.py
│ │ ├── factory.py
│ │ ├── host_broker.py
│ │ ├── nfs_broker.py
│ │ └── s3_broker.py
│ ├── configuration
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── json
│ │ │ ├── __init__.py
│ │ │ ├── workspace_config_1_0.py
│ │ │ └── workspace_config_v6.py
│ │ └── workspace_configuration.py
│ ├── container.py
│ ├── delete_files_job.py
│ ├── exceptions.py
│ ├── fixtures
│ │ ├── basic_storage_errors.json
│ │ ├── delete_files_job_type.json
│ │ └── move_files_job_type.json
│ ├── geospatial_utils.py
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ ├── scale_delete_file.py
│ │ │ ├── scale_delete_files.py
│ │ │ ├── scale_download_file.py
│ │ │ ├── scale_list_files.py
│ │ │ ├── scale_move_file.py
│ │ │ ├── scale_move_files.py
│ │ │ └── scale_upload_file.py
│ ├── media_type.py
│ ├── messages
│ │ ├── __init__.py
│ │ ├── delete_files.py
│ │ └── move_files.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_workspace_is_move_enabled.py
│ │ ├── 0003_auto_20161202_1621.py
│ │ ├── 0004_auto_20170127_1408.py
│ │ ├── 0005_auto_20170127_1412.py
│ │ ├── 0006_auto_20170127_1423.py
│ │ ├── 0007_auto_20170412_1225.py
│ │ ├── 0008_auto_20170609_1443.py
│ │ ├── 0009_auto_20171002_1542.py
│ │ ├── 0010_auto_20180613_1947.py
│ │ ├── 0011_auto_20180821_1439.py
│ │ ├── 0012_auto_20180920_1320.py
│ │ ├── 0013_purgeresults.py
│ │ ├── 0014_purgeresults_force_stop_purge.py
│ │ ├── 0015_scalefile_data_type_tags.py
│ │ ├── 0016_populate_data_type_tags.py
│ │ ├── 0017_remove_scalefile_data_type.py
│ │ ├── 0018_remove_scalefile_is_operational.py
│ │ ├── 0019_optional_description.py
│ │ └── __init__.py
│ ├── models.py
│ ├── move_files_job.py
│ ├── serializers.py
│ ├── settings.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── brokers
│ │ │ ├── __init__.py
│ │ │ ├── test_host_broker.py
│ │ │ ├── test_nfs_broker.py
│ │ │ └── test_s3_broker.py
│ │ ├── configuration
│ │ │ ├── __init__.py
│ │ │ └── test_workspace_configuration.py
│ │ ├── fixtures
│ │ │ ├── __init__.py
│ │ │ └── test_delete_files_job_type.py
│ │ ├── management
│ │ │ ├── __init__.py
│ │ │ └── commands
│ │ │ │ ├── __init__.py
│ │ │ │ ├── test_scale_delete_files.py
│ │ │ │ └── test_scale_move_files.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ ├── test_delete_files.py
│ │ │ └── test_move_files.py
│ │ ├── test_delete_files_job.py
│ │ ├── test_geospatial_utils.py
│ │ ├── test_models.py
│ │ ├── test_move_files_job.py
│ │ ├── test_views.py
│ │ └── utils.py
│ ├── urls.py
│ └── views.py
├── timeline
│ ├── __init__.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── test
│ │ ├── __init__.py
│ │ └── test_views.py
│ ├── urls.py
│ └── views.py
├── trigger
│ ├── __init__.py
│ ├── apps.py
│ ├── configuration
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ └── trigger_rule.py
│ ├── handler.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20151125_1438.py
│ │ ├── 0003_auto_20151202_1325.py
│ │ ├── 0004_auto_20151207_1215.py
│ │ ├── 0005_auto_20170412_1225.py
│ │ └── __init__.py
│ ├── models.py
│ ├── serializers.py
│ └── test
│ │ ├── __init__.py
│ │ ├── tests.py
│ │ └── utils.py
├── util
│ ├── __init__.py
│ ├── active_warnings.py
│ ├── apps.py
│ ├── aws.py
│ ├── broker.py
│ ├── command.py
│ ├── database.py
│ ├── dcos.py
│ ├── deprecation.py
│ ├── environment.py
│ ├── exceptions.py
│ ├── file_size.py
│ ├── host.py
│ ├── lock.py
│ ├── middleware.py
│ ├── os_helper.py
│ ├── parse.py
│ ├── rest.py
│ ├── retry.py
│ ├── test
│ │ ├── __init__.py
│ │ ├── test_aws.py
│ │ ├── test_broker.py
│ │ ├── test_command.py
│ │ ├── test_host.py
│ │ ├── test_parse.py
│ │ ├── test_rest.py
│ │ └── test_retry.py
│ └── validation.py
└── vault
│ ├── __init__.py
│ ├── apps.py
│ ├── exceptions.py
│ ├── secrets_handler.py
│ └── test
│ ├── __init__.py
│ └── test_secrets_handler.py
├── tests
└── postman
│ ├── environment.json
│ └── full-host-test.json
├── travis-build.sh
└── web-docs
├── css
├── bootstrap-overrides.css
├── bootstrap.css
├── bootstrap.min.css
└── main.css
├── docs.html
├── flow.html
├── fonts
├── glyphicons-halflings-regular.eot
├── glyphicons-halflings-regular.svg
├── glyphicons-halflings-regular.ttf
├── glyphicons-halflings-regular.woff
└── glyphicons-halflings-regular.woff2
├── images
├── example-thumb-audio.jpg
├── example-thumb-hyperspectral.jpg
├── example-thumb-mri.jpg
├── gif-source
│ ├── quickstart1a.jpg
│ ├── quickstart1b.jpg
│ ├── quickstart1c.jpg
│ ├── quickstart1d.jpg
│ ├── quickstart1e.jpg
│ ├── quickstart2a.png
│ ├── quickstart2b.png
│ ├── quickstart2c.png
│ ├── quickstart2d.png
│ ├── quickstart2e.png
│ ├── quickstart2f.png
│ ├── quickstart2g.png
│ ├── quickstart2h.png
│ ├── quickstart2i.png
│ ├── quickstart3a.png
│ ├── quickstart3b.png
│ ├── quickstart3c.png
│ ├── quickstart3d.png
│ └── quickstart3e.png
├── horizon-1.jpg
├── horizon-2.jpg
├── horizon-3.jpg
├── quickstart1.gif
├── quickstart2.gif
├── quickstart3.gif
├── scale-dashboard.jpg
├── scale-flow-ingest-detail.jpg
├── scale-flow.png
├── scale3-transparent-128.png
├── shutterstock_128679269.jpg
├── tutorial-thumb-algorithm.jpg
├── tutorial-thumb-quickstart.jpg
├── tutorial-thumb-recipe.jpg
└── tutorial-thumb-walkthrough.jpg
├── index.html
├── javascripts
└── scale.fix.js
├── js
├── bootstrap.js
├── bootstrap.min.js
└── jquery.js
├── quickstart.html
├── stylesheets
├── github-light.css
└── styles.css
└── walkthrough
├── generate-outputs.sh
├── generate-pdf.sh
├── images
├── create-input-workspace.png
├── create-job-type-search.png
├── create-output-workspace.png
├── job-type-configuration.png
├── job-type-general-info.png
├── output-file.png
├── recipe-add-input.png
├── recipe-add-job-type.png
├── recipe-file-inputs.png
├── scale-process.png
└── strike-add-rule.png
├── index.adoc
└── styles
└── walkthrough.css
/.dockerignore:
--------------------------------------------------------------------------------
1 | *.pyc
2 | env/
3 | .idea/
4 | .vscode/
5 | .git
6 | LICENSE
7 | README.md
8 |
9 | # Exclude any developer local_settings files
10 | scale/scale/local_settings.py*
11 | scale/environment
12 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files
2 | * text=auto
3 |
4 | # Source files
5 | # ============
6 | *.pxd text
7 | *.py text
8 | *.py3 text
9 | *.pyw text
10 | *.pyx text
11 |
12 | # Binary files
13 | # ============
14 | *.db binary
15 | *.p binary
16 | *.pkl binary
17 | *.pyc binary
18 | *.pyd binary
19 | *.pyo binary
20 |
21 | # Note: .db, .p, and .pkl files are associated
22 | # with the python modules ``pickle``, ``dbm.*``,
23 | # ``shelve``, ``marshal``, ``anydbm``, & ``bsddb``
24 | # (among others).
25 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Pain Point? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Desired Solution**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Alternative / Workaround**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional Context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/workflows/gitlab-mirror.yml:
--------------------------------------------------------------------------------
1 | name: Mirroring
2 |
3 | on: [push, delete]
4 |
5 | jobs:
6 | to_gitlab:
7 | runs-on: ubuntu-18.04
8 | steps: # <-- must use actions/checkout@v1 before mirroring!
9 | - uses: actions/checkout@v1
10 | - uses: pixta-dev/repository-mirroring-action@v1
11 | with:
12 | target_repo_url:
13 | git@gitlab.com:ngageoint/scale.git
14 | ssh_private_key: # <-- use 'secrets' to pass credential information.
15 | ${{ secrets.GITLAB_SSH_PRIVATE_KEY }}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | env/
2 | .idea/
3 | .vscode/
4 | .DS_Store
5 | .c9/
6 | temp/
7 | bin/
8 | output/
9 | pkg/
10 | src/
11 | scale-ui/
12 | coverage.xml
13 | output.txt
14 | *.~c9*.py
15 | scale/local_settings.py
16 | scale/db.sqlite3
17 | redoc-static.html
18 | .python-version
19 |
--------------------------------------------------------------------------------
/dev-build-push.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | dcos marathon app remove /scale-db
4 | dcos marathon app remove /scale-elasticsearch
5 | dcos marathon app remove /scale-fluentd
6 | dcos marathon app remove /scale-rabbitmq
7 | dcos marathon app remove /scale-ui
8 | dcos marathon app remove /scale-webserver
9 | dcos marathon app stop /scale
10 |
11 | docker build --build-arg BUILD_DOCS=0 -t $1 .
12 | docker push $1
13 |
14 | dcos marathon app start /scale 1
15 |
--------------------------------------------------------------------------------
/dockerfiles/examples/ace/oli-vis.wmd:
--------------------------------------------------------------------------------
1 |
2 |
3 | Coastal aerosol
4 | Blue
5 | Green
6 | Red
7 | NIR
8 | SWIR 1
9 | SWIR 2
10 |
11 |
--------------------------------------------------------------------------------
/dockerfiles/examples/binary-parse/parse_binary.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -x
2 |
3 | echo "Running binary_parse.sh " $*
4 |
5 | # write results manifest
6 |
7 | DATE_STARTED=$(stat -c "%y" $1)"Z"
8 |
9 | cat > $2/results_manifest.json << EOF
10 | { "version": "1.1",
11 | "parse_results": [{
12 | "filename": "$(basename $1)",
13 | "file-types": [],
14 | "geo_metadata": {
15 | "data_started": "${DATE_STARTED}"
16 | }}
17 | ]
18 | }
19 | EOF
20 | cat $2/results_manifest.json
21 |
--------------------------------------------------------------------------------
/dockerfiles/examples/landsat-base/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM centos:centos7
2 | MAINTAINER Trevor R.H. Clarke
3 |
4 | ADD epel-release-7-5.noarch.rpm /tmp/
5 | RUN rpm -ivh /tmp/epel-release-7-5.noarch.rpm \
6 | && yum groupinstall -y 'Development Tools' \
7 | && yum install -y python-devel gdal-devel gdal gdal-python python-pip numpy && yum clean all \
8 | && pip install rasterio
9 |
10 | USER nobody
11 |
--------------------------------------------------------------------------------
/dockerfiles/examples/landsat-base/epel-release-7-5.noarch.rpm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/dockerfiles/examples/landsat-base/epel-release-7-5.noarch.rpm
--------------------------------------------------------------------------------
/dockerfiles/examples/landsat-ndwi/job_type.yml:
--------------------------------------------------------------------------------
1 | name: landsat-ndwi
2 | version: "1.0.0"
3 | title: Landsat NDWI
4 | description: Perform NDWI on landsat 8 data.
5 | author_name: "tclarke@ball.com"
6 | docker_image: "geoint/landsat-ndwi"
7 | priority: 250
8 | timeout: 300
9 | max_tries: 3
10 | cpus_required: 1.0
11 | mem_required: 1024.0
12 | interface:
13 | version: "1.0"
14 | command: "python landsat_ndwi.py"
15 | command_arguments: '${msi} ${job_output_dir}'
16 | input_data:
17 | - media_types: [ "image/tiff" ]
18 | required: true
19 | type: file
20 | name: msi
21 | output_data:
22 | - name: ndwi
23 | media_type: "image/tiff"
24 | required: true
25 | type: file
26 |
--------------------------------------------------------------------------------
/dockerfiles/examples/landsat-tiles/job_type.yml:
--------------------------------------------------------------------------------
1 | name: landsat-tiles
2 | version: "1.0.0"
3 | title: Landsat Tiles
4 | description: Generate map tiles for a landsat 8 product.
5 | author_name: "tclarke@ball.com"
6 | docker_image: "geoint/landsat-tiles"
7 | priority: 250
8 | timeout: 300
9 | max_tries: 3
10 | cpus_required: 0.5
11 | mem_required: 512.0
12 | interface:
13 | version: "1.0"
14 | command: "./landsat_tiles.sh"
15 | command_arguments: '${image} ${job_output_dir}'
16 | input_data:
17 | - media_types: [ "image/tiff" ]
18 | required: true
19 | type: file
20 | name: image
21 | output_data:
22 | - name: tiles
23 | required: true
24 | type: files
25 |
--------------------------------------------------------------------------------
/dockerfiles/examples/read-bytes-seed/.dockerignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .git*
3 | Dockerfile
4 | README.md
--------------------------------------------------------------------------------
/dockerfiles/examples/read-bytes-seed/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:2.7-alpine
2 | MAINTAINER Jonathan Meyer
3 |
4 | COPY scale-job.py /scale-job.py
5 |
6 | ENTRYPOINT ["python", "scale-job.py"]
7 |
--------------------------------------------------------------------------------
/dockerfiles/examples/read-bytes-seed/README.md:
--------------------------------------------------------------------------------
1 | # scale-read-bytes
2 | Scale algorithm to read x bytes from input file into output file
3 |
--------------------------------------------------------------------------------
/dockerfiles/examples/read-bytes/.dockerignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .git*
3 | Dockerfile
4 | README.md
--------------------------------------------------------------------------------
/dockerfiles/examples/read-bytes/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:2.7-alpine
2 | MAINTAINER Jonathan Meyer
3 |
4 | COPY scale-job.py /scale-job.py
5 |
6 | ENTRYPOINT ["python", "scale-job.py"]
7 |
--------------------------------------------------------------------------------
/dockerfiles/examples/read-bytes/README.md:
--------------------------------------------------------------------------------
1 | # scale-read-bytes
2 | Scale algorithm to read x bytes from input file into output file
3 |
--------------------------------------------------------------------------------
/dockerfiles/examples/source-metadata/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine
2 | MAINTAINER Jonathan Meyer
3 |
4 | COPY generate-metadata.sh /generate-metadata.sh
5 |
--------------------------------------------------------------------------------
/dockerfiles/examples/source-metadata/generate-metadata.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | cat << EOF > $OUTPUT_DIR/INPUT_FILE.metadata.json
4 | {
5 | "type": "Feature",
6 | "geometry": {
7 | "type": "Point",
8 | "coordinates": [125.6, 10.1]
9 | },
10 | "properties": {
11 | "dataStarted": "2019-10-14T00:00:00Z",
12 | "dataEnded": "2019-10-14T00:01:00Z",
13 | "dataTypes": [ "one", "two", "three" ]
14 | }
15 | }
16 | EOF
17 |
18 | echo Wrote metadata for input file $INPUT_FILE to $OUTPUT_DIR/INPUT_FILE.metadata.json
19 |
--------------------------------------------------------------------------------
/dockerfiles/examples/test-seed/.dockerignore:
--------------------------------------------------------------------------------
1 | .idea
2 | .git*
3 | Dockerfile
4 | README.md
--------------------------------------------------------------------------------
/dockerfiles/examples/test-seed/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:2.7-alpine
2 | MAINTAINER Jonathan Meyer
3 |
4 | COPY test.py /test.py
5 |
6 | ENTRYPOINT ["python", "test.py"]
7 |
--------------------------------------------------------------------------------
/dockerfiles/examples/test-seed/README.md:
--------------------------------------------------------------------------------
1 | # test-seed
2 | Seed algorithm to exercise the spec and validate executor completeness
3 |
--------------------------------------------------------------------------------
/dockerfiles/examples/vash/Vash.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/dockerfiles/examples/vash/Vash.jar
--------------------------------------------------------------------------------
/dockerfiles/examples/vash/run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -x
2 |
3 | export outfile=$2/$(basename $1 .dat).jpg
4 |
5 | java -jar Vash.jar -a 1.1 -o ${outfile} -f $1
6 |
7 | # write results manifest
8 | cat > $2/results_manifest.json << EOF
9 | { "version": "1.1",
10 | "output_data": [{
11 | "name": "results",
12 | "file": {
13 | "path": "${outfile}"
14 | }
15 | }]
16 | }
17 | EOF
18 | cat $2/results_manifest.json
19 |
--------------------------------------------------------------------------------
/dockerfiles/fluentd/README.md:
--------------------------------------------------------------------------------
1 | # Fluentd - Scale
2 | Fluentd image loaded with custom configurations to support log capture within Scale.
3 |
4 | We require a single environment variable to configure the backing Elasticsearch cluster. `ELASTICSEARCH_URL` accepts a single URL serving the Elasticsearch API.
5 | Production deployments of Elasticsearch should be fronted with a load balancer to satisfy this requirement.
6 |
7 | Supported example settings for `ELASTICSEARCH_URL`:
8 |
9 | - "http://192.168.1.10"
10 | - "http://192.168.1.10:9200"
11 | - "https://elastic.example.com"
12 | - "https://username@password:elastic.example.com"
--------------------------------------------------------------------------------
/dockerfiles/fluentd/scripts/entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | set -e
4 |
5 | if [ "$@x" != "x" ]
6 | then
7 | exec $@
8 | else
9 | python /inject-es-config.py /fluentd/etc/fluent.conf /tmp/fluent.conf
10 | fluentd -c /tmp/fluent.conf
11 | fi
12 |
13 |
--------------------------------------------------------------------------------
/dockerfiles/framework/scale/.gitignore:
--------------------------------------------------------------------------------
1 | scale/
2 |
--------------------------------------------------------------------------------
/dockerfiles/framework/scale/README.md:
--------------------------------------------------------------------------------
1 | The Dockerfile for this image is in the root of the repository. This is necessary to avoid having to specify an alternative context directory to `docker build`
2 |
--------------------------------------------------------------------------------
/dockerfiles/framework/scale/app-templates/logstash.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/dockerfiles/framework/scale/app-templates/logstash.json
--------------------------------------------------------------------------------
/dockerfiles/framework/scale/country_data.json.bz2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/dockerfiles/framework/scale/country_data.json.bz2
--------------------------------------------------------------------------------
/dockerfiles/vault/Dockerfile:
--------------------------------------------------------------------------------
1 | ARG IMAGE=alpine
2 | FROM $IMAGE
3 |
4 | ENV VAULT_VERSION 0.7.0
5 | ARG VAULT_ZIP=https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip
6 |
7 | ADD $VAULT_ZIP vault.zip
8 | RUN apk add --update unzip openssl ca-certificates curl && \
9 | unzip vault.zip && \
10 | rm vault.zip && \
11 | cp vault /usr/bin && \
12 | apk del unzip && \
13 | rm -rf /var/cache/apk/*
14 |
15 | COPY run-vault /usr/bin/run-vault
16 | COPY config.hcl config.hcl
17 |
18 | RUN chmod +x /usr/bin/run-vault
19 | RUN sed -i 's/\r$//g' /usr/bin/run-vault
20 |
21 | ENTRYPOINT ["run-vault"]
22 | CMD ["server", "-config=config.hcl"]
23 |
--------------------------------------------------------------------------------
/dockerfiles/vault/config.hcl:
--------------------------------------------------------------------------------
1 | listener "tcp" {
2 | address = "0.0.0.0:8200"
3 | tls_cert_file = "/tmp/server-cert.pem"
4 | tls_key_file = "/tmp/server-key.pem"
5 | }
6 |
7 | backend "zookeeper" {
8 | address = "master.mesos:2181"
9 | path = "vault"
10 | advertise_addr = "https://scale-vault.marathon.l4lb.thisdcos.directory:8200"
11 | }
12 |
13 | disable_mlock = true
14 |
--------------------------------------------------------------------------------
/graphics/PoweredByScale/pbscale-large-earth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/PoweredByScale/pbscale-large-earth.png
--------------------------------------------------------------------------------
/graphics/PoweredByScale/pbscale-large-fill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/PoweredByScale/pbscale-large-fill.png
--------------------------------------------------------------------------------
/graphics/PoweredByScale/pbscale-large.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/PoweredByScale/pbscale-large.ai
--------------------------------------------------------------------------------
/graphics/PoweredByScale/pbscale-small-earth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/PoweredByScale/pbscale-small-earth.png
--------------------------------------------------------------------------------
/graphics/PoweredByScale/pbscale-small-fill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/PoweredByScale/pbscale-small-fill.png
--------------------------------------------------------------------------------
/graphics/PoweredByScale/pbscale-small.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/PoweredByScale/pbscale-small.ai
--------------------------------------------------------------------------------
/graphics/images/icon-service-scale-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icon-service-scale-large.png
--------------------------------------------------------------------------------
/graphics/images/icon-service-scale-medium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icon-service-scale-medium.png
--------------------------------------------------------------------------------
/graphics/images/icon-service-scale-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icon-service-scale-small.png
--------------------------------------------------------------------------------
/graphics/images/icons/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/android-chrome-192x192.png
--------------------------------------------------------------------------------
/graphics/images/icons/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/android-chrome-512x512.png
--------------------------------------------------------------------------------
/graphics/images/icons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/apple-touch-icon.png
--------------------------------------------------------------------------------
/graphics/images/icons/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #25282b
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/graphics/images/icons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/favicon-16x16.png
--------------------------------------------------------------------------------
/graphics/images/icons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/favicon-32x32.png
--------------------------------------------------------------------------------
/graphics/images/icons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/favicon.ico
--------------------------------------------------------------------------------
/graphics/images/icons/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Scale",
3 | "icons": [
4 | {
5 | "src": "images/icons/android-chrome-192x192.png",
6 | "sizes": "192x192",
7 | "type": "image/png"
8 | },
9 | {
10 | "src": "images/icons/android-chrome-512x512.png",
11 | "sizes": "512x512",
12 | "type": "image/png"
13 | }
14 | ],
15 | "theme_color": "#ffffff",
16 | "background_color": "#ffffff",
17 | "display": "standalone"
18 | }
--------------------------------------------------------------------------------
/graphics/images/icons/mstile-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/mstile-144x144.png
--------------------------------------------------------------------------------
/graphics/images/icons/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/mstile-150x150.png
--------------------------------------------------------------------------------
/graphics/images/icons/mstile-310x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/mstile-310x150.png
--------------------------------------------------------------------------------
/graphics/images/icons/mstile-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/mstile-310x310.png
--------------------------------------------------------------------------------
/graphics/images/icons/mstile-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/icons/mstile-70x70.png
--------------------------------------------------------------------------------
/graphics/images/navigation-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/navigation-logo.png
--------------------------------------------------------------------------------
/graphics/images/navigation-logo.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/navigation-logo.psd
--------------------------------------------------------------------------------
/graphics/images/scale3-a-gradient-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-a-gradient-1.png
--------------------------------------------------------------------------------
/graphics/images/scale3-a-gradient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-a-gradient.png
--------------------------------------------------------------------------------
/graphics/images/scale3-a-solid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-a-solid.png
--------------------------------------------------------------------------------
/graphics/images/scale3-b-gradient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-b-gradient.png
--------------------------------------------------------------------------------
/graphics/images/scale3-b-solid-240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-b-solid-240.png
--------------------------------------------------------------------------------
/graphics/images/scale3-b-solid-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-b-solid-60.png
--------------------------------------------------------------------------------
/graphics/images/scale3-b-solid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-b-solid.png
--------------------------------------------------------------------------------
/graphics/images/scale3-lightbg-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-lightbg-200.png
--------------------------------------------------------------------------------
/graphics/images/scale3-lightbg-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-lightbg-48.png
--------------------------------------------------------------------------------
/graphics/images/scale3-lightbg-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-lightbg-64.png
--------------------------------------------------------------------------------
/graphics/images/scale3-transparent-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3-transparent-128.png
--------------------------------------------------------------------------------
/graphics/images/scale3.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/images/scale3.ai
--------------------------------------------------------------------------------
/graphics/models/Scale_Base.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/models/Scale_Base.stl
--------------------------------------------------------------------------------
/graphics/models/Scale_Logo.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/models/Scale_Logo.stl
--------------------------------------------------------------------------------
/graphics/models/Scale_Model.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/models/Scale_Model.JPG
--------------------------------------------------------------------------------
/graphics/models/models.txt:
--------------------------------------------------------------------------------
1 | Print your own scale logo!!!
2 |
--------------------------------------------------------------------------------
/graphics/scale3.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/graphics/scale3.ai
--------------------------------------------------------------------------------
/hooks/build:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | if [[ "${BUILD_DOCS}x" != "x" ]]
4 | then
5 | BUILD_ARGS="--build-arg BUILD_DOCS=${BUILD_DOCS}"
6 | fi
7 |
8 | if [[ "${BASE_IMAGE}x" != "x" ]]
9 | then
10 | BUILD_ARGS="--build-arg BASE_IMAGE=${BASE_IMAGE}"
11 | fi
12 |
13 | if [[ "${GOSU_URL}x" != "x" ]]
14 | then
15 | BUILD_ARGS="$BUILD_ARGS --build-arg GOSU_URL=${GOSU_URL}"
16 | fi
17 |
18 | docker build $BUILD_ARGS --label VERSION=$CACHE_TAG -t $IMAGE_NAME .
19 |
20 |
--------------------------------------------------------------------------------
/scale-ui/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/scale/.dockerignore:
--------------------------------------------------------------------------------
1 | pip/
2 | logs/*
3 | build.xml
4 | README.txt
5 |
--------------------------------------------------------------------------------
/scale/.gitignore:
--------------------------------------------------------------------------------
1 | *.py[cod]
2 | coverage.xml
3 | docs/_build/
4 | htmlcov/
5 | static/
6 | ui/
7 | logs/*
8 | environment/scale
9 | pip/mac.txt
10 |
--------------------------------------------------------------------------------
/scale/accounts/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/accounts/__init__.py
--------------------------------------------------------------------------------
/scale/accounts/apps.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.apps import AppConfig
5 |
6 |
7 | class AccountsConfig(AppConfig):
8 | name = 'accounts'
9 |
--------------------------------------------------------------------------------
/scale/accounts/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/accounts/management/__init__.py
--------------------------------------------------------------------------------
/scale/accounts/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/accounts/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/accounts/static/accounts/geoaxis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/accounts/static/accounts/geoaxis.png
--------------------------------------------------------------------------------
/scale/accounts/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/accounts/test/__init__.py
--------------------------------------------------------------------------------
/scale/accounts/urls.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | from django.conf.urls import url
4 |
5 | import accounts.views as views
6 |
7 |
8 | urlpatterns = [
9 | url(r'^accounts/users/$', views.UserList.as_view(), name='users_list_view'),
10 | url(r'^accounts/users/(?P[\w-]+)/$', views.UserDetail.as_view(), name='user_detail_view'),
11 | url(r'^accounts/profile/$', views.GetUser.as_view(), name='current_user_view'),
12 | ]
13 |
--------------------------------------------------------------------------------
/scale/batch/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'batch.apps.BatchConfig'
2 |
--------------------------------------------------------------------------------
/scale/batch/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/batch/configuration/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with batch configurations"""
2 | from util.exceptions import ValidationException
3 |
4 |
5 | class InvalidConfiguration(ValidationException):
6 | """Exception indicating that the provided batch configuration was invalid"""
7 |
8 | def __init__(self, name, description):
9 | """Constructor
10 |
11 | :param name: The name of the validation error
12 | :type name: string
13 | :param description: The description of the validation error
14 | :type description: string
15 | """
16 |
17 | super(InvalidConfiguration, self).__init__(name, description)
18 |
--------------------------------------------------------------------------------
/scale/batch/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/batch/definition/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/definition/__init__.py
--------------------------------------------------------------------------------
/scale/batch/definition/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with batch definitions"""
2 | from util.exceptions import ValidationException
3 |
4 |
5 | class InvalidDefinition(ValidationException):
6 | """Exception indicating that the provided batch definition was invalid"""
7 |
8 | def __init__(self, name, description):
9 | """Constructor
10 |
11 | :param name: The name of the validation error
12 | :type name: string
13 | :param description: The description of the validation error
14 | :type description: string
15 | """
16 |
17 | super(InvalidDefinition, self).__init__(name, description)
18 |
--------------------------------------------------------------------------------
/scale/batch/definition/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/definition/json/__init__.py
--------------------------------------------------------------------------------
/scale/batch/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with batches"""
2 |
3 |
4 | class BatchError(Exception):
5 | """Exception indicating that there was a problem with batch processing"""
6 | pass
7 |
--------------------------------------------------------------------------------
/scale/batch/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/management/__init__.py
--------------------------------------------------------------------------------
/scale/batch/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/batch/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/messages/__init__.py
--------------------------------------------------------------------------------
/scale/batch/migrations/0002_auto_20170412_1225.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11 on 2017-04-12 12:25
3 | from __future__ import unicode_literals
4 |
5 | import django.contrib.postgres.fields.jsonb
6 | from django.db import migrations
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('batch', '0001_initial'),
13 | ]
14 |
15 | operations = [
16 | migrations.AlterField(
17 | model_name='batch',
18 | name='definition',
19 | field=django.contrib.postgres.fields.jsonb.JSONField(default=dict),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/batch/migrations/0004_auto_20180122_1444.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2018-01-22 14:44
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 | import django.db.models.deletion
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('batch', '0003_auto_20170706_1948'),
13 | ]
14 |
15 | operations = [
16 | migrations.AlterField(
17 | model_name='batch',
18 | name='creator_job',
19 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='batch_creator_job', to='job.Job'),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/batch/migrations/0007_auto_20180516_1915.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.12 on 2018-05-16 19:15
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 | import django.db.models.deletion
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('batch', '0006_auto_20180401_0218'),
13 | ]
14 |
15 | operations = [
16 | migrations.AlterField(
17 | model_name='batchmetrics',
18 | name='batch',
19 | field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='metrics', to='batch.Batch'),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/batch/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/batch/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/batch/test/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/test/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/batch/test/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/test/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/batch/test/definition/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/test/definition/__init__.py
--------------------------------------------------------------------------------
/scale/batch/test/definition/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/test/definition/json/__init__.py
--------------------------------------------------------------------------------
/scale/batch/test/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/test/management/__init__.py
--------------------------------------------------------------------------------
/scale/batch/test/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/test/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/batch/test/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/batch/test/messages/__init__.py
--------------------------------------------------------------------------------
/scale/batch/urls.py:
--------------------------------------------------------------------------------
1 | """Defines the URLs for the RESTful batch services"""
2 | from django.conf.urls import url
3 |
4 | import batch.views as views
5 |
6 | urlpatterns = [
7 | url(r'^batches/$', views.BatchesView.as_view(), name='batches_view'),
8 | url(r'^batches/(\d+)/$', views.BatchDetailsView.as_view(), name='batch_details_view'),
9 | url(r'^batches/comparison/(\d+)/$', views.BatchesComparisonView.as_view(), name='batch_comparison_view'),
10 | url(r'^batches/validation/$', views.BatchesValidationView.as_view(), name='batches_validation_view'),
11 | ]
12 |
--------------------------------------------------------------------------------
/scale/cli/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/cli/__init__.py
--------------------------------------------------------------------------------
/scale/cli/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/cli/management/__init__.py
--------------------------------------------------------------------------------
/scale/cli/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/cli/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/data/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'data.apps.DataConfig'
2 |
--------------------------------------------------------------------------------
/scale/data/apps.py:
--------------------------------------------------------------------------------
1 | """Defines the application configuration for the data application"""
2 | from __future__ import unicode_literals
3 |
4 | from django.apps import AppConfig
5 |
6 |
7 | class DataConfig(AppConfig):
8 | """Configuration for the data app
9 | """
10 |
11 | name = 'data'
12 | label = 'data'
13 | verbose_name = 'Data'
14 |
--------------------------------------------------------------------------------
/scale/data/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/data/__init__.py
--------------------------------------------------------------------------------
/scale/data/data/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/data/json/__init__.py
--------------------------------------------------------------------------------
/scale/data/dataset/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/dataset/__init__.py
--------------------------------------------------------------------------------
/scale/data/dataset/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/dataset/json/__init__.py
--------------------------------------------------------------------------------
/scale/data/filter/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/filter/__init__.py
--------------------------------------------------------------------------------
/scale/data/filter/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with data filters"""
2 | from util.exceptions import ValidationException
3 |
4 |
5 | class InvalidDataFilter(ValidationException):
6 | """Exception indicating that the data filter is invalid"""
7 |
8 | def __init__(self, name, description):
9 | """Constructor
10 |
11 | :param name: The name of the validation error
12 | :type name: string
13 | :param description: The description of the validation error
14 | :type description: string
15 | """
16 |
17 | super(InvalidDataFilter, self).__init__(name, description)
18 |
--------------------------------------------------------------------------------
/scale/data/filter/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/filter/json/__init__.py
--------------------------------------------------------------------------------
/scale/data/interface/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/interface/__init__.py
--------------------------------------------------------------------------------
/scale/data/interface/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/interface/json/__init__.py
--------------------------------------------------------------------------------
/scale/data/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/data/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/data/test/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/test/data/__init__.py
--------------------------------------------------------------------------------
/scale/data/test/data/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/test/data/json/__init__.py
--------------------------------------------------------------------------------
/scale/data/test/dataset/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/test/dataset/__init__.py
--------------------------------------------------------------------------------
/scale/data/test/dataset/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/test/dataset/json/__init__.py
--------------------------------------------------------------------------------
/scale/data/test/filter/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/test/filter/__init__.py
--------------------------------------------------------------------------------
/scale/data/test/filter/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/test/filter/json/__init__.py
--------------------------------------------------------------------------------
/scale/data/test/interface/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/test/interface/__init__.py
--------------------------------------------------------------------------------
/scale/data/test/interface/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/data/test/interface/json/__init__.py
--------------------------------------------------------------------------------
/scale/diagnostic/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'diagnostic.apps.DiagnosticConfig'
2 |
--------------------------------------------------------------------------------
/scale/diagnostic/apps.py:
--------------------------------------------------------------------------------
1 | """Defines the application configuration for the diagnostic application"""
2 | from __future__ import unicode_literals
3 |
4 | from django.apps import AppConfig
5 |
6 |
7 | class DiagnosticConfig(AppConfig):
8 | """Configuration for the diagnostic app
9 | """
10 |
11 | name = 'diagnostic'
12 | label = 'diagnostic'
13 | verbose_name = 'Diagnostic'
14 |
15 | def ready(self):
16 | """Registers the diagnostic errors"""
17 |
18 | from diagnostic.exceptions import TestException
19 | from error.exceptions import register_error
20 |
21 | register_error(TestException())
22 |
--------------------------------------------------------------------------------
/scale/diagnostic/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines the exceptions related to diagnostics"""
2 | from __future__ import unicode_literals
3 |
4 | from error.exceptions import ScaleError
5 |
6 |
7 | class TestException(ScaleError):
8 | """Error class indicating that a test error occurred
9 | """
10 |
11 | def __init__(self):
12 | """Constructor
13 | """
14 |
15 | super(TestException, self).__init__(11, 'test')
16 |
17 | def get_log_message(self):
18 | """See :meth:`error.exceptions.ScaleError.get_log_message`
19 | """
20 |
21 | return ''
22 |
--------------------------------------------------------------------------------
/scale/diagnostic/fixtures/diagnostic_errors.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "model": "error.Error",
4 | "pk": null,
5 | "fields": {
6 | "name": "test",
7 | "title": "Test Error",
8 | "description": "This is a test error, generated by a job helping to perform diagnostics on Scale.",
9 | "category": "SYSTEM",
10 | "is_builtin": true,
11 | "should_be_retried": false,
12 | "created": "2017-05-11T00:00:00.0Z",
13 | "last_modified": "2017-05-11T00:00:00.0Z"
14 | }
15 | }
16 | ]
--------------------------------------------------------------------------------
/scale/diagnostic/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/diagnostic/management/__init__.py
--------------------------------------------------------------------------------
/scale/diagnostic/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/diagnostic/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/diagnostic/management/commands/scale_hello.py:
--------------------------------------------------------------------------------
1 | """Defines the command line method for running the Scale Hello job"""
2 | from __future__ import unicode_literals
3 | from __future__ import print_function
4 |
5 | import sys
6 |
7 | from django.core.management.base import BaseCommand
8 |
9 |
10 | class Command(BaseCommand):
11 | """Command that executes the Scale Hello job
12 | """
13 |
14 | help = 'Prints out "Hello Scale!"'
15 |
16 | def handle(self, *args, **options):
17 | """See :meth:`django.core.management.base.BaseCommand.handle`.
18 | """
19 |
20 | print('Hello Scale! (stderr)', file=sys.stderr)
21 | print('Hello Scale! (stdout)', file=sys.stdout)
--------------------------------------------------------------------------------
/scale/diagnostic/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/diagnostic/test/__init__.py
--------------------------------------------------------------------------------
/scale/docs/_static/images/architecture/Scale_Architecture.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/docs/_static/images/architecture/Scale_Architecture.pptx
--------------------------------------------------------------------------------
/scale/docs/_static/images/architecture/overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/docs/_static/images/architecture/overview.png
--------------------------------------------------------------------------------
/scale/docs/_static/scale3-transparent-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/docs/_static/scale3-transparent-128.png
--------------------------------------------------------------------------------
/scale/docs/_static/style.css:
--------------------------------------------------------------------------------
1 | .wy-nav-content {
2 | max-width: none;
3 | }
4 |
5 | .wy-table-responsive table td, .wy-table-responsive table th {
6 | white-space: nowrap;
7 | }
8 |
9 | .wy-table-bordered-all, .rst-content table.docutils {
10 | width: 100%;
11 | }
12 |
13 | /* override table width restrictions */
14 | .wy-table-responsive table td, .wy-table-responsive table th {
15 | white-space: normal;
16 | }
17 |
18 | .wy-table-responsive {
19 | margin-bottom: 24px;
20 | max-width: 100%;
21 | overflow: visible;
22 | }
23 |
--------------------------------------------------------------------------------
/scale/docs/_templates/layout.html:
--------------------------------------------------------------------------------
1 | {% extends "!layout.html" %}
2 | {% block extrahead %}
3 |
4 | {% endblock %}
5 |
--------------------------------------------------------------------------------
/scale/docs/architecture/django/.gitignore:
--------------------------------------------------------------------------------
1 | code_docs/
2 |
--------------------------------------------------------------------------------
/scale/docs/architecture/index.rst:
--------------------------------------------------------------------------------
1 |
2 | .. _architecture:
3 |
4 | ========================================================================================================================
5 | Architecture
6 | ========================================================================================================================
7 |
8 | .. toctree::
9 | :maxdepth: 1
10 |
11 | overview
12 | jobs/index
13 | logs
14 | messaging
15 | port
16 | scan
17 | strike
18 | triggers
19 | workspaces
20 | django/index
21 |
--------------------------------------------------------------------------------
/scale/docs/architecture/jobs/index.rst:
--------------------------------------------------------------------------------
1 |
2 | .. _architecture_jobs:
3 |
4 | Jobs and Recipes
5 | ================
6 |
7 | Jobs represent the various algorithms or units of work that get executed in Scale. Recipes represent a graph/workflow of
8 | jobs that allow jobs to depend upon one another and for files produced by one job to be fed as input into another job.
9 |
10 | .. toctree::
11 | :maxdepth: 1
12 |
13 | batch_definition
14 | error_interface
15 | job_interface
16 | job_configuration
17 | job_data
18 | exe_configuration
19 | recipe_definition
20 | recipe_data
21 | resources
22 | seed
23 | task_results
24 |
--------------------------------------------------------------------------------
/scale/docs/cli/index.rst:
--------------------------------------------------------------------------------
1 |
2 | .. _cli:
3 |
4 | ###################
5 | Command Line Client
6 | ###################
7 |
8 | .. toctree::
9 | :maxdepth: 1
10 |
11 | overview
12 | getting_started
13 |
--------------------------------------------------------------------------------
/scale/docs/images/algorithm_integration/new_recipe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/docs/images/algorithm_integration/new_recipe.png
--------------------------------------------------------------------------------
/scale/docs/images/algorithm_integration/new_recipe_entry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/docs/images/algorithm_integration/new_recipe_entry.png
--------------------------------------------------------------------------------
/scale/docs/images/algorithm_integration/recipe_input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/docs/images/algorithm_integration/recipe_input.png
--------------------------------------------------------------------------------
/scale/docs/images/algorithm_integration/setting_up_trigger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/docs/images/algorithm_integration/setting_up_trigger.png
--------------------------------------------------------------------------------
/scale/docs/images/algorithm_integration/trigger_input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/docs/images/algorithm_integration/trigger_input.png
--------------------------------------------------------------------------------
/scale/docs/rest/v6/openapi.yml:
--------------------------------------------------------------------------------
1 | openapi: '3.0.0'
2 |
3 | info:
4 | title: Scale API
5 | description: Scale API Overview
6 | version: v6
7 | contact:
8 | name: "Scale Team"
9 | url: "gitter.com/ngageoint/scale"
10 | x-logo:
11 | url: "http://ngageoint.github.io/scale/images/scale3-transparent-128.png"
12 | altText: "Scale logo"
13 |
14 | servers:
15 | - url: http://scale.nga.gov/api/v6
16 |
17 |
--------------------------------------------------------------------------------
/scale/docs/wiki/scale.wiki/setup_wiki_git.sh:
--------------------------------------------------------------------------------
1 | git init &&
2 | git remote add origin https://github.com/ngageoint/scale.wiki.git
--------------------------------------------------------------------------------
/scale/error/__init__.py:
--------------------------------------------------------------------------------
1 | """The standard interface for errors in scale"""
2 | default_app_config = 'error.apps.ErrorConfig'
3 |
--------------------------------------------------------------------------------
/scale/error/apps.py:
--------------------------------------------------------------------------------
1 | """The scale error application"""
2 | from __future__ import unicode_literals
3 |
4 | from django.apps import AppConfig
5 |
6 |
7 | class ErrorConfig(AppConfig):
8 | """Configuration for the error app
9 | """
10 | name = 'error'
11 | label = 'error'
12 | verbose_name = 'Error'
13 |
14 | def ready(self):
15 | """Registers basic errors"""
16 | from error.exceptions import ScaleDatabaseError, ScaleIOError, ScaleOperationalError, register_error
17 |
18 | register_error(ScaleDatabaseError())
19 | register_error(ScaleIOError())
20 | register_error(ScaleOperationalError())
21 |
--------------------------------------------------------------------------------
/scale/error/migrations/0002_auto_20151217_1319.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('error', '0001_initial'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='error',
16 | name='description',
17 | field=models.CharField(max_length=250, null=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/error/migrations/0003_error_is_builtin.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('error', '0002_auto_20151217_1319'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='error',
16 | name='is_builtin',
17 | field=models.BooleanField(default=False, db_index=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/error/migrations/0004_error_should_be_retried.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('error', '0003_error_is_builtin'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='error',
16 | name='should_be_retried',
17 | field=models.BooleanField(default=False),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/error/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/error/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/error/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/error/urls.py:
--------------------------------------------------------------------------------
1 | """Defines the URLs for the RESTful recipe services"""
2 | from django.conf.urls import url
3 |
4 | import error.views
5 |
6 | urlpatterns = [
7 | url(r'^errors/$', error.views.ErrorsView.as_view(), name='errors_view'),
8 | url(r'^errors/(\d+)/$', error.views.ErrorDetailsView.as_view(), name='error_details_view'),
9 | ]
10 |
--------------------------------------------------------------------------------
/scale/ingest/__init__.py:
--------------------------------------------------------------------------------
1 | """This model handles the ingestion of new data into scale"""
2 | default_app_config = 'ingest.apps.IngestConfig'
3 |
--------------------------------------------------------------------------------
/scale/ingest/fixtures/ingest_errors.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "model": "error.Error",
4 | "pk": null,
5 | "fields": {
6 | "name": "ingest-timeout",
7 | "title": "Ingest Timeout",
8 | "description": "The ingest job exceeded its timeout threshold. This is likely due to excessive time uploading the source data to its workspace.",
9 | "category": "SYSTEM",
10 | "is_builtin": true,
11 | "should_be_retried": true,
12 | "created": "2017-01-06T00:00:00.0Z",
13 | "last_modified": "2017-01-06T00:00:00.0Z"
14 | }
15 | }
16 | ]
17 |
--------------------------------------------------------------------------------
/scale/ingest/handlers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/handlers/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/ingest_event_serializers.py:
--------------------------------------------------------------------------------
1 | """Defines the serializers for ingests"""
2 | import rest_framework.serializers as serializers
3 | from util.rest import ModelIdSerializer
4 |
5 | class IngestEventBaseSerializerV6(ModelIdSerializer):
6 | """Converts ingest event model fields to REST output"""
7 | type = serializers.CharField()
8 | occurred = serializers.DateTimeField()
9 |
10 | class IngestEventSerializerV6(IngestEventBaseSerializerV6):
11 | """Converts ingest event model fields to REST output"""
12 |
13 |
14 | class IngestEventDetailsSerializerV6(IngestEventBaseSerializerV6):
15 | """Converts ingest event model fields to REST output"""
16 | description = serializers.JSONField(default=dict)
--------------------------------------------------------------------------------
/scale/ingest/management/__init__.py:
--------------------------------------------------------------------------------
1 | """management for the ingest app"""
2 |
--------------------------------------------------------------------------------
/scale/ingest/management/commands/__init__.py:
--------------------------------------------------------------------------------
1 | """django commands for the ingest app"""
2 |
--------------------------------------------------------------------------------
/scale/ingest/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/messages/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/migrations/0002_auto_20160414_0937.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 | import django.db.models.deletion
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('ingest', '0001_initial'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='ingest',
17 | name='strike',
18 | field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, default=1, to='ingest.Strike'),
19 | preserve_default=False,
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/ingest/migrations/0005_auto_20160728_1243.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('ingest', '0004_auto_20160711_1058'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='ingest',
16 | name='bytes_transferred',
17 | field=models.BigIntegerField(null=True, blank=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/ingest/migrations/0008_auto_20170127_1332.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('ingest', '0007_auto_20170127_1327'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='ingest',
16 | name='source_file',
17 | field=models.ForeignKey(blank=True, to='storage.ScaleFile', null=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/ingest/migrations/0012_scan_file_count.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('ingest', '0011_auto_20170302_2130'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='scan',
16 | name='file_count',
17 | field=models.BigIntegerField(null=True, blank=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/ingest/migrations/0016_ingest_data_type_tags.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.12 on 2019-03-18 18:11
3 | from __future__ import unicode_literals
4 |
5 | import django.contrib.postgres.fields
6 | from django.db import migrations, models
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('ingest', '0015_ingestevent'),
13 | ]
14 |
15 | operations = [
16 | migrations.AddField(
17 | model_name='ingest',
18 | name='data_type_tags',
19 | field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=250), default=list, size=None),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/ingest/migrations/0018_remove_ingest_data_type.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.12 on 2019-03-18 19:04
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('ingest', '0017_populate_data_type_tags'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='ingest',
17 | name='data_type',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/ingest/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/scan/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/scan/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/scan/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/scan/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/scan/configuration/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with Scan configuration"""
2 | from util.exceptions import ValidationException
3 |
4 | class InvalidScanConfiguration(ValidationException):
5 | """Exception indicating that the provided Scan configuration was invalid"""
6 |
7 | def __init__(self, description):
8 | """Constructor
9 |
10 | :param description: The description of the validation error
11 | :type description: string
12 | """
13 |
14 | super(InvalidScanConfiguration, self).__init__('INVALID_SCAN_CONFIGURATION', description)
--------------------------------------------------------------------------------
/scale/ingest/scan/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/scan/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/scan/scanners/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/scan/scanners/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/strike/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/strike/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/strike/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/strike/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/strike/configuration/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with Strike configuration"""
2 | from util.exceptions import ValidationException
3 |
4 |
5 | class InvalidStrikeConfiguration(ValidationException):
6 | """Exception indicating that the provided strike configuration was invalid"""
7 |
8 | def __init__(self, description):
9 | """Constructor
10 |
11 | :param description: The description of the validation error
12 | :type description: string
13 | """
14 |
15 | super(InvalidStrikeConfiguration, self).__init__('INVALID_STRIKE_CONFIGURATION', description)
--------------------------------------------------------------------------------
/scale/ingest/strike/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/strike/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/strike/monitors/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/strike/monitors/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/ingest/test/messages/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/ingest/test/scan/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/test/scan/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/test/scan/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/test/scan/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/test/scan/scanners/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/test/scan/scanners/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/test/strike/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/test/strike/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/test/strike/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/test/strike/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/test/strike/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/test/strike/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/test/strike/monitors/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/test/strike/monitors/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/test/test_ingest_job.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | import django
4 | from django.test import TransactionTestCase
5 |
6 | import ingest.test.utils as ingest_test_utils
7 | import source.test.utils as source_test_utils
8 |
9 |
10 | class TestPerformIngest(TransactionTestCase):
11 | fixtures = ['ingest_job_types.json']
12 |
13 | def setUp(self):
14 | django.setup()
15 |
16 | self.ingest = ingest_test_utils.create_ingest(status='QUEUED')
17 | self.source_file = source_test_utils.create_source(workspace=self.ingest.workspace)
18 |
19 | def test_successful(self):
20 | """Tests processing a new ingest successfully."""
21 |
22 | pass
23 |
--------------------------------------------------------------------------------
/scale/ingest/test/triggers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/ingest/test/triggers/__init__.py
--------------------------------------------------------------------------------
/scale/ingest/triggers/__init__.py:
--------------------------------------------------------------------------------
1 | """Triggers (see trigger app) related to ingest"""
2 |
--------------------------------------------------------------------------------
/scale/job/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'job.apps.JobConfig'
2 |
--------------------------------------------------------------------------------
/scale/job/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/job/configuration/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/configuration/data/__init__.py
--------------------------------------------------------------------------------
/scale/job/configuration/interface/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/configuration/interface/__init__.py
--------------------------------------------------------------------------------
/scale/job/configuration/interface/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with a job interface"""
2 | from __future__ import unicode_literals
3 |
4 | from error.exceptions import ScaleError
5 |
6 |
7 | class InvalidInterfaceDefinition(Exception):
8 | """Exception indicating that the provided definition of a job interface was invalid
9 | """
10 | pass
11 |
12 |
13 | class InvalidEnvironment(Exception):
14 | """Exception indicating that the provided definition of a job interface was invalid
15 | """
16 | pass
17 |
--------------------------------------------------------------------------------
/scale/job/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/job/configuration/results/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/configuration/results/__init__.py
--------------------------------------------------------------------------------
/scale/job/configuration/results/results_manifest/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/configuration/results/results_manifest/__init__.py
--------------------------------------------------------------------------------
/scale/job/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/data/__init__.py
--------------------------------------------------------------------------------
/scale/job/data/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with job data"""
2 |
3 |
4 | class InvalidConnection(Exception):
5 | """Exception indicating that the provided job connection was invalid
6 | """
7 | pass
8 |
9 |
10 | class InvalidData(Exception):
11 | """Exception indicating that the provided job data was invalid
12 | """
13 | pass
14 |
15 |
16 | class StatusError(Exception):
17 | """Exception indicating that an operation cannot be completed due to the current job status.
18 | """
19 | pass
20 |
--------------------------------------------------------------------------------
/scale/job/error/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/error/__init__.py
--------------------------------------------------------------------------------
/scale/job/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with jobs and job types"""
2 | from __future__ import unicode_literals
3 |
4 |
5 | class InvalidJobField(Exception):
6 | """Exception indicating that a job type or job field was given an invalid value
7 | """
8 |
9 | pass
10 |
11 | class NonSeedJobType(Exception):
12 | """Exception indicating that a job type is not a seed job type
13 | """
14 | pass
15 |
16 | class InactiveJobType(Exception):
17 | """Exception indicating that a job type is inactive
18 | """
19 | pass
--------------------------------------------------------------------------------
/scale/job/execution/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/execution/__init__.py
--------------------------------------------------------------------------------
/scale/job/execution/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/execution/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/job/execution/configuration/docker_param.py:
--------------------------------------------------------------------------------
1 | """Defines a Docker parameter that is set for a task"""
2 | from __future__ import unicode_literals
3 |
4 |
5 | class DockerParameter(object):
6 | """Represents a Docker parameter set for a task
7 | """
8 |
9 | def __init__(self, flag, value):
10 | """Creates a Docker parameter
11 |
12 | :param flag: The Docker flag of the parameter
13 | :type flag: string
14 | :param value: The value being passed to the Docker parameter
15 | :type value: string
16 | """
17 |
18 | self.flag = flag
19 | self.value = value
20 |
--------------------------------------------------------------------------------
/scale/job/execution/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/execution/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/job/execution/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with job executions"""
2 | from __future__ import unicode_literals
3 |
4 |
5 | class InvalidTaskResults(Exception):
6 | """Exception indicating that the provided task results JSON was invalid
7 | """
8 |
9 | pass
10 |
--------------------------------------------------------------------------------
/scale/job/execution/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/execution/tasks/__init__.py
--------------------------------------------------------------------------------
/scale/job/execution/tasks/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/execution/tasks/json/__init__.py
--------------------------------------------------------------------------------
/scale/job/execution/tasks/json/results/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/execution/tasks/json/results/__init__.py
--------------------------------------------------------------------------------
/scale/job/handlers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/handlers/__init__.py
--------------------------------------------------------------------------------
/scale/job/handlers/inputs/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/handlers/inputs/__init__.py
--------------------------------------------------------------------------------
/scale/job/handlers/inputs/file.py:
--------------------------------------------------------------------------------
1 | """Defines the class for handling file inputs"""
2 | from __future__ import unicode_literals
3 |
4 | from job.handlers.inputs.base_input import Input
5 |
6 |
7 | class FileInput(Input):
8 | """Represents a file input
9 | """
10 |
11 | def __init__(self, input_name, required):
12 | """Constructor
13 |
14 | :param input_name: The name of the input
15 | :type input_name: str
16 | :param required: Whether the input is required
17 | :type required: bool
18 | """
19 |
20 | super(FileInput, self).__init__(input_name, 'file', required)
21 |
--------------------------------------------------------------------------------
/scale/job/handlers/inputs/files.py:
--------------------------------------------------------------------------------
1 | """Defines the class for handling files inputs"""
2 | from __future__ import unicode_literals
3 |
4 | from job.handlers.inputs.base_input import Input
5 |
6 |
7 | class FilesInput(Input):
8 | """Represents a multiple file input
9 | """
10 |
11 | def __init__(self, input_name, required):
12 | """Constructor
13 |
14 | :param input_name: The name of the input
15 | :type input_name: str
16 | :param required: Whether the input is required
17 | :type required: bool
18 | """
19 |
20 | super(FilesInput, self).__init__(input_name, 'files', required)
21 |
--------------------------------------------------------------------------------
/scale/job/handlers/inputs/property.py:
--------------------------------------------------------------------------------
1 | """Defines the class for handling property inputs"""
2 | from __future__ import unicode_literals
3 |
4 | from job.handlers.inputs.base_input import Input
5 |
6 |
7 | class PropertyInput(Input):
8 | """Represents a property input
9 | """
10 |
11 | def __init__(self, input_name, required):
12 | """Constructor
13 |
14 | :param input_name: The name of the input
15 | :type input_name: str
16 | :param required: Whether the input is required
17 | :type required: bool
18 | """
19 |
20 | super(PropertyInput, self).__init__(input_name, 'property', required)
21 |
--------------------------------------------------------------------------------
/scale/job/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/management/__init__.py
--------------------------------------------------------------------------------
/scale/job/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/job/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/messages/__init__.py
--------------------------------------------------------------------------------
/scale/job/migrations/0002_jobexecution_job_metrics.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 | import util.deprecation
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0001_initial'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='jobexecution',
17 | name='job_metrics',
18 | field=util.deprecation.JSONStringField(default={}, null=True, blank=True),
19 | preserve_default=True,
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/job/migrations/0007_job_job_type_rev.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 | import django.db.models.deletion
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0006_auto_20151106_1608'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='job',
17 | name='job_type_rev',
18 | field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, default=1, to='job.JobTypeRevision'),
19 | preserve_default=False,
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/job/migrations/0008_jobtype_trigger_rule.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 | import django.db.models.deletion
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('trigger', '0001_initial'),
12 | ('job', '0007_job_job_type_rev'),
13 | ]
14 |
15 | operations = [
16 | migrations.AddField(
17 | model_name='jobtype',
18 | name='trigger_rule',
19 | field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, blank=True, to='trigger.TriggerRule', null=True),
20 | preserve_default=True,
21 | ),
22 | ]
23 |
--------------------------------------------------------------------------------
/scale/job/migrations/0009_jobtype_revision_num.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('job', '0008_jobtype_trigger_rule'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='jobtype',
16 | name='revision_num',
17 | field=models.IntegerField(default=1),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/job/migrations/0011_jobtype_max_scheduled.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('job', '0010_auto_20151208_1503'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='jobtype',
16 | name='max_scheduled',
17 | field=models.IntegerField(null=True, blank=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/job/migrations/0018_auto_20160804_1402.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('job', '0017_auto_20160426_1556'),
11 | ]
12 |
13 | operations = [
14 | migrations.RemoveField(
15 | model_name='jobexecution',
16 | name='current_stderr_url',
17 | ),
18 | migrations.RemoveField(
19 | model_name='jobexecution',
20 | name='current_stdout_url',
21 | ),
22 | ]
23 |
--------------------------------------------------------------------------------
/scale/job/migrations/0022_jobtype_configuration.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 | import util.deprecation
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0021_auto_20161115_1524'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='jobtype',
17 | name='configuration',
18 | field=util.deprecation.JSONStringField(default={}, null=True, blank=True),
19 | preserve_default=True,
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/job/migrations/0023_jobtype_shared_mem_required.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('job', '0022_jobtype_configuration'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='jobtype',
16 | name='shared_mem_required',
17 | field=models.FloatField(default=0.0),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/job/migrations/0025_auto_20170504_1534.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11 on 2017-05-04 19:34
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0024_auto_20170412_1225'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='jobexecution',
17 | name='ended',
18 | field=models.DateTimeField(blank=True, db_index=True, null=True),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/job/migrations/0026_auto_20170510_1151.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11 on 2017-05-10 15:51
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0025_auto_20170504_1534'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='job',
17 | name='last_status_change',
18 | field=models.DateTimeField(blank=True, db_index=True, null=True),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/job/migrations/0030_remove_job_configuration.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11 on 2017-07-27 19:25
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0029_auto_20170707_1034'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='job',
17 | name='configuration',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/job/migrations/0032_job_node.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2017-09-26 19:29
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 | import django.db.models.deletion
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('node', '0004_auto_20170524_1639'),
13 | ('job', '0031_auto_20170822_1544'),
14 | ]
15 |
16 | operations = [
17 | migrations.AddField(
18 | model_name='job',
19 | name='node',
20 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='node.Node'),
21 | ),
22 | ]
23 |
--------------------------------------------------------------------------------
/scale/job/migrations/0042_auto_20180802_1830.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2018-08-02 18:30
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0041_jobtypetag'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterModelTable(
16 | name='jobtypetag',
17 | table='job_type_tag',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/job/migrations/0043_remove_jobtypetag_job_type.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2018-08-24 01:09
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0042_auto_20180802_1830'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='jobtypetag',
17 | name='job_type',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/job/migrations/0050_job_configuration.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.13 on 2018-11-15 22:41
3 | from __future__ import unicode_literals
4 |
5 | import django.contrib.postgres.fields.jsonb
6 | from django.db import migrations
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('job', '0049_auto_20180927_1531'),
13 | ]
14 |
15 | operations = [
16 | migrations.AddField(
17 | model_name='job',
18 | name='configuration',
19 | field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/job/migrations/0052_jobtype_is_published.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.16 on 2019-02-19 19:13
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0051_auto_20190211_1500'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='jobtype',
17 | name='is_published',
18 | field=models.BooleanField(default=False),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/job/migrations/0053_jobtype_unmet_resources.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.13 on 2019-02-24 15:14
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('job', '0052_jobtype_is_published'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='jobtype',
17 | name='unmet_resources',
18 | field=models.CharField(blank=True, max_length=250, null=True),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/job/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/job/seed/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/seed/__init__.py
--------------------------------------------------------------------------------
/scale/job/seed/results/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/seed/results/__init__.py
--------------------------------------------------------------------------------
/scale/job/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/tasks/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/job/test/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/configuration/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/configuration/data/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/configuration/interface/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/configuration/interface/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/configuration/results/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/configuration/results/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/error/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/error/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/execution/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/execution/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/execution/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/execution/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/execution/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/execution/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/execution/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/execution/tasks/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/execution/tasks/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/execution/tasks/json/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/execution/tasks/json/results/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/execution/tasks/json/results/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/management/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/messages/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/seed/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/seed/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/seed/results/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/seed/results/__init__.py
--------------------------------------------------------------------------------
/scale/job/test/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/job/test/tasks/__init__.py
--------------------------------------------------------------------------------
/scale/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | import os
3 | import sys
4 |
5 | if __name__ == "__main__":
6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "scale.local_settings")
7 |
8 | from django.core.management import execute_from_command_line
9 |
10 | execute_from_command_line(sys.argv)
11 |
--------------------------------------------------------------------------------
/scale/mesos_api/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'mesos_api.apps.MesosConfig'
2 |
--------------------------------------------------------------------------------
/scale/mesos_api/apps.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | from django.apps import AppConfig
4 |
5 |
6 | class MesosConfig(AppConfig):
7 | """Configuration for the mesos_api app
8 | """
9 |
10 | name = 'mesos_api'
11 | label = 'mesos_api'
12 | verbose_name = 'Mesos API'
13 |
--------------------------------------------------------------------------------
/scale/mesos_api/offers.py:
--------------------------------------------------------------------------------
1 | """Defines the functions for generating Mesos tasks"""
2 | from __future__ import unicode_literals
3 |
4 | import logging
5 |
6 | from mesos_api.utils import obj_from_json
7 |
8 | logger = logging.getLogger(__name__)
9 |
10 |
11 | def from_mesos_offer(mesos_offer):
12 | """Creates a dot accessible offer from input dict
13 |
14 | :param mesos_offer: Offer object to translate into dot accessible object
15 | :type mesos_offer: :class:`mesoshttp.offers.Offer`
16 | :returns: Dot accessible object
17 | :rtype: :class:`Namespace`
18 | """
19 |
20 | return obj_from_json(mesos_offer.get_offer())
--------------------------------------------------------------------------------
/scale/mesos_api/unversioned/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/mesos_api/unversioned/__init__.py
--------------------------------------------------------------------------------
/scale/messaging/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'messaging.apps.MessagingConfig'
2 |
--------------------------------------------------------------------------------
/scale/messaging/backends/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/scale/messaging/exceptions.py:
--------------------------------------------------------------------------------
1 | class InvalidCommandMessage(Exception):
2 | """Exception indicating an invalid message identified during message processing"""
3 |
4 | pass
5 |
6 |
7 | class CommandMessageExecuteFailure(Exception):
8 | """Exception indicating a failure signaled by execute function of CommandMessage"""
9 |
10 | pass
11 |
--------------------------------------------------------------------------------
/scale/messaging/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/messaging/management/__init__.py
--------------------------------------------------------------------------------
/scale/messaging/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/messaging/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/messaging/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/messaging/messages/__init__.py
--------------------------------------------------------------------------------
/scale/messaging/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/messaging/test/__init__.py
--------------------------------------------------------------------------------
/scale/metrics/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'metrics.apps.MetricsConfig'
2 |
--------------------------------------------------------------------------------
/scale/metrics/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/metrics/management/__init__.py
--------------------------------------------------------------------------------
/scale/metrics/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/metrics/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/metrics/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/metrics/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/metrics/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/metrics/test/__init__.py
--------------------------------------------------------------------------------
/scale/metrics/urls.py:
--------------------------------------------------------------------------------
1 | """Defines the URLs for the RESTful metrics services"""
2 | from django.conf.urls import url
3 |
4 | import metrics.views
5 |
6 | urlpatterns = [
7 | url(r'^metrics/$', metrics.views.MetricsView.as_view(), name='metrics_view'),
8 | url(r'^metrics/([\w-]+)/$', metrics.views.MetricDetailsView.as_view(), name='metric_details_view'),
9 | url(r'^metrics/([\w-]+)/plot-data/$', metrics.views.MetricPlotView.as_view(), name='metric_plot_view'),
10 | ]
11 |
--------------------------------------------------------------------------------
/scale/node/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'node.apps.NodeConfig'
2 |
--------------------------------------------------------------------------------
/scale/node/admin.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | from django.contrib import admin
4 | from node.models import Node
5 |
6 |
7 | class NodeAdmin(admin.ModelAdmin):
8 | list_display = ('hostname', 'is_paused', 'pause_reason', 'is_active', 'deprecated')
9 |
10 | admin.site.register(Node, NodeAdmin)
11 |
--------------------------------------------------------------------------------
/scale/node/apps.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | from django.apps import AppConfig
4 |
5 |
6 | class NodeConfig(AppConfig):
7 | """Configuration for the node app
8 | """
9 | name = 'node'
10 | label = 'node'
11 | verbose_name = 'Node'
12 |
--------------------------------------------------------------------------------
/scale/node/migrations/0002_node_pause_reason.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('node', '0001_initial'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='node',
16 | name='pause_reason',
17 | field=models.CharField(max_length=250, null=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/node/migrations/0003_node_is_paused_errors.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('node', '0002_node_pause_reason'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='node',
16 | name='is_paused_errors',
17 | field=models.BooleanField(default=False),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/node/migrations/0004_auto_20170524_1639.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11 on 2017-05-24 20:39
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('node', '0003_node_is_paused_errors'),
12 | ]
13 |
14 | operations = [
15 | migrations.RenameField(
16 | model_name='node',
17 | old_name='archived',
18 | new_name='deprecated',
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/node/migrations/0006_node_last_offer_received.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.17 on 2019-08-01 15:24
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('node', '0005_auto_20181220_2014'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='node',
17 | name='last_offer_received',
18 | field=models.DateTimeField(auto_now_add=True),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/node/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/node/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/node/resources/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/node/resources/__init__.py
--------------------------------------------------------------------------------
/scale/node/resources/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with resources"""
2 | from __future__ import unicode_literals
3 |
4 |
5 | class InvalidResources(Exception):
6 | """Exception indicating that the provided resources schema was invalid
7 | """
8 |
9 | pass
10 |
--------------------------------------------------------------------------------
/scale/node/resources/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/node/resources/json/__init__.py
--------------------------------------------------------------------------------
/scale/node/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/node/test/resources/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/node/test/resources/__init__.py
--------------------------------------------------------------------------------
/scale/node/test/resources/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/node/test/resources/json/__init__.py
--------------------------------------------------------------------------------
/scale/node/urls.py:
--------------------------------------------------------------------------------
1 | """Defines the URLs for the RESTful node services"""
2 | from __future__ import unicode_literals
3 |
4 | from django.conf.urls import url
5 |
6 | import node.views as views
7 |
8 | urlpatterns = [
9 | url(r'^nodes/$', views.NodesView.as_view(), name='nodes_view'),
10 | url(r'^nodes/(\d+)/$', views.NodeDetailsView.as_view(), name='node_details_view'),
11 | ]
12 |
--------------------------------------------------------------------------------
/scale/pip/docs.txt:
--------------------------------------------------------------------------------
1 | # This file lists all Python libraries required to build the docs on Linux
2 | # This also requires the production.txt requirements
3 | # Use command: pip install -r docs.txt
4 |
5 | # Doc build packages
6 | mock>=2.0.0,<2.1.0
7 | Sphinx>=1.5.3,<1.6.0
8 | sphinx_rtd_theme>=0.1.9,<1
9 |
10 | # Needed for new wiki docs
11 | mkdocs>0.16.0,<1.0.0
12 | mkdocs-material<=3.0.0
13 | pymdown-extensions<=6.0
14 |
--------------------------------------------------------------------------------
/scale/product/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'product.apps.ProductConfig'
2 |
--------------------------------------------------------------------------------
/scale/product/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/product/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/product/migrations/0005_auto_20170127_1344.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import connection, models, migrations
5 |
6 |
7 | def copy_product_file(apps, schema_editor):
8 | with connection.cursor() as cursor:
9 | cursor.execute('SELECT * INTO product_file_temp FROM product_file')
10 |
11 |
12 | class Migration(migrations.Migration):
13 |
14 | dependencies = [
15 | ('product', '0004_auto_20170127_1324'),
16 | ]
17 |
18 | operations = [
19 | migrations.RunPython(copy_product_file),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/product/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/product/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/product/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/product/test/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/product/test/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/queue/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'queue.apps.QueueConfig'
2 |
--------------------------------------------------------------------------------
/scale/queue/fixtures/queue_trigger_rules.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "model": "trigger.TriggerRule",
4 | "pk": null,
5 | "fields": {
6 | "type": "CLOCK",
7 | "name": "scale-job-load",
8 | "configuration": {
9 | "version": "1.0",
10 | "event_type": "JOB_LOAD",
11 | "schedule": "PT1H0M0S"
12 | },
13 | "is_active": true,
14 | "created": "2015-09-22T00:00:00.0Z",
15 | "archived": null,
16 | "last_modified": "2015-09-22T00:00:00.0Z"
17 | }
18 | }
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/queue/job_load.py:
--------------------------------------------------------------------------------
1 | """Defines the clock event processor for tracking historical job load."""
2 | from job.clock import ClockEventProcessor
3 | from queue.models import JobLoad
4 |
5 |
6 | class JobLoadProcessor(ClockEventProcessor):
7 | """This class queries and stores job load statistics for tracking and trending."""
8 |
9 | def process_event(self, event, last_event=None):
10 | """See :meth:`job.clock.ClockEventProcessor.process_event`.
11 |
12 | Calculates metrics for the job load over time.
13 | """
14 | JobLoad.objects.calculate()
15 |
--------------------------------------------------------------------------------
/scale/queue/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/queue/messages/__init__.py
--------------------------------------------------------------------------------
/scale/queue/migrations/0003_auto_20151023_1104.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 | import django.db.models.deletion
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('queue', '0002_jobload'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='jobload',
17 | name='job_type',
18 | field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, blank=True, to='job.JobType', null=True),
19 | preserve_default=True,
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/queue/migrations/0004_remove_queue_is_job_type_paused.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('queue', '0003_auto_20151023_1104'),
11 | ]
12 |
13 | operations = [
14 | migrations.RemoveField(
15 | model_name='queue',
16 | name='is_job_type_paused',
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/scale/queue/migrations/0006_auto_20160316_1625.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('queue', '0005_queue_node_required'),
11 | ]
12 |
13 | operations = [
14 | migrations.RemoveField(
15 | model_name='queuedepthbyjobtype',
16 | name='job_type',
17 | ),
18 | migrations.DeleteModel(
19 | name='QueueDepthByJobType',
20 | ),
21 | migrations.DeleteModel(
22 | name='QueueDepthByPriority',
23 | ),
24 | ]
25 |
--------------------------------------------------------------------------------
/scale/queue/migrations/0017_queue_docker_image.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.15 on 2018-08-30 17:49
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('queue', '0016_auto_20180123_2037'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='queue',
17 | name='docker_image',
18 | field=models.TextField(default=''),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/queue/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/queue/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/queue/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/queue/test/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/queue/test/messages/__init__.py
--------------------------------------------------------------------------------
/scale/queue/urls.py:
--------------------------------------------------------------------------------
1 | """Defines the URLs for the RESTful queue services"""
2 | from django.conf.urls import url
3 |
4 | import queue.views
5 |
6 | urlpatterns = [
7 | url(r'^load/$', queue.views.JobLoadView.as_view(), name='load_view'),
8 | url(r'^queue/status/$', queue.views.QueueStatusView.as_view(), name='queue_status_view'),
9 | ]
10 |
--------------------------------------------------------------------------------
/scale/recipe/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'recipe.apps.RecipeConfig'
2 |
--------------------------------------------------------------------------------
/scale/recipe/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/configuration/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/configuration/data/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/configuration/data/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with recipe data"""
2 |
3 |
4 | class InvalidRecipeConnection(Exception):
5 | """Exception indicating that the provided recipe connection was invalid
6 | """
7 |
8 | pass
9 |
10 |
11 | class InvalidRecipeData(Exception):
12 | """Exception indicating that the provided recipe data was invalid
13 | """
14 |
15 | pass
16 |
--------------------------------------------------------------------------------
/scale/recipe/configuration/definition/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/configuration/definition/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/configuration/definition/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with recipe definitions"""
2 |
3 |
4 | class InvalidDefinition(Exception):
5 | """Exception indicating that the provided recipe definition was invalid
6 | """
7 | pass
8 |
--------------------------------------------------------------------------------
/scale/recipe/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/definition/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/definition/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/definition/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with recipe definitions"""
2 | from util.exceptions import ValidationException
3 |
4 |
5 | class InvalidDefinition(ValidationException):
6 | """Exception indicating that the provided recipe definition was invalid"""
7 |
8 | def __init__(self, name, description):
9 | """Constructor
10 |
11 | :param name: The name of the validation error
12 | :type name: string
13 | :param description: The description of the validation error
14 | :type description: string
15 | """
16 |
17 | super(InvalidDefinition, self).__init__(name, description)
18 |
--------------------------------------------------------------------------------
/scale/recipe/definition/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/definition/json/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/diff/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/diff/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/diff/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with recipe graph diffs"""
2 |
3 |
4 | class InvalidDiff(Exception):
5 | """Exception indicating that the provided recipe graph diff was invalid"""
6 |
7 | pass
8 |
--------------------------------------------------------------------------------
/scale/recipe/diff/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/diff/json/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with recipes and recipe types"""
2 |
3 |
4 | class CreateRecipeError(Exception):
5 | """Exception indicating that a recipe cannot be created"""
6 | pass
7 |
8 |
9 | class ReprocessError(Exception):
10 | """Exception indicating that a reprocessing request cannot be completed"""
11 | pass
12 |
13 |
14 | class SupersedeError(Exception):
15 | """Exception indicating that a recipe cannot be superseded"""
16 | pass
17 |
18 | class InactiveRecipeType(Exception):
19 | """Exception indicating that a recipe type is inactive
20 | """
21 | pass
--------------------------------------------------------------------------------
/scale/recipe/handlers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/handlers/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/instance/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/instance/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/instance/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with recipe instances"""
2 |
3 |
4 | class InvalidRecipe(Exception):
5 | """Exception indicating that the provided recipe instance was invalid"""
6 |
7 | pass
8 |
--------------------------------------------------------------------------------
/scale/recipe/instance/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/instance/json/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/messages/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/migrations/0003_recipe_recipe_type_rev.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 | import django.db.models.deletion
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0002_auto_20151106_1409'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='recipe',
17 | name='recipe_type_rev',
18 | field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, default=1, to='recipe.RecipeTypeRevision'),
19 | preserve_default=False,
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0005_recipetype_revision_num.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('recipe', '0004_recipetype_trigger_rule'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='recipetype',
16 | name='revision_num',
17 | field=models.IntegerField(default=1),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0006_auto_20151125_1404.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('recipe', '0005_recipetype_revision_num'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='recipetype',
16 | name='title',
17 | field=models.CharField(default='', max_length=50, blank=True),
18 | preserve_default=False,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0007_auto_20160310_1318.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('recipe', '0006_auto_20151125_1404'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='recipe',
16 | name='last_modified',
17 | field=models.DateTimeField(auto_now=True), # Removed db_index to workaround a migration hashing bug
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0011_auto_20160330_1505.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('recipe', '0010_auto_20160330_1412'),
11 | ]
12 |
13 | operations = [
14 | migrations.RenameModel(
15 | old_name='recipejob',
16 | new_name='recipejobold',
17 | ),
18 | migrations.AlterModelTable(
19 | name='recipejobold',
20 | table='recipe_job_old',
21 | ),
22 | ]
23 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0014_auto_20160608_1402.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('recipe', '0013_auto_20160331_1127'),
11 | ]
12 |
13 | operations = [
14 | migrations.RemoveField(
15 | model_name='recipejobold',
16 | name='job',
17 | ),
18 | migrations.RemoveField(
19 | model_name='recipejobold',
20 | name='recipe',
21 | ),
22 | migrations.DeleteModel(
23 | name='recipejobold',
24 | ),
25 | ]
26 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0019_recipetype_is_system.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2017-11-13 21:34
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0018_recipefile_recipe_input'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='recipetype',
17 | name='is_system',
18 | field=models.BooleanField(default=False),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0020_auto_20180119_0055.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.1 on 2018-01-19 00:55
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0019_recipetype_is_system'),
12 | ]
13 |
14 | operations = [
15 | migrations.RenameField(
16 | model_name='recipe',
17 | old_name='data',
18 | new_name='input',
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0023_auto_20180523_1247.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2018-05-23 12:47
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0022_auto_20180307_1617'),
12 | ]
13 |
14 | operations = [
15 | migrations.RenameModel(
16 | old_name='RecipeJob',
17 | new_name='RecipeNode',
18 | ),
19 | migrations.AlterModelTable(
20 | name='recipenode',
21 | table='recipe_node',
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0026_auto_20180723_1914.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2018-07-23 19:14
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0025_auto_20180608_0114'),
12 | ]
13 |
14 | operations = [
15 | migrations.RenameField(
16 | model_name='recipeinputfile',
17 | old_name='scale_file',
18 | new_name='input_file',
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0027_auto_20181016_1344.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2018-10-16 13:44
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0027_auto_20181008_1756'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterUniqueTogether(
16 | name='recipetype',
17 | unique_together=set([]),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0029_auto_20181016_1431.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2018-10-16 14:31
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0028_auto_20181016_1349'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='recipetype',
17 | name='name',
18 | field=models.CharField(max_length=50, unique=True),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0033_auto_20181102_0307.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.13 on 2018-11-02 03:07
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0032_recipe_type_link_tables'),
12 | ]
13 |
14 | operations = [
15 | migrations.RenameField(
16 | model_name='recipetype',
17 | old_name='archived',
18 | new_name='deprecated',
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0034_recipe_configuration.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.13 on 2018-12-20 17:11
3 | from __future__ import unicode_literals
4 |
5 | import django.contrib.postgres.fields.jsonb
6 | from django.db import migrations
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('recipe', '0033_auto_20181102_0307'),
13 | ]
14 |
15 | operations = [
16 | migrations.AddField(
17 | model_name='recipe',
18 | name='configuration',
19 | field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0036_remove_recipetype_version.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.15 on 2019-03-25 19:54
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0035_auto_20190126_2340'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='recipetype',
17 | name='version',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/0037_remove_recipetype_trigger_rule.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.15 on 2019-04-15 14:28
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('recipe', '0036_remove_recipetype_version'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='recipetype',
17 | name='trigger_rule',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/recipe/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/seed/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/seed/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/recipe/test/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/configuration/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/configuration/data/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/configuration/definition/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/configuration/definition/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/definition/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/definition/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/definition/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/definition/json/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/diff/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/diff/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/diff/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/diff/json/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/handlers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/handlers/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/instance/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/instance/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/instance/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/instance/json/__init__.py
--------------------------------------------------------------------------------
/scale/recipe/test/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/recipe/test/messages/__init__.py
--------------------------------------------------------------------------------
/scale/scale/.gitignore:
--------------------------------------------------------------------------------
1 | local_settings.py
2 |
--------------------------------------------------------------------------------
/scale/scale/custom_logging.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 |
4 | class UserFilter(logging.Filter):
5 | def filter(self, record):
6 | return record.levelno in (logging.DEBUG, logging.INFO)
7 |
--------------------------------------------------------------------------------
/scale/scale/local_settings_DOCS.py:
--------------------------------------------------------------------------------
1 | # Settings file for use with readthedocs sphinx generation
2 |
3 | # Include all the default settings.
4 | from settings import *
5 |
6 | SECRET_KEY='15tryuv4t3hugbv7890aQ'
7 |
--------------------------------------------------------------------------------
/scale/scale/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for scale project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/
8 | """
9 |
10 | import os
11 |
12 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "scale.local_settings")
13 |
14 | from django.core.wsgi import get_wsgi_application
15 |
16 | _application = get_wsgi_application()
17 |
18 | def application(environ, start_response):
19 | environ['SCRIPT_NAME'] = '/api'
20 |
21 | return _application(environ, start_response)
22 |
--------------------------------------------------------------------------------
/scale/scheduler/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'scheduler.apps.SchedulerConfig'
2 |
--------------------------------------------------------------------------------
/scale/scheduler/admin.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | from django.contrib import admin
4 | from models import Scheduler
5 |
6 |
7 | class SchedulerAdmin(admin.ModelAdmin):
8 | list_display = ('is_paused', 'id')
9 |
10 | admin.site.register(Scheduler, SchedulerAdmin)
11 |
--------------------------------------------------------------------------------
/scale/scheduler/apps.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | from django.apps import AppConfig
4 |
5 |
6 | class SchedulerConfig(AppConfig):
7 | """Configuration for the scheduler app
8 | """
9 | name = 'scheduler'
10 | label = 'scheduler'
11 | verbose_name = 'Scheduler'
12 |
13 | def ready(self):
14 | """Registers components related to the scheduler"""
15 |
16 | # Register scheduler message types
17 | from messaging.messages.factory import add_message_type
18 | from scheduler.messages.restart_scheduler import RestartScheduler
19 |
20 | add_message_type(RestartScheduler)
21 |
--------------------------------------------------------------------------------
/scale/scheduler/cleanup/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/cleanup/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/database/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/database/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/dependencies/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/dependencies/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/fixtures/scheduler_errors.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "model": "error.Error",
4 | "pk": null,
5 | "fields": {
6 | "name": "scheduler-lost",
7 | "title": "Scheduler Restarted",
8 | "description": "The Scale scheduler was restarted, causing the job to stop running and fail.",
9 | "category": "SYSTEM",
10 | "is_builtin": true,
11 | "should_be_retried": true,
12 | "created": "2015-03-11T00:00:00.0Z",
13 | "last_modified": "2015-03-11T00:00:00.0Z"
14 | }
15 | }
16 | ]
--------------------------------------------------------------------------------
/scale/scheduler/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/management/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/messages/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0003_auto_20160201_0846.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('scheduler', '0002_auto_20151007_1352'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='scheduler',
16 | name='max_node_errors',
17 | field=models.FloatField(default=50.0),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0004_auto_20170209_1616.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('scheduler', '0003_auto_20160201_0846'),
11 | ]
12 |
13 | operations = [
14 | migrations.RemoveField(
15 | model_name='scheduler',
16 | name='max_node_errors',
17 | ),
18 | migrations.RemoveField(
19 | model_name='scheduler',
20 | name='node_error_period',
21 | ),
22 | ]
23 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0005_scheduler_queue_mode.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('scheduler', '0004_auto_20170209_1616'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='scheduler',
16 | name='queue_mode',
17 | field=models.CharField(default='FIFO', max_length=50, choices=[('FIFO', 'FIFO'), ('LIFO', 'LIFO')]),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0006_scheduler_status.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11 on 2017-04-24 18:29
3 | from __future__ import unicode_literals
4 |
5 | import django.contrib.postgres.fields.jsonb
6 | from django.db import migrations
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('scheduler', '0005_scheduler_queue_mode'),
13 | ]
14 |
15 | operations = [
16 | migrations.AddField(
17 | model_name='scheduler',
18 | name='status',
19 | field=django.contrib.postgres.fields.jsonb.JSONField(default=dict),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0007_scheduler_num_message_handlers.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2017-09-11 17:06
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('scheduler', '0006_scheduler_status'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='scheduler',
17 | name='num_message_handlers',
18 | field=models.IntegerField(default=2),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0008_auto_20171103_1334.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2017-11-03 13:34
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('scheduler', '0007_scheduler_num_message_handlers'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='scheduler',
17 | name='num_message_handlers',
18 | field=models.IntegerField(default=1),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0009_scheduler_debugging_level.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.8 on 2017-12-21 16:01
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('scheduler', '0008_auto_20171103_1334'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='scheduler',
17 | name='system_logging_level',
18 | field=models.CharField(default='INFO', max_length=10),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0010_scheduler_resource_level.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.12 on 2018-05-16 19:15
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('scheduler', '0009_scheduler_debugging_level'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='scheduler',
17 | name='resource_level',
18 | field=models.CharField(default='GOOD', max_length=10),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0011_auto_20180517_1559.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.12 on 2018-05-17 15:59
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('scheduler', '0010_scheduler_resource_level'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='scheduler',
17 | name='resource_level',
18 | field=models.CharField(choices=[('TOO HIGH', 'TOO HIGH'), ('TOO LOW', 'TOO LOW'), ('GOOD', 'GOOD')], default='GOOD', max_length=10),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0012_remove_scheduler_resource_level.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.13 on 2018-09-01 04:04
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('scheduler', '0011_auto_20180517_1559'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='scheduler',
17 | name='resource_level',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/0013_auto_20181220_2014.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.17 on 2018-12-20 20:14
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('scheduler', '0012_remove_scheduler_resource_level'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='scheduler',
17 | name='master_hostname',
18 | ),
19 | migrations.RemoveField(
20 | model_name='scheduler',
21 | name='master_port',
22 | ),
23 | ]
24 |
--------------------------------------------------------------------------------
/scale/scheduler/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/node/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/node/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/node/agent.py:
--------------------------------------------------------------------------------
1 | """Defines the class that represents an agent in the scheduler"""
2 | from __future__ import unicode_literals
3 |
4 |
5 | class Agent(object):
6 | """This class represents an agent available to Scale."""
7 |
8 | def __init__(self, agent_id, hostname):
9 | """Constructor
10 |
11 | :param agent_id: The agent ID
12 | :type agent_id: string
13 | :param hostname: The agent's host name
14 | :type hostname: string
15 | """
16 |
17 | self.agent_id = agent_id
18 | self.hostname = hostname
19 |
--------------------------------------------------------------------------------
/scale/scheduler/recon/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/recon/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/resources/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/resources/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/scheduling/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/scheduling/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/serializers.py:
--------------------------------------------------------------------------------
1 | """Defines the serializers for schedulers"""
2 | from __future__ import unicode_literals
3 |
4 | import rest_framework.serializers as serializers
5 |
6 | from scheduler.models import Scheduler
7 |
8 | class SchedulerSerializerV6(serializers.ModelSerializer):
9 | """V6 Serializer for the scheduler"""
10 |
11 | class Meta(object):
12 | """Meta class used to define what is serialized and how"""
13 | model = Scheduler
14 | fields = ('is_paused', 'num_message_handlers', 'system_logging_level', 'queue_mode')
--------------------------------------------------------------------------------
/scale/scheduler/sync/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/sync/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/task/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/task/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/tasks/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/tasks/services/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/tasks/services/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/tasks/services/messaging/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/tasks/services/messaging/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/scheduler/test/database/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/database/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/dependencies/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/dependencies/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/messages/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/node/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/node/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/resources/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/resources/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/scheduling/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/scheduling/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/sync/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/sync/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/sync/test_scheduler_manager.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | import django
4 | from django.test import TestCase
5 |
6 | from scheduler.manager import SchedulerManager
7 | from scheduler.models import Scheduler
8 |
9 |
10 | class TestSchedulerManager(TestCase):
11 |
12 | def setUp(self):
13 | django.setup()
14 |
15 | def test_successful_update(self):
16 | """Tests doing a successful database update"""
17 |
18 | manager = SchedulerManager()
19 | manager.sync_with_database()
20 |
--------------------------------------------------------------------------------
/scale/scheduler/test/sync/test_workspace_manager.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | import django
4 | from django.test import TestCase
5 |
6 | from scheduler.sync.workspace_manager import WorkspaceManager
7 |
8 |
9 | class TestWorkspaceManager(TestCase):
10 |
11 | def setUp(self):
12 | django.setup()
13 |
14 | def test_successful_update(self):
15 | """Tests doing a successful database update"""
16 |
17 | manager = WorkspaceManager()
18 | manager.sync_with_database()
19 |
--------------------------------------------------------------------------------
/scale/scheduler/test/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/tasks/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/tasks/services/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/tasks/services/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/test/tasks/services/messaging/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/test/tasks/services/messaging/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/threads/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/threads/__init__.py
--------------------------------------------------------------------------------
/scale/scheduler/urls.py:
--------------------------------------------------------------------------------
1 | """Defines the URLs for the RESTful node services"""
2 | from __future__ import unicode_literals
3 |
4 | from django.conf.urls import url
5 |
6 | import views
7 |
8 | urlpatterns = [
9 | url(r'^scheduler/$', views.SchedulerView.as_view(), name='scheduler_view'),
10 | url(r'^scheduler/queued-resources/$', views.QueuedResourcesView.as_view(), name='queued_resrouces_view'),
11 | url(r'^status/$', views.StatusView.as_view(), name='status_view'),
12 | url(r'^version/$', views.VersionView.as_view(), name='version_view'),
13 | ]
14 |
--------------------------------------------------------------------------------
/scale/scheduler/vault/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/scheduler/vault/__init__.py
--------------------------------------------------------------------------------
/scale/shared_resource/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'shared_resource.apps.SharedResourceConfig'
2 |
--------------------------------------------------------------------------------
/scale/shared_resource/apps.py:
--------------------------------------------------------------------------------
1 | """Configuration for Shared Resource App"""
2 | from __future__ import unicode_literals
3 |
4 | from django.apps import AppConfig
5 |
6 |
7 | class SharedResourceConfig(AppConfig):
8 | """Configuration for the shared resource app
9 | """
10 | name = 'shared_resource'
11 | label = 'shared_resource'
12 | verbose_name = 'Shared Resource'
13 |
--------------------------------------------------------------------------------
/scale/shared_resource/migrations/0002_auto_20170412_1225.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11 on 2017-04-12 12:25
3 | from __future__ import unicode_literals
4 |
5 | import django.contrib.postgres.fields.jsonb
6 | from django.db import migrations
7 |
8 |
9 | class Migration(migrations.Migration):
10 |
11 | dependencies = [
12 | ('shared_resource', '0001_initial'),
13 | ]
14 |
15 | operations = [
16 | migrations.AlterField(
17 | model_name='sharedresource',
18 | name='json_config',
19 | field=django.contrib.postgres.fields.jsonb.JSONField(default=dict),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/scale/shared_resource/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/shared_resource/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/source/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'source.apps.SourceConfig'
2 |
--------------------------------------------------------------------------------
/scale/source/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/source/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/source/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/source/messages/__init__.py
--------------------------------------------------------------------------------
/scale/source/migrations/0002_auto_20170127_1336.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import connection, models, migrations
5 |
6 |
7 | def copy_source_file(apps, schema_editor):
8 | with connection.cursor() as cursor:
9 | cursor.execute('SELECT * INTO source_file_temp FROM source_file')
10 |
11 |
12 | class Migration(migrations.Migration):
13 |
14 | dependencies = [
15 | ('source', '0001_initial'),
16 | ]
17 |
18 | operations = [
19 | migrations.RunPython(copy_source_file),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/source/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/source/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/source/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/source/test/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/source/test/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/source/test/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/source/test/messages/__init__.py
--------------------------------------------------------------------------------
/scale/storage/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'storage.apps.StorageConfig'
2 |
--------------------------------------------------------------------------------
/scale/storage/brokers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/brokers/__init__.py
--------------------------------------------------------------------------------
/scale/storage/brokers/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines the exceptions related to workspace brokers"""
2 |
3 | from storage.configuration.exceptions import InvalidWorkspaceConfiguration
4 |
5 |
6 | class InvalidBrokerConfiguration(InvalidWorkspaceConfiguration):
7 | """Exception indicating that a broker configuration was invalid
8 | """
9 |
10 | pass
11 |
--------------------------------------------------------------------------------
/scale/storage/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/storage/configuration/json/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/configuration/json/__init__.py
--------------------------------------------------------------------------------
/scale/storage/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/management/__init__.py
--------------------------------------------------------------------------------
/scale/storage/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/storage/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/messages/__init__.py
--------------------------------------------------------------------------------
/scale/storage/migrations/0002_workspace_is_move_enabled.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('storage', '0001_initial'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='workspace',
16 | name='is_move_enabled',
17 | field=models.BooleanField(default=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/storage/migrations/0003_auto_20161202_1621.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('storage', '0002_workspace_is_move_enabled'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='scalefile',
16 | name='data_ended',
17 | field=models.DateTimeField(db_index=True, null=True, blank=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/storage/migrations/0009_auto_20171002_1542.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.2 on 2017-10-02 15:42
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('storage', '0008_auto_20170609_1443'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='scalefile',
17 | name='created',
18 | field=models.DateTimeField(auto_now_add=True, db_index=True),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/storage/migrations/0010_auto_20180613_1947.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.12 on 2018-06-13 19:47
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('storage', '0009_auto_20171002_1542'),
12 | ]
13 |
14 | operations = [
15 | migrations.RenameField(
16 | model_name='scalefile',
17 | old_name='recipe_job',
18 | new_name='recipe_node',
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/storage/migrations/0014_purgeresults_force_stop_purge.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.15 on 2018-11-01 12:57
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('storage', '0013_purgeresults'),
12 | ]
13 |
14 | operations = [
15 | migrations.AddField(
16 | model_name='purgeresults',
17 | name='force_stop_purge',
18 | field=models.BooleanField(default=False),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/storage/migrations/0017_remove_scalefile_data_type.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.12 on 2019-03-18 19:04
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('storage', '0016_populate_data_type_tags'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='scalefile',
17 | name='data_type',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/storage/migrations/0018_remove_scalefile_is_operational.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.15 on 2019-03-01 14:44
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('storage', '0017_remove_scalefile_data_type'),
12 | ]
13 |
14 | operations = [
15 | migrations.RemoveField(
16 | model_name='scalefile',
17 | name='is_operational',
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/scale/storage/migrations/0019_optional_description.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Generated by Django 1.11.10 on 2019-07-11 18:09
3 | from __future__ import unicode_literals
4 |
5 | from django.db import migrations, models
6 |
7 |
8 | class Migration(migrations.Migration):
9 |
10 | dependencies = [
11 | ('storage', '0018_remove_scalefile_is_operational'),
12 | ]
13 |
14 | operations = [
15 | migrations.AlterField(
16 | model_name='workspace',
17 | name='description',
18 | field=models.CharField(blank=True, max_length=500, null=True),
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/storage/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/storage/settings.py:
--------------------------------------------------------------------------------
1 | """Defines all the custom settings used by this application."""
2 |
3 | from django.conf import settings
4 |
5 | # S3 file storage options
6 | S3_STORAGE_CLASS = getattr(settings, 'S3_STORAGE_CLASS', 'STANDARD') # (STANDARD, REDUCED_REDUNDANCY)
7 | S3_SERVER_SIDE_ENCRYPTION = getattr(settings, 'S3_SERVER_SIDE_ENCRYPTION', None) # (None, AES256)
8 |
9 | # Max number of retries for recoverable download errors
10 | S3_RETRY_COUNT = getattr(settings, 'S3_RETRY_COUNT', 3)
11 |
12 | # The delay between retry attempts
13 | S3_RETRY_DELAY = getattr(settings, 'S3_RETRY_DELAY', 60) # 1 minute
14 |
--------------------------------------------------------------------------------
/scale/storage/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/storage/test/brokers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/test/brokers/__init__.py
--------------------------------------------------------------------------------
/scale/storage/test/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/test/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/storage/test/fixtures/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/test/fixtures/__init__.py
--------------------------------------------------------------------------------
/scale/storage/test/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/test/management/__init__.py
--------------------------------------------------------------------------------
/scale/storage/test/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/test/management/commands/__init__.py
--------------------------------------------------------------------------------
/scale/storage/test/messages/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/storage/test/messages/__init__.py
--------------------------------------------------------------------------------
/scale/timeline/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/timeline/__init__.py
--------------------------------------------------------------------------------
/scale/timeline/apps.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.apps import AppConfig
5 |
6 |
7 | class TimelineConfig(AppConfig):
8 | name = 'timeline'
9 |
--------------------------------------------------------------------------------
/scale/timeline/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/timeline/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/timeline/models.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models
5 |
6 | # Create your models here.
7 |
--------------------------------------------------------------------------------
/scale/timeline/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/timeline/urls.py:
--------------------------------------------------------------------------------
1 | """Defines the URLs for the RESTful recipe services"""
2 | from django.conf.urls import url
3 |
4 | import timeline.views
5 |
6 | # Gantt Chart urls
7 | urlpatterns = [
8 | # Recipe type views
9 | url(r'^timeline/recipe-types/$', timeline.views.TimelineRecipeTypeView.as_view(), name='timeline_recipe_type_view'),
10 | url(r'^timeline/job-types/$', timeline.views.TimelineJobTypeView.as_view(), name='timeline_job_type_view'),
11 | ]
12 |
--------------------------------------------------------------------------------
/scale/trigger/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'trigger.apps.TriggerConfig'
2 |
--------------------------------------------------------------------------------
/scale/trigger/apps.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | from django.apps import AppConfig
4 |
5 |
6 | class TriggerConfig(AppConfig):
7 | """Configuration for the trigger app
8 | """
9 | name = 'trigger'
10 | label = 'trigger'
11 | verbose_name = 'Trigger'
12 |
--------------------------------------------------------------------------------
/scale/trigger/configuration/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/trigger/configuration/__init__.py
--------------------------------------------------------------------------------
/scale/trigger/configuration/exceptions.py:
--------------------------------------------------------------------------------
1 | """Defines exceptions that can occur when interacting with trigger rules"""
2 |
3 |
4 | class InvalidTriggerRule(Exception):
5 | """Exception indicating that the provided trigger rule configuration was invalid
6 | """
7 |
8 | pass
9 |
10 |
11 | class InvalidTriggerType(Exception):
12 | """Exception indicating that the provided trigger rule type was invalid
13 | """
14 |
15 | pass
16 |
17 | class InvalidTriggerMissingConfiguration(Exception):
18 | """Exception indicating that the provided trigger rule was missing an associated configuration
19 | """
20 |
21 | pass
22 |
--------------------------------------------------------------------------------
/scale/trigger/migrations/0002_auto_20151125_1438.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('trigger', '0001_initial'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='triggerrule',
16 | name='is_active',
17 | field=models.BooleanField(default=True, db_index=True),
18 | preserve_default=True,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/trigger/migrations/0004_auto_20151207_1215.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from __future__ import unicode_literals
3 |
4 | from django.db import models, migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('trigger', '0003_auto_20151202_1325'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='triggerrule',
16 | name='name',
17 | field=models.CharField(default='', max_length=50, blank=True),
18 | preserve_default=False,
19 | ),
20 | ]
21 |
--------------------------------------------------------------------------------
/scale/trigger/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/trigger/migrations/__init__.py
--------------------------------------------------------------------------------
/scale/trigger/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/trigger/test/__init__.py
--------------------------------------------------------------------------------
/scale/trigger/test/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/scale/util/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'util.apps.UtilConfig'
2 |
--------------------------------------------------------------------------------
/scale/util/apps.py:
--------------------------------------------------------------------------------
1 | """Defines the application configuration for the util application"""
2 | from __future__ import unicode_literals
3 |
4 | from django.apps import AppConfig
5 |
6 |
7 | class UtilConfig(AppConfig):
8 | """Configuration for the util app
9 | """
10 | name = 'util'
11 | label = 'util'
12 | verbose_name = 'Util'
13 |
--------------------------------------------------------------------------------
/scale/util/deprecation.py:
--------------------------------------------------------------------------------
1 | # Classes needed to shim migrations based on abandoned external packages
2 |
3 | from django.contrib.postgres.fields import JSONField
4 |
5 |
6 | class JSONStringField(JSONField):
7 | def db_type(self, connection):
8 | return 'json'
9 |
--------------------------------------------------------------------------------
/scale/util/environment.py:
--------------------------------------------------------------------------------
1 | def normalize_env_var_name(name):
2 | """Returns a normalized version of the given string name so it can be used as the name of an environment variable
3 |
4 | :param name: The string name to normalize
5 | :type name: string
6 | :returns: The normalized environment variable name
7 | :rtype: string
8 | """
9 |
10 | return name.replace('-', '_').upper()
--------------------------------------------------------------------------------
/scale/util/file_size.py:
--------------------------------------------------------------------------------
1 | """Defines a utility method for displaying file sizes"""
2 |
3 | SIZE_LABELS = ['bytes', 'KiB', 'MiB', 'GiB', 'TiB']
4 | MAX_LABEL_INDEX = len(SIZE_LABELS) - 1
5 |
6 |
7 | def file_size_to_string(file_size):
8 | """Returns the given file size as a human-readable string
9 |
10 | :param file_size: The file size
11 | :type file_size: long
12 | :returns: The human-readable string
13 | :rtype: string
14 | """
15 |
16 | label_index = 0
17 | factor = 1024.0
18 | while label_index < MAX_LABEL_INDEX and file_size > factor:
19 | file_size /= factor
20 | label_index += 1
21 | return '%.2f %s' % (file_size, SIZE_LABELS[label_index])
22 |
--------------------------------------------------------------------------------
/scale/util/os_helper.py:
--------------------------------------------------------------------------------
1 | """Helper methods for os operations"""
2 |
3 | import os, errno
4 |
5 | def makedirs(path, mode=0755):
6 | try:
7 | os.makedirs(path, mode)
8 | except OSError as e:
9 | if e.errno != errno.EEXIST:
10 | raise
--------------------------------------------------------------------------------
/scale/util/test/__init__.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | # Disable logging for unit tests
4 | logging.disable(logging.CRITICAL)
5 |
--------------------------------------------------------------------------------
/scale/vault/__init__.py:
--------------------------------------------------------------------------------
1 | default_app_config = 'vault.apps.VaultConfig'
2 |
--------------------------------------------------------------------------------
/scale/vault/apps.py:
--------------------------------------------------------------------------------
1 | from __future__ import unicode_literals
2 |
3 | from django.apps import AppConfig
4 |
5 |
6 | class VaultConfig(AppConfig):
7 | """
8 | Configuration for the vault app
9 | """
10 | name = 'vault'
11 | label = 'vault'
12 | verbose_name = 'Vault'
13 |
--------------------------------------------------------------------------------
/scale/vault/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/scale/vault/test/__init__.py
--------------------------------------------------------------------------------
/tests/postman/environment.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "f5eb4cac-e508-4815-8be6-e67ba7d86b62",
3 | "name": "AIS Public Omega",
4 | "values": [
5 | {
6 | "key": "SCALE_BASE",
7 | "value": "https://scale.omega.aisohio.net/api",
8 | "enabled": true
9 | },
10 | {
11 | "key": "SCALE_USERNAME",
12 | "value": "admin",
13 | "enabled": true
14 | },
15 | {
16 | "key": "SCALE_PASSWORD",
17 | "value": "admin",
18 | "enabled": true
19 | }
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/web-docs/css/bootstrap-overrides.css:
--------------------------------------------------------------------------------
1 | .navbar-brand img {
2 | width: 20px;
3 | float: left;
4 | vertical-align: middle;
5 | margin: 0 5px 0 0;
6 | }
7 |
8 | .jumbotron {
9 | background: url('../images/horizon-3.jpg') no-repeat 50% top scroll;
10 | background-size: 100%;
11 | background-color: #000;
12 | padding-top: 0;
13 | padding-bottom: 15px;
14 | min-height: 55vh;
15 | }
16 |
17 | .jumbotron h1 {
18 | color: #fff;
19 | text-shadow: 2px 2px 2px #000;
20 | margin-right: auto;
21 | margin-left: auto;
22 | max-width: 80%;
23 | }
24 |
25 | .panel-body {
26 | padding: 5px;
27 | }
28 |
--------------------------------------------------------------------------------
/web-docs/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/web-docs/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/web-docs/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/web-docs/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/web-docs/images/example-thumb-audio.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/example-thumb-audio.jpg
--------------------------------------------------------------------------------
/web-docs/images/example-thumb-hyperspectral.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/example-thumb-hyperspectral.jpg
--------------------------------------------------------------------------------
/web-docs/images/example-thumb-mri.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/example-thumb-mri.jpg
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart1a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart1a.jpg
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart1b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart1b.jpg
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart1c.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart1c.jpg
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart1d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart1d.jpg
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart1e.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart1e.jpg
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2a.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2b.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2c.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2d.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2e.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2f.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2g.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2g.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2h.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart2i.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart2i.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart3a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart3a.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart3b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart3b.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart3c.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart3c.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart3d.png
--------------------------------------------------------------------------------
/web-docs/images/gif-source/quickstart3e.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/gif-source/quickstart3e.png
--------------------------------------------------------------------------------
/web-docs/images/horizon-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/horizon-1.jpg
--------------------------------------------------------------------------------
/web-docs/images/horizon-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/horizon-2.jpg
--------------------------------------------------------------------------------
/web-docs/images/horizon-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/horizon-3.jpg
--------------------------------------------------------------------------------
/web-docs/images/quickstart1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/quickstart1.gif
--------------------------------------------------------------------------------
/web-docs/images/quickstart2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/quickstart2.gif
--------------------------------------------------------------------------------
/web-docs/images/quickstart3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/quickstart3.gif
--------------------------------------------------------------------------------
/web-docs/images/scale-dashboard.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/scale-dashboard.jpg
--------------------------------------------------------------------------------
/web-docs/images/scale-flow-ingest-detail.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/scale-flow-ingest-detail.jpg
--------------------------------------------------------------------------------
/web-docs/images/scale-flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/scale-flow.png
--------------------------------------------------------------------------------
/web-docs/images/scale3-transparent-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/scale3-transparent-128.png
--------------------------------------------------------------------------------
/web-docs/images/shutterstock_128679269.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/shutterstock_128679269.jpg
--------------------------------------------------------------------------------
/web-docs/images/tutorial-thumb-algorithm.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/tutorial-thumb-algorithm.jpg
--------------------------------------------------------------------------------
/web-docs/images/tutorial-thumb-quickstart.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/tutorial-thumb-quickstart.jpg
--------------------------------------------------------------------------------
/web-docs/images/tutorial-thumb-recipe.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/tutorial-thumb-recipe.jpg
--------------------------------------------------------------------------------
/web-docs/images/tutorial-thumb-walkthrough.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/images/tutorial-thumb-walkthrough.jpg
--------------------------------------------------------------------------------
/web-docs/javascripts/scale.fix.js:
--------------------------------------------------------------------------------
1 | fixScale = function(doc) {
2 |
3 | var addEvent = 'addEventListener',
4 | type = 'gesturestart',
5 | qsa = 'querySelectorAll',
6 | scales = [1, 1],
7 | meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
8 |
9 | function fix() {
10 | meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
11 | doc.removeEventListener(type, fix, true);
12 | }
13 |
14 | if ((meta = meta[meta.length - 1]) && addEvent in doc) {
15 | fix();
16 | scales = [.25, 1.6];
17 | doc[addEvent](type, fix, true);
18 | }
19 |
20 | };
--------------------------------------------------------------------------------
/web-docs/walkthrough/generate-pdf.sh:
--------------------------------------------------------------------------------
1 | echo Generating PDF...
2 | asciidoctor-pdf -a stylesdir=./styles -a stylesheet=walkthrough.css -D /documents/output index.adoc
3 |
4 | echo Rename output PDF...
5 | mv /documents/output/index.pdf /documents/output/scale-walkthrough.pdf
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/create-input-workspace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/create-input-workspace.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/create-job-type-search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/create-job-type-search.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/create-output-workspace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/create-output-workspace.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/job-type-configuration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/job-type-configuration.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/job-type-general-info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/job-type-general-info.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/output-file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/output-file.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/recipe-add-input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/recipe-add-input.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/recipe-add-job-type.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/recipe-add-job-type.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/recipe-file-inputs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/recipe-file-inputs.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/scale-process.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/scale-process.png
--------------------------------------------------------------------------------
/web-docs/walkthrough/images/strike-add-rule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ngageoint/scale/1b6a3b879ffe83e10d3b9d9074835a4c3bf476ee/web-docs/walkthrough/images/strike-add-rule.png
--------------------------------------------------------------------------------