You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
8.5 KiB

VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'False
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
END
Attribute VB_Name = "Logger"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Attribute VB_Description = "APE Logger"
Option Explicit
'-------------------------------------------------------------------------
'This is the only public class in this application. See modLogger for
'purpose.
' This class implements the ILogger interface.
'-------------------------------------------------------------------------
Implements APEInterfaces.ILogger
Public Property Let ILogger_Show(ByVal bShow As Boolean)
Attribute ILogger_Show.VB_Description = "Determines whether the Logger shows a form."
'-------------------------------------------------------------------------
'Purpose: Show property determines whether or not a form is displayed
' while the logger is loaded.
'
'Effects: [gbShowForm]
' Becomes equal to the passed parameter
' [frmLogger]
' Becomes loaded and visible if parameter is true, but is
' unloaded if parameter is false
'-------------------------------------------------------------------------
If Not gbShowForm = bShow Then
gbShowForm = bShow
If bShow = True Then
frmLogger.Show
Else
Unload frmLogger
End If
End If
End Property
Public Property Get ILogger_Show() As Boolean
ILogger_Show = gbShowForm
End Property
Public Property Let ILogger_AutomaticWrite(ByVal bWrite As Boolean)
Attribute ILogger_AutomaticWrite.VB_Description = "Determines whether log records are written to a file and purged from memory when the log threshold is reached."
'-------------------------------------------------------------------------
'Purpose: AutomaticWrite property determines if the Logger should
' automatically write to a file when a record threshold is met.
'Effects: [gbWriteRecords]
' Becomes equal to the passed parameter
'-------------------------------------------------------------------------
gbWriteRecords = bWrite
End Property
Public Property Get ILogger_AutomaticWrite() As Boolean
ILogger_AutomaticWrite = gbWriteRecords
End Property
Public Property Let ILogger_Threshold(ByVal lThreshold As Long)
Attribute ILogger_Threshold.VB_Description = "Sets the log threshold in kilobytes that determines when log records are written to a file and purged from memory."
'-------------------------------------------------------------------------
'Purpose: If AutomaticWrite property is true, logger uses the
' Threshold property to determine how many kilobytes should
' be held in memory before writing to a file and emptying
' log record array.
'Effects: [glThreshold]
' Becomes equal to the passed parameter
' [glThresholdRecs]
' Becomes an estimated number of records equivalent
'-------------------------------------------------------------------------
On Error Resume Next
glThreshold = lThreshold
glThresholdRecs = lThreshold * giLOG_RECORD_KILOBYTES
End Property
Public Property Get ILogger_Threshold() As Long
ILogger_Threshold = glThreshold
End Property
'************************
'Public Methods
'************************
Public Sub ILogger_SetProperties(ByVal bShow As Boolean, Optional ByVal bAutomaticWrite As Variant, Optional ByVal lThreshold As Variant)
Attribute ILogger_SetProperties.VB_Description = "Sets all Logger properties in one method call."
'-------------------------------------------------------------------------
'Purpose: Provided so that properties can be set by one method call
'Effects: Sets the following properties:
' Show, AutomaticWrite, Threshold
'-------------------------------------------------------------------------
Me.ILogger_Show = bShow
If Not IsMissing(bAutomaticWrite) Then gbWriteRecords = bAutomaticWrite
If Not IsMissing(lThreshold) Then Me.ILogger_Threshold = lThreshold
End Sub
Public Sub ILogger_Record(ByVal sComponent As String, ByVal sServiceID As String, ByVal sComment As String, ByVal lMilliseconds As Long)
Attribute ILogger_Record.VB_Description = "Adds a log record."
'-------------------------------------------------------------------------
'Purpose: Provided for any app to call to add one log record
'Effects: Calls AddLogRecord
' Calls WriteRecords when the Threshold is reached
'-------------------------------------------------------------------------
AddLogRecord sComponent, sServiceID, sComment, lMilliseconds
If gbWriteRecords Then
If glLastAddedRecord >= glThresholdRecs And glThresholdRecs > 0 Then
WriteRecords
End If
End If
End Sub
Public Function ILogger_GetRecords() As Variant
Attribute ILogger_GetRecords.VB_Description = "Returns a variant array containing log records. Must be called multiple times until until Null is returned."
'-------------------------------------------------------------------------
'Purpose: Use to retrieve all of the log records passed to the Logger
' Keep calling until, it returns does not return a variant array
'Return: Returns a two dimension array in which
' the first four elements of the first dimension
' are Component(string), ServiceID(Long),Comment(string),
' and Milliseconds(long) respectively
' the second dimension represents the number of log records
' User Defined Types can not be returned from public
' procedures of public classes
'Effects: [gaRecords]
' Redimensioned after calling GetRecords to not have empty
' records at the end
' [glLastAddedRecord]
' becomes equal to giNO_RECORDS
'-------------------------------------------------------------------------
GetWrittenLog
'Trim the array to only send the filled elements
If glLastAddedRecord >= 0 Then
If UBound(gaRecords, 2) <> glLastAddedRecord Then ReDim Preserve gaRecords(giLOG_ARRAY_DIMENSION_ONE, glLastAddedRecord)
ILogger_GetRecords = gaRecords()
'Changing the glLastAddedRecord flag to giNO_RECORDS causes
'WriteRecords to ignore records at next call
glLastAddedRecord = giNO_RECORDS
Else
ILogger_GetRecords = Null
End If
End Function
'*******************
'Private Procedures
'*******************
Private Sub Class_Initialize()
'-------------------------------------------------------------------------
'Purpose: Set the initial state of the logger when the first logger
' class object is initialized
'Effects: [glInstances]
' Iterates it once
'-------------------------------------------------------------------------
'Count how many times this class is instanced
'to react to the first instance or the release
'of the last instance.
glInstances = glInstances + 1
If glInstances = 1 Then
'Set default property values
gbShowForm = gbSHOW_FORM_DEFAULT
gbWriteRecords = gbWRITE_RECORDS_DEFAULT
Me.ILogger_Threshold = gbTHRESHOLD_DEFAULT
gsFileName = GetTempFile
glLastAddedRecord = giNO_RECORDS
'Load frmLogger if gbShowForm is True
If gbShowForm Then frmLogger.Show
End If
End Sub
Private Sub Class_Terminate()
'-------------------------------------------------------------------------
'Purpose: Closes the form and destroys the tempfile when the last
' instance is terminated
'Effects: [glInstances]
' decreases by one
'-------------------------------------------------------------------------
'Count how many times this class is instanced
'so subtract one every terminate event
'If the last terminate event is occuring
'make sure forms are unloaded and write records
On Error GoTo Class_TerminateError
glInstances = glInstances - 1
If glInstances = 0 Then
Unload frmLogger
Close 'Close here incase getting logs got canceled
Kill gsFileName
End If
Exit Sub
Class_TerminateError:
Select Case Err.Number
Case ERR_FILE_NOT_FOUND
'There is no file to kill
Resume Next
Case Else
Resume Next
End Select
End Sub