common updated with CSV import data and contributors bugfix

This commit is contained in:
Jordi Sune 2023-10-12 17:23:42 +02:00
Родитель 3f4ab9b227
Коммит 9df39d15d7
1 изменённых файлов: 485 добавлений и 279 удалений

Просмотреть файл

@ -1,48 +1,207 @@
using namespace System.Net
function get-bicepRepos {
# Define the URL of the CSV file
$csvUrl = "https://azure.github.io/Azure-Verified-Modules/module-indexes/BicepResourceModules.csv"
# Use Invoke-WebRequest to download the CSV file
$response = Invoke-WebRequest -Uri $csvUrl
# Check if the request was successful
if ($response.StatusCode -eq 200) {
# Save the content of the response to a temporary file
$tempFile = [System.IO.Path]::GetTempFileName() + ".csv"
$response.Content | Set-Content -Path $tempFile -Force
# Import the CSV data into a variable
$csvData = Import-Csv -Path $tempFile
# Display the data:
#$csvData | Format-Table
# Clean up the temporary file when you're done
Remove-Item $tempFile -Force
} else {
Write-Host "Failed to download CSV file. Status code: $($response.StatusCode)"
}
$repolist = @()
#Create table
$storageAccount = Get-AzStorageAccount -Name $env:storageAccount -ResourceGroupName $env:resourceGroup
$ctx = $storageAccount.Context
$partitionKey = "CSVBicepReposData"
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
foreach($repo in $csvData){
#write-host "Fetching repository... $($repo.RepoURL)"
# Define a regular expression pattern to match the desired part of the URL
$pattern = "github\.com\/([^/]+\/[^/]+)"
# Use the -match operator to find matches in the URL
if ($($repo.RepoURL) -match $pattern) {
# $matches[1] contains the matched portion of the URL
$result = $matches[1]
#Write-Host $result
if (($repo.ModuleStatus -eq "Module Available :green_circle:") -or ($repo.ModuleStatus -eq "Module Orphaned :eyes:")) {
$repolist += $result
}
else{
#Write-Host "Module not available"
}
} else {
Write-Host "No match found."
}
#Add all CSV repo data to a storage table
$BicepRepo = @{
ProviderNamespace = $repo.ProviderNamespace
ResourceType = $repo.ResourceType
ModuleDisplayName = $repo.ModuleDisplayName
ModuleName = $repo.ModuleName
ModuleStatus = $repo.ModuleStatus
RepoURL = $repo.RepoURL
PublicRegistryReference = $repo.PublicRegistryReference
TelemetryIdPrefix = $repo.TelemetryIdPrefix
PrimaryModuleOwnerGHHandle = $repo.PrimaryModuleOwnerGHHandle
PrimaryModuleOwnerDisplayName = $repo.PrimaryModuleOwnerDisplayName
SecondaryModuleOwnerGHHandle = $repo.SecondaryModuleOwnerGHHandle
SecondaryModuleOwnerDisplayName = $repo.SecondaryModuleOwnerDisplayName
ModuleOwnersGHTeam = $repo.ModuleOwnersGHTeam
ModuleContributorsGHTeam = $repo.ModuleContributorsGHTeam
Description = $repo.Description
Comments = $repo.Comments
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $repo.TelemetryIdPrefix -property $BicepRepo -UpdateExisting | Out-Null
}
$AVMRepo = "Azure/Azure-Verified-Modules"
$repolist += $AVMRepo
#$repolist_final = ($repolist | get-unique)
return $repolist| get-unique
}
Function Get-TFRepos{
$terraformCsvUrl = "https://azure.github.io/Azure-Verified-Modules/module-indexes/TerraformResourceModules.csv"
# Use Invoke-WebRequest to download the CSV file
$response = Invoke-WebRequest -Uri $terraformCsvUrl
# Check if the request was successful
if ($response.StatusCode -eq 200) {
# Save the content of the response to a temporary file
$tempFile = [System.IO.Path]::GetTempFileName() + ".csv"
$response.Content | Set-Content -Path $tempFile -Force
# Import the CSV data into a variable
$csvData = Import-Csv -Path $tempFile
# Display the data:
#$csvData | Format-Table
# Clean up the temporary file when you're done
Remove-Item $tempFile -Force
} else {
Write-Host "Failed to download CSV file. Status code: $($response.StatusCode)"
}
$repolist = @()
#Create table
$storageAccount = Get-AzStorageAccount -Name $env:storageAccount -ResourceGroupName $env:resourceGroup
$ctx = $storageAccount.Context
$partitionKey = "CSVTFReposData"
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
foreach($repo in $csvData){
#write-host "Fetching repository... $($repo.RepoURL)"
$pattern = "github\.com\/(.+)$"
# Use the -match operator to find matches in the URL
if ($($repo.RepoURL) -match $pattern) {
# $matches[1] contains the matched portion of the URL
$result = $matches[1]
#Write-Host $result
if (($repo.ModuleStatus -eq "Module Available :green_circle:") -or ($repo.ModuleStatus -eq "Module Orphaned :eyes:")) {
$repolist += $result
}
else{
#Write-Host "Module not available"
}
} else {
Write-Host "No match found."
}
# Add all CSV repo data to a storage table
$TFRepo = @{
ProviderNamespace = $repo.ProviderNamespace
ResourceType = $repo.ResourceType
ModuleDisplayName = $repo.ModuleDisplayName
ModuleName = $repo.ModuleName
ModuleStatus = $repo.ModuleStatus
RepoURL = $repo.RepoURL
PublicRegistryReference = $repo.PublicRegistryReference
TelemetryIdPrefix = $repo.TelemetryIdPrefix
PrimaryModuleOwnerGHHandle = $repo.PrimaryModuleOwnerGHHandle
PrimaryModuleOwnerDisplayName = $repo.PrimaryModuleOwnerDisplayName
SecondaryModuleOwnerGHHandle = $repo.SecondaryModuleOwnerGHHandle
SecondaryModuleOwnerDisplayName = $repo.SecondaryModuleOwnerDisplayName
ModuleOwnersGHTeam = $repo.ModuleOwnersGHTeam
ModuleContributorsGHTeam = $repo.ModuleContributorsGHTeam
Description = $repo.Description
Comments = $repo.Comments
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $repo.TelemetryIdPrefix -property $TFRepo -UpdateExisting | Out-Null
}
$TFRepolist = $repolist | get-unique
return $TFRepolist
}
Function Get-Repository {
$owner = $env:owner
$repository = $env:repository
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[array]$repolist
)
#$owner = $env:owner
#$repository = $env:repository
$pat = $env:pat
#Create table
$storageAccount = Get-AzStorageAccount -Name $env:storageAccount -ResourceGroupName $env:resourceGroup
$ctx = $storageAccount.Context
$partitionKey = "Repository"
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
foreach ($repo in $repolist){
Write-Host "Fetching repository..."
$repositoryBaseUrl = "https://api.github.com/repos/$($repo)"
$header = @{authorization = "token $pat" }
Write-Host "Fetching repository..."
$repositoryBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)"
$header = @{authorization = "token $pat" }
$repository = Invoke-RestMethod -Uri $repositoryBaseUrl -Method Get -ContentType "application/json" -Headers $header
$repositoryTable = @{
owner = $repository.owner.login
id = $repository.id
name = $repository.name
fullName = $repository.full_name
forks = $repository.forks
watchers = $repository.subscribers_count
stargazers = $repository.stargazers_count
size = $repository.size
openIssues = $repository.open_issues
createdAt = $repository.created_at
$repository = Invoke-RestMethod -Uri $repositoryBaseUrl -Method Get -ContentType "application/json" -Headers $header
$repositoryTable = @{
owner = $repository.owner.login
id = $repository.id
name = $repository.name
fullName = $repository.full_name
forks = $repository.forks
watchers = $repository.subscribers_count
stargazers = $repository.stargazers_count
size = $repository.size
openIssues = $repository.open_issues
createdAt = $repository.created_at
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $repository.id -property $repositoryTable -UpdateExisting | Out-Null
Write-Host "Repository successfully loaded"
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $repository.id -property $repositoryTable -UpdateExisting | Out-Null
Write-Host "Repository successfully loaded"
}
Function Get-Forks {
[CmdletBinding()]
param (
[Parameter(Mandatory = $false)]
[Switch]$DailyRefresh
[Switch]$DailyRefresh,
[Parameter(Mandatory = $true)]
[array]$repolist
)
$owner = $env:owner
$repository = $env:repository
#$owner = $env:owner
#$repository = $env:repository
$pat = $env:pat
#Create table
@ -52,69 +211,73 @@ Function Get-Forks {
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
$forksBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)/forks?per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
Write-Host "Fetching Forks..."
$forks = Invoke-RestMethod -Uri $forksBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$forks = $forks | Where-Object { $_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
$dashboardForks = @()
while ($forks.Count -gt 0) {
$forks | ForEach-Object {
$fork = @{
id = $_.id
fullName = $_.full_name
owner = $_.owner.login
createdAt = $_.created_at
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.id -property $fork -UpdateExisting | Out-Null
$dashboardForks += $fork
#Check if the fork has been forked (2nd level)
try {
$secondForks = Invoke-RestMethod -Uri $_.forks_url -Method Get -ContentType "application/json" -Headers $header
$secondForks | ForEach-Object {
$fork = @{
id = $_.id
fullName = $_.full_name
owner = $_.owner.login
createdAt = $_.created_at
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.id -property $fork -UpdateExisting | Out-Null
$dashboardForks += $fork
}
}
catch {
$StatusCode = $_.Exception.Response.StatusCode.value__
if ($StatusCode -eq "404") {
Write-Host "Fork not found"
}
else {
Write-Host "$($_.Exception.Message)"
}
}
}
$page += 1
$uri = $forksBaseUrl + "&page=$page"
$forks = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
foreach ($repo in $repolist){
$forksBaseUrl = "https://api.github.com/repos/$($repo)/forks?per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
Write-Host "Fetching Forks..."
$forks = Invoke-RestMethod -Uri $forksBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$forks = $forks | Where-Object { $_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
$dashboardForks = @()
while ($forks.Count -gt 0) {
$forks | ForEach-Object {
$fork = @{
id = $_.id
fullName = $_.full_name
owner = $_.owner.login
createdAt = $_.created_at
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.id -property $fork -UpdateExisting | Out-Null
$dashboardForks += $fork
#Check if the fork has been forked (2nd level)
try {
$secondForks = Invoke-RestMethod -Uri $_.forks_url -Method Get -ContentType "application/json" -Headers $header
$secondForks | ForEach-Object {
$fork = @{
id = $_.id
fullName = $_.full_name
owner = $_.owner.login
createdAt = $_.created_at
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.id -property $fork -UpdateExisting | Out-Null
$dashboardForks += $fork
}
}
catch {
$StatusCode = $_.Exception.Response.StatusCode.value__
if ($StatusCode -eq "404") {
Write-Host "Fork not found"
}
else {
Write-Host "$($_.Exception.Message)"
}
}
}
$page += 1
$uri = $forksBaseUrl + "&page=$page"
$forks = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$forks = $forks | Where-Object { $_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
}
Write-Host "$($dashboardForks.Count) Forks successfully loaded"
}
Write-Host "$($dashboardForks.Count) Forks successfully loaded"
}
Function Get-Clones {
[CmdletBinding()]
param (
[Parameter(Mandatory = $false)]
[Switch]$DailyRefresh
[Switch]$DailyRefresh,
[Parameter(Mandatory = $true)]
[array]$repolist
)
$owner = $env:owner
$repository = $env:repository
#$owner = $env:owner
#$repository = $env:repository
$pat = $env:pat
#Create table
@ -124,47 +287,52 @@ Function Get-Clones {
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
Write-Host "Fetching Clones..."
$clonesBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)/traffic/clones?per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
foreach ($repo in $repolist){
Write-Host "Fetching Clones..."
$clonesBaseUrl = "https://api.github.com/repos/$($repo)/traffic/clones?per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
$clones = Invoke-RestMethod -Uri $clonesBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$clones = $clones | Where-Object { $_.timestamp -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
$dashboardClones = @()
while ((($clones.clones).Count -gt 0) -and ($page -lt 10)) {
$clones.clones | ForEach-Object {
$id = [int]((([string]$_.timestamp).Split(" ")[0]) -replace "/", "")
$clone = @{
id = $id
date = $_.timestamp
uniques = $_.uniques
count = $_.count
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $id -property $clone -UpdateExisting | Out-Null
$dashboardClones += $clone
}
$page += 1
$uri = $clonesBaseUrl + "&page=$page"
$clones = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
$clones = Invoke-RestMethod -Uri $clonesBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$clones = $clones | Where-Object { $_.timestamp -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
$dashboardClones = @()
while ((($clones.clones).Count -gt 0) -and ($page -lt 10)) {
$clones.clones | ForEach-Object {
$id = [int]((([string]$_.timestamp).Split(" ")[0]) -replace "/", "")
$clone = @{
id = $id
date = $_.timestamp
uniques = $_.uniques
count = $_.count
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $id -property $clone -UpdateExisting | Out-Null
$dashboardClones += $clone
}
$page += 1
$uri = $clonesBaseUrl + "&page=$page"
$clones = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$clones = $clones | Where-Object { $_.timestamp -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
}
Write-Host "$($dashboardClones.Count) Clones successfully loaded"
}
Write-Host "$($dashboardClones.Count) Clones successfully loaded"
}
Function Get-OpenPullRequests {
[CmdletBinding()]
param (
[Parameter(Mandatory = $false)]
[Switch]$DailyRefresh
[Switch]$DailyRefresh,
[Parameter(Mandatory = $true)]
[array]$repolist
)
$owner = $env:owner
$repository = $env:repository
# $owner = $env:owner
# $repository = $env:repository
$pat = $env:pat
#Create table
@ -174,55 +342,60 @@ Function Get-OpenPullRequests {
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
Write-Host "Fetching open pull requests..."
$openPullRequestsBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)/pulls?state=all&per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
foreach ($repo in $repolist){
Write-Host "Fetching open pull requests..."
$openPullRequestsBaseUrl = "https://api.github.com/repos/$($repo)/pulls?state=all&per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
$openPullRequests = Invoke-RestMethod -Uri $openPullRequestsBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$openPullRequests = $openPullRequests | Where-Object { ($_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) -or ($_.closed_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) }
}
$dashboardopenPullRequests = @()
while (($openPullRequests.Count -gt 0) -and ($page -lt 10)) {
$openPullRequests | ForEach-Object {
$statsUrl = "https://api.github.com/repos/$($owner)/$($repository)/pulls/$($_.number)"
$stats = Invoke-RestMethod -Uri $statsUrl -Method Get -ContentType "application/json" -Headers $header
$openPullRequest = @{
id = $_.id
number = $_.number
user = $_.user.login
state = $_.state
title = $_.title
createdDate = $_.created_at
additions = $stats.additions
deletions = $stats.deletions
changedFiles = $stats.changed_files
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.number -property $openPullRequest -UpdateExisting | Out-Null
$dashboardopenPullRequests += $openPullRequest
}
$page += 1
$uri = $openPullRequestsBaseUrl + "&page=$page"
$openPullRequests = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
$openPullRequests = Invoke-RestMethod -Uri $openPullRequestsBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$openPullRequests = $openPullRequests | Where-Object { ($_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) -or ($_.closed_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) }
}
$dashboardopenPullRequests = @()
while (($openPullRequests.Count -gt 0) -and ($page -lt 10)) {
$openPullRequests | ForEach-Object {
$statsUrl = "https://api.github.com/repos/$($repo)/pulls/$($_.number)"
$stats = Invoke-RestMethod -Uri $statsUrl -Method Get -ContentType "application/json" -Headers $header
$openPullRequest = @{
id = $_.id
number = $_.number
user = $_.user.login
state = $_.state
title = $_.title
createdDate = $_.created_at
additions = $stats.additions
deletions = $stats.deletions
changedFiles = $stats.changed_files
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.number -property $openPullRequest -UpdateExisting | Out-Null
$dashboardopenPullRequests += $openPullRequest
}
$page += 1
$uri = $openPullRequestsBaseUrl + "&page=$page"
$openPullRequests = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$openPullRequests = $openPullRequests | Where-Object { ($_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) -or ($_.closed_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) }
}
}
Write-Host "$($dashboardopenPullRequests.Count) Open pull requests successfully loaded"
$return = $dashboardopenPullRequests.user | Sort-Object -Unique
return $return
}
Write-Host "$($dashboardopenPullRequests.Count) Open pull requests successfully loaded"
$return = $dashboardopenPullRequests.user | Sort-Object -Unique
return $return
}
Function Get-ClosedPullRequests {
[CmdletBinding()]
param (
[Parameter(Mandatory = $false)]
[Switch]$DailyRefresh
[Switch]$DailyRefresh,
[Parameter(Mandatory = $true)]
[array]$repolist
)
$owner = $env:owner
$repository = $env:repository
#$owner = $env:owner
#$repository = $env:repository
$pat = $env:pat
#Create table
@ -232,51 +405,59 @@ Function Get-ClosedPullRequests {
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
Write-Host "Fetching closed pull requests..."
$closedPullRequestsBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)/pulls?state=closed&per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
foreach ($repo in $repolist){
Write-Host "Fetching closed pull requests..."
$closedPullRequestsBaseUrl = "https://api.github.com/repos/$($repo)/pulls?state=closed&per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
$closedPullRequests = Invoke-RestMethod -Uri $closedPullRequestsBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$closedPullRequests = $closedPullRequests | Where-Object { ($_.closed_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) }
}
$dashboardclosedPullRequests = @()
while (($closedPullRequests.Count -gt 0) -and ($page -lt 10)) {
$closedPullRequests | ForEach-Object {
$statsUrl = "https://api.github.com/repos/$($owner)/$($repository)/pulls/$($_.number)"
$stats = Invoke-RestMethod -Uri $statsUrl -Method Get -ContentType "application/json" -Headers $header
$closedPullRequest = @{
id = $_.id
number = $_.number
user = $_.user.login
state = $_.state
title = $_.title
createdDate = $_.created_at
closedDate = if ([String]::IsNullOrEmpty($_.closed_at)) { "" } else { $_.closed_at }
mergedDate = if ([String]::IsNullOrEmpty($_.merged_at)) { "" } else { $_.merged_at }
additions = $stats.additions
deletions = $stats.deletions
changedFiles = $stats.changed_files
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.number -property $closedPullRequest -UpdateExisting | Out-Null
$dashboardclosedPullRequests += $closedPullRequest
}
$page += 1
$uri = $closedPullRequestsBaseUrl + "&page=$page"
$closedPullRequests = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
$closedPullRequests = Invoke-RestMethod -Uri $closedPullRequestsBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$closedPullRequests = $closedPullRequests | Where-Object { ($_.closed_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) }
}
$dashboardclosedPullRequests = @()
while (($closedPullRequests.Count -gt 0) -and ($page -lt 10)) {
$closedPullRequests | ForEach-Object {
$statsUrl = "https://api.github.com/repos/$($repo)/pulls/$($_.number)"
$stats = Invoke-RestMethod -Uri $statsUrl -Method Get -ContentType "application/json" -Headers $header
$closedPullRequest = @{
id = $_.id
number = $_.number
user = $_.user.login
state = $_.state
title = $_.title
createdDate = $_.created_at
closedDate = if ([String]::IsNullOrEmpty($_.closed_at)) { "" } else { $_.closed_at }
mergedDate = if ([String]::IsNullOrEmpty($_.merged_at)) { "" } else { $_.merged_at }
additions = $stats.additions
deletions = $stats.deletions
changedFiles = $stats.changed_files
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.number -property $closedPullRequest -UpdateExisting | Out-Null
$dashboardclosedPullRequests += $closedPullRequest
}
$page += 1
$uri = $closedPullRequestsBaseUrl + "&page=$page"
$closedPullRequests = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$closedPullRequests = $closedPullRequests | Where-Object { ($_.closed_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) }
}
}
Write-Host "$($dashboardclosedPullRequests.Count) Closed pull requests successfully loaded"
return $dashboardclosedPullRequests.number
}
Write-Host "$($dashboardclosedPullRequests.Count) Closed pull requests successfully loaded"
return $dashboardclosedPullRequests.number
}
Function Get-Stargazers {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[array]$repolist
)
$owner = $env:owner
$repository = $env:repository
#$owner = $env:owner
#$repository = $env:repository
$pat = $env:pat
#Create table
@ -286,38 +467,40 @@ Function Get-Stargazers {
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
Write-Host "Fetching stargazers..."
$stargazersBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)/stargazers?per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
$stargazers = Invoke-RestMethod -Uri $stargazersBaseUrl -Method Get -ContentType "application/json" -Headers $header
$dashboardStargazers = @()
while (($stargazers.Count -gt 0) -and ($page -lt 10)) {
$stargazers | ForEach-Object {
$stargazer = @{
login = $_.login
id = $_.id
avatar_url = $_.avatar_url
url = $_.url
type = $_.type
foreach ($repo in $repolist){
Write-Host "Fetching stargazers..."
$stargazersBaseUrl = "https://api.github.com/repos/$($repo)/stargazers?per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
$stargazers = Invoke-RestMethod -Uri $stargazersBaseUrl -Method Get -ContentType "application/json" -Headers $header
$dashboardStargazers = @()
while (($stargazers.Count -gt 0) -and ($page -lt 10)) {
$stargazers | ForEach-Object {
$stargazer = @{
login = $_.login
id = $_.id
avatar_url = $_.avatar_url
url = $_.url
type = $_.type
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.id -property $stargazer -UpdateExisting | Out-Null
$dashboardStargazers += $stargazer
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.id -property $stargazer -UpdateExisting | Out-Null
$dashboardStargazers += $stargazer
$page += 1
$uri = $stargazersBaseUrl + "&page=$page"
$stargazers = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
}
$page += 1
$uri = $stargazersBaseUrl + "&page=$page"
$stargazers = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
Write-Host "$($dashboardStargazers.Count) stargazers successfully loaded"
}
Write-Host "$($dashboardStargazers.Count) stargazers successfully loaded"
}
Function Get-Contributors {
[CmdletBinding()]
param (
[Parameter()]
[array]$users
)
#Create table
$storageAccount = Get-AzStorageAccount -Name $env:storageAccount -ResourceGroupName $env:resourceGroup
$ctx = $storageAccount.Context
@ -330,7 +513,6 @@ Function Get-Contributors {
$header = @{authorization = "token $pat" }
$count = 0
$users | ForEach-Object {
$count += 1
$usersUrl = "https://api.github.com/users/$_"
$userData = Invoke-RestMethod -Uri $usersUrl -Method Get -ContentType "application/json" -Headers $header
@ -339,6 +521,9 @@ Function Get-Contributors {
login = $userData.login
id = $id
avatar = $userData.avatar_url
email = if ([String]::IsNullOrEmpty($userData.email)) { "" } else { $userData.email }
company = if ([String]::IsNullOrEmpty($userData.company)) { "" } else { $userData.company }
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $id -property $user -UpdateExisting | Out-Null
}
@ -346,9 +531,14 @@ Function Get-Contributors {
}
Function Get-Traffic {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[array]$repolist
)
$owner = $env:owner
$repository = $env:repository
# $owner = $env:owner
# $repository = $env:repository
$pat = $env:pat
#Create table
@ -358,43 +548,48 @@ Function Get-Traffic {
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
Write-Host "Fetching Views..."
$viewsBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)/traffic/views?per_page=100"
$header = @{authorization = "token $pat" }
foreach ($repo in $repolist){
Write-Host "Fetching Views..."
$viewsBaseUrl = "https://api.github.com/repos/$($repo)/traffic/views?per_page=100"
$header = @{authorization = "token $pat" }
$views = Invoke-RestMethod -Uri $viewsBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$views = $views.views | Where-Object { $_.timestamp -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
else {
$views = $views.views
}
$dashboardviews = @()
$views | ForEach-Object {
$id = [int]((([string]$_.timestamp).Split(" ")[0]) -replace "/", "")
$view = @{
id = $id
date = $_.timestamp
uniques = $_.uniques
count = $_.count
$views = Invoke-RestMethod -Uri $viewsBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$views = $views.views | Where-Object { $_.timestamp -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $id -property $view -UpdateExisting | Out-Null
$dashboardviews += $view
}
else {
$views = $views.views
}
$dashboardviews = @()
Write-Host "$($dashboardviews.Count) views successfully loaded"
$views | ForEach-Object {
$id = [int]((([string]$_.timestamp).Split(" ")[0]) -replace "/", "")
$view = @{
id = $id
date = $_.timestamp
uniques = $_.uniques
count = $_.count
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $id -property $view -UpdateExisting | Out-Null
$dashboardviews += $view
}
Write-Host "$($dashboardviews.Count) views successfully loaded"
}
}
Function Get-Issues {
[CmdletBinding()]
param (
[Parameter(Mandatory = $false)]
[Switch]$DailyRefresh
[Switch]$DailyRefresh,
[Parameter(Mandatory = $false)]
[array]$repolist
)
$owner = $env:owner
$repository = $env:repository
# $owner = $env:owner
# $repository = $env:repository
$pat = $env:pat
#Create table
@ -404,47 +599,56 @@ Function Get-Issues {
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
$issuesBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)/issues?state=all&per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
foreach ($repo in $repolist){
$issuesBaseUrl = "https://api.github.com/repos/$($repo)/issues?state=all&per_page=100"
$header = @{authorization = "token $pat" }
$page = 1
Write-Host "Fetching Issues..."
$issues = Invoke-RestMethod -Uri $issuesBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$issues = $issues | Where-Object { ($_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) -and ($null -eq $_.pull_request) }
}
$dashboardIssues = @()
while ($issues.Count -gt 0) {
$issues | ForEach-Object {
$issue = @{
id = $_.id
number = $_.number
title = $_.title
user = $_.user.login
state = $_.state
assignee = if ([String]::IsNullOrEmpty($_.assignee)) { "" } else { $_.assignee.login }
milestone = if ([String]::IsNullOrEmpty($_.milestone)) { "" } else { $_.milestone.title }
created_at = $_.created_at
updated_at = $_.updated_at
closed_at = if ([String]::IsNullOrEmpty($_.closed_at)) { "" } else { $_.closed_at }
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.id -property $issue -UpdateExisting | Out-Null
$dashboardIssues += $issue
}
$page += 1
$uri = $issuesBaseUrl + "&page=$page"
$issues = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
Write-Host "Fetching Issues..."
$issues = Invoke-RestMethod -Uri $issuesBaseUrl -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$issues = $issues | Where-Object { $_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
$issues = $issues | Where-Object { ($_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1)) -and ($null -eq $_.pull_request) }
}
$dashboardIssues = @()
while ($issues.Count -gt 0) {
$issues | ForEach-Object {
$issue = @{
id = $_.id
number = $_.number
title = $_.title
user = $_.user.login
state = $_.state
assignee = if ([String]::IsNullOrEmpty($_.assignee)) { "" } else { $_.assignee.login }
milestone = if ([String]::IsNullOrEmpty($_.milestone)) { "" } else { $_.milestone.title }
created_at = $_.created_at
updated_at = $_.updated_at
closed_at = if ([String]::IsNullOrEmpty($_.closed_at)) { "" } else { $_.closed_at }
repo = $repo
pr = if ([String]::IsNullOrEmpty($_.pull_request.url)) { "" } else { $_.pull_request.url }
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.id -property $issue -UpdateExisting | Out-Null
$dashboardIssues += $issue
}
$page += 1
$uri = $issuesBaseUrl + "&page=$page"
$issues = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers $header
if ($DailyRefresh) {
$issues = $issues | Where-Object { $_.created_at -gt (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(-1) }
}
}
Write-Host "$($dashboardIssues.Count) issues successfully loaded"
}
Write-Host "$($dashboardIssues.Count) issues successfully loaded"
}
Function Get-Releases {
$owner = $env:owner
$repository = $env:repository
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[array]$repolist
)
# $owner = $env:owner
# $repository = $env:repository
$pat = $env:pat
#Create table
@ -453,24 +657,26 @@ Function Get-Releases {
$partitionKey = "Releases"
New-AzStorageTable -Name $partitionKey -Context $ctx -ErrorAction SilentlyContinue | Out-Null
$table = (Get-AzStorageTable Name $partitionKey Context $ctx).CloudTable
foreach ($repo in $repolist){
$tagsBaseUrl = "https://api.github.com/repos/$($repo)/releases"
$header = @{authorization = "token $pat" }
$tagsBaseUrl = "https://api.github.com/repos/$($owner)/$($repository)/releases"
$header = @{authorization = "token $pat" }
Write-Host "Fetching Releases..."
$releases = Invoke-RestMethod -Uri $tagsBaseUrl -Method Get -ContentType "application/json" -Headers $header
Write-Host "Fetching Releases..."
$releases = Invoke-RestMethod -Uri $tagsBaseUrl -Method Get -ContentType "application/json" -Headers $header
$dashboardReleases = @()
while ($releases.Count -gt 0) {
$releases | ForEach-Object {
$release = @{
name = $_.tag_name
date = $_.published_at
$dashboardReleases = @()
while ($releases.Count -gt 0) {
$releases | ForEach-Object {
$release = @{
name = $_.tag_name
date = $_.published_at
repo = $repo
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.name -property $release -UpdateExisting | Out-Null
$dashboardReleases += $release
}
Add-AzTableRow -table $table -partitionKey $partitionKey -rowKey $_.name -property $release -UpdateExisting | Out-Null
$dashboardReleases += $release
}
Write-Host "$($dashboardTags.Count) tags successfully loaded"
}
Write-Host "$($dashboardTags.Count) tags successfully loaded"
}