FireBoardAPI.psm1
function Convert-FromCurl { <# .SYNOPSIS A short one-line action-based description, e.g. 'Tests if a function is valid' .DESCRIPTION A longer description of the function, its purpose, common use cases, etc. .NOTES Information or caveats about the function e.g. 'This function is not supported in Linux' .LINK Specify a URI to a help page, this will show when Get-Help -Online is used. .EXAMPLE $CurlString =@" curl "https://fireboard.io/api/v1/sessions.json" -H "Authorization: Token 9944bb9966cc22cc9418ad846dd0e4bbdfc6ee4b" "@ Convert-FromCurl -CurlString $CurlString Output: Invoke-RestMethod -Method POST -Uri 'https://localhost:8080/confluence/rest/api/content' -Verbose:$false -Headers @{ 'Content-Type' = 'application/json' } -Body '{ "type":"page" ,"title":"A Test Page" , "space":{ "key":"SPACE" } , "ancestors" : [ { "id": "115328548" } ] ,"body":{ "storage":{ "value":"<h1>Child Macro Test</h1><p>Foo Bar Blah</p><p> <ac:structured-macro ac:name="children"> <ac:parameter ac:name="reverse">true</ac:parameter> <ac:parameter ac:name="sort">creation</ac:parameter> <ac:parameter ac:name="style">h4</ac:parameter> <ac:parameter ac:name="page"> <ac:link> <ri:page ri:content-title="Home"/> </ac:link> </ac:parameter> <ac:parameter ac:name="excerpt">none</ac:parameter> <ac:parameter ac:name="first">99</ac:parameter> <ac:parameter ac:name="depth">2</ac:parameter> <ac:parameter ac:name="all">true</ac:parameter> </ac:structured-macro> </p>","representation":"storage"}}}' #> param( [string]$CurlString ) if (-not $(Get-Module Curl2PS)) { Import-Module Curl2PS } <# #> ConvertTo-IRM $CurlString -CommandAsString } function convert-DataRowToHashTable { <# .SYNOPSIS Returns a hash table for data set passed in. This is used to pivot a data set. #> param( [Parameter(ValueFromPipeline)]$DataRow ) process { $Columns = $DataRow | Get-Member | Where-Object { $_.MemberType -in ('Property', 'NoteProperty') } | Select-Object Name | Sort-Object Name $HashTable = [ordered]@{} foreach ($Column in $Columns) { $HashTable.Add($Column.Name, $($DataRow.$($Column.Name)) ) } $HashTable } } function Convert-HashTableToDataTable { <# .SYNOPSIS Returns a data set for a hash table passed in. This is used to unpivot a data set. #> param( $Hashtable ) $DataTable = New-Object System.Data.DataTable for ($Col = 0; $Col -lt $Hashtable[0].Keys.count; $Col++) { $DataTable.Columns.Add($($Hashtable[0].Keys)[$Col]) | Out-Null } for ($row = 1; $row -lt $Hashtable.name.count; $row++) { $dr = $DataTable.NewRow() for ($RowCol = 0; $RowCol -lt $Hashtable[0].Keys.count; $RowCol++) { if (-not [string]::isnullorempty($($($Hashtable[$row].Keys)[$RowCol]))) { $dr.$($($Hashtable[$row].Keys)[$RowCol]) = $($($Hashtable[$row].Values)[$RowCol]) } } $DataTable.Rows.Add($dr) } return $DataTable } function Get-FireboardAPIKey { <# .SYNOPSIS Gets the api key for your fireboard.io account #> $Cred = Get-Credential -Message 'Enter your fireboard.io credentials' -Title 'Fireboard.io Credentials' $response = Invoke-RestMethod -Method POST -Uri 'https://fireboard.io/api/rest-auth/login/' -Verbose:$false -Headers @{ 'Content-Type' = 'application/json' } -Body "{`"username`":`"$($Cred.UserName)`",`"password`":`"$($Cred.Password)`"}" $response.key } function get-FireboardSession { param( [Parameter(Mandatory)] [string]$APIKey , [Parameter(Mandatory)] [string]$SessionID ) $response = Invoke-RestMethod -Method Get -Uri "https://fireboard.io/api/v1/sessions/$($SessionID).json" -Verbose:$false -Headers @{ 'Authorization' = "Token $($APIKey)" } $response } function get-FireboardSessionTimeSeries { <# .SYNOPSIS Returns a time series data set for a given session #> param( [Parameter(Mandatory)] [string]$APIKey , [Parameter(Mandatory)] [string]$SessionID ) $response = Invoke-RestMethod -Method Get -Uri "https://fireboard.io/api/v1/sessions/$($SessionID)/chart.json" -Verbose:$false -Headers @{ 'Authorization' = "Token $($APIKey)" } $response } function get-FireboardList { <# .SYNOPSIS Base function to return sets of records from fireboard.io #> param( [Parameter(Mandatory)] [string]$APIKey , [Parameter(Mandatory)] [string]$ListType ) $response = Invoke-RestMethod -Method Get -Uri "https://fireboard.io/api/v1/$($ListType).json" -Verbose:$false -Headers @{ 'Authorization' = "Token $($APIKey)" } $response } function Get-FireboardDevice { <# .SYNOPSIS Returns details for a given device associated with your fireboard.io account #> param( [Parameter(Mandatory)] [string]$APIKey ) get-FireboardList -APIKey $APIKey -ListType 'devices' } function get-FireboardSessionList { <# .SYNOPSIS Returns a list of all sessions associated with your fireboard.io account #> param( [Parameter(Mandatory)] [string]$APIKey ) get-FireboardList -APIKey $APIKey -ListType 'sessions' } function get-FireboardRequest { <# .SYNOPSIS Base function to query fireboard.io for a given device and request type #> param( [Parameter(Mandatory)] [string]$APIKey, [Parameter(Mandatory)] [string]$DeviceId, [Parameter(Mandatory)] [string]$RequestType ) $response = Invoke-RestMethod -Method Get -Uri "https://fireboard.io/api/v1/devices/$($DeviceId)/$($RequestType)" -Verbose:$false -Headers @{ 'Authorization' = "Token $($APIKey)" } $response } function get-FireboardTemp { <# .SYNOPSIS Gets current temperature for a given device. Device must be turned on and connected to the internet. #> param( [Parameter(Mandatory)] [string]$APIKey, [Parameter(Mandatory)] [string]$DeviceId ) get-fireboardrequest -APIKey $APIKey -DeviceId $DeviceId -RequestType 'temps' } function get-FireboardDeviceInfo { <# .SYNOPSIS Returns device information for a given deviceid #> param( [Parameter(Mandatory)] [string]$APIKey, [Parameter(Mandatory)] [string]$DeviceId ) $response = Invoke-RestMethod -Method Get -Uri "https://fireboard.io/api/v1/devices/temps/$($DeviceId)" -Verbose:$false -Headers @{ 'Authorization' = "Token $($APIKey)" } $response } function ConvertFrom-UnixTime { <# .SYNOPSIS inline function to convert unix time to datetime #> param( [Parameter(Mandatory, ValueFromPipeline = $true)] [int]$UnixTime ) process { $epoch = New-Object System.DateTime 1970, 1, 1, 0, 0, 0, 0 [datetime] $epoch.AddSeconds($UnixTime) } } function ConvertTo-LocalTime { <# .SYNOPSIS inline function to convert utc datetime to local datetime #> param( [Parameter(Mandatory, ValueFromPipeline = $true)] [datetime]$DateTime ) process{ $DateTime.ToLocalTime() } } function add-HashTable { <# .SYNOPSIS Combines 2 hash tables into a single hash table #> param( [Parameter(Mandatory)] [hashtable]$Hash1, [Parameter(Mandatory)] [hashtable]$Hash2 ) $Hash1.GetEnumerator() | ForEach-Object { $Hash2.Add($_.Key, $_.Value) } $Hash2 } |