Conectando o GLPI ao PowerBI via RESTAPI
Dois sistemas que todo mundo ligado a TI é obrigado a conviver
Motivação
Tentando conectá-los descobri que não havia nenhum guia prático para isso, então aí vai.
Em primeiro é preciso habilitar a opção no GLPI
https://www.arthurschaefer.com.br/2021/12/ativar-api-do-glpi/
Então no Power BI criei os parametros abaixo:
como Exemplo de endereço "https://localhost.glpi.com/apirest.php/"
o AppToken é disponibilizado no GLLPI
para o UserToken é possível gerar hash code usando a seguinte query: (o ideal é gerar e excluir esta query assim preservando usuário e senha)
let
Source = Binary.ToText(Text.ToBinary("seu usuário" & ":" & "sua senha"), BinaryEncoding.Base64)
in
Source
Na base que usei havia mais de 20.000 tickets por isso foi necessário paginar a extração
Query de tickets
let
InitSession = Json.Document(
Web.Contents(
baseURL,
[
RelativePath = "initSession?get_full_session=true",
Headers = [
#"Content-Type" = "application/json",
#"App-Token" = AppToken,
Authorization = "Basic " & UserToken
]
]
)
),
headersQuery = [
#"Content-Type" = "application/json",
#"Session-Token" = InitSession[session_token],
#"App-Token" = AppToken
],
ChangeProfile = Json.Document(
Web.Contents(baseURL, [
RelativePath = "changeActiveProfile?profiles_id=43",
Headers = headersQuery
])
),
Total = Json.Document(Web.Contents(baseURL, [
RelativePath = "search/Ticket",
Headers = headersQuery
])),
perPage = 1000,
totalPages = Number.RoundUp(Total[totalcount] / perPage),
pages = List.Generate(
() => [page = 1],
each [page] <= totalPages,
each [page = [page] + 1],
each Text.From(perPage * ([page] - 1)) & "-" & Text.From(perPage * [page] - 1)
),
EmptyTab = #table({"Column1"}, {}),
Data = List.Accumulate(
pages,
EmptyTab,
(table, url) =>
let
Source =
try
let
ListofTickets =
try
Json.Document(
Web.Contents(
baseURL,
[
RelativePath = "Ticket?expand_dropdowns=true",
Headers = headersQuery,
Query = [range = url]
]
)
) otherwise EmptyTab,
#"Converted to Table" = Table.FromList(
ListofTickets, Splitter.SplitByNothing(), null, null, ExtraValues.Error
)
in
#"Converted to Table"
otherwise EmptyTab,
combinedTable = Table.Combine({table, Source})
in
combinedTable
)
in
Data
Apenas substituindo todas as ocorrencias "ticket" por change, device, software... temos uma nova tabela.
Espero ter ajudado alguém!!