diff --git a/.gitmodules b/.gitmodules index 454b1e12..63807fe8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "nodeodm/external/node-OpenDroneMap"] - path = nodeodm/external/node-OpenDroneMap - url = https://github.com/OpenDroneMap/node-OpenDroneMap +[submodule "nodeodm/external/NodeODM"] + path = nodeodm/external/NodeODM + url = https://github.com/OpenDroneMap/NodeODM diff --git a/Dockerfile b/Dockerfile index 2a74ac19..1e83164b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ RUN ln -s /webodm/nginx/crontab /etc/cron.d/nginx-cron && chmod 0644 /webodm/ngi RUN git submodule update --init -WORKDIR /webodm/nodeodm/external/node-OpenDroneMap +WORKDIR /webodm/nodeodm/external/NodeODM RUN npm install --quiet WORKDIR /webodm diff --git a/README.md b/README.md index b459f874..8e9a1e7b 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ You can also run WebODM from a Live USB/DVD. See [LiveODM](https://www.opendrone ### Add More Processing Nodes -WebODM can be linked to one or more processing nodes running [node-OpenDroneMap](https://github.com/OpenDroneMap/node-OpenDroneMap). The default configuration already includes a "node-odm-1" processing node which runs on the same machine as WebODM, just to help you get started. As you become more familiar with WebODM, you might want to install processing nodes on separate machines. +WebODM can be linked to one or more processing nodes running [NodeODM](https://github.com/OpenDroneMap/NodeODM). The default configuration already includes a "node-odm-1" processing node which runs on the same machine as WebODM, just to help you get started. As you become more familiar with WebODM, you might want to install processing nodes on separate machines. Adding more processing nodes will allow you to run multiple jobs in parallel. @@ -123,7 +123,7 @@ While starting WebODM you get: `'WaitNamedPipe','The system cannot find the file While Accessing the WebODM interface you get: `OperationalError at / could not translate host name “db” to address: Name or service not known` or `ProgrammingError at / relation “auth_user” does not exist` | Try restarting your computer, then type: `./webodm.sh restart` Task output or console shows one of the following: | Make sure that your Docker environment has enough RAM allocated: [MacOS Instructions](http://stackoverflow.com/a/39720010), [Windows Instructions](https://docs.docker.com/docker-for-windows/#advanced) After an update, you get: `django.contrib.auth.models.DoesNotExist: Permission matching query does not exist.` | Try to remove your WebODM folder and start from a fresh git clone -Task fails with `Process exited with code null`, no task console output - OR - console output shows `Illegal Instruction` - OR - console output shows `Child returned 132` | If the computer running node-opendronemap is using an old or 32bit CPU, you need to compile [OpenDroneMap](https://github.com/OpenDroneMap/OpenDroneMap) from sources and setup node-opendronemap natively. You cannot use docker. Docker images work with CPUs with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support or higher. +Task fails with `Process exited with code null`, no task console output - OR - console output shows `Illegal Instruction` - OR - console output shows `Child returned 132` | If the computer running NodeODM is using an old or 32bit CPU, you need to compile [OpenDroneMap](https://github.com/OpenDroneMap/OpenDroneMap) from sources and setup NodeODM natively. You cannot use docker. Docker images work with CPUs with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support or higher. On Windows, docker-compose fails with `Failed to execute the script docker-compose` | Make sure you have enabled VT-x virtualization in the BIOS Cannot access WebODM using Microsoft Edge on Windows 10 | Try to tweak your internet properties according to [these instructions](http://www.hanselman.com/blog/FixedMicrosoftEdgeCantSeeOrOpenVirtualBoxhostedLocalWebSites.aspx) Getting a `No space left on device` error, but hard drive has enough space left | Docker on Windows by default will allocate only 20GB of space to the default docker-machine. You need to increase that amount. See [this link](http://support.divio.com/local-development/docker/managing-disk-space-in-your-docker-vm) and [this link](https://www.howtogeek.com/124622/how-to-enlarge-a-virtual-machines-disk-in-virtualbox-or-vmware/) @@ -201,7 +201,7 @@ The [OpenDroneMap project](https://github.com/OpenDroneMap/) is composed of seve - [ODM](https://github.com/OpenDroneMap/ODM) is a command line toolkit that processes aerial images. Users comfortable with the command line are probably OK using this component alone. - [NodeODM](https://github.com/OpenDroneMap/NodeODM) is a lightweight interface and API (Application Program Interface) built directly on top of [ODM](https://github.com/OpenDroneMap/ODM). Users not comfortable with the command line can use this interface to process aerial images and developers can use the API to build applications. Features such as user authentication, map displays, etc. are not provided. -- [WebODM](https://github.com/OpenDroneMap/WebODM) adds more features such as user authentication, map displays, 3D displays, a higher level API and the ability to orchestrate multiple processing nodes (run jobs in parallel). Processing nodes are simply servers running [NodeODM](https://github.com/OpenDroneMap/node-OpenDroneMap). +- [WebODM](https://github.com/OpenDroneMap/WebODM) adds more features such as user authentication, map displays, 3D displays, a higher level API and the ability to orchestrate multiple processing nodes (run jobs in parallel). Processing nodes are simply servers running [NodeODM](https://github.com/OpenDroneMap/NodeODM). ![webodm](https://cloud.githubusercontent.com/assets/1951843/25567386/5aeec7aa-2dba-11e7-9169-aca97b70db79.png) @@ -281,7 +281,7 @@ WebODM is built with scalability and performance in mind. While the default setu ![Architecture](https://user-images.githubusercontent.com/1951843/36916884-3a269a7a-1e23-11e8-997a-a57cd6ca7950.png) A few things to note: - * We use Celery workers to do background tasks such as resizing images and processing task results, but we use an ad-hoc scheduling mechanism to communicate with node-OpenDroneMap (which processes the orthophotos, 3D models, etc.). The choice to use two separate systems for task scheduling is due to the flexibility that an ad-hoc mechanism gives us for certain operations (capture task output, persistent data and ability to restart tasks mid-way, communication via REST calls, etc.). + * We use Celery workers to do background tasks such as resizing images and processing task results, but we use an ad-hoc scheduling mechanism to communicate with NodeODM (which processes the orthophotos, 3D models, etc.). The choice to use two separate systems for task scheduling is due to the flexibility that an ad-hoc mechanism gives us for certain operations (capture task output, persistent data and ability to restart tasks mid-way, communication via REST calls, etc.). * If loaded on multiple machines, Celery workers should all share their `app/media` directory with the Django application (via network shares). You can manage workers via `./worker.sh` diff --git a/app/api/tasks.py b/app/api/tasks.py index 1ea458b3..9f1f4979 100644 --- a/app/api/tasks.py +++ b/app/api/tasks.py @@ -39,7 +39,7 @@ class TaskSerializer(serializers.ModelSerializer): TODO: this could be improved by returning an empty array if a task was created and purged by the processing node (which would require knowing how long a task is being kept - see https://github.com/OpenDroneMap/node-OpenDroneMap/issues/32 + see https://github.com/OpenDroneMap/NodeODM/issues/32 :return: array of valid rerun-from parameters """ if obj.processing_node is not None: diff --git a/app/templates/app/dashboard.html b/app/templates/app/dashboard.html index a07851dd..d30d6f9e 100644 --- a/app/templates/app/dashboard.html +++ b/app/templates/app/dashboard.html @@ -14,7 +14,7 @@ {% if no_processingnodes %}

{% trans 'Welcome! ☺' %}

{% trans 'Add a Processing Node' as add_processing_node %} - {% with nodeodm_link='node-OpenDroneMap' api_link='API' %} + {% with nodeodm_link='NodeODM' api_link='API' %}

{% blocktrans %} To get started, "{{ add_processing_node }}". A processing node is a computer running an instance of {{ nodeodm_link }} or some other software that implements this {{ api_link }}. diff --git a/app/tests/utils.py b/app/tests/utils.py index 80b3bb6e..c1e971a0 100644 --- a/app/tests/utils.py +++ b/app/tests/utils.py @@ -18,7 +18,7 @@ logger = logging.getLogger('app.logger') def start_processing_node(*args): current_dir = os.path.dirname(os.path.realpath(__file__)) node_odm = subprocess.Popen(['node', 'index.js', '--port', '11223', '--test'] + list(args), shell=False, - cwd=os.path.join(current_dir, "..", "..", "nodeodm", "external", "node-OpenDroneMap")) + cwd=os.path.join(current_dir, "..", "..", "nodeodm", "external", "NodeODM")) time.sleep(2) # Wait for the server to launch return node_odm diff --git a/docker-compose.nodeodm.yml b/docker-compose.nodeodm.yml index 8308c2ff..472e0a28 100644 --- a/docker-compose.nodeodm.yml +++ b/docker-compose.nodeodm.yml @@ -9,7 +9,7 @@ services: depends_on: - node-odm-1 node-odm-1: - image: opendronemap/node-opendronemap + image: opendronemap/nodeodm container_name: node-odm-1 ports: - "3000" diff --git a/nodeodm/api_client.py b/nodeodm/api_client.py index 5c3ecefc..2842c469 100644 --- a/nodeodm/api_client.py +++ b/nodeodm/api_client.py @@ -1,6 +1,6 @@ """ -An interface to node-OpenDroneMap's API -https://github.com/pierotofy/node-OpenDroneMap/blob/master/docs/index.adoc +An interface to NodeODM's API +https://github.com/pierotofy/NodeODM/blob/master/docs/index.adoc """ import requests import mimetypes diff --git a/nodeodm/external/NodeODM b/nodeodm/external/NodeODM new file mode 160000 index 00000000..b9b12251 --- /dev/null +++ b/nodeodm/external/NodeODM @@ -0,0 +1 @@ +Subproject commit b9b12251582bd0240103cb17d0d889f3927fdcb9 diff --git a/nodeodm/external/node-OpenDroneMap b/nodeodm/external/node-OpenDroneMap deleted file mode 160000 index 1c9e149a..00000000 --- a/nodeodm/external/node-OpenDroneMap +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1c9e149a7c32da438f7844b8cfb81bec74a050d4 diff --git a/nodeodm/models.py b/nodeodm/models.py index ff1b4709..89a11a96 100644 --- a/nodeodm/models.py +++ b/nodeodm/models.py @@ -189,7 +189,7 @@ class ProcessingNode(models.Model): def handle_generic_post_response(result): """ Handles a POST response that has either a "success" flag, or an error message. - This is a common response in node-OpenDroneMap POST calls. + This is a common response in NodeODM POST calls. :param result: result of API call :return: True on success, raises ProcessingException otherwise """ diff --git a/nodeodm/tests.py b/nodeodm/tests.py index b1ed34ed..de6d5afa 100644 --- a/nodeodm/tests.py +++ b/nodeodm/tests.py @@ -21,7 +21,7 @@ class TestClientApi(TestCase): @classmethod def setUpClass(cls): super(TestClientApi, cls).setUpClass() - cls.node_odm = subprocess.Popen(['node', 'index.js', '--port', '11223', '--test'], shell=False, cwd=path.join(current_dir, "external", "node-OpenDroneMap")) + cls.node_odm = subprocess.Popen(['node', 'index.js', '--port', '11223', '--test'], shell=False, cwd=path.join(current_dir, "external", "NodeODM")) time.sleep(2) # Wait for the server to launch @@ -191,7 +191,7 @@ class TestClientApi(TestCase): def test_token_auth(self): node_odm = subprocess.Popen( ['node', 'index.js', '--port', '11224', '--token', 'test_token', '--test'], shell=False, - cwd=path.join(current_dir, "external", "node-OpenDroneMap")) + cwd=path.join(current_dir, "external", "NodeODM")) time.sleep(2) def wait_for_status(api, uuid, status, num_retries=10, error_description="Failed to wait for status"): diff --git a/slate/source/includes/_fordevelopers.md b/slate/source/includes/_fordevelopers.md index 14a262a9..bf7650ef 100644 --- a/slate/source/includes/_fordevelopers.md +++ b/slate/source/includes/_fordevelopers.md @@ -51,7 +51,7 @@ Directories of interest are listed as follow: Directory | Description --------- | ----------- `/app` | Main application, includes the UI components, API, tests and backend logic. -`/nodeodm`| Application that bridges the communication between WebODM and [node-OpenDroneMap](https://github.com/OpenDroneMap/node-OpenDroneMap). Includes its own unit tests and models. +`/nodeodm`| Application that bridges the communication between WebODM and [NodeODM](https://github.com/OpenDroneMap/NodeODM). Includes its own unit tests and models. `/webodm` | Django's main project directory. Setting files are here. ### Frontend diff --git a/slate/source/includes/reference/_processingnode.md b/slate/source/includes/reference/_processingnode.md index 29bbbdab..7bb21c95 100644 --- a/slate/source/includes/reference/_processingnode.md +++ b/slate/source/includes/reference/_processingnode.md @@ -23,7 +23,7 @@ ``` Processing nodes are associated with zero or more tasks and -take care of processing input images. Processing nodes are computers or virtual machines running [node-OpenDroneMap](https://github.com/OpenDroneMap/node-OpenDroneMap/) or any other API compatible with it. +take care of processing input images. Processing nodes are computers or virtual machines running [NodeODM](https://github.com/OpenDroneMap/NodeODM) or any other API compatible with it. Field | Type | Description ----- | ---- | ----------- @@ -31,7 +31,7 @@ id | int | Unique Identifier online | bool | Whether the processing node could be reached in the last 5 minutes hostname | string | Hostname/IP address port | int | Port -api_version | string | Version of node-OpenDroneMap currently running +api_version | string | Version of NodeODM currently running last_refreshed | string | Date and time this node was last seen online. This value is typically refreshed every 15-30 seconds and is used to decide whether a node is offline or not queue_count | int | Number of [Task](#task) items currently being processed/queued on this node. available_options | JSON[] | JSON-encoded list of options that this node is capable of handling. See [Available Options](#available-options) for more information @@ -45,7 +45,7 @@ help | Description of the option name | Name that identifies the option. This is the value you pass in the `name` key/value pair when creating a set of options for a new [Task](#task) type | Possible values are `int`, `float`, `string`, `bool` value | Default value if the option is not specified -domain | Restriction of the range of values that this option allows. Examples are `float`, `negative integer`, `percent`, `float: 0 <= x <= 10`, etc. for all possible values, check [node-OpenDroneMap's odmOptions.js code](https://github.com/OpenDroneMap/node-OpenDroneMap/blob/master/libs/odmOptions.js#L135) +domain | Restriction of the range of values that this option allows. Examples are `float`, `negative integer`, `percent`, `float: 0 <= x <= 10`, etc. for all possible values, check [NodeODM's odmOptions.js code](https://github.com/OpenDroneMap/NodeODM/blob/master/libs/odmOptions.js#L135) ### Add a processing node @@ -128,5 +128,5 @@ Display the common options available among all online processing nodes. This is Use this list of options to check whether a particular option is supported by all online processing nodes. If you use the automatic processing node assignment feature for processing tasks, this is the list you want to display to the user for choosing the options to use during processing. -

+ diff --git a/slate/source/index.html.md b/slate/source/index.html.md index 8fc56208..e39befb6 100644 --- a/slate/source/index.html.md +++ b/slate/source/index.html.md @@ -6,8 +6,8 @@ language_tabs: toc_footers: - WebODM on GitHub - - OpenDroneMap on GitHub - - node-OpenDroneMap on GitHub + - ODM on GitHub + - NodeODM on GitHub search: true diff --git a/start.sh b/start.sh index a61e50c5..83861bd8 100755 --- a/start.sh +++ b/start.sh @@ -43,7 +43,7 @@ if [ "$1" = "--setup-devenv" ] || [ "$2" = "--setup-devenv" ]; then echo Setup npm dependencies... npm install - cd nodeodm/external/node-OpenDroneMap + cd nodeodm/external/NodeODM npm install cd /webodm diff --git a/webodm.sh b/webodm.sh index 3b6289a0..6c02d70f 100755 --- a/webodm.sh +++ b/webodm.sh @@ -248,7 +248,7 @@ rebuild(){ run "docker-compose down --remove-orphans" plugin_cleanup run "rm -fr node_modules/ || sudo rm -fr node_modules/" - run "rm -fr nodeodm/external/node-OpenDroneMap || sudo rm -fr nodeodm/external/node-OpenDroneMap" + run "rm -fr nodeodm/external/NodeODM || sudo rm -fr nodeodm/external/NodeODM" run "docker-compose -f docker-compose.yml -f docker-compose.build.yml build --no-cache" #run "docker images --no-trunc -aqf \"dangling=true\" | xargs docker rmi" echo -e "\033[1mDone!\033[0m You can now start WebODM by running $0 start" @@ -371,7 +371,7 @@ elif [[ $1 = "rebuild" ]]; then elif [[ $1 = "update" ]]; then echo "Updating WebODM..." run "git pull origin master" - run "docker pull opendronemap/node-opendronemap" + run "docker pull opendronemap/nodeodm" run "docker pull opendronemap/webodm_db" run "docker pull opendronemap/webodm_webapp" run "docker-compose down --remove-orphans"