Windows-Server-2003/admin/admt/migdrvr/setdlg.cpp

255 lines
6.6 KiB
C++

/*---------------------------------------------------------------------------
File: LogSettingsDlg.cpp
Comments: This dialog allows the user to specify a log file, or to manually
stop and restart the monitoring thread. This normally won't be needed, but
it is useful for debugging.
(c) Copyright 1999, Mission Critical Software, Inc., All Rights Reserved
Proprietary and confidential to Mission Critical Software, Inc.
REVISION LOG ENTRY
Revision By: Christy Boles
---------------------------------------------------------------------------
*/// LogSettingsDlg.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "SetDlg.h"
#include "Monitor.h"
#include "Globals.h"
#include <htmlhelp.h>
#include "helpid.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLogSettingsDlg property page
IMPLEMENT_DYNCREATE(CLogSettingsDlg, CPropertyPage)
CLogSettingsDlg::CLogSettingsDlg() : CPropertyPage(CLogSettingsDlg::IDD)
{
//{{AFX_DATA_INIT(CLogSettingsDlg)
m_LogFile = _T("");
m_Database = _T("");
m_Import = FALSE;
//}}AFX_DATA_INIT
m_ThreadHandle = INVALID_HANDLE_VALUE;
m_ThreadID = 0;
gData.GetWaitInterval(&m_Interval);
m_StartImmediately = FALSE;
}
CLogSettingsDlg::~CLogSettingsDlg()
{
}
void CLogSettingsDlg::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLogSettingsDlg)
DDX_Control(pDX, IDC_IMPORT, m_ImportControl);
DDX_Control(pDX, IDC_INTERVAL, m_IntervalEditControl);
DDX_Control(pDX, IDC_LOGFILE, m_LogEditControl);
DDX_Control(pDX, IDC_REFRESH_LABEL, m_RefreshLabel);
DDX_Control(pDX, IDC_LOG_LABEL, m_LogLabel);
DDX_Control(pDX, IDC_DB_LABEL, m_DBLabel);
DDX_Control(pDX, IDC_DB, m_DBEditControl);
DDX_Control(pDX, IDC_STOPMONITOR, m_StopButton);
DDX_Control(pDX, IDC_STARTMONITOR, m_StartButton);
DDX_Text(pDX, IDC_INTERVAL, m_Interval);
DDX_Text(pDX, IDC_LOGFILE, m_LogFile);
DDX_Text(pDX, IDC_DB, m_Database);
DDX_Check(pDX, IDC_IMPORT, m_Import);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLogSettingsDlg, CPropertyPage)
//{{AFX_MSG_MAP(CLogSettingsDlg)
ON_BN_CLICKED(IDC_STARTMONITOR, OnStartMonitor)
ON_BN_CLICKED(IDC_STOPMONITOR, OnStopMonitor)
ON_EN_CHANGE(IDC_LOGFILE, OnChangeLogfile)
ON_WM_HELPINFO()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLogSettingsDlg message handlers
void CLogSettingsDlg::OnStartMonitor()
{
UpdateData(TRUE);
// Kick off a thread to do the monitoring!
//m_ServerList.DeleteAllItems();
// make sure the filename is not empty
m_LogFile.TrimLeft();
m_LogFile.TrimRight();
if ( m_LogFile.GetLength() == 0 )
{
CString message;
message.LoadString(IDS_PromptEnterDispatchLogName);
MessageBox(message);
m_LogEditControl.SetFocus();
return;
}
gData.SetDone(FALSE);
if ( m_Interval > 0 )
{
gData.SetWaitInterval(m_Interval);
}
UpdateData(FALSE);
SetDefID(IDC_STOPMONITOR);
m_StopButton.EnableWindow(FALSE); // Disable the buttons, since they don't do anything useful in ADMT
m_StopButton.SetFocus();
m_StartButton.EnableWindow(FALSE);
// disable the interval and other controls
m_LogLabel.EnableWindow(FALSE);
m_LogEditControl.EnableWindow(FALSE);
m_RefreshLabel.EnableWindow(FALSE);
m_IntervalEditControl.EnableWindow(FALSE);
m_DBLabel.EnableWindow(FALSE);
m_DBEditControl.EnableWindow(FALSE);
m_ImportControl.EnableWindow(FALSE);
gData.SetLogPath(m_LogFile.GetBuffer(0));
gData.SetDatabaseName(m_Database.GetBuffer(0));
gData.SetImportStats(m_Import);
m_ThreadHandle = CreateThread(NULL,0,&ResultMonitorFn,NULL,0,&m_ThreadID);
CloseHandle(m_ThreadHandle);
m_ThreadHandle = CreateThread(NULL,0,&LogReaderFn,NULL,0,&m_ThreadID);
CloseHandle(m_ThreadHandle);
m_ThreadHandle = INVALID_HANDLE_VALUE;
}
void CLogSettingsDlg::OnStopMonitor()
{
UpdateData(FALSE);
SetDefID(IDC_STARTMONITOR);
m_StartButton.EnableWindow(TRUE);
m_StartButton.SetFocus();
m_StopButton.EnableWindow(FALSE);
// enable the interval and other controls
m_LogLabel.EnableWindow(TRUE);
m_LogEditControl.EnableWindow(TRUE);
m_RefreshLabel.EnableWindow(TRUE);
m_IntervalEditControl.EnableWindow(TRUE);
m_DBLabel.EnableWindow(TRUE);
m_DBEditControl.EnableWindow(TRUE);
m_ImportControl.EnableWindow(TRUE);
if( m_ThreadHandle != INVALID_HANDLE_VALUE )
{
gData.SetDone(TRUE);
CloseHandle(m_ThreadHandle);
m_ThreadID = 0;
}
}
BOOL CLogSettingsDlg::OnSetActive()
{
BOOL rc = CPropertyPage::OnSetActive();
CancelToClose( );
return rc;
}
BOOL CLogSettingsDlg::OnInitDialog()
{
CPropertyPage::OnInitDialog();
if ( m_StartImmediately )
OnStartMonitor();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CLogSettingsDlg::OnChangeLogfile()
{
UpdateData(TRUE);
CString temp = m_LogFile;
temp.TrimLeft();
temp.TrimRight();
UpdateData(FALSE);
}
void CLogSettingsDlg::OnOK()
{
gData.SetDone(TRUE);
CPropertyPage::OnOK();
}
BOOL CLogSettingsDlg::OnQueryCancel()
{
return CPropertyPage::OnQueryCancel();
}
BOOL CLogSettingsDlg::OnApply()
{
ComputerStats stats;
CString strTitle;
CString strText;
gData.GetComputerStats(&stats);
// only when all agents have either finished or failed do we allow the user to close the agent monitor
if ( (stats.numError + stats.numFinished) < stats.total )
{
strTitle.LoadString(IDS_MessageTitle);
strText.LoadString(IDS_AgentsStillRunningCannotExit);
int result = MessageBox(strText,strTitle,MB_ICONQUESTION | MB_YESNO | MB_DEFBUTTON2);
if (result == IDYES)
{
gData.SetDone(TRUE);
gData.SetForcedToStopMonitoring(TRUE);
return CPropertyPage::OnApply();
}
}
else
{
gData.SetDone(TRUE);
return CPropertyPage::OnApply();
}
return FALSE;
}
BOOL CLogSettingsDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
LPNMHDR lpnm = (LPNMHDR) lParam;
switch (lpnm->code)
{
case PSN_HELP :
helpWrapper(m_hWnd, IDH_WINDOW_AGENT_MONITOR_SETTING);
break;
}
return CPropertyPage::OnNotify(wParam, lParam, pResult);
}
BOOL CLogSettingsDlg::OnHelpInfo(HELPINFO* pHelpInfo)
{
helpWrapper(m_hWnd, IDH_WINDOW_AGENT_MONITOR_SETTING);
return CPropertyPage::OnHelpInfo(pHelpInfo);
}