Мониторинг серверов

Stok

Заблокирован
Сообщения
91
Реакции
41
Баллы
8,120
Здравствуйте дорогие форумчане,знает кто как сделать такой же мониторинг?
dfghjhfgwerg.png
Заранее благодарю за помощь!
 
Последнее редактирование модератором:
я знаю как. Но с внешним видом, т.е. ксс не помогу.
Есть такая утилита или даже не знаю, скрипт, называется LGSL
еще есть более новый, там разраб все файлы на гитхабе держит, если лгсл не подойдет, обращайся, я мб найду
зы: я вот сейчас себе тоже буду делать, так что мб совместными усилиями что и получится.
Кстати, есть уже готовые решения на LGSL, просто загугли, но вставлять код придется ручками.

зы: для меня тема очень актуальна=)) форум игровой тематики, в особенности кс=)))
 
я знаю как. Но с внешним видом, т.е. ксс не помогу.
Есть такая утилита или даже не знаю, скрипт, называется LGSL
еще есть более новый, там разраб все файлы на гитхабе держит, если лгсл не подойдет, обращайся, я мб найду
зы: я вот сейчас себе тоже буду делать, так что мб совместными усилиями что и получится.
Кстати, есть уже готовые решения на LGSL, просто загугли, но вставлять код придется ручками.

зы: для меня тема очень актуальна:-) форум игровой тематики, в особенности кс:-))
Ты для меня прям Америку открыл,про lgsl Я знал,я хотел узнать как встроить так же!
 
Ты для меня прям Америку открыл,про lgsl Я знал,я хотел узнать как встроить так же!
готовые решения есть, но ими никто не поделится) так что ручками
 
готовые решения есть, но ими никто не поделится) так что ручками
Да ну? - поделились же, приобретайте.
Если у вас чисто кс сервер - то цеплять целый LGSL нет смысла.

out455, если есть немного знаний, то можно набросать свой ....

Мой костыль мониторинга.
В папке с форумом создаём файл, допустим: monitoring.php.
В него пишем следующее:
PHP:
<?php
/**
*    Functions
*/
function error()
{
    header('HTTP/1.1 404 Not Found');
    die();
}
/**
*    Config
*/
$sid    = (isset($_GET['server_id'])) ? $_GET['server_id'] : 0;
$sid    = ( ($sid>0) && ($sid<4) ) ? $sid : 0;
$servers = array('cs.ru');
$ip      = $servers[$sid];
$port    = (isset($_GET['port'])) ? (int)$_GET['port'] : 0;
$timeout = 10;
$HOST_LEN = 35;
$MAP_LEN  = 11;
$MAP_PATH = '/images/maps/cstrike/';
$WWW_ROOT = '/var/www';
$MAP_NONE = '/styles/default/xenforo/avatars/avatar_s.png';
/**
*    Code
*/
if (!$port)
    error();
if( $server = @fsockopen( "udp://".$ip, $port, $errno, $errstr ) )
{
    $write = "\xFF\xFF\xFF\xFFTSource Engine Query\x00";
    socket_set_timeout($server,$timeout);
    fwrite($server, $write);
    $server_response = fread($server,4096);
    fclose($server);
}
if(!$server_response)
    error();
$server_response = substr($server_response, 5);
$server_info = explode(chr(0x00), $server_response);
    $info['hostname'] = substr($server_info[0], 1);
    $info['map'] = $server_info[1];
    $info['players'] = ord(substr($server_info[5], 0, 1));
    $info['max'] = ($info['players'] == 0) ?
        ((ord(substr($server_info[6], 0, 1))==100) ?
            ord(substr($server_info[5], 1, 1)): ord(substr($server_info[6], 0, 1))) :
        ord(substr($server_info[5], 1, 1));
if(strlen($info['hostname']) >= $HOST_LEN)
    $info['hostname'] = str_replace(
        substr($info['hostname'], $HOST_LEN, strlen($info['hostname'])),
        '...',
        $info['hostname']
    );
$info['map_path'] = $MAP_PATH . $info['map'] . '.jpg';
if (!file_exists($WWW_ROOT . $info['map_path']))
    $info['map_path'] = $MAP_NONE;
$info['port'] = $port;
// out
echo json_encode($info);
?>
Рассмотрим по порядку:
$servers = array('cs.ru'); - заместо cs.ru - вписываем хост вашего сервера, допустим cs.ru.
Если же у вас их два, вписываем их через запятую, пример: $servers = array('cs.ru','cs2.ru');

$MAP_PATH = '/acpanel/images/maps/cstrike/'; - путь до папки с картинками карт.
$WWW_ROOT = '/var/www'; - путь до домашней папки.
$MAP_NONE = '/forum/styles/default/xenforo/avatars/avatar_s.png'; - путь до картики, если нет картинки текущей карты ( в данном случае картинка с вопросом ).

Далее, идем в админку xenForo, создаем новый шаблон, например: sidebar_block_online_cs.
В него пишем следующее:
PHP:
<xen:edithint template="sidebar.css" />
<xen:if hascontent="true">
    <div class="section csOnline avatarList">
        <div class="secondaryContent">
            <h3>{xen:phrase staff_online_cs}</h3>
            <ul>
                <xen:contentcheck>
                    <li>{xen:phrase staff_online_cs_empty}</li>
                </xen:contentcheck>
            </ul>
        </div>
    </div>
</xen:if>
<script>
    $("div.csOnline div ul").empty();
    for (cs_server = 27013; cs_server <= 27018; cs_server++) {
        $.ajax({
            type:"GET",
            url:"monitoring.php?server_id=0&port="+cs_server,
            data: "",
            dataType:"json",
            cache:false,
            success:function (data) {
                $("div.csOnline div ul").append(   
                    "<li>" +
                    "<a href=\"steam://connect/cs.ru:" + data.port + "\" class=\"avatar\" data-avatarHtml=\"true\">" +
                    "<img src=\"" + data.map_path + "\" width=\"48\" height=\"48\" alt=\"" + data.map + "\" title=\"" + data.map + "\" /></a>" +
                    "<a href=\"steam://connect/cs.ru:" + data.port + "\" class=\"hostname\">" + data.hostname + "</a>" +
                    "<div class=\"userTitle\">{xen:phrase staff_online_cs_players}" + data.players + "/" + data.max + "</div>" +
                    "</li>"
                );
            }
        });
    }
</script>
Рассмотрим по порядку:
for (cs_server = 27013; cs_server <= 27018; cs_server+:-) - порты игровых серверов от и до, в данном случае от 27013 и до 27018.​

Сохраняем данный шаблон.
Далее вставляем его в удобное для нас место
PHP:
<!-- block: sidebar_block_online_cs -->
        <xen:include template="sidebar_block_online_cs" />
<!-- end block: sidebar_block_online_cs -->
У меня вставлено в шаблон: forum_list, после <xen:edithint template="sidebar.css" />
Фразы:
Код:
staff_online_cs - Мониторинг серверов
staff_online_cs_empty - Пусто
staff_online_cs_players - Игроки:

Итог: 111.png

З.Ы. Прикрепил .php файлик. Удачи.
 

Вложения

  • monitoring.zip
    932 байт · Просмотры: 64
Последнее редактирование модератором:
Если надо, то завтра как приду с работы, могу выложить . Покупал для своего сайта. Работает отлично.
 
  • Мне нравится
Реакции: mms
Мой вариант работает только с одним протоколом ( 47 или 48 ). Если кому то еще интересно, могу переписать ... Появилось свободное время.

По многочисленным просьбам, переделал под оба протокола + небольшие правки:
  • Копируем папки js, styles и файл monitoring.php в корень своего ...
  • В панели управления создаем шаблоны monitoring_bar и monitoring_bar.css и копируем туда содержимое:
Код:
<script src="{xen:helper javaScriptUrl, '{$javaScriptSource}/jquery/jquery.timer.js'}"></script>

<xen:require css="monitoring_bar.css" />

<xen:if hascontent="true">
    <div class="monitoring_wrapper">
        <div class="monitoring_servers">
            <ul class="monitoring_ul">
                <xen:contentcheck>
                    <li></li>
                </xen:contentcheck>
            </ul>
        </div>
    </div>
</xen:if>


<script>
    jQuery(document).ready(function()
    {
        $('ul.monitoring_ul').empty();

        for(srv_port = 27015; srv_port < 27021; srv_port++) {
            $('ul.monitoring_ul').append('<li rel="' + srv_port + '"></li>');
            $.ajax({
                type: "GET",
                url: "monitoring.php?port=" + srv_port,
                data: "",
                dataType: "json",
                cache: false,
                success: function (data) {
                    $('[rel=' + data.port + ']').empty().append(
                    '<div class="monitoring_container" title="' + data.name + '" alt="' + data.name + '"> ' +
                    '<a href="steam://connect/' + data.ip + ':' + data.port + '" class="monitoring_a" draggable="false" id="z' + data.port + '">' +
                    '<div class="monitoring_info_server"></div>' +
                    '<div class="monitoring_info">' +
                    '<div class="monitoring_info_map">' + data.map + '</div>' +
                    '<div class="monitoring_info_players">' + data.online + '</div>' +
                    '<div class="monitoring_info_hostname" id="c' + data.port + '">' + data.ip + ':' + data.port + '</div>' +
                    '<div class="monitoring_info_mod">' + data.shortname + '</div>' + '</div>' +
                    '<div class="monitoring_image_map" style="background-image: url(' + data.img + ');"></div>' +
                    '</a></div> '
                    )
                }
            });
        };

        $('ul.monitoring_ul').everyTime(15000, 'timer', function() {
            for(srv_port = 27015; srv_port < 27021; srv_port++) {
                $.ajax({
                    type: "GET",
                    url: "monitoring.php?port=" + srv_port,
                    data: "",
                    dataType: "json",
                    cache: false,
                    success: function (data) {
                        $('[rel=' + data.port + ']').empty().append(
                        '<div class="monitoring_container" title="' + data.name + '" alt="' + data.name + '"> ' +
                        '<a href="steam://connect/' + data.ip + ':' + data.port + '" class="monitoring_a" draggable="false" id="z' + data.port + '">' +
                        '<div class="monitoring_info_server"></div>' +
                        '<div class="monitoring_info">' +
                        '<div class="monitoring_info_map">' + data.map + '</div>' +
                        '<div class="monitoring_info_players">' + data.online + '</div>' +
                        '<div class="monitoring_info_hostname" id="c' + data.port + '">' + data.ip + ':' + data.port + '</div>' +
                        '<div class="monitoring_info_mod">' + data.shortname + '</div>' + '</div>' +
                        '<div class="monitoring_image_map" style="background-image: url(' + data.img + ');"></div>' +
                        '</a></div> '
                        )
                    }
                });
            };
        });
    });
</script>

Код:
.monitoring_wrapper
{
    clear: both;
    overflow: hidden;
    margin: 10px 0px 0px 0px;
    padding: 0px;
    width: 100%;
}

.monitoring_servers
{
    clear: both;
    float: none;
    display: block;
    overflow: hidden;
    white-space: none;
    height: auto;
    max-height: 120px;
}

ul.monitoring_ul
{
    font: 1px Verdana, Geneva, sans-serif;
    text-align: justify;
    line-height: 0;
    font-size: 1px;
    text-justify: newspaper;
    zoom:1;
    text-align-last: justify;
    margin: 0px;
    padding: 0px;
    display: block;
    white-space:none;
}

ul.monitoring_ul:after
{
    width: 100%;
    height: 0px;
    visibility: hidden;
    overflow: hidden;
    content: '';
    display: inline-block;
    white-space:none;
}

ul.monitoring_ul li
{
    display: inline;
    text-align: left;
    line-height: normal;
    font-size: 11px;
    vertical-align: top;
}

.monitoring_container
{
    width: 160px;
    display: inline-block;
    cursor: pointer;
    padding: 0px;
    margin: 0px;
    overflow: hidden;
    white-space: none;
    height: 120px;
}

.monitoring_a
{
    display: block;
    background: url("@imagePath/xenforo/monitoring/ajax-map-loader.gif") 50% 40% no-repeat #FFF;
    border-radius: 3px 3px 0px 0px;
    position: relative;
    cursor: pointer;
    text-decoration: none;
    opacity: 0.9;
}

.monitoring_a:hover
{
    opacity: 1.0;
}

.monitoring_info
{
    height: 32px;
    width: 148px;
    margin-top: 102px;
    transition: all 0.2s cubic-bezier(0, 0, 0.58, 1) 0;
    background: rgba(0, 0, 0, 0.506);
    color: #FFFFFF;
    padding: 3px 6px;
    position: absolute;
    display: block;
    cursor: pointer;
    font-size: 11px;
    font-family: "tahoma", "arial", "verdana", sans-serif, "Lucida Sans";
    font-weight: 400;
    line-height: 10px;
}

.monitoring_info:hover,
.monitoring_a:hover .monitoring_info
{
    margin-top: 82px;
}

.monitoring_info_map
{
    height: 12px;
    line-height: 12px;
    overflow: hidden;
    padding-right: 30px;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.monitoring_info_players
{
    top: 5px;
    font-weight: 700;
    position: absolute;
    right: 3px;
}

.monitoring_info_hostname
{
    height: 12px;
    line-height: 12px;
    overflow: hidden;
    text-overflow: ellipsis;
    padding-right: 30px;
    white-space: nowrap;
    margin-top: 6px;
    font-size: 10px;
}

.monitoring_info_mod
{
    bottom: 6px;
    font-weight: 700;
    position: absolute;
    right: 3px;
    font-size: 10px;
}

.monitoring_info_server
{
    display: block;
    cursor: pointer;
    position: absolute;
    height: 24px;
    width: 24px;
    right: 68px;
    top: 48px;
}

.monitoring_a:hover .monitoring_info_server
{
    background-image: url("@imagePath/xenforo/monitoring/play.png");
}

.monitoring_image_map
{
    border-radius: 3px 3px 0px 0px;
    background: 50% 50% no-repeat transparent;
    height: 120px;
    width: 160px;
    display: block;
}
  • Заменяем в шаблоне monitoring_bar в 2 строках for(srv_port = 27015; srv_port < 27021; srv_port+:-) адреса портов серверов на свои ( сервера от и до ).
  • monitoring.php ищем SERVER_IP_ADDRESS и заменяем на адрес своего сервера ( например: ).
  • monitoring.php ищем PATH_IMAGES_MAPS и заменяем на локальный путь к скпированной ранее папке styles/maps ( например: public_html/community/styles/maps/ ).
  • В шаблон PAGE_CONTAINER добавлем перед <!-- main content area --> строчки:
Код:
<xen:if is="{$h1} == {$xenOptions.boardTitle}">
    <xen:include template="monitoring_bar" />
</xen:if>
  • Вроде бы всё.
Выглядеть все это будет вот так ( либо живой пример: ):

Скриншот 2015-03-01 12.26.15.png


P.S. В monitoring.php есть функция обрезания название сервера:
Код:
if ( !$info["name"] ) {
            $info["shortname"]    = "";
        } else {
            $info["shortname"]    = strstr( $info["name"], "#" );
        }

Будет получше всех этих громоздких lgsl и прочей лабуды, можно сделать все одним плагином, но мне лень, если кому то ...
 

Вложения

  • monitoring.zip
    262.2 KB · Просмотры: 53
Последнее редактирование модератором:
Мой вариант работает только с одним протоколом ( 47 или 48 ). Если кому то еще интересно, могу переписать ... Появилось свободное время.
У меня возникло 2 вопроса . Я новичок и плохо в этом соображаю . Сделал всё по инструкции .
Итак :
1. Почему то не показывается лого карты , для проверки переименовал первый попавшийся и назвал по названию карты которая была в данный момент на сервере . Файл noimage.jpg и noserver.jpg показываются .
2. Где подгоняется размер баннера ? А то как то не очень :
 

Вложения

  • Screenshot_7.jpg
    Screenshot_7.jpg
    35.4 KB · Просмотры: 135
Последнее редактирование:
  1. Перечитайте инструкцию, там все написано. Либо же изучите: monitoring.php там все ... понятно.
  2. "Курите" monitoring_bar.css
супер мониторинг, еще бы как нибудь туда прикрутить список игроков
 
У меня возникло 2 вопроса . Я новичок и плохо в этом соображаю . Сделал всё по инструкции .
Итак :
1. Почему то не показывается лого карты , для проверки переименовал первый попавшийся и назвал по названию карты которая была в данный момент на сервере . Файл noimage.jpg и noserver.jpg показываются .
2. Где подгоняется размер баннера ? А то как то не очень :
Поддерживаю, дефолтные картинки отображаются, при добавлении картинок результат нулевой, не отображаются.

Проблема решена.
У кого отображаются дефолтные картинке (сервер не работает, нет такой карты) но при этом в директории есть картинки.
Проблема в следующем:
Должен быть указан путь не до корня сайта/форума
$IMG_FILE_PATH = '/var/www/html/mysite/myforum
А полный путь до папки картинок
$IMG_FILE_PATH = '/var/www/html/mysite/myforum/styles/maps/
 
Последнее редактирование модератором:
Hajmer, ... monitoring.php ищем PATH_IMAGES_MAPS и заменяем на локальный путь к скопированной ранее папке styles/maps ( например: public_html/community/styles/maps/ ).

В инструкции это указано. К.О.
 
Последнее редактирование:
Slowpoked, спасибо за мониторинг, 100% лучше танцев с бубном с огромным LGSL. А не мог бы ты добавить сюда еще и поддержку TeamSpeak 3? Огромного пула инфы получать не надо, достаточно только объема онлайна и статуса сервера. Класс в принципе можно с того же LGSL дернуть.
 
Я бы не сказал, что LGSL огромный. Скорее просто устаревший, но все еще работающий.
Такую штуку тоже достаточно легко сделать
 

Вложения

  • clip-2016-08-24-01-12-48-39157348.png
    clip-2016-08-24-01-12-48-39157348.png
    12.8 KB · Просмотры: 109
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу