windows-nt/Source/XPSP1/NT/enduser/troubleshoot/tshoot/logstring.cpp
2020-09-26 16:20:57 +08:00

134 lines
3 KiB
C++

//
// MODULE: LogString.cpp
//
// PURPOSE: implementation of the CLogString class.
//
// PROJECT: Generic Troubleshooter DLL for Microsoft AnswerPoint
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com
//
// AUTHOR: Roman Mach, Joe Mabel
//
// ORIGINAL DATE: 7/24/1998
//
// NOTES:
// 1. For public "Add" methods of this class: unless otherwise noted, if called more than once,
// only last call is significant
//
// Version Date By Comments
//--------------------------------------------------------------------
// V3.0 7-24-98 JM Major revision, deprecate IDH.
//
#include "stdafx.h"
#include "LogString.h"
#include "SafeTime.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CLogString::CLogString()
{
time( &m_timeStart );
m_bLoggedError = false;
m_dwError = 0;
m_dwSubError = 0;
}
CLogString::~CLogString()
{
}
CString CLogString::GetStr() const
{
CString str;
CString strDuration;
GetDurationString(strDuration);
GetStartTimeString(str);
str += _T(", ");
str += m_strCookie;
str += m_strTopic;
str += strDuration;
str += _T(", ");
str += m_strStates;
str += m_strCurNode;
if (m_bLoggedError)
{
CString strError;
strError.Format(_T(", Err=%ld(%ld)"), m_dwError, m_dwSubError);
str +=strError;
}
str += _T("\n");
return str;
}
void CLogString::AddCookie(LPCTSTR szCookie)
{
m_strCookie = szCookie;
}
// INPUT szTopic: troubleshooter topic (a.k.a. troubleshooter symbolic name)
void CLogString::AddTopic(LPCTSTR szTopic)
{
m_strTopic.Format(_T(" %s,"), szTopic);
}
// Must be called repeatedly for successive nodes.
// If you want to display nodes in a particular order, this must be called in that order.
void CLogString::AddNode(NID nid, IST ist)
{
CString str;
str.Format(_T("[%d:%d], "), nid, ist);
m_strStates += str;
}
// Add current node (no state because we are currently visiting it)
void CLogString::AddCurrentNode(NID nid)
{
m_strCurNode.Format(_T("Page=%d"), nid);
}
// Only logs an error if dwError != 0
// Can call with dwError == 0 to clear previous error
void CLogString::AddError(DWORD dwError/* =0 */, DWORD dwSubError/* =0 */)
{
m_bLoggedError = dwError ? true :false;
if (m_bLoggedError)
{
m_dwError = dwError;
m_dwSubError = dwSubError;
}
}
// OUTPUT str contains start date/time in form used in log.
void CLogString::GetStartTimeString(CString& str) const
{
TCHAR buf[100]; // plenty big for date/time string
{
// minimize how long we use CSafeTime, because it means holding a mutex.
CSafeTime safe(m_timeStart);
_tcscpy(buf, _tasctime(&(safe.LocalTime())));
}
if (_tcslen(buf))
buf[_tcslen(buf)-1] = _T('\0');// remove cr
str = buf;
}
// OUTPUT str contains form used in log of duration in seconds since m_timeStart.
void CLogString::GetDurationString(CString& str) const
{
time_t timeNow;
time( &timeNow );
str.Format(_T(" Time=%02ds"), timeNow - m_timeStart);
}