################START SCRIPT################ #rilevo time per log inizio analisi $startTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") # avvio stopwatch $mainStopWatch = [system.diagnostics.stopwatch]::StartNew() #token per autenticazione $head = @{"PRIVATE-TOKEN"="glpat-dQsUhS-GxNomkh1GnjHZ"} #contatore ciclo do while $projectCount = 1 #numero massimo di progetti da analizzare $projectNumber = 200 #conteggio progetti trovati $existingProjects = 0 #conteggio mirroring in errore $mirrorErrorsCount = 0 #conteggio mirroring riusciti $mirrorSuccessCount = 0 #livello di log: 0=log sintetico, 1=log errori, 2=log full, 3=log ampolloso $logLevel = 0 #output a terminale: 0=disattivo, 1=abilitato $terminalOutput = 0 #cartella file di log $GitLogFolder="c:\Steamware\Logs\Gitlab\" #nome file di log $logFile = Join-Path $GitLogFolder "GitlabMirroring.log" #dichiaro funzione per scrittura output Function WriteLogOutput { Param ($logType, [string]$logString) if($logType -le $logLevel) { #scrivo su file la stringa Add-content $logFile -value "$logString" #scrivo su terminale la stringa se $terminalOutput=1 if($terminalOutput -eq 1){ Write-Output($logString) } } } #creazione folder di Log se non già esistente if (Test-Path $GitLogFolder) { } else { New-Item $GitLogFolder -ItemType Directory } #scrivo intestazione e inizio analisi WriteLogOutput 0 "--------------------" Switch ($logLevel) { 0 {WriteLogOutput 0 "LOG SINTETICO GITLAB MIRRORING"} 1 {WriteLogOutput 0 "LOG ERRORI GITLAB MIRRORING"} 2 {WriteLogOutput 0 "LOG FULL GITLAB MIRRORING"} 3 {WriteLogOutput 0 "LOG AMPOLLOSO GITLAB MIRRORING"} } WriteLogOutput 0 "" WriteLogOutput 0 "Percorso log: $GitLogFolder" WriteLogOutput 0 "" WriteLogOutput 0 "Inizio Esecuzione Script: $startTime" #ciclo principale do/while che cicla da 1 a N projectNumber do { #chiamata api che restituisce informazioni sullo stato dei mirror $callUrl = "https://gitlab.steamware.net/api/v4/projects/" + $projectCount + "/remote_mirrors" try { #parsing della risposta api convertita da json $Response = Invoke-WebRequest -URI $callUrl -Headers $head -ContentType "application/json" -UseBasicParsing $parsedResponse = $Response.Content | ConvertFrom-Json #scrivo il numero del progetto nel terminale e su file WriteLogOutput 1 "" WriteLogOutput 1 "--------------------" WriteLogOutput 1 "**PROGETTO $projectCount**" foreach($item in $parsedResponse) { #verifico se i mirroring trovati per il progetto corrente hanno status "finished" if($item.update_status.Equals("finished")) { WriteLogOutput 2 "Mirror: $($item.url) - Status: $($item.update_status)" $mirrorSuccessCount=$mirrorSuccessCount+1 } #i mirroring che non hanno status "finished" vengono loggati con relativo errore else { WriteLogOutput 1 "Mirror: $($item.url) - Status: $($item.update_status)" WriteLogOutput 1 "Error: $($item.last_error)" $mirrorErrorsCount=$mirrorErrorsCount+1 } } $existingProjects=$existingProjects+1 } #scrivo se trovo un errore (in particolare progetto ID non trovato) durante il try/catch catch { WriteLogOutput 3 "" WriteLogOutput 3 "--------------------" WriteLogOutput 3 "**ERRORE: PROGETTO $projectCount NON ESISTENTE**" } $projectCount=$projectCount+1 } #fine ciclo principale while($projectCount -le $projectNumber) #somma di mirrorSuccess e mirrorErrors $mirrorCount = $mirrorSuccessCount+$mirrorErrorsCount #percentuale di mirrorSuccess sul totale $mirrorSuccessPercentage = [math]::Round(($mirrorSuccessCount/$mirrorCount)*100,1) #percentuale di mirrorErrors sul totale $mirrorErrorsPercentage = [math]::Round(($mirrorErrorsCount/$mirrorCount)*100,1) # fermo stopwatch e calcolo durata script $mainStopWatch.Stop() $durataScript = $mainStopWatch.Elapsed.TotalSeconds #rilevo time per log fine analisi $endTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") #invio a zabbix le metriche rilevate tramite zabbix_sender.exe WriteLogOutput 0 "" & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.Projects -o $existingProjects & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.TotalMirror -o $mirrorCount & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.SuccessMirror -o $mirrorSuccessCount & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ErrorsMirror -o $mirrorErrorsCount & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.SuccessMirrorPercent -o $mirrorSuccessPercentage & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ErrorsMirrorPercent -o $mirrorErrorsPercentage & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.CheckMirrorDuration -o $durataScript #scrivo a video le statistiche WriteLogOutput 0 "" WriteLogOutput 0 "PROGETTI ANALIZZATI: $existingProjects" WriteLogOutput 0 "MIRRORING TOTALI: $mirrorCount" WriteLogOutput 0 "MIRRORING RIUSCITI: $mirrorSuccessCount ($mirrorSuccessPercentage%)" WriteLogOutput 0 "MIRRORING FALLITI: $mirrorErrorsCount ($mirrorErrorsPercentage%)" WriteLogOutput 0 "" WriteLogOutput 0 "Fine Esecuzione Script: $endTime" WriteLogOutput 0 "" WriteLogOutput 0 "Durata Esecuzione Script: $durataScript secondi" WriteLogOutput 0 ""