From 406d42323a85c6dad0f75e387397e68f0aea0efa Mon Sep 17 00:00:00 2001 From: jo Date: Sat, 6 Aug 2022 23:56:58 +0200 Subject: [PATCH] feat: move stream stats status to pref table --- .../migrations/0039_3_0_0_alpha_14_3.py | 29 +++++++++++++++++++ .../legacy/migrations/__init__.py | 2 +- .../application/controllers/ApiController.php | 4 +-- .../controllers/ListenerstatController.php | 10 +++---- legacy/application/models/Preference.php | 17 +++++++++++ legacy/application/models/StreamSetting.php | 23 --------------- playout/libretime_playout/stats.py | 7 ++--- 7 files changed, 57 insertions(+), 35 deletions(-) create mode 100644 api/libretime_api/legacy/migrations/0039_3_0_0_alpha_14_3.py diff --git a/api/libretime_api/legacy/migrations/0039_3_0_0_alpha_14_3.py b/api/libretime_api/legacy/migrations/0039_3_0_0_alpha_14_3.py new file mode 100644 index 000000000..6e24e3aef --- /dev/null +++ b/api/libretime_api/legacy/migrations/0039_3_0_0_alpha_14_3.py @@ -0,0 +1,29 @@ +# pylint: disable=invalid-name + +from django.db import migrations + +from ._migrations import legacy_migration_factory + +UP = """ +delete from cc_stream_setting +where "keyname" like '%_listener_stat_error'; +""" + +DOWN = """ +delete from cc_pref +where "keystr" like 'stream_stats_status:%'; +""" + + +class Migration(migrations.Migration): + dependencies = [ + ("legacy", "0038_3_0_0_alpha_14_2"), + ] + operations = [ + migrations.RunPython( + code=legacy_migration_factory( + target="3.0.0-alpha.14.3", + sql=UP, + ) + ) + ] diff --git a/api/libretime_api/legacy/migrations/__init__.py b/api/libretime_api/legacy/migrations/__init__.py index d3d94c745..3e1a43621 100644 --- a/api/libretime_api/legacy/migrations/__init__.py +++ b/api/libretime_api/legacy/migrations/__init__.py @@ -1 +1 @@ -LEGACY_SCHEMA_VERSION = "3.0.0-alpha.14.2" +LEGACY_SCHEMA_VERSION = "3.0.0-alpha.14.3" diff --git a/legacy/application/controllers/ApiController.php b/legacy/application/controllers/ApiController.php index b519e5e5d..27d7ff12d 100644 --- a/legacy/application/controllers/ApiController.php +++ b/legacy/application/controllers/ApiController.php @@ -1389,8 +1389,8 @@ class ApiController extends Zend_Controller_Action return; } - foreach ($data as $k => $v) { - Application_Model_StreamSetting::SetListenerStatError($k, $v); + foreach ($data as $stream_id => $status) { + Application_Model_Preference::SetListenerStatError($stream_id, $status); } } diff --git a/legacy/application/controllers/ListenerstatController.php b/legacy/application/controllers/ListenerstatController.php index e07cad215..3d4d7697f 100644 --- a/legacy/application/controllers/ListenerstatController.php +++ b/legacy/application/controllers/ListenerstatController.php @@ -41,15 +41,15 @@ class ListenerstatController extends Zend_Controller_Action 'his_time_end' => $endsDT->format('H:i'), ]); - $errorStatus = Application_Model_StreamSetting::GetAllListenerStatErrors(); + $errorStatus = Application_Model_Preference::GetAllListenerStatErrors(); Logging::info($errorStatus); $out = []; foreach ($errorStatus as $v) { - $key = explode('_listener_stat_error', $v['keyname']); - if ($v['value'] != 'OK') { - $v['value'] = _('Please make sure admin user/password is correct on Settings->Streams page.'); + $key = explode(':', $v['keystr']); + if ($v['valstr'] != 'OK') { + $v['valstr'] = _('Please make sure admin user/password is correct on Settings->Streams page.'); } - $out[$key[0]] = $v['value']; + $out['stream ' . $key[1]] = $v['valstr']; } $this->view->errorStatus = $out; diff --git a/legacy/application/models/Preference.php b/legacy/application/models/Preference.php index 9b78a9e41..d9d0cd25f 100644 --- a/legacy/application/models/Preference.php +++ b/legacy/application/models/Preference.php @@ -1677,4 +1677,21 @@ class Application_Model_Preference return ($result !== false) ? $result : null; } + + public static function GetAllListenerStatErrors() + { + $sql = <<<'SQL' +SELECT * +FROM cc_pref +WHERE keystr LIKE 'stream_stats_status:%' +SQL; + + return Application_Common_Database::prepareAndExecute($sql, []); + } + + public static function SetListenerStatError($stream_id, $value) + { + $stream_id = trim($stream_id, 's'); + self::setValue("stream_stats_status:{$stream_id}", $value); + } } diff --git a/legacy/application/models/StreamSetting.php b/legacy/application/models/StreamSetting.php index 6ed30f486..7587dfa8b 100644 --- a/legacy/application/models/StreamSetting.php +++ b/legacy/application/models/StreamSetting.php @@ -436,29 +436,6 @@ class Application_Model_StreamSetting self::setValue($stream . '_admin_pass', $v, 'string'); } - public static function GetAllListenerStatErrors() - { - $sql = 'SELECT * FROM cc_stream_setting WHERE keyname like :p1'; - $mounts = Application_Common_Database::prepareAndExecute($sql, [':p1' => '%_mount']); - - $mps = []; - - foreach ($mounts as $mount) { - $mps[] = "'" . $mount['value'] . "_listener_stat_error'"; - } - - $in = implode(',', $mps); - - $sql = "SELECT * FROM cc_stream_setting WHERE keyname IN ( {$in} )"; - - return Application_Common_Database::prepareAndExecute($sql, []); - } - - public static function SetListenerStatError($key, $v) - { - self::setValue($key, $v, 'string'); - } - public static function getIcecastVorbisMetadata() { return self::getValue('icecast_vorbis_metadata', ''); diff --git a/playout/libretime_playout/stats.py b/playout/libretime_playout/stats.py index 38ae95dad..e9c1910bd 100644 --- a/playout/libretime_playout/stats.py +++ b/playout/libretime_playout/stats.py @@ -122,10 +122,10 @@ class ListenerStat(Thread): stats.append(mount_stats) else: stats.append(self.get_shoutcast_stats(v)) - self.update_listener_stat_error(v["mount"], "OK") + self.update_listener_stat_error(k, "OK") except Exception as e: try: - self.update_listener_stat_error(v["mount"], str(e)) + self.update_listener_stat_error(k, str(e)) except Exception as e: logger.error("Exception: %s", e) @@ -135,8 +135,7 @@ class ListenerStat(Thread): self.legacy_client.push_stream_stats(stats) def update_listener_stat_error(self, stream_id, error): - keyname = "%s_listener_stat_error" % stream_id - data = {keyname: error} + data = {stream_id: error} self.legacy_client.update_stream_setting_table(data) def run(self):