From f654a54acec5d852de5c3b6d4962f082bb2dd9ab Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Fri, 20 Sep 2024 15:55:06 +0200 Subject: [PATCH] NuoviScript: Check Pipeline GitlabNembro e Azzano --- ApiGit/CheckGitlabAzzanoPipelines.ps1 | 121 ++++++++++++++++++++++++++ ApiGit/CheckGitlabNembroPipelines.ps1 | 121 ++++++++++++++++++++++++++ GenericCallUrl/CallUrlExample.ps1 | 52 +++++++++++ 3 files changed, 294 insertions(+) create mode 100644 ApiGit/CheckGitlabAzzanoPipelines.ps1 create mode 100644 ApiGit/CheckGitlabNembroPipelines.ps1 create mode 100644 GenericCallUrl/CallUrlExample.ps1 diff --git a/ApiGit/CheckGitlabAzzanoPipelines.ps1 b/ApiGit/CheckGitlabAzzanoPipelines.ps1 new file mode 100644 index 0000000..a3836cd --- /dev/null +++ b/ApiGit/CheckGitlabAzzanoPipelines.ps1 @@ -0,0 +1,121 @@ +###Gitlab: controllo lo stato delle pipeline dei singoli progetti### + +#Questo script passa in rassegna tutti i progetti esistenti sul gitlab aziendale e per ognuno verifica la presenza e lo stato delle pipeline. +#Poi invia i dati rilevati a zabbix per avere lo storico dello stato delle pipelines. + +#importo file contenente configurazioni +. .\ApiGit\ApiGitResources\ApiScriptsConfig.ps1 +#importo file contenente funzioni +. .\ApiGit\ApiGitResources\ApiScriptsFunctions.ps1 + +#rilevo time per log inizio analisi +$startTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") +# avvio stopwatch +$mainStopWatch = [system.diagnostics.stopwatch]::StartNew() +#contatore ciclo do while +$projectCount = 1 +#numero massimo di progetti da analizzare +$projectNumber = 200 +#conteggio progetti trovati +$projectsWithPipeline = 0 +#conteggio pipeline in errore +$pipelineErrorsCount = 0 +#conteggio pipeline riusciti +$pipelineSuccessCount = 0 +#nome file di log +$logFile = "Gitlab-AzzanoPipeline.log" + +#creazione folder di Log se non già esistente +if (Test-Path $logFolder) { +} +else { + New-Item $logFolder -ItemType Directory +} + +#scrivo intestazione e inizio analisi +WriteLogOutput $logFile 0 "--------------------" +Switch ($logLevel) { + 0 { WriteLogOutput $logFile 0 "LOG SINTETICO GITLAB AZZANO PIPELINE" } + 1 { WriteLogOutput $logFile 0 "LOG ERRORI GITLAB AZZANO PIPELINE" } + 2 { WriteLogOutput $logFile 0 "LOG FULL GITLAB AZZANO PIPELINE" } + 3 { WriteLogOutput $logFile 0 "LOG AMPOLLOSO GITLAB AZZANO PIPELINE" } +} +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "Percorso log: $logFolder" +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "Inizio Esecuzione Script: $startTime" + +#ciclo principale do/while che cicla da 1 a N projectNumber +do { + $callUrl = "https://gitlab-azzano.steamware.net/api/v4/projects/" + $projectCount + "/pipelines/latest" + try { + $Response = Invoke-WebRequest -URI $callUrl -Headers $azzanoHead -ContentType "application/json" -UseBasicParsing + $parsedResponse = $Response.Content | ConvertFrom-Json + #scrivo il numero del progetto nel terminale e su file + WriteLogOutput $logFile 1 "" + WriteLogOutput $logFile 1 "--------------------" + WriteLogOutput $logFile 1 "**PROGETTO $projectCount**" + foreach ($item in $parsedResponse) { + #verifico se i pipeline trovati per il progetto corrente hanno status "success" + if ($item.status.Equals("success")) { + WriteLogOutput $logFile 2 "Pipeline: $($item.web_url) - Status: $($item.status)" + $pipelineSuccessCount = $pipelineSuccessCount + 1 + } + #i pipeline che non hanno status "success" vengono loggati con relativo errore + else { + WriteLogOutput $logFile 1 "Pipeline: $($item.web_url) - Status: $($item.status)" + $pipelineErrorsCount = $pipelineErrorsCount + 1 + } + } + $projectsWithPipeline = $projectsWithPipeline + 1 + } + #scrivo se trovo un errore durante il try/catch + catch { + $parsedError = $_ | ConvertFrom-Json + WriteLogOutput $logFile 3 "" + WriteLogOutput $logFile 3 "--------------------" + WriteLogOutput $logFile 3 "**ERRORE NEL PROGETTO $projectCount**" + WriteLogOutput $logFile 3 $($parsedError.message) + } + $projectCount = $projectCount + 1 +} +#fine ciclo principale +while ($projectCount -le $projectNumber) + +#somma di pipelineSuccess e pipelineErrors +$pipelineCount = $pipelineSuccessCount + $pipelineErrorsCount + +#percentuale di pipelineSuccess sul totale +$pipelineSuccessPercentage = [math]::Round(($pipelineSuccessCount / $pipelineCount) * 100, 1) + +#percentuale di pipelineErrors sul totale +$pipelineErrorsPercentage = [math]::Round(($pipelineErrorsCount / $pipelineCount) * 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 $logFile 0 "" +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ProjectsWithPipeline -o $projectsWithPipeline +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.TotalPipeline -o $pipelineCount +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.SuccessPipeline -o $pipelineSuccessCount +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ErrorsPipeline -o $pipelineErrorsCount +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.SuccessPipelinePercent -o $pipelineSuccessPercentage +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ErrorsPipelinePercent -o $pipelineErrorsPercentage +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.CheckPipelineDuration -o $durataScript + +#scrivo a video le statistiche +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "PROGETTI CON PIPELINE ATTIVE: $projectsWithPipeline" +WriteLogOutput $logFile 0 "PIPELINE TROVATE: $pipelineCount" +WriteLogOutput $logFile 0 "PIPELINE RIUSCITE: $pipelineSuccessCount ($pipelineSuccessPercentage%)" +WriteLogOutput $logFile 0 "PIPELINE FALLITE: $pipelineErrorsCount ($pipelineErrorsPercentage%)" +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "Fine Esecuzione Script: $endTime" +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "Durata Esecuzione Script: $durataScript secondi" +WriteLogOutput $logFile 0 "" \ No newline at end of file diff --git a/ApiGit/CheckGitlabNembroPipelines.ps1 b/ApiGit/CheckGitlabNembroPipelines.ps1 new file mode 100644 index 0000000..a75e28f --- /dev/null +++ b/ApiGit/CheckGitlabNembroPipelines.ps1 @@ -0,0 +1,121 @@ +###Gitlab: controllo lo stato delle pipeline dei singoli progetti### + +#Questo script passa in rassegna tutti i progetti esistenti sul gitlab aziendale e per ognuno verifica la presenza e lo stato delle pipeline. +#Poi invia i dati rilevati a zabbix per avere lo storico dello stato delle pipelines. + +#importo file contenente configurazioni +. .\ApiGit\ApiGitResources\ApiScriptsConfig.ps1 +#importo file contenente funzioni +. .\ApiGit\ApiGitResources\ApiScriptsFunctions.ps1 + +#rilevo time per log inizio analisi +$startTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") +# avvio stopwatch +$mainStopWatch = [system.diagnostics.stopwatch]::StartNew() +#contatore ciclo do while +$projectCount = 1 +#numero massimo di progetti da analizzare +$projectNumber = 200 +#conteggio progetti trovati +$projectsWithPipeline = 0 +#conteggio pipeline in errore +$pipelineErrorsCount = 0 +#conteggio pipeline riusciti +$pipelineSuccessCount = 0 +#nome file di log +$logFile = "Gitlab-NembroPipeline.log" + +#creazione folder di Log se non già esistente +if (Test-Path $logFolder) { +} +else { + New-Item $logFolder -ItemType Directory +} + +#scrivo intestazione e inizio analisi +WriteLogOutput $logFile 0 "--------------------" +Switch ($logLevel) { + 0 { WriteLogOutput $logFile 0 "LOG SINTETICO GITLAB NEMBRO PIPELINE" } + 1 { WriteLogOutput $logFile 0 "LOG ERRORI GITLAB NEMBRO PIPELINE" } + 2 { WriteLogOutput $logFile 0 "LOG FULL GITLAB NEMBRO PIPELINE" } + 3 { WriteLogOutput $logFile 0 "LOG AMPOLLOSO GITLAB NEMBRO PIPELINE" } +} +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "Percorso log: $logFolder" +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "Inizio Esecuzione Script: $startTime" + +#ciclo principale do/while che cicla da 1 a N projectNumber +do { + $callUrl = "https://gitlab-nembro.steamware.net/api/v4/projects/" + $projectCount + "/pipelines/latest" + try { + $Response = Invoke-WebRequest -URI $callUrl -Headers $nembroHead -ContentType "application/json" -UseBasicParsing + $parsedResponse = $Response.Content | ConvertFrom-Json + #scrivo il numero del progetto nel terminale e su file + WriteLogOutput $logFile 1 "" + WriteLogOutput $logFile 1 "--------------------" + WriteLogOutput $logFile 1 "**PROGETTO $projectCount**" + foreach ($item in $parsedResponse) { + #verifico se i pipeline trovati per il progetto corrente hanno status "success" + if ($item.status.Equals("success")) { + WriteLogOutput $logFile 2 "Pipeline: $($item.web_url) - Status: $($item.status)" + $pipelineSuccessCount = $pipelineSuccessCount + 1 + } + #i pipeline che non hanno status "success" vengono loggati con relativo errore + else { + WriteLogOutput $logFile 1 "Pipeline: $($item.web_url) - Status: $($item.status)" + $pipelineErrorsCount = $pipelineErrorsCount + 1 + } + } + $projectsWithPipeline = $projectsWithPipeline + 1 + } + #scrivo se trovo un errore durante il try/catch + catch { + $parsedError = $_ | ConvertFrom-Json + WriteLogOutput $logFile 3 "" + WriteLogOutput $logFile 3 "--------------------" + WriteLogOutput $logFile 3 "**ERRORE NEL PROGETTO $projectCount**" + WriteLogOutput $logFile 3 $($parsedError.message) + } + $projectCount = $projectCount + 1 +} +#fine ciclo principale +while ($projectCount -le $projectNumber) + +#somma di pipelineSuccess e pipelineErrors +$pipelineCount = $pipelineSuccessCount + $pipelineErrorsCount + +#percentuale di pipelineSuccess sul totale +$pipelineSuccessPercentage = [math]::Round(($pipelineSuccessCount / $pipelineCount) * 100, 1) + +#percentuale di pipelineErrors sul totale +$pipelineErrorsPercentage = [math]::Round(($pipelineErrorsCount / $pipelineCount) * 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 $logFile 0 "" +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ProjectsWithPipeline -o $projectsWithPipeline +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.TotalPipeline -o $pipelineCount +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.SuccessPipeline -o $pipelineSuccessCount +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ErrorsPipeline -o $pipelineErrorsCount +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.SuccessPipelinePercent -o $pipelineSuccessPercentage +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.ErrorsPipelinePercent -o $pipelineErrorsPercentage +#& "C:\Program Files\Zabbix Agent\zabbix_sender.exe" -z zabproxy.ufficio -s "IIS04" -k Gitlab.CheckPipelineDuration -o $durataScript + +#scrivo a video le statistiche +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "PROGETTI CON PIPELINE ATTIVE: $projectsWithPipeline" +WriteLogOutput $logFile 0 "PIPELINE TROVATE: $pipelineCount" +WriteLogOutput $logFile 0 "PIPELINE RIUSCITE: $pipelineSuccessCount ($pipelineSuccessPercentage%)" +WriteLogOutput $logFile 0 "PIPELINE FALLITE: $pipelineErrorsCount ($pipelineErrorsPercentage%)" +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "Fine Esecuzione Script: $endTime" +WriteLogOutput $logFile 0 "" +WriteLogOutput $logFile 0 "Durata Esecuzione Script: $durataScript secondi" +WriteLogOutput $logFile 0 "" \ No newline at end of file diff --git a/GenericCallUrl/CallUrlExample.ps1 b/GenericCallUrl/CallUrlExample.ps1 new file mode 100644 index 0000000..d9ec177 --- /dev/null +++ b/GenericCallUrl/CallUrlExample.ps1 @@ -0,0 +1,52 @@ +#######PREDISPOSIZIONE FILE, FOLDER E FUNZIONE DI LOG####### + +#definisco cartella file di log +$logFolder = "c:\EgwLogs\" +#definisco nome file di log +$logFile = "ExampleLog1.log" + +#verifico se esiste la cartella di log +if (Test-Path $logFolder) { +} +#se non esiste la cartella di log la creo +else { + New-Item $logFolder -ItemType Directory +} + +#rilevo time per log inizio analisi +$dateTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") + +#funzione per scrittura output & log +Function WriteLogOutput { + Param ($logFile, [string]$logString) + #compongo path per file di log + $logPath = Join-Path $logFolder $logFile + #aggiungo il contenuto della stringa da loggare + Add-content $logPath -value "$logString" + #scrivo a terminale il contenuto della stringa da loggare + Write-Output($logString) +} + +#compongo URL da chiamare con successivo try/catch +######### $callUrl = "https://URL/DA/CHIAMARE" + $varieEventuiali + "/EVENTUALE URL/" + $varieEventuali + #eseguo call url con try/catch + try { + ######### $Response = Invoke-WebRequest -URI $callUrl -Headers $EventualeHeader -ContentType "application/json" -UseBasicParsing + #converto da Json la risposta in caso di esito positivo del try/catch + $parsedResponse = $Response.Content | ConvertFrom-Json + #scrivo su log data/ora e risposta convertita dal Json + WriteLogOutput $logFile "--------------------" + WriteLogOutput $logFile "Date/Time: $dateTime" + WriteLogOutput $logFile "Response:" + WriteLogOutput $logFile $($parsedResponse.message) + } + #scrivo se trovo un errore durante il try/catch + catch { + #converto da Json l'eventuale errore in caso di esito negativo del try/catch + $parsedError = $_ | Out-String | ConvertFrom-Json + #scrivo su log data/ora e errore convertito dal Json + WriteLogOutput $logFile "--------------------" + WriteLogOutput $logFile "Date/Time: $dateTime" + WriteLogOutput $logFile "Error:" + WriteLogOutput $logFile $($parsedError.message) + } \ No newline at end of file