influxDB: add test URL valid

This commit is contained in:
Ryan Tang 2023-02-13 18:40:02 -05:00
parent 8a48d43e7e
commit 86dfc176af
4 changed files with 60 additions and 10 deletions

View File

@ -19,6 +19,12 @@ void InfluxDB::SetURL(std::string url){
this->databaseIP = url;
}
bool InfluxDB::TestingConnection(){
ShowDatabases();
if( respond != CURLE_OK ) return false;
return true;
}
std::string InfluxDB::ShowDatabases(){
curl_easy_setopt(curl, CURLOPT_POST, 1);
@ -34,7 +40,9 @@ std::string InfluxDB::ShowDatabases(){
Execute();
printf("|%s|\n", readBuffer.c_str());
//printf("|%s|\n", readBuffer.c_str());
if( respond != CURLE_OK) return "";
databaseList.clear();
@ -88,7 +96,7 @@ std::string InfluxDB::Query(std::string databaseName, std::string query){
Execute();
printf("|%s|\n", readBuffer.c_str());
//printf("|%s|\n", readBuffer.c_str());
return readBuffer;
}
@ -129,7 +137,7 @@ void InfluxDB::Execute(){
respond = curl_easy_perform(curl);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &respondCode);
//printf("==== respond code %ld \n", respondCode);
if( respond != CURLE_OK) printf("############# fail\n");
if( respond != CURLE_OK) printf("############# InfluxDB::Execute fail\n");
}
size_t InfluxDB::WriteCallBack(char *contents, size_t size, size_t nmemb, void *userp){

View File

@ -10,6 +10,8 @@
class InfluxDB{
private:
bool isURLValid;
CURL * curl;
CURLcode respond;
long respondCode;
@ -29,6 +31,8 @@ class InfluxDB{
~InfluxDB();
void SetURL(std::string url);
bool TestingConnection();
bool IsURLValid() const {return isURLValid;}
/// Query
std::string ShowDatabases(); /// this save the list of database into databaseList

View File

@ -30,6 +30,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){
nDigi = 0;
digiSetting = NULL;
influx = NULL;
readDataThread = NULL;
scope = NULL;
@ -236,6 +237,8 @@ MainWindow::~MainWindow(){
if( scope != NULL ) delete scope;
if( digiSetting != NULL ) delete digiSetting;
if( influx != NULL ) delete influx;
}
//^################################################################ ACQ control
@ -502,6 +505,8 @@ void MainWindow::UpdateScalar(){
lbLastUpdateTime->setText("Last update: " + QDateTime::currentDateTime().toString("MM.dd hh:mm:ss"));
if( influx ) influx->ClearDataPointsBuffer();
///===== Get trigger for all channel
for( int iDigi = 0; iDigi < nDigi; iDigi ++ ){
if( digi[iDigi]->IsDummy() ) return;
@ -515,23 +520,34 @@ void MainWindow::UpdateScalar(){
//}
//=========== another method, directly readValue
std::string haha[MaxNumberOfChannel] = {""};
double acceptRate[MaxNumberOfChannel] = {0};
digiMTX.lock();
for( int ch = 0; ch < digi[iDigi]->GetNChannels(); ch ++){
std::string time = digi[iDigi]->ReadChValue(std::to_string(ch), DIGIPARA::CH::ChannelRealtime); // for refreashing SelfTrgRate and SavedCount
std::string haha = digi[iDigi]->ReadChValue(std::to_string(ch), DIGIPARA::CH::SelfTrgRate);
leTrigger[iDigi][ch]->setText(QString::fromStdString(haha));
haha[ch] = digi[iDigi]->ReadChValue(std::to_string(ch), DIGIPARA::CH::SelfTrgRate);
leTrigger[iDigi][ch]->setText(QString::fromStdString(haha[ch]));
std::string kaka = digi[iDigi]->ReadChValue(std::to_string(ch), DIGIPARA::CH::ChannelSavedCount);
double acceptRate = atoi(kaka.c_str())*1e9*1.0 / atol(time.c_str());
acceptRate[ch] = atoi(kaka.c_str())*1e9*1.0 / atol(time.c_str());
//if( kaka != "0" ) {
// printf("%s, %s | %.2f\n", time.c_str(), kaka.c_str(), acceptRate);
//}
leAccept[iDigi][ch]->setText(QString::number(acceptRate,'f', 1));
///TODO============== push the trigger, acceptRate rate database
leAccept[iDigi][ch]->setText(QString::number(acceptRate[ch],'f', 1));
}
digiMTX.unlock();
///============== push the trigger, acceptRate rate database
if( influx ){
for( int ch = 0; ch < digi[iDigi]->GetNChannels(); ch++ ){
influx->AddDataPoint("Rate,Bd=" + std::to_string(digi[iDigi]->GetSerialNumber()) + ",Ch=" + std::to_string(ch) + " value=" + haha[ch]);
}
}
}
influx->WriteData(DatabaseName.toStdString());
influx->ClearDataPointsBuffer();
}
@ -721,6 +737,7 @@ bool MainWindow::OpenProgramSettings(){
if( ret ){
DecodeIPList();
SetupInflux();
return true;
}else{
@ -752,6 +769,24 @@ void MainWindow::DecodeIPList(){
nDigi = IPList.size();
}
void MainWindow::SetupInflux(){
if( influx ) {
delete influx;
influx = NULL;
}
if( DatabaseIP != ""){
influx = new InfluxDB(DatabaseIP.toStdString(), false);
if( influx->TestingConnection() ){
LogMsg("InfluxDB URL (<b>"+ DatabaseIP + "</b>) is Valid");
}else{
LogMsg("<font style=\"color : red;\"> InfluxDB URL (<b>"+ DatabaseIP + "</b>) is NOT Valid </font>");
delete influx;
influx = NULL;
}
}
}
void MainWindow::SaveProgramSettings(){
IPListStr = lIPDomain->text();
@ -784,6 +819,7 @@ void MainWindow::SaveProgramSettings(){
bnOpenDigitizers->setEnabled(true);
DecodeIPList();
SetupInflux();
OpenExpSettings();

View File

@ -52,6 +52,7 @@ private slots:
bool OpenProgramSettings();
void SaveProgramSettings();
void DecodeIPList();
void SetupInflux();
void OpenDirectory(int id);
void SetupNewExp();
@ -93,6 +94,7 @@ private:
QGridLayout * scalarLayout;
ScalarThread * scalarThread;
QLabel * lbLastUpdateTime;
InfluxDB * influx;
//@------ ACQ things
QPushButton * bnStartACQ;