From 386e80f1eb16d92302a5bdbb2fe0a418635b88a7 Mon Sep 17 00:00:00 2001 From: Ethan Grahn Date: Wed, 16 Nov 2022 11:01:09 -0600 Subject: [PATCH] Add a sequence diagram --- README.md | 9 +++++++++ images/CrawlerDiagram.png | Bin 0 -> 21556 bytes 2 files changed, 9 insertions(+) create mode 100755 images/CrawlerDiagram.png diff --git a/README.md b/README.md index 17f521e..8ebd030 100755 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ GeoJSON. We can link data to the network via latitude/longitude coordinates or N - [Maven](#maven) - [JAR File](#jar-file) - [Docker](#docker) +- [Sequence Diagram](#sequence-diagram) ## Contributing @@ -120,3 +121,11 @@ and run with: ```shell docker-compose run -e CRAWLER_SOURCE_ID= nldi-crawler ``` + +## Sequence Diagram + +The image below is a sequence diagram detailing how the NLDI crawler operates. + +![Sequence Diagram](images/CrawlerDiagram.png) + +An internal user starts the crawler with an input source value. The crawler gathers information from the database for that source. A `GET` request to the source URL is made to get the target GeoJSON features. That collection of features is then looped through and each one is added as a row to a database table specific to the feature source. diff --git a/images/CrawlerDiagram.png b/images/CrawlerDiagram.png new file mode 100755 index 0000000000000000000000000000000000000000..37755e2351cf4511140c1e789b37571f10786f66 GIT binary patch literal 21556 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%0ADYazZ*PoP9qv7CcMbQB2TmB|8ruq-X^8D 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