أمثلة على واجهة برمجة تطبيقات REST API

يحتوي القسم التالي على أمثلة لبرامج bash script حول كيفية تنفيذ الإجراءات باستخدام SKOOR REST API مع أداة curl. يتم تنسيق معظم المدخلات والمخرجات بتنسيق JSON. من أجل سهولة القراءة، تم استخدام محلل JSON jq في بعض الأمثلة، والذي يمكن تثبيته من مستودعات Redhat أو CentOS الشائعة.

رأس البرنامج النصي bash

المعلمات الشائعة التي يجب تعيينها كرأس نص برمجي bash لأمثلة النصوص البرمجية أدناه (يجب تكييف USER و PASSWORD مع مستخدم SKOOR حقيقي):

#!/bin/bash
HOST=reltest
USER=admin
PASSWORD=admin

أمثلة الطلبات

يمكن نسخ الطلبات ونصوص الطلبات في الأمثلة أدناه ولصقها كما هي باستثناء معرفات الكائنات التي يجب استبدالها بالمعرفات الموجودة على النظام الذي يتم تنفيذ الطلبات عليه. يجب توفير أجزاء من نصوص الطلبات على الرغم من أنها لا تحتوي على قيم ذات معنى لإنشاء الكائنات أو تحديثها.

يجب توفير معظم معلومات التاريخ والوقت في الطلبات بتنسيق ISO 8601 وتنسيق المدة

جلسة SKOOR

تسجيل الدخول إلى SKOOR:

SESSION_ID=$(curl --silent -k "https://$HOST/skoor-webservice/session/login?username=$USER&password=$PASSWORD" | jq -r '.sessionId') >/dev/null

يرجى تسجيل الخروج دائمًا بعد الانتهاء من جميع الطلبات. يتم الاحتفاظ بالجلسات مفتوحة لمدة 24 ساعة وإلا

تسجيل الخروج:

curl -k "https://$HOST/skoor-webservice/session/logout?sessionId=$SESSION_ID"

المستخدمون

استعلام عن جميع مستخدمي SKOOR وتحليل الأسماء والأدوار باستخدام jq:

curl --silent -k "https://$HOST/skoor-webservice/users?sessionId=$SESSION_ID" | jq -r '.[] | "\(.name) \(.role)"'

المجموعات

الاستعلام عن مجموعة معينة برقم تعريف 495:

curl -k -X GET "https://$HOST/skoor-webservice/groups/495?sessionId=$SESSION_ID"

الاستعلام عن مجموعة باستخدام مرشح بحث مشفر بـ URL. يجب أن تحتوي النتيجة على جميع المجموعات الموجودة أسفل المجموعة الأم رقم 207.

مرشح البحث الأصلي: المجموعات التي لا يساوي معرفها 207:

{"type":"group","mode": "and","conditions": [{"item":"id","operator": "ne","expression":"207"}]}

مرشح البحث المشفر بـ URL (يمكن إجراء التشفير/الترميز باستخدام مهمة SKOOR HTTP أو إحدى الخدمات العديدة على الإنترنت):

%7B%22type%22%3A%22group%22%2C%22mode%22%3A%20%22and%22%2C%22conditions%22%3A%20%5B%7B%22item%22%3A%22id%22%2C%22operator%22%3A%20%22ne%22%2C%22expression%22%3A%22207%22%7D%5D%7D

الاستعلام:

curl -k -X GET "https://$HOST/skoor-webservice/groups/207/search?filterDefinition=%7B%22type%22%3A%22group%22%2C%22mode%22%3A%20%22and%22%2C%22conditions%22%3A%20%5B%7B%22item%22%3A%22id%22%2C%22operator%22%3A%20%22ne%22%2C%22expression%22%3A%22207%22%7D%5D%7D&sessionId=$SESSION_ID"

الأجهزة

الاستعلام عن الجهاز الذي يحمل المعرف 383:

curl -k -X GET "https://$HOST/skoor-webservice/devices/383?sessionId=$SESSION_ID"

إنشاء جهاز أسفل المجموعة التي تحمل المعرف 308:

نص الطلب لجهاز من النوع الفرعي خادم باسم SKOOR Server. تعيين المجمع الافتراضي إلى المعرف 2 وهو المجمع المحلي:

DEVICE_BODY='{
	"type": "device",
	"subType": "server",
	"name": "SKOOR Server",
	"address": "",
	"netmask": "",
	"deviceName": "localhost",
	"properties": [],
	"parameter": {},
	"permissions": {
		"read": true,
		"write": true,
		"execute": true
	},
	"isTemplate": false,
	"instanceType": "sub",
	"collectorId": 2,
	"hasChildren": false
}'

الطلب:

echo $DEVICE_BODY | curl -s -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/devices?parentType="group"&parentId="308"&sessionId=$SESSION_ID"

إنشاء مثيل جهاز من قالب أسفل المجموعة التي تحمل المعرف 332. لتحقيق ذلك، سيتم استخدام طريقة النسخ في واجهة برمجة التطبيقات REST. يجب تعيين معرف الجهاز (180 في المثال) إلى معرف قالب الجهاز:

curl -k -X POST "https://$HOST/skoor-webservice/devices/180/copy?destinationName="rest-test"&destinationAddress="localhost"&parentType="group"&parentId=332&destinationType="instance"&collectorId=2&jobsStopped=false&sessionId=$SESSION_ID"

حذف الجهاز الذي يحمل الرقم التعريفي 558:

لا يمكن استعادة الكائنات المحذوفة إلا من النسخة الاحتياطية للتكوين!

curl -k -X DELETE "https://localhost/skoor-webservice/devices/558?recursive=true&sessionId=$SESSION_ID"

المهام

استعلام عن معرف المهمة 1675 مع الحدود القصوى والقيم:

curl -ks -X GET "https://$HOST/skoor-webservice/jobs/1675?thresholds=true&values=true&sessionId=$SESSION_ID"

البحث عن مهمة باستخدام مرشح البحث.

مرشح بحث مشفر بـ URL للبحث عن المهام الموجودة أسفل المجموعة التي تحمل الرقم التعريفي 216 والتي تحتوي على خاصية مخصصة مع مفتاح test_property مضبوط على القيمة abc:

curl -ks -X GET "https://$HOST/skoor-webservice/groups/216/search?filterDefinition=%7B%22type%22%3A%22job%22%2C%22mode%22%3A%22and%22%2C%22conditions%22%3A%5B%7B%22item%22%3A%22property_key%22%2C%22operator%22%3A%22eq%22%2C%22expression%22%3A%22abc%22%2C%22propertyKey%22%3A%22test_property%22%7D%5D%7D&sessionId=$SESSION_ID"

مرشح بحث نص عادي للوظائف من النوع الفرعي webcollector أسفل المجموعة 310 مع تحليل النتيجة باستخدام jq:

curl -ks -X GET -G "https://$HOST/skoor-webservice/groups/310/search?sessionId=$SESSION_ID" --data-urlencode "filterDefinition={\"type\":\"job\",\"mode\":\"and\",\"conditions\":[{\"item\":\"subType\",\"operator\":\"eq\",\"expression\":\"webcollector\"}]}" | jq -r '.items[] | "\(.deviceName) \(.name) \(.id)"'

إنشاء وظيفة أسفل معرف الجهاز 555:

نص الطلب لمهمة من النوع الفرعي webcollector باسم TEST تم إنشاؤها وثلاث قيم مرتجعة. إنشاء المهمة تحت الجهاز الذي يحمل المعرف 555. سيتم تعيين فاصل التنفيذ على 0 ثانية (PT0S: بدون فاصل):

JOB_BODY='{
	"type": "job",
	"name": "TEST generated",
	"deviceId": 555,
	"subType": "webcollector",
	"interval": "PT0S",
	"stopped": false,
	"parameters": {
		"intervalMode": 0,
		"filename": "",
		"returnValue": [
			{
				"valueName": "Return value 1"
			},
			{
				"valueName": "Return value 2"
			},
			{
				"valueName": "Return value 3"
			}
		]
	},
	"isTemplate": false,
	"properties": [],
	"permissions": {
		"read": true,
		"write": true,
		"execute": true
	},
	"instanceType": "none",
	"stateForced": false,
	"thresholds": null,
	"values": null,
	"message": null
}'

الطلب:

echo $JOB_BODY | curl -s -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/jobs?parentType="device"&parentId="555"&sessionId=$SESSION_ID"

تحديث المهمة برقم التعريف 1608:

نص الطلب للمهمة التي تحمل المعرف 1608 على الجهاز الذي يحمل المعرف 555. تعيين عتبات لهذه المهمة:

JOB_BODY_UPDATE='{
	"type": "job",
	"id": 1608,
	"name": "Richmond",
	"deviceId": 555,
	"deviceName": "TEST generated device",
	"subType": "webcollector",
	"interval": "PT0S",
	"stopped": false,
	"parameters": {
		"intervalMode": 0,
		"filename": "",
		"returnValue": [
			{
				"valuePrecision": 3,
				"valueName": "myValue"
			}
		]
	},
	"isTemplate": false,
	"properties": [],
	"permissions": {
		"read": true,
		"write": true,
		"execute": true
	},
	"instanceType": "none",
	"currentState": "ok",
	"stateForced": false,
	"thresholds": {
		"major": {
			"mode": "or",
			"conditions": [
				{
					"key": "returnValue1",
					"operator": ">",
					"value": 60.0,
					"repetition": 1,
					"inFuture": null,
					"adaptiveValues": null
				}
			]
		}
	},
	"values": {},
	"message": null,
	"collectorId": 2
}'

الطلب:

echo $JOB_BODY_UPDATE | curl -s -k -X PUT -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/jobs/1608?sessionId=$SESSION_ID"

إيقاف/بدء المهمة ذات المعرف 1605:

curl -ks -X GET -G "https://$HOST/skoor-webservice/jobs/1605?sessionId=$SESSION_ID" | jq -r '.stopped = false' | curl -s -k -X PUT -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/jobs/1605?sessionId=$SESSION_ID"

الاستعلام عن سجل قيم المهمة رقم 1326:

يجب تقديم معلومات التاريخ والوقت بتنسيق ISO 8601 وتنسيق المدة

curl -ks -X GET "https://$HOST/skoor-webservice/jobs/1326/value-history?timestamp_begin=2018-04-16T08%3A00%3A00Z&timestamp_end=2018-04-16T10%3A00%3A00Z&scale=PT10M&key=returnValue1&mode=avg&values=true&sessionId=$SESSION_ID"

SLC

الاستعلام عن سجل حالة SLC برقم التعريف 6:

curl -k -X GET "https://$HOST/skoor-webservice/slcs/6/state-history?timestamp_begin=2017-10-01T00:00%2B01:00&timestamp_end=2017-12-12T23:59%2B01:00&recalc=true&sessionId=$SESSION_ID"

SLO

استعلام SLO مع المعرف 116:

curl -k -X GET "https://$HOST/skoor-webservice/slos/116?sessionId=$SESSION_ID"

الاستعلام عن سجل حالة SLO رقم التعريف 116:

curl -k -X GET "https://$HOST/skoor-webservice/slos/116/state-history?timestamp_begin=2018-01-01T00:00%2B01:00&timestamp_end=2018-12-12T23:59%2B01:00&recalc=true&sessionId=$SESSION_ID"

استعلام عن الكائنات الفرعية لـ SLO id 176:

curl -k -X GET "https://$HOST/skoor-webservice/slos/176/children?sessionId=$SESSION_ID"

إنشاء SLO تحت معرف المجموعة 296:

نص الطلب لـ SLO من النوع الفرعي top باسم TEST SLO:

SLO_BODY='{
	"type": "slo",
	"subType": "top",
	"name": "TEST SLO",
	"deviceId": 0,
	"deviceName": "",
	"stateOperation": "and",
	"pushState": "any",
	"sortMode": "link",
	"warning": 0,
	"minor": 0,
	"major": 0,
	"minorWarning": 0,
	"minorMinor": 0,
	"warningWarning": 0,
	"isTemplate": false,
	"ignoreMaintenance": true,
	"isReason": true,
	"properties": [],
	"parameters": {
		"children": 0,
		"costsPerMin": 0,
		"currency": "",
		"riskFactor": 0
	},
	"permissions": {
		"read": true,
		"write": true,
		"execute": true
	},
	"instanceType": "none"
}'

الطلب:

echo $SLO_BODY | curl -s -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/slos?parentType=group&parentId=296&sessionId=$SESSION_ID"

إنشاء مثيل SLO من قالب SLO مع معرف 179. سيكون اسم SLO هو rest-test-slo وسيكون الكائن الأصلي هو slo مع معرف 177:

curl -k -X POST "https://$HOST/skoor-webservice/slos/179/copy?destinationName=rest-test-slo_1&parentType=slo&parentId=177&destinationType=instance&sessionId=$SESSION_ID"

انقطاعات

استعلام عن الانقطاعات بين 2019-02-21T09:00+01:00 و 2019-03-21T23:59+01:00 (URL مشفر). الافتراضي هو مدة دنيا 10 دقائق (PT10M) والحالة الرئيسية فقط:

curl -k -X GET "https://$HOST/skoor-webservice/devices/383/outages?begin=2019-02-21T09:00%2B01:00&end=2019-03-21T23:59%2B01:00&recalc=false&sessionId=$SESSION_ID"

إعادة التقييم

استعلام عن إعادة تقييم المجموعة 207 من 2019-04-01T00:00:00Z:

curl -k -X GET "https://$HOST/skoor-webservice/groups/207/revaluations?begin=2019-04-01T00:00:00Z&sessionId=$SESSION_ID"

أضف إعادة تقييم إلى معرف المجموعة 207:

يجب تعيين معلمتي البداية والنهاية بتوقيت UTC متبوعًا بالمنطقة الزمنية Z أو +00:00 أو التوقيت المحلي متبوعًا بالمنطقة الزمنية (على سبيل المثال +02:00). تؤثر معلمة المنطقة الزمنية فقط على مصفوفة الأوقات

إذا كان وقت المعلمة "begin" لا يتطابق مع وقت البدء لمصفوفة الأوقات، فسيتم عرض الصيانة في وضع التحرير فقط (تحرير إعادة التقييم). يرجى ملاحظة أن MET ستميز تلقائيًا بين التوقيت الصيفي والشتوي. في هذه الحالة، اضبط وقت البدء على التوقيت المحلي

نص الطلب لإعادة تقييم لمرة واحدة من 2019-04-13T07:20:00Z إلى 2019-04-13T08:20:00Z:

REVALUATION_BODY='{
	"begin": "2019-04-13T07:20:00Z",
	"end": "2019-04-13T08:20:00Z",
	"created": null,
	"type": "maintenance",
	"adjustTo": "undefined",
	"inPast": null,
	"incident": null,
	"name": "Test-Maintenance",
	"active": [
		{
			"type": "one_time",
			"name": null,
			"timezone": "UTC",
			"times": [
				{
					"begin": "07:20",
					"duration": "PT1H",
					"date": "2019-04-13"
				}
			],
			"exception": false
		}
	]
}'

الطلب:

echo $REVALUATION_BODY | curl -k -X POST -H "Content-Type: application/json" -d @- "https://$HOST/skoor-webservice/groups/207/revaluations?sessionId=$SESSION_ID"