Add Radar Product Manager debug dump

- Allows visibility of currently loaded products
This commit is contained in:
Dan Paulat 2023-04-06 23:33:39 -05:00
parent 6e10ca88d5
commit 871cae68dd
5 changed files with 73 additions and 3 deletions

View file

@ -357,6 +357,11 @@ void MainWindow::on_actionImGuiDebug_triggered()
p->imGuiDebugDialog_->show(); p->imGuiDebugDialog_->show();
} }
void MainWindow::on_actionDumpRadarProductRecords_triggered()
{
manager::RadarProductManager::DumpRecords();
}
void MainWindow::on_actionUserManual_triggered() void MainWindow::on_actionUserManual_triggered()
{ {
QDesktopServices::openUrl(QUrl {"https://supercell-wx.readthedocs.io/"}); QDesktopServices::openUrl(QUrl {"https://supercell-wx.readthedocs.io/"});

View file

@ -37,6 +37,7 @@ private slots:
void on_actionSettings_triggered(); void on_actionSettings_triggered();
void on_actionExit_triggered(); void on_actionExit_triggered();
void on_actionImGuiDebug_triggered(); void on_actionImGuiDebug_triggered();
void on_actionDumpRadarProductRecords_triggered();
void on_actionUserManual_triggered(); void on_actionUserManual_triggered();
void on_actionDiscord_triggered(); void on_actionDiscord_triggered();
void on_actionGitHubRepository_triggered(); void on_actionGitHubRepository_triggered();

View file

@ -83,6 +83,8 @@
<string>&amp;Debug</string> <string>&amp;Debug</string>
</property> </property>
<addaction name="actionImGuiDebug"/> <addaction name="actionImGuiDebug"/>
<addaction name="separator"/>
<addaction name="actionDumpRadarProductRecords"/>
</widget> </widget>
<addaction name="menuFile"/> <addaction name="menuFile"/>
<addaction name="menuView"/> <addaction name="menuView"/>
@ -397,6 +399,11 @@
<string>&amp;GitHub Repository</string> <string>&amp;GitHub Repository</string>
</property> </property>
</action> </action>
<action name="actionDumpRadarProductRecords">
<property name="text">
<string>Dump Radar &amp;Product Records</string>
</property>
</action>
</widget> </widget>
<resources> <resources>
<include location="../../../../scwx-qt.qrc"/> <include location="../../../../scwx-qt.qrc"/>

View file

@ -54,8 +54,8 @@ static const std::string kDefaultLevel3Product_ {"N0B"};
static constexpr std::chrono::seconds kRetryInterval_ {15}; static constexpr std::chrono::seconds kRetryInterval_ {15};
static std::unordered_map<std::string, std::weak_ptr<RadarProductManager>> static std::unordered_map<std::string, std::weak_ptr<RadarProductManager>>
instanceMap_; instanceMap_;
static std::mutex instanceMutex_; static std::shared_mutex instanceMutex_;
static std::unordered_map<std::string, static std::unordered_map<std::string,
std::shared_ptr<types::RadarProductRecord>> std::shared_ptr<types::RadarProductRecord>>
@ -276,6 +276,58 @@ void RadarProductManager::Cleanup()
} }
} }
void RadarProductManager::DumpRecords()
{
scwx::util::async(
[]
{
logger_->info("Record Dump");
std::shared_lock instanceLock {instanceMutex_};
for (auto& instance : instanceMap_)
{
auto radarProductManager = instance.second.lock();
if (radarProductManager != nullptr)
{
logger_->info(" {}", radarProductManager->radar_site()->id());
logger_->info(" Level 2");
{
std::shared_lock level2ProductLock {
radarProductManager->p->level2ProductRecordMutex_};
for (auto& record :
radarProductManager->p->level2ProductRecords_)
{
logger_->info(" {}",
scwx::util::TimeString(record.first));
}
}
logger_->info(" Level 3");
{
std::shared_lock level3ProductLock {
radarProductManager->p->level3ProductRecordMutex_};
for (auto& recordMap :
radarProductManager->p->level3ProductRecordsMap_)
{
// Product Name
logger_->info(" {}", recordMap.first);
for (auto& record : recordMap.second)
{
logger_->info(" {}",
scwx::util::TimeString(record.first));
}
}
}
}
}
});
}
const std::vector<float>& const std::vector<float>&
RadarProductManager::coordinates(common::RadialSize radialSize) const RadarProductManager::coordinates(common::RadialSize radialSize) const
{ {
@ -1030,7 +1082,7 @@ RadarProductManager::Instance(const std::string& radarSite)
bool instanceCreated = false; bool instanceCreated = false;
{ {
std::lock_guard<std::mutex> guard(instanceMutex_); std::unique_lock lock {instanceMutex_};
// Look up instance weak pointer // Look up instance weak pointer
auto it = instanceMap_.find(radarSite); auto it = instanceMap_.find(radarSite);

View file

@ -34,6 +34,11 @@ public:
static void Cleanup(); static void Cleanup();
/**
* @brief Debug function to dump currently loaded products to the log.
*/
static void DumpRecords();
const std::vector<float>& coordinates(common::RadialSize radialSize) const; const std::vector<float>& coordinates(common::RadialSize radialSize) const;
float gate_size() const; float gate_size() const;
std::shared_ptr<config::RadarSite> radar_site() const; std::shared_ptr<config::RadarSite> radar_site() const;