System Monit24.pl udostępnia możliwość generowania raportów z działania usług, zarówno cyklicznych jak i jednorazowych.
W API do obsługi raportów służą zasoby report_templates
(szablony raportów) i reports
(raporty), które są opisane poniżej.
Uwaga: powyższe zasoby reprezentują "nowe" raporty, wprowadzone w API 3.5.
Niezależnie od nich funkcjonują "stare" raporty (zasób periodic_report_addresses
i pola *_periodic_reports
grup).
Aktualnie nie mamy w planach wyłączania "starych" raportów, obie wersje będą istnieć równolegle.
Tym niemniej, polecamy korzystanie z "nowych" raportów ze względu na istotne ograniczenia "starej" wersji - między innymi brak raportów jednorazowych, jedynie polska strefa czasowa czy brak możliwości pobrania archiwalnych raportów.
Opis działania "starych" raportów znajduje się w tym miejscu.
Zanim zostanie wygenerowany jakikolwiek raport, musi zostać utworzony szablon - każdy z raportów jest przypisany do swojego szablonu.
Szablony można tworzyć, edytować i usuwać za pomocą standardowych operacji na zasobie report_templates
.
Oto przykład szablonu:
{ "archived_services" : true, "description" : "Przykład szablonów raportów", "email_addresses" : ["example_report@monit24.pl"], "id" : 761, "owner_id" : 150, "reporting_plan_ids" : ["daily", "weekly"], "requested_scope" : { "accounts" : { "all" : false, "by_id" : [633, 126] }, "groups" : { "all" : false, "by_id" : [] "by_owner_id" : [150] }, "services" : { "all" : false, "by_group_id" : [], "by_id" : [75642, 234566], "by_owner_id" : [150] } }, "section_ids" : ["checks_summary"], "summary" : "enabled", "title" : "Przykładowy raport", "weekly_suspensions" : [] }
Każdy szablon posiada następujące standardowe ustawienia:
owner_id
- identyfikator konta, do którego należy szablonname
- nazwa szablonudescription
- opcjonalny opis szablonu, widoczny na pierwszej stronie raportów PDFemail_addresses
- tablica adresów e-mail, na które zostanie wysłany plik PDF z raportem po jego wygenerowaniureporting_plan_ids
- ustawienie cyklicznego wysyłania raportówsummary
- sposób obsługi podsumowania raportu w wygenerowanym pliku PDF: enabled
(włączone), disabled
(wyłączone) lub only
(tylko podsumowanie)archived_services
- określa, czy usługi archiwalne powinny zostać uwzględnione w raporcieweekly_suspensions
- tablica przedziałów czasowych w tygodniu, z których dane do raportu nie będą pobierane
Atrybut section_ids
szablonu określa, jaki rodzaj informacji będzie zawarty w raporcie.
Jest to tablica identyfikatorów obiektów ze słownika report_sections
.
Przykładowo, dla ["service_level_summary"]
zostanie wygenerowane proste zestawienie Service Level, zaś dla ["performance_by_hour", "performance_by_week_day"]
- raport z informacjami o szybkości działania
usług z podziałem na godziny doby i dni tygodnia.
Atrybut requested_scope
szablonu określa, czego będzie dotyczył raport.
Zawiera on 3 atrybuty, określające, które usługi, grupy i konta znajdą się w raporcie:
services
- określa, które usługi znajdą się w raporcie.
Można wybrać wszystkie usługi, dla których właściciel szablonu ma dostęp (all
), usługi należące do wybranych kont (by_owner_id
), grup (by_group_id
) lub konkretne usługi (by_id
).
Każdej usłudze wybranej w ten sposób będzie odpowiadał jeden punkt w raporcie PDF.
Jeśli usługa została wskazana klika razy (np. w ramach wszystkich usług należących do konta i bezpośrednio po identyfikatorze), to zostanie uwzględniona tylko raz.
groups
- określa, które grupy znajdą się w raporcie.
Podobnie jak dla usług, można wybrać wszystkie grupy (all
), grupy należące do wybranych kont (by_owner_id
) lub bezpośrednio po identyfikatorze grupy (by_id
).
Dla każdej z grup wskazanych na jeden z powyższych sposobów zostanie wygenerowany jeden punkt w raporcie PDF, zawierający podsumowanie dla całej tej grupy (nawet jeśli raport nie zawiera danych dla poszczególnych usług z grupy).
accounts
- określa, które konta znajdą się w raporcie.
Można wybrać wszystkie konta (all
), lub wskazać wybrane konta (by_id
).
Dla każdego z wybranych kont zostanie wygenerowany jeden punkt w raporcie PDF, zawierający podsumowanie dla wszystkich usług należących do tego konta.
Należy zwrócić uwagę, że te same dane można wybierać i agregować na różne sposoby - na przykład dane dla usług o identyfikatorach 563 i 564, jedynych należących do grupy 1645, można uwzględnić w raporcie jako:
{"services" : {"by_group_id" : [1645]}}
- wszystkie usługi w grupie 1645 (dwa punkty w raporcie, odpowiadające dwóm usługom),{"services" : {"by_id" : [563, 564]}}
- usługi wskazane bezpośrednio; dopóki usługi w grupie 1645 się nie zmienią, efekt w pliku PDF z raportem będzie identyczny, jak w przykładzie wyżej - ma to znaczenie zwłaszcza przy cyklicznej wysyłce raportów,{"groups" : {"by_id" : [1645]}}
- jeden punkt w raporcie, zawierający zagregowane dane dla obu usług,{"groups" : {"by_id" : [1645]}, "services" : {"by_group_id" : [1645]}}
- kombinacja pierwszego i trzeciego przykładu - 3 punkty w raporcie, po jednym dla każdej usługi i jeden zbiorczy dla grupy.POST /reports
podając identyfikator szablonu oraz przedział czasowy, z jakiego należy wygenerować raport. Na przykład:
curl -u USERNAME:PASSWORD -X POST -H 'Content-Type: application/json' \ -d '{ "template_id" : 761, "from" : "2018-01-01T00:00:00Z", "to" : "2018-02-01T00:00:00Z" ' 'https://api.monit24.pl/v3/reports'
Odpowiedź API będzie standardowo zawierała identyfikator utworzonego raportu:
{ "id" : 975 }
Poza wymaganymi parametrami template_id
, from
i to
można określić także wartości name
, description
, email_addresses
, section_ids
, requested_scope
, summary
i weekly_suspensions
.
W takim przypadku nadpiszą one wartości domyślne (określone w szablonie) tylko dla tego konkretnego raportu.
Oprócz ręcznego generowania raportów istnieje możliwość zaplanowania cyklicznego generowania raportów.
W tym celu należy wskazać jeden lub więcej dostępnych planów generowania raportów w atrybucie reporting_plan_ids
szablonu.
Dostępne plany są elementami słownika reporting_plans
.
Przykładowo, na podstawie szablonu z przykładu powyżej będą automatycznie generowane raporty dobowe i tygodniowe.
Wszystkie plany generowania działają w strefie czasowej konta, do którego należy szablon.
Po dodaniu raportu (jednorazowo lub zgodnie z harmonogramem) rozpoczyna się jego generowanie. Odbywa się ono w dwóch fazach:
generating
, wynikiem której jest raport w formacie JSON. Podczas tej fazy na podstawie historii działania usługi są obliczane wszystkie dane w raporcie,rendering
, podczas której na podstawie obliczonych danych jest renderowany plik PDF z raportem.Każda z tych faz jest obsługiwana asynchronicznie, przez niezależnie działające mechanizmy. Jest możliwe renderowanie więcej niż jednego raportu jednocześnie. Raport PDF jest generowany jedynie na podstawie danych w raporcie JSON, bez pobierania dodatkowych danych z innych źródeł.
Można monitorować postęp generowania raportu (pierwszej fazy) za pomocą jego atrybutów generating_status
i generating_progress
- odpowiednio status
(pending
- oczekujący, in_progress
- w trakcie lub completed
- zakończony) i procentowy postęp.
Analogiczne statystyki są dostępne także dla fazy renderowania (rendering_status
i rendering_progress
).
Oprócz tego można korzystać z uproszczonych pól status
i progress
, które odpowiadają całemu procesowi generowania i renderowania raportu, przy założeniu, że po zakończeniu pierwszej fazy procentowy postęp wynosi 50%.
Po zakończeniu przetwarzania raportu można pobrać jego wyniki w postaci surowych danych JSON (po pierwszej fazie) lub wyrenderowany raport PDF, opcjonalnie wysyłany także na adresy e-mail podane w atrybucie email_addresses
szablonu lub raportu.
Plik JSON z wygenerowanym raportem można pobrać za pomocą operacji GET /reports/{_id}/json
.
Na szczególną uwagę zasługuje pole results
.
Jest to tablica zawierająca dla każdego wybranego zakresu obiekt zawierający wyniki dla wszystkich wybranych sekcji.
Elementy tablicy results
odpowiadają punktom w raporcie PDF, zaś sekcje podpunktom.
Przykład elementu tablicy results
:
{ "checks_summary" : { "error" : 1643, "ok" : 96, "unknown" : 0 }, "scope" : { "account" : {"id" : 150, "name" : "Konto testowe", "username" : "test"}, "group" : {"id" : 46782, "name" : "Grupa domyślna"}, "service" : {"description" : "", "id" : 27, "name" : "Usługa testowa", "type" : {"id" : "http", "name" : "http"}}, "type" : "service" } }
Atrybut scope
określa, jakiego zakresu dotyczy wynik. Parametr type
określa typ tego zakresu i może przyjąć jedną z wartości:
summary
- podsumowanie dla całego raportu (występowanie tego wyniku zależy od ustawienia summary
raportu),account
- podsumowanie dla konta, w tym przypadku uproszczony obiekt konta znajduje się w parametrze account
,group
- podsumowanie dla grupy, zawiera uproszczeony obiekt grupy (group
) i konta, do którego należy grupa (account
),service
- wyniki dla pojedynczej usługi, zawiera uproszczony obiekt usługi (service
) oraz grupy (group
) i konta (account
), do którego należy usługa.
Poza atrybutem scope
każdy element zawiera jeden atrybut z wynikami dla każdej z wybranych sekcji.
W powyższym przykładzie dla sekcji checks_summary
została zwrócona liczba poprawnych, błędnych i nieznanych sprawdzeń.
Format tego wyniku jest inny dla każdej sekcji, ich opis można znaleźć w dokumentacji operacji pobierania wyników raportu JSON.
Po zakończeniu drugiej fazy przetwarzania raportu (renderowania), można pobrać plik PDF z raportem za pomocą operacji GET /reports/{_id}/pdf
.
Plik ten jest także wysyłany pocztą elektroniczną na adresy określone w polu email_addresses
bezpośrednio po zakończeniu renderowania.