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.