	},

	login: function () {
		var response, login = new HttpRequest();

		if (typeof Azure.params.proxy !== ''undefined'' && Azure.params.proxy !== '''') {
			login.setProxy(Azure.params.proxy);
		}

		login.addHeader(''Content-Type: application/x-www-form-urlencoded'');
		response = login.post(
			''https://login.microsoftonline.com/'' + encodeURIComponent(Azure.params.tenant_id) + ''/oauth2/token'',
			''grant_type=client_credentials&resource='' + encodeURIComponent(''https://management.azure.com/'') + ''&client_id='' + encodeURIComponent(Azure.params.app_id) + ''&client_secret='' + encodeURIComponent(Azure.params.password)
		);

		if (login.getStatus() !== 200) {
			throw ''Login failed with status code '' + login.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			throw ''Failed to parse login session response.'';
		}

		if (!response.hasOwnProperty(''access_token'')) {
			throw ''Authentication response does not contain access token.'';
		}

		Azure.token = response[''access_token''];
	},

	request: function (url) {
		var response, request = new HttpRequest();

		if (typeof Azure.params.proxy !== ''undefined'' && Azure.params.proxy !== '''') {
			request.setProxy(Azure.params.proxy);
		}

		if (!Azure.token) {
			throw ''Request does not contain access token.'';
		}

		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Authorization: Bearer '' + Azure.token);
		Zabbix.log(4, ''[ Azure Vault ] request url: '' + url);

		response = request.get(url);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			return JSON.parse(response);
		}
		catch (error) {
			throw ''Failed to parse response received from API.'';
		}
	},

	getField: function (data, path) {
		var steps = path.split(''.'');

		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}
			data = data[step];
		}

		return data;
	},

	getMetricsData: function () {
		var data = {},
			end_date = new Date(),
			start_date = new Date();

		function formatDate(date) {
			var year = date.getFullYear(),
				month = (date.getMonth() + 1),
				day = date.getDate(),
				hours = date.getHours(),
				minutes = date.getMinutes(),
				seconds = date.getSeconds(),
				ampm = hours >= 12 ? ''PM'' : ''AM'';

			hours = hours % 12 || 12;
			month = month < 10 ? ''0'' + month : month;
			day = day < 10 ? ''0'' + day : day;
			hours = hours < 10 ? ''0'' + hours : hours;
			minutes = minutes < 10 ? ''0'' + minutes : minutes;
			seconds = seconds < 10 ? ''0'' + seconds : seconds;

			formatted_date = year + ''-'' + month + ''-'' + day + '' '' + hours + '':'' + minutes + '':'' + seconds + '' '' + ampm;

			return formatted_date
		};

		start_date.setDate(start_date.getDate() - Azure.params.period);
		end_date = encodeURIComponent(''\\'''' + formatDate(end_date) + ''\\'''');
		start_date = encodeURIComponent(''\\'''' + formatDate(start_date) + ''\\'''');
		date_filter = ''&$filter='' + encodeURIComponent(''startTime eq '') + start_date + encodeURIComponent('' and endTime eq '') + end_date;

		data.health = Azure.getField(Azure.request(''https://management.azure.com'' + Azure.params.resource_id + ''/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version=2020-05-01''), ''value.0.properties'');
		data.jobs = Azure.getField(Azure.request(''https://management.azure.com'' + Azure.params.resource_id + ''/backupjobs?api-version=2025-01-01'' + date_filter), ''value'');

		return data
	}
};

try {
	Azure.setParams(JSON.parse(value));
	Azure.login();
	return JSON.stringify(Azure.getMetricsData());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ Azure Vault ] ERROR: '' + error);
	return JSON.stringify({ ''error'': error });
}','','0','','','','','0',NULL,'Gathers data of the Azure vault.','0','7d','0','',NULL,'{$AZURE.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','57d191150c06423daa1674d09c846dc7','0','2','0'),
('59368','19','','10600','Device [{#NAME}]:[{#ID}]: Raw data resources status','acronis.cpc.device.res.status.raw[{#NAME}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Gets statuses for device resources.','0','7d','0','',NULL,'15s','{$ACRONIS.CPC.DATACENTER.URL}{$ACRONIS.CPC.PATH.RESOURCE.MANAGEMENT}/resource_statuses','[{"resource_id":"{#ID}"},{"include_attributes":"true"}]','','','1','0','{$ACRONIS.CPC.HTTP.PROXY}','Accept: application/json
Authorization: Bearer {$ACRONIS.CPC.ACCESS_TOKEN}
X-Application-Secret: 5619386d-de56-49ec-8508-f5c399d3b9bd','0','0','0','0','0','0','0','20d93972ca2f47af96aed7ee9aa642af','0','2','0'),
('59389','16','','10358','Brokers discovery','jmx.discovery[beans,"org.apache.activemq:type=Broker,brokerName=*"]','1h','31d','365d','0','4','','','{7834} and {7835}','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','1',NULL,'Discovery of brokers','0','7d','3','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cbd9f98c2c1e412081a546e18066a868','0','2','0'),
('59390','16','','10358','Destinations discovery','jmx.discovery[beans,"org.apache.activemq:type=Broker,brokerName=*,destinationType=*,destinationName=*"]','1h','31d','365d','0','4','','','{7836} and {7837}','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','1',NULL,'Discovery of destinations','0','7d','3','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','14432547793d42d2b75c7b08fcbb3545','0','2','0'),
('59391','16','','10358','Broker {#JMXBROKERNAME}: Version','jmx[{#JMXOBJ},BrokerVersion]','1m','31d','0','0','4','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'The version of the broker.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','29a0f197bfe847d596dad4923364490e','0','2','0'),
('59392','16','','10358','Broker {#JMXBROKERNAME}: Memory limit','jmx[{#JMXOBJ},MemoryLimit]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Memory limit, in bytes, used for holding undelivered messages before paging to temporary storage.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','85c19ccb8b6a4242a8ba699e76836427','0','2','0'),
('59393','16','','10358','Broker {#JMXBROKERNAME}: Memory usage in percents','jmx[{#JMXOBJ}, MemoryPercentUsage]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Percent of memory limit used.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5e2a5638adf6405087014bfcfc8ffc93','0','2','0'),
('59394','16','','10358','Broker {#JMXBROKERNAME}: Storage limit','jmx[{#JMXOBJ},StoreLimit]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Disk limit, in bytes, used for persistent messages before producers are blocked.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','78806476b5cb4ce48f8ca8dbd173c7c3','0','2','0'),
('59395','16','','10358','Broker {#JMXBROKERNAME}: Storage usage in percents','jmx[{#JMXOBJ},StorePercentUsage]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Percent of store limit used.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fc4c79543a6f4b7b9c22f11b61b644c9','0','2','0'),
('59396','16','','10358','Broker {#JMXBROKERNAME}: Temp limit','jmx[{#JMXOBJ},TempLimit]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Disk limit, in bytes, used for non-persistent messages and temporary data before producers are blocked.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','09db80ee80ea47189142130d35a8e1c2','0','2','0'),
('59397','16','','10358','Broker {#JMXBROKERNAME}: Temp usage in percents','jmx[{#JMXOBJ},TempPercentUsage]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Percent of temp limit used.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','95354144839e4d22a82c4e9a1fab83d9','0','2','0'),
('59398','16','','10358','Broker {#JMXBROKERNAME}: Consumers count total','jmx[{#JMXOBJ},TotalConsumerCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Number of consumers attached to this broker.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','64ab04e456804e10a6c78c3190807506','0','2','0'),
('59399','16','','10358','Broker {#JMXBROKERNAME}: Messages dequeue rate','jmx[{#JMXOBJ},TotalDequeueCount]','1m','31d','365d','0','3','','messages/sec','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Rate of messages that have been delivered by the broker and acknowledged by consumers.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','48bc7dab4a1a40d8a823e880018cf8e7','0','2','0'),
('59400','16','','10358','Broker {#JMXBROKERNAME}: Messages enqueue rate','jmx[{#JMXOBJ},TotalEnqueueCount]','1m','31d','365d','0','3','','messages/sec','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Rate of messages that have been sent to the broker.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a462499eecbd443e931a9aa831240f65','0','2','0'),
('59401','16','','10358','Broker {#JMXBROKERNAME}: Producers count total','jmx[{#JMXOBJ},TotalProducerCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Number of producers attached to this broker.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2453d8221cec4e1ead6622c001ac9a8c','0','2','0'),
('59402','16','','10358','Broker {#JMXBROKERNAME}: Uptime','jmx[{#JMXOBJ},UptimeMillis]','1m','31d','365d','0','3','','s','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'The uptime of the broker.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a46d7281cb234ccaadacbb7d311cbd39','0','2','0'),
('59403','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Consumers count total on {#JMXBROKERNAME}','jmx["org.apache.activemq:type=Broker,brokerName={#JMXBROKERNAME}",{$ACTIVEMQ.TOTAL.CONSUMERS.COUNT: "{#JMXDESTINATIONNAME}"}]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Number of consumers attached to the broker of this destination. Used to suppress destination''s triggers when the count of consumers on the broker is lower than threshold.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fd8129c9a66043d896a70c91c8b0d471','0','2','0'),
('59404','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Producers count total on {#JMXBROKERNAME}','jmx["org.apache.activemq:type=Broker,brokerName={#JMXBROKERNAME}",{$ACTIVEMQ.TOTAL.PRODUCERS.COUNT: "{#JMXDESTINATIONNAME}"}]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Number of producers attached to the broker of this destination. Used to suppress destination''s triggers when the count of producers on the broker is lower than threshold.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','99f2094b02f848e785e40296958c5450','0','2','0'),
('59405','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Consumers count','jmx[{#JMXOBJ},ConsumerCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Number of consumers attached to this destination.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5e93e53a0c2d49a49d421ded87b6b1f8','0','2','0'),
('59406','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Messages dequeue rate','jmx[{#JMXOBJ},DequeueCount]','1m','31d','365d','0','3','','messages/sec','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Rate of messages that has been acknowledged (and removed) from the destination.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3536ec77069a434e854415f0a3270e67','0','2','0'),
('59407','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Messages enqueue rate','jmx[{#JMXOBJ},EnqueueCount]','1m','31d','365d','0','3','','messages/sec','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Rate of messages that have been sent to the destination.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a6dacc8c4d1f4724bf49c63449992035','0','2','0'),
('59408','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Expired messages count','jmx[{#JMXOBJ},ExpiredCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Number of messages that have been expired.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1c4ea913a9564d74b31ef82314203a15','0','2','0'),
('59409','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Memory usage in percents','jmx[{#JMXOBJ},MemoryPercentUsage]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'The percentage of the memory limit used.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','158fac5a1b3c4f07a4004a733f9b6995','0','2','0'),
('59410','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Producers count','jmx[{#JMXOBJ},ProducerCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Number of producers attached to this destination.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','82ee74872f6e46efbf16ae0705bcf2a6','0','2','0'),
('59411','16','','10358','{#JMXBROKERNAME}: {#JMXDESTINATIONTYPE} {#JMXDESTINATIONNAME}: Queue size','jmx[{#JMXOBJ},QueueSize]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$ACTIVEMQ.USER}','{$ACTIVEMQ.PASSWORD}','','','2',NULL,'Number of messages on this destination, including any that have been dispatched but not acknowledged.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fdc1e26fbe6545d3bdfc86f6f8c91b8b','0','2','0'),
('59414','0','','10264','CPU utilization','proc.cpu.util[{#APACHE.NAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'The percentage of the CPU utilization by a process {#APACHE.NAME}.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b73280fb0af64c7899abfc74cc074b13','0','2','0'),
('59428','7','','10637','CPU utilization','proc.cpu.util[{#APACHE.NAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'The percentage of the CPU utilization by a process {#APACHE.NAME}.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b1e48077179f4e439e2d3c3b918c9a03','0','2','0'),
('59489','0','','10353','OSD','ceph.osd.discovery["{$CEPH.CONNSTRING}","{$CEPH.USER}","{$CEPH.API.KEY}"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','374557a43a824d938e9a8e656151e0c9','0','2','0'),
('59490','0','','10353','Pool','ceph.pool.discovery["{$CEPH.CONNSTRING}","{$CEPH.USER}","{$CEPH.API.KEY}"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fb6b4d27f46e4160ad978244aa845d0e','0','2','0'),
('59507','0','','10413','[{#CERT.WEBSITE.ITEMNAME}]: Get','web.certificate.get[{#CERT.WEBSITE.HOSTNAME},{#CERT.WEBSITE.PORT},{#CERT.WEBSITE.IP}]','15m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Returns a JSON with the attributes of a certificate of the requested site.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5c4e35db1c8449589e2d892250e907c7','0','2','0'),
('59521','7','','10638','[{#CERT.WEBSITE.ITEMNAME}]: Get','web.certificate.get[{#CERT.WEBSITE.HOSTNAME},{#CERT.WEBSITE.PORT},{#CERT.WEBSITE.IP}]','15m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Returns a JSON with the attributes of a certificate of the requested site.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a25c6330c9fb43618f8d2e7acdc8f522','0','2','0'),
('59559','19','','10522','["{#SERVICE_NAME}"]: Get raw service state','consul.get_service_stats["{#SERVICE_NAME}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieve service instances providing the service indicated on the path.','0','7d','0','',NULL,'15s','{$CONSUL.CLUSTER.URL}/v1/health/service/{#SERVICE_NAME}','','','200, 429, 503','1','0','','X-Consul-Token: {$CONSUL.TOKEN}
X-Consul-Namespace: {$CONSUL.NAMESPACE}','0','0','0','0','0','0','0','38576dd458a94259ab273204ffe9aebd','0','2','0'),
('59585','0','','10318','Containers discovery','docker.containers.discovery[false]','15m','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of containers metrics.

Parameter:
true  - Returns all containers
false - Returns only running containers','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6f379dce9d3440018deb2c2cbaa91c06','0','2','0'),
('59586','0','','10318','Images discovery','docker.images.discovery','15m','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of images metrics.','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0b31468772c942cc8a401af2d33f17d2','0','2','0'),
('59587','0','','10318','Container {#NAME}: Get info','docker.container_info["{#NAME}",full]','1m','0','0','0','1','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Return low-level information about a container.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','743e2c9545de49c89472e343bf8d38da','0','2','0'),
('59588','0','','10318','Container {#NAME}: Get stats','docker.container_stats["{#NAME}"]','1m','0','0','0','1','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Get container stats based on resource usage.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4192b5b8be2545568637b7121c1466c1','0','2','0'),
('59629','19','','10322','Cluster nodes discovery','es.nodes.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,'','','1','{$ELASTICSEARCH.USERNAME}','{$ELASTICSEARCH.PASSWORD}','','','1',NULL,'Discovery ES cluster nodes.','0','7d','0','',NULL,'15s','{$ELASTICSEARCH.SCHEME}://{$ELASTICSEARCH.HOST}:{$ELASTICSEARCH.PORT}/_nodes/_all/nodes','','','200','1','0','','','0','0','0','0','0','0','0','5105173f24d941b2969fe3d190d22e82','0','2','0'),
('59630','15','','10322','ES {#ES.NODE}: Flush latency','es.node.indices.flush.latency[{#ES.NODE}]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'change(//es.node.indices.flush.total_time_in_millis[{#ES.NODE}]) / ( change(//es.node.indices.flush.total[{#ES.NODE}]) + (change(//es.node.indices.flush.total[{#ES.NODE}]) = 0) )','','0','','','','','2',NULL,'The average flush latency calculated from the available flush.total and flush.total_time_in_millis metrics.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c530311329e348cca74c38fa2260236b','0','2','0'),
('59631','15','','10322','ES {#ES.NODE}: Indexing latency','es.node.indices.indexing.index_latency[{#ES.NODE}]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'change(//es.node.indices.indexing.index_time_in_millis[{#ES.NODE}]) / ( change(//es.node.indices.indexing.index_total[{#ES.NODE}]) + (change(//es.node.indices.indexing.index_total[{#ES.NODE}]) = 0) )','','0','','','','','2',NULL,'The average indexing latency calculated from the available index_total and index_time_in_millis metrics.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','23f54c51c30a4dbdbef48611a7907db6','0','2','0'),
('59632','15','','10322','ES {#ES.NODE}: Fetch latency','es.node.indices.search.fetch_latency[{#ES.NODE}]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'change(//es.node.indices.search.fetch_time_in_millis[{#ES.NODE}]) / ( change(//es.node.indices.search.fetch_total[{#ES.NODE}]) + (change(//es.node.indices.search.fetch_total[{#ES.NODE}]) = 0) )','','0','','','','','2',NULL,'The average fetch latency calculated by sampling the total number of fetches and the total elapsed time at regular intervals.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','79b5fd5e04e249da9f73fbe68915fdb1','0','2','0'),
('59633','15','','10322','ES {#ES.NODE}: Query latency','es.node.indices.search.query_latency[{#ES.NODE}]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'change(//es.node.indices.search.query_time_in_millis[{#ES.NODE}]) /
( change(//es.node.indices.search.query_total[{#ES.NODE}]) + (change(//es.node.indices.search.query_total[{#ES.NODE}]) = 0) )','','0','','','','','2',NULL,'The average query latency calculated by sampling the total number of queries and the total elapsed time at regular intervals.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fadb6fe530ab4b1296d4c17728667b12','0','2','0'),
('59679','15','','10520','Cluster ["{#CLUSTER_NAME}"]: Membership, unhealthy','envoy.cluster.membership_unhealthy["{#CLUSTER_NAME}"]','1m','31d','365d','0','3','','','','',NULL,NULL,'last(//envoy.cluster.membership_total["{#CLUSTER_NAME}"]) - last(//envoy.cluster.membership_healthy["{#CLUSTER_NAME}"])','','0','','','','','2',NULL,'Current cluster unhealthy.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d453ade473ae4beaab06afa117814a1b','0','2','0'),
('59713','0','','10360','Databases discovery','perf_instance.discovery["MSExchange Active Manager"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of Exchange databases.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f3d6e34eaff844bfab582cb55d679e82','0','2','0'),
('59714','0','','10360','LDAP discovery','perf_instance_en.discovery["MSExchange ADAccess Domain Controllers"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of domain controller.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','635f8c96cf544dcd97e4a58b2e9353de','0','2','0'),
('59715','0','','10360','Web services discovery','perf_instance_en.discovery["Web Service"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of Exchange web services.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8a1cb7e22e55406e8e721a2189d7e00d','0','2','0'),
('59716','0','','10360','Active Manager [{#INSTANCE}]: Database copy role',E'perf_counter_en["\\MSExchange Active Manager({#INSTANCE})\\Database Copy Role Active"]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,'185','','','0','','','','','2',NULL,'Database copy active or passive role.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0b2d46b766f24947b76b49d8368044a5','0','2','0'),
('59717','0','','10360','Information Store [{#INSTANCE}]: Page faults per second',E'perf_counter_en["\\MSExchange Database({#INF.STORE})\\Database Page Fault Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,E'Indicates the rate of page faults that can''t be serviced because there are no pages available for allocation from the database cache. If this counter is above 0, it''s an indication that the MSExchange Database\\I/O Database Writes (Attached) Average Latency is too high.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9ad0743878ed411ab1e76b8e774e91e9','0','2','0'),
('59718','0','','10360','Information Store [{#INSTANCE}]: Log records stalled',E'perf_counter_en["\\MSExchange Database({#INF.STORE})\\Log Record Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Indicates the number of log records that can''t be added to the log buffers per second because the log buffers are full. The average value should be below 10 per second. Spikes (maximum values) shouldn''t be higher than 100 per second.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1af9e0b4abb74e07af1d0d183333f0c4','0','2','0'),
('59719','0','','10360','Information Store [{#INSTANCE}]: Log threads waiting',E'perf_counter_en["\\MSExchange Database({#INF.STORE})\\Log Threads Waiting", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Indicates the number of threads waiting to complete an update of the database by writing their data to the log.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1b53de26c73a49bdb7fe55328db03ddd','0','2','0'),
('59720','0','','10360','Database Counters [{#INSTANCE}]: Active database read operations per second',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Reads (Attached)/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the number of database read operations.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1da31e52e5dd4b72bea5811a9bb06a01','0','2','0'),
('59721','0','','10360','Database Counters [{#INSTANCE}]: Active database read operations latency',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Reads (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the average length of time per database read operation. Should be less than 20 ms on average.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0bc5750ca13f4f738904e45f9860b76a','0','2','0'),
('59722','0','','10360','Database Counters [{#INSTANCE}]: Passive database read operations latency',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Reads (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the average length of time per passive database read operation. Should be less than 200ms on average.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3095c843659341fd854fb297a9fdf14a','0','2','0'),
('59723','0','','10360','Database Counters [{#INSTANCE}]: Active database write operations per second',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Writes (Attached)/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the number of database write operations per second for each attached database instance.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7456bcbbac114ead9c417bcbeefa0e1c','0','2','0'),
('59724','0','','10360','Database Counters [{#INSTANCE}]: Active database write operations latency',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Writes (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the average length of time per database write operation. Should be less than 50ms on average.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e45413cc0e46458f9a00132b30c7c354','0','2','0'),
('59725','0','','10360','Database Counters [{#INSTANCE}]: Passive database write operations latency',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Writes (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,E'Shows the average length of time, in ms, per passive database write operation. Should be less than the read latency for the same instance, as measured by the MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Reads (Recovery) Average Latency counter.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5b7fc1949b67404584d2809556f3d595','0','2','0'),
('59726','0','','10360','Information Store [{#INSTANCE}]: Active mailboxes count',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\Active mailboxes"]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Number of active mailboxes in this database.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6128c55bf63a4c48981dfccd077b4635','0','2','0'),
('59727','0','','10360','Information Store [{#INSTANCE}]: Database state',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\Database State"]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,'187','','','0','','','','','2',NULL,'Database state. Possible values:
0: Database without any copy and dismounted.
1: Database is a primary database and mounted.
2: Database is a passive copy and the state is healthy.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4db79306eb044db899be5e7672651959','0','2','0'),
('59728','0','','10360','Information Store [{#INSTANCE}]: RPC requests latency',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\RPC Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'RPC Latency average is the average latency of RPC requests per database. Average is calculated over all RPCs since exrpc32 was loaded. Should be less than 50ms at all times, with spikes less than 100ms.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6bc9bc6d20df4de89ff03d63f21f6eab','0','2','0'),
('59729','0','','10360','Information Store [{#INSTANCE}]: RPC requests per second',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\RPC Operations/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the number of RPC operations per second for each database instance.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5321c367d288406d8d9eac217a444e9c','0','2','0'),
('59730','0','','10360','Information Store [{#INSTANCE}]: RPC requests total',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\RPC requests", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Indicates the overall RPC requests currently executing within the information store process. Should be below 70 at all times.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','701d6a4fcfe14f899e0282eb75e08753','0','2','0'),
('59731','0','','10360','Domain Controller [{#INSTANCE}]: Read time',E'perf_counter_en["\\MSExchange ADAccess Domain Controllers({#INSTANCE})\\LDAP Read Time", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Time that it takes to send an LDAP read request to the domain controller in question and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b1c046c5aca04b85bf907f83c05b4142','0','2','0'),
('59732','0','','10360','Domain Controller [{#INSTANCE}]: Search time',E'perf_counter_en["\\MSExchange ADAccess Domain Controllers({#INSTANCE})\\LDAP Search Time", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Time that it takes to send an LDAP search request and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c7326e542e534afd9a1df9a8ec1226e4','0','2','0'),
('59733','0','','10360','Web Service [{#INSTANCE}]: Current connections',E'perf_counter_en["\\Web Service({#INSTANCE})\\Current Connections", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the current number of connections established to the each Web Service.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3c3d1881bb294a31afa09605699a6965','0','2','0'),
('59734','7','','10361','Databases discovery','perf_instance.discovery["MSExchange Active Manager"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of Exchange databases.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3b23aa50517a4081b8463f694757cd0c','0','2','0'),
('59735','7','','10361','LDAP discovery','perf_instance_en.discovery["MSExchange ADAccess Domain Controllers"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of domain controller.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c18f965b9ba6419ea578238ebc8168bb','0','2','0'),
('59736','7','','10361','Web services discovery','perf_instance_en.discovery["Web Service"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of Exchange web services.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8749f11f547546ac8bf81478c798186f','0','2','0'),
('59737','7','','10361','Active Manager [{#INSTANCE}]: Database copy role',E'perf_counter_en["\\MSExchange Active Manager({#INSTANCE})\\Database Copy Role Active"]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,'186','','','0','','','','','2',NULL,'Database copy active or passive role.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7e0a5f324690432199728f577dbcc91a','0','2','0'),
('59738','7','','10361','Information Store [{#INSTANCE}]: Page faults per second',E'perf_counter_en["\\MSExchange Database({#INF.STORE})\\Database Page Fault Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,E'Indicates the rate of page faults that can''t be serviced because there are no pages available for allocation from the database cache. If this counter is above 0, it''s an indication that the MSExchange Database\\I/O Database Writes (Attached) Average Latency is too high.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','947396e622b24e2090a23607ee7a06a4','0','2','0'),
('59739','7','','10361','Information Store [{#INSTANCE}]: Log records stalled',E'perf_counter_en["\\MSExchange Database({#INF.STORE})\\Log Record Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Indicates the number of log records that can''t be added to the log buffers per second because the log buffers are full. The average value should be below 10 per second. Spikes (maximum values) shouldn''t be higher than 100 per second.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8c1ca3d79ef445668e8a5ba04a278e6f','0','2','0'),
('59740','7','','10361','Information Store [{#INSTANCE}]: Log threads waiting',E'perf_counter_en["\\MSExchange Database({#INF.STORE})\\Log Threads Waiting", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Indicates the number of threads waiting to complete an update of the database by writing their data to the log.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9173dba68e55434aaa324b3e38ba22bb','0','2','0'),
('59741','7','','10361','Database Counters [{#INSTANCE}]: Active database read operations per second',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Reads (Attached)/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the number of database read operations.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9ad96174c29142f6904322d08d76fe8e','0','2','0'),
('59742','7','','10361','Database Counters [{#INSTANCE}]: Active database read operations latency',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Reads (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the average length of time per database read operation. Should be less than 20 ms on average.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0df865f52f304f97aa01a706e455e153','0','2','0'),
('59743','7','','10361','Database Counters [{#INSTANCE}]: Passive database read operations latency',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Reads (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the average length of time per passive database read operation. Should be less than 200ms on average.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8381c3c3971f4b3380cfe5d663e31416','0','2','0'),
('59744','7','','10361','Database Counters [{#INSTANCE}]: Active database write operations per second',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Writes (Attached)/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the number of database write operations per second for each attached database instance.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','defb4f7dfb6f4a97a4928bab82897845','0','2','0'),
('59745','7','','10361','Database Counters [{#INSTANCE}]: Active database write operations latency',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Writes (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the average length of time per database write operation. Should be less than 50ms on average.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9c83e27f56f94bea9e635158037a0c8b','0','2','0'),
('59746','7','','10361','Database Counters [{#INSTANCE}]: Passive database write operations latency',E'perf_counter_en["\\MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Writes (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,E'Shows the average length of time, in ms, per passive database write operation. Should be less than the read latency for the same instance, as measured by the MSExchange Database ==> Instances({#INF.STORE}/_Total)\\I/O Database Reads (Recovery) Average Latency counter.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a53596604a4c4a49bd04bfda30064d78','0','2','0'),
('59747','7','','10361','Information Store [{#INSTANCE}]: Active mailboxes count',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\Active mailboxes"]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Number of active mailboxes in this database.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9ef13ef1197a4ba1abba1591ae588fa8','0','2','0'),
('59748','7','','10361','Information Store [{#INSTANCE}]: Database state',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\Database State"]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,'188','','','0','','','','','2',NULL,'Database state. Possible values:
0: Database without any copy and dismounted.
1: Database is a primary database and mounted.
2: Database is a passive copy and the state is healthy.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0e3dbea7e5694cc48c5216d92db67f7f','0','2','0'),
('59749','7','','10361','Information Store [{#INSTANCE}]: RPC requests latency',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\RPC Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'RPC Latency average is the average latency of RPC requests per database. Average is calculated over all RPCs since exrpc32 was loaded. Should be less than 50ms at all times, with spikes less than 100ms.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4a08076fdfcb4226a122474f5c2e98d9','0','2','0'),
('59750','7','','10361','Information Store [{#INSTANCE}]: RPC requests per second',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\RPC Operations/sec", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the number of RPC operations per second for each database instance.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c423048154634eb29f4fe56c306f5b04','0','2','0'),
('59751','7','','10361','Information Store [{#INSTANCE}]: RPC requests total',E'perf_counter_en["\\MSExchangeIS Store({#INSTANCE})\\RPC requests", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Indicates the overall RPC requests currently executing within the information store process. Should be below 70 at all times.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0f4970d43155441ab0f860e4e06328e0','0','2','0'),
('59752','7','','10361','Domain Controller [{#INSTANCE}]: Read time',E'perf_counter_en["\\MSExchange ADAccess Domain Controllers({#INSTANCE})\\LDAP Read Time", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Time that it takes to send an LDAP read request to the domain controller in question and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','577f868ff1e54113b61e8f74a084f611','0','2','0'),
('59753','7','','10361','Domain Controller [{#INSTANCE}]: Search time',E'perf_counter_en["\\MSExchange ADAccess Domain Controllers({#INSTANCE})\\LDAP Search Time", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'Time that it takes to send an LDAP search request and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1c94a8c06c5a4d4894060b68fc44a093','0','2','0'),
('59754','7','','10361','Web Service [{#INSTANCE}]: Current connections',E'perf_counter_en["\\Web Service({#INSTANCE})\\Current Connections", {$MS.EXCHANGE.PERF.INTERVAL}]','{$MS.EXCHANGE.PERF.INTERVAL}','31d','365d','0','0','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Shows the current number of connections established to the each Web Service.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','91f7649f17bf4d7a9ded8bec70ff09e2','0','2','0'),
('59755','16','','10169','Garbage collector discovery','jmx.discovery["beans","java.lang:name=*,type=GarbageCollector"]','4h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','1',NULL,'Garbage collectors metrics discovery.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7e0c60c6b1b34b5c99fa446076f35c28','0','2','0'),
('59756','16','','10169','Memory pool discovery','jmx.discovery["beans","java.lang:name=*,type=MemoryPool"]','4h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','1',NULL,'Memory pools metrics discovery.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b5dfe8bb0a754289a716092ad305ceed','0','2','0'),
('59757','16','','10169','GarbageCollector: {#JMXNAME} number of collections per second','jmx["java.lang:name={#JMXNAME},type=GarbageCollector","CollectionCount"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Displays the total number of collections that have occurred per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','61ad48ae9013481184d33222c7660bef','0','2','0'),
('59758','16','','10169','GarbageCollector: {#JMXNAME} accumulated time spent in collection','jmx["java.lang:name={#JMXNAME},type=GarbageCollector","CollectionTime"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Displays the approximate accumulated collection elapsed time, in seconds.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8e3db2efbe714f918ece15216fae628b','0','2','0'),
('59759','16','','10169','Memory pool: {#JMXNAME} committed','jmx["java.lang:name={#JMXNAME},type=MemoryPool","Usage.committed"]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Current memory allocated.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8b3da0f9b0b64b58b25ffed71a679ed0','0','2','0'),
('59760','16','','10169','Memory pool: {#JMXNAME} maximum size','jmx["java.lang:name={#JMXNAME},type=MemoryPool","Usage.max"]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Maximum amount of memory that can be used for memory management. This amount of memory is not guaranteed to be available if it is greater than the amount of committed memory. The Java virtual machine may fail to allocate memory even if the amount of used memory does not exceed this maximum size.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f8504be0098b41a6b789c67f88f1c861','0','2','0'),
('59761','16','','10169','Memory pool: {#JMXNAME} used','jmx["java.lang:name={#JMXNAME},type=MemoryPool","Usage.used"]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Current memory usage.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','74f11991286a474b838898036ebb82e5','0','2','0'),
('59766','21','','10629','Branch [{#BRANCH_NAME}]: Number of commits','github.repo.branches.commits.total[{#BRANCH_NAME}]','{$GITHUB.INTERVAL:"get_commits_count:{#BRANCH_NAME}"}','31d','365d','0','3','','','','',NULL,NULL,E'var github = {
	params: {},

	setParams: function (params, required) {
		required = required || [];
		required.concat([''api_url'', ''user_agent'', ''api_version'', ''repo_owner'', ''repo_name'', ''pagination_required'', ''api_token'']).forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined''
				|| params[field] === '''') {
				throw ''Required parameter is not set: "'' + field + ''".'';
			}
		});

		github.params = params;

		if (typeof github.params.api_url === ''string'' && !github.params.api_url.endsWith(''/'')) {
			github.params.api_url += ''/'';
		}
	},

	apiRequest: function (url, pagination_required) {
		const next_pattern = /<([^>]+)>;\\s*rel="next"/i;
		var request = new HttpRequest(),
			response,
			headers,
			final_data = {
				headers: {},
				data: []
			};

		pagination_required = (typeof pagination_required !== ''undefined'') ? pagination_required : ''true'';

		request.addHeader(''User-Agent: '' + github.params.user_agent);
		request.addHeader(''Accept: application/vnd.github+json'');
		request.addHeader(''X-GitHub-Api-Version: '' + github.params.api_version);
		request.addHeader(''Authorization: Bearer '' + github.params.api_token);

		if (typeof github.params.http_proxy !== ''undefined'' && github.params.http_proxy !== '''') {
			request.setProxy(github.params.http_proxy);
			Zabbix.log(4, ''[ GitHub Repo ] Using HTTP proxy: '' + github.params.http_proxy);
		}

		while (url) {
			Zabbix.log(4, ''[ GitHub Repo ] Sending request: '' + url);

			response = request.get(url);

			Zabbix.log(4, ''[ GitHub Repo ] Received response with status code '' + request.getStatus() + '': '' + response);

			if (request.getStatus() < 200 || request.getStatus() >= 300) {
				throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
			}

			try {
				response = JSON.parse(response);
			}
			catch (error) {
				throw ''Failed to parse response received from API. Check debug log for more information.'';
			}

			var parsed_data = github.parseData(response);
			final_data.data = final_data.data.concat(parsed_data);

			headers = request.getHeaders();

			url = ((headers.link || '''').match(next_pattern) || [])[1];

			if (pagination_required === ''false'') {
				url = '''';
			}
		}

		final_data.headers = request.getHeaders();

		delete request;

		return final_data;
	},

	parseData: function (response_data) {
		if (!response_data) {
			return [];
		}

		const normalization_required = "total_count" in response_data && !("url" in response_data);
		if (!normalization_required) return response_data;

		delete response_data.incomplete_results;
		delete response_data.repository_selection;
		delete response_data.total_count;

		const namespaceKey = Object.keys(response_data)[0];
		response_data = response_data[namespaceKey];

		return response_data;
	},

	itemsCount: function (response_data) {
		const last_page_number = /<[^>]+page=(\\d+)>;\\s*rel="last"/i;

		if (response_data.headers.link){
			return response_data.headers.link.match(last_page_number)[1];
		}

		return response_data.data.length;
	}
}

try {
	github.setParams(JSON.parse(value), [''api_query'']);

	var result = github.apiRequest(github.params.api_url + github.params.api_query + ''?'' + github.params.query_params || '''', github.params.pagination_required);

	return github.itemsCount(result);
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ GitHub Repo ] ERROR: '' + error);
	return JSON.stringify({ error: error });
}','','0','','','','','2',NULL,'Get the number of commits in the branch.

Information about endpoint:
https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28#list-commits','0','7d','0','',NULL,'{$GITHUB.TIMEOUT:"get_commits_count:{#BRANCH_NAME}"}','','','','200','1','0','','','0','0','0','0','0','0','0','927ef4806cc4460a8882c204a9e94817','0','2','0'),
('59767','21','','10629','Workflow [{#WORKFLOW_NAME}]: Get last run','github.repo.workflows.last_run.get[{#WORKFLOW_NAME}]','{$GITHUB.INTERVAL:"get_last_run:{#WORKFLOW_NAME}"}','0','0','0','4','','','','',NULL,NULL,E'var github = {
	params: {},

	setParams: function (params, required) {
		required = required || [];
		required.concat([''api_url'', ''user_agent'', ''api_version'', ''repo_owner'', ''repo_name'', ''pagination_required'', ''api_token'']).forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined''
				|| params[field] === '''') {
				throw ''Required parameter is not set: "'' + field + ''".'';
			}
		});

		github.params = params;

		if (typeof github.params.api_url === ''string'' && !github.params.api_url.endsWith(''/'')) {
			github.params.api_url += ''/'';
		}
	},

	apiRequest: function (url, pagination_required) {
		const next_pattern = /<([^>]+)>;\\s*rel="next"/i;
		var request = new HttpRequest(),
			response,
			headers,
			final_data = {
				headers: {},
				data: []
			};

		pagination_required = (typeof pagination_required !== ''undefined'') ? pagination_required : ''true'';

		request.addHeader(''User-Agent: '' + github.params.user_agent);
		request.addHeader(''Accept: application/vnd.github+json'');
		request.addHeader(''X-GitHub-Api-Version: '' + github.params.api_version);
		request.addHeader(''Authorization: Bearer '' + github.params.api_token);

		if (typeof github.params.http_proxy !== ''undefined'' && github.params.http_proxy !== '''') {
			request.setProxy(github.params.http_proxy);
			Zabbix.log(4, ''[ GitHub Repo ] Using HTTP proxy: '' + github.params.http_proxy);
		}

		while (url) {
			Zabbix.log(4, ''[ GitHub Repo ] Sending request: '' + url);

			response = request.get(url);

			Zabbix.log(4, ''[ GitHub Repo ] Received response with status code '' + request.getStatus() + '': '' + response);

			if (request.getStatus() < 200 || request.getStatus() >= 300) {
				throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
			}

			try {
				response = JSON.parse(response);
			}
			catch (error) {
				throw ''Failed to parse response received from API. Check debug log for more information.'';
			}

			var parsed_data = github.parseData(response);
			final_data.data = final_data.data.concat(parsed_data);

			headers = request.getHeaders();

			url = ((headers.link || '''').match(next_pattern) || [])[1];

			if (pagination_required === ''false'') {
				url = '''';
			}
		}

		final_data.headers = request.getHeaders();

		delete request;

		return final_data;
	},

	parseData: function (response_data) {
		if (!response_data) {
			return [];
		}

		const normalization_required = "total_count" in response_data && !("url" in response_data);
		if (!normalization_required) return response_data;

		delete response_data.incomplete_results;
		delete response_data.repository_selection;
		delete response_data.total_count;

		const namespaceKey = Object.keys(response_data)[0];
		response_data = response_data[namespaceKey];

		return response_data;
	},

	itemsCount: function (response_data) {
		const last_page_number = /<[^>]+page=(\\d+)>;\\s*rel="last"/i;

		if (response_data.headers.link){
			return response_data.headers.link.match(last_page_number)[1];
		}

		return response_data.data.length;
	}
}

try {
	github.setParams(JSON.parse(value), [''api_query'']);

	var result = github.apiRequest(github.params.api_url + github.params.api_query + ''?'' + github.params.query_params || '''', github.params.pagination_required);

	return JSON.stringify(result);
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ GitHub Repo ] ERROR: '' + error);
	return JSON.stringify({ error: error });
}','','0','','','','','2',NULL,'Get the data about the last workflow run.

Information about endpoint:
https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-workflow','0','7d','0','',NULL,'{$GITHUB.TIMEOUT:"get_last_run:{#WORKFLOW_NAME}"}','','','','200','1','0','','','0','0','0','0','0','0','0','32311fa69236401388321fad4ae183d6','0','2','0'),
('59776','19','','10362','Puma metrics discovery','gitlab.puma.discovery','3h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discovery of Puma specific metrics when Puma is used.','0','7d','0','',NULL,'','{$GITLAB.URL}/-/metrics{$GITLAB.HEALTH.TOKEN}','','','200','1','0','','','0','0','0','0','0','0','0','acd3e31daa8f497bb1ce0f91d104d928','0','2','0'),
('59777','19','','10362','Unicorn metrics discovery','gitlab.unicorn.discovery','3h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'DiscoveryUnicorn specific metrics, when Unicorn is used.','0','7d','0','',NULL,'','{$GITLAB.URL}/-/metrics{$GITLAB.HEALTH.TOKEN}','','','200','1','0','','','0','0','0','0','0','0','0','912723d1837641cf9b84996788bd6b54','0','2','0'),
('59791','19','','10363','Data node discovery','hadoop.datanode.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'','0','7d','0','',NULL,'','{$HADOOP.NAMENODE.HOST}:{$HADOOP.NAMENODE.PORT}/jmx?qry=Hadoop:service=NameNode,name=NameNodeInfo','','','200','1','0','','','0','0','0','0','0','0','0','0f05e90a6fc547d18f291ae2264db9d1','0','2','0'),
('59792','19','','10363','Node manager discovery','hadoop.nodemanager.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'','0','7d','0','',NULL,'','{$HADOOP.RESOURCEMANAGER.HOST}:{$HADOOP.RESOURCEMANAGER.PORT}/jmx?qry=Hadoop:service=ResourceManager,name=RMNMInfo','','','200','1','0','','','0','0','0','0','0','0','0','de2d5f97843345668bc0b8c8336b9c14','0','2','0'),
('59793','19','','10363','Hadoop DataNode {#HOSTNAME}: Get stats','hadoop.datanode.get[{#HOSTNAME}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'','0','7d','0','',NULL,'','{#INFOADDR}/jmx','','','200','1','0','','','0','0','0','0','0','0','0','6d2d030b3ddb41a394faede737329bbb','0','2','0'),
('59794','19','','10363','Hadoop NodeManager {#HOSTNAME}: Get stats','hadoop.nodemanager.get[{#HOSTNAME}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'','0','7d','0','',NULL,'','{#NODEHTTPADDRESS}/jmx','','','200','1','0','','','0','0','0','0','0','0','0','23c89dfb26a34b77bf34fcf543f719f2','0','2','0'),
('59821','15','','10308','Frontend {#PXNAME}: Session utilization','haproxy.frontend.sutil[{#PXNAME},{#SVNAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'last(//haproxy.frontend.scur[{#PXNAME},{#SVNAME}]) / last(//haproxy.frontend.slim[{#PXNAME},{#SVNAME}]) * 100','','0','','','','','2',NULL,'Percentage of sessions used (scur / slim * 100).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4aedda0904954ade92a4aad6460d759b','0','2','0'),
('59885','15','','10309','Frontend {#PXNAME}: Session utilization','haproxy.frontend.sutil[{#PXNAME},{#SVNAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'last(//haproxy.frontend.scur[{#PXNAME},{#SVNAME}]) / last(//haproxy.frontend.slim[{#PXNAME},{#SVNAME}]) * 100','','0','','','','','2',NULL,'Percentage of sessions used (scur / slim * 100).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','53efa6139fe3400283c96ec76eb20855','0','2','0'),
('59946','0','','10325','Application pools discovery',E'wmi.getall[root\\webAdministration, select Name from ApplicationPool]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6148952d54d54982af404c6c845ccbf2','0','2','0'),
('59947','0','','10325','AppPool {#APPPOOL} state',E'perf_counter_en["\\APP_POOL_WAS({#APPPOOL})\\Current Application Pool State"]','1m','31d','365d','0','3','','','','',NULL,'152','','','0','','','','','2',NULL,'The state of the application pool.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','270068fe6e6844ae9bbf993509eda7e0','0','2','0'),
('59948','0','','10325','{#APPPOOL} Uptime',E'perf_counter_en["\\APP_POOL_WAS({#APPPOOL})\\Current Application Pool Uptime"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'The web application uptime period since the last restart.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f039a53351d54132ab9ad046282389d8','0','2','0'),
('59949','0','','10325','AppPool {#APPPOOL} recycles',E'perf_counter_en["\\APP_POOL_WAS({#APPPOOL})\\Total Application Pool Recycles"]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','','','','','2',NULL,'The number of times the application pool has been recycled since Windows Process Activation Service (WAS) started.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4700b5729ca440869de976ae347598cf','0','2','0'),
('59950','0','','10325','AppPool {#APPPOOL} current queue size',E'perf_counter_en["\\HTTP Service Request Queues({#APPPOOL})\\CurrentQueueSize"]','30s','31d','365d','0','3','','','','',NULL,NULL,'','','0','','','','','2',NULL,'The number of requests in the queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','193642cad7214206a00db4f710bfbef8','0','2','0'),
('59951','7','','10326','Application pools discovery',E'wmi.getall[root\\webAdministration, select Name from ApplicationPool]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1dfb7339b81b4237a4e90b29328de297','0','2','0'),
('59952','7','','10326','AppPool {#APPPOOL} state',E'perf_counter_en["\\APP_POOL_WAS({#APPPOOL})\\Current Application Pool State"]','1m','31d','365d','0','3','','','','',NULL,'153','','','0','','','','','2',NULL,'The state of the application pool.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','82c0636b84d84863a2051d6b708d841b','0','2','0'),
('59953','7','','10326','{#APPPOOL} Uptime',E'perf_counter_en["\\APP_POOL_WAS({#APPPOOL})\\Current Application Pool Uptime"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','','','','','2',NULL,'The web application uptime period since the last restart.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f0a6fe8a4cc44582a3048f1a00442736','0','2','0'),
('59954','7','','10326','AppPool {#APPPOOL} recycles',E'perf_counter_en["\\APP_POOL_WAS({#APPPOOL})\\Total Application Pool Recycles"]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','','','','','2',NULL,'The number of times the application pool has been recycled since Windows Process Activation Service (WAS) started.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e2cfc77aebab4b14bf6a690dbdd0c2b1','0','2','0'),
('59955','7','','10326','AppPool {#APPPOOL} current queue size',E'perf_counter_en["\\HTTP Service Request Queues({#APPPOOL})\\CurrentQueueSize"]','30s','31d','365d','0','3','','','','',NULL,NULL,'','','0','','','','','2',NULL,'The number of requests in the queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d525c1c47ee2402d9635ae276a5e58ec','0','2','0'),
('59956','19','','10379','Computers discovery','jenkins.computers','1h','31d','365d','0','4','','','','',NULL,NULL,'','','1','{$JENKINS.USER}','{$JENKINS.API.TOKEN}','','','1',NULL,'','0','7d','0','',NULL,'','{$JENKINS.URL}/computer/api/json','[{"tree":"computer[description,displayName,monitorData]"}]','','200','1','0','','','0','0','0','0','0','0','0','eb3e35534745476c8b205acb88382c77','0','2','0'),
('59957','19','','10379','Jobs discovery','jenkins.jobs','1h','31d','365d','0','4','','','','',NULL,NULL,'','','1','{$JENKINS.USER}','{$JENKINS.API.TOKEN}','','','1',NULL,'','0','7d','0','',NULL,'','{$JENKINS.URL}/api/json','[{"tree":"jobs[name,description,url]"}]','','200','1','0','','','0','0','0','0','0','0','0','25949e5e452e4fa384ec4aa2088375aa','0','2','0'),
('59984','16','','10630','Storage discovery','jmx.discovery[beans,"com.atlassian.jira:type=metrics,category00=home,category01=*,category02=write,category03=latency,*,name=value"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','1',NULL,'Discovery of the Jira storage metrics.','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6b671426094e4268b48f51eb97ddd8bf','0','2','0'),
('59985','16','','10630','Indexing latency discovery','jmx.discovery[beans,"com.atlassian.jira:type=metrics,category00=indexing,name=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','1',NULL,'Discovery of the Jira indexing metrics.','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','886f8b2c518d4f3bb3d4441e29bf13fc','0','2','0'),
('59986','16','','10630','Issue latency discovery','jmx.discovery[beans,"com.atlassian.jira:type=metrics,category00=issue,name=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','1',NULL,'Discovery of the Jira issue latency metrics.','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','70db70727f824102b769a652713432ad','0','2','0'),
('59987','16','','10630','Mail server discovery','jmx.discovery[beans,"com.atlassian.jira:type=metrics,category00=mail,category01=*,category02=connection,category03=state,name=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','1',NULL,'Discovery of the Jira connected mail servers.','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2bd3e8ce78f84ccba599137b0e0ab6a0','0','2','0'),
('59989','16','','10630','Storage [{#JMXCATEGORY01}]: Latency','jmx["{#JMXOBJ}",Value]','15m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'The median latency of writing a small file (~30 bytes) to `{#JMXCATEGORY01}`.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','933c9c8b11e848f88775ee9b54f8d292','0','2','0'),
('59990','16','','10630','Indexing [{#JMXNAME}]: Latency','jmx["com.atlassian.jira:type=metrics,category00=indexing,name={#JMXNAME}",Mean]','15m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Average time spent on indexing operations.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2b02e3232de34ae9803f80ac94ade79c','0','2','0'),
('59991','16','','10630','Issue [{#JMXNAME}]: Latency','jmx["{#JMXOBJ}",Mean]','15m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Average time spent on issue `{#JMXNAME}` operations.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','da6d68fa14f24f58bcbe1157b9818321','0','2','0'),
('59992','16','','10630','Mail [{#JMXCATEGORY01},{#JMXNAME}]: Connection state','jmx["{#JMXOBJ}",Connected]','1m','31d','365d','0','3','','','','',NULL,'1224','','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Shows connection state of Jira to discovered mail server: `{#JMXCATEGORY01}-{#JMXNAME}`','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5281bee6b829433a875c0e026d805206','0','2','0'),
('59993','16','','10630','Mail [{#JMXCATEGORY01},{#JMXNAME}]: Failures per minute','jmx["{#JMXOBJ}",TotalFailures]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$JMX.USER}','{$JMX.PASSWORD}','','','2',NULL,'Count of failed connections to discovered mail server `{#JMXCATEGORY01}-{#JMXNAME}` per minute','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','949854436d6542f9a859a65cec20572d','0','2','0'),
('59996','16','','10364','Topic Metrics (read)','jmx.discovery[beans,"kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec,topic=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$KAFKA.USER}','{$KAFKA.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c4421eb9f9ab4bf2b6d4ba101c897ca7','0','2','0'),
('59997','16','','10364','Topic Metrics (errors)','jmx.discovery[beans,"kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec,topic=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$KAFKA.USER}','{$KAFKA.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','82037c202489462fa9c4afbb23618315','0','2','0'),
('59998','16','','10364','Topic Metrics (write)','jmx.discovery[beans,"kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$KAFKA.USER}','{$KAFKA.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d5ec81baadad41f29882757979443b5b','0','2','0'),
('59999','16','','10364','Kafka {#JMXTOPIC}: Bytes out per second','jmx["kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec,topic={#JMXTOPIC}","Count"]','1m','31d','365d','0','0','','Bps','','',NULL,NULL,'','','0','{$KAFKA.USER}','{$KAFKA.PASSWORD}','','','2',NULL,'The rate at which data is fetched and read from the broker by consumers (by topic).','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','42ad85334b524973afa2fd8f2a135e77','0','2','0'),
('60000','16','','10364','Kafka {#JMXTOPIC}: Bytes rejected per second','jmx["kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec,topic={#JMXTOPIC}","Count"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$KAFKA.USER}','{$KAFKA.PASSWORD}','','','2',NULL,'Rejected bytes rate by topic.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','abaf2616581a46158a13a71ffcf67634','0','2','0'),
('60001','16','','10364','Kafka {#JMXTOPIC}: Bytes in per second','jmx["kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec,topic={#JMXTOPIC}","Count"]','1m','31d','365d','0','0','','Bps','','',NULL,NULL,'','','0','{$KAFKA.USER}','{$KAFKA.PASSWORD}','','','2',NULL,'The rate at which data sent from producers is consumed by topic.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','61bb29999ea1465c8125b518507d9e5d','0','2','0'),
('60002','16','','10364','Kafka {#JMXTOPIC}: Messages in per second','jmx["kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic={#JMXTOPIC}","Count"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$KAFKA.USER}','{$KAFKA.PASSWORD}','','','2',NULL,'The rate at which individual messages are consumed by topic.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5c18b5eca61b4ed2ae1aae197b7c9958','0','2','0'),
('60014','15','','10504','["{#VERB}"] Requests, p50','kubernetes.api.request_duration_seconds_p50["{#VERB}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.api.request_duration_seconds_bucket[*,"{#VERB}"],5m,50)','','0','','','','','2',NULL,'50 percentile of response latency distribution in seconds for each verb.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','a4f39bb87ef248edbb578c0c89baba46','0','2','0'),
('60015','15','','10504','["{#VERB}"] Requests, p90','kubernetes.api.request_duration_seconds_p90["{#VERB}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.api.request_duration_seconds_bucket[*,"{#VERB}"],5m,90)','','0','','','','','2',NULL,'90 percentile of response latency distribution in seconds for each verb.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','12d65aff584e459586284967e570fc0a','0','2','0'),
('60016','15','','10504','["{#VERB}"] Requests, p95','kubernetes.api.request_duration_seconds_p95["{#VERB}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.api.request_duration_seconds_bucket[*,"{#VERB}"],5m,95)','','0','','','','','2',NULL,'95 percentile of response latency distribution in seconds for each verb.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','3e900f1e4cab4edba4d068f1b6759428','0','2','0'),
('60017','15','','10504','["{#VERB}"] Requests, p99','kubernetes.api.request_duration_seconds_p99["{#VERB}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.api.request_duration_seconds_bucket[*,"{#VERB}"],5m,99)','','0','','','','','2',NULL,'99 percentile of response latency distribution in seconds for each verb.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','a34c3c5f5f844c46a4d3f148cacd3fd3','0','2','0'),
('60030','15','','10505','["{#NAME}"]: Workqueue queue duration, 50p','kubernetes.controller.workqueue_queue_duration_seconds_p50["{#NAME}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.controller.queue_duration_seconds_bucket[*,"{#NAME}"],5m,50)','','0','','','','','2',NULL,'50 percentile of how long in seconds an item stays in workqueue before being requested. If there are no requests for 5 minute, item value will be discarded.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','0657d0741d5649a2b0ad87c2f39dc243','0','2','0'),
('60031','15','','10505','["{#NAME}"]: Workqueue queue duration, p90','kubernetes.controller.workqueue_queue_duration_seconds_p90["{#NAME}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.controller.queue_duration_seconds_bucket[*,"{#NAME}"],5m,90)','','0','','','','','2',NULL,'90 percentile of how long in seconds an item stays in workqueue before being requested, by queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','9f976d181b7f4776a271e683d9efd396','0','2','0'),
('60032','15','','10505','["{#NAME}"]: Workqueue queue duration, p95','kubernetes.controller.workqueue_queue_duration_seconds_p95["{#NAME}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.controller.queue_duration_seconds_bucket[*,"{#NAME}"],5m,95)','','0','','','','','2',NULL,'95 percentile of how long in seconds an item stays in workqueue before being requested, by queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','ce4b9daa161742ffb6fec0790c1dc689','0','2','0'),
('60033','15','','10505','["{#NAME}"]: Workqueue queue duration, p99','kubernetes.controller.workqueue_queue_duration_seconds_p99["{#NAME}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.controller.queue_duration_seconds_bucket[*,"{#NAME}"],5m,99)','','0','','','','','2',NULL,'99 percentile of how long in seconds an item stays in workqueue before being requested, by queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','61d5f616cc474ae3adfcbd1a15fdd607','0','2','0'),
('60034','15','','10505','["{#NAME}"]: Workqueue work duration, 50p','kubernetes.controller.workqueue_work_duration_seconds_p50["{#NAME}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.controller.duration_seconds_bucket[*,"{#NAME}"],5m,50)','','0','','','','','2',NULL,'50 percentiles of how long in seconds processing an item from workqueue takes, by queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','68efc8bc4fec458384e21b7b19db696c','0','2','0'),
('60035','15','','10505','["{#NAME}"]: Workqueue work duration, p90','kubernetes.controller.workqueue_work_duration_seconds_p90["{#NAME}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.controller.duration_seconds_bucket[*,"{#NAME}"],5m,90)','','0','','','','','2',NULL,'90 percentile of how long in seconds processing an item from workqueue takes, by queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','ff4f4b222dfd47f69b96513fed4393f5','0','2','0'),
('60036','15','','10505','["{#NAME}"]: Workqueue work duration, p95','kubernetes.controller.workqueue_work_duration_seconds_p95["{#NAME}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.controller.duration_seconds_bucket[*,"{#NAME}"],5m,95)','','0','','','','','2',NULL,'95 percentile of how long in seconds processing an item from workqueue takes, by queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','34a688601a404d63aea3a774a9f5970a','0','2','0'),
('60037','15','','10505','["{#NAME}"]: Workqueue work duration, p99','kubernetes.controller.workqueue_work_duration_seconds_p99["{#NAME}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.controller.duration_seconds_bucket[*,"{#NAME}"],5m,99)','','0','','','','','2',NULL,'99 percentile of how long in seconds processing an item from workqueue takes, by queue.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','e5b4ea49906e4a12b01757854a5766a4','0','2','0'),
('60049','15','','10506','[{#OP_TYPE}] Operations, p50','kube.kublet.runtime_ops_duration_seconds_p50["{#OP_TYPE}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kube.kublet.runtime_ops_duration_seconds_bucket[*,"{#OP_TYPE}"],5m,50)','','0','','','','','2',NULL,'50 percentile of operation latency distribution in seconds for each verb.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','3d9545d396b24ef6b87eb730ad93cda7','0','2','0'),
('60050','15','','10506','[{#OP_TYPE}] Operations, p90','kube.kublet.runtime_ops_duration_seconds_p90["{#OP_TYPE}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kube.kublet.runtime_ops_duration_seconds_bucket[*,"{#OP_TYPE}"],5m,90)','','0','','','','','2',NULL,'90 percentile of operation latency distribution in seconds for each verb.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','039a47a0b20741e79701fecb924e6a08','0','2','0'),
('60051','15','','10506','[{#OP_TYPE}] Operations, p95','kube.kublet.runtime_ops_duration_seconds_p95["{#OP_TYPE}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kube.kublet.runtime_ops_duration_seconds_bucket[*,"{#OP_TYPE}"],5m,95)','','0','','','','','2',NULL,'95 percentile of operation latency distribution in seconds for each verb.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','e846265636ac433ba2bce034aca1e394','0','2','0'),
('60052','15','','10506','[{#OP_TYPE}] Operations, p99','kube.kublet.runtime_ops_duration_seconds_p99["{#OP_TYPE}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kube.kublet.runtime_ops_duration_seconds_bucket[*,"{#OP_TYPE}"],5m,99)','','0','','','','','2',NULL,'99 percentile of operation latency distribution in seconds for each verb.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','68f17a6132dd48deb3825efd2b83b6ce','0','2','0'),
('60107','15','','10509','["{#RESULT}"]: e2e scheduling, p50','kubernetes.scheduler.e2e_scheduling_p50["{#RESULT}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.e2e_scheduling_bucket[*,"{#RESULT}"],5m,50)','','0','','','','','2',NULL,'50 percentile of e2e scheduling latency.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','b8fd5b4454484f4298e2c2b1e5c832c5','0','2','0'),
('60108','15','','10509','["{#RESULT}"]: e2e scheduling, p90','kubernetes.scheduler.e2e_scheduling_p90["{#RESULT}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.e2e_scheduling_bucket[*,"{#RESULT}"],5m,90)','','0','','','','','2',NULL,'90 percentile of e2e scheduling latency.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','01edd56cd1c94d4b80589d91349e4be5','0','2','0'),
('60109','15','','10509','["{#RESULT}"]: e2e scheduling, p95','kubernetes.scheduler.e2e_scheduling_p95["{#RESULT}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.e2e_scheduling_bucket[*,"{#RESULT}"],5m,95)','','0','','','','','2',NULL,'95 percentile of e2e scheduling latency.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','706fc27da4d34a4e9189c566c7aa96ff','0','2','0'),
('60110','15','','10509','["{#RESULT}"]: e2e scheduling, p99','kubernetes.scheduler.e2e_scheduling_p99["{#RESULT}"]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.e2e_scheduling_bucket[*,"{#RESULT}"],5m,99)','','0','','','','','2',NULL,'95 percentile of e2e scheduling latency.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','829627aeab764590b3a17e6b10c56709','0','2','0'),
('60111','15','','10509','Binding duration, p50','kubernetes.scheduler.binding_duration_p50[{#SINGLETON}]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.binding_duration[*],5m,50)','','0','','','','','2',NULL,'50 percentile of binding latency in seconds.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','5f40c030c1964ff7ab7786cee97bee81','0','2','0'),
('60112','15','','10509','Binding duration, p90','kubernetes.scheduler.binding_duration_p90[{#SINGLETON}]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.binding_duration[*],5m,90)','','0','','','','','2',NULL,'90 percentile of binding latency in seconds.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','19ba0e215a9f4e13b3079fcdaf124cc5','0','2','0'),
('60113','15','','10509','Binding duration, p95','kubernetes.scheduler.binding_duration_p95[{#SINGLETON}]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.binding_duration[*],5m,95)','','0','','','','','2',NULL,'99 percentile of binding latency in seconds.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','b24d657a1568437fac77535a80d63bc3','0','2','0'),
('60114','15','','10509','Binding duration, p99','kubernetes.scheduler.binding_duration_p99[{#SINGLETON}]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.binding_duration[*],5m,99)','','0','','','','','2',NULL,'95 percentile of binding latency in seconds.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','258d5d4b6534488a92ba29185e3ca56f','0','2','0'),
('60115','15','','10509','Scheduling algorithm duration, p50','kubernetes.scheduler.scheduling_algorithm_duration_p50[{#SINGLETON}]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.scheduling_algorithm_duration[*],5m,50)','','0','','','','','2',NULL,'50 percentile of scheduling algorithm latency in seconds.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','3df35ee6e86a424f89f51bb74cb40b9d','0','2','0'),
('60116','15','','10509','Scheduling algorithm duration, p90','kubernetes.scheduler.scheduling_algorithm_duration_p90[{#SINGLETON}]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.scheduling_algorithm_duration[*],5m,90)','','0','','','','','2',NULL,'90 percentile of scheduling algorithm latency in seconds.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','2368f2c98f3641bdbd030d94ca53a4dd','0','2','0'),
('60117','15','','10509','Scheduling algorithm duration, p95','kubernetes.scheduler.scheduling_algorithm_duration_p95[{#SINGLETON}]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.scheduling_algorithm_duration[*],5m,95)','','0','','','','','2',NULL,'95 percentile of scheduling algorithm latency in seconds.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','6ca6a2480c4343a8b9a4e6598ec86501','0','2','0'),
('60118','15','','10509','Scheduling algorithm duration, p99','kubernetes.scheduler.scheduling_algorithm_duration_p99[{#SINGLETON}]','1m','31d','365d','0','0','','s','','',NULL,NULL,'bucket_percentile(//kubernetes.scheduler.scheduling_algorithm_duration[*],5m,99)','','0','','','','','2',NULL,'99 percentile of scheduling algorithm latency in seconds.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','1','955f0989372c4f9d82ad364b09f5efea','0','2','0'),
('60238','19','','10593','Project [{#NAME}]: Get issues','mantisbt.get.issues[{#NAME}]','20m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Getting project issues.','0','7d','0','',NULL,'30s','{$MANTIS.URL}/api/rest/issues?project_id={#ID}&page_size=0','','','200','1','0','{$MANTIS.HTTP.PROXY}','Authorization: {$MANTIS.TOKEN}','0','0','0','0','0','0','0','f0064281917741aaa9b8e808509077e1','0','2','0'),
('60272','19','','10602','Nextcloud: User discovery','nextcloud.user.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,'','','1','{$NEXTCLOUD.USER.NAME}','{$NEXTCLOUD.USER.PASSWORD}','','','1',NULL,'User discovery.','0','1d','1','',NULL,'10s','{$NEXTCLOUD.SCHEMA}://{$NEXTCLOUD.ADDRESS}/ocs/v1.php/cloud/users?format=json','','','200','1','0','{$NEXTCLOUD.PROXY}','OCS-APIRequest: true','0','0','0','0','0','0','0','477477630aa14dd8b3940f7b95697893','0','2','0'),
('60273','19','','10602','User "{#NEXTCLOUD.USER}": Get data','nextcloud.user.get_data[{#NEXTCLOUD.USER}]','1m','0','0','0','4','','','','',NULL,NULL,'','','1','{$NEXTCLOUD.USER.NAME}','{$NEXTCLOUD.USER.PASSWORD}','','','2',NULL,'Get common information about user','0','7d','0','',NULL,'10s','{$NEXTCLOUD.SCHEMA}://{$NEXTCLOUD.ADDRESS}/ocs/v1.php/cloud/users/{#NEXTCLOUD.USER}','[{"format":"json"}]','','200,401','1','0','{$NEXTCLOUD.PROXY}','OCS-APIRequest: true','0','0','0','0','0','0','0','78b3e2a8e7844b0ea5929dbecd8a2ed7','0','2','0'),
('60286','0','','10266','CPU utilization','proc.cpu.util[{#NGINX.NAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'The percentage of the CPU utilization by a process {#NGINX.NAME}.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','84c95c1955bf4ccaa12a060a9acdb478','0','2','0'),
('60293','7','','10639','CPU utilization','proc.cpu.util[{#NGINX.NAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'The percentage of the CPU utilization by a process {#NGINX.NAME}.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6045ce9aba4747f2a6a1475fc3f8b428','0','2','0'),
('60449','0','','10651','[{#UUID}]: Decoder utilization','nvml.device.decoder.utilization["{#UUID}"]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current utilization for the Decoder.
For Nvidia Kepler or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cf631ee2b8d9494e81eef3e9e0bddf80','0','2','0'),
('60450','0','','10651','[{#UUID}]: Encoder stats','nvml.device.encoder.stats.get["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current encoder statistics for a given device.
For Nvidia Maxwell or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cc4ff50ff1ed4c6d92ccb24f205b65c5','0','2','0'),
('60451','0','','10651','[{#UUID}]: Encoder utilization','nvml.device.encoder.utilization["{#UUID}"]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current utilization for the Encoder.
For Nvidia Kepler or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6cf65da338f64f6c9087f8699c2d71dc','0','2','0'),
('60452','0','','10651','[{#UUID}]: Energy consumption','nvml.device.energy.consumption["{#UUID}"]','1m','31d','365d','0','0','','J','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the total energy consumption of this GPU in joules since the last driver reload.
For Nvidia Volta or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8f992f3cffcc42d5a0f4cac878781457','0','2','0'),
('60453','0','','10651','[{#UUID}]: Memory ECC errors, get','nvml.device.errors.memory["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the GPU device memory error counters for the device.
For Nvidia Fermi or newer fully supported devices.
Requires NVML_INFOROM_ECC version 2.0 or higher to report aggregate location-based memory error counts. Requires NVML_INFOROM_ECC version 1.0 or higher to report all other memory error counts.
Only applicable to devices with ECC.
Requires ECC Mode to be enabled.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e97eacb1bef64fdaa7b55883fc37a4a9','0','2','0'),
('60454','0','','10651','[{#UUID}]: Register file errors, get','nvml.device.errors.register["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the GPU register file error counters for the device.
For Nvidia Fermi or newer fully supported devices.
Requires NVML_INFOROM_ECC version 2.0 or higher to report aggregate location-based memory error counts. Requires NVML_INFOROM_ECC version 1.0 or higher to report all other memory error counts.
Only applicable to devices with ECC.
Requires ECC Mode to be enabled.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','07ea4aec260f4850b0c2a59610f703de','0','2','0'),
('60455','0','','10651','[{#UUID}]: Fan speed','nvml.device.fan.speed.avg["{#UUID}"]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the intended operating speed of the specified device fan.
Note: The reported speed is the intended fan speed. If the fan is physically blocked and unable to spin, the output will not match the actual fan speed.
For all Nvidia discrete products with dedicated fans.
The fan speed is expressed as a percentage of the product''s maximum noise tolerance fan speed. In certain cases, this value may exceed 100%.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','49283334edaa4aeb9d63d8f2794c23d7','0','2','0'),
('60456','0','','10651','[{#UUID}]: Graphics frequency','nvml.device.graphics.frequency["{#UUID}"]','1m','31d','365d','0','3','','Hz','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current graphics clock speed for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','77bce39e010f4d4ab5fc347aebd7e61b','0','2','0'),
('60457','0','','10651','[{#UUID}]: BAR1 memory, get','nvml.device.memory.bar1.get["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Gets Total, Available, and Used size of BAR1 memory.
BAR1 is used to map the FB (device memory) so that it can be directly accessed by the CPU or 3rd party devices (peer-to-peer on the PCIE bus).
For Nvidia Kepler or newer fully supported devices','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','da9f4e0ce0af45af9cb414b34932df70','0','2','0'),
('60458','0','','10651','[{#UUID}]: FB memory, get','nvml.device.memory.fb.get["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the amount of used, free, reserved, and total memory available on the device.
For all Nvidia products.
Enabling ECC reduces the amount of total available memory due to the extra required parity bits. Under WDDM, most of the device memory is allocated and managed on startup by Windows.
Under Linux and Windows TCC, the reported amount of used memory is equal to the sum of memory allocated by all active channels on the device.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cad7ac51204847e2a00a8a594a7ffecc','0','2','0'),
('60459','0','','10651','[{#UUID}]: Memory frequency','nvml.device.memory.frequency["{#UUID}"]','1m','31d','365d','0','3','','Hz','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current memory clock speed for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','78918ce1cbae45bdb3a0773f3bf9bd14','0','2','0'),
('60460','0','','10651','[{#UUID}]: PCIe utilization, get','nvml.device.pci.utilization["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves PCIe utilization information.
For Nvidia Maxwell or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','35d9d7075294487f9bd2f47f4be66dea','0','2','0'),
('60461','0','','10651','[{#UUID}]: Performance state','nvml.device.performance.state["{#UUID}"]','1m','31d','365d','0','3','','','','',NULL,'1270','','','0','','','','','2',NULL,'Retrieves the current performance state for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5a97162894064078ad8913d647dbf76e','0','2','0'),
('60462','0','','10651','[{#UUID}]: Power limit','nvml.device.power.limit["{#UUID}"]','1h','31d','365d','0','0','','watts','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the power management limit associated with this device.
For Nvidia Fermi or newer fully supported devices.
The power limit defines the upper boundary for the card''s power draw. If the card''s total power draw reaches this limit, the power management algorithm kicks in.
This reading is only available if power management mode is supported.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6b99a9e1c5b841059f0e62b04001c82d','0','2','0'),
('60463','0','','10651','[{#UUID}]: Power usage','nvml.device.power.usage["{#UUID}"]','1m','31d','365d','0','0','','watts','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves power usage for this GPU (in watts) and its associated circuitry (e.g. memory).
For Nvidia Fermi or newer fully supported devices.
On Fermi and Kepler GPUs, the reading is accurate to within +/- 5% of current power draw. On Ampere (except GA100) or newer GPUs, the API returns power averaged over a 1 second interval. On GA100 and older architectures, instantaneous power is returned.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bb1c7aee478f4ba4b108491532ccd737','0','2','0'),
('60464','0','','10651','[{#UUID}]: Serial number','nvml.device.serial["{#UUID}"]','1h','31d','0','0','1','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the globally unique board serial number associated with this device''s board.
For all products with an inforom.
This number matches the serial number tag that is physically attached to the board.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','94c121b6588d424f9573f6e1352b5cd4','0','2','0'),
('60465','0','','10651','[{#UUID}]: SM frequency','nvml.device.sm.frequency["{#UUID}"]','1m','31d','365d','0','3','','Hz','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current SM clock speed for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6e149695990a46f294361c047f288b80','0','2','0'),
('60466','0','','10651','[{#UUID}]: Temperature','nvml.device.temperature["{#UUID}"]','1m','31d','365d','0','3','','C','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current temperature readings for the device, in degrees C.
For Nvidia all products.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f47e1eed64354c7cb010dea8570c067b','0','2','0'),
('60467','0','','10651','[{#UUID}]: Device utilization, get','nvml.device.utilization["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current utilization rates for the device''s major subsystems.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9a3e4972de4d4149bf14512be108179f','0','2','0'),
('60468','0','','10651','[{#UUID}]: Video frequency','nvml.device.video.frequency["{#UUID}"]','1m','31d','365d','0','3','','Hz','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current video encoder/decoder clock speed for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','91fc19e1784846b7afb982f7ae87439e','0','2','0'),
('60488','7','','10650','[{#UUID}]: Decoder utilization','nvml.device.decoder.utilization["{#UUID}"]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current utilization for the Decoder.
For Nvidia Kepler or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0355d8799fb44e6b8ad144b389641d01','0','2','0'),
('60489','7','','10650','[{#UUID}]: Encoder stats','nvml.device.encoder.stats.get["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current encoder statistics for a given device.
For Nvidia Maxwell or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','52c3a8fc63fc47e88c976d8d8436a3a5','0','2','0'),
('60490','7','','10650','[{#UUID}]: Encoder utilization','nvml.device.encoder.utilization["{#UUID}"]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current utilization for the Encoder.
For Nvidia Kepler or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','ae76d66eed7b42fb95b13cfcc1e633d1','0','2','0'),
('60491','7','','10650','[{#UUID}]: Energy consumption','nvml.device.energy.consumption["{#UUID}"]','1m','31d','365d','0','0','','J','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the total energy consumption of this GPU in joules since the last driver reload.
For Nvidia Volta or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','79928bb18ccc4a4e9d1ed46aa20d5434','0','2','0'),
('60492','7','','10650','[{#UUID}]: Memory ECC errors, get','nvml.device.errors.memory["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the GPU device memory error counters for the device.
For Nvidia Fermi or newer fully supported devices.
Requires NVML_INFOROM_ECC version 2.0 or higher to report aggregate location-based memory error counts. Requires NVML_INFOROM_ECC version 1.0 or higher to report all other memory error counts.
Only applicable to devices with ECC.
Requires ECC Mode to be enabled.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e79e45b1625742fea796f14d26c52e6f','0','2','0'),
('60493','7','','10650','[{#UUID}]: Register file errors, get','nvml.device.errors.register["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the GPU register file error counters for the device.
For Nvidia Fermi or newer fully supported devices.
Requires NVML_INFOROM_ECC version 2.0 or higher to report aggregate location-based memory error counts. Requires NVML_INFOROM_ECC version 1.0 or higher to report all other memory error counts.
Only applicable to devices with ECC.
Requires ECC Mode to be enabled.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3b19ff5ab2ae48049aed8403ab18ebf3','0','2','0'),
('60494','7','','10650','[{#UUID}]: Fan speed','nvml.device.fan.speed.avg["{#UUID}"]','1m','31d','365d','0','3','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the intended operating speed of the specified device fan.
Note: The reported speed is the intended fan speed. If the fan is physically blocked and unable to spin, the output will not match the actual fan speed.
For all Nvidia discrete products with dedicated fans.
The fan speed is expressed as a percentage of the product''s maximum noise tolerance fan speed. In certain cases, this value may exceed 100%.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','ece478c8ff5f40dcb3bcb7a4b6d65124','0','2','0'),
('60495','7','','10650','[{#UUID}]: Graphics frequency','nvml.device.graphics.frequency["{#UUID}"]','1m','31d','365d','0','3','','Hz','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current graphics clock speed for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c9609ab9041a4f7584bed04b436315c0','0','2','0'),
('60496','7','','10650','[{#UUID}]: BAR1 memory, get','nvml.device.memory.bar1.get["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Gets Total, Available, and Used size of BAR1 memory.
BAR1 is used to map the FB (device memory) so that it can be directly accessed by the CPU or 3rd party devices (peer-to-peer on the PCIE bus).
For Nvidia Kepler or newer fully supported devices','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8836f8d00eb44a5180c8ced82494c1ba','0','2','0'),
('60497','7','','10650','[{#UUID}]: FB memory, get','nvml.device.memory.fb.get["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the amount of used, free, reserved, and total memory available on the device.
For all Nvidia products.
Enabling ECC reduces the amount of total available memory due to the extra required parity bits. Under WDDM, most of the device memory is allocated and managed on startup by Windows.
Under Linux and Windows TCC, the reported amount of used memory is equal to the sum of memory allocated by all active channels on the device.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1f48f586a4ec49ffbe8080bac5df66f8','0','2','0'),
('60498','7','','10650','[{#UUID}]: Memory frequency','nvml.device.memory.frequency["{#UUID}"]','1m','31d','365d','0','3','','Hz','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current memory clock speed for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b3ec856b4b7f42d9ba76c2ff47752bd7','0','2','0'),
('60499','7','','10650','[{#UUID}]: PCIe utilization, get','nvml.device.pci.utilization["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves PCIe utilization information.
For Nvidia Maxwell or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3270b9cf246b4b0abf60bb73f2c64c39','0','2','0'),
('60500','7','','10650','[{#UUID}]: Performance state','nvml.device.performance.state["{#UUID}"]','1m','31d','365d','0','3','','','','',NULL,'1269','','','0','','','','','2',NULL,'Retrieves the current performance state for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1ac19949ec11456896562f63525dcb8c','0','2','0'),
('60501','7','','10650','[{#UUID}]: Power limit','nvml.device.power.limit["{#UUID}"]','1h','31d','365d','0','0','','watts','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the power management limit associated with this device.
For Nvidia Fermi or newer fully supported devices.
The power limit defines the upper boundary for the card''s power draw. If the card''s total power draw reaches this limit, the power management algorithm kicks in.
This reading is only available if power management mode is supported.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7f4e87102f8042a8802088f842356522','0','2','0'),
('60502','7','','10650','[{#UUID}]: Power usage','nvml.device.power.usage["{#UUID}"]','1m','31d','365d','0','0','','watts','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves power usage for this GPU (in watts) and its associated circuitry (e.g. memory).
For Nvidia Fermi or newer fully supported devices.
On Fermi and Kepler GPUs, the reading is accurate to within +/- 5% of current power draw. On Ampere (except GA100) or newer GPUs, the API returns power averaged over a 1 second interval. On GA100 and older architectures, instantaneous power is returned.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','601901906c634f64a94831a9b44ad59e','0','2','0'),
('60503','7','','10650','[{#UUID}]: Serial number','nvml.device.serial["{#UUID}"]','1h','31d','0','0','1','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the globally unique board serial number associated with this device''s board.
For all products with an inforom.
This number matches the serial number tag that is physically attached to the board.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','707c859524164a348d142f193fb464d6','0','2','0'),
('60504','7','','10650','[{#UUID}]: SM frequency','nvml.device.sm.frequency["{#UUID}"]','1m','31d','365d','0','3','','Hz','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current SM clock speed for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c64fafdc18654ad8adb984673142b614','0','2','0'),
('60505','7','','10650','[{#UUID}]: Temperature','nvml.device.temperature["{#UUID}"]','1m','31d','365d','0','3','','C','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current temperature readings for the device, in degrees C.
For Nvidia all products.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','513cab732c7648ccb71a7401ebcaebc5','0','2','0'),
('60506','7','','10650','[{#UUID}]: Device utilization, get','nvml.device.utilization["{#UUID}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current utilization rates for the device''s major subsystems.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a573c6926e2b438ba124c824268bacc4','0','2','0'),
('60507','7','','10650','[{#UUID}]: Video frequency','nvml.device.video.frequency["{#UUID}"]','1m','31d','365d','0','3','','Hz','','',NULL,NULL,'','','0','','','','','2',NULL,'Retrieves the current video encoder/decoder clock speed for the device.
For Nvidia Fermi or newer fully supported devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2cdebc61528440e58cd0df9a43851988','0','2','0'),
('60593','0','','10330','CPU utilization','proc.cpu.util[{#PHP_FPM.NAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'The percentage of the CPU utilization by a process `{#PHP_FPM.NAME}`.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a709eaae52ad4128a129c618db6525d2','0','2','0'),
('60600','7','','10645','CPU utilization','proc.cpu.util[{#PHP_FPM.NAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'The percentage of the CPU utilization by a process `{#PHP_FPM.NAME}`.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','65c8bd5634d84552b401c15237b74de8','0','2','0'),
('60621','19','','10517','LXC [{#NODE.NAME}/{#LXC.NAME}]: Get data','proxmox.lxc.get.data[{#LXC.ID}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Get LXC status data.','0','7d','0','',NULL,'','https://{$PVE.URL.HOST}:{$PVE.URL.PORT}/api2/json/nodes/{#NODE.NAME}/{#LXC.ID}/status/current','','','200','1','0','','Authorization: PVEAPIToken={$PVE.TOKEN.ID}={$PVE.TOKEN.SECRET}','0','0','0','0','0','0','0','58efec1a4bb94bfab59d5985d036811e','0','2','0'),
('60622','19','','10517','Node [{#NODE.NAME}]: RRD statistics','proxmox.node.rrd[{#NODE.NAME}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Read node RRD statistics.','0','7d','0','',NULL,'','https://{$PVE.URL.HOST}:{$PVE.URL.PORT}/api2/json/nodes/{#NODE.NAME}/rrddata','[{"timeframe":"hour"},{"cf":"AVERAGE"}]','','200','1','0','','Authorization: PVEAPIToken={$PVE.TOKEN.ID}={$PVE.TOKEN.SECRET}','0','0','0','0','0','0','0','fa2a60a98fd4445eadff4398ae6872bd','0','2','0'),
('60623','19','','10517','Node [{#NODE.NAME}]: Status','proxmox.node.status[{#NODE.NAME}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Read node status.','0','7d','0','',NULL,'','https://{$PVE.URL.HOST}:{$PVE.URL.PORT}/api2/json/nodes/{#NODE.NAME}/status','','','200','1','0','','Authorization: PVEAPIToken={$PVE.TOKEN.ID}={$PVE.TOKEN.SECRET}','0','0','0','0','0','0','0','c1ea4d4f83114c9b96fe81069602f060','0','2','0'),
('60624','19','','10517','Node [{#NODE.NAME}]: Time','proxmox.node.time[{#NODE.NAME}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Read server time and time zone settings.','0','7d','0','',NULL,'','https://{$PVE.URL.HOST}:{$PVE.URL.PORT}/api2/json/nodes/{#NODE.NAME}/time','','','200','1','0','','Authorization: PVEAPIToken={$PVE.TOKEN.ID}={$PVE.TOKEN.SECRET}','0','0','0','0','0','0','0','c0c03653a0af426b8f61c77cabab38a4','0','2','0'),
('60625','19','','10517','VM [{#NODE.NAME}/{#QEMU.NAME}]: Get data','proxmox.qemu.get.data[{#QEMU.ID}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Get VM status data.','0','7d','0','',NULL,'','https://{$PVE.URL.HOST}:{$PVE.URL.PORT}/api2/json/nodes/{#NODE.NAME}/{#QEMU.ID}/status/current','','','200','1','0','','Authorization: PVEAPIToken={$PVE.TOKEN.ID}={$PVE.TOKEN.SECRET}','0','0','0','0','0','0','0','a3562f2f48834a88842da612fb6f464c','0','2','0'),
('60675','0','','10300','Healthcheck: alarms in effect in the cluster{#SINGLETON}','web.page.get["{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.CLUSTER_HOST}:{$RABBITMQ.API.PORT}/api/health/checks/alarms{#SINGLETON}"]','1m','31d','365d','0','3','','','','',NULL,'223','','','0','','','','','2',NULL,'It responds with a status code `200 OK` if there are no alarms in effect in the cluster.
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4c93b04164d24eb8b9dbdab652afc7bc','0','2','0'),
('60676','0','','10301','Healthcheck{#SINGLETON}','web.page.get["{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/healthchecks/node{#SINGLETON}"]','1m','31d','365d','0','3','','','','',NULL,'134','','','0','','','','','2',NULL,'It checks whether the RabbitMQ application is running; and whether the channels and queues can be listed successfully; and that no alarms are in effect.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8b959a9d03dc4ae8bed7292973f4fcc4','0','2','0'),
('60677','0','','10301','Healthcheck: expiration date on the certificates{#SINGLETON}','web.page.get["{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/certificate-expiration/1/months{#SINGLETON}"]','1m','31d','365d','0','3','','','','',NULL,'134','','','0','','','','','2',NULL,'It checks the expiration date on the certificates for every listener configured to use the Transport Layer Security (TLS).
It responds with a status code `200 OK` if all the certificates are valid (have not expired).
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0f1cd729d8f4447db25e0af19eae595d','0','2','0'),
('60678','0','','10301','Healthcheck: local alarms in effect on this node{#SINGLETON}','web.page.get["{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/local-alarms{#SINGLETON}"]','1m','31d','365d','0','3','','','','',NULL,'134','','','0','','','','','2',NULL,'It responds with a status code `200 OK` if there are no local alarms in effect on the target node.
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','701449b128cb42cdb971fc608ba9f29b','0','2','0'),
('60679','0','','10301','Healthcheck: classic mirrored queues without synchronized mirrors online{#SINGLETON}','web.page.get["{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/node-is-mirror-sync-critical{#SINGLETON}"]','1m','31d','365d','0','3','','','','',NULL,'134','','','0','','','','','2',NULL,'It checks if there are classic mirrored queues without synchronized mirrors online (queues that would potentially lose data if the target node is shut down).
It responds with a status code `200 OK` if there are no such classic mirrored queues.
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7a07966d8dde4f2caa9ff95693b86974','0','2','0'),
('60680','0','','10301','Healthcheck: queues with minimum online quorum{#SINGLETON}','web.page.get["{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/node-is-quorum-critical{#SINGLETON}"]','1m','31d','365d','0','3','','','','',NULL,'134','','','0','','','','','2',NULL,'It checks if there are quorum queues with minimum online quorum (queues that would lose their quorum and availability if the target node is shut down).
It responds with a status code `200 OK` if there are no such quorum queues.
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f6ec1bb1cc4741be852136fac2c63333','0','2','0'),
('60681','0','','10301','Healthcheck: virtual hosts on this node{#SINGLETON}','web.page.get["{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.USER}:{$RABBITMQ.API.PASSWORD}@{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/virtual-hosts{#SINGLETON}"]','1m','31d','365d','0','3','','','','',NULL,'134','','','0','','','','','2',NULL,'It responds with It responds with a status code `200 OK` if all virtual hosts are running on the target node.
Otherwise it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0d1ad3daf2bb46dba2c9913c1684a0d4','0','2','0'),
('60682','0','','10301','CPU utilization','proc.cpu.util[{#RABBITMQ.NAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','','','','','2',NULL,'The percentage of the CPU utilization by a process {#RABBITMQ.NAME}.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0b195bf594c44b1f869b4a7671f61453','0','2','0'),
('60729','19','','10302','Healthcheck: alarms in effect in the cluster{#SINGLETON}','rabbitmq.healthcheck.alarms[{#SINGLETON}]','1m','31d','365d','0','3','','','','',NULL,'224','','','1','{$RABBITMQ.API.USER}','{$RABBITMQ.API.PASSWORD}','','','2',NULL,'Responds a 200 OK if there are no alarms in effect in the cluster, otherwise responds with a 503 Service Unavailable.','0','7d','0','',NULL,'','{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.CLUSTER_HOST}:{$RABBITMQ.API.PORT}/api/health/checks/alarms','','','200,503,404','1','0','','','1','0','0','0','0','0','0','90db70de99454f7b924d84174a5951fb','0','2','0'),
('60730','19','','10303','Healthcheck{#SINGLETON}','rabbitmq.healthcheck[{#SINGLETON}]','1m','31d','365d','0','3','','','','',NULL,'135','','','1','{$RABBITMQ.API.USER}','{$RABBITMQ.API.PASSWORD}','','','2',NULL,'It checks whether the RabbitMQ application is running; and whether the channels and queues can be listed successfully; and that no alarms are in effect.','0','7d','0','',NULL,'','{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/healthchecks/node','','','200','1','0','','','0','0','0','0','0','0','0','22f9a51fd0ea41148846ecde7dbf4d99','0','2','0'),
('60731','19','','10303','Healthcheck: expiration date on the certificates{#SINGLETON}','rabbitmq.healthcheck.certificate_expiration[{#SINGLETON}]','1m','31d','365d','0','3','','','','',NULL,'135','','','1','{$RABBITMQ.API.USER}','{$RABBITMQ.API.PASSWORD}','','','2',NULL,'It checks the expiration date on the certificates for every listener configured to use the Transport Layer Security (TLS).
It responds with a status code `200 OK` if all the certificates are valid (have not expired).
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/certificate-expiration/1/months','','','200,503,404','1','0','','','1','0','0','0','0','0','0','d18cd1fd8cd749e4a00b8186fd93345f','0','2','0'),
('60732','19','','10303','Healthcheck: local alarms in effect on this node{#SINGLETON}','rabbitmq.healthcheck.local_alarms[{#SINGLETON}]','1m','31d','365d','0','3','','','','',NULL,'135','','','1','{$RABBITMQ.API.USER}','{$RABBITMQ.API.PASSWORD}','','','2',NULL,'It responds with a status code `200 OK` if there are no alarms in effect in the cluster.
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/local-alarms','','','200,503,404','1','0','','','1','0','0','0','0','0','0','e1359646453e43cbaf0b4e1b89bdcdeb','0','2','0'),
('60733','19','','10303','Healthcheck: classic mirrored queues without synchronized mirrors online{#SINGLETON}','rabbitmq.healthcheck.mirror_sync[{#SINGLETON}]','1m','31d','365d','0','3','','','','',NULL,'135','','','1','{$RABBITMQ.API.USER}','{$RABBITMQ.API.PASSWORD}','','','2',NULL,'It checks if there are classic mirrored queues without synchronized mirrors online (queues that would potentially lose data if the target node is shut down).
It responds with a status code `200 OK` if there are no such classic mirrored queues.
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/node-is-mirror-sync-critical','','','200,503,404','1','0','','','1','0','0','0','0','0','0','9867c266760a48d981caa1f34f2c3238','0','2','0'),
('60734','19','','10303','Healthcheck: queues with minimum online quorum{#SINGLETON}','rabbitmq.healthcheck.quorum[{#SINGLETON}]','1m','31d','365d','0','3','','','','',NULL,'135','','','1','{$RABBITMQ.API.USER}','{$RABBITMQ.API.PASSWORD}','','','2',NULL,'It checks if there are quorum queues with minimum online quorum (queues that would lose their quorum and availability if the target node is shut down).
It responds with a status code `200 OK` if there are no such quorum queues.
Otherwise, it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/node-is-quorum-critical','','','200,503,404','1','0','','','1','0','0','0','0','0','0','972b6409c80d4ac796e5472b72ce82ae','0','2','0'),
('60735','19','','10303','Healthcheck: virtual hosts on this node{#SINGLETON}','rabbitmq.healthcheck.virtual_hosts[{#SINGLETON}]','1m','31d','365d','0','3','','','','',NULL,'135','','','1','{$RABBITMQ.API.USER}','{$RABBITMQ.API.PASSWORD}','','','2',NULL,'It responds with It responds with a status code `200 OK` if all virtual hosts are running on the target node.
Otherwise it responds with a status code `503 Service Unavailable`.','0','7d','0','',NULL,'','{$RABBITMQ.API.SCHEME}://{$RABBITMQ.API.HOST}:{$RABBITMQ.API.PORT}/api/health/checks/virtual-hosts','','','200,503,404','1','0','','','1','0','0','0','0','0','0','d701b9acae86464282b308df720a1de2','0','2','0'),
('60772','21','','10382','Directory discovery','sharepoint.directory.discovery','{$SHAREPOINT.LLD_INTERVAL}','31d','365d','0','4','','','','',NULL,NULL,'try {

	var params = JSON.parse(value);
	var result = [];

	var req = new HttpRequest();

	var queue = [];

	var node;
	var current_folder;
	var child_folders;
	var child_files;

	req.addHeader(''Accept: application/json; odata=verbose'');
	req.setHttpAuth(HTTPAUTH_NTLM, params.user, params.password);
	queue.push({
		patch: params.root,
		json_query: ''$["data"]''
	});

	while (queue.length) {
		node = queue.pop();

		current_folder = JSON.parse(req.get(encodeURI(params.url + "/_api/web/GetFolderByServerRelativeUrl(''" + node.patch.replace("''", "''''") + "'')")));

		result.status = req.getStatus();
		if (result.status != 200) {
			throw result.status;
		}

		result.push({
			''{#SHAREPOINT.LLD.NAME}'': current_folder.d.Name,
			''{#SHAREPOINT.LLD.TYPE}'': ''FOLDER'',
			''{#SHAREPOINT.LLD.FULL_PATH}'': node.patch,
			''{#SHAREPOINT.LLD.JSON_PATH}'': node.json_query + ''["'' + current_folder.d.Name + ''"]'',
			''{#SHAREPOINT.LLD.SIZE}'': 0,
			''{#SHAREPOINT.LLD.CREATED}'': Math.round(new Date(current_folder.d.TimeCreated).getTime() / 1000),
			''{#SHAREPOINT.LLD.MODIFIED}'': Math.round(new Date(current_folder.d.TimeLastModified).getTime() / 1000)
		});

		child_folders = JSON.parse(req.get(encodeURI(params.url + "/_api/web/GetFolderByServerRelativeUrl(''" + node.patch.replace("''", "''''") + "'')/Folders")));

		child_folders.d.results.forEach(function (dir) {
			queue.push({
				patch: dir.ServerRelativeUrl,
				json_query: node.json_query + ''["'' + current_folder.d.Name + ''"]["data"]''
			});
		});

		child_files = JSON.parse(req.get(encodeURI(params.url + "/_api/web/GetFolderByServerRelativeUrl(''" + node.patch.replace("''", "''''") + "'')/Files")));
		child_files.d.results.forEach(function (file) {
			result.push({
				''{#SHAREPOINT.LLD.NAME}'': file.Name,
				''{#SHAREPOINT.LLD.TYPE}'': ''FILE'',
				''{#SHAREPOINT.LLD.FULL_PATH}'': file.ServerRelativeUrl,
				''{#SHAREPOINT.LLD.JSON_PATH}'': node.json_query + ''["'' + current_folder.d.Name + ''"]'' + ''["data"]["'' + file.Name + ''"]'',
				''{#SHAREPOINT.LLD.SIZE}'': file.Length,
				''{#SHAREPOINT.LLD.CREATED}'': Math.round(new Date(file.TimeCreated).getTime() / 1000),
				''{#SHAREPOINT.LLD.MODIFIED}'': Math.round(new Date(file.TimeLastModified).getTime() / 1000)
			});
		});
	}

} catch (error) {
	Zabbix.log(3, "Sharepoint fs discovery failed: " + params.url + " Error: " + error);
	return "Sharepoint fs discovery failed: " + params.url + " Error: " + error;
}

return JSON.stringify(result);','','0','','','','','1',NULL,'','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0fe7e8e5480a42b7903cb7ac9bf931cc','0','2','0'),
('60776','0','','10416','Service units discovery','systemd.unit.discovery[service]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discover systemd service units and their details.','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0dfbc5994c1e44a6a1a2aa8ecc2f0347','0','1','0'),
('60777','0','','10416','Socket units discovery','systemd.unit.discovery[socket]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Discover systemd socket units and their details.','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5c337762ae7b43a98fcb9dc3102a8467','0','1','0'),
('60778','0','','10416','{#UNIT.NAME}: Get unit info','systemd.unit.get["{#UNIT.NAME}"]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Returns all properties of a systemd service unit.
 Unit description: {#UNIT.DESCRIPTION}.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bdb94d1182114985a8734de7d5d92380','0','2','0'),
('60779','0','','10416','{#UNIT.NAME}: Get unit info','systemd.unit.get["{#UNIT.NAME}",Socket]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Returns all properties of a systemd socket unit.
 Unit description: {#UNIT.DESCRIPTION}.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','83ffad5a484d48e388ac658511d4b803','0','2','0'),
('60786','16','','10260','Protocol handlers discovery','jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','1',NULL,'Discovery for ProtocolHandler','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a478be537e5f48fe95310997d0df0eda','0','2','0'),
('60787','16','','10260','Global request processors discovery','jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','1',NULL,'Discovery for GlobalRequestProcessor','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','77175f79fe844bb8bca66de437a3ba32','0','2','0'),
('60788','16','','10260','Contexts discovery','jmx.discovery[beans,"Catalina:type=Manager,host=*,context=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','1',NULL,'Discovery for contexts','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cf1badf064714d9b9e3b7110696432f9','0','2','0'),
('60789','16','','10260','Thread pools discovery','jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','1',NULL,'Discovery for ThreadPool','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','05752834671f416fb2fdac1006308c3e','0','2','0'),
('60790','16','','10260','{#JMXVALUE}: Gzip compression status','jmx[{#JMXOBJ},compression]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','830f58f8ad6640d989a70c01f7aa2ad8','0','2','0'),
('60791','16','','10260','{#JMXNAME}: Bytes received per second','jmx[{#JMXOBJ},bytesReceived]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Bytes received rate by processor {#JMXNAME}','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d7cb07f3f5e04792850332c416284dd9','0','2','0'),
('60792','16','','10260','{#JMXNAME}: Bytes sent per second','jmx[{#JMXOBJ},bytesSent]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Bytes sent rate by processor {#JMXNAME}','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','abad7332ed6b417c92f6038ce12ae000','0','2','0'),
('60793','16','','10260','{#JMXNAME}: Errors per second','jmx[{#JMXOBJ},errorCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Error rate of request processor {#JMXNAME}','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1596a335401d47d6b2bde7a5b0de7b07','0','2','0'),
('60794','16','','10260','{#JMXNAME}: Requests processing time','jmx[{#JMXOBJ},processingTime]','1m','31d','365d','0','3','','s','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'The total time to process all incoming requests of request processor
{#JMXNAME}','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','985d3eeacd9d404385bfcef693add39a','0','2','0'),
('60795','16','','10260','{#JMXNAME}: Requests per second','jmx[{#JMXOBJ},requestCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Rate of requests served by request processor {#JMXNAME}','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8e0307b5063549dab118e0e374a62aad','0','2','0'),
('60796','16','','10260','{#JMXHOST}{#JMXCONTEXT}: Sessions active','jmx[{#JMXOBJ},activeSessions]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Active sessions of the application.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c20bb67db247471ba686d2ea371b7c73','0','2','0'),
('60797','16','','10260','{#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum','jmx[{#JMXOBJ},maxActiveSessions]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'The maximum number of active Sessions allowed, or -1 for no limit.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bc3c2a3cff614f3eaf001463df1b2364','0','2','0'),
('60798','16','','10260','{#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far','jmx[{#JMXOBJ},maxActive]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Maximum number of active sessions so far.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fd8678e68cf440939af2dd8f3568a42f','0','2','0'),
('60799','16','','10260','{#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second','jmx[{#JMXOBJ},rejectedSessions]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Rate of sessions we rejected due to maxActive being reached.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','34702e2d6b2142ec9aa43bea1059a98a','0','2','0'),
('60800','16','','10260','{#JMXHOST}{#JMXCONTEXT}: Sessions created per second','jmx[{#JMXOBJ},sessionCounter]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Rate of sessions created by this application per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','eb28f9bd99d440f4a50d1c24ae758029','0','2','0'),
('60801','16','','10260','{#JMXNAME}: Threads count','jmx[{#JMXOBJ},currentThreadCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Amount of threads the thread pool has right now, both busy and free.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7d7418c72ced48eca2a92e30021b611b','0','2','0'),
('60802','16','','10260','{#JMXNAME}: Threads busy','jmx[{#JMXOBJ},currentThreadsBusy]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Number of the requests that are being currently handled.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','35b1e99fbc44448083b5aad0ce1239a1','0','2','0'),
('60803','16','','10260','{#JMXNAME}: Threads limit','jmx[{#JMXOBJ},maxThreads]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$TOMCAT.USER}','{$TOMCAT.PASSWORD}','','','2',NULL,'Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','32e316ce567c4f94aecb89d9763e4d27','0','2','0'),
('60805','15','','10447','Repo [{#SLUG}]: Builds passed, %','travis.repo.builds.passed.pct[{#SLUG}]','1m','31d','365d','0','3','','%','','',NULL,NULL,'last(//travis.repo.builds.passed[{#SLUG}])/last(//travis.repo.builds.total[{#SLUG}])*100','','0','','','','','2',NULL,'Percent of passed builds in {#SLUG} repo.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0d2f2c7b23284836ad52b4ddc98dcfc8','0','2','0'),
('60806','19','','10447','Repo [{#SLUG}]: Get builds','travis.repo.get_builds[{#SLUG}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Getting builds of {#SLUG} using Travis API.','0','7d','0','',NULL,'','https://{$TRAVIS.API.URL}/repo/{#ID}/builds','[{"limit":"50"}]','','200','1','0','','Travis-API-Version: 3
Authorization: token {$TRAVIS.API.TOKEN}','0','0','0','0','0','0','0','ed33292bc0924b9c85cb54443d5aa999','0','2','0'),
('60807','19','','10447','Repo [{#SLUG}]: Get caches','travis.repo.get_caches[{#SLUG}]','1m','0','0','0','4','','','','',NULL,NULL,'','','0','','','','','2',NULL,'Getting caches of {#SLUG} using Travis API.','0','7d','0','',NULL,'','https://{$TRAVIS.API.URL}/repo/{#ID}/caches','[{"limit":"50"}]','','200','1','0','','Travis-API-Version: 3
Authorization: token {$TRAVIS.API.TOKEN}','0','0','0','0','0','0','0','2e0c047997624373a50001b8399b3d7c','0','2','0'),
('60842','15','','10518','Dataset [{#DATASET_NAME}]: Usage in %','truenas.dataset.pused[{#DATASET_NAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'last(//truenas.dataset.used[{#DATASET_NAME}]) * 100 / last(//truenas.dataset.size.total[{#DATASET_NAME}])','','0','','','','','2',NULL,'The used size of the dataset in %.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fd6b3a3ebfb041b3a9026fb1b4370ec7','0','2','0'),
('60847','15','','10518','Pool [{#POOLNAME}]: Usage in %','truenas.zpool.pused[{#POOLNAME}]','1m','31d','365d','0','0','','%','','',NULL,NULL,'last(//truenas.zpool.used[{#POOLNAME}]) * 100 / last(//truenas.zpool.size.total[{#POOLNAME}])','','0','','','','','2',NULL,'The used size of the storage pool in %.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5f972063f958463ab132b8d478092bd8','0','2','0'),
('60911','3','','10173','VMware cluster discovery','vmware.cluster.discovery[{$VMWARE.URL}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of clusters.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','16ffc933cce74cf28a6edf306aa99782','0','2','0'),
('60912','3','','10173','VMware datastore discovery','vmware.datastore.discovery[{$VMWARE.URL}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of VMware datastores.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8fb6a45cbe074b0cb6df53758e2c6623','0','2','0'),
('60913','3','','10173','VMware hypervisor discovery','vmware.hv.discovery[{$VMWARE.URL}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of hypervisors.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a5bc075e89f248e7b411d8f960897a08','0','2','0'),
('60914','3','','10173','VMware VM discovery','vmware.vm.discovery[{$VMWARE.URL}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of guest virtual machines.','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9fd559f4e88c4677a1b874634dd686f5','0','2','0'),
('60923','3','','10173','Status of [{#CLUSTER.NAME}] cluster','vmware.cluster.status[{$VMWARE.URL},{#CLUSTER.NAME}]','1m','31d','365d','0','3','','','','',NULL,'52','','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware cluster status. One of the following:
- Gray: Unknown;
- Green: OK;
- Yellow: It might have a problem;
- Red: It has a problem.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','46111f91dd564a459dbc1d396e2e6c76','0','2','0'),
('60924','3','','10173','Average read latency of the datastore [{#DATASTORE}]','vmware.datastore.read[{$VMWARE.URL},{#DATASTORE.UUID},latency]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Amount of time for a read operation from the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4b61838ba4c34e709b25081ae5b059b5','0','2','0'),
('60925','3','','10173','Average read IOPS of the datastore [{#DATASTORE}]','vmware.datastore.read[{$VMWARE.URL},{#DATASTORE.UUID},rps]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'IOPS for a read operation from the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','54c2631edeb04ef39701ad3bf03be1af','0','2','0'),
('60926','3','','10173','Free space on datastore [{#DATASTORE}] (percentage)','vmware.datastore.size[{$VMWARE.URL},{#DATASTORE.UUID},pfree]','5m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware datastore free space (percentage from the total).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5355c401dc244bc588ccd18767577c93','0','2','0'),
('60927','3','','10173','Total size of datastore [{#DATASTORE}]','vmware.datastore.size[{$VMWARE.URL},{#DATASTORE.UUID}]','5m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware datastore space in bytes.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','84f13c4fde2d4a17baaf0c8c1eb4f2c0','0','2','0'),
('60928','3','','10173','Average write latency of the datastore [{#DATASTORE}]','vmware.datastore.write[{$VMWARE.URL},{#DATASTORE.UUID},latency]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Amount of time for a write operation to the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','540cd0fbc56c4b8ea19f2ff5839ce00d','0','2','0'),
('60929','3','','10173','Average write IOPS of the datastore [{#DATASTORE}]','vmware.datastore.write[{$VMWARE.URL},{#DATASTORE.UUID},rps]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'IOPS for a write operation to the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0026edd933404faf992d08628c9ab364','0','2','0'),
('60960','3','','10366','VMware cluster discovery','vmware.cluster.discovery[{$VMWARE.URL}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of clusters.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','dc0a844c06f7456b8643f9f9672e6b8e','0','2','0'),
('60961','3','','10366','VMware datastore discovery','vmware.datastore.discovery[{$VMWARE.URL}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of VMware datastores.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3cd02594ee644dbe88bdfc4f4257ae05','0','2','0'),
('60962','3','','10366','VMware hypervisor discovery','vmware.hv.discovery[{$VMWARE.URL}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of hypervisors.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','988bb85b325449b29780eeda15c73620','0','2','0'),
('60963','3','','10366','VMware VM FQDN discovery','vmware.vm.discovery[{$VMWARE.URL}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of guest virtual machines.','0','7d','1','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a7e2f6830442433cbe515e8bd72ee0b8','0','2','0'),
('60964','3','','10174','Network device discovery','vmware.vm.net.if.discovery[{$VMWARE.URL},{$VMWARE.VM.UUID}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of all network devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','914634668bab4266bd641ee224dbc1e4','0','2','0'),
('60965','3','','10174','Disk device discovery','vmware.vm.vfs.dev.discovery[{$VMWARE.URL},{$VMWARE.VM.UUID}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of all disk devices.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b1543bdfb5a342d7ad694c87248fe173','0','2','0'),
('60966','3','','10174','Mounted filesystem discovery','vmware.vm.vfs.fs.discovery[{$VMWARE.URL},{$VMWARE.VM.UUID}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of all guest file systems.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','44ff9ef164dc4d20acf06b3368d64456','0','2','0'),
('60967','3','','10175','Datastore discovery','vmware.hv.datastore.discovery[{$VMWARE.URL},{$VMWARE.HV.UUID}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of VMware datastores.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fb7774df87994355baff7402d9fabcc2','0','2','0'),
('60969','3','','10175','Network interface discovery','vmware.hv.net.if.discovery[{$VMWARE.URL},{$VMWARE.HV.UUID}]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','1',NULL,'Discovery of VMware hypervisor network interfaces.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cabe1fbdd4e04ef396afaa5dfd1a3423','0','2','0'),
('60972','3','','10366','Status of [{#CLUSTER.NAME}] cluster','vmware.cluster.status[{$VMWARE.URL},{#CLUSTER.NAME}]','1m','31d','365d','0','3','','','','',NULL,'54','','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware cluster status. One of the following:
- Gray: Unknown;
- Green: OK;
- Yellow: It might have a problem;
- Red: It has a problem.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','41fbb29592f9495e92d88240ce2ba7a5','0','2','0'),
('60973','3','','10366','Average read latency of the datastore [{#DATASTORE}]','vmware.datastore.read[{$VMWARE.URL},{#DATASTORE.UUID},latency]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Amount of time for a read operation from the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0ed09f26cbad4d96bea297da4215d73b','0','2','0'),
('60974','3','','10366','Average read IOPS of the datastore [{#DATASTORE}]','vmware.datastore.read[{$VMWARE.URL},{#DATASTORE.UUID},rps]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'IOPS for a read operation from the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c2687322c7914ec3b5519b73f1723aeb','0','2','0'),
('60975','3','','10366','Free space on datastore [{#DATASTORE}] (percentage)','vmware.datastore.size[{$VMWARE.URL},{#DATASTORE.UUID},pfree]','5m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware datastore free space (percentage from the total).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a2b1785fc773404e9ce69bcd868c5b88','0','2','0'),
('60976','3','','10366','Total size of datastore [{#DATASTORE}]','vmware.datastore.size[{$VMWARE.URL},{#DATASTORE.UUID}]','5m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware datastore space in bytes.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','78fb4b4b0eec44a99207f8354773269d','0','2','0'),
('60977','3','','10366','Average write latency of the datastore [{#DATASTORE}]','vmware.datastore.write[{$VMWARE.URL},{#DATASTORE.UUID},latency]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Amount of time for a write operation to the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d9570c0822cc4996a7dda1ddb9426404','0','2','0'),
('60978','3','','10366','Average write IOPS of the datastore [{#DATASTORE}]','vmware.datastore.write[{$VMWARE.URL},{#DATASTORE.UUID},rps]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'IOPS for a write operation to the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a72c4a6247be4f968c1740de556732bd','0','2','0'),
('60979','3','','10174','Number of bytes received on interface [{#IFBACKINGDEVICE}]/[{#IFDESC}]','vmware.vm.net.if.in[{$VMWARE.URL},{$VMWARE.VM.UUID},{#IFNAME},bps]','1m','31d','365d','0','3','','Bps','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine network interface input statistics (bytes per second).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1a7452a0061b45b1b1904e3ff64cf49f','0','2','0'),
('60980','3','','10174','Number of packets received on interface [{#IFBACKINGDEVICE}]/[{#IFDESC}]','vmware.vm.net.if.in[{$VMWARE.URL},{$VMWARE.VM.UUID},{#IFNAME},pps]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine network interface input statistics (packets per second).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','863c3aee5d9248d48adbf86832fa6c8e','0','2','0'),
('60981','3','','10174','Number of bytes transmitted on interface [{#IFBACKINGDEVICE}]/[{#IFDESC}]','vmware.vm.net.if.out[{$VMWARE.URL},{$VMWARE.VM.UUID},{#IFNAME},bps]','1m','31d','365d','0','3','','Bps','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine network interface output statistics (bytes per second).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0993e42664a14cd7936351c55b1d64a4','0','2','0'),
('60982','3','','10174','Number of packets transmitted on interface [{#IFBACKINGDEVICE}]/[{#IFDESC}]','vmware.vm.net.if.out[{$VMWARE.URL},{$VMWARE.VM.UUID},{#IFNAME},pps]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine network interface output statistics (packets per second).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','144a2ed3f76e49af92462e0fea275ede','0','2','0'),
('60983','3','','10174','Network utilization on interface [{#IFBACKINGDEVICE}]/[{#IFDESC}]','vmware.vm.net.if.usage[{$VMWARE.URL},{$VMWARE.VM.UUID},{#IFNAME}]','1m','31d','365d','0','3','','Bps','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine network utilization (combined transmit and receive rates) during the interval.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9c3cd13576cc4c0a8972fa188f911e96','0','2','0'),
('60984','3','','10174','Average number of outstanding read requests to the disk [{#DISKDESC}]','vmware.vm.storage.readoio[{$VMWARE.URL},{$VMWARE.VM.UUID},{#DISKNAME}]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Average number of outstanding read requests to the virtual disk during the collection interval.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a4886b1072314819aaf21183949c94bb','0','2','0'),
('60985','3','','10174','Average read latency from the disk [{#DISKDESC}]','vmware.vm.storage.totalreadlatency[{$VMWARE.URL},{$VMWARE.VM.UUID},{#DISKNAME}]','1m','31d','365d','0','3','','!ms','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'The average time a read from the virtual disk takes.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','172e4882d39f49d486ab5590163fdd4b','0','2','0'),
('60986','3','','10174','Average write latency to the disk [{#DISKDESC}]','vmware.vm.storage.totalwritelatency[{$VMWARE.URL},{$VMWARE.VM.UUID},{#DISKNAME}]','1m','31d','365d','0','3','','!ms','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'The average time a write to the virtual disk takes.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4fe54828be084b15bb92507106756a5f','0','2','0'),
('60987','3','','10174','Average number of outstanding write requests to the disk [{#DISKDESC}]','vmware.vm.storage.writeoio[{$VMWARE.URL},{$VMWARE.VM.UUID},{#DISKNAME}]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Average number of outstanding write requests to the virtual disk during the collection interval.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a74614af101c404eb7ebec10319dca05','0','2','0'),
('60988','3','','10174','Average number of bytes read from the disk [{#DISKDESC}]','vmware.vm.vfs.dev.read[{$VMWARE.URL},{$VMWARE.VM.UUID},{#DISKNAME},bps]','1m','31d','365d','0','3','','Bps','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine disk device read statistics (bytes per second).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bd151efc8a0b41e9b64cbf21303fc659','0','2','0'),
('60989','3','','10174','Average number of reads from the disk [{#DISKDESC}]','vmware.vm.vfs.dev.read[{$VMWARE.URL},{$VMWARE.VM.UUID},{#DISKNAME},ops]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine disk device read statistics (operations per second).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e6248013150d4f23a0774f6cc80e8df3','0','2','0'),
('60990','3','','10174','Average number of bytes written to the disk [{#DISKDESC}]','vmware.vm.vfs.dev.write[{$VMWARE.URL},{$VMWARE.VM.UUID},{#DISKNAME},bps]','1m','31d','365d','0','3','','Bps','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine disk device write statistics (bytes per second).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7ea68380b855460b8e51281223659661','0','2','0'),
('60991','3','','10174','Average number of writes to the disk [{#DISKDESC}]','vmware.vm.vfs.dev.write[{$VMWARE.URL},{$VMWARE.VM.UUID},{#DISKNAME},ops]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine disk device write statistics (operations per second).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8344a1066f5c4ef49894d2d18fac2339','0','2','0'),
('60992','3','','10174','Free disk space on [{#FSNAME}]','vmware.vm.vfs.fs.size[{$VMWARE.URL},{$VMWARE.VM.UUID},{#FSNAME},free]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine file system statistics (bytes).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','622e96310f9d4f54b4ed82f655fa153b','0','2','0'),
('60993','3','','10174','Free disk space on [{#FSNAME}] (percentage)','vmware.vm.vfs.fs.size[{$VMWARE.URL},{$VMWARE.VM.UUID},{#FSNAME},pfree]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine file system statistics (percentage).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3103537bb1d24633a064d173b3b530f2','0','2','0'),
('60994','3','','10174','Total disk space on [{#FSNAME}]','vmware.vm.vfs.fs.size[{$VMWARE.URL},{$VMWARE.VM.UUID},{#FSNAME},total]','1h','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine total disk space (bytes).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','08d05eac03994b56867ec302a346735c','0','2','0'),
('60995','3','','10174','Used disk space on [{#FSNAME}]','vmware.vm.vfs.fs.size[{$VMWARE.URL},{$VMWARE.VM.UUID},{#FSNAME},used]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware virtual machine used disk space (bytes).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','09bb15da42464d8295d5e94b1d42cc87','0','2','0'),
('60996','3','','10175','Multipath count for datastore [{#DATASTORE}]','vmware.hv.datastore.multipath[{$VMWARE.URL},{$VMWARE.HV.UUID},{#DATASTORE.UUID}]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Number of available datastore paths.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','65e6c165c3674953b2845d4101a9a6bf','0','2','0'),
('60997','3','','10175','Average read latency of the datastore [{#DATASTORE}]','vmware.hv.datastore.read[{$VMWARE.URL},{$VMWARE.HV.UUID},{#DATASTORE.UUID},latency]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Average amount of time for a read operation from the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','259d1ff4bde143248f7ee2f7f880cb62','0','2','0'),
('60998','3','','10175','Average read IOPS of the datastore [{#DATASTORE}]','vmware.hv.datastore.read[{$VMWARE.URL},{$VMWARE.HV.UUID},{#DATASTORE.UUID},rps]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Average IOPS for a read operation from the datastore.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1d7761e9ad0c48c1a3f6b1b48290c16b','0','2','0'),
('60999','3','','10175','Free space on datastore [{#DATASTORE}] (percentage)','vmware.hv.datastore.size[{$VMWARE.URL},{$VMWARE.HV.UUID},{#DATASTORE.UUID},pfree]','5m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware datastore free space (percentage from the total).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f36245398cc4460a9cb4ec741612693b','0','2','0'),
('61000','3','','10175','Total size of datastore [{#DATASTORE}]','vmware.hv.datastore.size[{$VMWARE.URL},{$VMWARE.HV.UUID},{#DATASTORE.UUID}]','5m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware datastore space in bytes.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cc83e8f5ec08483db75482706bf01aba','0','2','0'),
('61001','3','','10175','Average write latency of the datastore [{#DATASTORE}]','vmware.hv.datastore.write[{$VMWARE.URL},{$VMWARE.HV.UUID},{#DATASTORE.UUID},latency]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Average amount of time for a write operation to the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9db980d8f5f44af5ad11a5949d80031d','0','2','0'),
('61002','3','','10175','Average write IOPS of the datastore [{#DATASTORE}]','vmware.hv.datastore.write[{$VMWARE.URL},{$VMWARE.HV.UUID},{#DATASTORE.UUID},rps]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'Average IOPS for a write operation to the datastore (milliseconds).','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4514c4ccf00142e48b243f69dee0b533','0','2','0'),
('61003','3','','10175','[{#IFNAME}] network interface speed','vmware.hv.network.linkspeed[{$VMWARE.URL},{$VMWARE.HV.UUID},{#IFNAME}]','1m','31d','365d','0','3','','bps','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware hypervisor network interface speed.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','706acba4535e4135b824d53763868a5f','0','2','0'),
('61004','3','','10175','Serial number','vmware.hv.hw.serialnumber[{$VMWARE.URL},{#VMWARE.HV.UUID}]','1h','31d','0','0','1','','','','',NULL,NULL,'','','0','{$VMWARE.USERNAME}','{$VMWARE.PASSWORD}','','','2',NULL,'VMware hypervisor serial number.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fcd12a13f97848b78b610e86a24417b2','0','2','0'),
('61008','16','','10410','Deployments discovery','jmx.get[beans,"jboss.as.expr:deployment=*,server-group=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','1',NULL,'Discovery deployments metrics.','0','7d','1','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3af697e56771487abee9f62e453fb0c3','0','2','0'),
('61009','16','','10410','Servers discovery','jmx.get[beans,"jboss.as:host=master,server-config=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','1',NULL,'Discovery instances in domain.','0','7d','1','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','da7f7dfad0c1440a8980693870364baa','0','2','0'),
('61010','16','','10410','WildFly deployment [{#DEPLOYMENT}]: Enabled','jmx["{#JMXOBJ}",enabled]','1m','31d','365d','0','3','','','','',NULL,'334','','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Boolean indicating whether the deployment content is currently deployed in the runtime (or should be deployed in the runtime the next time the server starts).','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e6b1bebba5da4ce493ba7edf869c37b3','0','2','0'),
('61011','16','','10410','WildFly deployment [{#DEPLOYMENT}]: Managed','jmx["{#JMXOBJ}",managed]','1m','31d','365d','0','3','','','','',NULL,'334','','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Indicates if the deployment is managed (aka uses the ContentRepository).','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','45d729721df34ef297109b58027ca4c1','0','2','0'),
('61012','16','','10410','Server {#SERVER}: Autostart','jmx["{#JMXOBJ}",autoStart]','1m','31d','365d','0','3','','','','',NULL,'334','','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Whether or not this server should be started when the Host Controller starts.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d0938bbf20854315bd5cf17491b0ae1c','0','2','0'),
('61013','16','','10410','Server {#SERVER}: Server group','jmx["{#JMXOBJ}",group]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The name of a server group from the domain model.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bd544e2d41c148f993b84ca7d1aad4a9','0','2','0'),
('61014','16','','10410','Server {#SERVER}: Status','jmx["{#JMXOBJ}",status]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The current status of the server.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','64a8a71b3d254a479ce4e5ea82f566ee','0','2','0'),
('61015','16','','10411','Deployments discovery','jmx.get[beans,"jboss.as.expr:deployment=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','1',NULL,'Discovery deployments metrics.','0','7d','1','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9dbbe152925245f8a1f3bf5c32ae49c0','0','2','0'),
('61016','16','','10411','JDBC metrics discovery','jmx.get[beans,"jboss.as:subsystem=datasources,data-source=*,statistics=jdbc"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8e3d5fe1a5a348169c15217bd083abf5','0','2','0'),
('61017','16','','10411','Pools metrics discovery','jmx.get[beans,"jboss.as:subsystem=datasources,data-source=*,statistics=pool"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f8fd6899dafb4247853bd3ed3fbabd48','0','2','0'),
('61018','16','','10411','Undertow metrics discovery','jmx.get[beans,"jboss.as:subsystem=undertow,server=*,http-listener=*"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0a566b1e160649cdb5fda18d3b157733','0','2','0'),
('61019','16','','10411','Deployment [{#DEPLOYMENT}]: Enabled time','jmx["{#JMXOBJ}",enabledTime]','1m','31d','365d','0','3','','unixtime','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Indicates if the deployment is managed (aka uses the ContentRepository).','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','52d99e3f76b4464fbf47271243682d05','0','2','0'),
('61020','16','','10411','Deployment [{#DEPLOYMENT}]: Enabled','jmx["{#JMXOBJ}",enabled]','1m','31d','365d','0','3','','','','',NULL,'335','','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Boolean indicating whether the deployment content is currently deployed in the runtime (or should be deployed in the runtime the next time the server starts).','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8942cf5bc803401cac2f4d9ea943f1fe','0','2','0'),
('61021','16','','10411','Deployment [{#DEPLOYMENT}]: Managed','jmx["{#JMXOBJ}",managed]','1m','31d','365d','0','3','','','','',NULL,'335','','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Indicates if the deployment is managed (aka uses the ContentRepository).','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f633e596ddcc4620a193243c80a6633b','0','2','0'),
('61022','16','','10411','Deployment [{#DEPLOYMENT}]: Persistent','jmx["{#JMXOBJ}",persistent]','1m','31d','365d','0','3','','','','',NULL,'335','','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Indicates if the deployment is managed (aka uses the ContentRepository).','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','498f0d31a5044b91b4aa8af621011919','0','2','0'),
('61023','16','','10411','Deployment [{#DEPLOYMENT}]: Status','jmx["{#JMXOBJ}",status]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The current runtime status of a deployment.
Possible status modes are OK, FAILED, and STOPPED.
FAILED indicates a dependency is missing or a service could not start.
STOPPED indicates that the deployment was not enabled or was manually stopped.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d5dd67dc20c54ef1921da9c9a068ad29','0','2','0'),
('61024','16','','10411','{#JMX_DATA_SOURCE}: Cache access, rate','jmx["{#JMXOBJ}",PreparedStatementCacheAccessCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of times that the statement cache was accessed  per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6c0c0f94300148eda82224da1bc73bd1','0','2','0'),
('61025','16','','10411','{#JMX_DATA_SOURCE}: Cache add, rate','jmx["{#JMXOBJ}",PreparedStatementCacheAddCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of statements added to the statement cache per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0857fb4d2d2447a0b0dede21bb4b4bd5','0','2','0'),
('61026','16','','10411','{#JMX_DATA_SOURCE}: Cache current size','jmx["{#JMXOBJ}",PreparedStatementCacheCurrentSize]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of prepared and callable statements currently cached in the statement cache.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bf368224ed444311ae1af4098c4bdb1f','0','2','0'),
('61027','16','','10411','{#JMX_DATA_SOURCE}: Cache delete, rate','jmx["{#JMXOBJ}",PreparedStatementCacheDeleteCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of statements discarded from the cache per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9c08f05299774a538a52be2c11e62cda','0','2','0'),
('61028','16','','10411','{#JMX_DATA_SOURCE}: Cache hit, rate','jmx["{#JMXOBJ}",PreparedStatementCacheHitCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of times that statements from the cache were used per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','dbe7bc3d9a8a46c6a84b956f0a9e33be','0','2','0'),
('61029','16','','10411','{#JMX_DATA_SOURCE}: Cache miss, rate','jmx["{#JMXOBJ}",PreparedStatementCacheMissCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of times that a statement request could not be satisfied with a statement from the cache per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0e81a30b802941c4bc0e34a10a8d0573','0','2','0'),
('61030','16','','10411','{#JMX_DATA_SOURCE}: Statistics enabled','jmx["{#JMXOBJ}",statisticsEnabled, "JDBC"]','1m','31d','365d','0','3','','','','',NULL,'335','','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Define whether runtime statistics are enabled or not.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','81dbce02ad4d492ebebd1a205bea1b43','0','2','0'),
('61031','16','','10411','{#JMX_DATA_SOURCE}: Connections: Active','jmx["{#JMXOBJ}",ActiveCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of open connections.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','06d61e390b0e403e81b1eaa77815cde2','0','2','0'),
('61032','16','','10411','{#JMX_DATA_SOURCE}: Connections: Available','jmx["{#JMXOBJ}",AvailableCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The available count.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','64565b71c26b463d8ea83ee5ee18284f','0','2','0'),
('61033','16','','10411','{#JMX_DATA_SOURCE}: Blocking time, avg','jmx["{#JMXOBJ}",AverageBlockingTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Average Blocking Time for pool.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','adf534b46aba4f28acea58ea46197edd','0','2','0'),
('61034','16','','10411','{#JMX_DATA_SOURCE}: Connections: Creating time, avg','jmx["{#JMXOBJ}",AverageCreationTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time spent creating a physical connection.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','788691ba487e422a913d408361f99e4d','0','2','0'),
('61035','16','','10411','{#JMX_DATA_SOURCE}: Connections: Get time, avg','jmx["{#JMXOBJ}",AverageGetTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time spent obtaining a physical connection.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','52320ebbe70244e3ad52b0766cd03d8d','0','2','0'),
('61036','16','','10411','{#JMX_DATA_SOURCE}: Connections: Pool time, avg','jmx["{#JMXOBJ}",AveragePoolTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time for a physical connection spent in the pool.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c3a313b3d1c34e6b99ae73d5195e7fac','0','2','0'),
('61037','16','','10411','{#JMX_DATA_SOURCE}: Connections: Usage time, avg','jmx["{#JMXOBJ}",AverageUsageTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time spent using a physical connection','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a76602ba784a4d40a3672a80487c878a','0','2','0'),
('61038','16','','10411','{#JMX_DATA_SOURCE}: Connections: Blocking failure, rate','jmx["{#JMXOBJ}",BlockingFailureCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of failures trying to obtain a physical connection per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','ba111d0ad76848c39c54ffc37d04e561','0','2','0'),
('61039','16','','10411','{#JMX_DATA_SOURCE}: Connections: Created, rate','jmx["{#JMXOBJ}",CreatedCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The created per second','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c01eb89708224899a9ac8e90ee79bcca','0','2','0'),
('61040','16','','10411','{#JMX_DATA_SOURCE}: Connections: Destroyed, rate','jmx["{#JMXOBJ}",DestroyedCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The destroyed count.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','606ed51ce8e549c7af20d7c1c5f78e6e','0','2','0'),
('61041','16','','10411','{#JMX_DATA_SOURCE}: Connections: Idle','jmx["{#JMXOBJ}",IdleCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of physical connections currently idle.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a02eb0060fbb4f598d654d93c286c543','0','2','0'),
('61042','16','','10411','{#JMX_DATA_SOURCE}: Connections: In use','jmx["{#JMXOBJ}",InUseCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of physical connections currently in use.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a5eed78c02274f6180eb667091087ce0','0','2','0'),
('61043','16','','10411','{#JMX_DATA_SOURCE}: Connections: Used, max','jmx["{#JMXOBJ}",MaxUsedCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The maximum number of connections used.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2f3e82a1c2f2472f95e4a85e3b182739','0','2','0'),
('61044','16','','10411','{#JMX_DATA_SOURCE}: Statistics enabled','jmx["{#JMXOBJ}",statisticsEnabled]','1m','31d','365d','0','0','','','','',NULL,'335','','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'Define whether runtime statistics are enabled or not.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fb9a55168c8a4082a19f846ca10adc85','0','2','0'),
('61045','16','','10411','{#JMX_DATA_SOURCE}: Connections: Timed out, rate','jmx["{#JMXOBJ}",TimedOut]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The timed out connections per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','727ff33cec8e4223bc5054c53d0de88b','0','2','0'),
('61046','16','','10411','{#JMX_DATA_SOURCE}: Connections: Wait','jmx["{#JMXOBJ}",WaitCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of requests that had to wait to obtain a physical connection.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4832c8d39e0d4329af6876c594a3d741','0','2','0'),
('61047','16','','10411','{#JMX_DATA_SOURCE}: XA: Commit time, avg','jmx["{#JMXOBJ}",XACommitAverageTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time for a XAResource commit invocation.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c22389aa983a4cdca504e3cc41126f03','0','2','0'),
('61048','16','','10411','{#JMX_DATA_SOURCE}: XA: Commit, rate','jmx["{#JMXOBJ}",XACommitCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of XAResource commit invocations per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2510b507e62c4574af32bb0a283995e8','0','2','0'),
('61049','16','','10411','{#JMX_DATA_SOURCE}: XA: End time, avg','jmx["{#JMXOBJ}",XAEndAverageTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time for a XAResource end invocation.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6f15c885d49e4c1a89bd52b0b4ff0035','0','2','0'),
('61050','16','','10411','{#JMX_DATA_SOURCE}: XA: End, rate','jmx["{#JMXOBJ}",XAEndCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of XAResource end invocations per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c51dd8821ace4724ae965d7ca6f3ebdd','0','2','0'),
('61051','16','','10411','{#JMX_DATA_SOURCE}: XA: Forget time, avg','jmx["{#JMXOBJ}",XAForgetAverageTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time for a XAResource forget invocation.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b5028a44fa2b4347abe11177d61567e2','0','2','0'),
('61052','16','','10411','{#JMX_DATA_SOURCE}: XA: Forget, rate','jmx["{#JMXOBJ}",XAForgetCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of XAResource forget invocations per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','685173455b424a5aa5463670c1718314','0','2','0'),
('61053','16','','10411','{#JMX_DATA_SOURCE}: XA: Prepare time, avg','jmx["{#JMXOBJ}",XAPrepareAverageTime]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time for a XAResource prepare invocation.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4513aff93c8a404389aaf58b28aab5b1','0','2','0'),
('61054','16','','10411','{#JMX_DATA_SOURCE}: XA: Prepare, rate','jmx["{#JMXOBJ}",XAPrepareCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of XAResource prepare invocations per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','96c723883cfa416b9e030e5d42836de3','0','2','0'),
('61055','16','','10411','{#JMX_DATA_SOURCE}: XA: Recover time, avg','jmx["{#JMXOBJ}",XARecoverAverageTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time for a XAResource recover invocation.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','30f0474a666547c39e0d793decd0be57','0','2','0'),
('61056','16','','10411','{#JMX_DATA_SOURCE}: XA: Recover, rate','jmx["{#JMXOBJ}",XARecoverCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of XAResource recover invocations per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d7a3de25f6a74c75b65bc9c83decc1ac','0','2','0'),
('61057','16','','10411','{#JMX_DATA_SOURCE}: XA: Rollback time, avg','jmx["{#JMXOBJ}",XARollbackAverageTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time for a XAResource rollback invocation.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bd64f91e953249e993c3c388f3382ff4','0','2','0'),
('61058','16','','10411','{#JMX_DATA_SOURCE}: XA: Rollback, rate','jmx["{#JMXOBJ}",XARollbackCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of XAResource rollback invocations per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0c0749b041124e1ebb11396344517c01','0','2','0'),
('61059','16','','10411','{#JMX_DATA_SOURCE}: XA: Start time, avg','jmx["{#JMXOBJ}",XAStartAverageTime]','1m','31d','365d','0','0','','s','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The average time for a XAResource start invocation.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','ab9c32db31d84a46967c1f601f11f610','0','2','0'),
('61060','16','','10411','{#JMX_DATA_SOURCE}: XA: Start rate','jmx["{#JMXOBJ}",XAStartCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of XAResource start invocations per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','ef5b00e1dcab4addbc72a0c191e3728b','0','2','0'),
('61061','16','','10411','Listener {#HTTP_LISTENER}: Bytes received, rate','jmx["{#JMXOBJ}",bytesReceived]','1m','31d','365d','0','0','','Bps','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of bytes that have been received by this listener per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','dde94dd2df61495582234d709552fe17','0','2','0'),
('61062','16','','10411','Listener {#HTTP_LISTENER}: Bytes sent, rate','jmx["{#JMXOBJ}",bytesSent]','1m','31d','365d','0','0','','Bps','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of bytes that have been sent out on this listener per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','36451d29d7074b8ebdb3f366eeaa84df','0','2','0'),
('61063','16','','10411','Listener {#HTTP_LISTENER}: Errors, rate','jmx["{#JMXOBJ}",errorCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of 500 responses that have been sent by this listener per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a34cb42c703a4996ab9a4c7a08e71eeb','0','2','0'),
('61064','16','','10411','Listener {#HTTP_LISTENER}: Requests, rate','jmx["{#JMXOBJ}",requestCount]','1m','31d','365d','0','0','','Rps','','',NULL,NULL,'','','0','{$WILDFLY.USER}','{$WILDFLY.PASSWORD}','','','2',NULL,'The number of requests this listener has served per second.','0','7d','0','service:jmx:{$WILDFLY.JMX.PROTOCOL}://{HOST.CONN}:{HOST.PORT}',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2e7a581b104a4d4a8a0d9235b899635a','0','2','0'),
('61176','19','','10369','Clients discovery','zookeeper.clients','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Get list of client connections.
Note, depending on the number of client connections this operation may be expensive (i.e. impact server performance).','0','7d','0','',NULL,'','{$ZOOKEEPER.SCHEME}://{$ZOOKEEPER.HOST}:{$ZOOKEEPER.PORT}/{$ZOOKEEPER.COMMAND_URL}/connections','','','200','1','0','','','0','0','0','0','0','0','0','e0f576ea5ae44289866fb726079ddbf8','0','2','0'),
('61191','19','','10380','PTZ discovery','hikvision_cam.ptz.discovery','1d','31d','365d','0','4','','','','',NULL,NULL,'','','4','{$USER}','{$PASSWORD}','','','1',NULL,'','0','7d','0','',NULL,'','http://{$HIKVISION_ISAPI_HOST}:{$HIKVISION_ISAPI_PORT}/ISAPI/PTZCtrl/channels','','','200,401','1','0','','','0','0','0','0','0','0','0','00647c38d30d44378bdcf573178063ec','0','2','0'),
('61192','19','','10380','Streaming channels discovery','hikvision_cam.streaming.discovery','1d','31d','365d','0','4','','','','',NULL,NULL,'','','4','{$USER}','{$PASSWORD}','','','1',NULL,'','0','7d','1','',NULL,'','http://{$HIKVISION_ISAPI_HOST}:{$HIKVISION_ISAPI_PORT}/ISAPI/Streaming/channels','','','200,401','1','0','','','0','0','0','0','0','0','0','0bf00b49acd448ddbd1f4fac7630c40e','0','2','0'),
('61193','19','','10380','Channel "{#PTZ_CHANNEL_ID}": Get PTZ info','hikvision_cam.get_ptz[{#PTZ_CHANNEL_ID}]','1m','0','0','0','4','','','','',NULL,NULL,'','','4','{$USER}','{$PASSWORD}','','','2',NULL,'High precision positioning which is accurate to a bit after the decimal point','0','7d','0','',NULL,'','http://{$HIKVISION_ISAPI_HOST}:{$HIKVISION_ISAPI_PORT}/ISAPI/PTZCtrl/channels/{#PTZ_CHANNEL_ID}/status','','','200,401','1','0','','','0','0','0','0','0','0','0','6799d99ad02743a1b294b80bbed52280','0','2','0'),
('61213','21','','10535','EC2 instances discovery','aws.ec2.discovery','12h','31d','365d','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload)), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''describe_region'', ''region_match'', ''region_not_match''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			canonical_uri = ''/'',
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''x-amz-content-sha256:'' + sha256(data));
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS EC2 ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS EC2 ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS API. Check debug log for more information.'';
			}
		}

		return response;
	},

	tagToNameInstances: function (instance) {
		try {
			var tags = AWS.getField(instance, ''tagSet.item''),
				instanceName = AWS.getField(instance, ''instanceId'');
			if (!Array.isArray(tags))
				tags = [tags]
			tags.forEach(
				function (tag) {
					if (String(AWS.getField(tag, ''key'')) === ''Name'') {
						instanceName = AWS.getField(tag, ''value'');
					}
				}
			);
			return instanceName;
		}
		catch (error) {
			return AWS.getField(instance, ''instanceId'');
		}
	},

	listRegions: function () {
		var payload = {
			''Action'': ''DescribeRegions'',
			''Version'': ''2016-11-15''
		};

		regions = AWS.getField(AWS.request(''GET'', AWS.params.describe_region, ''ec2'', AWS.prepareParams(payload)), ''DescribeRegionsResponse.regionInfo.item'');

		if (!Array.isArray(regions))
			regions = [regions]
		return regions
	},

	listInstances: function () {
		var lld_array = [],
			regions = AWS.listRegions(),
			payload = {
				''Action'': ''DescribeInstances'',
				''Version'': ''2016-11-15''
			};

		regions.forEach(function (region) {
			var region_name = AWS.getField(region, ''regionName'');
			if (region_name.match(AWS.params.region_match) === null ||
				region_name.match(AWS.params.region_not_match) !== null)
				return;

			result = AWS.request(''GET'', region_name, ''ec2'', AWS.prepareParams(payload), '''');

			if (typeof result !== ''object''
				|| typeof result.DescribeInstancesResponse !== ''object''
				|| typeof result.DescribeInstancesResponse.reservationSet !== ''object'') {
				throw ''Cannot get EC2 instance list from AWS API. Check debug log for more information.'';
			}

			if (result.DescribeInstancesResponse.reservationSet === null)
				return [];

			if (typeof result.DescribeInstancesResponse.reservationSet.item !== ''object'')
				throw ''Cannot get EC2 instance list from AWS API. Check debug log for more information.'';

			var reservation = result.DescribeInstancesResponse.reservationSet.item
			if (!Array.isArray(reservation))
				reservation = [reservation]

			reservation.forEach(function (res_item) {
				var instances = AWS.getField(res_item, ''instancesSet.item'')
				if (!Array.isArray(instances))
					instances = [instances]
				instances.forEach(function (instance) {
					if (AWS.getField(instance, ''instanceState.name'') === ''terminated'') return;
					lld_array.push(
						{
							instanceId: AWS.getField(instance, ''instanceId''),
							instanceName: AWS.tagToNameInstances(instance),
							instanceRegion: region_name
						}
					)
				});
			});
		});

		return lld_array;
	}
};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.listInstances());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS EC2 ] ERROR: '' + error);
	return JSON.stringify({ ''error'': error });
}','','0','','','','','1',NULL,'Get EC2 instances.','0','7d','1','',NULL,'{$AWS.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','c651911bad9244ad9c8d2dad5b0d70e4','0','2','0'),
('61214','21','','10535','ECS clusters discovery','aws.ecs.discovery','12h','31d','365d','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload)), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''describe_region'', ''region_match'', ''region_not_match''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}
			data = data[step];
		}

		return data;

	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);
		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}
		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;

	},

	prepareParams: function (params) {
		var result = [];
		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');

	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}
		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			canonical_uri = ''/'',
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''x-amz-content-sha256:'' + sha256(data));
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/x-www-form-urlencoded'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS ECS ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS ECS ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}
		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS API. Check debug log for more information.'';
			}
		}

		return response;

	},

	listRegions: function () {
		var payload = {
			''Action'': ''DescribeRegions'',
			''Version'': ''2016-11-15''
		};

		regions = AWS.getField(AWS.request(''GET'', AWS.params.describe_region, ''ec2'', AWS.prepareParams(payload)), ''DescribeRegionsResponse.regionInfo.item'');

		if (!Array.isArray(regions))
			regions = [regions]

		return regions
	},

	listClusters: function () {
		var data = [],
			regions = AWS.listRegions(),
			result,
			ECSClusters,
			payload = {
				''Action'': ''ListClusters'',
				''Version'': ''2014-11-13''
			};

		regions.forEach(function (region) {
			var region_name = AWS.getField(region, ''regionName'');
			if (region_name.match(AWS.params.region_match) === null ||
				region_name.match(AWS.params.region_not_match) !== null)
				return;

			result = AWS.request(''GET'', region_name, ''ecs'', AWS.prepareParams(payload));
			ECSClusters = AWS.getField(result, ''ListClustersResponse.ListClustersResult.clusterArns'')
			for (k in ECSClusters) {
				clusters = ECSClusters[k];
				json = {};
				input = clusters.split(''/'');
				for (var i = 1; i < input.length; i += 2) {
					json[input[i]] = input[i + 1];
				}
				data.push({
					''clusters_name'': input[1],
					''region'': region_name
				});
			}
		});

		return data;
	},

	decribeClusters: function (cluster_name, region_name) {
		var payload = {
			''Action'': ''DescribeClusters'',
			''Version'': ''2014-11-13'',
			''clusters.clusterName'': cluster_name,
			''include.statistics'': ''STATISTICS''
		};
		result = AWS.request(''GET'', region_name, ''ecs'', AWS.prepareParams(payload));

		return result;

	}

};

try {
	AWS.setParams(JSON.parse(value));
	var clusters = AWS.listClusters(),
		infrastructure = [],
		metrics = [''runningEC2TasksCount'', ''pendingEC2TasksCount'', ''activeEC2ServiceCount'', ''drainingEC2ServiceCount''],
		ECSClusters = [],
		DescribeClusters = [];
	DescribeClusters = clusters.map(function (cluster) {
		ECSClusters = AWS.getField(AWS.decribeClusters(cluster.clusters_name, cluster.region), ''DescribeClustersResponse.DescribeClustersResult.clusters'')
		for (k in ECSClusters) {
			var ECS2 = 0;
			statistic = AWS.getField(ECSClusters[k], ''statistics'');
			statistic.forEach(function (id) {
				for (i in metrics) {
					if (AWS.getField(id, ''name'') === metrics[i]) {
						ECS2 += Number(AWS.getField(id, ''value''));
					}
				}
			})
			infrastructure = (ECS2 > 0) ? ''use_ecs2'' : ''serverless'';

			return {
				''clusterName'': ECSClusters[k].clusterName,
				''status'': ECSClusters[k].status,
				''infrastructure'': infrastructure,
				''region'': cluster.region
			}

		}
	})

	return JSON.stringify(DescribeClusters);

}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS ECS ] ERROR: '' + error);
	return JSON.stringify({ ''error'': error });
}','','0','','','','','1',NULL,'Get ECS clusters.','0','7d','1','',NULL,'{$AWS.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','44b68894d68c45ec9a5ea787c975ae16','0','2','0'),
('61215','21','','10535','ELB load balancers discovery','aws.elb.discovery','12h','31d','365d','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload)), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''describe_region'', ''region_match'', ''region_not_match''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			canonical_uri = ''/'',
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''x-amz-content-sha256:'' + sha256(data));
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS ELB ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS ELB ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS API. Check debug log for more information.'';
			}
		}

		return response;
	},

	listRegions: function () {
		var payload = {
			''Action'': ''DescribeRegions'',
			''Version'': ''2016-11-15''
		};

		regions = AWS.getField(AWS.request(''GET'', AWS.params.describe_region, ''ec2'', AWS.prepareParams(payload)), ''DescribeRegionsResponse.regionInfo.item'');

		if (!Array.isArray(regions))
			regions = [regions]
		return regions
	},

	listLoadBalancers: function () {
		var lld_array = [],
			regions = AWS.listRegions(),
			payload = {
				''Action'': ''DescribeLoadBalancers'',
				''Version'': ''2015-12-01''
			};

		regions.forEach(function (region) {
			var region_name = AWS.getField(region, ''regionName'');
			if (region_name.match(AWS.params.region_match) === null ||
				region_name.match(AWS.params.region_not_match) !== null)
				return;
			elb = AWS.getField(AWS.request(''GET'', region_name, ''elasticloadbalancing'', AWS.prepareParams(payload)), ''DescribeLoadBalancersResponse.DescribeLoadBalancersResult.LoadBalancers'');
			if (!Array.isArray(elb))
				elb = [elb]

			elb.forEach(function (elb) {
				lld_array.push(
					{
						name: AWS.getField(elb, ''LoadBalancerName''),
						arn: AWS.getField(elb, ''LoadBalancerArn''),
						type: AWS.getField(elb, ''Type''),
						state: AWS.getField(elb, ''State.Code''),
						dns_name: AWS.getField(elb, ''DNSName''),
						region: region_name
					}
				)
			});
		});

		return lld_array;
	}
};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.listLoadBalancers());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS ELB ] ERROR: '' + error);
	return JSON.stringify({ ''error'': error });
}','','0','','','','','1',NULL,'Get ELB load balancers.','0','7d','1','',NULL,'{$AWS.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','e7ac860c53bf403f9aee8cdd4b099c05','0','2','0'),
('61216','21','','10535','Lambda discovery','aws.lambda.discovery','12h','31d','365d','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload), '''', ''''), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''describe_region'', ''region_match'', ''region_not_match''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data, uri) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			canonical_uri = ''/'' + uri,
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''x-amz-content-sha256:'' + sha256(data));
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS Lambda ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS Lambda ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS API. Check debug log for more information.'';
			}
		}

		return response;
	},

	listRegions: function () {
		var payload = {
			''Action'': ''DescribeRegions'',
			''Version'': ''2016-11-15''
		};

		regions = AWS.getField(AWS.request(''GET'', AWS.params.describe_region, ''ec2'', AWS.prepareParams(payload), '''', ''''), ''DescribeRegionsResponse.regionInfo.item'');

		if (!Array.isArray(regions))
			regions = [regions]

		return regions
	},

	listFunctions: function () {
		var lldArray = [],
			regions = AWS.listRegions();
		payload = {
			''FunctionVersion'': ''ALL'',
			''MaxItems'': ''10000''
		};

		regions.forEach(function (region) {
			var region_name = AWS.getField(region, ''regionName'');
			if (region_name.match(AWS.params.region_match) === null ||
				region_name.match(AWS.params.region_not_match) !== null)
				return;
			lambdaFunction = AWS.getField(AWS.request(''GET'', region_name, ''lambda'', AWS.prepareParams(payload), '''', ''2015-03-31/functions''), ''Functions'');
			if (!Array.isArray(lambdaFunction))
				lambdaFunction = [lambdaFunction]

			lambdaFunction.forEach(function (lambdaFunction) {
				lldArray.push(
					{
						name: AWS.getField(lambdaFunction, ''FunctionName''),
						arn: AWS.getField(lambdaFunction, ''FunctionArn''),
						runtime: AWS.getField(lambdaFunction, ''Runtime''),
						version: AWS.getField(lambdaFunction, ''Version''),
						region: region_name
					}
				)
			});
		});

		return lldArray;
	}
};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.listFunctions());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS Lambda ] ERROR: '' + error);
	return JSON.stringify({ ''error'': error });
}','','0','','','','','1',NULL,'Get Lambda functions.','0','7d','1','',NULL,'{$AWS.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','691d96408dbc4c5c9235932cdbe70648','0','2','0'),
('61217','21','','10535','RDS instances discovery','aws.rds.discovery','12h','31d','365d','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload)), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''describe_region'', ''region_match'', ''region_not_match''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			canonical_uri = ''/'',
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''x-amz-content-sha256:'' + sha256(data));
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS RDS ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS RDS ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS API. Check debug log for more information.'';
			}
		}

		return response;
	},

	listRegions: function () {
		var payload = {
			''Action'': ''DescribeRegions'',
			''Version'': ''2016-11-15''
		};

		regions = AWS.getField(AWS.request(''GET'', AWS.params.describe_region, ''ec2'', AWS.prepareParams(payload)), ''DescribeRegionsResponse.regionInfo.item'');

		if (!Array.isArray(regions))
			regions = [regions]
		return regions
	},

	listInstances: function () {
		var lld_array = [],
			regions = AWS.listRegions(),
			payload = {
				''Action'': ''DescribeDBInstances'',
				''Version'': ''2014-10-31''
			};

		regions.forEach(function (region) {
			var region_name = AWS.getField(region, ''regionName'');
			if (region_name.match(AWS.params.region_match) === null ||
				region_name.match(AWS.params.region_not_match) !== null)
				return;

			result = AWS.request(''GET'', region_name, ''rds'', AWS.prepareParams(payload));

			databases = AWS.getField(result, ''DescribeDBInstancesResponse.DescribeDBInstancesResult.DBInstances'')
			if (!Array.isArray(databases))
				databases = [databases]

			databases.forEach(function (db) {
				lld_array.push(
					{
						DBInstanceIdentifier: AWS.getField(db, ''DBInstanceIdentifier''),
						instanceRegion: region_name
					}
				)
			});
		});

		return lld_array;
	}
};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.listInstances());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS RDS ] ERROR: '' + error);
	return JSON.stringify({ ''error'': error });
}','','0','','','','','1',NULL,'Get RDS instances.','0','7d','1','',NULL,'{$AWS.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','c1127e674b7548b2802cd8771f3a4768','0','2','0'),
('61218','21','','10535','S3 buckets discovery','aws.s3.discovery','12h','31d','365d','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload)), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''request_region''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			canonical_uri = ''/'',
			host = service + ''.'' + region + ''.amazonaws.com'';

		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			token = AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken;
			var canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'' + ''x-amz-security-token:'' + token + ''\\n'',
				signed_headers = ''content-encoding;host;x-amz-date;x-amz-security-token'';
		}
		else {
			var canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
				signed_headers = ''content-encoding;host;x-amz-date'';
		}

		var canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''x-amz-content-sha256:'' + sha256(data));
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + token);
		}

		Zabbix.log(4, ''[ AWS S3 ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS S3 ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS API. Check debug log for more information.'';
			}
		}

		return response;
	},

	listBuckets: function () {
		var payload = {
			''Action'': ''ListBuckets'',
			''Version'': ''2006-03-01''
		};

		var result = AWS.getField(AWS.request(''GET'', AWS.params.request_region, ''s3'', AWS.prepareParams(payload)), ''ListAllMyBucketsResult.Buckets'');

		if (result === null) {
			return [];
		}
		result = AWS.getField(result, ''Bucket'');

		return Array.isArray(result) ? result : [result];

	}

};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.listBuckets());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS S3 ] ERROR: '' + error);
	return JSON.stringify({ ''error'': error });
}','','0','','','','','1',NULL,'Get S3 bucket instances.','0','7d','1','',NULL,'{$AWS.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','ab6a97a108fb4dbc9fd1e07378721ffe','0','2','0'),
('61239','21','','10527','[{#VOLUME_ID}]: Get metrics','aws.ec2.get_ebs_metrics["{#VOLUME_ID}"]','0s;m/5','0','0','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	request_period: 600,
	metadata: ''http://169.254.169.254/latest/'',

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload), ''''), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''region'', ''volume_id''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareRecursive: function (prefix, param) {
		var result = {};

		if (typeof param === ''object'') {
			if (Array.isArray(param)) {
				param.forEach(function (value, index) {
					var nested = AWS.prepareRecursive(prefix + ''.member.'' + (index + 1), value);
					Object.keys(nested).forEach(function (key) {
						result[key] = nested[key];
					});
				});
			}
			else {
				Object.keys(param).forEach(function (k) {
					var nested = AWS.prepareRecursive(prefix + ''.'' + k, param[k]);
					Object.keys(nested).forEach(function (key) {
						result[key] = nested[key];
					});
				});
			}
		}
		else {
			result[prefix] = param;
		}

		return result;
	},

	renderPayload: function (period, volume_id) {
		var metrics_list = [
			''VolumeReadBytes:Bytes'',
			''VolumeWriteBytes:Bytes'',
			''VolumeReadOps:Count'',
			''VolumeWriteOps:Count'',
			''VolumeTotalReadTime:Seconds'',
			''VolumeTotalWriteTime:Seconds'',
			''VolumeIdleTime:Seconds'',
			''VolumeQueueLength:Count'',
			''VolumeThroughputPercentage:Percent'',
			''VolumeConsumedReadWriteOps:Count'',
			''BurstBalance:Percent''
		];

		var metric_payload = [];
		metrics_list.forEach(function (metric) {
			var parts = metric.split('':'', 2);
			var name = parts[0].replace(/[^a-zA-Z0-9]/g, '''');
			metric_payload.push({
				''Id'': name.charAt(0).toLowerCase() + name.slice(1),
				''MetricStat'': {
					''Metric'': {
						''MetricName'': parts[0],
						''Namespace'': ''AWS/EBS'',
						''Dimensions'': [
							{
								''Name'': ''VolumeId'',
								''Value'': volume_id
							}
						]
					},
					''Period'': period,
					''Stat'': ''Average'',
					''Unit'': parts[1]
				}
			});
		});

		return metric_payload;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_uri = ''/'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS EBS ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS EBS ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		if (response !== null) {
			try {
				response = JSON.parse(response);
			}
			catch (error) {
				throw ''Failed to parse response received from AWS CloudWatch API. Check debug log for more information.'';
			}
		}

		return response;
	},

	getMetricsData: function () {
		var timestamp = new Date().getTime(),
			end_time = new Date(timestamp).toISOString().replace(/\\.\\d+Z/, ''Z''),
			start_time = new Date(timestamp - AWS.request_period * 1000).toISOString().replace(/\\.\\d+Z/, ''Z''),
			payload = AWS.prepareRecursive(''MetricDataQueries'', AWS.renderPayload(AWS.request_period, AWS.params.volume_id));

		payload[''Action''] = ''GetMetricData'';
		payload[''Version''] = ''2010-08-01'';
		payload[''StartTime''] = start_time;
		payload[''EndTime''] = end_time;
		payload[''ScanBy''] = ''TimestampDescending'';

		result = AWS.request(''GET'', AWS.params.region, ''monitoring'', AWS.prepareParams(payload));

		if (typeof result !== ''object''
			|| typeof result.GetMetricDataResponse !== ''object''
			|| typeof result.GetMetricDataResponse.GetMetricDataResult !== ''object''
			|| typeof result.GetMetricDataResponse.GetMetricDataResult.MetricDataResults !== ''object'') {
			throw ''Cannot get metrics data from AWS CloudWatch API. Check debug log for more information.'';
		}

		return result.GetMetricDataResponse.GetMetricDataResult.MetricDataResults;
	}
};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.getMetricsData());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS EBS ] ERROR: '' + error);

	return JSON.stringify({ ''error'': error });
}','','0','','','','','2',NULL,'Get metrics of EBS volume.
Full metrics list related to EBS: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cloudwatch_ebs.html','0','7d','0','',NULL,'15s','','','','200','1','0','','','0','0','0','0','0','0','0','8b3b008f7f65408fbd49e46186b01cfb','0','2','0'),
('61240','21','','10583','[{#AWS.ECS.SERVICE.NAME}]: Get metrics','aws.ecs.services.get_metrics["{#AWS.ECS.SERVICE.NAME}"]','0s;m/5','0','0','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	request_period: 600,
	metadata: ''http://169.254.169.254/latest/'',

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload), ''''), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''region'', ''cluster_name'', ''service_name''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareRecursive: function (prefix, param) {
		var result = {};

		if (typeof param === ''object'') {
			if (Array.isArray(param)) {
				param.forEach(function (value, index) {
					var nested = AWS.prepareRecursive(prefix + ''.member.'' + (index + 1), value);
					Object.keys(nested).forEach(function (key) {
						result[key] = nested[key];
					});
				});
			}
			else {
				Object.keys(param).forEach(function (k) {
					var nested = AWS.prepareRecursive(prefix + ''.'' + k, param[k]);
					Object.keys(nested).forEach(function (key) {
						result[key] = nested[key];
					});
				});
			}
		}
		else {
			result[prefix] = param;
		}

		return result;
	},

	renderPayload: function (period, cluster_name, service_name) {
		var metrics_list = [
			''CpuReserved:None:ECS/ContainerInsights'',
			''CpuUtilized:None:ECS/ContainerInsights'',
			''CPUUtilization:Percent:AWS/ECS'',
			''MemoryUtilization:Percent:AWS/ECS'',
			''MemoryReserved:Megabytes:ECS/ContainerInsights'',
			''MemoryUtilized:Megabytes:ECS/ContainerInsights'',
			''NetworkRxBytes:Bytes/Second:ECS/ContainerInsights'',
			''NetworkTxBytes:Bytes/Second:ECS/ContainerInsights'',
			''StorageReadBytes:Bytes:ECS/ContainerInsights'',
			''StorageWriteBytes:Bytes:ECS/ContainerInsights'',
			''DeploymentCount:Count:ECS/ContainerInsights'',
			''TaskSetCount:Count:ECS/ContainerInsights'',
			''DesiredTaskCount:Count:ECS/ContainerInsights'',
			''PendingTaskCount:Count:ECS/ContainerInsights'',
			''RunningTaskCount:Count:ECS/ContainerInsights'',
			''EphemeralStorageReserved:Gigabytes:ECS/ContainerInsights'',
			''EphemeralStorageUtilized:Gigabytes:ECS/ContainerInsights''
		];

		var metric_payload = [];
		metrics_list.forEach(function (metric) {
			var parts = metric.split('':'', 3);
			var name = parts[0].replace(/[^a-zA-Z0-9]/g, '''');
			metric_payload.push({
				''Id'': name.charAt(0).toLowerCase() + name.slice(1),
				''MetricStat'': {
					''Metric'': {
						''MetricName'': parts[0],
						''Namespace'': parts[2],
						''Dimensions'': [
							{
								''Name'': ''ClusterName'',
								''Value'': cluster_name
							}
							,
							{
								''Name'': ''ServiceName'',
								''Value'': service_name
							}
						]
					},
					''Period'': period,
					''Stat'': ''Average'',
					''Unit'': parts[1]
				}
			});
		});

		return metric_payload;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_uri = ''/'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS ECS  ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS ECS ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS CloudWatch API. Check debug log for more information.'';
			}
		}

		return response;
	},

	getMetricsData: function () {
		var timestamp = new Date().getTime(),
			end_time = new Date(timestamp).toISOString().replace(/\\.\\d+Z/, ''Z''),
			start_time = new Date(timestamp - AWS.request_period * 1000).toISOString().replace(/\\.\\d+Z/, ''Z''),
			payload = AWS.prepareRecursive(''MetricDataQueries'', AWS.renderPayload(AWS.request_period, AWS.params.cluster_name, AWS.params.service_name));

		payload[''Action''] = ''GetMetricData'';
		payload[''Version''] = ''2010-08-01'';
		payload[''StartTime''] = start_time;
		payload[''EndTime''] = end_time;
		payload[''ScanBy''] = ''TimestampDescending'';

		result = AWS.request(''GET'', AWS.params.region, ''monitoring'', AWS.prepareParams(payload));
		MetricData = AWS.getField(result, ''GetMetricDataResponse.GetMetricDataResult.MetricDataResults'')

		return MetricData;
	}
};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.getMetricsData());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS ECS ] ERROR: '' + error);

	return JSON.stringify({ ''error'': error });
}','','0','','','','','2',NULL,'Get metrics of ESC services.
Full metrics list related to ECS : https://docs.aws.amazon.com/ecs/index.html','0','7d','0','',NULL,'15s','','','','200','1','0','','','0','0','0','0','0','0','0','d12aae43f0f3446d96e2141a0bf303b8','0','2','0'),
('61241','21','','10584','[{#AWS.ECS.SERVICE.NAME}]: Get metrics','aws.ecs.services.get_metrics["{#AWS.ECS.SERVICE.NAME}"]','0s;m/5','0','0','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	request_period: 600,
	metadata: ''http://169.254.169.254/latest/'',

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''GET'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload), ''''), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''region'', ''cluster_name'', ''service_name''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareRecursive: function (prefix, param) {
		var result = {};

		if (typeof param === ''object'') {
			if (Array.isArray(param)) {
				param.forEach(function (value, index) {
					var nested = AWS.prepareRecursive(prefix + ''.member.'' + (index + 1), value);
					Object.keys(nested).forEach(function (key) {
						result[key] = nested[key];
					});
				});
			}
			else {
				Object.keys(param).forEach(function (k) {
					var nested = AWS.prepareRecursive(prefix + ''.'' + k, param[k]);
					Object.keys(nested).forEach(function (key) {
						result[key] = nested[key];
					});
				});
			}
		}
		else {
			result[prefix] = param;
		}

		return result;
	},

	renderPayload: function (period, cluster_name, service_name) {
		var metrics_list = [
			''CpuReserved:None:ECS/ContainerInsights'',
			''CpuUtilized:None:ECS/ContainerInsights'',
			''CPUUtilization:Percent:AWS/ECS'',
			''MemoryUtilization:Percent:AWS/ECS'',
			''MemoryReserved:Megabytes:ECS/ContainerInsights'',
			''MemoryUtilized:Megabytes:ECS/ContainerInsights'',
			''NetworkRxBytes:Bytes/Second:ECS/ContainerInsights'',
			''NetworkTxBytes:Bytes/Second:ECS/ContainerInsights'',
			''StorageReadBytes:Bytes:ECS/ContainerInsights'',
			''StorageWriteBytes:Bytes:ECS/ContainerInsights'',
			''DeploymentCount:Count:ECS/ContainerInsights'',
			''TaskSetCount:Count:ECS/ContainerInsights'',
			''DesiredTaskCount:Count:ECS/ContainerInsights'',
			''PendingTaskCount:Count:ECS/ContainerInsights'',
			''RunningTaskCount:Count:ECS/ContainerInsights'',
			''EphemeralStorageReserved:Gigabytes:ECS/ContainerInsights'',
			''EphemeralStorageUtilized:Gigabytes:ECS/ContainerInsights''
		];

		var metric_payload = [];
		metrics_list.forEach(function (metric) {
			var parts = metric.split('':'', 3);
			var name = parts[0].replace(/[^a-zA-Z0-9]/g, '''');
			metric_payload.push({
				''Id'': name.charAt(0).toLowerCase() + name.slice(1),
				''MetricStat'': {
					''Metric'': {
						''MetricName'': parts[0],
						''Namespace'': parts[2],
						''Dimensions'': [
							{
								''Name'': ''ClusterName'',
								''Value'': cluster_name
							}
							,
							{
								''Name'': ''ServiceName'',
								''Value'': service_name
							}
						]
					},
					''Period'': period,
					''Stat'': ''Average'',
					''Unit'': parts[1]
				}
			});
		});

		return metric_payload;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_uri = ''/'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS ECS  ] Sending request: '' + url);
		response = request.get(url);
		Zabbix.log(4, ''[ AWS ECS ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS CloudWatch API. Check debug log for more information.'';
			}
		}

		return response;
	},

	getMetricsData: function () {
		var timestamp = new Date().getTime(),
			end_time = new Date(timestamp).toISOString().replace(/\\.\\d+Z/, ''Z''),
			start_time = new Date(timestamp - AWS.request_period * 1000).toISOString().replace(/\\.\\d+Z/, ''Z''),
			payload = AWS.prepareRecursive(''MetricDataQueries'', AWS.renderPayload(AWS.request_period, AWS.params.cluster_name, AWS.params.service_name));

		payload[''Action''] = ''GetMetricData'';
		payload[''Version''] = ''2010-08-01'';
		payload[''StartTime''] = start_time;
		payload[''EndTime''] = end_time;
		payload[''ScanBy''] = ''TimestampDescending'';

		result = AWS.request(''GET'', AWS.params.region, ''monitoring'', AWS.prepareParams(payload));
		MetricData = AWS.getField(result, ''GetMetricDataResponse.GetMetricDataResult.MetricDataResults'')

		return MetricData;
	}
};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.getMetricsData());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS ECS ] ERROR: '' + error);

	return JSON.stringify({ ''error'': error });
}','','0','','','','','2',NULL,'Get metrics of ESC services.
Full metrics list related to ECS : https://docs.aws.amazon.com/ecs/index.html','0','7d','0','',NULL,'15s','','','','200','1','0','','','0','0','0','0','0','0','0','0f80f5477ed04dbfbcb241c06854a6ff','0','2','0'),
('61242','21','','10607','[{#AWS.ELB.TARGET.GROUP.NAME}]: Get metrics','aws.elb.alb.target_groups.get_metrics["{#AWS.ELB.TARGET.GROUP.NAME}"]','0s;m/5','0','0','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',
	request_period: 60,

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''POST'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload), ''''), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''region'', ''arn'', ''target_arn''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	renderMetricQuery: function (period, arn, target_arn) {
		var metrics_list = [
			''HTTPCode_Target_2XX_Count:Sum'',
			''HTTPCode_Target_3XX_Count:Sum'',
			''HTTPCode_Target_4XX_Count:Sum'',
			''HTTPCode_Target_5XX_Count:Sum'',
			''HealthyHostCount:Average'',
			''UnHealthyHostCount:Average'',
			''HealthyStateRouting:Sum'',
			''UnhealthyStateRouting:Sum'',
			''UnhealthyRoutingRequestCount:Sum'',
			''HealthyStateDNS:Sum'',
			''UnhealthyStateDNS:Sum'',
			''RequestCountPerTarget:Sum'',
			''MitigatedHostCount:Average'',
			''AnomalousHostCount:Average'',
		],
			regex = /loadbalancer\\/(.+)$/;

		var metric_payload = [];
		metrics_list.forEach(function (metric, index) {
			var parts = metric.split('':'', 2);
			metric_payload.push({
				''Id'': ''m'' + index,
				''MetricStat'': {
					''Metric'': {
						''MetricName'': parts[0],
						''Namespace'': ''AWS/ApplicationELB'',
						''Dimensions'': [
							{
								''Name'': ''LoadBalancer'',
								''Value'': arn.match(regex)[1],
							},
							{
								''Name'': ''TargetGroup'',
								''Value'': target_arn
							}
						]
					},
					''Period'': period,
					''Stat'': parts[1],
				}
			});
		});

		return metric_payload;
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = JSON.stringify([]);
		}
		else {
			data = JSON.stringify(data)
		}
		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			canonical_uri = ''/'',
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''x-amz-content-sha256:'' + sha256(data));
		request.addHeader(''X-Amz-Target: GraniteServiceVersion20100801.GetMetricData'')
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS ELB ] Sending request: '' + url);
		response = request.post(url, data);
		Zabbix.log(4, ''[ AWS ELB ] Received response with status code '' + request.getStatus() + '': '' + response);
		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		return JSON.parse(response);
	},

	getMetricsData: function () {
		var end_time = Math.floor((new Date().getTime()) / 1000),
			start_time = end_time - AWS.request_period * 60;
		payload = {
			''StartTime'': start_time,
			''EndTime'': end_time,
			''ScanBy'': ''TimestampDescending'',
			''MetricDataQueries'': AWS.renderMetricQuery(AWS.request_period, AWS.params.arn, AWS.params.target_arn)
		};

		return AWS.getField(AWS.request(''POST'', AWS.params.region, ''monitoring'', '''', payload), ''MetricDataResults'');
	}
};

try {
	AWS.setParams(JSON.parse(value));
	return JSON.stringify(AWS.getMetricsData());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS ELB Get targets group metrics] ERROR: '' + error);

	return JSON.stringify({ ''error'': error });
}','','0','','','','','2',NULL,'Get the metrics of the ELB target group `{#AWS.ELB.TARGET.GROUP.NAME}`.
Full list of metrics related to AWS ELB here: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html#user-authentication-metric-table','0','7d','0','',NULL,'{$AWS.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','306971d2e8fb441d8ae4a658b26304c3','0','2','0'),
('61243','21','','10627','[{#AWS.ELB.TARGET.GROUP.NAME}]: Get metrics','aws.elb.nlb.target_groups.get_metrics["{#AWS.ELB.TARGET.GROUP.NAME}"]','0s;m/5','0','0','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',
	request_period: 60,

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''POST'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload), ''''), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''region'', ''arn'', ''target_arn''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	renderMetricQuery: function (period, arn, target_arn) {
		var metrics_list = [
			''HealthyHostCount:Minimum'',
			''UnHealthyHostCount:Maximum''
		],
			regex = /loadbalancer\\/(.+)$/;

		var metric_payload = [];
		metrics_list.forEach(function (metric, index) {
			var parts = metric.split('':'', 2);
			metric_payload.push({
				''Id'': ''m'' + index,
				''MetricStat'': {
					''Metric'': {
						''MetricName'': parts[0],
						''Namespace'': ''AWS/NetworkELB'',
						''Dimensions'': [
							{
								''Name'': ''LoadBalancer'',
								''Value'': arn.match(regex)[1],
							},
							{
								''Name'': ''TargetGroup'',
								''Value'': target_arn
							}
						]
					},
					''Period'': period,
					''Stat'': parts[1],
				}
			});
		});

		return metric_payload;
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = JSON.stringify([]);
		}
		else {
			data = JSON.stringify(data)
		}
		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			canonical_uri = ''/'',
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
			signed_headers = ''content-encoding;host;x-amz-date'',
			canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''x-amz-content-sha256:'' + sha256(data));
		request.addHeader(''X-Amz-Target: GraniteServiceVersion20100801.GetMetricData'')
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + (AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken));
		}

		Zabbix.log(4, ''[ AWS ELB ] Sending request: '' + url);
		response = request.post(url, data);
		Zabbix.log(4, ''[ AWS ELB ] Received response with status code '' + request.getStatus() + '': '' + response);
		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		return JSON.parse(response);
	},

	getMetricsData: function () {
		var end_time = Math.floor((new Date().getTime()) / 1000),
			start_time = end_time - AWS.request_period * 60;
		payload = {
			''StartTime'': start_time,
			''EndTime'': end_time,
			''ScanBy'': ''TimestampDescending'',
			''MetricDataQueries'': AWS.renderMetricQuery(AWS.request_period, AWS.params.arn, AWS.params.target_arn)
		};

		return AWS.getField(AWS.request(''POST'', AWS.params.region, ''monitoring'', '''', payload), ''MetricDataResults'');
	}
};

try {
	AWS.setParams(JSON.parse(value));
	return JSON.stringify(AWS.getMetricsData());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS ELB Get targets group metrics] ERROR: '' + error);

	return JSON.stringify({ ''error'': error });
}','','0','','','','','2',NULL,'Get the metrics of the ELB target group `{#AWS.ELB.TARGET.GROUP.NAME}`.
Full list of metrics related to AWS ELB here: https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-cloudwatch-metrics.html#user-authentication-metric-table','0','7d','0','',NULL,'{$AWS.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','9438a03b48bd4617a2363f83f758f107','0','2','0'),
('61244','21','','10530','Filter [{#AWS.S3.FILTER.ID.NAME}]: Get request metrics','aws.s3.get_metrics["{#AWS.S3.FILTER.ID.NAME}"]','{$AWS.S3.UPDATE.INTERVAL}','0','0','0','4','','','','',NULL,NULL,E'var AWS = {
	params: {},
	metadata: ''http://169.254.169.254/latest/'',

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path;
			}

			data = data[step];
		}

		return data;
	},

	isFloat: function (n) {
		n = parseFloat(n);
		return Number(n) === n && n % 1 !== 0;
	},

	checkNumber: function checkNumber(string) {
		if (typeof string !== "string" || isNaN(string) || AWS.isFloat(string)) {
			throw ''Incorrect "timespan" parameter given: '' + string + '' Must be an unsigned number'';
		}
		return string;
	},

	getRoleBaseCredentials: function () {
		AWS.params[''auth_type''] = ''role_base'';
		var request = new HttpRequest();
		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''X-aws-ec2-metadata-token-ttl-seconds: 21600'');
		var token = request.put(AWS.metadata + ''api/token'');

		if (request.getStatus() !== 200 || token === null || token === '''') {
			throw ''Error getting IMDSv2 session token.'';
		}
		request.addHeader(''X-aws-ec2-metadata-token: '' + token);
		var IamRoleName = request.get(AWS.metadata + ''meta-data/iam/security-credentials'');

		if (request.getStatus() !== 200 || IamRoleName === null || IamRoleName === '''') {
			throw ''Error getting security credentials from instance metadata. Role not found.'';
		}

		credentials = request.get(AWS.metadata + ''meta-data/iam/security-credentials/'' + encodeURI(IamRoleName));

		if (request.getStatus() !== 200 || credentials === null || credentials === '''') {
			throw ''Error getting security credentials from instance metadata.'';
		}

		try {
			credentials = JSON.parse(credentials);
		}
		catch (error) {
			throw ''Failed to parse response received from instance metadata. Check debug log for more information.'';
		}

		[''AccessKeyId'', ''SecretAccessKey'', ''Token''].forEach(function (field) {
			if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
				throw ''Required credentials are not set: "'' + field + ''".'';
			};
			AWS.params[field] = credentials[field];
		});
	},

	setParams: function (params) {
		AWS.params[''proxy''] = params.proxy;
		switch (AWS.getField(params, ''auth_type'')) {
			case ''role_base'':
				AWS.getRoleBaseCredentials();
				break;
			case ''assume_role'':
				if (typeof params.metadata_auth === ''undefined'' || params.metadata_auth === '''' || (params.metadata_auth !== ''true'' && params.metadata_auth !== ''false'')) {
					throw ''Required param metadata_auth for assume_role is not set or has invalid value: "'' + params.metadata_auth + ''". Expected "true" or "false".'';
				}
				if (params.metadata_auth === ''true'') {
					AWS.getRoleBaseCredentials();
					AWS.params[''SessionToken''] = AWS.params[''Token''];
					AWS.params[''auth_type''] = ''assume_role_metadata'';

					[''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				if (params.metadata_auth === ''false'') {
					AWS.params[''auth_type''] = ''assume_role'';

					[''AccessKeyId'', ''SecretAccessKey'', ''sts_region'', ''role_arn''].forEach(function (field) {
						if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
							throw ''Required param is not set: "'' + field + ''".'';
						}
						AWS.params[field] = params[field];
					});
				}

				const role_arn_regex = /role\\/(.+)$/;
				const match = AWS.params.role_arn.match(role_arn_regex);
				if (!match) {
					throw ''Invalid role ARN format.'';
				}

				const payload = {
					''Action'': ''AssumeRole'',
					''Version'': ''2011-06-15'',
					''RoleArn'': AWS.params.role_arn,
					''RoleSessionName'': match[1] + ''Session'',
				};

				credentials = AWS.getField(AWS.request(''POST'', AWS.params.sts_region, ''sts'', AWS.prepareParams(payload), ''''), ''AssumeRoleResponse.AssumeRoleResult.Credentials'');

				[''AccessKeyId'', ''SecretAccessKey'', ''SessionToken''].forEach(function (field) {
					if (typeof credentials !== ''object'' || typeof credentials[field] === ''undefined'' || credentials[field] === '''') {
						throw ''Required credentials are not set: "'' + field + ''".'';
					};
					AWS.params[field] = credentials[field];
				});
				break;
			default:
				AWS.params[''auth_type''] = ''access_key'';
				[''AccessKeyId'', ''SecretAccessKey''].forEach(function (field) {
					if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
						throw ''Required param is not set: "'' + field + ''".'';
					}
					AWS.params[field] = params[field];
				});
		}
		[''region'', ''bucket_name'', ''filter_id''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: "'' + field + ''".'';
			}
			AWS.params[field] = params[field];
		});

		updateInterval = AWS.checkNumber(''{$AWS.S3.UPDATE.INTERVAL}'');

		if (updateInterval > 86400 || updateInterval < 1) {
			throw ''Incorrect "update interval" parameter given: '' + updateInterval + '' Must be between 1 and 86400 seconds.'';
		}
	},

	sign: function (key, message) {
		var hex = hmac(''sha256'', key, message);

		if ((hex.length % 2) === 1) {
			throw ''Invalid length of a hex string!'';
		}

		var result = new Int8Array(hex.length / 2);
		for (var i = 0, b = 0; i < hex.length; i += 2, b++) {
			result[b] = parseInt(hex.substring(i, i + 2), 16);
		}

		return result;
	},

	renderMetricQuery: function (period, bucket_name, filter_id) {
		var metrics_list = [
			''AllRequests:Count:Sum'',
			''GetRequests:Count:Sum'',
			''PutRequests:Count:Sum'',
			''DeleteRequests:Count:Sum'',
			''HeadRequests:Count:Sum'',
			''PostRequests:Count:Sum'',
			''SelectRequests:Count:Sum'',
			''SelectBytesScanned:Bytes:Average'',
			''SelectBytesReturned:Bytes:Average'',
			''ListRequests:Count:Sum'',
			''BytesDownloaded:Bytes:Average'',
			''BytesUploaded:Bytes:Average'',
			''4xxErrors:Count:Average'',
			''5xxErrors:Count:Average'',
			''TotalRequestLatency:Milliseconds:p90'',
			''FirstByteLatency:Milliseconds:p90'',
			''ReplicationLatency:Seconds:Average'',
			''BytesPendingReplication:Bytes:Average'',
			''OperationsPendingReplication:Count:Average'',

		];

		var metric_payload = [];
		metrics_list.forEach(function (metric, index) {
			var parts = metric.split('':'', 3);
			metric_payload.push({
				''Id'': ''m'' + index,
				''MetricStat'': {
					''Metric'': {
						''MetricName'': parts[0],
						''Namespace'': ''AWS/S3'',
						''Dimensions'': [
							{
								''Name'': ''BucketName'',
								''Value'': bucket_name
							},
							{
								''Name'': ''FilterId'',
								''Value'': filter_id
							}
						]
					},
					''Period'': period,
					''Stat'': parts[2],
					''Unit'': parts[1]
				}
			});
		});

		return metric_payload;

	},
	prepareParams: function (params) {
		var result = [];

		Object.keys(params).sort().forEach(function (key) {
			if (typeof params[key] !== ''object'') {
				result.push(key + ''='' + encodeURIComponent(params[key]));
			}
			else {
				result.push(prepareObject(key, params[key]));
			}
		});

		return result.join(''&'');
	},

	request: function (method, region, service, params, data) {
		if (typeof data === ''undefined'' || data === null) {
			data = '''';
		}
		else {
			data = JSON.stringify(data)
		}

		var amzdate = (new Date()).toISOString().replace(/\\.\\d+Z/, ''Z'').replace(/[-:]/g, ''''),
			date = amzdate.replace(/T\\d+Z/, ''''),
			host = service + ''.'' + region + ''.amazonaws.com'',
			canonical_uri = ''/'';

		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			token = AWS.params.auth_type === ''role_base'' ? AWS.params.Token : AWS.params.SessionToken;
			var canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'' + ''x-amz-security-token:'' + token + ''\\n'',
				signed_headers = ''content-encoding;host;x-amz-date;x-amz-security-token'';
		}
		else {
			var canonical_headers = ''content-encoding:amz-1.0\\n'' + ''host:'' + host + ''\\n'' + ''x-amz-date:'' + amzdate + ''\\n'',
				signed_headers = ''content-encoding;host;x-amz-date'';
		}

		var canonical_request = method + ''\\n'' + canonical_uri + ''\\n'' + params + ''\\n'' + canonical_headers + ''\\n'' + signed_headers + ''\\n'' + sha256(data),
			credential_scope = date + ''/'' + region + ''/'' + service + ''/'' + ''aws4_request'',
			request_string = ''AWS4-HMAC-SHA256'' + ''\\n'' + amzdate + ''\\n'' + credential_scope + ''\\n'' + sha256(canonical_request),
			key = AWS.sign(''AWS4'' + AWS.params.SecretAccessKey, date),
			key = AWS.sign(key, region),
			key = AWS.sign(key, service),
			key = AWS.sign(key, ''aws4_request''),
			request = new HttpRequest(),
			url = ''https://'' + host + canonical_uri + ''?'' + params;

		if (typeof AWS.params.proxy !== ''undefined'' && AWS.params.proxy !== '''') {
			request.setProxy(AWS.params.proxy);
		}
		request.addHeader(''x-amz-date: '' + amzdate);
		request.addHeader(''X-Amz-Target: GraniteServiceVersion20100801.GetMetricData'')
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Content-Type: application/json'');
		request.addHeader(''Content-Encoding: amz-1.0'');
		request.addHeader(''Authorization: '' + ''AWS4-HMAC-SHA256 Credential='' + AWS.params.AccessKeyId + ''/'' + credential_scope + '', '' + ''SignedHeaders='' + signed_headers + '', '' + ''Signature='' + hmac(''sha256'', key, request_string));
		if (AWS.params.auth_type === ''role_base'' || AWS.params.auth_type === ''assume_role_metadata'' || (AWS.params.auth_type === ''assume_role'' & !params.includes(''AssumeRole''))) {
			request.addHeader(''X-Amz-Security-Token: '' + token);
		}

		Zabbix.log(4, ''[ AWS S3 ] Sending request: '' + url);
		response = request.post(url, data);
		Zabbix.log(4, ''[ AWS S3 ] Received response with status code '' + request.getStatus() + '': '' + response);

		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}

		try {
			response = JSON.parse(response);
		}
		catch (error) {
			try {
				response = JSON.parse(XML.toJson(response));
			}
			catch (error) {
				throw ''Failed to parse response received from AWS CloudWatch API. Check debug log for more information.'';
			}
		}

		return response;
	},

	getMetricsData: function () {
		var payload = {},
			end_time = Math.floor((new Date().getTime()) / 1000),
			start_time = end_time - updateInterval;

		payload[''StartTime''] = start_time;
		payload[''EndTime''] = end_time;
		payload[''ScanBy''] = ''TimestampDescending'';
		payload[''MetricDataQueries''] = AWS.renderMetricQuery(60, AWS.params.bucket_name, AWS.params.filter_id);
		result = AWS.request(''POST'', AWS.params.region, ''monitoring'', '''', payload);
		if (typeof result !== ''object'' || typeof result.MetricDataResults !== ''object'') {
			throw ''Cannot get metrics data from AWS CloudWatch API. Check debug log for more information.'';
		}

		return result.MetricDataResults;
	}
};

try {
	AWS.setParams(JSON.parse(value));

	return JSON.stringify(AWS.getMetricsData());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ AWS S3 ] ERROR: '' + error);

	return JSON.stringify({ ''error'': error });
}','','0','','','','','2',NULL,'Get bucket request metrics filter: ''{#AWS.S3.FILTER.ID.NAME}''.
Full metrics list related to S3: https://docs.aws.amazon.com/AmazonS3/latest/userguide/metrics-dimensions.html','0','7d','0','',NULL,'15s','','','','200','1','0','','','0','0','0','0','0','0','0','eabbd51547cb4a0484182d42601728c3','0','2','0'),
('61401','21','','10531','Storage account [{#NAME}]: Get data','azure.get.storage.acc[{#NAME}]','1m','0','0','0','4','','','','',NULL,NULL,E'var AzureStorage = {
	params: {},

	setParams: function (params) {
		[''token'', ''id''].forEach(function (field) {
			if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
				throw ''Required param is not set: '' + field + ''.'';
			}
		});

		AzureStorage.params = params;
	},

	request: function (url) {
		var response, request = new HttpRequest();
		if (typeof AzureStorage.params.proxy !== ''undefined'' && AzureStorage.params.proxy !== '''') {
			request.setProxy(AzureStorage.params.proxy);
		}
		request.addHeader(''Accept: application/json'');
		request.addHeader(''Authorization: Bearer '' + AzureStorage.params.token);
		Zabbix.log(4, ''[ Azure ] Sending request: '' + url);
		response = request.get(url);
		if (request.getStatus() !== 200) {
			throw ''Request failed with status code '' + request.getStatus() + '': '' + response;
		}
		try {
			return JSON.parse(response);
		}
		catch (error) {
			throw ''Failed to parse response received from API.'';
		}
	},

	getField: function (data, path) {
		var steps = path.split(''.'');
		for (var i = 0; i < steps.length; i++) {
			var step = steps[i];
			if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
				throw ''Required field was not found: '' + path + '' input data: '' + JSON.stringify(data);
			}

			data = data[step];
		}

		return data;
	},

	getMetricsData: function () {
		var data = {};
		start_date = new Date((new Date().getTime()) - 4200000).toISOString().replace(/\\.\\d+/, '''');
		end_date = new Date((new Date().getTime()) - 600000).toISOString().replace(/\\.\\d+/, '''');
		endpoints = {
			''tableServices'': ''/tableServices/default/providers/Microsoft.Insights/metrics?metricnames=TableCapacity,TableCount,TableEntityCount,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan='' + encodeURIComponent(start_date) + ''/'' + encodeURIComponent(end_date),
			''blobServices'': ''/blobServices/default/providers/Microsoft.Insights/metrics?metricnames=BlobCapacity,BlobCount,ContainerCount,IndexCapacity,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan='' + encodeURIComponent(start_date) + ''/'' + encodeURIComponent(end_date),
			''fileServices'': ''/fileServices/default/providers/Microsoft.Insights/metrics?metricnames=FileCapacity,FileCount,FileShareCount,FileShareSnapshotCount,FileShareSnapshotSize,FileShareCapacityQuota,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan='' + encodeURIComponent(start_date) + ''/'' + encodeURIComponent(end_date),
			''storageAccount'': ''/providers/Microsoft.Insights/metrics?metricnames=UsedCapacity,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan='' + encodeURIComponent(start_date) + ''/'' + encodeURIComponent(end_date),
			''queueServices'': ''/queueServices/default/providers/Microsoft.Insights/metrics?metricnames=QueueCapacity,QueueCount,QueueMessageCount,Transactions,Ingress,Egress,SuccessServerLatency,SuccessE2ELatency,Availability&api-version=2021-05-01&interval=PT1H&timespan='' + encodeURIComponent(start_date) + ''/'' + encodeURIComponent(end_date)
		};

		Object.keys(endpoints).forEach(function (field) {
			data[field] = {};
			metrics = AzureStorage.request(''https://management.azure.com'' + AzureStorage.params.id + endpoints[field]);

			if (!metrics.hasOwnProperty(''value'')) {
				throw ''Failed getting required field. Check debug log for more information.'';
			}

			for (k in metrics.value) {
				key = AzureStorage.getField(metrics.value[k], ''name.value'')
				if (metrics.value[k].timeseries.length === 0) {
					metrics.value[k].timeseries.push({ ''data'': [''nodata''] })
				}
				data[field][key] = AzureStorage.getField(metrics.value[k], ''timeseries.0.data.0'');
			}
		});
		return data
	}

};

try {
	AzureStorage.setParams(JSON.parse(value));
	return JSON.stringify(AzureStorage.getMetricsData());
}
catch (error) {
	error += (String(error).endsWith(''.'')) ? '''' : ''.'';
	Zabbix.log(3, ''[ Azure ] ERROR: '' + error);
	return JSON.stringify({ ''error'': error });
}','','0','','','','','2',NULL,'The HTTP API endpoint that returns storage metrics with the name `[{#NAME}]`.','0','7d','0','',NULL,'{$AZURE.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','3361508a601748f5aca339f952430889','0','2','0'),
('61461','19','','10575','GCP Cloud SQL PostgreSQL: Databases discovery','gcp.cloudsql.pgsql.db.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','','','','','1',NULL,'Databases discovery for the particular PostgreSQL instance.','0','7d','1','',NULL,'{$GCP.DATA.TIMEOUT}','https://sqladmin.googleapis.com/sql/v1beta4/projects/{$GCP.PROJECT.ID}/instances/{HOST.NAME}/databases','','','200','1','0','','Content-Type: application/json
Authorization: Bearer {$GCP.AUTH.TOKEN}','0','0','0','0','0','0','0','090d05a647384858a8b9efe5502c0a76','0','2','0'),
('61463','21','','10575','Database [{#PGSQL.DB.NAME}]: Metrics raw','gcp.cloudsql.pgsql.db.metrics.get[{#PGSQL.DB.NAME}]','{$GCP.TIME.WINDOW}','0','0','0','4','','','','',NULL,NULL,E'var base_path = ''cloudsql.googleapis.com/database/postgresql/'',
	obj = {};

function checkParams(params) {
	[''project_id'', ''time_window'', ''database_id'', ''token''].forEach(function (field) {
		if (typeof params !== ''object'' || typeof params[field] === ''undefined'' || params[field] === '''') {
			throw ''Required param is not set: '' + field + ''.'';
		}
	});
	if (!params.time_window.match(/^[0-9]+(m|h)$/)) {
		throw ''Incorrect update interval for parameter  time_window. Valid ranges 1m-23h.'';
	}
	return params;
}

function getField(data, path) {
	var steps = path.split(''.'');

	for (var i = 0; i < steps.length; i++) {
		var step = steps[i];

		if (typeof data !== ''object'' || typeof data[step] === ''undefined'') {
			throw ''Required field "'' + path + ''" is not present in data received.'';
		}
		data = data[step];
	}
	return data;
}

function getHttpData(url, token, body) {
	var request = new HttpRequest();
	if (typeof params.proxy !== ''undefined'' && params.proxy !== '''') {
		request.setProxy(params.proxy);
	};
	request.addHeader(''Authorization: Bearer '' + token);
	request.addHeader(''Content-Type: application/json'');

	var response = request.post(url, JSON.stringify(body));

	Zabbix.log(4, ''[ GCP API ] [ '' + url + '' ] Received response with status code '' + request.getStatus() + '': '' + response);

	if (response !== null) {
		try {
			response = JSON.parse(response);
		}
		catch (error) {
			throw ''Failed to parse response received from GCP API. Check debug log for more information.'';
		}
	}

	if (typeof response !== ''object'' || response === null) {
		throw ''Cannot process response data: received data is not an object. Check debug log for more information.'';
	}

	if (request.getStatus() !== 200) {
		if (typeof (response.error && response.error.message) !== ''undefined'') {
			throw response.error.message;
		}
		else {
			throw ''Failed to receive data: invalid response status code. Check debug log for more information.'';
		}
	}
	return response;
};

function singleMetrics(tsd) {
	var result = {};

	for (i in tsd) {
		result[getField(tsd[i], ''labelValues.4.stringValue'')] = getField(tsd[i], ''pointData.0.values.0.int64Value'');
	}
	return result;
}

var params = checkParams(JSON.parse(value)),
	filter = '' | within '' + params.time_window + " | filter database_id =''" + params.database_id + "''" + " | filter database =''" + params.database_name + "''",
	j_filter = filter + '' | join'',
	url = ''https://monitoring.googleapis.com/v3/projects/'' + params.project_id + ''/timeSeries:query'',
	common_paths = [''deadlock_count'', ''tuples_returned_count'', ''tuples_fetched_count''],
	common_raw = getHttpData(url, params.token, { query: ''{'' + common_paths.map(function (path) { return base_path + path; }).join('';'') + ''}'' + j_filter }),
	keys = getField(common_raw, ''timeSeriesDescriptor.pointDescriptors''),
	values = getField(common_raw, ''timeSeriesData.0.pointData.0.values''),
	re = /(^t_\\d+\\.value\\.)/g;

for (i in keys) {
	var value_types = [''int64Value'', ''doubleValue'', ''stringValue'', ''boolValue''];

	for (v in value_types) {
		if (typeof values[i][value_types[v]] !== ''undefined'') {
			obj[getField(keys[i], ''key'').replace(re, '''')] = values[i][value_types[v]];
		}
	}
}

var single_paths = [''transaction_count'', ''blocks_read_count'', ''tuples_processed_count'', ''tuple_size''],
	single_queries = single_paths.map(function (path) { return { query: base_path + path + filter }; });

for (q in single_queries) {
	raw = getHttpData(url, params.token, single_queries[q]);
	obj = Object.assign(obj, singleMetrics(getField(raw, ''timeSeriesData'')));
}

return JSON.stringify(obj);','','0','','','','','2',NULL,'PostgreSQL metrics in raw format.','0','7d','0','',NULL,'{$GCP.DATA.TIMEOUT}','','','','200','1','0','','','0','0','0','0','0','0','0','7a1df30ae0c443839fe625142aea61b2','0','2','0'),
('61505','19','','10587','Server [{#SERVER_ID}]:[{#SERVER_NAME}]: Status','openstack.nova.server.status.get[{#SERVER_ID}]','{$OPENSTACK.NOVA.INTERVAL.SERVERS}','31d','365d','0','3','','','','',NULL,'1106','','','0','','','','','2',NULL,'Server status.','0','7d','0','',NULL,'10s','{$OPENSTACK.NOVA.SERVICE.URL}/servers/{#SERVER_ID}','','','200','1','0','{$OPENSTACK.HTTP.PROXY}','X-Auth-Token: {$OPENSTACK.TOKEN}','0','0','0','0','0','0','0','84fd4be0c5f84744ac6bd93d4d4e8f0e','0','2','0'),
('61522','21','','10617','Block volumes discovery','oci.block.volumes.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,E'function validateZabbixParams(requiredParams, allParams) {
	requiredParams.forEach(function (field) {
		if (typeof allParams !== ''object'' || typeof allParams[field] === ''undefined'' || allParams[field] === '''') {
			throw ''Required param is not set: '' + field + ''.'';
		}
	});
}

function prepareCompartments(compartments, tenancy) {
	if (typeof compartments === ''undefined'' || compartments === '''') {
		return [tenancy];
	} else {
		return compartments.split('','')
	}
}

function OCI(service, action, params) {
	this.zabbixLogPrefix = ''[ OCI ] [ '' + service + '' ] [ '' + action + '' ]'';
	this.request = new HttpRequest();

	this.hash = function (string) {
		return sha256(string);
	};

	this.sign = function (string) {
		return sign(''sha256'', params[''private_key''], string);
	};

	this.encode = function (hash) {
		const hexArr = hash.match(/.{1,2}/g);
		var uInt8Array = new Uint8Array(hexArr.length);
		hexArr.forEach(function (hex, idx) {
			uInt8Array[idx] = parseInt(hex, 16);
		});
		return btoa(uInt8Array);
	};

	this.getDate = function () {
		const weekdayShortList = [''Sun'', ''Mon'', ''Tue'', ''Wed'', ''Thu'', ''Fri'', ''Sat''];
		const monthShortList = [''jan'', ''feb'', ''mar'', ''apr'', ''may'', ''jun'', ''jul'', ''aug'', ''sep'', ''oct'', ''nov'', ''dec''];
		const today = new Date();
		return weekdayShortList[today.getUTCDay()] + '', '' + today.getUTCDate() + '' '' + monthShortList[today.getUTCMonth()] + '' '' + today.getUTCFullYear() + '' '' + today.getUTCHours() + '':'' + today.getUTCMinutes() + '':'' + today.getUTCSeconds() + '' GMT'';
	};

	this.executeRequest = function (httpMethod, apiPath, apiParams, mql, namespace) {
		var headers = ''(request-target) date host'';
		const contentTypeHeader = ''content-type: application/json'';
		const dateHeader = ''date: '' + this.getDate();
		const hostHeader = ''host: '' + params[''api_host''];
		const requestTarget = ''(request-target): '' + httpMethod + '' '' + apiPath + apiParams;
		var signingString = requestTarget + ''\\n'' + dateHeader + ''\\n'' + hostHeader;
		var reqHeaders = [contentTypeHeader, dateHeader];

		if (httpMethod === ''post'') {
			var body = JSON.stringify({
				''namespace'': namespace,
				''query'': mql
			});
			headers = headers + '' x-content-sha256 content-type content-length'';
			const bodyHeader = ''x-content-sha256: '' + this.encode(this.hash(body));
			const bodyLengthHeader = ''content-length: '' + body.length;
			signingString = signingString + ''\\n'' + bodyHeader + ''\\n'' + contentTypeHeader + ''\\n'' + bodyLengthHeader;
			reqHeaders.push(bodyHeader, bodyLengthHeader);
		}

		const signature = this.encode(this.sign(signingString));

		reqHeaders.push(''Authorization: Signature version="1",keyId="'' + params[''tenancy_ocid''] + ''/'' + params[''user_ocid''] + ''/'' + params[''fingerprint''] + ''",algorithm="rsa-sha256",headers="'' + headers + ''",signature="'' + signature + ''"'');
		for (var header = 0, headerLength = reqHeaders.length; header < headerLength; header++) {
			this.request.addHeader(reqHeaders[header]);
		}

		if (params[''http_proxy'']) {
			this.request.setProxy(params[''http_proxy'']);
			Zabbix.log(4, this.zabbixLogPrefix + '' Using http proxy: '' + params[''http_proxy'']);
		}

		if (httpMethod === ''post'') {
			var apiRateLimitExceeded = false;
			do {
				const response = this.request.post(''https://'' + params[''api_host''] + apiPath + apiParams, body);

				try {
					if (JSON.parse(response)[''code''] === ''TooManyRequests'') {

						apiRateLimitExceeded = true;
						Zabbix.sleep(1000);
					} else {
						apiRateLimitExceeded = false;
					}
				} catch (error) {
					Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the response: '' + JSON.stringify(response));
					throw ''Could not parse the response. See logs for more information.'';
				}
			} while (apiRateLimitExceeded);
		} else {
			const response = this.request.get(''https://'' + params[''api_host''] + apiPath + apiParams);
		}

		this.request.clearHeader();

		if (this.request.getStatus() === parseInt(params[''http_status_code''])) {
			return response;
		} else {
			Zabbix.log(3, this.zabbixLogPrefix + '' Unexpected HTTP response code: '' + this.request.getStatus());
			throw ''Unexpected HTTP response code: '' + this.request.getStatus();
		}
	};

	this.extractData = function (httpMethod, data, keys, compartment) {
		try {
			data = JSON.parse(data);
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the received JSON object: '' + data);
			throw ''Could not parse received JSON object. See logs for more information.'';
		}

		if (typeof keys == ''object'') {
			var returnBuffer = [];
			for (var dataObj = 0, dataLength = data.length; dataObj < dataLength; dataObj++) {

				var objectBuffer = {};
				for (var key = 0, keysLength = keys.length; key < keysLength; key++) {
					if (data[dataObj][keys[key]] || data[dataObj][keys[key]] == null) {
						objectBuffer[keys[key].match(/^[a-z]+$|[A-Z][a-z]+$/)[0].toLowerCase()] = data[dataObj][keys[key]];
					} else {
						Zabbix.log(3, this.zabbixLogPrefix + '' Received an unexpected JSON object. Could not get value for key "'' + keys[key] + ''" in JSON: '' + JSON.stringify(data[dataObj]));
						throw ''Received an unexpected JSON object. See logs for more information.'';
					}
				}
				if (typeof compartment != ''undefined'' && compartment != '''') objectBuffer[''compartment''] = compartment;
				returnBuffer.push(objectBuffer);
			}
			return returnBuffer;
		}

		try {
			if (httpMethod === ''get'') {
				return data[keys];
			} else {
				if (data.length === 0) {
					return 0;
				}
				data = data[0][keys];
				return data[data.length - 1][''value''];
			}
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not find key "'' + keys + ''" in JSON: '' + JSON.stringify(data));
			throw ''Could not find required key in JSON object. See logs for more information.'';
		}
	};
}


const params = JSON.parse(value);
validateZabbixParams([''tenancy_ocid'', ''user_ocid'', ''private_key'', ''fingerprint'', ''api_host'', ''http_status_code''], params);
var oci = new OCI(''Block volume'', ''Get volumes'', params);
var compartments = prepareCompartments(params[''compartment_ocid''], params[''tenancy_ocid'']);

var buffer = [];
compartments.forEach(function (compartment) {
	Array.prototype.push.apply(buffer, oci.extractData(''get'', oci.executeRequest(''get'', ''/20160918/volumes'', ''?compartmentId='' + encodeURIComponent(compartment)), [''id'', ''displayName'', ''lifecycleState'', ''freeformTags''], compartment));
})
return JSON.stringify(buffer);','','0','','','','','1',NULL,'Discover block volumes.','0','7d','1','',NULL,'10s','','','','200','1','0','','','0','0','0','0','0','0','0','72fa6dfedfd8497298c5930f48594e72','0','2','0'),
('61523','21','','10617','Boot volumes discovery','oci.boot.volumes.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,E'function validateZabbixParams(requiredParams, allParams) {
	requiredParams.forEach(function (field) {
		if (typeof allParams !== ''object'' || typeof allParams[field] === ''undefined'' || allParams[field] === '''') {
			throw ''Required param is not set: '' + field + ''.'';
		}
	});
}

function prepareCompartments(compartments, tenancy) {
	if (typeof compartments === ''undefined'' || compartments === '''') {
		return [tenancy];
	} else {
		return compartments.split('','')
	}
}

function OCI(service, action, params) {
	this.zabbixLogPrefix = ''[ OCI ] [ '' + service + '' ] [ '' + action + '' ]'';
	this.request = new HttpRequest();

	this.hash = function (string) {
		return sha256(string);
	};

	this.sign = function (string) {
		return sign(''sha256'', params[''private_key''], string);
	};

	this.encode = function (hash) {
		const hexArr = hash.match(/.{1,2}/g);
		var uInt8Array = new Uint8Array(hexArr.length);
		hexArr.forEach(function (hex, idx) {
			uInt8Array[idx] = parseInt(hex, 16);
		});
		return btoa(uInt8Array);
	};

	this.getDate = function () {
		const weekdayShortList = [''Sun'', ''Mon'', ''Tue'', ''Wed'', ''Thu'', ''Fri'', ''Sat''];
		const monthShortList = [''jan'', ''feb'', ''mar'', ''apr'', ''may'', ''jun'', ''jul'', ''aug'', ''sep'', ''oct'', ''nov'', ''dec''];
		const today = new Date();
		return weekdayShortList[today.getUTCDay()] + '', '' + today.getUTCDate() + '' '' + monthShortList[today.getUTCMonth()] + '' '' + today.getUTCFullYear() + '' '' + today.getUTCHours() + '':'' + today.getUTCMinutes() + '':'' + today.getUTCSeconds() + '' GMT'';
	};

	this.executeRequest = function (httpMethod, apiPath, apiParams, mql, namespace) {
		var headers = ''(request-target) date host'';
		const contentTypeHeader = ''content-type: application/json'';
		const dateHeader = ''date: '' + this.getDate();
		const hostHeader = ''host: '' + params[''api_host''];
		const requestTarget = ''(request-target): '' + httpMethod + '' '' + apiPath + apiParams;
		var signingString = requestTarget + ''\\n'' + dateHeader + ''\\n'' + hostHeader;
		var reqHeaders = [contentTypeHeader, dateHeader];

		if (httpMethod === ''post'') {
			var body = JSON.stringify({
				''namespace'': namespace,
				''query'': mql
			});
			headers = headers + '' x-content-sha256 content-type content-length'';
			const bodyHeader = ''x-content-sha256: '' + this.encode(this.hash(body));
			const bodyLengthHeader = ''content-length: '' + body.length;
			signingString = signingString + ''\\n'' + bodyHeader + ''\\n'' + contentTypeHeader + ''\\n'' + bodyLengthHeader;
			reqHeaders.push(bodyHeader, bodyLengthHeader);
		}

		const signature = this.encode(this.sign(signingString));

		reqHeaders.push(''Authorization: Signature version="1",keyId="'' + params[''tenancy_ocid''] + ''/'' + params[''user_ocid''] + ''/'' + params[''fingerprint''] + ''",algorithm="rsa-sha256",headers="'' + headers + ''",signature="'' + signature + ''"'');
		for (var header = 0, headerLength = reqHeaders.length; header < headerLength; header++) {
			this.request.addHeader(reqHeaders[header]);
		}

		if (params[''http_proxy'']) {
			this.request.setProxy(params[''http_proxy'']);
			Zabbix.log(4, this.zabbixLogPrefix + '' Using http proxy: '' + params[''http_proxy'']);
		}

		if (httpMethod === ''post'') {
			var apiRateLimitExceeded = false;
			do {
				const response = this.request.post(''https://'' + params[''api_host''] + apiPath + apiParams, body);

				try {
					if (JSON.parse(response)[''code''] === ''TooManyRequests'') {

						apiRateLimitExceeded = true;
						Zabbix.sleep(1000);
					} else {
						apiRateLimitExceeded = false;
					}
				} catch (error) {
					Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the response: '' + JSON.stringify(response));
					throw ''Could not parse the response. See logs for more information.'';
				}
			} while (apiRateLimitExceeded);
		} else {
			const response = this.request.get(''https://'' + params[''api_host''] + apiPath + apiParams);
		}

		this.request.clearHeader();

		if (this.request.getStatus() === parseInt(params[''http_status_code''])) {
			return response;
		} else {
			Zabbix.log(3, this.zabbixLogPrefix + '' Unexpected HTTP response code: '' + this.request.getStatus());
			throw ''Unexpected HTTP response code: '' + this.request.getStatus();
		}
	};

	this.extractData = function (httpMethod, data, keys, compartment) {
		try {
			data = JSON.parse(data);
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the received JSON object: '' + data);
			throw ''Could not parse received JSON object. See logs for more information.'';
		}

		if (typeof keys == ''object'') {
			var returnBuffer = [];
			for (var dataObj = 0, dataLength = data.length; dataObj < dataLength; dataObj++) {

				var objectBuffer = {};
				for (var key = 0, keysLength = keys.length; key < keysLength; key++) {
					if (data[dataObj][keys[key]] || data[dataObj][keys[key]] == null) {
						objectBuffer[keys[key].match(/^[a-z]+$|[A-Z][a-z]+$/)[0].toLowerCase()] = data[dataObj][keys[key]];
					} else {
						Zabbix.log(3, this.zabbixLogPrefix + '' Received an unexpected JSON object. Could not get value for key "'' + keys[key] + ''" in JSON: '' + JSON.stringify(data[dataObj]));
						throw ''Received an unexpected JSON object. See logs for more information.'';
					}
				}
				if (typeof compartment != ''undefined'' && compartment != '''') objectBuffer[''compartment''] = compartment;
				returnBuffer.push(objectBuffer);
			}
			return returnBuffer;
		}

		try {
			if (httpMethod === ''get'') {
				return data[keys];
			} else {
				if (data.length === 0) {
					return 0;
				}
				data = data[0][keys];
				return data[data.length - 1][''value''];
			}
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not find key "'' + keys + ''" in JSON: '' + JSON.stringify(data));
			throw ''Could not find required key in JSON object. See logs for more information.'';
		}
	};
}


const params = JSON.parse(value);
validateZabbixParams([''tenancy_ocid'', ''user_ocid'', ''private_key'', ''fingerprint'', ''api_host'', ''http_status_code''], params);
var oci = new OCI(''Boot volume'', ''Get volumes'', params);
var compartments = prepareCompartments(params[''compartment_ocid''], params[''tenancy_ocid'']);

var buffer = [];
compartments.forEach(function (compartment) {
	Array.prototype.push.apply(buffer, oci.extractData(''get'', oci.executeRequest(''get'', ''/20160918/bootVolumes'', ''?compartmentId='' + encodeURIComponent(compartment)), [''id'', ''displayName'', ''lifecycleState'', ''freeformTags''], compartment));
})
return JSON.stringify(buffer);','','0','','','','','1',NULL,'Discover boot volumes.','0','7d','1','',NULL,'10s','','','','200','1','0','','','0','0','0','0','0','0','0','90982afdf2f9430bb1c5a3755d8e6c6d','0','2','0'),
('61524','21','','10617','Compute instances discovery','oci.compute.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,E'function validateZabbixParams(requiredParams, allParams) {
	requiredParams.forEach(function (field) {
		if (typeof allParams !== ''object'' || typeof allParams[field] === ''undefined'' || allParams[field] === '''') {
			throw ''Required param is not set: '' + field + ''.'';
		}
	});
}

function prepareCompartments(compartments, tenancy) {
	if (typeof compartments === ''undefined'' || compartments === '''') {
		return [tenancy];
	} else {
		return compartments.split('','')
	}
}

function OCI(service, action, params) {
	this.zabbixLogPrefix = ''[ OCI ] [ '' + service + '' ] [ '' + action + '' ]'';
	this.request = new HttpRequest();

	this.hash = function (string) {
		return sha256(string);
	};

	this.sign = function (string) {
		return sign(''sha256'', params[''private_key''], string);
	};

	this.encode = function (hash) {
		const hexArr = hash.match(/.{1,2}/g);
		var uInt8Array = new Uint8Array(hexArr.length);
		hexArr.forEach(function (hex, idx) {
			uInt8Array[idx] = parseInt(hex, 16);
		});
		return btoa(uInt8Array);
	};

	this.getDate = function () {
		const weekdayShortList = [''Sun'', ''Mon'', ''Tue'', ''Wed'', ''Thu'', ''Fri'', ''Sat''];
		const monthShortList = [''jan'', ''feb'', ''mar'', ''apr'', ''may'', ''jun'', ''jul'', ''aug'', ''sep'', ''oct'', ''nov'', ''dec''];
		const today = new Date();
		return weekdayShortList[today.getUTCDay()] + '', '' + today.getUTCDate() + '' '' + monthShortList[today.getUTCMonth()] + '' '' + today.getUTCFullYear() + '' '' + today.getUTCHours() + '':'' + today.getUTCMinutes() + '':'' + today.getUTCSeconds() + '' GMT'';
	};

	this.executeRequest = function (httpMethod, apiPath, apiParams, mql, namespace) {
		var headers = ''(request-target) date host'';
		const contentTypeHeader = ''content-type: application/json'';
		const dateHeader = ''date: '' + this.getDate();
		const hostHeader = ''host: '' + params[''api_host''];
		const requestTarget = ''(request-target): '' + httpMethod + '' '' + apiPath + apiParams;
		var signingString = requestTarget + ''\\n'' + dateHeader + ''\\n'' + hostHeader;
		var reqHeaders = [contentTypeHeader, dateHeader];

		if (httpMethod === ''post'') {
			var body = JSON.stringify({
				''namespace'': namespace,
				''query'': mql
			});
			headers = headers + '' x-content-sha256 content-type content-length'';
			const bodyHeader = ''x-content-sha256: '' + this.encode(this.hash(body));
			const bodyLengthHeader = ''content-length: '' + body.length;
			signingString = signingString + ''\\n'' + bodyHeader + ''\\n'' + contentTypeHeader + ''\\n'' + bodyLengthHeader;
			reqHeaders.push(bodyHeader, bodyLengthHeader);
		}

		const signature = this.encode(this.sign(signingString));

		reqHeaders.push(''Authorization: Signature version="1",keyId="'' + params[''tenancy_ocid''] + ''/'' + params[''user_ocid''] + ''/'' + params[''fingerprint''] + ''",algorithm="rsa-sha256",headers="'' + headers + ''",signature="'' + signature + ''"'');
		for (var header = 0, headerLength = reqHeaders.length; header < headerLength; header++) {
			this.request.addHeader(reqHeaders[header]);
		}

		if (params[''http_proxy'']) {
			this.request.setProxy(params[''http_proxy'']);
			Zabbix.log(4, this.zabbixLogPrefix + '' Using http proxy: '' + params[''http_proxy'']);
		}

		if (httpMethod === ''post'') {
			var apiRateLimitExceeded = false;
			do {
				const response = this.request.post(''https://'' + params[''api_host''] + apiPath + apiParams, body);

				try {
					if (JSON.parse(response)[''code''] === ''TooManyRequests'') {

						apiRateLimitExceeded = true;
						Zabbix.sleep(1000);
					} else {
						apiRateLimitExceeded = false;
					}
				} catch (error) {
					Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the response: '' + JSON.stringify(response));
					throw ''Could not parse the response. See logs for more information.'';
				}
			} while (apiRateLimitExceeded);
		} else {
			const response = this.request.get(''https://'' + params[''api_host''] + apiPath + apiParams);
		}

		this.request.clearHeader();

		if (this.request.getStatus() === parseInt(params[''http_status_code''])) {
			return response;
		} else {
			Zabbix.log(3, this.zabbixLogPrefix + '' Unexpected HTTP response code: '' + this.request.getStatus());
			throw ''Unexpected HTTP response code: '' + this.request.getStatus();
		}
	};

	this.extractData = function (httpMethod, data, keys, compartment) {
		try {
			data = JSON.parse(data);
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the received JSON object: '' + data);
			throw ''Could not parse received JSON object. See logs for more information.'';
		}

		if (typeof keys == ''object'') {
			var returnBuffer = [];
			for (var dataObj = 0, dataLength = data.length; dataObj < dataLength; dataObj++) {

				var objectBuffer = {};
				for (var key = 0, keysLength = keys.length; key < keysLength; key++) {
					if (data[dataObj][keys[key]] || data[dataObj][keys[key]] == null) {
						objectBuffer[keys[key].match(/^[a-z]+$|[A-Z][a-z]+$/)[0].toLowerCase()] = data[dataObj][keys[key]];
					} else {
						Zabbix.log(3, this.zabbixLogPrefix + '' Received an unexpected JSON object. Could not get value for key "'' + keys[key] + ''" in JSON: '' + JSON.stringify(data[dataObj]));
						throw ''Received an unexpected JSON object. See logs for more information.'';
					}
				}
				if (typeof compartment != ''undefined'' && compartment != '''') objectBuffer[''compartment''] = compartment;
				returnBuffer.push(objectBuffer);
			}
			return returnBuffer;
		}

		try {
			if (httpMethod === ''get'') {
				return data[keys];
			} else {
				if (data.length === 0) {
					return 0;
				}
				data = data[0][keys];
				return data[data.length - 1][''value''];
			}
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not find key "'' + keys + ''" in JSON: '' + JSON.stringify(data));
			throw ''Could not find required key in JSON object. See logs for more information.'';
		}
	};
}


const params = JSON.parse(value);
validateZabbixParams([''tenancy_ocid'', ''user_ocid'', ''private_key'', ''fingerprint'', ''api_host'', ''http_status_code''], params);
var oci = new OCI(''Compute'', ''Get instances'', params);
var compartments = prepareCompartments(params[''compartment_ocid''], params[''tenancy_ocid'']);

var buffer = [];
compartments.forEach(function (compartment) {
	Array.prototype.push.apply(buffer, oci.extractData(''get'', oci.executeRequest(''get'', ''/20160918/instances'', ''?compartmentId='' + encodeURIComponent(compartment)), [''id'', ''displayName'', ''lifecycleState'', ''freeformTags'', ''availabilityDomain''], compartment));
})
return JSON.stringify(buffer);','','0','','','','','1',NULL,'Discover compute instances.','0','7d','1','',NULL,'10s','','','','200','1','0','','','0','0','0','0','0','0','0','ea4bbd0e9737406693aa0051cf861115','0','2','0'),
('61525','21','','10617','Autonomous database discovery','oci.object.autonomous.db.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,E'function validateZabbixParams(requiredParams, allParams) {
	requiredParams.forEach(function (field) {
		if (typeof allParams !== ''object'' || typeof allParams[field] === ''undefined'' || allParams[field] === '''') {
			throw ''Required param is not set: '' + field + ''.'';
		}
	});
}

function prepareCompartments(compartments, tenancy) {
	if (typeof compartments === ''undefined'' || compartments === '''') {
		return [tenancy];
	} else {
		return compartments.split('','')
	}
}

function OCI(service, action, params) {
	this.zabbixLogPrefix = ''[ OCI ] [ '' + service + '' ] [ '' + action + '' ]'';
	this.request = new HttpRequest();

	this.hash = function (string) {
		return sha256(string);
	};

	this.sign = function (string) {
		return sign(''sha256'', params[''private_key''], string);
	};

	this.encode = function (hash) {
		const hexArr = hash.match(/.{1,2}/g);
		var uInt8Array = new Uint8Array(hexArr.length);
		hexArr.forEach(function (hex, idx) {
			uInt8Array[idx] = parseInt(hex, 16);
		});
		return btoa(uInt8Array);
	};

	this.getDate = function () {
		const weekdayShortList = [''Sun'', ''Mon'', ''Tue'', ''Wed'', ''Thu'', ''Fri'', ''Sat''];
		const monthShortList = [''jan'', ''feb'', ''mar'', ''apr'', ''may'', ''jun'', ''jul'', ''aug'', ''sep'', ''oct'', ''nov'', ''dec''];
		const today = new Date();
		return weekdayShortList[today.getUTCDay()] + '', '' + today.getUTCDate() + '' '' + monthShortList[today.getUTCMonth()] + '' '' + today.getUTCFullYear() + '' '' + today.getUTCHours() + '':'' + today.getUTCMinutes() + '':'' + today.getUTCSeconds() + '' GMT'';
	};

	this.executeRequest = function (httpMethod, apiPath, apiParams, mql, namespace) {
		var headers = ''(request-target) date host'';
		const contentTypeHeader = ''content-type: application/json'';
		const dateHeader = ''date: '' + this.getDate();
		const hostHeader = ''host: '' + params[''api_host''];
		const requestTarget = ''(request-target): '' + httpMethod + '' '' + apiPath + apiParams;
		var signingString = requestTarget + ''\\n'' + dateHeader + ''\\n'' + hostHeader;
		var reqHeaders = [contentTypeHeader, dateHeader];

		if (httpMethod === ''post'') {
			var body = JSON.stringify({
				''namespace'': namespace,
				''query'': mql
			});
			headers = headers + '' x-content-sha256 content-type content-length'';
			const bodyHeader = ''x-content-sha256: '' + this.encode(this.hash(body));
			const bodyLengthHeader = ''content-length: '' + body.length;
			signingString = signingString + ''\\n'' + bodyHeader + ''\\n'' + contentTypeHeader + ''\\n'' + bodyLengthHeader;
			reqHeaders.push(bodyHeader, bodyLengthHeader);
		}

		const signature = this.encode(this.sign(signingString));

		reqHeaders.push(''Authorization: Signature version="1",keyId="'' + params[''tenancy_ocid''] + ''/'' + params[''user_ocid''] + ''/'' + params[''fingerprint''] + ''",algorithm="rsa-sha256",headers="'' + headers + ''",signature="'' + signature + ''"'');
		for (var header = 0, headerLength = reqHeaders.length; header < headerLength; header++) {
			this.request.addHeader(reqHeaders[header]);
		}

		if (params[''http_proxy'']) {
			this.request.setProxy(params[''http_proxy'']);
			Zabbix.log(4, this.zabbixLogPrefix + '' Using http proxy: '' + params[''http_proxy'']);
		}

		if (httpMethod === ''post'') {
			var apiRateLimitExceeded = false;
			do {
				const response = this.request.post(''https://'' + params[''api_host''] + apiPath + apiParams, body);

				try {
					if (JSON.parse(response)[''code''] === ''TooManyRequests'') {

						apiRateLimitExceeded = true;
						Zabbix.sleep(1000);
					} else {
						apiRateLimitExceeded = false;
					}
				} catch (error) {
					Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the response: '' + JSON.stringify(response));
					throw ''Could not parse the response. See logs for more information.'';
				}
			} while (apiRateLimitExceeded);
		} else {
			const response = this.request.get(''https://'' + params[''api_host''] + apiPath + apiParams);
		}

		this.request.clearHeader();

		if (this.request.getStatus() === parseInt(params[''http_status_code''])) {
			return response;
		} else {
			Zabbix.log(3, this.zabbixLogPrefix + '' Unexpected HTTP response code: '' + this.request.getStatus());
			throw ''Unexpected HTTP response code: '' + this.request.getStatus();
		}
	};

	this.extractData = function (httpMethod, data, keys, compartment) {
		try {
			data = JSON.parse(data);
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the received JSON object: '' + data);
			throw ''Could not parse received JSON object. See logs for more information.'';
		}

		if (typeof keys == ''object'') {
			var returnBuffer = [];
			for (var dataObj = 0, dataLength = data.length; dataObj < dataLength; dataObj++) {

				var objectBuffer = {};
				for (var key = 0, keysLength = keys.length; key < keysLength; key++) {
					if (data[dataObj][keys[key]] || data[dataObj][keys[key]] == null) {
						objectBuffer[keys[key].match(/^[a-z]+$|[A-Z][a-z]+$/)[0].toLowerCase()] = data[dataObj][keys[key]];
					} else {
						Zabbix.log(3, this.zabbixLogPrefix + '' Received an unexpected JSON object. Could not get value for key "'' + keys[key] + ''" in JSON: '' + JSON.stringify(data[dataObj]));
						throw ''Received an unexpected JSON object. See logs for more information.'';
					}
				}
				if (typeof compartment != ''undefined'' && compartment != '''') objectBuffer[''compartment''] = compartment;
				returnBuffer.push(objectBuffer);
			}
			return returnBuffer;
		}

		try {
			if (httpMethod === ''get'') {
				return data[keys];
			} else {
				if (data.length === 0) {
					return 0;
				}
				data = data[0][keys];
				return data[data.length - 1][''value''];
			}
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not find key "'' + keys + ''" in JSON: '' + JSON.stringify(data));
			throw ''Could not find required key in JSON object. See logs for more information.'';
		}
	};
}


const params = JSON.parse(value);
validateZabbixParams([''tenancy_ocid'', ''user_ocid'', ''private_key'', ''fingerprint'', ''api_host'', ''http_status_code''], params);
var oci = new OCI(''Autonomous DB'', ''Get DBs'', params);
var compartments = prepareCompartments(params[''compartment_ocid''], params[''tenancy_ocid'']);

var buffer = [];
compartments.forEach(function (compartment) {
	Array.prototype.push.apply(buffer, oci.extractData(''get'', oci.executeRequest(''get'', ''/20160918/autonomousDatabases'', ''?compartmentId='' + encodeURIComponent(compartment)), [''id'', ''dbName'', ''lifecycleState'', ''freeformTags''], compartment));
})
return JSON.stringify(buffer);','','0','','','','','1',NULL,'Discover autonomous databases.','0','7d','1','',NULL,'10s','','','','200','1','0','','','0','0','0','0','0','0','0','c69611c5b86043b28c8ce2bc0627b377','0','2','0'),
('61526','21','','10617','Object storage discovery','oci.object.storage.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,E'function validateZabbixParams(requiredParams, allParams) {
	requiredParams.forEach(function (field) {
		if (typeof allParams !== ''object'' || typeof allParams[field] === ''undefined'' || allParams[field] === '''') {
			throw ''Required param is not set: '' + field + ''.'';
		}
	});
}

function prepareCompartments(compartments, tenancy) {
	if (typeof compartments === ''undefined'' || compartments === '''') {
		return [tenancy];
	} else {
		return compartments.split('','')
	}
}

function OCI(service, action, params) {
	this.zabbixLogPrefix = ''[ OCI ] [ '' + service + '' ] [ '' + action + '' ]'';
	this.request = new HttpRequest();

	this.hash = function (string) {
		return sha256(string);
	};

	this.sign = function (string) {
		return sign(''sha256'', params[''private_key''], string);
	};

	this.encode = function (hash) {
		const hexArr = hash.match(/.{1,2}/g);
		var uInt8Array = new Uint8Array(hexArr.length);
		hexArr.forEach(function (hex, idx) {
			uInt8Array[idx] = parseInt(hex, 16);
		});
		return btoa(uInt8Array);
	};

	this.getDate = function () {
		const weekdayShortList = [''Sun'', ''Mon'', ''Tue'', ''Wed'', ''Thu'', ''Fri'', ''Sat''];
		const monthShortList = [''jan'', ''feb'', ''mar'', ''apr'', ''may'', ''jun'', ''jul'', ''aug'', ''sep'', ''oct'', ''nov'', ''dec''];
		const today = new Date();
		return weekdayShortList[today.getUTCDay()] + '', '' + today.getUTCDate() + '' '' + monthShortList[today.getUTCMonth()] + '' '' + today.getUTCFullYear() + '' '' + today.getUTCHours() + '':'' + today.getUTCMinutes() + '':'' + today.getUTCSeconds() + '' GMT'';
	};

	this.executeRequest = function (httpMethod, apiPath, apiParams, mql, namespace) {
		var headers = ''(request-target) date host'';
		const contentTypeHeader = ''content-type: application/json'';
		const dateHeader = ''date: '' + this.getDate();
		const hostHeader = ''host: '' + params[''api_host''];
		const requestTarget = ''(request-target): '' + httpMethod + '' '' + apiPath + apiParams;
		var signingString = requestTarget + ''\\n'' + dateHeader + ''\\n'' + hostHeader;
		var reqHeaders = [contentTypeHeader, dateHeader];

		if (httpMethod === ''post'') {
			var body = JSON.stringify({
				''namespace'': namespace,
				''query'': mql
			});
			headers = headers + '' x-content-sha256 content-type content-length'';
			const bodyHeader = ''x-content-sha256: '' + this.encode(this.hash(body));
			const bodyLengthHeader = ''content-length: '' + body.length;
			signingString = signingString + ''\\n'' + bodyHeader + ''\\n'' + contentTypeHeader + ''\\n'' + bodyLengthHeader;
			reqHeaders.push(bodyHeader, bodyLengthHeader);
		}

		const signature = this.encode(this.sign(signingString));

		reqHeaders.push(''Authorization: Signature version="1",keyId="'' + params[''tenancy_ocid''] + ''/'' + params[''user_ocid''] + ''/'' + params[''fingerprint''] + ''",algorithm="rsa-sha256",headers="'' + headers + ''",signature="'' + signature + ''"'');
		for (var header = 0, headerLength = reqHeaders.length; header < headerLength; header++) {
			this.request.addHeader(reqHeaders[header]);
		}

		if (params[''http_proxy'']) {
			this.request.setProxy(params[''http_proxy'']);
			Zabbix.log(4, this.zabbixLogPrefix + '' Using http proxy: '' + params[''http_proxy'']);
		}

		if (httpMethod === ''post'') {
			var apiRateLimitExceeded = false;
			do {
				const response = this.request.post(''https://'' + params[''api_host''] + apiPath + apiParams, body);

				try {
					if (JSON.parse(response)[''code''] === ''TooManyRequests'') {

						apiRateLimitExceeded = true;
						Zabbix.sleep(1000);
					} else {
						apiRateLimitExceeded = false;
					}
				} catch (error) {
					Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the response: '' + JSON.stringify(response));
					throw ''Could not parse the response. See logs for more information.'';
				}
			} while (apiRateLimitExceeded);
		} else {
			const response = this.request.get(''https://'' + params[''api_host''] + apiPath + apiParams);
		}

		this.request.clearHeader();

		if (this.request.getStatus() === parseInt(params[''http_status_code''])) {
			return response;
		} else {
			Zabbix.log(3, this.zabbixLogPrefix + '' Unexpected HTTP response code: '' + this.request.getStatus());
			throw ''Unexpected HTTP response code: '' + this.request.getStatus();
		}
	};

	this.extractData = function (httpMethod, data, keys, compartment) {
		try {
			data = JSON.parse(data);
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the received JSON object: '' + data);
			throw ''Could not parse received JSON object. See logs for more information.'';
		}

		if (typeof keys == ''object'') {
			var returnBuffer = [];
			for (var dataObj = 0, dataLength = data.length; dataObj < dataLength; dataObj++) {

				var objectBuffer = {};
				for (var key = 0, keysLength = keys.length; key < keysLength; key++) {
					if (data[dataObj][keys[key]] || data[dataObj][keys[key]] == null) {
						objectBuffer[keys[key].match(/^[a-z]+$|[A-Z][a-z]+$/)[0].toLowerCase()] = data[dataObj][keys[key]];
					} else {
						Zabbix.log(3, this.zabbixLogPrefix + '' Received an unexpected JSON object. Could not get value for key "'' + keys[key] + ''" in JSON: '' + JSON.stringify(data[dataObj]));
						throw ''Received an unexpected JSON object. See logs for more information.'';
					}
				}
				if (typeof compartment != ''undefined'' && compartment != '''') objectBuffer[''compartment''] = compartment;
				returnBuffer.push(objectBuffer);
			}
			return returnBuffer;
		}

		try {
			if (httpMethod === ''get'') {
				return data[keys];
			} else {
				if (data.length === 0) {
					return 0;
				}
				data = data[0][keys];
				return data[data.length - 1][''value''];
			}
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not find key "'' + keys + ''" in JSON: '' + JSON.stringify(data));
			throw ''Could not find required key in JSON object. See logs for more information.'';
		}
	};
}


const params = JSON.parse(value);
validateZabbixParams([''tenancy_ocid'', ''user_ocid'', ''private_key'', ''fingerprint'', ''api_host'', ''http_status_code''], params);
var oci = new OCI(''Object storage'', ''Get buckets'', params);
var compartments = prepareCompartments(params[''compartment_ocid''], params[''tenancy_ocid'']);
const namespace = JSON.parse(oci.executeRequest(''get'', ''/n'', ''''));

var buffer = [];
compartments.forEach(function (compartment) {
	Array.prototype.push.apply(buffer, oci.extractData(''get'', oci.executeRequest(''get'', ''/n/'' + encodeURIComponent(namespace) + ''/b/'', ''?compartmentId='' + encodeURIComponent(compartment) + ''&fields=tags''), [''name'', ''freeformTags''], compartment));
})
return JSON.stringify(buffer);','','0','','','','','1',NULL,'Discover object storage.','0','7d','1','',NULL,'10s','','','','200','1','0','','','0','0','0','0','0','0','0','e1949f127af04efeb8c192f23e45b58a','0','2','0'),
('61527','21','','10617','Virtual cloud networks discovery','oci.vcn.discovery','1h','31d','365d','0','4','','','','',NULL,NULL,E'function validateZabbixParams(requiredParams, allParams) {
	requiredParams.forEach(function (field) {
		if (typeof allParams !== ''object'' || typeof allParams[field] === ''undefined'' || allParams[field] === '''') {
			throw ''Required param is not set: '' + field + ''.'';
		}
	});
}

function prepareCompartments(compartments, tenancy) {
	if (typeof compartments === ''undefined'' || compartments === '''') {
		return [tenancy];
	} else {
		return compartments.split('','')
	}
}

function OCI(service, action, params) {
	this.zabbixLogPrefix = ''[ OCI ] [ '' + service + '' ] [ '' + action + '' ]'';
	this.request = new HttpRequest();

	this.hash = function (string) {
		return sha256(string);
	};

	this.sign = function (string) {
		return sign(''sha256'', params[''private_key''], string);
	};

	this.encode = function (hash) {
		const hexArr = hash.match(/.{1,2}/g);
		var uInt8Array = new Uint8Array(hexArr.length);
		hexArr.forEach(function (hex, idx) {
			uInt8Array[idx] = parseInt(hex, 16);
		});
		return btoa(uInt8Array);
	};

	this.getDate = function () {
		const weekdayShortList = [''Sun'', ''Mon'', ''Tue'', ''Wed'', ''Thu'', ''Fri'', ''Sat''];
		const monthShortList = [''jan'', ''feb'', ''mar'', ''apr'', ''may'', ''jun'', ''jul'', ''aug'', ''sep'', ''oct'', ''nov'', ''dec''];
		const today = new Date();
		return weekdayShortList[today.getUTCDay()] + '', '' + today.getUTCDate() + '' '' + monthShortList[today.getUTCMonth()] + '' '' + today.getUTCFullYear() + '' '' + today.getUTCHours() + '':'' + today.getUTCMinutes() + '':'' + today.getUTCSeconds() + '' GMT'';
	};

	this.executeRequest = function (httpMethod, apiPath, apiParams, mql, namespace) {
		var headers = ''(request-target) date host'';
		const contentTypeHeader = ''content-type: application/json'';
		const dateHeader = ''date: '' + this.getDate();
		const hostHeader = ''host: '' + params[''api_host''];
		const requestTarget = ''(request-target): '' + httpMethod + '' '' + apiPath + apiParams;
		var signingString = requestTarget + ''\\n'' + dateHeader + ''\\n'' + hostHeader;
		var reqHeaders = [contentTypeHeader, dateHeader];

		if (httpMethod === ''post'') {
			var body = JSON.stringify({
				''namespace'': namespace,
				''query'': mql
			});
			headers = headers + '' x-content-sha256 content-type content-length'';
			const bodyHeader = ''x-content-sha256: '' + this.encode(this.hash(body));
			const bodyLengthHeader = ''content-length: '' + body.length;
			signingString = signingString + ''\\n'' + bodyHeader + ''\\n'' + contentTypeHeader + ''\\n'' + bodyLengthHeader;
			reqHeaders.push(bodyHeader, bodyLengthHeader);
		}

		const signature = this.encode(this.sign(signingString));

		reqHeaders.push(''Authorization: Signature version="1",keyId="'' + params[''tenancy_ocid''] + ''/'' + params[''user_ocid''] + ''/'' + params[''fingerprint''] + ''",algorithm="rsa-sha256",headers="'' + headers + ''",signature="'' + signature + ''"'');
		for (var header = 0, headerLength = reqHeaders.length; header < headerLength; header++) {
			this.request.addHeader(reqHeaders[header]);
		}

		if (params[''http_proxy'']) {
			this.request.setProxy(params[''http_proxy'']);
			Zabbix.log(4, this.zabbixLogPrefix + '' Using http proxy: '' + params[''http_proxy'']);
		}

		if (httpMethod === ''post'') {
			var apiRateLimitExceeded = false;
			do {
				const response = this.request.post(''https://'' + params[''api_host''] + apiPath + apiParams, body);

				try {
					if (JSON.parse(response)[''code''] === ''TooManyRequests'') {

						apiRateLimitExceeded = true;
						Zabbix.sleep(1000);
					} else {
						apiRateLimitExceeded = false;
					}
				} catch (error) {
					Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the response: '' + JSON.stringify(response));
					throw ''Could not parse the response. See logs for more information.'';
				}
			} while (apiRateLimitExceeded);
		} else {
			const response = this.request.get(''https://'' + params[''api_host''] + apiPath + apiParams);
		}

		this.request.clearHeader();

		if (this.request.getStatus() === parseInt(params[''http_status_code''])) {
			return response;
		} else {
			Zabbix.log(3, this.zabbixLogPrefix + '' Unexpected HTTP response code: '' + this.request.getStatus());
			throw ''Unexpected HTTP response code: '' + this.request.getStatus();
		}
	};

	this.extractData = function (httpMethod, data, keys, compartment) {
		try {
			data = JSON.parse(data);
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the received JSON object: '' + data);
			throw ''Could not parse received JSON object. See logs for more information.'';
		}

		if (typeof keys == ''object'') {
			var returnBuffer = [];
			for (var dataObj = 0, dataLength = data.length; dataObj < dataLength; dataObj++) {

				var objectBuffer = {};
				for (var key = 0, keysLength = keys.length; key < keysLength; key++) {
					if (data[dataObj][keys[key]] || data[dataObj][keys[key]] == null) {
						objectBuffer[keys[key].match(/^[a-z]+$|[A-Z][a-z]+$/)[0].toLowerCase()] = data[dataObj][keys[key]];
					} else {
						Zabbix.log(3, this.zabbixLogPrefix + '' Received an unexpected JSON object. Could not get value for key "'' + keys[key] + ''" in JSON: '' + JSON.stringify(data[dataObj]));
						throw ''Received an unexpected JSON object. See logs for more information.'';
					}
				}
				if (typeof compartment != ''undefined'' && compartment != '''') objectBuffer[''compartment''] = compartment;
				returnBuffer.push(objectBuffer);
			}
			return returnBuffer;
		}

		try {
			if (httpMethod === ''get'') {
				return data[keys];
			} else {
				if (data.length === 0) {
					return 0;
				}
				data = data[0][keys];
				return data[data.length - 1][''value''];
			}
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not find key "'' + keys + ''" in JSON: '' + JSON.stringify(data));
			throw ''Could not find required key in JSON object. See logs for more information.'';
		}
	};
}


const params = JSON.parse(value);
validateZabbixParams([''tenancy_ocid'', ''user_ocid'', ''private_key'', ''fingerprint'', ''api_host'', ''http_status_code''], params);
var oci = new OCI(''VCN'', ''Get VCNs'', params);
var compartments = prepareCompartments(params[''compartment_ocid''], params[''tenancy_ocid'']);

var buffer = [];
compartments.forEach(function (compartment) {
	Array.prototype.push.apply(buffer, oci.extractData(''get'', oci.executeRequest(''get'', ''/20160918/vcns'', ''?compartmentId='' + encodeURIComponent(compartment)), [''id'', ''displayName'', ''lifecycleState'', ''freeformTags''], compartment));
})
return JSON.stringify(buffer);','','0','','','','','1',NULL,'Discover virtual cloud networks (VCNs).','0','7d','1','',NULL,'10s','','','','200','1','0','','','0','0','0','0','0','0','0','378d760173924bf48fbc25c74a520a8b','0','2','0'),
('61530','21','','10618','VNIC [{#NAME}]: Get metrics','oci.compute.vnic.metrics.get[{#ID}]','1m','0','0','0','4','','','','',NULL,NULL,E'function validateZabbixParams(requiredParams, allParams) {
	requiredParams.forEach(function (field) {
		if (typeof allParams !== ''object'' || typeof allParams[field] === ''undefined'' || allParams[field] === '''') {
			throw ''Required param is not set: '' + field + ''.'';
		}
	});
}

function OCI(service, action, params) {
	this.zabbixLogPrefix = ''[ OCI ] [ '' + service + '' ] [ '' + action + '' ]'';
	this.request = new HttpRequest();

	this.hash = function (string) {
		return sha256(string);
	};

	this.sign = function (string) {
		return sign(''sha256'', params[''private_key''], string);
	};

	this.encode = function (hash) {
		const hexArr = hash.match(/.{1,2}/g);
		var uInt8Array = new Uint8Array(hexArr.length);
		hexArr.forEach(function (hex, idx) {
			uInt8Array[idx] = parseInt(hex, 16);
		});
		return btoa(uInt8Array);
	};

	this.getDate = function () {
		const weekdayShortList = [''Sun'', ''Mon'', ''Tue'', ''Wed'', ''Thu'', ''Fri'', ''Sat''];
		const monthShortList = [''jan'', ''feb'', ''mar'', ''apr'', ''may'', ''jun'', ''jul'', ''aug'', ''sep'', ''oct'', ''nov'', ''dec''];
		const today = new Date();
		return weekdayShortList[today.getUTCDay()] + '', '' + today.getUTCDate() + '' '' + monthShortList[today.getUTCMonth()] + '' '' + today.getUTCFullYear() + '' '' + today.getUTCHours() + '':'' + today.getUTCMinutes() + '':'' + today.getUTCSeconds() + '' GMT'';
	};

	this.executeRequest = function (httpMethod, apiPath, apiParams, mql, namespace) {
		var headers = ''(request-target) date host'';
		const contentTypeHeader = ''content-type: application/json'';
		const dateHeader = ''date: '' + this.getDate();
		const hostHeader = ''host: '' + params[''api_host''];
		const requestTarget = ''(request-target): '' + httpMethod + '' '' + apiPath + apiParams;
		var signingString = requestTarget + ''\\n'' + dateHeader + ''\\n'' + hostHeader;
		var reqHeaders = [contentTypeHeader, dateHeader];

		if (httpMethod === ''post'') {
			var body = JSON.stringify({
				''namespace'': namespace,
				''query'': mql
			});
			headers = headers + '' x-content-sha256 content-type content-length'';
			const bodyHeader = ''x-content-sha256: '' + this.encode(this.hash(body));
			const bodyLengthHeader = ''content-length: '' + body.length;
			signingString = signingString + ''\\n'' + bodyHeader + ''\\n'' + contentTypeHeader + ''\\n'' + bodyLengthHeader;
			reqHeaders.push(bodyHeader, bodyLengthHeader);
		}

		const signature = this.encode(this.sign(signingString));

		reqHeaders.push(''Authorization: Signature version="1",keyId="'' + params[''tenancy_ocid''] + ''/'' + params[''user_ocid''] + ''/'' + params[''fingerprint''] + ''",algorithm="rsa-sha256",headers="'' + headers + ''",signature="'' + signature + ''"'');
		for (var header = 0, headerLength = reqHeaders.length; header < headerLength; header++) {
			this.request.addHeader(reqHeaders[header]);
		}

		if (params[''http_proxy'']) {
			this.request.setProxy(params[''http_proxy'']);
			Zabbix.log(4, this.zabbixLogPrefix + '' Using http proxy: '' + params[''http_proxy'']);
		}

		if (httpMethod === ''post'') {
			var apiRateLimitExceeded = false;
			do {
				const response = this.request.post(''https://'' + params[''api_host''] + apiPath + apiParams, body);

				try {
					if (JSON.parse(response)[''code''] === ''TooManyRequests'') {

						apiRateLimitExceeded = true;
						Zabbix.sleep(1000);
					} else {
						apiRateLimitExceeded = false;
					}
				} catch (error) {
					Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the response: '' + JSON.stringify(response));
					throw ''Could not parse the response. See logs for more information.'';
				}
			} while (apiRateLimitExceeded);
		} else {
			const response = this.request.get(''https://'' + params[''api_host''] + apiPath + apiParams);
		}

		this.request.clearHeader();

		if (this.request.getStatus() === parseInt(params[''http_status_code''])) {
			return response;
		} else {
			Zabbix.log(3, this.zabbixLogPrefix + '' Unexpected HTTP response code: '' + this.request.getStatus());
			throw ''Unexpected HTTP response code: '' + this.request.getStatus();
		}
	};

	this.extractData = function (httpMethod, data, keys, compartment) {
		try {
			data = JSON.parse(data);
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not parse the received JSON object: '' + data);
			throw ''Could not parse received JSON object. See logs for more information.'';
		}

		if (typeof keys == ''object'') {
			var returnBuffer = [];
			for (var dataObj = 0, dataLength = data.length; dataObj < dataLength; dataObj++) {

				var objectBuffer = {};
				for (var key = 0, keysLength = keys.length; key < keysLength; key++) {
					if (data[dataObj][keys[key]] || data[dataObj][keys[key]] == null) {
						objectBuffer[keys[key].match(/^[a-z]+$|[A-Z][a-z]+$/)[0].toLowerCase()] = data[dataObj][keys[key]];
					} else {
						Zabbix.log(3, this.zabbixLogPrefix + '' Received an unexpected JSON object. Could not get value for key "'' + keys[key] + ''" in JSON: '' + JSON.stringify(data[dataObj]));
						throw ''Received an unexpected JSON object. See logs for more information.'';
					}
				}
				if (typeof compartment != ''undefined'' && compartment != '''') objectBuffer[''compartment''] = compartment;
				returnBuffer.push(objectBuffer);
			}
			return returnBuffer;
		}

		try {
			if (httpMethod === ''get'') {
				return data[keys];
			} else {
				if (data.length === 0) {
					return 0;
				}
				data = data[0][keys];
				return data[data.length - 1][''value''];
			}
		} catch (error) {
			Zabbix.log(3, this.zabbixLogPrefix + '' Could not find key "'' + keys + ''" in JSON: '' + JSON.stringify(data));
			throw ''Could not find required key in JSON object. See logs for more information.'';
		}
	};
}

function buildMql(id, metrics, defaultStatistic, resourceType) {
	resourceType = resourceType === '''' || resourceType === undefined ? ''resourceId'' : resourceType;
	this.query = ''['' + params[''req_interval''] + ''m]{'' + resourceType + ''='' + id + ''}.'';

	for (var i = 0, metricsLength = metrics.length; i < metricsLength; i++) {
		const metric = ((Array.isArray(metrics[i]) ? metrics[i] : [metrics[i], defaultStatistic]));
		metrics[i] = [metric[0], this.query + metric[1]];
	}
}


const params = JSON.parse(value);
validateZabbixParams([''tenancy_ocid'', ''user_ocid'', ''private_key'', ''fingerprint'', ''api_host'', ''vnic_id'', ''http_status_code'', ''req_interval'', ''compartment_id''], params);
var oci = new OCI(''Compute - VNIC'', ''Get metrics'', params);

const metrics = [
	''VnicEgressDropsSecurityList'',
	''VnicIngressDropsSecurityList'',
	''VnicFromNetworkBytes'',
	''VnicFromNetworkPackets'',
	''VnicToNetworkBytes'',
	''VnicToNetworkPackets'',
	''VnicIngressDropsThrottle'',
	''VnicEgressDropsThrottle'',
	''VnicIngressDropsConntrackFull'',
	''VnicEgressDropsConntrackFull'',
	''VnicConntrackUtilPercent'',
	[''VnicConntrackIsFull'', ''last''],
	''SmartnicBufferDropsFromNetwork'',
	''SmartnicBufferDropsFromHost''
];
buildMql(params[''vnic_id''], metrics, ''sum'');

var result = {};
for (var i = 0, metricsLength = metrics.length; i < metricsLength; i++) {
	result[metrics[i][0]] = oci.extractData(''post'', oci.executeRequest(''post'', ''/20180401/metrics/actions/summarizeMetricsData'', ''?compartmentId='' + encodeURIComponent(params[''compartment_id'']), metrics[i][0] + metrics[i][1] + ''()'', ''oci_vcn''), ''aggregatedDatapoints'');
}
return JSON.stringify(result);','','0','','','','','2',NULL,'Gets virtual network interface card metrics.','0','7d','0','',NULL,'30s','','','','200','1','0','','','0','0','0','0','0','0','0','eb79782153524452ba4ba8506fb207a5','0','2','0'),
('61547','16','','10370','Tables','jmx.discovery[beans,"org.apache.cassandra.metrics:type=Table,keyspace=*,scope=*,name=ReadLatency"]','1h','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','1',NULL,'Info about keyspaces and tables','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','504e40d04a024249bfd4ac67891f8a21','0','2','0'),
('61548','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Bloom filter false ratio','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=BloomFilterFalseRatio","Value"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The ratio of Bloom filter false positives to total checks.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','22c24ee8cfd34623b137c6cad5a2299d','0','2','0'),
('61549','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Bytes flushed','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=BytesFlushed","Count"]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The amount of data that was flushed since (re)start.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','417a27c1779a4d08b5673320b1542ad8','0','2','0'),
('61550','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Col update time delta75 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=ColUpdateTimeDeltaHistogram","75thPercentile"]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The column update time delta - p75.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b6623ca2ba0c4dd9ad2be5fa263896f5','0','2','0'),
('61551','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Col update time delta 95 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=ColUpdateTimeDeltaHistogram","95thPercentile"]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The column update time delta - p95.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','685e1bbe10044d9d9ae2b02357ba2934','0','2','0'),
('61552','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Compaction bytes written','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=CompactionBytesWritten","Count"]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The amount of data that was compacted since (re)start.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','71b3b14f8ce7414786fa0bcd471e8842','0','2','0'),
('61553','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Compression ratio','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=CompressionRatio","Value"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The compression ratio for all SSTables.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9721c8cd9d0f415d9d5ddfeb417cee01','0','2','0'),
('61554','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: KeyCache hit rate','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=KeyCacheHitRate","Value"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The key cache hit rate.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b43134f2d2a043f2a61919467619efe2','0','2','0'),
('61555','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Live disk space used','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=LiveDiskSpaceUsed","Count"]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The disk space used by "live" SSTables (only counts in use files).','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b69ac0bb285a4e8fa82a98f4de2645d2','0','2','0'),
('61556','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Live SS Table','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=LiveSSTableCount","Value"]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'Number of "live" (in use) SSTables.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bf733ba7ab2045d38a88c6f0650ba1f2','0','2','0'),
('61557','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Max partition size','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=MaxPartitionSize","Value"]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The size of the largest compacted partition.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c447d219390a48f2bbbe0d19211472c8','0','2','0'),
('61558','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Mean partition size','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=MeanPartitionSize","Value"]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The average size of compacted partition.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bdf111fbca884f49a6cda263b8b07feb','0','2','0'),
('61559','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Pending compactions','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=PendingCompactions","Value"]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of pending compactions.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1f44ed6c453d44fc811ae310701df4bf','0','2','0'),
('61560','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Pending flushes','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=PendingFlushes","Count"]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of pending flushes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7e287e5459644536b9420263b4096dd1','0','2','0'),
('61561','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Read latency 75 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=ReadLatency","75thPercentile"]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'Latency read from disk in milliseconds.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1d240e1fe4b245b0b1b2b30d42e5077e','0','2','0'),
('61562','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Read latency 95 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=ReadLatency","95thPercentile"]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'Latency read from disk in milliseconds.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','38d31a8a16f04c39a64ee36940ae7eb8','0','2','0'),
('61563','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Read per second','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=ReadLatency","Count"]','1m','31d','365d','0','0','','rps','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of client requests per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','fdec15a1f86b4943bbd72fb992dfce90','0','2','0'),
('61564','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Row cache hits','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=RowCacheHit","Count"]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of row cache hits.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a73d2b8f38184698a3ab7a4bb3742b4a','0','2','0'),
('61565','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Out of row cache hits','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=RowCacheHitOutOfRange","Count"]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of row cache hits that do not satisfy the query filter and went to disk.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','213ecd18728a40ffbdbeac07daf0e26f','0','2','0'),
('61566','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Row cache misses','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=RowCacheMiss","Count"]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of table row cache misses.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','32df58c8fa3a4ad3ba2e70fc056895ad','0','2','0'),
('61567','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Snapshots size','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=SnapshotsSize","Value"]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The disk space truly used by snapshots.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','529e7683300b4fe9bb46e3f9ed8a9552','0','2','0'),
('61568','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: SS Tables per read 75 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=SSTablesPerReadHistogram","75thPercentile"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of SSTable data files accessed per read - p75.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','53e4852850a74163ad797969d3366eb0','0','2','0'),
('61569','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: SS Tables per read 95 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=SSTablesPerReadHistogram","95thPercentile"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of SSTable data files accessed per read - p95.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','187487b9d35444da989f9e0e3814798a','0','2','0'),
('61570','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Tombstone scanned 75 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=TombstoneScannedHistogram","75thPercentile"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'Number of tombstones scanned per read - p75.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','592bde2f9eb24d7e80b45f3db965b2e0','0','2','0'),
('61571','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Tombstone scanned 95 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=TombstoneScannedHistogram","95thPercentile"]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'Number of tombstones scanned per read - p95.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','70fedfc2310e4eb19195da72c9ada63d','0','2','0'),
('61572','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Disk space used','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=TotalDiskSpaceUsed","Count"]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'Disk space used.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a20ace3047bd4a238644dbc55d2f8fed','0','2','0'),
('61573','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Waiting on free memtable space 75 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=WaitingOnFreeMemtableSpace","75thPercentile"]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The time spent waiting for free memtable space either on- or off-heap - p75.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b599e354a5ee417cb056dea424a5792d','0','2','0'),
('61574','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Waiting on free memtable space95 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=WaitingOnFreeMemtableSpace","95thPercentile"]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The time spent waiting for free memtable space either on- or off-heap - p95.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','af19509867e54f19a64a4b66d054e0cf','0','2','0'),
('61575','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Write latency 75 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=WriteLatency","75thPercentile"]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'Latency write to disk in milliseconds.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','141b38b299e14068abc0c175ae4023e6','0','2','0'),
('61576','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Write latency 95 percentile','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=WriteLatency","95thPercentile"]','1m','31d','365d','0','0','','ms','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'Latency write to disk in milliseconds.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8d79071ab7ad49c483efbb7503a4b308','0','2','0'),
('61577','16','','10370','{#JMXKEYSPACE}.{#JMXSCOPE}: Write per second','jmx["org.apache.cassandra.metrics:type=Table,keyspace={#JMXKEYSPACE},scope={#JMXSCOPE},name=WriteLatency","Count"]','1m','31d','365d','0','0','','rps','','',NULL,NULL,'','','0','{$CASSANDRA.USER}','{$CASSANDRA.PASSWORD}','','','2',NULL,'The number of local write requests per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c1a9748ab9824626b9a59c323aff9a3d','0','2','0'),
('61607','15','','10519','Storage [{#STORE}]: RocksDB cache hit ratio','cockroachdb.rocksdb.cache.[{#STORE},hit_ratio]','1m','31d','365d','0','0','','%','','',NULL,NULL,'last(//cockroachdb.rocksdb.cache.hits.[{#STORE},rate]) / (last(//cockroachdb.rocksdb.cache.hits.[{#STORE},rate]) + last(//cockroachdb.rocksdb.cache.misses.[{#STORE},rate])) * 100','','0','','','','','2',NULL,'Block cache hit ratio in %.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cafdf6248d114787b2a3f9647a4afea9','0','2','0'),
('61608','15','','10519','Storage [{#STORE}]: Capacity available in %','cockroachdb.storage.capacity.[{#STORE},available_percent]','1m','31d','365d','0','0','','%','','',NULL,NULL,'last(//cockroachdb.storage.capacity.[{#STORE},available]) / last(//cockroachdb.storage.capacity.[{#STORE},total]) * 100','','0','','','','','2',NULL,'Available storage capacity in %.','0','7d','0','',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bb07359b779d4e4080593a02c18dc8c1','0','2','0'),
('61638','16','','10417','Data region metrics','jmx.discovery[beans,"org.apache:group=DataRegionMetrics,*"]','10m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f8d8a6cd41da496ea6d61793e0ab0d00','0','2','0'),
('61639','16','','10417','Local node metrics','jmx.discovery[beans,"org.apache:group=Kernal,name=ClusterLocalNodeMetricsMXBeanImpl,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e7ad3e966ed94b91a88d28b785862b2f','0','2','0'),
('61640','16','','10417','Cluster metrics','jmx.discovery[beans,"org.apache:group=Kernal,name=ClusterMetricsMXBeanImpl,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5b7b9e010a274bb5a52784143dd57628','0','2','0'),
('61641','16','','10417','GridGain kernal metrics','jmx.discovery[beans,"org.apache:group=Kernal,name=IgniteKernal,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3b81fbcbef204717be1918d3df919174','0','2','0'),
('61642','16','','10417','TCP Communication SPI metrics','jmx.discovery[beans,"org.apache:group=SPIs,name=TcpCommunicationSpi,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6265d30cd7494809bc94f929968d3c6f','0','2','0'),
('61643','16','','10417','TCP discovery SPI','jmx.discovery[beans,"org.apache:group=SPIs,name=TcpDiscoverySpi,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5fb38d8148d746d6ae19d4f8c5a33ce8','0','2','0'),
('61644','16','','10417','Transaction metrics','jmx.discovery[beans,"org.apache:group=TransactionMetrics,name=TransactionMetricsMxBeanImpl,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b0b570121f1646e5baf0b0ff5cc5de2b','0','2','0'),
('61645','16','','10417','Cache groups',E'jmx.discovery[beans,"org.apache:group=\\"Cache groups\\",*"]','10m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7e3825aba1ad47c194162122eb050612','0','2','0'),
('61646','16','','10417','Thread pool metrics',E'jmx.discovery[beans,"org.apache:group=\\"Thread Pools\\",*"]','10m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3ca6cce698d247daae252430289e7b61','0','2','0'),
('61647','16','','10417','Cache metrics',E'jmx.discovery[beans,"org.apache:name=\\"org.apache.gridgain.internal.processors.cache.CacheLocalMetricsMXBeanImpl\\",*"]','10m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3f3382c27cc449bd86822c245b798056','0','2','0'),
('61648','16','','10417','Data region {#JMXNAME}: Allocation, rate','jmx["{#JMXOBJ}",AllocationRate]','1m','31d','365d','0','0','','!pps','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Allocation rate (pages per second) averaged across rateTimeInternal.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c09b0ea002db4c3d9104a7f51b9921cc','0','2','0'),
('61649','16','','10417','Data region {#JMXNAME}: Checkpoint buffer size','jmx["{#JMXOBJ}",CheckpointBufferSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Total size in bytes for checkpoint buffer.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3425f6775e9e4a979d876becddec46d2','0','2','0'),
('61650','16','','10417','Data region {#JMXNAME}: Dirty pages','jmx["{#JMXOBJ}",DirtyPages]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Number of pages in memory not yet synchronized with persistent storage.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6e44ce63725a46b486175e34697776ee','0','2','0'),
('61651','16','','10417','Data region {#JMXNAME}: Eviction, rate','jmx["{#JMXOBJ}",EvictionRate]','1m','31d','365d','0','0','','!pps','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Eviction rate (pages per second).','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5396db6809ca44c480f123e1e63430b4','0','2','0'),
('61652','16','','10417','Data region {#JMXNAME}: Size, max','jmx["{#JMXOBJ}",MaxSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Maximum memory region size defined by its data region.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9f7d683cf3ca47c681eef43e4dd9a471','0','2','0'),
('61653','16','','10417','Data region {#JMXNAME}: Offheap size','jmx["{#JMXOBJ}",OffHeapSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Offheap size in bytes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','16170e6c8007492984c367892a7393aa','0','2','0'),
('61654','16','','10417','Data region {#JMXNAME}: Offheap used size','jmx["{#JMXOBJ}",OffheapUsedSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Total used offheap size in bytes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','982c738bdd4f4802917d3f5d63cc489f','0','2','0'),
('61655','16','','10417','Data region {#JMXNAME}: Pages fill factor','jmx["{#JMXOBJ}",PagesFillFactor]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The percentage of the used space.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','03c923d00e5a486faece1f37b3a2863d','0','2','0'),
('61656','16','','10417','Data region {#JMXNAME}: Pages replace, rate','jmx["{#JMXOBJ}",PagesReplaceRate]','1m','31d','365d','0','0','','!pps','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Rate at which pages in memory are replaced with pages from persistent storage (pages per second).','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9094f5992c514be6abaee490b211774e','0','2','0'),
('61657','16','','10417','Data region {#JMXNAME}: Allocated, bytes','jmx["{#JMXOBJ}",TotalAllocatedSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Total size of memory allocated in bytes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','390107f411e24581a61043000b42152f','0','2','0'),
('61658','16','','10417','Data region {#JMXNAME}: Used checkpoint buffer size','jmx["{#JMXOBJ}",UsedCheckpointBufferSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Used checkpoint buffer size in bytes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8e0e7a96f0a6424b88829fab78cce2ba','0','2','0'),
('61659','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Jobs active, current','jmx["{#JMXOBJ}",CurrentActiveJobs]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Number of currently active jobs concurrently executing on the node.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','f3c7461902934de8a220513a33ad8771','0','2','0'),
('61660','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Jobs cancelled, current','jmx["{#JMXOBJ}",CurrentCancelledJobs]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Number of cancelled jobs that are still running.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c254bc19bccb44de821c51b0882b78b4','0','2','0'),
('61661','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: PME duration, current','jmx["{#JMXOBJ}",CurrentPmeDuration]','1m','31d','365d','0','3','','ms','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Current PME duration in milliseconds.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','63916bbee7604c3e9610f5989bc5bb7a','0','2','0'),
('61662','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Jobs rejected, current','jmx["{#JMXOBJ}",CurrentRejectedJobs]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Number of jobs rejected after more recent collision resolution operation.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','790e8c300f7c4c82b640fb6025bb9eef','0','2','0'),
('61663','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Threads count, current','jmx["{#JMXOBJ}",CurrentThreadCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Current number of live threads.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a5c1ece74c914620b9ce70c00c7d5377','0','2','0'),
('61664','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Jobs waiting, current','jmx["{#JMXOBJ}",CurrentWaitingJobs]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Number of queued jobs currently waiting to be executed.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','df386b29e8f74ec9a8f1825cb3094c0e','0','2','0'),
('61665','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Heap memory used','jmx["{#JMXOBJ}",HeapMemoryUsed]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Current heap size that is used for object allocation.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','ec0c25c202ff4b1ea47422b51c24d3b4','0','2','0'),
('61666','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Jobs cancelled, rate','jmx["{#JMXOBJ}",TotalCancelledJobs]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Total number of jobs cancelled by the node per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a698da07a1794c479db9948a5ffb4123','0','2','0'),
('61667','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Jobs executed, rate','jmx["{#JMXOBJ}",TotalExecutedJobs]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Total number of jobs handled by the node per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5a60a71ecd2d40af8ca2ca81712c287e','0','2','0'),
('61668','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Jobs rejects, rate','jmx["{#JMXOBJ}",TotalRejectedJobs]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Total number of jobs this node rejects during collision resolution operations since node startup per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7673741944094af9a6bc05bd630fd055','0','2','0'),
('61669','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Nodes, Active baseline','jmx["{#JMXOBJ}",ActiveBaselineNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of nodes that are currently active in the baseline topology.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a7eb47fd5db24c198774beacf52fa965','0','2','0'),
('61670','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Nodes, Baseline','jmx["{#JMXOBJ}",TotalBaselineNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Total baseline nodes that are registered in the baseline topology.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','16ca4ca8efa04874902a619bce1f0071','0','2','0'),
('61671','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Nodes, Client','jmx["{#JMXOBJ}",TotalClientNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of client nodes in the cluster.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cf66620eeb6b4c9d88c2bd69ed05685a','0','2','0'),
('61672','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Nodes, total','jmx["{#JMXOBJ}",TotalNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Total number of nodes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d74b4324fb5a446a92e6fcf89162eff5','0','2','0'),
('61673','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Nodes, Server','jmx["{#JMXOBJ}",TotalServerNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of server nodes in the cluster.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b64a4ce1266b4806a554967d2fd24fa5','0','2','0'),
('61674','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Version','jmx["{#JMXOBJ}",FullVersion]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Version of GridGain instance.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cbe7305a44754576a8084d606710765f','0','2','0'),
('61675','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Local node ID','jmx["{#JMXOBJ}",LocalNodeId]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Unique identifier for this node within grid.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','18f518b41e804f7cb3eeaaf92fef40e7','0','2','0'),
('61676','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Uptime','jmx["{#JMXOBJ}",UpTime]','1m','31d','365d','0','3','','uptime','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Uptime of GridGain instance.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4b3c99a88fbf4485a3dbf5efa2723ca7','0','2','0'),
('61677','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Communication outbound messages queue','jmx["{#JMXOBJ}",OutboundMessagesQueueSize]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Outbound messages queue size.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','904f0c843b1b434986043a63cb0890e7','0','2','0'),
('61678','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Communication messages received, rate','jmx["{#JMXOBJ}",ReceivedMessagesCount]','1m','31d','365d','0','0','','!msg/s','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of  messages received per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2a01c4dc23b34df6801be0901bf10ab0','0','2','0'),
('61679','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Communication reconnect rate','jmx["{#JMXOBJ}",ReconnectCount,maxNumbers]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Gets maximum number of reconnect attempts used when establishing connection with remote nodes per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','613114b7abb94bd5bbabc2d1d19975b7','0','2','0'),
('61680','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Communication messages sent, rate','jmx["{#JMXOBJ}",SentMessagesCount]','1m','31d','365d','0','0','','!msg/s','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of  messages sent per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e015293ddbb540e4b6b59ba6e28ed91e','0','2','0'),
('61681','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Coordinator','jmx["{#JMXOBJ}",Coordinator]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Current coordinator UUID.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3e1086638d954e939907fd2009408048','0','2','0'),
('61682','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Discovery message worker queue','jmx["{#JMXOBJ}",MessageWorkerQueueSize]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Message worker queue current size.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','29d85d09951346c1a7c30acc83f404fc','0','2','0'),
('61683','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Nodes failed','jmx["{#JMXOBJ}",NodesFailed]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Nodes failed count.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0aed9a4269ff4718aa443d1b053fa31b','0','2','0'),
('61684','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Nodes joined','jmx["{#JMXOBJ}",NodesJoined]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Nodes join count.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','43ea840b621e4f2a8643ca38479eb73e','0','2','0'),
('61685','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Nodes left','jmx["{#JMXOBJ}",NodesLeft]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Nodes left count.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0164664362e446209b4399081d807ca7','0','2','0'),
('61686','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Discovery reconnect, rate','jmx["{#JMXOBJ}",ReconnectCount]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Number of times node tries to (re)establish connection to another node per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e03329689c674ea997d55d11e1a0c2be','0','2','0'),
('61687','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: TotalProcessedMessages','jmx["{#JMXOBJ}",TotalProcessedMessages]','1m','31d','365d','0','0','','!msg/s','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of messages received per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e344575b799a4f69b79b45ef6590a649','0','2','0'),
('61688','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Discovery messages received, rate','jmx["{#JMXOBJ}",TotalReceivedMessages]','1m','31d','365d','0','0','','!msg/s','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of messages processed per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','adcf2c5981004c8da658122cc50a6518','0','2','0'),
('61689','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Locked keys','jmx["{#JMXOBJ}",LockedKeysNumber]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of keys locked on the node.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0b03ef7787684ab5abd99af4610adf59','0','2','0'),
('61690','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Transactions owner, current','jmx["{#JMXOBJ}",OwnerTransactionsNumber]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of active transactions for which this node is the initiator.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','446cbb708d354b2a9282e973d562527f','0','2','0'),
('61691','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Transactions committed, rate','jmx["{#JMXOBJ}",TransactionsCommittedNumber]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of transactions which were committed per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','21971cbf540c48df93fde079ce917a26','0','2','0'),
('61692','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Transactions holding lock, current','jmx["{#JMXOBJ}",TransactionsHoldingLockNumber]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of active transactions holding at least one key lock.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d8d3e05c6e7e4874b3149edb74774e6d','0','2','0'),
('61693','16','','10417','GridGain [{#JMXIGNITEINSTANCENAME}]: Transactions rolledback, rate','jmx["{#JMXOBJ}",TransactionsRolledBackNumber]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of transactions which were rollback per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2d1def1d4f414ce992cf5a6ff1bc4204','0','2','0'),
('61694','16','','10417','Cache group [{#JMXNAME}]: Backups','jmx["{#JMXOBJ}",Backups]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Count of backups configured for cache group.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d46bf088d33946a69a5b625566558994','0','2','0'),
('61695','16','','10417','Cache group [{#JMXNAME}]: Caches','jmx["{#JMXOBJ}",Caches]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'List of caches.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a535d161527b4821b717f114aaeb8b0b','0','2','0'),
('61696','16','','10417','Cache group [{#JMXNAME}]: Local node partitions, moving','jmx["{#JMXOBJ}",LocalNodeMovingPartitionsCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Count of partitions with state MOVING for this cache group located on this node.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','0a09c18adfd5477098684c47927f967b','0','2','0'),
('61697','16','','10417','Cache group [{#JMXNAME}]: Local node partitions, owning','jmx["{#JMXOBJ}",LocalNodeOwningPartitionsCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Count of partitions with state OWNING for this cache group located on this node.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c2a38de3743549e0850e678d1f91e2de','0','2','0'),
('61698','16','','10417','Cache group [{#JMXNAME}]: Local node entries, renting','jmx["{#JMXOBJ}",LocalNodeRentingEntriesCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Count of entries remains to evict in RENTING partitions located on this node for this cache group.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','be9b2cbf210e4e27a5887d77f2dafaad','0','2','0'),
('61699','16','','10417','Cache group [{#JMXNAME}]: Local node partitions, renting','jmx["{#JMXOBJ}",LocalNodeRentingPartitionsCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Count of partitions with state RENTING for this cache group located on this node.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','582acb454ffa4b129f5786e814df234f','0','2','0'),
('61700','16','','10417','Cache group [{#JMXNAME}]: Partition copies, max','jmx["{#JMXOBJ}",MaximumNumberOfPartitionCopies]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Maximum number of partition copies for all partitions of this cache group.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e026169754954bbe85afcef2534b4d0e','0','2','0'),
('61701','16','','10417','Cache group [{#JMXNAME}]: Partition copies, min','jmx["{#JMXOBJ}",MinimumNumberOfPartitionCopies]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Minimum number of partition copies for all partitions of this cache group.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b93a9ff86a2048bfbf8743b7a1c5ec06','0','2','0'),
('61702','16','','10417','Cache group [{#JMXNAME}]: Partitions','jmx["{#JMXOBJ}",Partitions]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Count of partitions for cache group.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8dac4ccaad0f4736b2065e2f1200e3ff','0','2','0'),
('61703','16','','10417','Thread pool [{#JMXNAME}]: Pool size, core','jmx["{#JMXOBJ}",CorePoolSize]','1m','31d','365d','0','3','','!msg','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The core number of threads.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7d6ab6a7180c44859b933784fb565212','0','2','0'),
('61704','16','','10417','Thread pool [{#JMXNAME}]: Pool size, max','jmx["{#JMXOBJ}",MaximumPoolSize]','1m','31d','365d','0','3','','!msg','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The maximum allowed number of threads.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','3ffebf40ed154a7eb7050e16d30f9f53','0','2','0'),
('61705','16','','10417','Thread pool [{#JMXNAME}]: Pool size','jmx["{#JMXOBJ}",PoolSize]','1m','31d','365d','0','3','','!msg','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Current number of threads in the pool.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1f7f5e0d19f6400fa8803eba2fb14f85','0','2','0'),
('61706','16','','10417','Thread pool [{#JMXNAME}]: Queue size','jmx["{#JMXOBJ}",QueueSize]','1m','31d','365d','0','3','','!msg','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Current size of the execution queue.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c4a5e348590341b29af96b57bf92240b','0','2','0'),
('61707','16','','10417','Cache group [{#JMXGROUP}]: Cache gets, rate','jmx["{#JMXOBJ}",CacheGets]','1m','31d','365d','0','0','','ops','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of gets to the cache per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6fb5dee0c7434b279eb21da7d54edacc','0','2','0'),
('61708','16','','10417','Cache group [{#JMXGROUP}]: Cache hits, pct','jmx["{#JMXOBJ}",CacheHitPercentage]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Percentage of successful hits.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','632a331fe886428fa7b2c8845a02b57a','0','2','0'),
('61709','16','','10417','Cache group [{#JMXGROUP}]: Cache misses, pct','jmx["{#JMXOBJ}",CacheMissPercentage]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'Percentage of accesses that failed to find anything.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','843b31df2e4d430082731b44e2653f13','0','2','0'),
('61710','16','','10417','Cache group [{#JMXGROUP}]: Cache puts, rate','jmx["{#JMXOBJ}",CachePuts]','1m','31d','365d','0','0','','ops','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of puts to the cache per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','96616d8c2b9c46b0bbd7350679476c36','0','2','0'),
('61711','16','','10417','Cache group [{#JMXGROUP}]: Cache removals, rate','jmx["{#JMXOBJ}",CacheRemovals]','1m','31d','365d','0','0','','ops','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of removals from the cache per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','308b3e27d35b439bbb2c1cf96f6d92fe','0','2','0'),
('61712','16','','10417','Cache group [{#JMXGROUP}]: Cache size','jmx["{#JMXOBJ}",CacheSize]','1m','31d','365d','0','3','','!keys','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of non-null values in the cache as a long value.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e4886d5b699e432c8e6bb47b23b9c314','0','2','0'),
('61713','16','','10417','Cache group [{#JMXGROUP}]: Cache transaction commits, rate','jmx["{#JMXOBJ}",CacheTxCommits]','1m','31d','365d','0','0','','!tps','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of transaction commits per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','304ff6af92c0473aab8216d16509d28f','0','2','0'),
('61714','16','','10417','Cache group [{#JMXGROUP}]: Cache transaction rollbacks, rate','jmx["{#JMXOBJ}",CacheTxRollbacks]','1m','31d','365d','0','0','','!tps','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of transaction rollback per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bd5b517d5a384c70a070658bc41734bf','0','2','0'),
('61715','16','','10417','Cache group [{#JMXGROUP}]: Cache heap entries','jmx["{#JMXOBJ}",HeapEntriesCount]','1m','31d','365d','0','3','','!keys','','',NULL,NULL,'','','0','{$GRIDGAIN.USER}','{$GRIDGAIN.PASSWORD}','','','2',NULL,'The number of entries in heap memory.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a0d3a73939564dc39267ccdca06d524b','0','2','0'),
('61716','16','','10381','Data region metrics','jmx.discovery[beans,"org.apache:group=DataRegionMetrics,*"]','10m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','2aa2cf6500b347e083c492aa2eade85a','0','2','0'),
('61717','16','','10381','Local node metrics','jmx.discovery[beans,"org.apache:group=Kernal,name=ClusterLocalNodeMetricsMXBeanImpl,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','92f16f4d02e149c5ae5b09f1007cead8','0','2','0'),
('61718','16','','10381','Cluster metrics','jmx.discovery[beans,"org.apache:group=Kernal,name=ClusterMetricsMXBeanImpl,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','1b3b0461964a418a962539ec4c17aca6','0','2','0'),
('61719','16','','10381','Ignite kernal metrics','jmx.discovery[beans,"org.apache:group=Kernal,name=IgniteKernal,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c1513c51c41046c288b9add14feaabdb','0','2','0'),
('61720','16','','10381','TCP Communication SPI metrics','jmx.discovery[beans,"org.apache:group=SPIs,name=TcpCommunicationSpi,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','afd0c3182f8d4a299a180848eb096b95','0','2','0'),
('61721','16','','10381','TCP discovery SPI','jmx.discovery[beans,"org.apache:group=SPIs,name=TcpDiscoverySpi,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bab4df33f0bb4b5d892438865b6a97f2','0','2','0'),
('61722','16','','10381','Transaction metrics','jmx.discovery[beans,"org.apache:group=TransactionMetrics,name=TransactionMetricsMxBeanImpl,*"]','30m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','709e596e106b40869be746dc84214c06','0','2','0'),
('61723','16','','10381','Cache groups',E'jmx.discovery[beans,"org.apache:group=\\"Cache groups\\",*"]','10m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','aefce82342554933ae1214dcd7ca708b','0','2','0'),
('61724','16','','10381','Thread pool metrics',E'jmx.discovery[beans,"org.apache:group=\\"Thread Pools\\",*"]','10m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d532f96029b7415fac925e6fd53100f4','0','2','0'),
('61725','16','','10381','Cache metrics',E'jmx.discovery[beans,"org.apache:name=\\"org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl\\",*"]','10m','31d','365d','0','4','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','1',NULL,'','0','7d','1','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b050fc87d8a3400282739f03c1a5fefd','0','2','0'),
('61726','16','','10381','Data region {#JMXNAME}: Allocation, rate','jmx["{#JMXOBJ}",AllocationRate]','1m','31d','365d','0','0','','!pps','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Allocation rate (pages per second) averaged across rateTimeInternal.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','56780f0bc58e499bb452e5879961ac9d','0','2','0'),
('61727','16','','10381','Data region {#JMXNAME}: Checkpoint buffer size','jmx["{#JMXOBJ}",CheckpointBufferSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Total size in bytes for checkpoint buffer.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9b3528eb623c4fdda10228671268bcdb','0','2','0'),
('61728','16','','10381','Data region {#JMXNAME}: Dirty pages','jmx["{#JMXOBJ}",DirtyPages]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Number of pages in memory not yet synchronized with persistent storage.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','21f8fc17522d40cc8723053e8ed8716f','0','2','0'),
('61729','16','','10381','Data region {#JMXNAME}: Eviction, rate','jmx["{#JMXOBJ}",EvictionRate]','1m','31d','365d','0','0','','!pps','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Eviction rate (pages per second).','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','8bcc78ee4e984f9c8c07b60e5dd35c42','0','2','0'),
('61730','16','','10381','Data region {#JMXNAME}: Size, max','jmx["{#JMXOBJ}",MaxSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Maximum memory region size defined by its data region.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7fa689749cd64474af294976e4bc7762','0','2','0'),
('61731','16','','10381','Data region {#JMXNAME}: Offheap size','jmx["{#JMXOBJ}",OffHeapSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Offheap size in bytes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','bb0dd42c5a3c400f95a7084792e7522e','0','2','0'),
('61732','16','','10381','Data region {#JMXNAME}: Offheap used size','jmx["{#JMXOBJ}",OffheapUsedSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Total used offheap size in bytes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a793c5e41891467fb3ee53722f9fae13','0','2','0'),
('61733','16','','10381','Data region {#JMXNAME}: Pages fill factor','jmx["{#JMXOBJ}",PagesFillFactor]','1m','31d','365d','0','0','','%','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'The percentage of the used space.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b4fb229defdb434b8307d91e2f17f5db','0','2','0'),
('61734','16','','10381','Data region {#JMXNAME}: Pages replace, rate','jmx["{#JMXOBJ}",PagesReplaceRate]','1m','31d','365d','0','0','','!pps','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Rate at which pages in memory are replaced with pages from persistent storage (pages per second).','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4ca77d42a8f44e278b44417d33094535','0','2','0'),
('61735','16','','10381','Data region {#JMXNAME}: Allocated, bytes','jmx["{#JMXOBJ}",TotalAllocatedSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Total size of memory allocated in bytes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b62d56147b3d43aebd1f3c9eb13a8e05','0','2','0'),
('61736','16','','10381','Data region {#JMXNAME}: Used checkpoint buffer size','jmx["{#JMXOBJ}",UsedCheckpointBufferSize]','1m','31d','365d','0','0','','B','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Used checkpoint buffer size in bytes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','14b02d5526c44f2599e1893b815b1d2b','0','2','0'),
('61737','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Jobs active, current','jmx["{#JMXOBJ}",CurrentActiveJobs]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Number of currently active jobs concurrently executing on the node.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','7f8721ab4e6c4b23bd1e948f8c1c4480','0','2','0'),
('61738','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Jobs cancelled, current','jmx["{#JMXOBJ}",CurrentCancelledJobs]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Number of cancelled jobs that are still running.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','13b1867082c340d0a6f317c94376a055','0','2','0'),
('61739','16','','10381','[{#JMXIGNITEINSTANCENAME}]: PME duration, current','jmx["{#JMXOBJ}",CurrentPmeDuration]','1m','31d','365d','0','3','','ms','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Current PME duration in milliseconds.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','832c3683406c460c826522f8b2e3aafa','0','2','0'),
('61740','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Jobs rejected, current','jmx["{#JMXOBJ}",CurrentRejectedJobs]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Number of jobs rejected after more recent collision resolution operation.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','6b68ba90e40b4fa0a798dfde64ba8f01','0','2','0'),
('61741','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Threads count, current','jmx["{#JMXOBJ}",CurrentThreadCount]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Current number of live threads.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c459658bf32f4ca5aac6cfe1f8a8cc5b','0','2','0'),
('61742','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Jobs waiting, current','jmx["{#JMXOBJ}",CurrentWaitingJobs]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Number of queued jobs currently waiting to be executed.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','e29b01d139bd4d7e8248ccddb2a19baa','0','2','0'),
('61743','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Heap memory used','jmx["{#JMXOBJ}",HeapMemoryUsed]','1m','31d','365d','0','3','','B','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Current heap size that is used for object allocation.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','5f61ae253e4f459ebc403ca69d85a617','0','2','0'),
('61744','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Jobs cancelled, rate','jmx["{#JMXOBJ}",TotalCancelledJobs]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Total number of jobs cancelled by the node per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','923c561a1a504ce399bf6b1892e29a3e','0','2','0'),
('61745','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Jobs executed, rate','jmx["{#JMXOBJ}",TotalExecutedJobs]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Total number of jobs handled by the node per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d6044f18b5e741818ca299ce8b19ccdb','0','2','0'),
('61746','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Jobs rejects, rate','jmx["{#JMXOBJ}",TotalRejectedJobs]','1m','31d','365d','0','0','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Total number of jobs this node rejects during collision resolution operations since node startup per second.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','15135ffe1ec74e8c920ee4c70b986904','0','2','0'),
('61747','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Nodes, Active baseline','jmx["{#JMXOBJ}",ActiveBaselineNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'The number of nodes that are currently active in the baseline topology.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','238c39ab7d5640abb3a81f0a51acc065','0','2','0'),
('61748','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Nodes, Baseline','jmx["{#JMXOBJ}",TotalBaselineNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Total baseline nodes that are registered in the baseline topology.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','4edffa6b8f294d959797a5c6ca4ccc5a','0','2','0'),
('61749','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Nodes, Client','jmx["{#JMXOBJ}",TotalClientNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'The number of client nodes in the cluster.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','a4116287c8a34359a46eff1217f7418d','0','2','0'),
('61750','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Nodes, total','jmx["{#JMXOBJ}",TotalNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Total number of nodes.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','517a320bd6964ec7906bf6b0408d834b','0','2','0'),
('61751','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Nodes, Server','jmx["{#JMXOBJ}",TotalServerNodes]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'The number of server nodes in the cluster.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','9cfa72ba360840d9b87de9c59b780529','0','2','0'),
('61752','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Version','jmx["{#JMXOBJ}",FullVersion]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Version of Ignite instance.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','b9e23036503a4227bfbb21969583120e','0','2','0'),
('61753','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Local node ID','jmx["{#JMXOBJ}",LocalNodeId]','1m','31d','0','0','1','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Unique identifier for this node within grid.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','cfa6cb5b02634c9d803b7c3a0774a7ce','0','2','0'),
('61754','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Uptime','jmx["{#JMXOBJ}",UpTime]','1m','31d','365d','0','3','','uptime','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Uptime of Ignite instance.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','d48d3694467e4153af369475672e4811','0','2','0'),
('61755','16','','10381','[{#JMXIGNITEINSTANCENAME}]: Communication outbound messages queue','jmx["{#JMXOBJ}",OutboundMessagesQueueSize]','1m','31d','365d','0','3','','','','',NULL,NULL,'','','0','{$IGNITE.USER}','{$IGNITE.PASSWORD}','','','2',NULL,'Outbound messages queue size.','0','7d','0','service:jmx:rmi:///jndi/rmi://{HOST.CONN}:{HOST.PORT}/jmxrmi',NULL,'','','','','200','1','0','','','0','0','0','0','0','0','0','c6d996a3b2754963a916f44e8e99e828','0','2','0'),
