https://github.com/52north/swe-ingestion-service
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.1%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: 52North
- License: gpl-2.0
- Language: Java
- Default Branch: dev
- Size: 33.1 MB
Statistics
- Stars: 0
- Watchers: 13
- Forks: 2
- Open Issues: 19
- Releases: 0
Metadata Files
README.md
ARCHIVED
This project is no longer maintained and will not receive any further updates. If you plan to continue using it, please be aware that future security issues will not be addressed.
SWE-Ingestion-Service
The SensorWebEnabled-Ingestion-Service is an easy to configure and easy to deploy Data Flow Web application. It utilizes the Spring Cloud DataFlow Server technology and makes use of the Source-Processor-Sink pipelines stream approach.
Libraries and Licenses.
Third party libraries and licenses
|Library|License|Link/Source| |:----:|:----:|:----:| |Spring-framework|Apache License Version 2.0|https://github.com/spring-projects/spring-framework/blob/master/src/docs/dist/license.txt|
SWE-Ingestion-Service
|Library|License|Link/Source| |:----:|:----:|:-----:| |SWE-Ingestion-Service|GNU GENERAL PUBLIC LICENSE 2.0|https://github.com/52North/SWE-Ingestion-Service/blob/dev/LICENSE|
Installation
- Clone the repository:
git clone https://github.com/52north/SWE-Ingestion-Service. - Change into new directoy:
cd SWE-Ingestion-Service. - Build the project:
mvn clean install.
How to Run
- Execute
docker-compose --file etc/docker-compose.yml up.
Creating and starting a Stream:
Create a Stream: Send an aggregateProcess to the CnCService via a POST request (see API section for detailed description). On success, your response payload contains name, status, and definition of the created stream, such as:
{ "name": "sb68a63d8-cc63-4ce3-9212-09b7a1f47740", "status": "undeployed", "definition": "mqtt-source-rabbit --url=mqtt://mosca --topics=spiddal-fluorometer | csv-processor | db-sink" }The"name"-field value contains thestreamIdof the created stream. Use this value in order to start the streaming process of the stream as described in the next step.Deploy/Start (or Undeploy/Pause) the stream: Send a PUT request to the CnCService at the resource of the stream (see API section for detailed description), e.g.: /cnc/api/streams/sb68a63d8-cc63-4ce3-9212-09b7a1f47740
with the status "deployed" (or "undeployed") to start (or pause) the stream process, e.g.:
{ "status": "deployed" }On success, the response status code is 204 -no contentand the stream is running.
API:
general:
- GET http://localhost:8082/cnc/api with
Acceptheaderapplication/json- gets a list of resources, i.e.:json { "resources": [ { "name": "sources", "decription": "List of registered sources.", "href": "http://cnc:8082/cnc/api/sources" }, { "name": "processors", "decription": "List of registered processors.", "href": "http://cnc:8082/cnc/api/processors" }, { "name": "sinks", "decription": "List of registered sinks.", "href": "http://cnc:8082/cnc/api/sinks" }, { "name": "streams", "decription": "List of registered streams.", "href": "http://cnc:8082/cnc/api/streams" } ] }
Sources:
- GET http://localhost:8082/cnc/api/sources with
Acceptheader "application/json- gets all registered sources, e.g.:json { "sources": [ { "name": "mqtt-source-rabbit", "options": [ { "name": "qos", "type": "java.lang.Integer[]", "description": "the qos; a single value for all topics or a comma-delimited list to match the topics", "defaultValue": "" }, { "name": "binary", "type": "java.lang.Boolean", "description": "true to leave the payload as bytes", "defaultValue": "false" }, { "name": "charset", "type": "java.lang.String", "description": "the charset used to convert bytes to String (when binary is false)", "defaultValue": "UTF-8" }, { "name": "clean-session", "type": "java.lang.Boolean", "description": "whether the client and server should remember state across restarts and reconnects", "defaultValue": "true" }, { "name": "persistence-directory", "type": "java.lang.String", "description": "Persistence directory", "defaultValue": "/tmp/paho" }, { "name": "client-id", "type": "java.lang.String", "description": "identifies the client", "defaultValue": "stream.client.id.source" }, { "name": "keep-alive-interval", "type": "java.lang.Integer", "description": "the ping interval in seconds", "defaultValue": "60" }, { "name": "url", "type": "java.lang.String[]", "description": "location of the mqtt broker(s) (comma-delimited list)", "defaultValue": "" }, { "name": "persistence", "type": "java.lang.String", "description": "'memory' or 'file'", "defaultValue": "memory" }, { "name": "username", "type": "java.lang.String", "description": "the username to use when connecting to the broker", "defaultValue": "guest" }, { "name": "password", "type": "java.lang.String", "description": "the password to use when connecting to the broker", "defaultValue": "guest" }, { "name": "connection-timeout", "type": "java.lang.Integer", "description": "the connection timeout in seconds", "defaultValue": "30" }, { "name": "topics", "type": "java.lang.String[]", "description": "the topic(s) (comma-delimited) to which the source will subscribe", "defaultValue": "" } ] } ] }`
Processors:
- GET http://localhost:8082/cnc/api/processors with
Acceptheaderapplication/json- gets all registered processors, e.g.:json { "processors": [ { "name": "csv-processor", "options": [ { "name": "offering", "type": "java.lang.String", "description": "offering field desc", "defaultValue": "offering-default-value" }, { "name": "sensor", "type": "java.lang.String", "description": "sensor field desc", "defaultValue": "sensor-default-value" }, { "name": "sensormlurl", "type": "java.lang.String", "description": "sensormlurl field desc", "defaultValue": "http://example.com/process-description.xml" } ] } ] }
Sinks:
- GET http://localhost:8082/cnc/api/sinks with
Acceptheaderapplication/json- gets all registered sinks, e.g.:json { "sinks": [ { "name": "db-sink", "options": [ { "name": "offering", "type": "java.lang.String", "description": "offering field desc", "defaultValue": "offering-default-value" }, { "name": "sensor", "type": "java.lang.String", "description": "sensor field desc", "defaultValue": "sensor-default-value" }, { "name": "sensormlurl", "type": "java.lang.String", "description": "sensormlurl field desc", "defaultValue": "http://example.com/process-description.xml" }, { "name": "password", "type": "java.lang.String", "description": "Login password of the database.", "defaultValue": "null" }, { "name": "username", "type": "java.lang.String", "description": "Login username of the database.", "defaultValue": "null" }, { "name": "url", "type": "java.lang.String", "description": "JDBC URL of the database.", "defaultValue": "null" } ] }, { "name": "log-sink", "options": [] } ] }
Streams:
GET http://localhost:8082/cnc/api/streams with
Acceptheaderapplication/json- gets all registered streams, e.g.:json { "streams": [ { "name": "s27219dc2-a962-4566-85e9-fc24f0ef8aef", "status": "deployed", "definition": "mqtt-source-rabbit --url=mqtt://mosca --topics=airmar-rinville-1 | csv-processor --sensormlurl=http://cnc:8082/cnc/api/streams/s27219dc2-a962-4566-85e9-fc24f0ef8aef --offering=AIRMAR-RINVILLE-2/observations --sensor=AIRMAR-RINVILLE-2 | db-sink --sensormlurl=http://cnc:8082/cnc/api/streams/s27219dc2-a962-4566-85e9-fc24f0ef8aef --offering=AIRMAR-RINVILLE-2/observations --sensor=AIRMAR-RINVILLE-2 --url=jdbc:postgresql://database:5432/sos --username=postgres --password=****** " }, { "name": "s8e72442f-9102-4f1b-a3cf-367053765e92", "status": "deployed", "definition": "mqtt-source-rabbit --url=mqtt://mosca --topics=airmar-rinville-1-generated | csv-processor --sensormlurl=http://cnc:8082/cnc/api/streams/s8e72442f-9102-4f1b-a3cf-367053765e92 --offering=AIRMAR-RINVILLE-1/observations --sensor=AIRMAR-RINVILLE-1 | db-sink --sensormlurl=http://cnc:8082/cnc/api/streams/s8e72442f-9102-4f1b-a3cf-367053765e92 --offering=AIRMAR-RINVILLE-1/observations --sensor=AIRMAR-RINVILLE-1 --url=jdbc:postgresql://database:5432/sos --username=postgres --password=****** " } ] }GET http://localhost:8082/cnc/api/streams/{streamName} with
Acceptheaderapplication/json- gets the registered stream with namestreamName, e.g.:json { "name": "s27219dc2-a962-4566-85e9-fc24f0ef8aef", "status": "deployed", "definition": "mqtt-source-rabbit --url=mqtt://mosca --topics=airmar-rinville-1 | csv-processor --sensormlurl=http://cnc:8082/cnc/api/streams/s27219dc2-a962-4566-85e9-fc24f0ef8aef --offering=AIRMAR-RINVILLE-2/observations --sensor=AIRMAR-RINVILLE-2 | db-sink --sensormlurl=http://cnc:8082/cnc/api/streams/s27219dc2-a962-4566-85e9-fc24f0ef8aef --offering=AIRMAR-RINVILLE-2/observations --sensor=AIRMAR-RINVILLE-2 --url=jdbc:postgresql://database:5432/sos --username=postgres --password=****** " }possible Responses:- 200 - OK
- 404 - NOT FOUND: The Stream with name
streamNameis not found.
GET http://localhost:8082/cnc/api/streams/{streamName}
Acceptheaderapplication/xml- gets the sensorml processDescription of the registered stream with namestreamName, e.g.:Respone example (linked to prevent duplicate content)
possible Responses:
- 200 - OK
- 404 - NOT FOUND: "Stream with name
streamNameis not found." / "sensorML process description for streamstreamNamenot found."
POST http://localhost:8082/cnc/api/streams with
Content-Typeheaderapplication/xmland request body containing aAggregateProcessdescription creates a new undeployed stream.RequestBody payload example (linked to prevent duplicate content)
possible Responses:
- 201 - Created with json response of the created Stream, e.g.
json { "name": "sb68a63d8-cc63-4ce3-9212-09b7a1f47740", "status": "undeployed", "definition": "mqtt-source-rabbit --url=mqtt://mosca --topics=spiddal-fluorometer | csv-processor | db-sink" } - 400 - BAD REQUEST: "swe:Text definition
optionUrlrequires a hashtag ( # ) option." - 400 - BAD REQUEST: "Option
appOptionNameis not supported by sourcesourceName." - 404 - NOT FOUND: "No supported Source found for DataRecord definition
dataRecordDefinition." - 404 - NOT FOUND: "DataRecord definition
dataRecordDefinitionis supposed to be supported by SourcesourceName, but SourcesourceNamenot found." - 404 - BAD REQUEST: "The xml request body is no valid aggregateProcess sensorML description."
- 409 - CONFLICT: "A stream with name
streamNamealready exists." - PUT http://localhost:8082/cnc/api/streams/{streamName} with
Content-Typeheaderapplication/jsonchanges the deploy-status of the registered Stream 'streamName' according to the request body. Example Payload:json { "status": "deployed" }possible Responses: - 200 - OK: The Streams status has been changed to the requested status.
- 202 - ACCEPTED: "The Stream {streamName} is currently
deployingand thus, the resource status will not be changed." - 400 - BAD REQUEST: "Request is missing required field
status." - 400 - BAD REQUEST: "The requested status
statusValueis not supported. Supported status are: 'deployed' and 'undeployed'." - 404 - NOT FOUND: "Stream {streamName} not found."
- PUT http://localhost:8082/cnc/api/streams/{streamName} with
Content-Typeheaderapplication/xmlchanges the registered Stream 'streamName' according to the request body. Example Payload cf. POST oncnc/api/streams
- 201 - Created with json response of the created Stream, e.g.
Bugs and Feedback
Developer feedback goes a long way towards making this SWE-Ingestion-Service even better. Submit a bug report or request feature enhancements to via mail to s.jirka@52north.org or open an issue on this github repository.
Documentation
Credits
The development of the 52°North SWE Ingestion Service implementation was supported by several organizations and projects. Among other we would like to thank the following organisations and project
| Project/Logo | Description |
| :-------------: | :------------- |
|
| The development of this version of 52°North smle was supported by the Horizon 2020 research project SeaDataCloud (co-funded by the European Commission under the grant agreement n°730960) |
Owner
- Name: 52°North Spatial Information Research GmbH
- Login: 52North
- Kind: organization
- Email: info@52north.org
- Location: Münster
- Website: https://52north.org/
- Twitter: fivetwon
- Repositories: 261
- Profile: https://github.com/52North
Advancing spatial information infrastructures to foster open science
GitHub Events
Total
Last Year
Issues and Pull Requests
Last synced: over 1 year ago
All Time
- Total issues: 5
- Total pull requests: 42
- Average time to close issues: 7 days
- Average time to close pull requests: 2 months
- Total issue authors: 1
- Total pull request authors: 4
- Average comments per issue: 0.0
- Average comments per pull request: 0.36
- Merged pull requests: 14
- Bot issues: 0
- Bot pull requests: 28
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- EHJ-52n (5)
Pull Request Authors
- dependabot[bot] (27)
- CarstenHollmann (6)
- EHJ-52n (6)
- MojioMS (2)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- javax.annotation:javax.annotation-api compile
- javax.validation:validation-api compile
- org.hamcrest:hamcrest-core compile
- org.n52.arctic-sea:janmayen compile
- org.springframework.boot:spring-boot compile
- org.springframework:spring-beans compile
- org.springframework:spring-context compile
- org.springframework:spring-core compile
- org.springframework:spring-web compile
- ch.qos.logback:logback-classic
- ch.qos.logback:logback-core
- com.fasterxml.jackson.core:jackson-annotations
- com.fasterxml.jackson.core:jackson-databind
- commons-codec:commons-codec
- javax.inject:javax.inject
- junit:junit
- net.logstash.logback:logstash-logback-encoder
- org.apache.xmlbeans:xmlbeans
- org.locationtech.jts:jts-core
- org.n52.arctic-sea:shetland
- org.n52.arctic-sea:svalbard
- org.n52.arctic-sea:svalbard-xmlbeans
- org.slf4j:slf4j-api
- org.springframework.boot:spring-boot-starter-web
- org.springframework.cloud:spring-cloud-stream
- org.springframework.boot:spring-boot-starter-test test
- org.springframework.boot:spring-boot-test test
- org.springframework:spring-test test
- ch.qos.logback:logback-classic
- ch.qos.logback:logback-core
- javax.annotation:javax.annotation-api
- javax.inject:javax.inject
- net.logstash.logback:logstash-logback-encoder
- org.n52.arctic-sea:shetland
- org.n52.stream.seadatacloud:core
- org.slf4j:slf4j-api
- org.springframework.boot:spring-boot
- org.springframework.boot:spring-boot-autoconfigure
- org.springframework.boot:spring-boot-configuration-processor
- org.springframework.boot:spring-boot-starter-amqp
- org.springframework.boot:spring-boot-starter-web
- org.springframework.cloud:spring-cloud-stream
- org.springframework.cloud:spring-cloud-stream-binder-rabbit
- org.springframework:spring-beans
- org.springframework:spring-messaging
- ch.qos.logback:logback-classic
- ch.qos.logback:logback-core
- javax.annotation:javax.annotation-api
- javax.inject:javax.inject
- net.logstash.logback:logstash-logback-encoder
- org.n52.arctic-sea:shetland
- org.n52.stream.seadatacloud:core
- org.slf4j:slf4j-api
- org.springframework.boot:spring-boot
- org.springframework.boot:spring-boot-autoconfigure
- org.springframework.boot:spring-boot-configuration-processor
- org.springframework.boot:spring-boot-starter-amqp
- org.springframework.boot:spring-boot-starter-web
- org.springframework.cloud:spring-cloud-stream
- org.springframework.cloud:spring-cloud-stream-binder-rabbit
- org.springframework:spring-beans
- org.springframework:spring-messaging
- ch.qos.logback:logback-classic
- ch.qos.logback:logback-core
- javax.annotation:javax.annotation-api
- javax.inject:javax.inject
- net.logstash.logback:logstash-logback-encoder
- org.n52.arctic-sea:shetland
- org.n52.stream.seadatacloud:core
- org.slf4j:slf4j-api
- org.springframework.boot:spring-boot
- org.springframework.boot:spring-boot-autoconfigure
- org.springframework.boot:spring-boot-configuration-processor
- org.springframework.boot:spring-boot-starter-amqp
- org.springframework.boot:spring-boot-starter-web
- org.springframework.cloud:spring-cloud-stream
- org.springframework.cloud:spring-cloud-stream-binder-rabbit
- org.springframework:spring-beans
- org.springframework:spring-messaging
- ch.qos.logback:logback-classic
- ch.qos.logback:logback-core
- javax.annotation:javax.annotation-api
- javax.inject:javax.inject
- net.logstash.logback:logstash-logback-encoder
- org.n52.arctic-sea:shetland
- org.n52.stream.seadatacloud:core
- org.slf4j:slf4j-api
- org.springframework.boot:spring-boot
- org.springframework.boot:spring-boot-autoconfigure
- org.springframework.boot:spring-boot-configuration-processor
- org.springframework.boot:spring-boot-starter-amqp
- org.springframework.boot:spring-boot-starter-web
- org.springframework.cloud:spring-cloud-stream
- org.springframework.cloud:spring-cloud-stream-binder-rabbit
- org.springframework:spring-beans
- org.springframework:spring-messaging
- junit:junit test
- org.springframework.boot:spring-boot-starter-test test
- org.springframework:spring-test test
- ch.qos.logback:logback-classic
- ch.qos.logback:logback-core
- javax.annotation:javax.annotation-api
- net.logstash.logback:logstash-logback-encoder
- net.postgis:postgis-jdbc
- org.geolatte:geolatte-geom
- org.hibernate:hibernate-core
- org.hibernate:hibernate-spatial
- org.n52.arctic-sea:shetland
- org.n52.series.db:entities
- org.n52.series.db:mappings
- org.n52.series.db:types
- org.n52.stream.seadatacloud:core
- org.postgresql:postgresql
- org.springframework.boot:spring-boot
- org.springframework.boot:spring-boot-autoconfigure
- org.springframework.boot:spring-boot-configuration-processor
- org.springframework.boot:spring-boot-starter-amqp
- org.springframework.boot:spring-boot-starter-data-jpa
- org.springframework.boot:spring-boot-starter-web
- org.springframework.cloud:spring-cloud-stream
- org.springframework.cloud:spring-cloud-stream-binder-rabbit
- org.springframework:spring-beans
- org.springframework:spring-messaging
- javax.annotation:javax.annotation-api
- org.n52.stream.seadatacloud:core
- org.slf4j:slf4j-api
- org.springframework.boot:spring-boot
- org.springframework.boot:spring-boot-autoconfigure
- org.springframework.boot:spring-boot-configuration-processor
- org.springframework.boot:spring-boot-starter-amqp
- org.springframework.boot:spring-boot-starter-web
- org.springframework.cloud:spring-cloud-stream
- org.springframework.cloud:spring-cloud-stream-binder-rabbit
- org.springframework:spring-beans
- org.springframework:spring-messaging
- javax.annotation:javax.annotation-api 1.3.2 compile
- javax.validation:validation-api 2.0.1.Final compile
- org.hamcrest:hamcrest-core 1.3 compile
- org.springframework.boot:spring-boot 2.0.0.RELEASE compile
- org.springframework.boot:spring-boot-starter-security 2.0.0.RELEASE compile
- org.springframework:spring-beans 5.0.4.RELEASE compile
- org.springframework:spring-context 5.0.4.RELEASE compile
- org.springframework:spring-core 5.0.4.RELEASE compile
- org.springframework:spring-web 5.0.4.RELEASE compile
- org.springframework.cloud:spring-cloud-dependencies Finchley.M8 import
- ch.qos.logback:logback-classic 1.2.3
- ch.qos.logback:logback-core 1.2.3
- com.fasterxml.jackson.core:jackson-annotations 2.9.5
- com.fasterxml.jackson.core:jackson-databind 2.9.3
- commons-codec:commons-codec 1.11
- javax.inject:javax.inject 1
- junit:junit 4.12
- net.logstash.logback:logstash-logback-encoder 5.1
- net.postgis:postgis-jdbc 2.2.1
- org.apache.xmlbeans:xmlbeans 2.6.0
- org.geolatte:geolatte-geom 1.3.0
- org.hibernate:hibernate-spatial 5.2.12-52N.1
- org.locationtech.jts:jts-core 1.15.0
- org.n52.arctic-sea:janmayen 5.1.0-SNAPSHOT
- org.n52.arctic-sea:shetland 5.1.0-SNAPSHOT
- org.n52.arctic-sea:svalbard 5.1.0-SNAPSHOT
- org.n52.arctic-sea:svalbard-xmlbeans 5.1.0-SNAPSHOT
- org.n52.series.db:entities 1-SNAPSHOT
- org.n52.series.db:mappings 1-SNAPSHOT
- org.n52.series.db:types 1-SNAPSHOT
- org.n52.stream:core 0.0.1-SNAPSHOT
- org.postgresql:postgresql 42.1.3
- org.slf4j:slf4j-api 1.7.25
- org.springframework.boot:spring-boot-test 2.0.0.RELEASE test
- org.springframework:spring-test 5.0.4.RELEASE test
- org.springframework.boot:spring-boot-autoconfigure compile
- ch.qos.logback:logback-classic
- ch.qos.logback:logback-core
- net.logstash.logback:logstash-logback-encoder
- org.n52.arctic-sea:svalbard
- org.n52.stream.seadatacloud:core
- org.springframework.boot:spring-boot-starter-security
- org.springframework.boot:spring-boot-starter-web
- junit:junit test
- org.springframework.boot:spring-boot-starter-test test
- 368 dependencies
- log-timestamp 0.3.0
- mosca ^2.8.3
- alpine 3.7
- docker.elastic.co/elasticsearch/elasticsearch-oss 6.2.4
- docker.elastic.co/kibana/kibana-oss 6.2.4
- docker.elastic.co/logstash/logstash-oss 6.2.4
- mdillon/postgis 9.5-alpine
- nginx latest
- nginx alpine
- openjdk 8-jdk-alpine
- rabbitmq 3-management
- springcloud/spring-cloud-dataflow-server-local 1.5.0.RELEASE
- tomcat 9-jre8-alpine
- alpine 3.7
- docker.elastic.co/elasticsearch/elasticsearch-oss 6.2.4
- docker.elastic.co/kibana/kibana-oss 6.2.4
- docker.elastic.co/logstash/logstash-oss 6.2.4
- matteocollina/mosca v2.8.3
- mdillon/postgis 9.5-alpine
- mqtt-translator 2019-10
- nginx alpine
- openjdk 8-jdk-alpine
- rabbitmq 3-management
- springcloud/spring-cloud-dataflow-server-local 1.5.0.RELEASE
- tomcat 9-jre8-alpine
- nginx alpine build
- node latest build
- tomcat 9-jre8 build
- node 9.10.1 build
- matteocollina/mosca v2.8.3
- mqtt-translator 2019-10