# GeoModelTaskServer **Repository Path**: geomodeling/GeoModelTaskServer ## Basic Information - **Project Name**: GeoModelTaskServer - **Description**: Task server for geographical modeling, including master server and task IO server. - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-12-23 - **Last Updated**: 2025-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GeoModelTaskServer [![Travis (.org)](doc/OpenGMS.svg)](http://geomodeling.njnu.edu.cn/) #### Introduction Task server for geographical modeling, including Master server and Task IO server. 1. Master server is the task server which has many children computing nodes for sharing several same model services. 2. Task IO server is a sever which is used to receive and dispatch tasks for model users and model computer. #### Framework ##### Overview ###### Local network version : ![Overview_1](doc/Local_network_version_framework.png "Overview_1") ###### Internet version : ![Overview_2](doc/Internet_version_framework.png "Overview_2") ##### Database table `server` : for geo-service container | Field | Type | Introduction | | ----- |----- | ------------ | | _id | ObjectID | OID for server | | s_services | Array | Service 'PID' in geo-service container | | s_ip | String | Geo-service container IP address | | s_mac | String | MAC address in server | | s_port | Int | Port for server | | s_type | Int | Type of server: 1 - Local network; 2 - Internet | | s_status | Boolean | Status of server (Internet only): `true`: online, `false`: offline | | s_hardware | Object | hardware of server | | s_software | Object | software of server | | s_dynamic | Object | Current status of server | table `task` : for computing task record | Field | Type | Introduction | | ----- |----- | ------------ | | _id | ObjectID | OID for task | | t_inputs | Array | input data for task computing `see Note 1` | | t_outputs | Array | output data for task computing `see Note 1` | | t_user | String | Task uploader | | t_status | String | Task status, including `Inited`, `Started`, `Finished` and `Error` | | t_server | String | Task receiver (a server) | | t_msrid | String | Task record id in target server | | t_type | Int | Task type, 1 - Local network; 2 - Internet | | t_note | String | Task record id in target server | | t_datetime | Date | Task starting datetime | | t_pid | String | PID of model service | **Note 1** Array data paradigm ```json { "StateName": "RUNSTATE", "Event": "LOADDATASET", "Url": "http://127.0.0.1:8062/data/5c49a1e6b4941b0a5023f3ae", "Tag": "FDSDemo" } ``` table `dataexserver` : for data exchange server | Field | Type | Introduction | | ----- |----- | ------------ | | _id | ObjectID | OID for data exchange server | | ds_ip | String | IP for data exchange server | | ds_port | Int | Port for data exchange server | ##### Function logic ###### Container register : Local network ![ServerRegister1](doc/Service_container_register.png "ServerRegister1") ###### Container register : Internet ![ServerRegister2](doc/Service_container_register2.png "ServerRegister2") ###### Task subscription ![TaskSubscription2](doc/Task_subscription.png "TaskSubscription2") ##### API ###### _Data Exchange Server Register_ * URL : _/dxserver_ * Method : POST * Form : ```json { "port": 8062 // Port } ``` * Response : ```json { "result": "suc", "code": 1, "message": "", "data": "" } ``` ###### _Model Service Container Register_ * URL : _/server_ * Method : POST * Form : ```json { "mac": "00-01-6C-06-A6-29", // MAC address "port": 8060 // Port } ``` * Response : ```json { "result": "suc", "code": 1, "message": "", "data": "" } ``` ###### _Model Service Check_ * URL : _/server?pid=`PID`_ * Method : GET * Response : ```json { "result": "suc", "code": 1, "message": "", "data": "" } ``` If model service existing, the `result` is `suc` and `code` is `1`. ###### _Task Subscription_ * URL : _/task_ * Method : POST * Form : ```json { "inputs": [], // input data configration "username": "[Unknown]", // usrname "pid": "15ea8a5740fdcfa951eea30579a33c4d" // PID of model service } ``` Each item in `inputs` see table `task`, note 1 * Response : ```json { "result": "suc", "code": 1, "message": "", "data": "" } ``` If model service existing, the `result` is `suc` and `code` is `1`. #### Install Construction ... #### Usage All the functions can be invoked by URL, but we recommend do it by SDK. ##### Task Usage Workflow The usage workflow of task shows in the picture below, orange step means it can be used by URL, blue means it can be used by SDK API, and green means both: ![Workflow](doc/workflowDoc.png "workflow") The workflow consists of following steps: **Check model service** Check model service existing by model service `PID` _(Model Service Package ID)_. See [ModelServiceAPI](#/_Model Service Check_) **Create task** Create a task to run. This task just build in local, and it would request the server. SDK API provides an interface to organize it. **Get data exchange server** Get an available data exchange server from task server. See [GeoDataExchangeServer](https://gitee.com/geomodeling/GeoDataExchangeServer). **Upload data** Updata data exchange to data exchange server. See [GeoDataExchangeServer](https://gitee.com/geomodeling/GeoDataExchangeServer). **Configure data** Configure data with target model service by `StateName` and `Event`. The data should be organized by `Array`, and each item referring to Database, table `task`, note 1. **Subscribe task** Subscribe a task in task server. API see `Task Subscription` **Check status** Check the task status. * `Inited`: The task has inited but not started. * `Started`: The task has been invoked. * `Finished`: The task has been finished and user can download the data. * `Error`: Some error happened in task running. **Download data** Download data when it is finished. #### Contributors ##### Founder Min Chen () Yongning Wen () Songshan Yue () Fengyuan Zhang () ##### Coder Fengyuan Zhang () Ming Wang () All codes are used in [OpenGMS](http://geomodeling.njnu.edu.cn/) platform