engine issueshttps://gitlab.servus.at/aura/engine/-/issues2024-02-21T10:21:56+01:00https://gitlab.servus.at/aura/engine/-/issues/141Line-in selection throws error2024-02-21T10:21:56+01:00Chris PastlLine-in selection throws errorError when selecting a line-in source in dashboard:
```
engine | 2024-02-20T21:40:39.483662146Z self.engine.player.preload(entries[0])
engine | 2024-02-20T21:40:39.483667862Z File "/srv/src/aura_engine/engine.py", line 300, in pr...Error when selecting a line-in source in dashboard:
```
engine | 2024-02-20T21:40:39.483662146Z self.engine.player.preload(entries[0])
engine | 2024-02-20T21:40:39.483667862Z File "/srv/src/aura_engine/engine.py", line 300, in preload
engine | 2024-02-20T21:40:39.483760076Z channel_name = self.resource_map.live_channel_for_resource(entry.source)
engine | 2024-02-20T21:40:39.483765598Z TypeError: ResourceMapping.live_channel_for_resource() takes 1 positional argument but 2 were given
```1.0-alpha3 — Playful Platypus ▶️🦦Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/140Merge and test code changes on main to the orm-less-scheduling branch2023-11-28T14:49:22+01:00David TrattnigMerge and test code changes on main to the orm-less-scheduling branchSince many refactorings have happened, this could take a bit longer.
After things are fine, merge it to main again.Since many refactorings have happened, this could take a bit longer.
After things are fine, merge it to main again.1.0-alpha3 — Playful Platypus ▶️🦦David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/139Fix config var naming2023-10-18T21:52:07+02:00Chris PastlFix config var namingFix `fade_in_time` and `fade_out_time` in configFix `fade_in_time` and `fade_out_time` in config1.0-alpha3 — Playful Platypus ▶️🦦Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/136Error while scheduling stream, logs crowded with redundant "Wait a Little Bit...2024-03-23T18:05:17+01:00Ole Binderole@freirad.atError while scheduling stream, logs crowded with redundant "Wait a Little Bit Until Preloading Is Done..." messagesWhen scheduling a stream (`http://stream.fro.at:8008/fro-128.ogg`), I get an error:
```shell
engine | 2024-02-22 12:42:44,816:engine:INFO - === preload('PlaylistEntry #5 [12:43:00 - 12:45:00 | 120.0sec | Source: ...m.fro...When scheduling a stream (`http://stream.fro.at:8008/fro-128.ogg`), I get an error:
```shell
engine | 2024-02-22 12:42:44,816:engine:INFO - === preload('PlaylistEntry #5 [12:43:00 - 12:45:00 | 120.0sec | Source: ...m.fro.at:8008/fro-128.ogg]') === - [scheduler.py:550-do_preload()]
engine | 2024-02-22 12:42:44,816:engine:INFO - Got free 'http' channel 'in_stream_0' - [mixer.py:150-get_free_channel()]
engine | 2024-02-22 12:42:44,816:engine:INFO - Assign channel [2 : in_stream_0] to entry - [engine.py:318-preload()]
engine | 2024-02-22 12:42:44,819:engine:INFO - in_stream_0.start result: Done! - [channels.py:529-start()]
engine | 2024-02-22 12:42:44,820:engine:INFO - in_stream_0.status result: polling - [channels.py:482-is_ready()]
engine | Exception in thread PRELOAD#10:do_preload:2024-02-22_12:42:45:
engine | Traceback (most recent call last):
engine | File "/usr/local/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
engine | self.run()
engine | File "/usr/local/lib/python3.10/threading.py", line 1378, in run
engine | self.function(*self.args, **self.kwargs)
engine | File "/srv/src/aura_engine/control.py", line 166, in wrapper_func
engine | self.func(
engine | File "/srv/src/aura_engine/scheduling/scheduler.py", line 551, in do_preload
engine | self.engine.player.preload(entries[0])
engine | File "/srv/src/aura_engine/engine.py", line 320, in preload
engine | is_ready = entry.channel.load(uri, metadata=metadata)
engine | File "/srv/src/aura_engine/core/channels.py", line 452, in load
engine | if retries >= max_retries:
engine | TypeError: '>=' not supported between instances of 'int' and 'NoneType'
```
As a result engine keeps logging this continously:
```shell
engine | 2024-02-22 12:57:54,734:engine:INFO - PLAY: Wait a little bit until preloading is done ... - [scheduler.py:573-do_play()]
engine | 2024-02-22 12:57:56,737:engine:INFO - PLAY: Wait a little bit until preloading is done ... - [scheduler.py:573-do_play()]
engine | 2024-02-22 12:57:58,737:engine:INFO - PLAY: Wait a little bit until preloading is done ... - [scheduler.py:573-do_play()]
engine | 2024-02-22 12:58:00,740:engine:INFO - PLAY: Wait a little bit until preloading is done ... - [scheduler.py:573-do_play()]
engine | 2024-02-22 12:58:02,741:engine:INFO - PLAY: Wait a little bit until preloading is done ... - [scheduler.py:573-do_play()]
```
---
_Original ticket description, which had the same cause:_
The log file of engine is experiencing an overflow of repetitive log entries containing the message `PLAY: Wait a little bit until preloading is done ...`. I left engine running over night and hat 73 000 entries of only this message. This excessive logging is making it challenging to identify other important log information. I would suggest to optimize the logging to maintain clarity in the log file.1.0-alpha4 — Raving Raccoon 🤪🦝Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/135API: Update API client, after Steering provides valid schema2023-07-24T16:05:49+02:00David TrattnigAPI: Update API client, after Steering provides valid schema## Parent: aura#192+
After [Steering provides a schema](https://gitlab.servus.at/aura/steering/-/issues/154 'Valid schema for "/steering/api/v1/playout" endpoint and add it to the OpenAPI Specification'):
* [ ] update the schema in `en...## Parent: aura#192+
After [Steering provides a schema](https://gitlab.servus.at/aura/steering/-/issues/154 'Valid schema for "/steering/api/v1/playout" endpoint and add it to the OpenAPI Specification'):
* [ ] update the schema in `engine/schemas`.
* [ ] re-generate the API client
* [ ] update any code working with the API client, if needed1.0-alpha5Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/132API: Update value and data type for "duration" (Tank API) and "trackDuration"...2023-10-19T01:02:35+02:00David TrattnigAPI: Update value and data type for "duration" (Tank API) and "trackDuration" (Engine API)Parent: https://gitlab.servus.at/aura/aura/-/issues/215+
---
Compare outcome of https://gitlab.servus.at/aura/tank/-/issues/61
Include seconds and milliseconds.Parent: https://gitlab.servus.at/aura/aura/-/issues/215+
---
Compare outcome of https://gitlab.servus.at/aura/tank/-/issues/61
Include seconds and milliseconds.1.0-alpha3 — Playful Platypus ▶️🦦Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/126Update all APIs to return attributes / properties in camelCase notation2023-06-09T18:58:15+02:00David TrattnigUpdate all APIs to return attributes / properties in camelCase notationParent: aura#141+
---
- [x] API calls to Engine API
- [ ] API calls to Steering
- [ ] API calls to TankParent: aura#141+
---
- [x] API calls to Engine API
- [ ] API calls to Steering
- [ ] API calls to Tank1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/125[EPIC] Basic test suite for Engine2024-02-28T22:07:54+01:00David Trattnig[EPIC] Basic test suite for EngineParent: aura#175+
---
Test suite to cover the most important cases.
**Please note:** The `clock.py` test cases can be skipped for now, since we will [remove this code altogether](https://gitlab.servus.at/aura/aura/-/issues/312).
### S...Parent: aura#175+
---
Test suite to cover the most important cases.
**Please note:** The `clock.py` test cases can be skipped for now, since we will [remove this code altogether](https://gitlab.servus.at/aura/aura/-/issues/312).
### Sub Tasks
- https://gitlab.servus.at/aura/engine/-/issues/144+
- https://gitlab.servus.at/aura/engine/-/issues/143+
- https://gitlab.servus.at/aura/engine/-/issues/142+
- https://gitlab.servus.at/aura/engine/-/issues/137+
- Other test cases which look meaningful and improve the overall test coverage1.0-alpha5Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/124Extend API data fetchers to transparently cache results as JSON files2023-05-18T21:26:30+02:00David TrattnigExtend API data fetchers to transparently cache results as JSON filesThis is a pre-condition for the design and implementation of #100.
Additionally it builds an important basis for the testability of Engine.This is a pre-condition for the design and implementation of #100.
Additionally it builds an important basis for the testability of Engine.1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/121Sample configuration with meaningful defaults for use in Docker and Docker Co...2023-01-23T17:49:28+01:00David TrattnigSample configuration with meaningful defaults for use in Docker and Docker ComposeThis is a Sub-Task of aura#112
<hr/>
Such configuration should allow some essential config options be set by environment variables. Essential options are common Docker Compose system values (e.g. audio devices or file paths used in othe...This is a Sub-Task of aura#112
<hr/>
Such configuration should allow some essential config options be set by environment variables. Essential options are common Docker Compose system values (e.g. audio devices or file paths used in other services too) or values which are most likely changed by end-users.
All config options which are not changed in default setups, should have some good default values. They [can be overridden](https://gitlab.servus.at/aura/aura/-/issues/112#note_6817), when required in special setups.
A good example for such file is the [Tank - Docker Config](https://gitlab.servus.at/aura/tank/-/blob/main/contrib/for-docker.yaml)1.0-alpha1 — 🚢🦆 Dockland DucklingDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/115Some playlist entries get re-scheduled, although they have been scheduled alr...2022-12-01T10:27:10+01:00David TrattnigSome playlist entries get re-scheduled, although they have been scheduled alreadyThis issue appears to be related to repeatedly run scheduling cycles:
```
2022-08-04 11:13:38,700:AuraEngine:INFO -
[ ENGINE COMMAND QUEUE ]
...
=> [TIMESLOT#75:do_start_timeslot:1659603900.0] exec at 2022-08-0...This issue appears to be related to repeatedly run scheduling cycles:
```
2022-08-04 11:13:38,700:AuraEngine:INFO -
[ ENGINE COMMAND QUEUE ]
...
=> [TIMESLOT#75:do_start_timeslot:1659603900.0] exec at 2022-08-04 11:05:00.218309 (alive: False)
=> [TIMESLOT#75:do_end_timeslot:1659604198.5] exec at 2022-08-04 11:09:58.718599 (alive: True)
=> [PRELOAD#75:do_preload:1659604430.0] exec at 2022-08-04 11:13:50.093425 (alive: True)
=> [PLAY#75:do_play:1659604460.0] exec at 2022-08-04 11:14:20.093578 (alive: True)
=> [PRELOAD#75:do_preload:1659603870.0] exec at 2022-08-04 11:04:30.221056 (alive: False)
=> [PLAY#75:do_play:1659603900.0] exec at 2022-08-04 11:05:00.221412 (alive: False)
```1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/113Docker: Engine is not able to run standalone anymore, due to changes for Dock...2022-11-25T09:56:32+01:00David TrattnigDocker: Engine is not able to run standalone anymore, due to changes for Docker ComposePreviously Engine could be started with the run.sh script with Docker standalone. The default configuration supplied to Docker `RUN` commands is retrieved from [sample.engine.docker.ini](https://gitlab.servus.at/aura/engine/-/blob/master...Previously Engine could be started with the run.sh script with Docker standalone. The default configuration supplied to Docker `RUN` commands is retrieved from [sample.engine.docker.ini](https://gitlab.servus.at/aura/engine/-/blob/master/config/sample-docker.engine.ini). Since _all_ settings in the configuration file got transformed into environment variables, it's almost impossible to run it individually.
For some reason the `db_host` is the only setting which is not exposed as an env var. It has a static setting `engine-postgres` pointing to the PostreSQL service. This way it's not possible to use non-dockerized databases.
## TODO
- [x] Change the config file to only use environment variables for properties relevant to Docker / Docker Compose.
- [x] Create environment variable for `db_host`
- [x] Configure Docker Compose "Aura Playout" with environment variable for `db_host`1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/108Add active scheduling of "Station Fallback" in form of a default show2023-11-23T13:22:36+01:00David TrattnigAdd active scheduling of "Station Fallback" in form of a default show- Actively schedule Station Fallback when no planned timeslots are expected, to avoid wait time for silence detector
- Handle like a *Default Station Playlist*, similar to *Default Playlists* on schedule and show
### Dependencies
- htt...- Actively schedule Station Fallback when no planned timeslots are expected, to avoid wait time for silence detector
- Handle like a *Default Station Playlist*, similar to *Default Playlists* on schedule and show
### Dependencies
- https://gitlab.servus.at/aura/aura/-/issues/221+
- https://gitlab.servus.at/aura/aura/-/issues/176+1.0-alpha7https://gitlab.servus.at/aura/engine/-/issues/106ImportError: cannot import name 'escape' from 'jinja2'2022-06-09T19:43:19+02:00EorlBruderImportError: cannot import name 'escape' from 'jinja2'Some dependency seems to have introduced a conflict. When rebuilding the docker-image (thus freshly installing all dependencies) starting it now fails with the following error:
```
engine | 2022-03-24T15:19:48.493041740Z...Some dependency seems to have introduced a conflict. When rebuilding the docker-image (thus freshly installing all dependencies) starting it now fails with the following error:
```
engine | 2022-03-24T15:19:48.493041740Z [ Run mode=prod ]
engine | 2022-03-24T15:19:48.493085014Z [ Docker=false ]
engine | 2022-03-24T15:19:48.525252859Z [ Using Python 3.9.10 ]
engine | 2022-03-24T15:19:48.694699623Z Traceback (most recent call last):
engine | 2022-03-24T15:19:48.694861675Z File "/srv/run.py", line 27, in <module>
engine | 2022-03-24T15:19:48.695151046Z from flask import Flask
engine | 2022-03-24T15:19:48.695246708Z File "/usr/local/lib/python3.9/site-packages/flask/__init__.py", line 14, in <module>
engine | 2022-03-24T15:19:48.695447849Z from jinja2 import escape
engine | 2022-03-24T15:19:48.695619918Z ImportError: cannot import name 'escape' from 'jinja2' (/usr/local/lib/python3.9/site-packages/jinja2/__init__.py)
```EorlBruderEorlBruderhttps://gitlab.servus.at/aura/engine/-/issues/105Engine API fails to store playlog due to invalid date format from Liquidsoap2022-06-02T10:58:36+02:00David TrattnigEngine API fails to store playlog due to invalid date format from LiquidsoapFor some reason Liquidsoap passes a different date format `%Y/%m/%d+%H:%M:%S` and is hence not parsable bei *Connexions* default `dateutil.parser.parse` implementation.
All other dates are formatted as `yyyy-mm-dd hh:mm`.
Reported by @...For some reason Liquidsoap passes a different date format `%Y/%m/%d+%H:%M:%S` and is hence not parsable bei *Connexions* default `dateutil.parser.parse` implementation.
All other dates are formatted as `yyyy-mm-dd hh:mm`.
Reported by @EorlBruder (see engine-api#23).
## Logs
Engine API
```
engine-api | 2022-03-24T09:20:43.059388748Z [2022-03-24 10:20:43,057] ERROR in app: Exception on /api/v1/playlog [POST]
engine-api | 2022-03-24T09:20:43.059430694Z Traceback (most recent call last):
engine-api | 2022-03-24T09:20:43.059434955Z File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2073, in wsgi_app
engine-api | 2022-03-24T09:20:43.059438423Z response = self.full_dispatch_request()
engine-api | 2022-03-24T09:20:43.059441623Z File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1518, in full_dispatch_request
engine-api | 2022-03-24T09:20:43.059445396Z rv = self.handle_user_exception(e)
engine-api | 2022-03-24T09:20:43.059449611Z File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1516, in full_dispatch_request
engine-api | 2022-03-24T09:20:43.059454256Z rv = self.dispatch_request()
engine-api | 2022-03-24T09:20:43.059458768Z File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1502, in dispatch_request
engine-api | 2022-03-24T09:20:43.059463240Z return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
engine-api | 2022-03-24T09:20:43.059468469Z File "/usr/local/lib/python3.8/site-packages/connexion/decorators/decorator.py", line 48, in wrapper
engine-api | 2022-03-24T09:20:43.059489497Z response = function(request)
engine-api | 2022-03-24T09:20:43.059493929Z File "/usr/local/lib/python3.8/site-packages/connexion/decorators/uri_parsing.py", line 144, in wrapper
engine-api | 2022-03-24T09:20:43.059523835Z response = function(request)
engine-api | 2022-03-24T09:20:43.059528181Z File "/usr/local/lib/python3.8/site-packages/connexion/decorators/validation.py", line 184, in wrapper
engine-api | 2022-03-24T09:20:43.059532534Z response = function(request)
engine-api | 2022-03-24T09:20:43.059536749Z File "/usr/local/lib/python3.8/site-packages/connexion/decorators/parameter.py", line 121, in wrapper
engine-api | 2022-03-24T09:20:43.059541158Z return function(**kwargs)
engine-api | 2022-03-24T09:20:43.059544150Z File "/srv/src/rest/controllers/internal_controller.py", line 25, in add_playlog
engine-api | 2022-03-24T09:20:43.059547111Z body = PlayLog.from_dict(connexion.request.get_json()) # noqa: E501
engine-api | 2022-03-24T09:20:43.059550035Z File "/srv/src/rest/models/play_log.py", line 106, in from_dict
engine-api | 2022-03-24T09:20:43.059564551Z return util.deserialize_model(dikt, cls)
engine-api | 2022-03-24T09:20:43.059568264Z File "/srv/src/rest/util.py", line 125, in deserialize_model
engine-api | 2022-03-24T09:20:43.059571304Z setattr(instance, attr, _deserialize(value, attr_type))
engine-api | 2022-03-24T09:20:43.059574153Z File "/srv/src/rest/util.py", line 25, in _deserialize
engine-api | 2022-03-24T09:20:43.059577073Z return deserialize_datetime(data)
engine-api | 2022-03-24T09:20:43.059579980Z File "/srv/src/rest/util.py", line 102, in deserialize_datetime
engine-api | 2022-03-24T09:20:43.059582877Z return parse(string)
engine-api | 2022-03-24T09:20:43.059585637Z File "/usr/local/lib/python3.8/site-packages/dateutil/parser.py", line 1168, in parse
engine-api | 2022-03-24T09:20:43.059588621Z return DEFAULTPARSER.parse(timestr, **kwargs)
engine-api | 2022-03-24T09:20:43.059591810Z File "/usr/local/lib/python3.8/site-packages/dateutil/parser.py", line 559, in parse
engine-api | 2022-03-24T09:20:43.059597083Z raise ValueError("Unknown string format")
engine-api | 2022-03-24T09:20:43.059602356Z ValueError: Unknown string format
```David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/104Allow the host for the backchannel to be configurable2022-03-31T19:58:12+02:00EorlBruderAllow the host for the backchannel to be configurableCurrently the host for the `SocketControlInterface` in `src/control.py` is hardcoded to be `127.0.0.1`. This breaks the backchannel communication in a setup where engine and engine-core aren't on the same host (so for example any setup w...Currently the host for the `SocketControlInterface` in `src/control.py` is hardcoded to be `127.0.0.1`. This breaks the backchannel communication in a setup where engine and engine-core aren't on the same host (so for example any setup where engine runs in a docker-container).
At least when engine runs inside of docker, it should be possible to set this to another host (in the docker-case `0.0.0.0`) and let docker handle the ports exposure (which seems to be prepared in the run.sh with `AURA_ENGINE_CONTROL_CHANNEL`).
In the current setup engine-core will get this error when trying to connect to the backchannel:
> curl: (7) Failed to connect to engine port 1337: Connection refused
On a sidenote, this error only appears in stdout/stderr and doesn't get written to the log.
I confirmed locally that hardcoding the host to 0.0.0.0 in a docker-setup solves the problem, but I guess this should be configurable in the engine.ini.1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/102Running Engine in Docker causes dysfunctional SQLAlchemy ('property' object h...2022-02-25T14:09:03+01:00David TrattnigRunning Engine in Docker causes dysfunctional SQLAlchemy ('property' object has no attribute 'query')```
engine | File "/srv/src/scheduling/models.py", line 431, in is_empty
engine | return not DB.session.query(Playlist).one_or_none()
engine | AttributeError: 'property' object has no attribute 'query'
```
Reported by @Roman.```
engine | File "/srv/src/scheduling/models.py", line 431, in is_empty
engine | return not DB.session.query(Playlist).one_or_none()
engine | AttributeError: 'property' object has no attribute 'query'
```
Reported by @Roman.1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/101Fade-out timeslot on a most recent channel basis, rather than on a active pla...2022-02-11T19:23:35+01:00David TrattnigFade-out timeslot on a most recent channel basis, rather than on a active playlist entry basis1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/100[EPIC] Schedule programme data model without ORM/DB2024-03-26T14:44:33+01:00David Trattnig[EPIC] Schedule programme data model without ORM/DBThe recent programme data is continuously fetched from the Steering API. To avoid any disruption in play-out (e.g. in cases where the API is not available due to network outages) the programme is also cached locally.
Engine uses a SQLAl...The recent programme data is continuously fetched from the Steering API. To avoid any disruption in play-out (e.g. in cases where the API is not available due to network outages) the programme is also cached locally.
Engine uses a SQLAlchemy model rebuilding an internal representation of the programme and relevant schedules for play-out.
Having an ORM and relatively heavy PostgreSQL server just for this single purpose is some unnecessary overhead. Therefore lean ways of caching should be evaluated. This POC aims to:
1. Cache the raw JSON endpoint data
2. Rebuild the ORM using simple POPOs
3. Use hashing strategies to easily detect updates, where applicable
## Sub Tasks
- [x] #124+
- [x] #129+
- [x] https://gitlab.servus.at/aura/engine/-/issues/133+
- [x] Refactor API Fetcher
- [x] POC for `TimetableService` as a lightweight replacement for `ProgrammeService`
- [x] Diffing between current and planned schedule using JSON file cache
- [x] Refactor timetable renderer for work with new domain model
- [x] Test and integrate timetable and scheduler with new domain model
- [x] Refactor `scheduling` module to improve testability
- [x] Check if uses of `ProgrammeService.engine.engine_time()` can be relocated, to reduce dependencies
- [x] Remove all references of SQLAlchemy and PostgreSQL
- [x] Add some more test cases
- [x] Documentation: Update README.md
- [x] Update docs.aura.radio + Docker Compose settings
## Merge Requests
- https://gitlab.servus.at/aura/engine/-/merge_requests/35+
- https://gitlab.servus.at/aura/aura/-/merge_requests/40+1.0-alpha4 — Raving Raccoon 🤪🦝David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/91Parse environment variables when getting config values2022-01-21T13:34:06+01:00David TrattnigParse environment variables when getting config valuesWhen configuration values are retrieved they should be check for the format `${ENV_VAR}`. In such case the actual value of the environment variable should be retrieved.When configuration values are retrieved they should be check for the format `${ENV_VAR}`. In such case the actual value of the environment variable should be retrieved.1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnig