################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 $projectsFound = 0 #conteggio progetti con commit negli ultimi giorni $projectWithCommits = 0 #conteggio progetti senza commit negli ultimi giorni $projectWithNoCommits = 0 #conteggio commits degli ultimi giorni $recentCommits = 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 #ultimi giorni da considerare $lastDays = 7 #data per conteggio commits degli ultimi giorni $requestDate = (Get-Date).AddDays(-$lastDays).toString("yyyy-MM-dd") #cartella file di log $GitLogFolder="c:\Steamware\Logs\Gitlab\" #nome file di log $logFile = Join-Path $GitLogFolder "GitlabCommits.log" #dichiaro funzione per scrittura output Function WriteLogOutput { Param ($logType, [string]$logString) #scrivo su file la stringa se il tipo di log è > o = al livello di log richieeso if($logType -le $logLevel) { 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 COMMITS"} 1 {WriteLogOutput 0 "LOG ERRORI GITLAB COMMITS"} 2 {WriteLogOutput 0 "LOG FULL GITLAB COMMITS"} 3 {WriteLogOutput 0 "LOG AMPOLLOSO GITLAB COMMITS"} } WriteLogOutput 0 "" WriteLogOutput 0 "Percorso log: $GitLogFolder" WriteLogOutput 0 "" WriteLogOutput 0 "Inizio Esecuzione Script: $startTime" WriteLogOutput 0 "" WriteLogOutput 0 "RICERCA DA $requestDate | ULTIMI $lastDays GIORNI" #ciclo principale do/while che cicla da 1 a N projectNumber do { $callUrl = "https://gitlab.steamware.net/api/v4/projects/" + $projectCount + "/repository/commits?per_page=100&since=" + $requestDate try { $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**" if($parsedResponse.Count -eq 0 ) { $projectWithNoCommits=$projectWithNoCommits+1 } else { $projectWithCommits=$projectWithCommits+1 foreach($item in $parsedResponse) { if($item.web_url) { WriteLogOutput 1 "Date: $($item.committed_date) - Web Url: $($item.web_url)" $recentCommits=$recentCommits+1 } } } $projectsFound=$projectsFound+1 } #scrivo se trovo un errore (in particolare progetto non trovato o privo di commits) durante il try/catch (solo se loglevel è = 3) catch { WriteLogOutput 3 "" WriteLogOutput 3 "--------------------" WriteLogOutput 3 "**PROGETTO $projectCount NON ESISTENTE**" } $projectCount=$projectCount+1 } #fine ciclo principale while($projectCount -le $projectNumber) #percentuale di projectWithCommits sul totale $projectWithCommitsPercentage = [math]::Round(($projectWithCommits/$projectsFound)*100,1) #percentuale di projectWithNoCommits sul totale $projectWithNoCommitsPercentage = [math]::Round(($projectWithNoCommits/$projectsFound)*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.ProjectsFound -o $projectsFound & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.LastDaysCommits -o $lastDays & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.RecentCommits -o $recentCommits & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ProjectWithCommits -o $projectWithCommits & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ProjectWithNoCommits -o $projectWithNoCommits & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ProjectWithCommitsPercentage -o $projectWithCommitsPercentage & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ProjectWithNoCommitsPercentage -o $projectWithNoCommitsPercentage & "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.CheckCommitsDuration -o $durataScript #scrivo a video le statistiche WriteLogOutput 0 "" WriteLogOutput 0 "PROGETTI TOTALI: $projectsFound" WriteLogOutput 0 "COMMITS TOTALI: $recentCommits" WriteLogOutput 0 "PROGETTI CON COMMITS: $projectWithCommits ($projectWithCommitsPercentage%)" WriteLogOutput 0 "PROGETTI SENZA COMMITS: $projectWithNoCommits ($projectWithNoCommitsPercentage%)" WriteLogOutput 0 "" WriteLogOutput 0 "Fine Esecuzione Script: $endTime" WriteLogOutput 0 "" WriteLogOutput 0 "Durata Esecuzione Script: $durataScript secondi" WriteLogOutput 0 ""