Files
powershell/loglinecountscript-final.ps1
2023-03-09 09:06:25 +01:00

187 lines
9.6 KiB
PowerShell

# Prompt the user for a choice between prod and preprod
$environment = Read-Host "Enter environment (prod or preprod, testa)"
# Set the paths to search for log files based on the user's choice
if ($environment -eq "prod") {
$Paths = "\\REJ-P-WEB001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-WEB002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-WEB003.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-WEB004.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-WEB005.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-WEB006.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-WEB007.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-WEB008.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-APP001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-APP002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-APP003.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-APP004.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-API001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-API002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS003.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS004.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS005.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS006.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS007.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS008.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS009.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS010.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS011.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS012.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS013.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS014.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS015.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCS016.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCF001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-TCF002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-MDL001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-MDL002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS003.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS004.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS005.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS006.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS007.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS008.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS009.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS010.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-SPS011.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-DPS001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-DPS002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-DPS003.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-DPS004.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-DPS005.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-DPS006.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-FAS001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-FAS002.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-FAS003.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-BCM001.REJprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-P-BCM002.REJprod.local\d-drive\IFSBOSystem\Log"
} elseif ($environment -eq "preprod") {
$Paths = "\\REJ-Q-WEB101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-WEB102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-WEB103.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-WEB104.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-WEB105.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-WEB106.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-APP101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-APP102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-API101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-API102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-TCS101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-TCS102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-TCF101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-TCF102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-MDL101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-MDL102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-SPS101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-SPS102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-DPS101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-DPS102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-FAS101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-FAS102.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-BCM101.REJpreprod.local\d-drive\IFSBOSystem\Log",
"\\REJ-Q-BCM102.REJpreprod.local\d-drive\IFSBOSystem\Log"
}elseif ($environment -eq "testa") {
$Paths = "\\rej-a-api201\D-Drive\IFSBOSystem\Log",
"\\rej-a-app201\D-Drive\IFSBOSystem\Log",
"\\rej-a-bcm201\D-Drive\IFSBOSystem\Log",
"\\rej-a-dps201\D-Drive\IFSBOSystem\Log",
"\\rej-a-fas201\D-Drive\IFSBOSystem\Log",
"\\rej-a-mdl201\D-Drive\IFSBOSystem\Log",
"\\rej-a-sps201\D-Drive\IFSBOSystem\Log",
"\\rej-a-tcf201\D-Drive\IFSBOSystem\Log",
"\\rej-a-tcs201\D-Drive\IFSBOSystem\Log",
"\\rej-a-web201\D-Drive\IFSBOSystem\Log"
} else {
Write-Host "Invalid environment entered. Please enter correct envioment."
exit
}
# Define the script block to run in each thread
$ScriptBlock = {
param ($Path)
# Find all log files in the directory
$logFiles = Get-ChildItem -Path $Path -Filter "*.log" -File -Recurse | Where-Object { $_.PSIsContainer -or $_.Name -notmatch '^\d{4}-\d{2}-\d{2}' }
if ($logFiles.Count -eq 0) {
Write-Warning "No log files found in $($Path)"
return
}
# Get the current date and format it as "yyyy-MM-dd"
$currentDate = Get-Date -Format "yyyy-MM-dd"
# Iterate through each log file and count the number of lines written to the file during the current day
$logFileCounts = foreach ($file in $logFiles) {
if ($file.LastWriteTime -gt (Get-Date).AddDays(-1)) {
# Get the contents of the file and count the number of lines written to the file during the current day
$count = (Get-Content $file.FullName | Where-Object { $_ -match $currentDate }).Count
# Output the file name and the count of lines written to the file during the current day
[PSCustomObject]@{
FileName = $file.Name
FilePath = Split-Path $file.FullName -Parent
LinesWrittenToday = $count
}
}
}
# Return the log file counts for this path
return $logFileCounts
}
# Define an array to hold the job results
$jobResults = @()
# Start a job for each path
foreach ($Path in $Paths) {
$job = Start-Job -ScriptBlock $ScriptBlock -ArgumentList $Path
$jobResults += $job
}
# Wait for all jobs to complete
while (@($jobResults | Where-Object { $_.State -eq 'Running' }).Count -gt 0) {
Start-Sleep -Milliseconds 110
}
# Get the results of each job and combine them into a single array
$logFileCounts = foreach ($job in $jobResults) {
$job | Receive-Job
}
# Group the log file counts by file name and path and sum the line counts
$groupedLogFileCounts = $logFileCounts | ForEach-Object {
[PSCustomObject]@{
FileName = $_.FileName
FilePath = $_.FilePath
LinesWrittenToday = $_.LinesWrittenToday
}
} | Group-Object -Property @{Expression = {$_.FileName + "|" + $_.FilePath}} | ForEach-Object {
$fileName, $filePath = $_.Name.Split("|")
$serverName = $filePath -replace ".*\\\\([^\\]+).*", '$1'
[PSCustomObject]@{
FileName = $fileName
ServerName = $serverName
TotalLinesWrittenToday = ($_.Group | Measure-Object -Property LinesWrittenToday -Sum).Sum
}
} | Where-Object { $_.TotalLinesWrittenToday -ne 0 }
# Output the grouped log file counts
$groupedLogFileCounts | Sort-Object -Property ServerName | Format-Table -GroupBy ServerName -Property FileName, TotalLinesWrittenToday -AutoSize
# Calculate and output the total lines written today for all files
$totalLinesWrittenToday = $groupedLogFileCounts | Measure-Object -Property TotalLinesWrittenToday -Sum
"Total lines written today: $($totalLinesWrittenToday.Sum)"
$groupedcount = $groupedLogFileCounts | Group-Object -Property { $_.ServerName.Replace(".REJpreprod.local", "") } | Select-Object Name, @{Name="Types of Log Files"; Expression={$_.Count}}
$groupedcount