Uruchamianie scenariusza testowego¶
Pobranie listy możliwych testów do uruchomienia¶
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": 20,
"subcategories": [
{
"id": 9,
"category": 4
}
],
"options": {
"params": [
{
"name": "address",
"type": "text",
"label": "Destination address",
"tooltip": {
"color": "blue",
"value": "Destination hostname which ping will travel to",
"placement": "top"
},
"attributes": {
"initial": "8.8.8.8",
"required": 1
},
"validators": [
{
"type": "hostname",
"message": "Enter a valid hostname",
"regex": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$"
}
]
},
{
"name": "count",
"type": "slider",
"label": "Number of ICMP Requests",
"tooltip": {
"color": "blue",
"value": "Send more than 5 ICMP requests to analyze jiter",
"placement": "top"
},
"attributes": {
"step": 1,
"initial": 1,
"max_value": 10,
"min_value": 1
}
},
{
"name": "interval",
"type": "slider",
"label": "Interval between consecutive ICMP Requests",
"attributes": {
"step": 1,
"initial": 1,
"max_value": 10,
"min_value": 1
}
}
],
"additional_options": {
"thresholds": {
"params": [
{
"name": "Mean RTT of ping test",
"param": "mean_rtt"
},
{
"name": "Max RTT of ping test",
"param": "max_rtt"
},
{
"name": "Min RTT of ping test",
"param": "min_rtt"
}
],
"enabled": true
},
"dedicated_instances": {
"enabled": true
}
}
},
"permitted": true,
"command": "network_ping",
"name": "network_ping",
"display_name": "Ping",
"description": "Simple ping test extended with jiter analysis.",
"on_premises_available": true,
"cloud_available": true,
"cost": 0,
"sort_priority": 0
},
{
"id": 21,
"subcategories": [
{
"id": 9,
"category": 4
}
],
"options": {
"params": [
{
"name": "address",
"type": "text",
"label": "Destination address",
"attributes": {
"initial": "8.8.8.8",
"required": 1
},
"validators": [
{
"type": "hostname",
"message": "Enter a valid hostname",
"regex": "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$"
}
]
}
],
"additional_options": {}
},
"permitted": true,
"command": "traceroute_test",
"name": "traceroute_test",
"display_name": "Traceroute",
"description": "Traceroute test.",
"on_premises_available": true,
"cloud_available": true,
"cost": 0,
"sort_priority": 0
}
]
}
Pobranie danych dostępnych test agentów¶
{
"id": 1,
"uuid": "bb70540b-d2b0-4867-b10f-3b2e5b20c50f",
"name": "new-test-agent",
"ip_local": "172.30.10.1",
"ip_external": "172.30.10.1",
"status": 3,
"last_status_change": "2021-04-28T12:15:31.578153+02:00",
"authorized": true,
"timestamp_created": "2021-04-28T12:11:22.356223+02:00",
"version": "2020.12",
"geo_location_lon": 19.8972702026367,
"geo_location_lat": 50.0760912565959,
"running_monitoring_count": 0,
"release": "0.2.0.dev146",
"additional_data": {
"interfaces": {
"lo": {
"ip": [
"127.0.0.1",
"::1"
],
"mac": "00:00:00:00:00:00",
"name": "lo"
},
"ens3": {
"ip": [
"172.30.10.1",
"fe80::f816:3eff:fe39:8fcb%ens3"
],
"mac": "fa:16:3e:39:8f:cb",
"name": "ens3"
}
},
"network_config": "network:\n ethernets:\n ens3:\n dhcp4: true\n match:\n macaddress: fa:16:3e:39:8f:cb\n set-name: ens3\n version: 2\n renderer: networkd"
},
}
Budowa wiadomości potrzebnej do uruchomienia scenariusza testowego¶
name – nazwa scenariusza testowego,
on_premise_test_agents – globalna lista id wszystkich test agentów, na których chcemy uruchomić wszystkie testy, dla których nie określono test agentów w strukturze danych poszczególnych testów scenariusza w polu test_blocks,
cloud_locations – globalna lista id wszystkich lokalizacji chmurowych, na których chcemy uruchomić wszystkie testy, dla których nie określono lokalizacji chmurowych w strukturze danych poszczególnych testów scenariusza w polu test_blocks,
repeat_interval – liczba wyrażona w sekundach oznaczająca czas pomiędzy kolejnymi uruchomieniami scenariusza, w przypadku gdy chcemy go uruchomić tylko raz należy podać 0,
repeat_start – czas uruchomienia pierwszego cyklu scenariusza (dozwolone są jedynie pełne minuty oraz 0, 15, 30 lub 45 minuta każdej godziny), w przypadku gdy chcemy go uruchomić tylko raz należy podać null,
repeat_end – czas zakończenia działania scenariusza (dozwolone są jedynie pełne minuty oraz 0, 15, 30 lub 45 minuta każdej godziny), w przypadku gdy chcemy go uruchomić tylko raz należy podać null,
- options - dodatkowe opcje scenariusza (jeśli chcemy użyć globalnych opcji należy w tym polu podać {}, lub wcale nie podawać tego pola w strukturze wiadomości):
notifications - lokalne ustawienia powiadomień dla scenariusza,
priority_limit - wartość progowa oznaczająca to, że bloki testowe mające ustalony priorytet poniżej tej wartości nie będą generowały powiadomień po przekroczoneniu progu alarmowego,
- thresholds - zaawansowana opcja ustalania progów alarmowych poprzez treść kodu napisanego w języku Python:
enabled - informacja o tym, czy konfiguracja ma być włączona (dozwolone wartości: true oraz false),
code - treść kodu w języku Python,
- 5g_config - konfiguracja połączenia z rdzeniem sieci 5G:
mme_address - adres modułu MME będącego częścią rdzenia 5G,
imsi - akceptowalny przez sieć 5G numer IMSI,
opc - akceptowalny przez sieć 5G klucz operatora,
k - akceptowalny przez sieć 5G klucz abonenta,
test_blocks – lista wszystkich bloczków testowych, które chcemy uruchomić (ten sam test można wykonać w ramach scenariusza dowolną ilość razy).
name – nazwa bloczka (pole wymagane),
stage_no – numer kroku scenariusza (pierwszy krok to 1), ustawienie tego samego numeru kroku dla kilku testów spowoduje uruchomienie tych testów równolegle wobec siebie,
task_type – id testu zgodne z wiadomością z /api/task_types/ lub /api/task_types/<id> (Opis pobierania typów testów),
on_premise_test_agents – lista test agentów, na których ma być uruchomiony ten test, w przypadku pustej listy test zostanie wykonany na test agentach znajdujących się na globalnej liście dla całego scenariusza,
cloud_locations – lista lokalizacji chmurowych na których ma być uruchomiony ten test, w przypadku pustej listy test zostanie wykonany w lokalizacjach znajdujących się na globalnej liście dla całego scenariusza,
- options – obiekt zawierający opcje bloczka takie jak parametry testu czy konfiguracja progów alarmowych:
params - lista parametrów unikalnych dla danego typu testu, zgodna z wiadomością z /api/task_types/ lub /api/task_types/<id> (Pobieranie parametrów testu),
priority - ważność bloczka określony wartością liczbową,
- thresholds – konfiguracja progów alarmowych:
enabled - informacja, czy progi dla tego bloczka mają być włączone (dozwolone wartości: true oraz false),
mode - tryb podawania konfiguracji progów (dozwolone wartości: „python” dla konfiguracji w języku Python oraz „json” dla konfiguracji w formacie JSON),
configuration - konfiguracja progów alarmowych w trybie „json”, wartością powinien być obiekt zawierający pola podane poniżej,
code - konfiguracja progów alarmowych w trybie „python”, wartością powinien być kod napisany w języku Python,
5g_enabled - flaga oznaczająca, czy dany test ma być przeprowadzony przez skonfigurowaną w scenariuszu sieć 5G.
type – typ informacji, dozwolone pola: threshold i operator,
- threshold_type (tylko dla typu threshold) – informacja o tym, czy próg został przekroczony powyżej, czy poniżej danej wartości, możliwe typy progów:
gte – próg zostanie przekroczony jeśli wartość parametru będzie większa lub równa niż wartość zadeklarowana,
gt - próg zostanie przekroczony jeśli wartość parametru będzie większa niż wartość zadeklarowana,
lte – próg zostanie przekroczony jeśli wartość parametru będzie mniejsza lub równa niż wartość zadeklarowana,
lt - próg zostanie przekroczony jeśli wartość parametru będzie mniejsza niż wartość zadeklarowana,
value (tylko dla typu threshold) – wartość progu alarmowego,
variable (tylko dla typu threshold) – nazwa mierzonego parametru testu, do którego ma być przypisany próg alarmowy, dostępne parametry znajdują się w /api/task_types/ lub /api/task_types/<id> (Pobieranie parametrów testu),
operator_type (tylko dla typu operator) – łącznik między thresholdami, możliwe wartości „and” lub „or”,
thresholds (tylko dla typu operator) - lista thresholdów wg powyższego opisu.
„1” - oznaczający powiadomienia na start testu,
„2” - oznaczający powiadomienia na koniec testu,
„3” - oznaczający powiadomienia, gdy test nie został wykonany poprawnie,
„4” - oznaczający powiadomienia na przekroczenie progu alarmowego,
„5” - oznaczający powiadomienia na uruchomienie całego scenariusza,
„6” - oznaczający powiadomienia na zakończenie całego scenariusza.
pierwszy test scenariusza zostanie uruchomiony dnia 22.04.2021 o godzinie 15:15,
scenariusz testowy zostanie zakończony dnia 22.04.2021 o godzinie 16:15,
sekwencje testów będą odbywać się co 60 sekund,
zostaną wygenerowane powiadomienia tylko w sytuacji, gdy progi alarmowe skonfigurowane w bloczku testowym zostaną przekroczone,
wszystkie testy scenariusza zostaną wykonane na test agencie z id 1,
dla całego scenariusza zostaną ustawione progi alarmowe wg których próg będzie przekroczony jeśli średnia z RTT przekracza 20 ms lub odchylenie standardowe przekracza 0.1 wartości średniej,
do scenariusza dodana została konfiguracja dostępu do sieci 5G, ale żaden test nie będzie wykonywał takich testów,
w pierwszym kroku scenariusza zostanie wykonany test Ping (id: 20),
- test Ping zostanie wykonany z parametrami:
adres docelowy: www.netrsr.com,
liczba żądań ICMP: 1,
interwał między żądaniami ICMP: 1,
dla testu Ping zostaną ustawione progi, które będą alarmować w przypadku wartości min_rtt mniejszej niż 10 lub wartości max_rtt wyższej niż 100,
dla testu Ping nie zostaną wygenerowane powiadomienia w przypadku przekroczenia progu, ponieważ wartość parametr priority dla tego bloczka jest mniejszy niż ustalony priority_limit dla całego scenariusza,
w drugim kroku scenariusza zostanie wykonany test Traceroute (id: 21),
- test Traceroute zostanie wykonany z parametrami:
adres docelowy: www.netrsr.com,
do testu Traceroute nie zostaną dodane progi alarmowe.
{
"name":"Ping",
"repeat_interval":60,
"repeat_start":"2021-04-22T15:15:00.000Z",
"repeat_end":"2021-04-22T16:15:00.000Z",
"cloud_locations":[],
"on_premise_test_agents":[1],
"options": {
"notifications": {
"1": [],
"2": [],
"3": [],
"4": [1],
"5": [],
"6": []
},
"priority_limit": 20,
"thresholds": {
"enabled": true,
"code": "exceeded = False\r\nfor ta, ta_data in data.items():\r\n\r\n rtts = [row['rtt'] for row in ta_data['ping_block']['results'][-1]['result'][-1]['list']]\r\n rtts_mean = statistics.mean(rtts)\r\n rtts_std = statistics.stdev(rtts)\r\n \r\n ta_exceeded = rtts_mean > 20 or rtts_std < 0.1 * rtts_mean\r\n exceeded != ta_exceeded \r\n"
},
"5g_config": {
"k": "00112233445566778899aabbccddeeff",
"opc": "63BFA50EE6523365FF14C1F45F88737D",
"imsi": "999700123456780",
"mme_address": "172.30.30.209"
}
},
"test_blocks": [
{
"name":"Ping1",
"stage_no":1,
"task_type":20,
"cloud_locations":[],
"on_premise_test_agents":[],
"options": {
"params": {
"address":"www.netrsr.com",
"count":1,
"interval":1
},
"priority": 10,
"5g_enabled": false,
"thresholds": {
"enabled": true,
"mode": "json",
"configuration": {
"type": "operator",
"operator_type": "or",
"thresholds": [
{
"type":"threshold",
"threshold_type":"lt",
"value":10,
"variable":"min_rtt"
},
{
"type":"threshold",
"threshold_type":"gte",
"value":100,
"variable":"max_rtt"
}
]
}
}
}
},
{
"name":"Traceroute1",
"stage_no":2,
"task_type":21,
"cloud_locations":[],
"on_premise_test_agents":[],
"options": {
"params": {
"address":"www.netrsr.com"
},
"priority": 10,
"5g_enabled": false,
"thresholds": {}
}
}
]
}
Pobranie id scenariusza¶
id - identyfikator scenariusza, który posłuży nam do łatwiejszego znalezienia wyników wszystkich testów wykonanych w ramach dodanego w poprzednim kroku scenariusza testowego,
timestamp_created – datę utworzenia scenariusza,
paused (true lub false) – informację o tym, czy scenariusz jest obecnie wstrzymany, czy normalnie wykonuje testy,
- status – status scenariusza:
1 – zaplanowany,
2 – uruchomiony,
3 – wstrzymany,
4 – zakończony.
{
"id": 1,
"timestamp_created":"2021-04-22T15:07:49.276522+02:00",
"paused":false,
"name":"Ping",
"repeat_interval":60,
"repeat_start":"2021-04-22T15:15:00.000Z",
"repeat_end":"2021-04-22T16:15:00.000Z",
"cloud_locations":[],
"on_premise_test_agents":[1],
"options": {
"notifications": {
"1": [],
"2": [],
"3": [],
"4": [1],
"5": [],
"6": []
},
"priority_limit": 20,
"thresholds": {
"enabled": true,
"code": "exceeded = False\r\nfor ta, ta_data in data.items():\r\n\r\n rtts = [row['rtt'] for row in ta_data['ping_block']['results'][-1]['result'][-1]['list']]\r\n rtts_mean = statistics.mean(rtts)\r\n rtts_std = statistics.stdev(rtts)\r\n \r\n ta_exceeded = rtts_mean > 20 or rtts_std < 0.1 * rtts_mean\r\n exceeded != ta_exceeded \r\n"
},
"5g_config": {
"k": "00112233445566778899aabbccddeeff",
"opc": "63BFA50EE6523365FF14C1F45F88737D",
"imsi": "999700123456780",
"mme_address": "172.30.30.209"
}
},
"test_blocks": [
{
"id":6,
"name":"Ping1",
"stage_no":1,
"task_type":20,
"cloud_locations":[],
"on_premise_test_agents":[],
"options": {
"params": {
"address":"www.netrsr.com",
"count":1,
"interval":1
},
"priority": 10,
"5g_enabled": false,
"thresholds": {
"enabled": true,
"mode": "json",
"configuration": {
"type": "operator",
"operator_type": "or",
"thresholds": [
{
"type":"threshold",
"threshold_type":"lt",
"value":10,
"variable":"min_rtt"
},
{
"type":"threshold",
"threshold_type":"gte",
"value":100,
"variable":"max_rtt"
}
]
}
}
}
},
{
"id":7,
"name":"Traceroute1",
"stage_no":2,
"task_type":21,
"cloud_locations":[],
"on_premise_test_agents":[],
"options": {
"params": {
"address":"www.netrsr.com"
},
"priority": 10,
"5g_enabled": false,
"thresholds": {}
}
}
]
}