Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
aura-engine
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Lars Kruse
aura-engine
Commits
4c678f82
Commit
4c678f82
authored
4 years ago
by
David Trattnig
Browse files
Options
Downloads
Patches
Plain Diff
Clean timer queue and scheduling fixes.
parent
19c407f8
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
modules/scheduling/scheduler.py
+26
-12
26 additions, 12 deletions
modules/scheduling/scheduler.py
with
26 additions
and
12 deletions
modules/scheduling/scheduler.py
+
26
−
12
View file @
4c678f82
...
@@ -75,7 +75,7 @@ class AuraScheduler(threading.Thread):
...
@@ -75,7 +75,7 @@ class AuraScheduler(threading.Thread):
programme: The current radio programme to be played as defined in the local engine database
programme: The current radio programme to be played as defined in the local engine database
active_entry(Show, Track): This is a Tuple consisting of the currently played `Show` and `Track`
active_entry(Show, Track): This is a Tuple consisting of the currently played `Show` and `Track`
message_timer(
Array
<threading.Timer>): The
message
queue of Liquidsoap commands for playlists/
track
s to be played
message_timer(
List
<threading.Timer>):
The
timer
queue of Liquidsoap commands for playlists/
entrie
s to be played
"""
"""
redismessenger
=
None
redismessenger
=
None
job_result
=
{}
job_result
=
{}
...
@@ -140,6 +140,7 @@ class AuraScheduler(threading.Thread):
...
@@ -140,6 +140,7 @@ class AuraScheduler(threading.Thread):
while
not
self
.
exit_event
.
is_set
():
while
not
self
.
exit_event
.
is_set
():
try
:
try
:
seconds_to_wait
=
int
(
self
.
config
.
get
(
"
fetching_frequency
"
))
seconds_to_wait
=
int
(
self
.
config
.
get
(
"
fetching_frequency
"
))
self
.
logger
.
info
(
SimpleUtil
.
cyan
(
"
== start fetching new schedules ==
"
))
next_time
=
datetime
.
datetime
.
now
()
+
datetime
.
timedelta
(
seconds
=
seconds_to_wait
)
next_time
=
datetime
.
datetime
.
now
()
+
datetime
.
timedelta
(
seconds
=
seconds_to_wait
)
self
.
logger
.
info
(
"
Fetch new programmes every %ss. Next fetching in %ss.
"
%
(
str
(
seconds_to_wait
),
str
(
next_time
)))
self
.
logger
.
info
(
"
Fetch new programmes every %ss. Next fetching in %ss.
"
%
(
str
(
seconds_to_wait
),
str
(
next_time
)))
self
.
fetch_new_programme
()
self
.
fetch_new_programme
()
...
@@ -156,9 +157,9 @@ class AuraScheduler(threading.Thread):
...
@@ -156,9 +157,9 @@ class AuraScheduler(threading.Thread):
except
Exception
as
e
:
except
Exception
as
e
:
self
.
logger
.
critical
(
SimpleUtil
.
red
(
"
Unhandled error while fetching & scheduling new programme! (%s)
"
%
str
(
e
)),
e
)
self
.
logger
.
critical
(
SimpleUtil
.
red
(
"
Unhandled error while fetching & scheduling new programme! (%s)
"
%
str
(
e
)),
e
)
self
.
print_message_queue
()
self
.
clean_timer_queue
()
self
.
print_timer_queue
()
self
.
exit_event
.
wait
(
seconds_to_wait
)
self
.
exit_event
.
wait
(
seconds_to_wait
)
self
.
logger
.
info
(
SimpleUtil
.
cyan
(
"
== start fetching new schedules ==
"
))
...
@@ -330,19 +331,31 @@ class AuraScheduler(threading.Thread):
...
@@ -330,19 +331,31 @@ class AuraScheduler(threading.Thread):
def
print_
message
_queue
(
self
):
def
print_
timer
_queue
(
self
):
"""
"""
Prints the current
message
queue i.e. playlists in the queue to be played.
Prints the current
timer
queue i.e. playlists in the queue to be played.
"""
"""
message_queue
=
""
message_queue
=
""
messages
=
sorted
(
self
.
message_timer
,
key
=
attrgetter
(
'
diff
'
))
messages
=
sorted
(
self
.
message_timer
,
key
=
attrgetter
(
'
diff
'
))
if
not
messages
:
if
not
messages
:
self
.
logger
.
warning
(
"
There
'
s nothing in the
Message
Queue!
"
)
self
.
logger
.
warning
(
"
There
'
s nothing in the
Timer
Queue!
"
)
else
:
else
:
for
msg
in
messages
:
for
msg
in
messages
:
message_queue
+=
str
(
msg
)
+
"
\n
"
message_queue
+=
str
(
msg
)
+
"
\n
"
self
.
logger
.
info
(
"
Message Queue:
\n
"
+
message_queue
)
self
.
logger
.
info
(
"
Timer queue:
\n
"
+
message_queue
)
def
clean_timer_queue
(
self
):
"""
Removes inactive timers from the queue.
"""
len_before
=
len
(
self
.
message_timer
)
self
.
message_timer
[:]
=
[
m
for
m
in
self
.
message_timer
if
m
.
is_alive
()]
len_after
=
len
(
self
.
message_timer
)
self
.
logger
.
info
(
"
Removed %s finished timer objects from queue
"
%
(
len_before
-
len_after
))
# ------------------------------------------------------------------------------------------ #
# ------------------------------------------------------------------------------------------ #
...
@@ -601,7 +614,7 @@ class AuraScheduler(threading.Thread):
...
@@ -601,7 +614,7 @@ class AuraScheduler(threading.Thread):
if
not
isinstance
(
entries
,
list
):
if
not
isinstance
(
entries
,
list
):
raise
ValueError
(
"
Invalid Entry Group: %s
"
%
str
(
entries
))
raise
ValueError
(
"
Invalid Entry Group: %s
"
%
str
(
entries
))
self
.
set_entr
y
_timer
(
entries
,
fade_in
,
fade_out
)
self
.
set_entr
ies
_timer
(
entries
,
fade_in
,
fade_out
)
# Check if it's the last item, which needs special handling
# Check if it's the last item, which needs special handling
if
entries
[
-
1
]
==
clean_entries
[
-
1
]:
if
entries
[
-
1
]
==
clean_entries
[
-
1
]:
...
@@ -612,7 +625,7 @@ class AuraScheduler(threading.Thread):
...
@@ -612,7 +625,7 @@ class AuraScheduler(threading.Thread):
def
set_entr
y
_timer
(
self
,
entries
,
fade_in
,
fade_out
):
def
set_entr
ies
_timer
(
self
,
entries
,
fade_in
,
fade_out
):
"""
"""
Creates timer for loading and playing one or multiple entries. Existing timers are
Creates timer for loading and playing one or multiple entries. Existing timers are
updated.
updated.
...
@@ -699,7 +712,8 @@ class AuraScheduler(threading.Thread):
...
@@ -699,7 +712,8 @@ class AuraScheduler(threading.Thread):
fade_out_time
=
0
fade_out_time
=
0
# Stop function to be called when schedule ends
# Stop function to be called when schedule ends
def
do_stop
(
entry
):
def
do_stop
(
entries
):
entry
=
entries
[
0
]
self
.
logger
.
info
(
SimpleUtil
.
cyan
(
"
=== stop(
'
%s
'
) ===
"
%
entry
))
self
.
logger
.
info
(
SimpleUtil
.
cyan
(
"
=== stop(
'
%s
'
) ===
"
%
entry
))
transition_type
=
TransitionType
.
INSTANT
transition_type
=
TransitionType
.
INSTANT
if
fade_out
:
if
fade_out
:
...
@@ -854,7 +868,7 @@ class AuraScheduler(threading.Thread):
...
@@ -854,7 +868,7 @@ class AuraScheduler(threading.Thread):
# Remove it from message queue
# Remove it from message queue
self
.
message_timer
.
remove
(
timer
)
self
.
message_timer
.
remove
(
timer
)
self
.
logger
.
info
(
"
Remov
ed %s timers for: %s
"
%
(
str
(
count
),
EngineUtil
.
get_entries_string
(
timer
.
entries
)))
self
.
logger
.
info
(
"
Stopp
ed %s timers for: %s
"
%
(
str
(
count
),
EngineUtil
.
get_entries_string
(
timer
.
entries
)))
...
@@ -932,7 +946,7 @@ class CallFunctionTimer(threading.Timer):
...
@@ -932,7 +946,7 @@ class CallFunctionTimer(threading.Timer):
self
.
logger
=
logging
.
getLogger
(
"
AuraEngine
"
)
self
.
logger
=
logging
.
getLogger
(
"
AuraEngine
"
)
self
.
logger
.
debug
(
"
Executing soundsystem command
'
%s
'
in %s seconds...
"
%
(
str
(
func
.
__name__
),
str
(
diff
)))
self
.
logger
.
debug
(
"
Executing soundsystem command
'
%s
'
in %s seconds...
"
%
(
str
(
func
.
__name__
),
str
(
diff
)))
threading
.
Timer
.
__init__
(
self
,
diff
,
func
,
param
)
threading
.
Timer
.
__init__
(
self
,
diff
,
func
,
(
param
,)
)
if
not
fadein
and
not
fadeout
and
not
switcher
and
not
loader
\
if
not
fadein
and
not
fadeout
and
not
switcher
and
not
loader
\
or
fadein
and
fadeout
\
or
fadein
and
fadeout
\
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment