Public/Metrics/Get-PiHoleStatsDatabaseQueryType.ps1

function Get-PiHoleStatsDatabaseQueryType {
    <#
.SYNOPSIS
Get query types (long-term database)

.DESCRIPTION
Request a breakdown of query types (A, AAAA, ...) for a given time range from the long-term
(on-disk) database, rather than the in-memory data returned by Get-PiHoleStatsQueryType.

.PARAMETER PiHoleServer
The URL to the PiHole Server, for example "http://pihole.domain.com:8080", or "http://192.168.1.100"

.PARAMETER Password
The API Password you generated from your PiHole server

.PARAMETER From
Unix timestamp from when the data should be requested

.PARAMETER Until
Unix timestamp until when the data should be requested

.PARAMETER IgnoreSsl
Set to $true to skip SSL certificate validation

.PARAMETER RawOutput
This will dump the response instead of the formatted object

.EXAMPLE
Get-PiHoleStatsDatabaseQueryType -PiHoleServer "http://pihole.domain.com:8080" -Password "fjdsjfldsjfkldjslafjskdl" -From 1672580025 -Until 1672666425
    #>

    [CmdletBinding(HelpUri = 'https://ftl.pi-hole.net/master/docs/#get-/stats/database/query_types')]
    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "Password")]
    param (
        [Parameter(Mandatory = $true)]
        [System.URI]$PiHoleServer,
        [Parameter(Mandatory = $true)]
        [string]$Password,
        [Parameter(Mandatory = $true)]
        [int]$From,
        [Parameter(Mandatory = $true)]
        [int]$Until,
        [bool]$IgnoreSsl = $false,
        [bool]$RawOutput = $false
    )

    try {
        $Sid = Request-PiHoleAuth -PiHoleServer $PiHoleServer -Password $Password -IgnoreSsl $IgnoreSsl

        $Params = @{
            Headers              = @{sid = $($Sid) }
            Uri                  = "$($PiHoleServer.OriginalString)/api/stats/database/query_types?from=$From&until=$Until"
            Method               = "Get"
            SkipCertificateCheck = $IgnoreSsl
            ContentType          = "application/json"
        }

        $Response = Invoke-RestMethod @Params

        if ($RawOutput) {
            Write-Output $Response
        }
        else {
            $Object = [PSCustomObject]@{
                A      = $Response.types.A
                AAAA   = $Response.types.AAAA
                ANY    = $Response.types.ANY
                SRV    = $Response.types.SRV
                SOA    = $Response.types.SOA
                PTR    = $Response.types.PTR
                TXT    = $Response.types.TXT
                NAPTR  = $Response.types.NAPTR
                MX     = $Response.types.MX
                DS     = $Response.types.DS
                RRSIG  = $Response.types.RRSIG
                DNSKEY = $Response.types.DNSKEY
                NS     = $Response.types.NS
                SVCB   = $Response.types.SVCB
                HTTPS  = $Response.types.HTTPS
                OTHER  = $Response.types.OTHER
            }
            Write-Output $Object
        }
    }

    catch {
        Write-Error -Message $_.Exception.Message
    }

    finally {
        if ($Sid) {
            Remove-PiHoleCurrentAuthSession -PiHoleServer $PiHoleServer -Sid $Sid -IgnoreSsl $IgnoreSsl
        }
    }
}