-
Notifications
You must be signed in to change notification settings - Fork 0
8191: Data adapter #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
ecaba9c
9aa1a0b
9dadf62
6de59da
a56f14c
ff7146d
0386a7d
492d105
6a2ebea
1fdbf47
d518d75
1cde88a
20798f2
61f6190
db7575b
8e4f7ca
4f28de9
b04cb63
22d5017
8eb2a37
8e36832
0bd7178
1d1e303
fd623fc
bfcac87
f51f611
e556c01
8e0627b
c29945e
01cfeb5
b949429
684f13e
43ef3ac
21d7559
93897e3
2a56d2c
e4452fd
02cc6cf
210c5ac
538ae48
cda1ba2
365325a
0ed7598
78c3538
05fa238
603147d
07aec4f
64aa10f
87e540f
c05adfe
a97f602
346cbc6
3353d08
388d88a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| #### Link to ticket | ||
|
|
||
| Please add a link to the ticket being addressed by this change. | ||
|
|
||
| #### Description | ||
|
|
||
| Please include a short description of the suggested change and the reasoning behind the approach you have chosen. | ||
|
|
||
| #### Screenshot of the result | ||
|
|
||
| If your change affects the user interface you should include a screenshot of the result with the pull request. | ||
|
|
||
| #### Checklist | ||
|
|
||
| - [ ] My code is covered by test cases. | ||
| - [ ] My code passes our test (all our tests). | ||
| - [ ] My code passes our static analysis suite. | ||
| - [ ] My code passes our continuous integration process. |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| # The data sets this application publishes, one entry per source key. | ||
| # | ||
| # Field names follow DCAT-AP, the metadata profile European data portals | ||
| # harvest, so registering a data set is a translation of its entry rather than | ||
| # a new survey. See docs/adr/007-source-manifest.md. | ||
|
|
||
| sources: | ||
| mtm_spatialmaps-handicap-parking: | ||
| title: 'Handicapparkering, Aarhus Kommune' | ||
| description: >- | ||
| Disabled parking bays in Aarhus Municipality, with the number of | ||
| reserved bays per location. | ||
| publisher: 'Aarhus Kommune' | ||
| contact: ppg@aarhus.dk | ||
| landing_page: 'https://www.opendata.dk/city-of-aarhus/parkering-i-aarhus-kommune' | ||
| access_url: 'https://webkort.aarhuskommune.dk/spatialmap?page=get_geojson_opendata&datasource=invap' | ||
| media_type: application/geo+json | ||
| crs: 'EPSG:25832' | ||
| model: OnStreetParking | ||
| context_url: 'https://raw.githubusercontent.com/smart-data-models/dataModel.Parking/master/context.jsonld' | ||
| update_frequency: continuous | ||
|
|
||
| # The portal states no licence for this data set. DCAT-AP requires | ||
| # one, so it has to be settled with the data owner before the | ||
| # catalogue can be registered anywhere. | ||
| licence: ~ | ||
|
|
||
| # Fields the feed carries that are not published. Recorded here | ||
| # because the source class shows what is mapped but cannot show what | ||
| # was left out, or why. | ||
| omitted_fields: | ||
| ident: 'Single-letter code; its meaning is not documented and not confirmed by the data owner.' | ||
| oprettet_af: 'Directory username of the municipal employee who created the record.' | ||
| rettet_af: 'Directory username of the municipal employee who last edited the record.' | ||
| oprettet_dato: 'Describes the register record.' | ||
| rettet_dato: 'Describes the register record.' | ||
| mi_style: 'MapInfo rendering style, empty throughout the export.' |
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we need ADRs we should write them ourselves. Much of the text makes no sense to me.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I agree that they could be even shorter and more concise. I think that some of the considerations behind the decisions makes a stronger argument towards the decided architecture. People in the future may use this project as inspiration for working with brokers, so i think that the proper documentation earns its place. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,74 @@ | ||
| # 001: Architecture — Symfony 8 on the ITK Dev Docker template | ||
|
|
||
| | Field | Value | | ||
| |--------------------|----------------------------------------| | ||
| | **Created By** | Jeppe Krogh | | ||
| | **Date** | 2026-08-24 | | ||
| | **Decision Maker** | ITK Dev team | | ||
| | **Stakeholders** | ITK Dev developers, future maintainers | | ||
| | **Status** | Draft | | ||
|
|
||
| ## Context | ||
|
|
||
| This application reads open data sets, converts them to a standard smart-city | ||
| representation, and publishes them to a context broker. The organisation | ||
| maintains its PHP services on a versioned Docker template carrying shared CI | ||
| and coding-standards configuration. This ADR serves to decide the runtime, | ||
| framework and development environment the application is built on. | ||
|
|
||
| ### Drivers | ||
|
|
||
| - **Functional:** scheduled console commands, outbound HTTP, and a local broker | ||
| to import into. No database and no HTTP surface of its own. | ||
| - **Non-functional:** shared tooling rather than reimplemented tooling, minimal | ||
| onboarding, reproducible across developers and CI, long-term vendor support. | ||
|
|
||
| ### Options Considered | ||
|
|
||
| 1. **PHP 8.4 / Symfony 8 on the maintained template.** CI, coding standards and | ||
| task runner come for free, and its console suits scheduled imports; it | ||
| provisions services this application never uses, and its PHP runs ahead of | ||
| developer hosts. | ||
| 2. **A minimal project on the host, without the template.** No unused services | ||
| and no container requirement, but shared configuration is rebuilt by hand | ||
| and a local broker needs containers anyway, moving the requirement rather | ||
| than removing it. | ||
| 3. **A second entry point in an existing internal application.** One deployment | ||
| to operate, but couples a batch importer to a user-facing release cycle and | ||
| inherits dependencies it has no use for. | ||
| 4. **A different language ecosystem on a bespoke setup.** Richer geospatial | ||
| libraries, but no internal expertise and no shared tooling; the needed | ||
| transformations exist as mature libraries in the established stack. | ||
|
|
||
| ## Decision | ||
|
|
||
| **PHP 8.4 + Symfony 8** on the ITK Dev Docker template, as its **own deployable | ||
| service**, with a containerised broker overlay for local development. | ||
|
|
||
| - Standardising costs less over the application's lifetime than trimming unused | ||
| services: a second toolchain must be learned and patched; idle containers | ||
| cost only disk. | ||
| - A batch importer's lifecycle and failure modes differ from a user-facing | ||
| application's, so it stays its own service. | ||
| - No domain persistence is needed — the broker is the system of record — so the | ||
| template's database is left unused rather than removed, keeping template | ||
| updates a clean diff. | ||
| - Local development includes a real broker, so imports are verified end to end | ||
| rather than only as serialised output. | ||
|
|
||
| ## Consequences | ||
|
|
||
| ### Positive | ||
|
|
||
| - Onboarding cost close to zero; CI and coding standards work from the first | ||
| commit. | ||
| - No schema, no migrations, no state to keep consistent with the broker. | ||
|
|
||
| ### Negative / Trade-offs | ||
|
|
||
| - Containers are mandatory; dependency management, console commands and tests | ||
| cannot run natively. | ||
| - A web server, database and mail catcher are provisioned and never used. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should remove any unused services.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agreed. Removed this statement. |
||
| - Broker images are not published for every CPU architecture, so local start-up | ||
| may be slow under emulation. | ||
| - The application follows the template's choices; deviating later has a cost. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thinks we should tell how to run these commands with
docker composerather than with a task. We (currently) mostly usetaskfor local development and for productions one should usedocker compose(and we'll useitkdev-docker-compose-server, but that's our choice and caused by our hosting setup).