engine issueshttps://gitlab.servus.at/aura/engine/-/issues2023-11-24T14:57:26+01:00https://gitlab.servus.at/aura/engine/-/issues/83sqlalchemy.exc.InvalidRequestError: This session is in 'prepared' state; no f...2023-11-24T14:57:26+01:00David Trattnigsqlalchemy.exc.InvalidRequestError: This session is in 'prepared' state; no further SQL can be emitted within this transactionSuddenly appeared after a 5min stream and 5min file timeslot was scheduled. Playback was not interfered.
```
2021-07-13 16:20:01,606:AuraEngine:INFO - Expanded duration of playlist entry #0 - [programme.py:512-expand_entry_duration()]
2...Suddenly appeared after a 5min stream and 5min file timeslot was scheduled. Playback was not interfered.
```
2021-07-13 16:20:01,606:AuraEngine:INFO - Expanded duration of playlist entry #0 - [programme.py:512-expand_entry_duration()]
2021-07-13 16:20:01,611:AuraEngine:INFO - Finished with fading-in 'in_filesystem_1'. - [mixer.py:369-fade_in()]
Exception in thread PLAY:do_play:1626186000.0:
Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 1254, in run
self.function(*self.args, **self.kwargs)
File "/home/david/Code/aura/engine/src/control.py", line 294, in wrapper_func
if param: self.func(param,)
File "/home/david/Code/aura/engine/src/scheduling/scheduler.py", line 517, in do_play
self.logger.info(self.engine.scheduler.timeslot_renderer.get_ascii_timeslots())
File "/home/david/Code/aura/engine/src/scheduling/utils.py", line 236, in get_ascii_timeslots
entries = self.preprocess_entries(rest_of_playlist, False)
File "/home/david/Code/aura/engine/src/scheduling/utils.py", line 322, in preprocess_entries
if entry.entry_start >= entry.playlist.timeslot.timeslot_end:
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 287, in __get__
return self.impl.get(instance_state(instance), dict_)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 723, in get
value = self.callable_(state, passive)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 749, in _load_for_state
return self._emit_lazyload(
File "<string>", line 1, in <lambda>
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 890, in _emit_lazyload
q(session)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/ext/baked.py", line 545, in all
return list(self)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/ext/baked.py", line 445, in __iter__
return q._execute_and_instances(context)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3502, in _execute_and_instances
conn = self._get_bind_args(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3517, in _get_bind_args
return fn(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3496, in _connection_from_session
conn = self.session.connection(**kw)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1138, in connection
return self._connection_for_bind(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1146, in _connection_for_bind
return self.transaction._connection_for_bind(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 409, in _connection_for_bind
self._assert_active()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 282, in _assert_active
raise sa_exc.InvalidRequestError(
sqlalchemy.exc.InvalidRequestError: This session is in 'prepared' state; no further SQL can be emitted within this transaction.
2021-07-13 16:20:01,647:AuraEngine:INFO - Expanded duration of playlist entry #0 - [programme.py:512-expand_entry_duration()]
2021-07-13 16:20:01,674:AuraEngine:INFO - Finished fetching current programme from API (3 timeslots) - [programme.py:80-refresh()]
```1.0-alpha3 — Playful Platypus ▶️🦦David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/82Test and fine-tune playout timings2024-03-21T18:37:15+01:00David TrattnigTest and fine-tune playout timings1.0-alpha6Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/81Live channel doesn't get selected properly2021-07-08T18:12:31+02:00David TrattnigLive channel doesn't get selected properlyAura 0.9David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/80Decoding error for some track meta info received from Liquidsoap2022-01-28T15:12:58+01:00David TrattnigDecoding error for some track meta info received from Liquidsoap```
- [control.py:396-log_commands()]
--- Logging error ---
Traceback (most recent call last):
File "/srv/src/control.py", line 145, in run
self.process(logger, json.loads(data))
File "/usr/local/lib/python3.8/json/__init__.py",...```
- [control.py:396-log_commands()]
--- Logging error ---
Traceback (most recent call last):
File "/srv/src/control.py", line 145, in run
self.process(logger, json.loads(data))
File "/usr/local/lib/python3.8/json/__init__.py", line 343, in loads
s = s.decode(detect_encoding(s), 'surrogatepass')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 173: invalid start byte
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/logging/__init__.py", line 1085, in emit
msg = self.format(record)
File "/usr/local/lib/python3.8/logging/__init__.py", line 929, in format
return fmt.format(record)
File "/usr/local/lib/python3.8/logging/__init__.py", line 668, in format
record.message = record.getMessage()
File "/usr/local/lib/python3.8/logging/__init__.py", line 373, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
File "/usr/local/lib/python3.8/threading.py", line 890, in _bootstrap
self._bootstrap_inner()
File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/srv/src/control.py", line 148, in run
logger.error(SU.red(f'[ECI] Error while processing request: {data}'), e)
Message: '\x1b[31m[ECI] Error while processing request: b\'{ "action": "on_metadata", "data": {\\n "album": "Good Morning Susie Soho", "track": "1", "date": "2000",\\n "kind": "{audio=2;video=0;midi=0}", "year": "2000",\\n "artist": "Esbj\\xf6rn Svensson Trio", "decoder": "MAD",\\n "title": "Somewhere else before",\\n "filename": "../audio/fallback/01 Somewhere else before.mp3",\\n "temporary": "false", "source": "fallback_folder", "tracknumber": "1",\\n "initial_uri": "../audio/fallback/01 Somewhere else before.mp3",\\n "playlist_length": "13", "status": "playing",\\n "on_air": "2021/07/05 18:59:48", "rid": "1", "genre": "Noise",\\n "playlist_position": "3"\\n}, "track_duration": "335.2" }\'\x1b[0m'
Arguments: (UnicodeDecodeError('utf-8', b'{ "action": "on_metadata", "data": {\n "album": "Good Morning Susie Soho", "track": "1", "date": "2000",\n "kind": "{audio=2;video=0;midi=0}", "year": "2000",\n "artist": "Esbj\xf6rn Svensson Trio", "decoder": "MAD",\n "title": "Somewhere else before",\n "filename": "../audio/fallback/01 Somewhere else before.mp3",\n "temporary": "false", "source": "fallback_folder", "tracknumber": "1",\n "initial_uri": "../audio/fallback/01 Somewhere else before.mp3",\n "playlist_length": "13", "status": "playing",\n "on_air": "2021/07/05 18:59:48", "rid": "1", "genre": "Noise",\n "playlist_position": "3"\n}, "track_duration": "335.2" }', 173, 174, 'invalid start byte'),)
--- Logging error ---
Traceback (most recent call last):
File "/srv/src/control.py", line 145, in run
self.process(logger, json.loads(data))
File "/usr/local/lib/python3.8/json/__init__.py", line 343, in loads
s = s.decode(detect_encoding(s), 'surrogatepass')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 173: invalid start byte
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/logging/__init__.py", line 1085, in emit
msg = self.format(record)
File "/usr/local/lib/python3.8/logging/__init__.py", line 929, in format
return fmt.format(record)
File "/usr/local/lib/python3.8/logging/__init__.py", line 668, in format
record.message = record.getMessage()
File "/usr/local/lib/python3.8/logging/__init__.py", line 373, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
File "/usr/local/lib/python3.8/threading.py", line 890, in _bootstrap
self._bootstrap_inner()
File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/srv/src/control.py", line 148, in run
logger.error(SU.red(f'[ECI] Error while processing request: {data}'), e)
Message: '\x1b[31m[ECI] Error while processing request: b\'{ "action": "on_metadata", "data": {\\n "album": "Good Morning Susie Soho", "track": "1", "date": "2000",\\n "kind": "{audio=2;video=0;midi=0}", "year": "2000",\\n "artist": "Esbj\\xf6rn Svensson Trio", "decoder": "MAD",\\n "title": "Somewhere else before",\\n "filename": "../audio/fallback/01 Somewhere else before.mp3",\\n "temporary": "false", "source": "fallback_folder", "tracknumber": "1",\\n "initial_uri": "../audio/fallback/01 Somewhere else before.mp3",\\n "playlist_length": "13", "status": "playing",\\n "on_air": "2021/07/05 18:59:48", "rid": "1", "genre": "Noise",\\n "playlist_position": "3"\\n}, "track_duration": "335.2" }\'\x1b[0m'
Arguments: (UnicodeDecodeError('utf-8', b'{ "action": "on_metadata", "data": {\n "album": "Good Morning Susie Soho", "track": "1", "date": "2000",\n "kind": "{audio=2;video=0;midi=0}", "year": "2000",\n "artist": "Esbj\xf6rn Svensson Trio", "decoder": "MAD",\n "title": "Somewhere else before",\n "filename": "../audio/fallback/01 Somewhere else before.mp3",\n "temporary": "false", "source": "fallback_folder", "tracknumber": "1",\n "initial_uri": "../audio/fallback/01 Somewhere else before.mp3",\n "playlist_length": "13", "status": "playing",\n "on_air": "2021/07/05 18:59:48", "rid": "1", "genre": "Noise",\n "playlist_position": "3"\n}, "track_duration": "335.2" }', 173, 174, 'invalid start byte'),)
```1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/79Comment out unused fallback mixer2021-12-13T17:57:24+01:00David TrattnigComment out unused fallback mixerAura 0.9David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/78Preloading is not happening early enough2021-07-13T16:49:06+02:00David TrattnigPreloading is not happening early enoughWhen scheduling streams or files the preloading functionality is happening too late i.e. when the actually playout should be happening:
```
2021-07-05 12:24:16,731:AuraEngine:INFO - Finished fetching current programme from API (3 timesl...When scheduling streams or files the preloading functionality is happening too late i.e. when the actually playout should be happening:
```
2021-07-05 12:24:16,731:AuraEngine:INFO - Finished fetching current programme from API (3 timeslots) - [programme.py:80-refresh()]
2021-07-05 12:24:16,735:AuraEngine:INFO - For now, skipped 2 future timeslot(s) which are out of the scheduling window (T¹-60s to T²-60s) - [scheduler.py:383-filter_scheduling_window()]
2021-07-05 12:24:16,736:AuraEngine:INFO - Fading out timeslot in 1625480998.5 seconds at 2021-07-05 12:30:00 | Timeslot: ID#406 [Show: Musikprogramm, ShowID: 1 | 12:25:00 - 12:30:00 ] - [scheduler.py:426-__init__()]
2021-07-05 12:25:00,237:AuraEngine:INFO - === on_timeslot_start('ID#406 [Show: Musikprogramm, ShowID: 1 | 12:25:00 - 12:30:00 ]') === - [scheduler.py:436-do_start_timeslot()]
2021-07-05 12:25:00,237:AuraEngine:INFO - Active timeslot used for trackservice 'ID#406 [Show: Musikprogramm, ShowID: 1 | 12:25:00 - 12:30:00 ]' - [trackservice.py:61-on_timeslot_start()]
2021-07-05 12:25:00,239:AuraEngine:INFO - There is no timeslot- or show-fallback defined for timeslot#406. The station fallback will be used automatically. - [fallback.py:192-queue_fallback_playlist()]
2021-07-05 12:25:00,239:AuraEngine:INFO - Built 1 entry group(s) - [scheduler.py:343-queue_playlist_entries()]
2021-07-05 12:25:00,240:AuraEngine:ERROR - Timer 'PRELOAD:do_preload:1625480685.0' is due in the past. Executing immediately ... - [control.py:243-__init__()]
2021-07-05 12:25:00,240:AuraEngine:INFO - === preload_group('PlaylistEntry #28 [12:25:00 - 12:43:53 | 1133sec | Source: ...file://musikprogramm/7], PlaylistEntry #29 [12:43:53 - 12:58:18 | 865sec | Source: ...file://musikprogramm/8]') === - [scheduler.py:488-do_preload()]
2021-07-05 12:25:00,240:AuraEngine:INFO - Swapped queue channel from A > B - [channels.py:261-channel_swap()]
2021-07-05 12:25:00,241:AuraEngine:INFO - Loading entry 'PlaylistEntry #28 [12:25:00 - 12:43:53 | 1133sec | Source: ...file://musikprogramm/7]' - [engine.py:281-preload_group()]
2021-07-05 12:25:00,241:AuraEngine:ERROR - Timer 'PLAY:do_play:1625480700.0' is due in the past. Executing immediately ... - [control.py:243-__init__()]
2021-07-05 12:25:00,241:AuraEngine:INFO - === play('PlaylistEntry #28 [12:25:00 - 12:43:53 | 1133sec | Source: ...file://musikprogramm/7], PlaylistEntry #29 [12:43:53 - 12:58:18 | 865sec | Source: ...file://musikprogramm/8]') === - [scheduler.py:504-do_play()]
2021-07-05 12:25:00,241:AuraEngine:INFO - Finished queuing programme. - [scheduler.py:269-queue_programme()]
2021-07-05 12:25:00,241:AuraEngine:CRITICAL - PLAY: The entry/entries are not yet ready to be played (Entries: PlaylistEntry #28 [12:25:00 - 12:43:53 | 1133sec | Source: ...file://musikprogramm/7], PlaylistEntry #29 [12:43:53 - 12:58:18 | 865sec | Source: ...file://musikprogramm/8]) - [scheduler.py:507-do_play()]
2021-07-05 12:25:00,241:AuraEngine:INFO - in_filesystem_1.queue_push('/home/david/Code/aura/engine/audio/source/musikprogramm/7.flac') - [engine.py:543-queue_push()]
2021-07-05 12:25:00,241:AuraEngine:INFO -
[ ENGINE COMMAND QUEUE ]
=> [TIMESLOT:do_start_timeslot:1625480700.0] exec at 2021-07-05 12:25:00.236984 (alive: False)
=> [TIMESLOT:do_end_timeslot:1625480998.5] exec at 2021-07-05 12:29:58.237792 (alive: True)
=> [PRELOAD:do_preload:1625480685.0] exec at 2021-07-05 12:24:44.740595 (alive: False)
=> [PLAY:do_play:1625480700.0] exec at 2021-07-05 12:24:59.741067 (alive: False)
- [control.py:396-log_commands()]
2021-07-05 12:25:00,241:AuraEngine:INFO - PLAY: Wait a little until preloading is done ... - [scheduler.py:509-do_play()]
2021-07-05 12:25:00,246:AuraEngine:INFO - in_filesystem_1.queue_push result: 6 - [engine.py:545-queue_push()]
2021-07-05 12:25:00,247:AuraEngine:INFO - Loading entry 'PlaylistEntry #29 [12:43:53 - 12:58:18 | 865sec | Source: ...file://musikprogramm/8]' - [engine.py:281-preload_group()]
2021-07-05 12:25:00,247:AuraEngine:INFO - in_filesystem_1.queue_push('/home/david/Code/aura/engine/audio/source/musikprogramm/8.flac') - [engine.py:543-queue_push()]
2021-07-05 12:25:00,256:AuraEngine:INFO - in_filesystem_1.queue_push result: 7 - [engine.py:545-queue_push()]
2021-07-05 12:25:02,245:AuraEngine:INFO - Starting to fading-in 'in_filesystem_1'. Step is 0.015s and target volume is 100. - [mixer.py:358-fade_in()]
2021-07-05 12:25:02,336:AuraEngine:INFO - Resolved 'ResourceType.FILE' entry 'PlaylistEntry #28 [12:25:00 - 12:43:53 | 1133sec | Source: ...file://musikprogramm/7]' for URI '/home/david/Code/aura/engine/audio/source/musikprogramm/7.flac' - [trackservice.py:414-resolve_entry()]
2021-07-05 12:25:02,336:AuraEngine:INFO - [ECI] Event 'on_metadata' issued successfully - [control.py:164-process()]
2021-07-05 12:25:02,338:AuraEngine:INFO - Posting playlog to Engine API... - [trackservice.py:167-store_trackservice()]
2021-07-05 12:25:02,348:AuraEngine:INFO - Posting clock info update to Engine API... - [trackservice.py:217-store_clock_info()]
2021-07-05 12:25:03,808:AuraEngine:INFO - Finished with fading-in 'in_filesystem_1'. - [mixer.py:369-fade_in()]
```Aura 0.9David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/77Graceful restart by keeping currently playing entry, in case it matches the o...2024-03-21T18:37:39+01:00David TrattnigGraceful restart by keeping currently playing entry, in case it matches the one to be scheduledWhen _Engine_ is crashing/restarting it normally (re-) schedules the entry which is planned per current timeslot. In case _Engine Core_ didn't crash though, it successfully kept playing the planned timeslot-entry. In such case no new sch...When _Engine_ is crashing/restarting it normally (re-) schedules the entry which is planned per current timeslot. In case _Engine Core_ didn't crash though, it successfully kept playing the planned timeslot-entry. In such case no new scheduling should happen i.e. when the playing entry is the one due to be scheduled.
Without the improvement, there is some Dead Air for some time, until the item is re-scheduled.1.0-alpha7Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/76Disabled Engine heartbeat results in broken pipe2022-07-22T21:15:34+02:00David TrattnigDisabled Engine heartbeat results in broken pipeWhen the Engine heartbeat is disabled i.e. Engine is not requesting the Liquidsoap status once a second, the connection to Liquidsoap gets stale quickly. This results in a `BrokenPipeError`.
It probably makes sense to fix this as part o...When the Engine heartbeat is disabled i.e. Engine is not requesting the Liquidsoap status once a second, the connection to Liquidsoap gets stale quickly. This results in a `BrokenPipeError`.
It probably makes sense to fix this as part of the _Liquidsoap Client Module Refactoring_ (#65 ). This module needs to be refactored soonish, as it's the main Comba leftover.
Meanwhile enabling heartbeat monitoring for all the default configs.
```
2021-05-04 16:44:58,969:AuraEngine:ERROR - Detected a problem with liquidsoap connection while sending: mixer.status 3
. Reason: [Errno 32] Broken pipe! Trying to reconnect. - [client.py:217-command()]
Exception in thread TIMESLOT:do_end_timeslot:1620139498.5:
Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 1254, in run
self.function(*self.args, **self.kwargs)
File "/home/david/Code/aura/engine/src/control.py", line 289, in wrapper_func
if param: self.func(param,)
File "/home/david/Code/aura/engine/src/scheduling/scheduler.py", line 448, in do_end_timeslot
self.engine.player.stop(recent_entry, TransitionType.FADE)
File "/home/david/Code/aura/engine/src/engine.py", line 364, in stop
self.mixer.fade_out(entry.channel)
File "/home/david/Code/aura/engine/src/mixer.py", line 395, in fade_out
current_volume = self.channel_current_volume(channel)
File "/home/david/Code/aura/engine/src/mixer.py", line 269, in channel_current_volume
status = self.channel_status(channel_number)
File "/home/david/Code/aura/engine/src/mixer.py", line 210, in channel_status
return self.connector.send_lqc_command(self.mixer_id.value, "mixer_status", channel_number)
File "/home/david/Code/aura/engine/src/client/connector.py", line 101, in send_lqc_command
result = func(str(namespace), *args)
File "/home/david/Code/aura/engine/src/client/playerclient.py", line 69, in mixer_status
self.command(mixer_id, "status", str(pos))
File "/home/david/Code/aura/engine/src/client/client.py", line 206, in command
self.socket.sendall(message.encode())
BrokenPipeError: [Errno 32] Broken pipe
```1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/75Issues with DB Session due to various threads accessing it (MySQL, MariaDB)2022-01-21T17:01:18+01:00David TrattnigIssues with DB Session due to various threads accessing it (MySQL, MariaDB)This is happening in not clearly predictable scenarios. I've noted it for example from within the `TrackService` plugin.
```
2021-05-05 10:40:15,176:AuraEngine:INFO - Posting playlog to Engine API... - [trackservice.py:167-store_trackse...This is happening in not clearly predictable scenarios. I've noted it for example from within the `TrackService` plugin.
```
2021-05-05 10:40:15,176:AuraEngine:INFO - Posting playlog to Engine API... - [trackservice.py:167-store_trackservice()]
Exception in thread Thread-688:
Traceback (most recent call last):
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1211, in _execute_context
context = constructor(dialect, self, conn, *args)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 803, in _init_compiled
self.cursor = self.create_cursor()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 1159, in create_cursor
return self._dbapi_connection.cursor()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 1000, in cursor
return self.connection.cursor(*args, **kwargs)
AttributeError: 'NoneType' object has no attribute 'cursor'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/home/david/Code/aura/engine/src/events.py", line 253, in func
self.call_event("on_metadata", data)
File "/home/david/Code/aura/engine/src/events.py", line 148, in call_event
method(*args)
File "/home/david/Code/aura/engine/src/plugins/trackservice.py", line 157, in on_metadata
self.store_clock_info(data)
File "/home/david/Code/aura/engine/src/plugins/trackservice.py", line 200, in store_clock_info
if e.meta_data:
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 287, in __get__
return self.impl.get(instance_state(instance), dict_)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 723, in get
value = self.callable_(state, passive)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 749, in _load_for_state
return self._emit_lazyload(
File "<string>", line 1, in <lambda>
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 890, in _emit_lazyload
q(session)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/ext/baked.py", line 545, in all
return list(self)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/ext/baked.py", line 445, in __iter__
return q._execute_and_instances(context)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3506, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1020, in execute
return meth(self, multiparams, params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1133, in _execute_clauseelement
ret = self._execute_context(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1213, in _execute_context
self._handle_dbapi_exception(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1517, in _handle_dbapi_exception
util.raise_(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
raise exception
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1211, in _execute_context
context = constructor(dialect, self, conn, *args)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 803, in _init_compiled
self.cursor = self.create_cursor()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 1159, in create_cursor
return self._dbapi_connection.cursor()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 1000, in cursor
return self.connection.cursor(*args, **kwargs)
sqlalchemy.exc.StatementError: (builtins.AttributeError) 'NoneType' object has no attribute 'cursor'
[SQL: SELECT playlist_entry_metadata.artificial_id AS playlist_entry_metadata_artificial_id, playlist_entry_metadata.artificial_entry_id AS playlist_entry_metadata_artificial_entry_id, playlist_entry_metadata.artist AS playlist_entry_metadata_artist, playlist_entry_metadata.title AS playlist_entry_metadata_title, playlist_entry_metadata.album AS playlist_entry_metadata_album
FROM playlist_entry_metadata
WHERE %s = playlist_entry_metadata.artificial_entry_id]
[parameters: [{'%(140296918919056 param)s': 354}]]
2021-05-05 10:40:15,669:AuraEngine:INFO - [ECI] Event 'on_metadata' issued successfully - [control.py:164-process()]
2021-05-05 10:40:15,670:AuraEngine:INFO - Found no entry in the recent history which matches the given source '../audio/station2/01 Journey in Satchidananda.mp3' - [trackservice.py:420-resolve_entry()]
2021-05-05 10:40:15,670:AuraEngine:INFO - Posting playlog to Engine API... - [trackservice.py:167-store_trackservice()]
Exception in thread Thread-689:
Traceback (most recent call last):
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1211, in _execute_context
context = constructor(dialect, self, conn, *args)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 803, in _init_compiled
self.cursor = self.create_cursor()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 1159, in create_cursor
return self._dbapi_connection.cursor()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 1000, in cursor
return self.connection.cursor(*args, **kwargs)
AttributeError: 'NoneType' object has no attribute 'cursor'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/home/david/Code/aura/engine/src/events.py", line 253, in func
self.call_event("on_metadata", data)
File "/home/david/Code/aura/engine/src/events.py", line 148, in call_event
method(*args)
File "/home/david/Code/aura/engine/src/plugins/trackservice.py", line 157, in on_metadata
self.store_clock_info(data)
File "/home/david/Code/aura/engine/src/plugins/trackservice.py", line 200, in store_clock_info
if e.meta_data:
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 287, in __get__
return self.impl.get(instance_state(instance), dict_)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/attributes.py", line 723, in get
value = self.callable_(state, passive)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 749, in _load_for_state
return self._emit_lazyload(
File "<string>", line 1, in <lambda>
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/strategies.py", line 890, in _emit_lazyload
q(session)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/ext/baked.py", line 545, in all
return list(self)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/ext/baked.py", line 445, in __iter__
return q._execute_and_instances(context)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3506, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1020, in execute
return meth(self, multiparams, params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1133, in _execute_clauseelement
ret = self._execute_context(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1213, in _execute_context
self._handle_dbapi_exception(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1517, in _handle_dbapi_exception
util.raise_(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
raise exception
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1211, in _execute_context
context = constructor(dialect, self, conn, *args)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 803, in _init_compiled
self.cursor = self.create_cursor()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 1159, in create_cursor
return self._dbapi_connection.cursor()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 1000, in cursor
return self.connection.cursor(*args, **kwargs)
sqlalchemy.exc.StatementError: (builtins.AttributeError) 'NoneType' object has no attribute 'cursor'
[SQL: SELECT playlist_entry_metadata.artificial_id AS playlist_entry_metadata_artificial_id, playlist_entry_metadata.artificial_entry_id AS playlist_entry_metadata_artificial_entry_id, playlist_entry_metadata.artist AS playlist_entry_metadata_artist, playlist_entry_metadata.title AS playlist_entry_metadata_title, playlist_entry_metadata.album AS playlist_entry_metadata_album
FROM playlist_entry_metadata
WHERE %s = playlist_entry_metadata.artificial_entry_id]
[parameters: [{'%(140296918919056 param)s': 354}]]
```
After that the DB connection appears to generally broken, making it impossible to fetch further timeslots for example.
```
Unhandled error while fetching & scheduling new programme! ((builtins.AttributeError) 'NoneType' object has no attribute 'cursor'
[SQL: SELECT timeslot.id AS timeslot_id_1, timeslot.playlist_id AS timeslot_playlist_id, timeslot.default_schedule_playlist_id AS timeslot_default_schedule_playlist_id, timeslot.default_show_playlist_id AS timeslot_default_show_playlist_id, timeslot.schedule_fallback_id AS timeslot_schedule_fallback_id, timeslot.show_fallback_id AS timeslot_show_fallback_id, timeslot.station_fallback_id AS timeslot_station_fallback_id, timeslot.timeslot_start AS timeslot_timeslot_start, timeslot.timeslot_end AS timeslot_timeslot_end, timeslot.timeslot_id AS timeslot_timeslot_id, timeslot.show_id AS timeslot_show_id, timeslot.show_name AS timeslot_show_name, timeslot.show_hosts AS timeslot_show_hosts, timeslot.funding_category AS timeslot_funding_category, timeslot.comment AS timeslot_comment, timeslot.languages AS timeslot_languages, timeslot.type AS timeslot_type, timeslot.category AS timeslot_category, timeslot.topic AS timeslot_topic, timeslot.musicfocus AS timeslot_musicfocus, timeslot.is_repetition AS timeslot_is_repetition
FROM timeslot
WHERE timeslot.timeslot_start >= (builtins.AttributeError) 'NoneType' object has no attribute 'cursor'
[SQL: SELECT timeslot.id AS timeslot_id_1, timeslot.playlist_id AS timeslot_playlist_id, timeslot.default_schedule_playlist_id AS timeslot_default_schedule_playlist_id, timeslot.default_show_playlist_id AS timeslot_default_show_playlist_id, timeslot.schedule_fallback_id AS timeslot_schedule_fallback_id, timeslot.show_fallback_id AS timeslot_show_fallback_id, timeslot.station_fallback_id AS timeslot_station_fallback_id, timeslot.timeslot_start AS timeslot_timeslot_start, timeslot.timeslot_end AS timeslot_timeslot_end, timeslot.timeslot_id AS timeslot_timeslot_id, timeslot.show_id AS timeslot_show_id, timeslot.show_name AS timeslot_show_name, timeslot.show_hosts AS timeslot_show_hosts, timeslot.funding_category AS timeslot_funding_category, timeslot.comment AS timeslot_comment, timeslot.languages AS timeslot_languages, timeslot.type AS timeslot_type, timeslot.category AS timeslot_category, timeslot.topic AS timeslot_topic, timeslot.musicfocus AS timeslot_musicfocus, timeslot.is_repetition AS timeslot_is_repetition
FROM timeslot
WHERE timeslot.timeslot_start >= %s ORDER BY timeslot.timeslot_start]
[parameters: [immutabledict({})]] ORDER BY timeslot.timeslot_start]
[parameters: [immutabledict({})]])
```1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/74Failure handling for invalid or broken Audio Streams2023-11-21T14:14:12+01:00David TrattnigFailure handling for invalid or broken Audio StreamsCurrent: Connecting to some invalid stream URL is continuously retried, which breaks other schedules.
Expected: Keep retrying, but only until the end of the playlist entry (expanded end-time, if no duration is provided via API)Current: Connecting to some invalid stream URL is continuously retried, which breaks other schedules.
Expected: Keep retrying, but only until the end of the playlist entry (expanded end-time, if no duration is provided via API)1.0-alpha5Chris PastlChris Pastlhttps://gitlab.servus.at/aura/engine/-/issues/73Engine to work with PostgreSQL by default2021-07-05T12:55:21+02:00David TrattnigEngine to work with PostgreSQL by defaultDefault for our Docker composeDefault for our Docker composeAura 0.9David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/72Liquidsoap Server as separate "engine-core" project to improve container modu...2021-11-19T23:16:36+01:00David TrattnigLiquidsoap Server as separate "engine-core" project to improve container modularizationAura 0.9David TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/71Error "Duplicate entry for key 'timeslot_id'" due to trying to save existing ...2022-01-21T19:45:24+01:00David TrattnigError "Duplicate entry for key 'timeslot_id'" due to trying to save existing timeslotTry to schedule an timeslot before at least one schedule cycle.
```
- [control.py:387-log_commands()]
2021-01-18 17:36:32,820:AuraEngine:INFO - == start fetching new timeslots (every 30 seconds) == - [scheduler.py:105-run()]
--- Loggin...Try to schedule an timeslot before at least one schedule cycle.
```
- [control.py:387-log_commands()]
2021-01-18 17:36:32,820:AuraEngine:INFO - == start fetching new timeslots (every 30 seconds) == - [scheduler.py:105-run()]
--- Logging error ---
Traceback (most recent call last):
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1283, in _execute_context
self.dialect.do_execute(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 590, in do_execute
cursor.execute(statement, parameters)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 247, in execute
res = self._query(query)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 374, in _do_query
db.query(q)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/connections.py", line 277, in query
_mysql.connection.query(self, query)
_mysql_exceptions.IntegrityError: (1062, "Duplicate entry '361' for key 'timeslot_id'")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/david/Code/aura/engine/src/scheduling/scheduler.py", line 108, in run
self.programme.refresh()
File "/home/david/Code/aura/engine/src/scheduling/programme.py", line 79, in refresh
self.timeslots = self.programme_store.store_timeslots(response)
File "/home/david/Code/aura/engine/src/scheduling/programme.py", line 291, in store_timeslots
timeslot_db = self.store_timeslot(timeslot)
File "/home/david/Code/aura/engine/src/scheduling/programme.py", line 390, in store_timeslot
timeslot_db.store(add=havetoadd, commit=True)
File "/home/david/Code/aura/engine/src/scheduling/models.py", line 77, in store
DB.session.commit()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1042, in commit
self.transaction.commit()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 504, in commit
self._prepare_impl()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 483, in _prepare_impl
self.session.flush()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2523, in flush
self._flush(objects)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2664, in _flush
transaction.rollback(_capture_exception=True)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 68, in __exit__
compat.raise_(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
raise exception
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2624, in _flush
flush_context.execute()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
rec.execute(self)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 586, in execute
persistence.save_obj(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 239, in save_obj
_emit_insert_statements(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1135, in _emit_insert_statements
result = cached_connections[connection].execute(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1020, in execute
return meth(self, multiparams, params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1133, in _execute_clauseelement
ret = self._execute_context(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1323, in _execute_context
self._handle_dbapi_exception(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1517, in _handle_dbapi_exception
util.raise_(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
raise exception
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1283, in _execute_context
self.dialect.do_execute(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 590, in do_execute
cursor.execute(statement, parameters)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 247, in execute
res = self._query(query)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 374, in _do_query
db.query(q)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/connections.py", line 277, in query
_mysql.connection.query(self, query)
sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1062, "Duplicate entry '361' for key 'timeslot_id'")
[SQL: INSERT INTO timeslot (playlist_id, default_schedule_playlist_id, default_show_playlist_id, schedule_fallback_id, show_fallback_id, station_fallback_id, timeslot_start, timeslot_end, timeslot_id, show_id, show_name, show_hosts, funding_category, comment, languages, type, category, topic, musicfocus, is_repetition) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
[parameters: (None, None, 9, None, None, None, '2021-01-18T17:38:00', '2021-01-18T17:40:00', 361, 1, 'Musikprogramm', 'Musikredaktion', 'Standard', None, 'Farsi', 'Unmoderiertes Musikprogramm', '', '', '', 0)]
(Background on this error at: http://sqlalche.me/e/gkpj)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/logging/__init__.py", line 1081, in emit
msg = self.format(record)
File "/usr/lib/python3.8/logging/__init__.py", line 925, in format
return fmt.format(record)
File "/usr/lib/python3.8/logging/__init__.py", line 664, in format
record.message = record.getMessage()
File "/usr/lib/python3.8/logging/__init__.py", line 369, in getMessage
msg = msg % self.args
TypeError: not enough arguments for format string
Call stack:
File "/home/david/.vscode/extensions/ms-python.python-2020.12.424452561/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py", line 916, in __call__
ret = self.original_func(*self.args, **self.kwargs)
File "/usr/lib/python3.8/threading.py", line 890, in _bootstrap
self._bootstrap_inner()
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/home/david/Code/aura/engine/src/scheduling/scheduler.py", line 115, in run
self.logger.critical(SU.red(f"Unhandled error while fetching & scheduling new programme! ({str(e)})"), e)
Message: '\x1b[31mUnhandled error while fetching & scheduling new programme! ((_mysql_exceptions.IntegrityError) (1062, "Duplicate entry \'361\' for key \'timeslot_id\'")\n[SQL: INSERT INTO timeslot (playlist_id, default_schedule_playlist_id, default_show_playlist_id, schedule_fallback_id, show_fallback_id, station_fallback_id, timeslot_start, timeslot_end, timeslot_id, show_id, show_name, show_hosts, funding_category, comment, languages, type, category, topic, musicfocus, is_repetition) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]\n[parameters: (None, None, 9, None, None, None, \'2021-01-18T17:38:00\', \'2021-01-18T17:40:00\', 361, 1, \'Musikprogramm\', \'Musikredaktion\', \'Standard\', None, \'Farsi\', \'Unmoderiertes Musikprogramm\', \'\', \'\', \'\', 0)]\n(Background on this error at: http://sqlalche.me/e/gkpj))\x1b[0m'
Arguments: (IntegrityError('(_mysql_exceptions.IntegrityError) (1062, "Duplicate entry \'361\' for key \'timeslot_id\'")'),)
--- Logging error ---
Traceback (most recent call last):
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1283, in _execute_context
self.dialect.do_execute(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 590, in do_execute
cursor.execute(statement, parameters)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 247, in execute
res = self._query(query)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 374, in _do_query
db.query(q)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/connections.py", line 277, in query
_mysql.connection.query(self, query)
_mysql_exceptions.IntegrityError: (1062, "Duplicate entry '361' for key 'timeslot_id'")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/david/Code/aura/engine/src/scheduling/scheduler.py", line 108, in run
self.programme.refresh()
File "/home/david/Code/aura/engine/src/scheduling/programme.py", line 79, in refresh
self.timeslots = self.programme_store.store_timeslots(response)
File "/home/david/Code/aura/engine/src/scheduling/programme.py", line 291, in store_timeslots
timeslot_db = self.store_timeslot(timeslot)
File "/home/david/Code/aura/engine/src/scheduling/programme.py", line 390, in store_timeslot
timeslot_db.store(add=havetoadd, commit=True)
File "/home/david/Code/aura/engine/src/scheduling/models.py", line 77, in store
DB.session.commit()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1042, in commit
self.transaction.commit()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 504, in commit
self._prepare_impl()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 483, in _prepare_impl
self.session.flush()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2523, in flush
self._flush(objects)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2664, in _flush
transaction.rollback(_capture_exception=True)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 68, in __exit__
compat.raise_(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
raise exception
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2624, in _flush
flush_context.execute()
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
rec.execute(self)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 586, in execute
persistence.save_obj(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 239, in save_obj
_emit_insert_statements(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1135, in _emit_insert_statements
result = cached_connections[connection].execute(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1020, in execute
return meth(self, multiparams, params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1133, in _execute_clauseelement
ret = self._execute_context(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1323, in _execute_context
self._handle_dbapi_exception(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1517, in _handle_dbapi_exception
util.raise_(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise_
raise exception
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1283, in _execute_context
self.dialect.do_execute(
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 590, in do_execute
cursor.execute(statement, parameters)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 247, in execute
res = self._query(query)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/cursors.py", line 374, in _do_query
db.query(q)
File "/home/david/Code/aura/engine/python/lib/python3.8/site-packages/MySQLdb/connections.py", line 277, in query
_mysql.connection.query(self, query)
sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1062, "Duplicate entry '361' for key 'timeslot_id'")
[SQL: INSERT INTO timeslot (playlist_id, default_schedule_playlist_id, default_show_playlist_id, schedule_fallback_id, show_fallback_id, station_fallback_id, timeslot_start, timeslot_end, timeslot_id, show_id, show_name, show_hosts, funding_category, comment, languages, type, category, topic, musicfocus, is_repetition) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
[parameters: (None, None, 9, None, None, None, '2021-01-18T17:38:00', '2021-01-18T17:40:00', 361, 1, 'Musikprogramm', 'Musikredaktion', 'Standard', None, 'Farsi', 'Unmoderiertes Musikprogramm', '', '', '', 0)]
(Background on this error at: http://sqlalche.me/e/gkpj)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/logging/__init__.py", line 1081, in emit
msg = self.format(record)
File "/usr/lib/python3.8/logging/__init__.py", line 925, in format
return fmt.format(record)
File "/usr/lib/python3.8/logging/__init__.py", line 664, in format
record.message = record.getMessage()
File "/usr/lib/python3.8/logging/__init__.py", line 369, in getMessage
msg = msg % self.args
TypeError: not enough arguments for format string
Call stack:
File "/home/david/.vscode/extensions/ms-python.python-2020.12.424452561/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py", line 916, in __call__
ret = self.original_func(*self.args, **self.kwargs)
File "/usr/lib/python3.8/threading.py", line 890, in _bootstrap
self._bootstrap_inner()
File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/home/david/Code/aura/engine/src/scheduling/scheduler.py", line 115, in run
self.logger.critical(SU.red(f"Unhandled error while fetching & scheduling new programme! ({str(e)})"), e)
Message: '\x1b[31mUnhandled error while fetching & scheduling new programme! ((_mysql_exceptions.IntegrityError) (1062, "Duplicate entry \'361\' for key \'timeslot_id\'")\n[SQL: INSERT INTO timeslot (playlist_id, default_schedule_playlist_id, default_show_playlist_id, schedule_fallback_id, show_fallback_id, station_fallback_id, timeslot_start, timeslot_end, timeslot_id, show_id, show_name, show_hosts, funding_category, comment, languages, type, category, topic, musicfocus, is_repetition) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]\n[parameters: (None, None, 9, None, None, None, \'2021-01-18T17:38:00\', \'2021-01-18T17:40:00\', 361, 1, \'Musikprogramm\', \'Musikredaktion\', \'Standard\', None, \'Farsi\', \'Unmoderiertes Musikprogramm\', \'\', \'\', \'\', 0)]\n(Background on this error at: http://sqlalche.me/e/gkpj))\x1b[0m'
Arguments: (IntegrityError('(_mysql_exceptions.IntegrityError) (1062, "Duplicate entry \'361\' for key \'timeslot_id\'")'),)
```1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/70Engine Installation: Missing Parts2021-02-19T18:45:49+01:00Hermann SchwärzlerEngine Installation: Missing PartsAfter following the installation instruction we tried to start the services. This failed because there were some packages missing, an error in the lqs service file and a directory missing.
we did the following to fix it:
* create the l...After following the installation instruction we tried to start the services. This failed because there were some packages missing, an error in the lqs service file and a directory missing.
we did the following to fix it:
* create the logs directory: `engineuser@auratest:/opt/aura/engine$ mkdir logs`
* fix the service file:
```
--- config/systemd/aura-engine-lqs.service 2021-01-15 14:13:53.029441863 +0100
+++ /etc/systemd/system/aura-engine-lqs.service 2021-01-15 14:54:51.950204405 +0100
@@ -7,7 +7,7 @@
Type=simple
User=engineuser
WorkingDirectory=/opt/aura/engine
-ExecStart=/opt/aura/engine/engine/run.sh lqs
+ExecStart=/opt/aura/engine/run.sh lqs
Restart=always
[Install]
```
* install the missing packages: `sudo pip3 install flask flask_sqlalchemy http_parser mysqlclient`
This seems to be missing in the installation guide, or did we miss something?1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/69Engine Installation Documentation: Liquidsoap Repo2021-02-19T18:41:28+01:00Hermann SchwärzlerEngine Installation Documentation: Liquidsoap RepoWhat exactly is meant by
```
Engine requires at least `Liquidsoap 1.4.3` or newer, installed using [OPAM (OCaml Package Manager)](https://opam.ocaml.org/).
Add the current Liquidsoap repository from [this installation guide](https://w...What exactly is meant by
```
Engine requires at least `Liquidsoap 1.4.3` or newer, installed using [OPAM (OCaml Package Manager)](https://opam.ocaml.org/).
Add the current Liquidsoap repository from [this installation guide](https://www.liquidsoap.info/doc-1.4.3/install.html).
```
In the Liquidsoap installation guide there is no *repository* mentioned. Do you perchance mean:
```
opam init
opam switch create 4.08.0
opam depext taglib mad lame vorbis cry samplerate liquidsoap
```1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/68Some minimal test cases for Engine2022-01-20T16:53:59+01:00David TrattnigSome minimal test cases for Engine1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/67Fade-out fallback playout when returning to scheduled playout2023-02-09T15:38:55+01:00David TrattnigFade-out fallback playout when returning to scheduled playout1.0-alpha1 — 🚢🦆 Dockland DucklingDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/66Use audio playlist folder for station fallback playlist2020-12-17T12:52:35+01:00David TrattnigUse audio playlist folder for station fallback playlistInstead of the hardcoded "config/playlist" folder use the configurable `audio_playlist_folder` for station fallbacks.Instead of the hardcoded "config/playlist" folder use the configurable `audio_playlist_folder` for station fallbacks.1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/65[EPIC] Refactor Liquidsoap client module2022-08-19T10:02:48+02:00David Trattnig[EPIC] Refactor Liquidsoap client moduleThis is one of the last Comba leftovers which have not been refactored yet: `src/client/**`
Especially keep an eye on transparent and performant transaction handling.This is one of the last Comba leftovers which have not been refactored yet: `src/client/**`
Especially keep an eye on transparent and performant transaction handling.1.0-alpha2 — ⚖️🐦 Precise PheasantDavid TrattnigDavid Trattnighttps://gitlab.servus.at/aura/engine/-/issues/64Denoise continuous Liquidsoap logging due to heartbeat status requests2024-02-07T12:24:11+01:00David TrattnigDenoise continuous Liquidsoap logging due to heartbeat status requestsBecause of the ongoing heartbeat pulses the Liquidsoap log file gets filled up pretty quickly. It might be worth reviewing the connection handling (Related #65)
```
2020/12/16 11:47:28 [server:3] New client unix socket "".
2020/12/16 11...Because of the ongoing heartbeat pulses the Liquidsoap log file gets filled up pretty quickly. It might be worth reviewing the connection handling (Related #65)
```
2020/12/16 11:47:28 [server:3] New client unix socket "".
2020/12/16 11:47:28 [server:3] Client unix socket "" disconnected.
2020/12/16 11:47:29 [server:3] New client unix socket "".
2020/12/16 11:47:29 [server:3] Client unix socket "" disconnected.
2020/12/16 11:47:30 [server:3] New client unix socket "".
2020/12/16 11:47:30 [server:3] Client unix socket "" disconnected.
2020/12/16 11:47:31 [server:3] New client unix socket "".
2020/12/16 11:47:31 [server:3] Client unix socket "" disconnected.
2020/12/16 11:47:32 [server:3] New client unix socket "".
2020/12/16 11:47:32 [server:3] Client unix socket "" disconnected.
2020/12/16 11:47:33 [server:3] New client unix socket "".
2020/12/16 11:47:33 [server:3] Client unix socket "" disconnected.
2020/12/16 11:47:34 [server:3] New client unix socket "".
2020/12/16 11:47:34 [server:3] Client unix socket "" disconnected.
2020/12/16 11:47:35 [server:3] New client unix socket "".
2020/12/16 11:47:35 [server:3] Client unix socket "" disconnected.
```1.0-alpha1 — 🚢🦆 Dockland DucklingDavid TrattnigDavid Trattnig