<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Скриптовая задачка (в приложении к hardware-мониторингу на HP Proliant)]]></title><description><![CDATA[<p dir="auto">Имеется зоопарк серверов серии HP Proliant, с которых NetXMS'ом по SNMP собираются температуры с внутренних датчиков. Сервера разных времён и моделей, поэтому у них разный состав этих датчиков. Где-то их 3 штуки, где-то 5, где-то первый датчик мониторит cpu, а где-то - powersupply...<br />
(Местоположение датчика нумер N можно получить SNMP-запросом по OID .1.3.6.1.4.1.232.6.2.6.8.1.3.0.[N]. Затем запросом по OID .1.3.6.1.4.1.232.6.2.6.8.1.4.0.[N] получить температуру.)</p>
<p dir="auto">На первых порах интересуют только данные датчиков с местоположением ambient.</p>
<p dir="auto">Хотелось бы, не вдаваясь в подробности установки датчиков на каждой модели, получать полный список их значений с каждого сервера, находить там тот, который ambient, и слать алерт при превышении порога, скажем, 20 гр.</p>
<p dir="auto">Завёл шаблон, перенёс в него все Пролианты, завёл в нём пары датчиков ([N]SensorLocale, [N]SensorData) ; N=1..5.<br />
Во всех датчиках [N]SensorData вобью Thresholds, при превышении которых сработает некий эвент.<br />
На некоем полу-NXSL, полу-псевдоязыке попытался накропать скрипт, который хочу вставить в Event Processing Policy:</p>
<pre><code>set i=1;             //define integer variable

while ( i &lt; 6 )     //cycle from 1Sensor[Locale/Data] to 5Sensor[Locale/Data]
{
	if ( GetDCIValue($node, FindDCIByDescription($node, right("SensorLocale", 13, i))) == "ambient" )   // is [N]SensorLocale == "ambient" ?
	{
		if ( GetDCIValue($node, FindDCIByDescription($node, right("SensorData", 11, i))) &gt; 20 )     // is ambient sensor overheat?
		{
			return GetDCIValue($node, FindDCIByDescription($node, right("SensorData", 11, i))); // if true, true then get data from ambient sensor
		};
	};
	i++;
};

return 0;         // return current temperature from overheated ambient sensor, or 0.
</code></pre>
<p dir="auto">, т.е., при срабатывании эвента отрабатывает скрипт, который перепроверяет, какой же это эвент сработал. Уж не ambient ли? Если ambient, то ахтунг. Как-то это всё криво. Может можно лучше? И заодно скрипт причесать... ::)</p>
]]></description><link>https://forum.netxms.org/topic/594/скриптовая-задачка-в-приложении-к-hardware-мониторингу-на-hp-proliant</link><generator>RSS for Node</generator><lastBuildDate>Fri, 13 Nov 2026 07:25:04 GMT</lastBuildDate><atom:link href="https://forum.netxms.org/topic/594.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 Jan 2009 14:27:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Скриптовая задачка (в приложении к hardware-мониторингу на HP Proliant) on Wed, 04 Feb 2009 14:47:37 GMT]]></title><description><![CDATA[<p dir="auto">Вариант с циклом:</p>
<pre><code>sub main()
{
        i = 1;
        while(i &lt; 6)
        {
                if (GetDCIValue($node, FindDCIByDescription($node, i . "SensorLocale")) == "ambient" )
                        return GetDCIValue($node, FindDCIByDescription($node, i . "SensorData"));
                i++;
        }
        return 0;
}
</code></pre>
]]></description><link>https://forum.netxms.org/post/2899</link><guid isPermaLink="true">https://forum.netxms.org/post/2899</guid><dc:creator><![CDATA[victor]]></dc:creator><pubDate>Wed, 04 Feb 2009 14:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Скриптовая задачка (в приложении к hardware-мониторингу на HP Proliant) on Wed, 04 Feb 2009 13:43:16 GMT]]></title><description><![CDATA[<p dir="auto">В общем, сделал так - завёл в шаблоне ещё один DCI, впихнул ему в thresholds скрипт:</p>
<pre><code>sub main()
{
	if ( GetDCIValue($node, FindDCIByDescription($node, "1SensorLocale")) == "ambient" )
		return GetDCIValue($node, FindDCIByDescription($node, "1SensorData"));
	if ( GetDCIValue($node, FindDCIByDescription($node, "2SensorLocale")) == "ambient" )
		return GetDCIValue($node, FindDCIByDescription($node, "2SensorData"));
	if ( GetDCIValue($node, FindDCIByDescription($node, "3SensorLocale")) == "ambient" )
		return GetDCIValue($node, FindDCIByDescription($node, "3SensorData"));
	if ( GetDCIValue($node, FindDCIByDescription($node, "4SensorLocale")) == "ambient" )
		return GetDCIValue($node, FindDCIByDescription($node, "4SensorData"));
	if ( GetDCIValue($node, FindDCIByDescription($node, "5SensorLocale")) == "ambient" )
		return GetDCIValue($node, FindDCIByDescription($node, "5SensorData"));
	return 0;
}
</code></pre>
<p dir="auto">Ну и в Event Processing просто отслеживаю только его состояние.</p>
<p dir="auto">Осталось научиться заводить переменные и делать циклы типа for на вашем NXSL, чтобы скрипт свернуть до 3-х строк <img src="https://forum.netxms.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=72b86a538fc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:1.4em;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
]]></description><link>https://forum.netxms.org/post/2898</link><guid isPermaLink="true">https://forum.netxms.org/post/2898</guid><dc:creator><![CDATA[Ethril]]></dc:creator><pubDate>Wed, 04 Feb 2009 13:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to Скриптовая задачка (в приложении к hardware-мониторингу на HP Proliant) on Wed, 28 Jan 2009 09:40:52 GMT]]></title><description><![CDATA[<p dir="auto">Долго думал над красивым решением, без патчей на сервер не получится к сожалению. В следующей версии сделаю дополнительные функции, которые упростят конфигурацию в таких ситуациях. Пока-что можно сделать такой скрипт для event processing policy (для события по трешолду на параметры [N]SensorData):</p>
<pre><code>sub main()
{
   loc = GetDCIValue($node, FindDCIByDescription($node, left($2, 1) . "SensorLocale"));
   return loc == "ambient";
}
</code></pre>
<p dir="auto">C таким скриптом правило будет срабатывать для событий от [N]SensorData если значение соответствующего [N]SensorLocale равно строке <strong>ambient</strong>.</p>
<p dir="auto">P.S. Скрипт можно упростить до</p>
<pre><code>GetDCIValue($node, FindDCIByDescription($node, left($2, 1) . "SensorLocale")) == "ambient"
</code></pre>
]]></description><link>https://forum.netxms.org/post/2882</link><guid isPermaLink="true">https://forum.netxms.org/post/2882</guid><dc:creator><![CDATA[victor]]></dc:creator><pubDate>Wed, 28 Jan 2009 09:40:52 GMT</pubDate></item></channel></rss>