Generate Chart from IIS Logs
Param (
[ValidateSet('HMB','HMD','HMM')] [string] $CountryCode = 'HMB',
[string] $StartDate = '2018-08-01',
[string] $EndDate = '2018-08-20',
[string] $SaveFolder = 'C:\Temp'
)
$UserID = "administrator"
$Pwd = ConvertTo-SecureString "pass@word!01" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential($UserID, $Pwd)
$Session = New-PSSession -ComputerName 192.168.100.50 -Credential $Cred -Authentication Default -Port 80
$TimeString = (Get-Date).ToString('yyyyMMddhhmmss')
$FolderName = "D:\WA_Log\IIS\_Work\${TimeString}"
$ConUrl = "http://192.168.100.50/Logs/${TimeString}/index.html"
Invoke-Command -Session $Session -ScriptBlock {
$CountryCode = $args[0]
$StartDate = $args[1]
$EndDate = $args[2]
$FolderName = $args[3]
$LogPath = "D:\WA_Log\IIS\${CountryCode}"
$_StartDate = Get-Date($StartDate)
$_EndDate = Get-Date($EndDate)
$CurrentDate = $_StartDate
$LogString = ""
While($CurrentDate -lt $_EndDate.AddDays(1)) {
$LogFileName = "u_ex$($CurrentDate.ToString('yyMMdd')).log"
if($LogString -eq "") {
$LogString = "D:\WA_Log\IIS\${CountryCode}\*${LogFileName}"
}else{
$LogString += ", D:\WA_Log\IIS\${CountryCode}\*${LogFileName}"
}
$CurrentDate = $CurrentDate.AddDays(1)
}
function GetCsUriStem {
Param($LogString)
$Query = "
Select cs-uri-stem From ${LogString}
Where
cs-uri-stem Not like '%.png'
And Cs-Uri-Stem Not like '%.pdf'
And Cs-Uri-Stem Not like '%.jpg'
And Cs-Uri-Stem Not like '%.txt'
And Cs-Uri-Stem Not like '%.json'
And Cs-Uri-Stem Not like '%.version'
And Cs-Uri-Stem Not like '%.ico'
Group By cs-uri-stem
"
Write-Warning $Query
& "C:\Program Files (x86)\Log Parser 2.2\LogParser" -rtp:-1 $Query -i:iisw3c
}
$Uris = GetCsUristem -LogString $LogString
$UrisArr = ($Uris -Split "`r`n")
$New_Folder = New-Item -Path $FolderName -ItemType Directory
$Links = "<ul>"
$UrisArr[3..($UrisArr.Count - 8)] | % {
$ChartName = $_.Replace("/", "_").Replace(".", "_")
$Uri = $_
Write-Warning $Uri
$Links += "<li><a href='${ChartName}.gif' target='chartframe'>${Uri}</a></li>`r`n"
$Query = "select TO_TIMESTAMP(date, time) as datetime, time-taken into ${FolderName}\${ChartName}.gif from ${LogString} where cs-uri-stem = '${Uri}' order by TO_TIMESTAMP(date, time)"
Write-Warning $Query
& "C:\Program Files (x86)\Log Parser 2.2\LogParser" $Query -i:iisw3c -o:chart -chartType:Line -groupSize:1024x768 -chartTitle:$Uri
}
$Links += "</ul>"
$IndexHtml = "
<html>
<body>
<table width='100%' height='100%' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td colspan='2' align='center'>
<h3>${CountryCode} (${StartDate} ~ ${EndDate})</h3>
</td>
<tr>
<td width='200px'>
${Links}
</td>
<td>
<iframe width='100%' height='100%' src='' name='chartframe' frameBorder='0'></iframe>
</td>
</tr>
</table>
</body>
</html>
"
$IndexHtml | Out-File "${FolderName}\index.html"
} -ArgumentList @($CountryCode, $StartDate, $EndDate, $FolderName)
start microsoft-edge:$ConUrl
#Copy-Item -FromSession $Session -Path "D:\WA_Log\IIS\_Work\${FolderName}" -Destination $SaveFolder -Recurse