Ver Fonte

add logrotate script

Tobias Simetsreiter há 3 anos atrás
pai
commit
f8ac6f547d
2 ficheiros alterados com 141 adições e 6 exclusões
  1. 8 6
      gitlab/groupusers.ps1
  2. 133 0
      lib/LogRotate.ps1

+ 8 - 6
gitlab/groupusers.ps1

@@ -1,6 +1,10 @@
 
 
 . "$PSScriptRoot\..\runtime\gl_token.ps1"
+. "$PSScriptRoot\..\lib\LogRotate.ps1"
+
+Set-Logfile ([IO.Path]::GetFullPath("$PSScriptRoot\..\runtime\groupusers.log"))
+
 
 foreach ($module in @("ActiveDirectory")){
     if (-not (Get-Module $module -All)) {
@@ -11,9 +15,6 @@ foreach ($module in @("ActiveDirectory")){
     }
 }
 
-
-$LogPath = Resolve-Path "$PSScriptRoot\..\runtime\"
-
 $departments = @(
     @{
         name="ANNAX CH Testing and Integration"
@@ -30,13 +31,14 @@ $departments = @(
 )
 
 &{
-    Get-Date
     $departments | ForEach-Object {
     $filter = "*("+$_.id+")"
     $_.name
     $_.glgroup
-    Get-Date
     Get-ADUser -Filter {Department -like $filter} -Properties emailaddress,Department |
         Select-Object -ExpandProperty emailaddress | &"$PSScriptRoot\gitlab-invite.ps1" -group $_.glgroup -access_level $_.access_level
     }
-} *>> "$LogPath\groupusers.log"
+} *| Foreach-Object {
+    Write-Log ([string]$_)
+}
+

+ 133 - 0
lib/LogRotate.ps1

@@ -0,0 +1,133 @@
+# all logging settins are here on top
+$logFile = "log-$(gc env:computername).log"
+$logLevel = "DEBUG" # ("DEBUG","INFO","WARN","ERROR","FATAL")
+$logSize = 1mb # 30kb
+$logCount = 10
+# end of settings
+
+function Write-Log-Line ($line) {
+    Add-Content $logFile -Value $Line
+    Write-Host $Line
+}
+
+Function Set-Logfile ($path) {
+    $script:logFile = $path
+}
+
+# http://stackoverflow.com/a/38738942
+Function Write-Log {
+    [CmdletBinding()]
+    Param(
+    [Parameter(Mandatory=$True)]
+    [string]
+    $Message,
+    
+    [Parameter(Mandatory=$False)]
+    [String]
+    $Level = "DEBUG"
+    )
+
+    $levels = ("DEBUG","INFO","WARN","ERROR","FATAL")
+    $logLevelPos = [array]::IndexOf($levels, $logLevel)
+    $levelPos = [array]::IndexOf($levels, $Level)
+    $Stamp = Get-Date -Format "o"
+
+    if ($logLevelPos -lt 0){
+        Write-Log-Line "$Stamp ERROR Wrong logLevel configuration [$logLevel]"
+    }
+    
+    if ($levelPos -lt 0){
+        Write-Log-Line "$Stamp ERROR Wrong log level parameter [$Level]"
+    }
+
+    # if level parameter is wrong or configuration is wrong I still want to see the 
+    # message in log
+    if ($levelPos -lt $logLevelPos -and $levelPos -ge 0 -and $logLevelPos -ge 0){
+        return
+    }
+
+    $Line = "$Stamp $Level $Message"
+    Write-Log-Line $Line
+}
+
+# https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Script-to-Roll-a96ec7d4
+function Reset-Log 
+{ 
+    # function checks to see if file in question is larger than the paramater specified 
+    # if it is it will roll a log and delete the oldes log if there are more than x logs. 
+    param([string]$fileName, [int64]$filesize = 1mb , [int] $logcount = 5) 
+     
+    $logRollStatus = $true 
+    if(test-path $filename) 
+    { 
+        $file = Get-ChildItem $filename 
+        if((($file).length) -ige $filesize) #this starts the log roll 
+        { 
+            $fileDir = $file.Directory 
+            #this gets the name of the file we started with 
+            $fn = $file.name
+            $files = Get-ChildItem $filedir | ?{$_.name -like "$fn*"} | Sort-Object lastwritetime 
+            #this gets the fullname of the file we started with 
+            $filefullname = $file.fullname
+            #$logcount +=1 #add one to the count as the base file is one more than the count 
+            for ($i = ($files.count); $i -gt 0; $i--) 
+            {  
+                #[int]$fileNumber = ($f).name.Trim($file.name) #gets the current number of 
+                # the file we are on 
+                $files = Get-ChildItem $filedir | ?{$_.name -like "$fn*"} | Sort-Object lastwritetime 
+                $operatingFile = $files | ?{($_.name).trim($fn) -eq $i} 
+                if ($operatingfile) 
+                 {$operatingFilenumber = ($files | ?{($_.name).trim($fn) -eq $i}).name.trim($fn)} 
+                else 
+                {$operatingFilenumber = $null} 
+ 
+                if(($operatingFilenumber -eq $null) -and ($i -ne 1) -and ($i -lt $logcount)) 
+                { 
+                    $operatingFilenumber = $i 
+                    $newfilename = "$filefullname.$operatingFilenumber" 
+                    $operatingFile = $files | ?{($_.name).trim($fn) -eq ($i-1)} 
+                    write-host "moving to $newfilename" 
+                    move-item ($operatingFile.FullName) -Destination $newfilename -Force 
+                } 
+                elseif($i -ge $logcount) 
+                { 
+                    if($operatingFilenumber -eq $null) 
+                    {  
+                        $operatingFilenumber = $i - 1 
+                        $operatingFile = $files | ?{($_.name).trim($fn) -eq $operatingFilenumber} 
+                        
+                    } 
+                    write-host "deleting " ($operatingFile.FullName) 
+                    remove-item ($operatingFile.FullName) -Force 
+                } 
+                elseif($i -eq 1) 
+                { 
+                    $operatingFilenumber = 1 
+                    $newfilename = "$filefullname.$operatingFilenumber" 
+                    write-host "moving to $newfilename" 
+                    move-item $filefullname -Destination $newfilename -Force 
+                } 
+                else 
+                { 
+                    $operatingFilenumber = $i +1  
+                    $newfilename = "$filefullname.$operatingFilenumber" 
+                    $operatingFile = $files | ?{($_.name).trim($fn) -eq ($i-1)} 
+                    write-host "moving to $newfilename" 
+                    move-item ($operatingFile.FullName) -Destination $newfilename -Force    
+                } 
+            } 
+          } 
+         else 
+         { $logRollStatus = $false} 
+    } 
+    else 
+    { 
+        $logrollStatus = $false 
+    } 
+    $LogRollStatus 
+} 
+
+# to null to avoid output
+$Null = @(
+    Reset-Log -fileName $logFile -filesize $logSize -logcount $logCount
+)