--- //[[anna.dowling@errigal.com|Anna Dowling]] 2019/05/17 05:29// ====== Gis Integration ====== The following wiki details the gis_integration application which handles api calls for transferring kmz files from a specified endpoint to the NocPortal. ===== Use Case ===== Extenet wanted to automate the retrieval and storage of kmz files in the NocPortal Previously this was a manual task : * Extenet would export any updated KMZ's from ArcGis * Ops Request * Manual load of KMZ's into portal via Manage overlays. ===== Architecture Diagram ===== {{ :development:applications:gis_integration_app_1_.png |}} ===== Technology Stack ===== * Springboot 2.1.4 * Gradle * Apache camel 2.23.2 (starter, http, jackson) * Okhttp 3.12.0 * mysql-connector 5.1.47 (setup for db but not used currently) ===== Key Configuration Points ===== **Cron job Scheduler configurable via /var/spring-boot/gis_integration/application.properties** scheduler.cronTrigger.expression=0 0 3 * * * **Mail Setup for Success / Failure Notifications configurable via /var/spring-boot/gis_integration/application.properties** (Differ per environment - templated in env-configuration) spring.mail.enabled=true spring.mail.port=587 spring.mail.host=smtp.gmail.com spring.mail.username=rightofway@errigal.com spring.mail.password=#Rightofway321!# gis.mail.from=kevin.fan@errigal.com gis.mail.replyTo=support@errigal.com gis.mail.recipients=kevin.fan@errigal.com **NocPortal API endpoints configurable via /var/spring-boot/gis_integration/application.properties** (Differ per environment - templated in env-configuration) nocportal.integration.states.url=http://localhost:8080/NocPortal/api/v1/geographicLocation nocportal.integration.overlay.url=http://localhost:8080/NocPortal/api/v1/mapOverLay nocportal.integration.upload.timeout=30000 nocportal.api.userName=userapiadmin nocportal.api.password=notsame1 **KMZ File Storage configurable via /var/spring-boot/gis_integration/application.properties** file.directory.location=kmzfiles/ file.directory.retention.period=-7 **ArcGis API endpoints configurable via /var/spring-boot/gis_integration/application.properties** (Differ per environment - templated in env-configuration) remote.timeout=60000 remote.tokenUrl=https://gis.extenetsystems.com/arcgis/tokens/generateToken?httpClient.soTimeout= remote.username=mzubal_errigal remote.password=mzubal_errigal123 remote.client=remoteip remote.expiration=60 remote.request.format=json remote.request.referer=https://www.arcgis.com remote.queryUrl=https://gis.extenetsystems.com/arcgis/rest/services/FeaturedContent/Errigal_CL_TEST/MapServer/6/query?where=ProjectState=''&geometryType=esriGeometryEnvelope&spatialRel=esriSpatialRelIntersects&returnGeometry=true&returnTrueCurves=false&returnIdsOnly=false&returnCountOnly=false&returnZ=false&returnM=false&returnDistinctValues=false&returnExtentOnly=false&f=kmz remote.whereQuery=where=ProjectState='' ==== NocPortal API ==== * GET /api/v1/geographicLocation * POST /api/v1/mapOverLay ==== Log Location ==== * /var/spring-boot/gis_integration/gis_integration.log ====Prometheus setup ==== Monitoring is configured for the following servers: - sfqaapps1 - qaextapps1 - extapps1 ==== Springboot 2 Prometheus Setup ==== Actuator setup tutorial: https://www.callicoder.com/spring-boot-actuator/ Metrics setup tutorial: https://www.callicoder.com/spring-boot-actuator-metrics-monitoring-dashboard-prometheus-grafana/ Added dependencies to build.gradle: compile("org.springframework.boot:spring-boot-starter-actuator") // Micrometer + Prometheus exporter compile(group: 'io.micrometer', name: 'micrometer-core') compile(group: 'io.micrometer', name: 'micrometer-registry-prometheus') Added config to application.properties: # Metrics related configurations management.endpoint.metrics.enabled=true management.endpoints.web.exposure.include=* management.endpoint.prometheus.enabled=true management.metrics.export.prometheus.enabled=true management.metrics.tags.application=gis_integration prometheus--monitoring-config: * gis_integration-sd.yml * prometheus.yml (GIS INTEGRATION entry) ==== Troubleshooting ==== - Check failure email for exception - This will be emailed to operations - Check endpoints are reachable (ArcGis and NocPortal) - Restart Application if necessary or wait for the next cron schedule to run. - ensure gis_integration app is running on apps1 handler - Check developer console for errors with KMZ file when loading ==== EXT GIS Contacts ==== * Sunday Aiyash (Manages Data Integrity (GIS) team) * Vishal Shah * Ahmad Saleh * Coy Potts ( No longer part of GIS team) ==== GIS Endpoint Manual KMZ Download ==== If for some reason you need to login to the gis application and manually download a state kmz file you can do so as follows: Login to the following url using the credentials in application.properties (remote.username, remote.password): https://gis.extenetsystems.com/arcgis/rest/services/FeaturedContent/ExteNetFiberAssets_Errigal/MapServer/6/Query Use the following field population in the form to export the kmz (things to note: ProjectState = 'StateName' & Format = kmz) {{ :development:applications:screencapture-gis-extenetsystems-arcgis-rest-services-featuredcontent-extenetfiberassets-errigal-mapserver-6-query-2019-05-22-16_56_13.png |}}