mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-05-15 14:15:49 -06:00
211 lines
5.5 KiB
C++
211 lines
5.5 KiB
C++
#include "pgAdmin3.h"
|
|
#include <wx/file.h>
|
|
#include "frm/frmAwr.h"
|
|
#include "schema/pgObject.h"
|
|
#include <wx/stdpaths.h>
|
|
#include "utils/pgfeatures.h"
|
|
|
|
#define btnOK CTRL_BUTTON("wxID_OK")
|
|
#define rbTypeReport CTRL_RADIOBOX("rbTypeReport")
|
|
#define cbServer CTRL_COMBOBOX("cbServer")
|
|
#define cbStartId1 CTRL_COMBOBOX("cbStartId1")
|
|
#define cbStartId2 CTRL_COMBOBOX("cbStartId2")
|
|
#define cbEndId1 CTRL_COMBOBOX("cbEndId1")
|
|
#define cbEndId2 CTRL_COMBOBOX("cbEndId2")
|
|
|
|
BEGIN_EVENT_TABLE(frmAwr, pgDialog)
|
|
|
|
EVT_RADIOBOX(XRCID("rbTypeReport"), frmAwr::OnChange)
|
|
EVT_COMBOBOX(XRCID("cbStartId1"), frmAwr::OnChange)
|
|
EVT_COMBOBOX(XRCID("cbStartId2"), frmAwr::OnChange)
|
|
EVT_COMBOBOX(XRCID("cbEndId1"), frmAwr::OnChange)
|
|
EVT_COMBOBOX(XRCID("cbEndId2"), frmAwr::OnChange)
|
|
EVT_BUTTON(wxID_OK, frmAwr::OnOK)
|
|
EVT_BUTTON(wxID_CANCEL, frmAwr::OnCancel)
|
|
END_EVENT_TABLE()
|
|
|
|
|
|
reportAwrFactory::reportAwrFactory(menuFactoryList* list, wxMenu* mnu, ctlMenuToolbar* toolbar) : actionFactory(list) {
|
|
mnu->Append(id, _("Report AWR"), _("Generate AWR report"));
|
|
};
|
|
bool reportAwrFactory::CheckEnable(pgObject* obj)
|
|
{
|
|
if (obj)
|
|
{
|
|
if ((obj->GetMetaType() == PGM_DATABASE ) && !obj->IsCollection() && obj->GetConnection() && obj->GetConnection()->HasFeature(FEATURE_PGPRO_PWR))
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
return false;
|
|
|
|
}
|
|
|
|
wxWindow* reportAwrFactory::StartDialog(frmMain* form, pgObject* obj) {
|
|
frmAwr* awr= new frmAwr(form,obj);
|
|
if (awr->ShowModal() == wxID_OK)
|
|
{
|
|
awr->GeterateReport();
|
|
}
|
|
delete awr;
|
|
return 0;
|
|
}
|
|
|
|
frmAwr::frmAwr(frmMain* parent, pgObject* obj)
|
|
{
|
|
this->parent = parent;
|
|
this->obj = obj;
|
|
SetFont(settings->GetSystemFont());
|
|
LoadResource((wxWindow *)parent, wxT("frmAwr"));
|
|
RestorePosition();
|
|
pgSet* dataSet1 = obj->GetConnection()->ExecuteSet("select server_name from profile.show_servers()");
|
|
if (dataSet1)
|
|
{
|
|
wxString n;
|
|
while (!dataSet1->Eof())
|
|
{
|
|
n = dataSet1->GetVal("server_name");
|
|
cbServer->Append(n);
|
|
dataSet1->MoveNext();
|
|
}
|
|
delete dataSet1;
|
|
if (!n.IsEmpty()) {
|
|
cbServer->SetSelection(0);
|
|
}
|
|
|
|
wxString val;
|
|
settings->Read(wxT("Awr/Lastserver"), &val, wxEmptyString);
|
|
if (!val.IsEmpty())cbServer->SetValue(val);
|
|
cServer = "";
|
|
}
|
|
int valint;
|
|
settings->Read(wxT("Awr/Type"), &valint, 1);
|
|
rbTypeReport->SetSelection(valint);
|
|
wxCommandEvent ev;
|
|
OnChange(ev);
|
|
|
|
}
|
|
|
|
void frmAwr::OnChange(wxCommandEvent& ev)
|
|
{
|
|
// cbQuoteChar->Enable(rbQuoteStrings->GetValue() || rbQuoteAll->GetValue());
|
|
int type=rbTypeReport->GetSelection();
|
|
|
|
wxString server=cbServer->GetValue();
|
|
if (server != cServer) {
|
|
pgSet* dataSet1 = obj->GetConnection()->ExecuteSet("select sample,sample_time from profile.show_samples('"+ server +"') order by 1 desc");
|
|
if (dataSet1)
|
|
{
|
|
cbStartId1->Clear();
|
|
cbStartId2->Clear();
|
|
cbEndId1->Clear();
|
|
cbEndId2->Clear();
|
|
wxArrayString ar;
|
|
while (!dataSet1->Eof())
|
|
{
|
|
int s = dataSet1->GetLong(wxT("sample"));
|
|
wxString dt= dataSet1->GetVal(wxT("sample_time"));
|
|
ar.Add(dt);
|
|
dataSet1->MoveNext();
|
|
}
|
|
delete dataSet1;
|
|
cbStartId1->Insert(ar,0);
|
|
cbStartId2->Insert(ar, 0);
|
|
cbEndId2->Insert(ar, 0);
|
|
cbEndId1->Insert(ar, 0);
|
|
|
|
}
|
|
cServer = server;
|
|
}
|
|
cbStartId2->Enable(type > 0);
|
|
cbEndId2->Enable(type > 0);
|
|
int s1 = cbStartId1->GetSelection();
|
|
int e1 = cbEndId1->GetSelection();
|
|
if (cbStartId1->GetValue() != cstart1 || cbEndId1->GetValue() != cend1 ) {
|
|
if ((s1 - 1) >= 0 && ((e1 >= s1)|| (e1<0))) cbEndId1->SetSelection(s1 - 1);
|
|
cstart1 = cbStartId1->GetValue();
|
|
cend1 = cbEndId1->GetValue();
|
|
}
|
|
|
|
if (cbStartId2->IsEnabled()) {
|
|
int s1 = cbStartId2->GetSelection();
|
|
int e1 = cbEndId2->GetSelection();
|
|
if (cbStartId2->GetValue() != cstart2 || cbEndId2->GetValue() != cend2) {
|
|
if ((s1 - 1) >= 0 && ((e1 >= s1) || (e1 < 0))) cbEndId2->SetSelection(s1 - 1);
|
|
cstart2 = cbStartId2->GetValue();
|
|
cend2 = cbEndId2->GetValue();
|
|
}
|
|
|
|
}
|
|
|
|
btnOK->Enable(!cbEndId1->GetValue().IsEmpty() );
|
|
if (type == 1) {
|
|
btnOK->Enable(!cbEndId2->GetValue().IsEmpty());
|
|
}
|
|
}
|
|
|
|
void frmAwr::GeterateReport() {
|
|
wxFileName fn("");
|
|
|
|
int type = rbTypeReport->GetSelection();
|
|
wxString sql;
|
|
if (type == 0) {
|
|
sql = "select rep from profile.get_report('" + cbServer->GetValue() + "',tstzrange('" + cbStartId1->GetValue() + "','" + cbEndId1->GetValue() + "')) rep";
|
|
}
|
|
else {
|
|
sql = "select rep from profile.get_diffreport('" + cbServer->GetValue() + "',tstzrange('" + cbStartId1->GetValue() + "','" + cbEndId1->GetValue() + "'),tstzrange('" + cbStartId2->GetValue() + "','" + cbEndId2->GetValue() + "')) rep";
|
|
}
|
|
|
|
//fn="D:\\PostgreSQL\\cmp.html";
|
|
pgSet* dataSet1 = obj->GetConnection()->ExecuteSet(sql);
|
|
if (dataSet1)
|
|
{
|
|
wxString rep;
|
|
while (!dataSet1->Eof())
|
|
{
|
|
rep = dataSet1->GetVal("rep");
|
|
dataSet1->MoveNext();
|
|
}
|
|
delete dataSet1;
|
|
fn = wxStandardPaths::Get().GetTempDir() + sepPath + wxT("awr_report.html");
|
|
fn.MakeAbsolute();
|
|
wxFile file4(fn.GetFullPath(), wxFile::write);
|
|
if (!file4.IsOpened())
|
|
{
|
|
wxLogError(_("Failed to open file %s."), fn.GetFullPath().c_str());
|
|
return;
|
|
}
|
|
file4.Write(rep, wxConvUTF8);
|
|
file4.Close();
|
|
|
|
#ifdef __WXMSW__
|
|
wxLaunchDefaultBrowser(fn.GetFullPath());
|
|
#else
|
|
wxLaunchDefaultBrowser(wxT("file://") + fn.GetFullPath());
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
void frmAwr::OnOK(wxCommandEvent& ev)
|
|
{
|
|
settings->WriteInt(wxT("Awr/Type"), rbTypeReport->GetSelection());
|
|
|
|
|
|
|
|
if (IsModal())
|
|
EndModal(wxID_OK);
|
|
else
|
|
Destroy();
|
|
}
|
|
frmAwr::~frmAwr()
|
|
{
|
|
SavePosition();
|
|
}
|
|
void frmAwr::OnCancel(wxCommandEvent& ev)
|
|
{
|
|
if (IsModal())
|
|
EndModal(wxID_CANCEL);
|
|
else
|
|
Destroy();
|
|
}
|