open-insight/FRAMEWORKS/APPROW/SYSENV%003ASRP_HTTP_FRAMEWORK_HTTP_LOGS_ARCHIVE_SCRIPT.json
2024-03-25 15:15:48 -07:00

154 lines
7.6 KiB
JSON

{
"header": {
"version": 1,
"type": "record",
"approw-key": "SRP_HTTP_FRAMEWORK_HTTP_LOGS_ARCHIVE_SCRIPT"
},
"body": {
"record1": {
"<1>": "",
"<2>": "function Archive-SRPHTTPLogs {",
"<3>": "param(",
"<4>": " [string]$OlderThanDateStr = \"\",",
"<5>": " [string]$LogPathSource = \"C:\\httplogs\",",
"<6>": " [string]$LogPathDest = \"c:\\httplogs\\archive\"",
"<7>": ")",
"<8>": "$progresspreference=\"SilentlyContinue\";",
"<9>": "",
"<10>": "#Uncomment this to simulate an error",
"<11>": "#Blah $Failed;",
"<12>": "",
"<13>": "if($OlderThanDateStr -ne \"\") {",
"<14>": " #Convert the supplied date to an object",
"<15>": " #Throws error if not a valid date",
"<16>": "",
"<17>": " try {",
"<18>": " $OlderThanDate = [datetime]$OlderThanDateStr;",
"<19>": " } catch {",
"<20>": " throw $_;",
"<21>": " return;",
"<22>": " }",
"<23>": "}",
"<24>": "",
"<25>": "#What files in $LogPathSource are considered to be log files?",
"<26>": "$LogExtension = \"*.log\";",
"<27>": "",
"<28>": "#Check the organized folder exists",
"<29>": "New-Item -Path $LogPathDest -ItemType \"directory\" -Force | Out-Null;",
"<30>": "",
"<31>": "#Get all the files to be organized",
"<32>": "$LogFiles = Get-ChildItem -Path $LogPathSource -Filter $LogExtension;",
"<33>": "",
"<34>": "#Store a hash table of dates from file names",
"<35>": "$LogDates = @{};",
"<36>": "",
"<37>": "#Loop through all the files and organize them by date",
"<38>": "ForEach($LogFile in $LogFiles) {",
"<39>": "",
"<40>": " $FileName = $LogFile.Name;",
"<41>": "",
"<42>": "\t#Doesn't work on Server 2008",
"<43>": " #$FileNameDate = [regex]::Match($FileName,'^(.*?)_').captures.groups[1].value;",
"<44>": "\t",
"<45>": "\t#Works in Server 2008",
"<46>": "\t$FileNameDate = $FileName.Split('_')[0];",
"<47>": "",
"<48>": " $FileNameDateObj = $Null;",
"<49>": "",
"<50>": " try {",
"<51>": " $FileNameDateObj = [datetime]$FileNameDate;",
"<52>": " } catch {",
"<53>": " #This was not a valid date so skip",
"<54>": " }",
"<55>": "",
"<56>": " if ($FileNameDateObj -ne $Null) {",
"<57>": " #This filename has a valid date",
"<58>": "",
"<59>": " #Is it within our range?",
"<60>": " if($FileNameDateObj -le $OlderThanDate) {",
"<61>": " #Yes, the file name is old enough to archive",
"<62>": "",
"<63>": "\t #Have we seen this date before?",
"<64>": " if ($LogDates[$FileNameDate] -eq $null) {",
"<65>": "\t\t #No, so create an array list and store it in the hash table under the date key",
"<66>": " #Write-Host \"Found logs for new date: $FileNameDate\";",
"<67>": " [System.Collections.ArrayList]$NewArray = @($FileName);",
"<68>": " $LogDates[$FileNameDate] = \t$NewArray;",
"<69>": " } else {",
"<70>": "\t\t # Yes, so add it to the array of filenames for that date",
"<71>": " # Write-Host \"Adding $FileNameDate\";",
"<72>": " $LogDates[$FileNameDate].Add($FileName) | Out-Null;",
"<73>": " }",
"<74>": "",
"<75>": " } else {",
"<76>": " #No, the file name is newer than our cut-off date",
"<77>": " }",
"<78>": "",
"<79>": " } else {",
"<80>": " #The file name did not have a valid date entry in the filename so skip",
"<81>": " }",
"<82>": "",
"<83>": "}",
"<84>": "",
"<85>": "#Loop through the hashtable of all the dates seen",
"<86>": "#and process the arraylist of files for that date",
"<87>": "ForEach($LogDate In $LogDates.keys) {",
"<88>": "",
"<89>": " #Write-Host \"Processing log dates $LogDate\";",
"<90>": "",
"<91>": " $LogFolderForDate = $LogPathDest + \"\\\" + $LogDate;",
"<92>": "",
"<93>": "\t#Make sure the organization folder exists",
"<94>": " New-Item -Path $LogFolderForDate -ItemType \"directory\" -Force | Out-Null;",
"<95>": "",
"<96>": " $LogFilesForDate = $LogDates[$LogDate];",
"<97>": "",
"<98>": "\t#Loop through all the files for that date",
"<99>": " ForEach ($LogFileName in $LogFilesForDate) {",
"<100>": "",
"<101>": " $Src = $LogPathSource + \"\\\" + $LogFileName;",
"<102>": " $Dst = $LogFolderForDate + \"\\\" + $LogFileName;",
"<103>": "",
"<104>": " #Write-Host \"Moving $Src to $Dst\";",
"<105>": " Move-Item -Path $Src -Destination $Dst -Force;",
"<106>": "",
"<107>": " }",
"<108>": "",
"<109>": "}",
"<110>": "",
"<111>": "#Loop through the hashtable of all the dates seen",
"<112>": "#and compress the files that were organized into folders",
"<113>": "ForEach($LogDate In $LogDates.keys) {",
"<114>": "",
"<115>": " #Figure out which archive date we want to compress",
"<116>": " $LogFolderForDate = $LogPathDest + \"\\\" + $LogDate;",
"<117>": "",
"<118>": " #The name of the zip file where the archived date should reside",
"<119>": " $LogFolderZipFile = $LogPathDest + \"\\\" + $LogDate + \".zip\"",
"<120>": "",
"<121>": " try {",
"<122>": " #Compress it, fail if any error",
"<123>": " Compress-Archive -Path $($LogFolderForDate + \"\\\" + $LogExtension) -DestinationPath $LogFolderZipFile -ErrorAction Stop",
"<124>": "",
"<125>": " #Remove the source log files",
"<126>": " Remove-Item -Path $LogFolderForDate -Recurse -Force",
"<127>": " } catch {",
"<128>": " throw $_;",
"<129>": " return",
"<130>": " }",
"<131>": " ",
"<132>": "}",
"<133>": "",
"<134>": "",
"<135>": "",
"<136>": "} #End Archive-SRPHTTPLogs",
"<137>": "",
"<138>": "try {",
"<139>": " Archive-SRPHTTPLogs -OlderThanDate '{{ArchiveOlderThanDate}}' -LogPathSource '{{ArchiveLogsFromFolder}}' -LogPathDest '{{ArchiveStorageFolder}}';",
"<140>": " Return \"OK\";",
"<141>": "} catch {",
"<142>": " Return \"ERROR`n\" + $_.ToString() ;",
"<143>": "}"
}
}
}