diff --git a/RenewGitlabMirroring.ps1 b/RenewGitlabMirroring.ps1 new file mode 100644 index 0000000..08adc33 --- /dev/null +++ b/RenewGitlabMirroring.ps1 @@ -0,0 +1,127 @@ +################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 = 5 + +#conteggio progetti trovati +$existingProjects = 0 + +#livello di log: 0=log sintetico, 1=log errori, 2=log full, 3=log ampolloso +$logLevel = 3 + +#output a terminale: 0=disattivo, 1=abilitato +$terminalOutput = 1 + +#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.Contains("finished")) + { + WriteLogOutput 2 "Mirror: $($item.url) - Status: $($item.update_status)" + } + #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)" + } + } + $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) + +# 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") + +#scrivo a video le statistiche +WriteLogOutput 0 "" +WriteLogOutput 0 "PROGETTI ANALIZZATI: $existingProjects" +WriteLogOutput 0 "" +WriteLogOutput 0 "Fine Esecuzione Script: $endTime" +WriteLogOutput 0 "" +WriteLogOutput 0 "Durata Esecuzione Script: $durataScript secondi" +WriteLogOutput 0 "" \ No newline at end of file