Pular para conteúdo

Módulos do DSP

Quais módulos existem e qual a responsabilidade de cada um?

O DSP é composto por 6 repositórios de aplicação/job na organização Rural-Environmental-Registry no GitHub, mais infraestrutura empacotada no dsp-core (gateway nginx, dois GeoServers, object storage SeaweedFS e bancos PostgreSQL/PostGIS). Cada repositório abaixo evolui em git separado; o core orquestra build e containers via Docker Compose.

Módulo Responsabilidade Tecnologia principal Ver mais detalhes
dsp-core Orquestração e configuração: ./config.sh, ./setup.sh, ./start.sh; sobe bancos, gateway, dois GeoServers (Exhibition + Download), object storage (profile object-storage) e orquestra build dos demais módulos Docker Compose, Python 3 (wizard) Ver mais detalhes
dsp-backend API REST — dados de negócio, territórios, downloads (WFS ou CSV pré-gerado no S3) Java 21 + Spring Boot 3.4.2 + PostGIS Ver mais detalhes
dsp-frontend Interface web — busca, KPIs, mapa interativo Vue 3 + Vite + TypeScript Ver mais detalhes
dsp-job-data-migration ETL geoespacial — sincroniza a fonte JDBC do adotante com dsp-db e geoserver-db (dual-write); job de KPI pós-migração (area da AOI + kpi_measure) Java 21 + Spring Batch Ver mais detalhes
dsp-job-geo-file-generation Pré-gera arquivos de download territoriais e publica no object storage; mantém consulta rápida em alto volume (ex.: escala SICAR) Java 21 + Spring Boot / Batch Ver mais detalhes
dsp-docs (este repositório) Documentação central do ecossistema Zensical —

Demo local vs adotante real

Demo local (só para testar) — No Começando rápido você sobe o DSP com um seed sintético do Brasil: quadrados de exemplo no mapa, filtros, KPIs e navegação no site, sem conectar um banco da sua organização. Para esse objetivo (conhecer a interface e o fluxo de consulta) não é necessário subir o job geo-file nem o object storage (S3). Se alguém pedir um download na demo, o backend pode atender via GeoServer Download (WFS), o que é aceitável em volume pequeno e dados fictícios.

Adotante real (produção e performance) — Quando a fonte JDBC traz milhões de registros e territórios grandes (como a consulta pública do CAR), gerar arquivos de exportação sob demanda no GeoServer e no banco a cada clique sobrecarrega a stack e deixa o download lento. Por isso a instalação completa ativa o profile Compose object-storage: após cada migração bem-sucedida, o watermark indica quais territórios mudaram e a migração marca no dsp-db quais regiões precisam de novo arquivo; o dsp-job-geo-file-generation pré-gera só esses CSVs e grava no SeaweedFS (dsp-object-storage). O backend entrega esses bytes quando existirem, com fallback para WFS. Assim os downloads ficam rápidos e o GeoServer fica reservado sobretudo para mapas (WMS/WFS de visualização), não para exportações em massa repetidas.

Resumo: teste local = mapa + site com dados de exemplo, sem S3; uso real com alto volume = S3 + pré-geração recomendados. Detalhes: Arquitetura e Instalação completa.

Como os módulos se conectam

flowchart LR
  browser["BROWSER<br/>Consulta pública no mapa."]
  gw["GATEWAY<br/>nginx · entrada HTTP única.<br/>/dsp/ · /dsp-backend/ · GeoServers."]

  srcDb[("SEU DATABASE<br/>Banco da sua organização que você quer migrar os dados.<br/>Fonte a migrar para o DSP.")]
  jobMig["JOB-DATA-MIGRATION<br/>ETL Spring Batch.<br/>origem → dsp-db + geoserver-db."]
  jobGeo["JOB-GEO-FILE-GENERATION<br/>Pré-gera os arquivos de download.<br/>"]
  core["CORE<br/>CONFIG · SETUP · START.<br/>Prepara bancos e orquestra os demais módulos."]

  dspDb[("DSP DB<br/>Operacional: negócio + bbox/centroid.")]
  gsDb[("GEOSERVER DB<br/>Geometria completa dsp.*<br/>Lido pelos dois GeoServers.")]
  objStor[("OBJECT STORAGE<br/>SeaweedFS S3.<br/>")]

  be["DSP BACKEND<br/>API REST e regras de negócio."]
  fe["DSP FRONTEND<br/>Interface web da plataforma.<br/>Consulta, mapas e compartilhamento."]

  gsEx["GEOSERVER-EXHIBITION<br/>Publica layers para visualização.<br/>Serviço WMS/WFS de mapa."]
  gsDl["GEOSERVER-DOWNLOAD<br/>WFS para exportação de downloads.<br/>Consumido pelo backend."]

  browser --> gw
  gw -->|/dsp/| fe
  gw -->|/dsp-backend/| be
  gw -->|/geoserver-exhibition/| gsEx

  jobMig -->|leitura| srcDb
  jobMig -->|"negócio + bbox/centroid + KPIs"| dspDb
  jobMig -->|"geom completa"| gsDb
  core -.config/schema/build.-> jobMig
  core -.-> jobGeo
  core -.-> dspDb
  core -.-> gsDb
  core -.-> objStor
  core -.-> gw
  core -.-> be
  core -.-> fe
  core -.-> gsEx
  core -.-> gsDl

  dspDb --> be
  gsDb --> gsEx
  gsDb --> gsDl
  gsDb --> jobGeo
  jobGeo -->|"CSV pré-gerado"| objStor
  be -->|WFS downloads| gsDl
  be -->|CSV quando disponível| objStor

  classDef app fill:#0f766e22,color:#115e59,stroke:#0f766e,stroke-width:2px
  classDef geoCls fill:#16653422,color:#14532d,stroke:#166534,stroke-width:2px
  classDef db fill:#b4530922,color:#92400e,stroke:#b45309,stroke-width:2px
  classDef job fill:#7c2d1222,color:#7c2d12,stroke:#9a3412,stroke-width:2px
  classDef coreCls fill:#312e8122,color:#312e81,stroke:#4338ca,stroke-width:2px
  classDef entryCls fill:#1e3a5f22,color:#1e3a5f,stroke:#2563eb,stroke-width:2px
  classDef storageCls fill:#4c1d9522,color:#4c1d95,stroke:#7c3aed,stroke-width:2px

  class fe,be app
  class gsEx,gsDl geoCls
  class dspDb,gsDb,srcDb db
  class jobMig,jobGeo job
  class core coreCls
  class browser,gw entryCls
  class objStor storageCls

Quais tecnologias são utilizadas?

Camada Tecnologia
Orquestração Git, Docker 24+, Docker Compose v2, Python 3
Entrada HTTP nginx (dsp-gateway, definido no core)
Backend Java 21, Spring Boot 3.4.2, Gradle, JPA/Hibernate + hibernate-spatial, springdoc-openapi
Frontend Vue 3 (Composition API), TypeScript, Vite, Tailwind CSS, @rural-environmental-registry/map_component (Leaflet)
ETL e geo-file Java 21, Spring Boot 3.4.2, Spring Batch, Maven
Bancos PostgreSQL + PostGIS
Object storage SeaweedFS (API S3), profile object-storage
Publicação de mapas GeoServer 3.0.0 (Exhibition + Download)