livemanager
8/21/2018 - 7:04 AM

Generate Chart from IIS Logs

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