diff options
Diffstat (limited to 'src/ci/scripts/cleanup.ps1')
-rw-r--r-- | src/ci/scripts/cleanup.ps1 | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/ci/scripts/cleanup.ps1 b/src/ci/scripts/cleanup.ps1 new file mode 100644 index 000000000..fd709ed63 --- /dev/null +++ b/src/ci/scripts/cleanup.ps1 @@ -0,0 +1,96 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# +# Powershell script for cleaning up remaining browser and selenium server processes on the CI servers +# +# Author: Martin Stockhammer <martin_s@apache.org> +# Date : 2017-04-30 +# +# Descriptions: +# Stopps processes related to the selenium checks, if they were not stopped by the selenium server, because +# the job was aborted. +# The script cannot determine, which of the processes are started by the current job, so if there are +# parallel jobs running on this server that start processes with the same name and user, these +# will be stopped too. +# +# Per default the script will stop "firefox.exe","iexplore.exe","chrome.exe" +# and the processes "java.exe","mshta.exe" if their commandline arguments contain "selenium-server" +# +# Parameters: +# -Verbose : If set, more output will be printed +# -Browsers proc1,proc2 : The list of executables that define the browser processes, that are started by selenium +# -SeleniumProcesses : The list of processes with the string "selenium-server" in the commandline arguments + +param ( + [switch]$Verbose = $False, + [String[]]$Browsers = @("firefox.exe","iexplore.exe","chrome.exe"), + [String[]]$SeleniumProcesses = @("mshta.exe","java.exe") +) + +# $currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name +$currentUser = $env:UserName +Write-Output "User: $currentUser" + +if ($Verbose) +{ + Get-Process | Get-Member + + $View = @( + @{l='Handles';e={$_.HandleCount}}, + @{l='NPM(K)';e={ (Get-Process -Id $_.ProcessId).NonpagedSystemMemorySize/1KB -as [int]}}, + @{l='PM(K)';e={ $_.PrivatePageCount/1KB -as [int]}}, + @{l='WS(K)';e={ $_.WorkingSetSize/1KB -as [int]}}, + @{l='VM(M)';e={ $_.VirtualSize/1mB -as [int]}}, + @{l='CPU(s)';e={ (Get-Process -Id $_.ProcessId).CPU -as [int]}}, + @{l='Id';e={ $_.ProcessId}}, + 'UserName' + @{l='ProcessName';e={ $_.ProcessName}} + ) + Get-WmiObject Win32_Process | % { $_ | + Add-Member -MemberType ScriptProperty -Name UserName -Value { + '{0}\{1}' -f $this.GetOwner().Domain,$this.GetOwner().User + } -Force -PassThru + } +} + +foreach ($procName in $SeleniumProcesses) +{ + $processes = Get-WmiObject Win32_Process -Filter "name = '$procName'" | Where-Object {$_.GetOwner().User -eq $currentUser } | Where-Object {$_.CommandLine -match "selenium-server"} + if ($Verbose) { + Write-Output "Filter: name = '$procName'" + } + foreach($proc in $processes) + { + Write-Output "stopping proccess $($proc.ProcessId) with $($proc.ThreadCount) threads; $($proc.CommandLine.Substring(0, 50))..." + Stop-Process -F $proc.ProcessId + } +} + +foreach ($procName in $Browsers) +{ + $processes = Get-WmiObject Win32_Process -Filter "name = '$procName'" | Where-Object {$_.GetOwner().User -eq $currentUser } + if ($Verbose) { + Write-Output "Filter: name = '$procName'" + } + foreach($proc in $processes) + { + Write-Output "stopping proccess $($proc.ProcessId) with $($proc.ThreadCount) threads; $($proc.CommandLine.Substring(0, 50))..." + Stop-Process -F $proc.ProcessId + } +} |