open-insight/FRAMEWORKS/STPROC/AUDIT_MANAGER.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

210 lines
9.1 KiB
Plaintext

Subroutine Audit_Manager(ID, Table, CurrentRecord, OrigRecord, Activity)
/***********************************************************************************************************************
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
permission from SRP Computer Solutions, Inc.
Name : Audit_Manager
Description : Updates the Audit table to track modifications of a record.
Notes : This process is normally called by the Audit_Manager_MFS. It handles all of the audit trail
management logic.
Parameters :
AutoSet [in] -- Allows automatic setting of the SYSTEM_MAINTENANCE record without user intervention.
SysFlag [out] -- Returns True if the flag was set to stop people from logging in. Returns False if people
are still allowed to log into the application.
ID [in] -- ID of the record.
Table [in] -- Table name where the record being audited is stored.
CurrentRecord [in/out] -- Current record as it will be written to disk. If the Activity is "Write" then the
audit fields will be updated.
OrigRecord [in] -- If called by Audit_Manager_MFS then this is the original record, otherwise this
represents a marker for special audit tracking.
Activity [in] -- Identifies the audit activity being performed: Read, Write, Delete, or anything else
if called directly for special audit tracking.
History : (Date, Initials, Notes)
05/19/05 axf Initial Program (Original Program MFS_Update_History).
11/26/07 dmb Code clean-up and refactoring.
04/05/13 dmb Repalce SECURITY_EQUATES with Memory Services to get login security. - [SRPFW-9]
***********************************************************************************************************************/
$insert APP_INSERTS
Declare Subroutine Msg, Lock_Record
Declare Function RetStack, Memory_Services
If Assigned(ID) else ID = ""
If Assigned(Table) else Table = ""
If Assigned(CurrentRecord) else CurrentRecord = ""
If Assigned(OrigRecord) else OrigRecord = ""
AuditManagerTable = "APP_INFO"
Convert @Lower_Case to @Upper_Case In Table
AuditTable = 'AUDIT_' : Table
Username = @USERNAME
* Declare function GetNetworkUsername
* If GetNetworkUsername() EQ "dbakke1" AND Activity _NEC "READ" then debug
Open AuditTable to HistoryCheck then
RecordTracker = No$
Locked_handle = ""
Temp_activity = ""
Success = ""
Details = ""
New = No$
TrackActivity = No$
CallProgName = RetStack()<2>
Gosub App_Info
If TrackActivity EQ Yes$ then Gosub Main_Process
End
Return
App_Info:
Fields = ""
Num_fields = 0
Open AuditManagerTable to hAIT then
ReadO App_record from hAIT, "AUDIT_MANAGER_SETTINGS" then
Locate Table in App_record<1> using @VM setting vPos then
Begin Case
Case ID EQ ""
// Do nothing.
Case CallProgName[1, 18] NE "AUDIT_MANAGER_MFS*"
// Program is being called directly from a stored procedure.
If App_record<6,vPos> EQ Yes$ Then
If CurrentRecord NE "" Then
TrackActivity = Yes$
RecordTracker = Yes$ ; // Flag to indicate that special audit tracking is ocurring
Marker = OrigRecord
OrigRecord = CurrentRecord
End
End
Case Activity EQ "Write"
If App_record<3,vPos> EQ Yes$ Then
TrackActivity = Yes$
Locate Table in App_record<1> using @VM setting Position then
StartField = App_record<2, Position>
If StartField Then
CurrentRecord<StartField> = Username
CurrentRecord<StartField + 1> = Date()
CurrentRecord<StartField + 2> = Time()
End
End
End
Case Activity EQ "Delete"
If App_record<4,vPos> EQ Yes$ Then TrackActivity = Yes$
Case Activity EQ "Read"
If App_record<5,vPos> EQ Yes$ Then TrackActivity = Yes$
End Case
end else
* Msg("|Unable to locate the ":Table:" information|in the Audit Manager Settings.|")
end
end else
* Msg("|Unable to read the Audit Manager Settings Record.|")
end
end else
* Msg("|Unable to open the App_Info Table.|")
end
return
Main_Process:
Lock_Record(AuditTable, Locked_handle, ID, Lock$, No$, Yes$, Success)
If Success then
Read AuditTrail from Locked_handle, ID then
Num_items = Count(AuditTrail<1>, @VM) + (AuditTrail<1> NE "")
* If Len(AuditTrail) GT 250000 then
* For DelNumItems = 1 to 100
* For Loop = 1 to 8
* AuditTrail = Delete(AuditTrail, Loop, Num_items, 0)
* Next Loop
* Num_items -= 1
* Next DelNumItems
* end
end else
AuditTrail = ""
New = Yes$
end
Current_date = Date()
Current_time = Time()
Seq = "DR"
StationName = @Station
MacAddress = ""
Locate Current_date in AuditTrail<1> by Seq Using @VM setting Pos else Null
AuditTrail<1> = Insert(AuditTrail<1>, 1, Pos, 0, Current_Date)
AuditTrail<2> = Insert(AuditTrail<2>, 1, Pos, 0, Current_Time)
AuditTrail<3> = Insert(AuditTrail<3>, 1, Pos, 0, Username)
AuditTrail<4> = Insert(AuditTrail<4>, 1, Pos, 0, StationName)
AuditTrail<5> = Insert(AuditTrail<5>, 1, Pos, 0, MacAddress)
AuditTrail<8> = Insert(AuditTrail<8>, 1, Pos, 0, Activity)
AuditTrail<9> = "AUDIT TRACKING RECORD"
If RecordTracker EQ Yes$ Then
// Special audit tracking is occuring. Store the current program
// and the special marker in the audit trail entry.
AuditTrail<6> = Insert(AuditTrail<6>, 1, Pos, 0, RetStack()<2>)
AuditTrail<7> = Insert(AuditTrail<7>, 1, Pos, 0, Marker)
AuditTrail<10> = "PROGRAM TRACKER"
End Else
AuditTrail<6> = Insert(AuditTrail<6>, 1, Pos, 0, "")
AuditTrail<7> = Insert(AuditTrail<7>, 1, Pos, 0, "")
AuditTrail<10> = AuditTrail<10>
End
// Update the Audit Trail record.
Write AuditTrail to Locked_handle, ID Then
If Activity NE "Read" Then
// Only create an audit record if the Activity isn't Read.
AuditRecord = OrigRecord
If MacAddress EQ "" Then MacAddress = @Station
StoredRecId = ID:"*":MacAddress:"*":Current_Date:"*":Current_Time
Write AuditRecord To Locked_handle, StoredRecId Then
Read RecentlyUpdatedList from Locked_handle, "%RECENTLY_UPDATED%" Else
RecentlyUpdatedList = ""
End
Locate ID in RecentlyUpdatedList using @FM setting UpdatePos Then
RecentlyUpdatedList = Delete(RecentlyUpdatedList, UpdatePos, 0, 0)
End
If RecentlyUpdatedList EQ "" then
RecentlyUpdatedList = ID
End Else
RecentlyUpdatedList = ID:@FM:RecentlyUpdatedList
If Count(RecentlyUpdatedList, @FM) GT 499 then
RecentlyUpdatedList = Field(RecentlyUpdatedList, @FM, 1, 500)
end
End
Write RecentlyUpdatedList to Locked_handle, "%RECENTLY_UPDATED%" Else
* Msg("|Unable to Write the record %RECENTLY_UPDATED%|to the ":AuditTable:".|")
End
End Else
* Msg("|Unable to Write the record ":StoredRecId:"|to the ":AuditTable:".|")
End
End
End Else
* Msg("|Unable to Write the record ":ID:"|to the ":AuditTable:".|")
End
Lock_Record(AuditTable, Locked_handle, ID, Unlock$)
End Else
* Msg("|Unable to update ":AuditTable:" log.|")
end
return