Log Message: ----------- Update ServerStatus to pg_logdir_ls Modified Files: -------------- pgadmin3: CHANGELOG.txt (r1.115 -> r1.116) pgadmin3/src/include: frmStatus.h (r1.14 -> r1.15) pgadmin3/src/ui: frmStatus.cpp (r1.31 -> r1.32)
Index: CHANGELOG.txt =================================================================== RCS file: /projects/pgadmin3/CHANGELOG.txt,v retrieving revision 1.115 retrieving revision 1.116 diff -LCHANGELOG.txt -LCHANGELOG.txt -u -w -r1.115 -r1.116 --- CHANGELOG.txt +++ CHANGELOG.txt @@ -16,6 +16,8 @@ </ul> <br> <ul> + <li>2004-01-21 AP Update ServerStatus to pg_logdir_ls + <li>2004-01-21 AP catch SIGPIPE <li>2004-01-20 AP owner, name, comment refactoring in dlgProperty <li>2004-01-20 AP support of function parameters <li>2004-01-20 AP tablespace changes Index: frmStatus.h =================================================================== RCS file: /projects/pgadmin3/src/include/frmStatus.h,v retrieving revision 1.14 retrieving revision 1.15 diff -Lsrc/include/frmStatus.h -Lsrc/include/frmStatus.h -u -w -r1.14 -r1.15 --- src/include/frmStatus.h +++ src/include/frmStatus.h @@ -56,8 +56,10 @@ void addLogFile(const wxString &filename, const wxDateTime timestamp, int pid, long len, long &read, bool skipFirst); void addLogLine(const wxString &str, bool formatted=true); + void checkConnection(); frmMain *mainForm; + wxStatusBar *statusBar; wxString logFormat; bool logHasTimestamp, logFormatKnown; int logFmtPos; Index: frmStatus.cpp =================================================================== RCS file: /projects/pgadmin3/src/ui/frmStatus.cpp,v retrieving revision 1.31 retrieving revision 1.32 diff -Lsrc/ui/frmStatus.cpp -Lsrc/ui/frmStatus.cpp -u -w -r1.31 -r1.32 --- src/ui/frmStatus.cpp +++ src/ui/frmStatus.cpp @@ -81,6 +81,8 @@ RestorePosition(-1, -1, 400, 240, 200, 150); SetTitle(_title); SetIcon(wxIcon(pgAdmin3_xpm)); + statusBar = new wxStatusBar(this, -1); + wxXmlResource::Get()->AttachUnknownControl(wxT("unkStatusBar"), statusBar); mainForm=form; timer=0; @@ -229,6 +231,11 @@ // To avoid hammering the lock manager (and the network for that matter), // only query for the required tab. + wxLogNull nolog; + + if (!connection) + return; + if (nbStatus->GetSelection() == 0) { // Status @@ -237,6 +244,7 @@ if (dataSet1) { statusList->Freeze(); + statusBar->SetStatusText(_("Refreshing.")); while (!dataSet1->Eof()) { pid=dataSet1->GetLong(wxT("procpid")); @@ -285,9 +293,10 @@ statusList->DeleteItem(row); statusList->Thaw(); + statusBar->SetStatusText(_("Done.")); } else - connection->IsAlive(); + checkConnection(); row=0; while (row < statusList->GetItemCount()) @@ -326,6 +335,7 @@ pgSet *dataSet2=connection->ExecuteSet(sql); if (dataSet2) { + statusBar->SetStatusText(_("Refreshing.")); lockList->Freeze(); while (!dataSet2->Eof()) @@ -385,9 +395,10 @@ lockList->DeleteItem(row); lockList->Thaw(); + statusBar->SetStatusText(_("Done.")); } else - connection->IsAlive(); + checkConnection(); row=0; while (row < lockList->GetItemCount()) @@ -401,7 +412,7 @@ } else { - long newlen; + long newlen=0; if (logDirectory.IsEmpty()) { @@ -430,11 +441,22 @@ if (isCurrent) { // check if the current logfile changed - newlen = StrToLong(connection->ExecuteScalar(wxT("SELECT pg_file_length(") + qtString(logfileName) + wxT(")"))); - + pgSet *set = connection->ExecuteSet(wxT("SELECT pg_file_length(") + qtString(logfileName) + wxT(") AS len")); + if (set) + { + newlen = set->GetLong(wxT("len")); + delete set; + } + else + { + checkConnection(); + return; + } if (newlen > logfileLength) { + statusBar->SetStatusText(_("Refreshing.")); addLogFile(logfileName, logfileTimestamp, logfilePid, newlen, logfileLength, false); + statusBar->SetStatusText(_("Done.")); // as long as there was new data, the logfile is probably the current // one so we don't need to check for rotation @@ -479,17 +501,27 @@ } +void frmStatus::checkConnection() +{ + if (!connection->IsAlive()) + { + delete connection; + connection=0; + statusBar->SetStatusText(_("Connection broken.")); + } +} + void frmStatus::addLogFile(wxDateTime *dt, bool skipFirst) { pgSet *set=connection->ExecuteSet( - wxT("SELECT ts, pid, fn, pg_file_length(fn) AS len\n") - wxT(" FROM pg_logfiles_ls() AS (ts timestamp, pid int4, fn text)\n") - wxT(" WHERE ts = '") + DateToAnsiStr(*dt) + wxT("'::timestamp")); + wxT("SELECT filetime, pid, filename, pg_file_length(filename) AS len\n") + wxT(" FROM pg_logdir_ls\n") + wxT(" WHERE filetime = '") + DateToAnsiStr(*dt) + wxT("'::timestamp")); if (set) { - logfileName = set->GetVal(wxT("fn")); - logfileTimestamp = set->GetDateTime(wxT("ts")); + logfileName = set->GetVal(wxT("filename")); + logfileTimestamp = set->GetDateTime(wxT("filetime")); logfilePid = set->GetLong(wxT("pid")); long len=set->GetLong(wxT("len")); @@ -622,7 +654,6 @@ } - void frmStatus::emptyLogfileCombo() { while (cbLogfiles->GetCount()) @@ -736,6 +767,7 @@ OnRefresh(*(wxCommandEvent*)&event); } + void frmStatus::OnTerminateBtn(wxCommandEvent &event) { ctlListView *lv; @@ -772,6 +804,7 @@ OnRefresh(*(wxCommandEvent*)&event); } + void frmStatus::OnSelStatusItem(wxListEvent &event) { if (connection->BackendMinimumVersion(7, 5))
---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faqs/FAQ.html