• Как отличить переменную объявленную как null от необъявленной переменной?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    php.net/manual/ru/function.is-null.php
    <?php
    error_reporting(E_ALL); 
    
    set_error_handler('eh');
    function eh($severity, $message, $filename, $lineno) {
      if (error_reporting() == 0) {
        return;
      }
      if (error_reporting() & $severity) {
        throw new ErrorException($message, 0, $severity, $filename, $lineno);
      }
    }
    
    //$abc=NULL;
    
    try {
      if($abc===NULL) echo 'NULL';
    } catch (Exception $e) {
      echo 'NOT DEFINED';
    }
    
    ?>


    Ещё вариант:
    <?php
    error_reporting(E_ALL); 
    
    //$abc=NULL;
    
    if(array_key_exists('abc',get_defined_vars())) var_dump($abc);
    else echo 'NOT DEFINED';
    
    ?>
    Ответ написан
    Комментировать
  • Любопытный вопрос из тестового задания?

    @robofox
    $x = print("ok");
    if ($x == 1 && $x==2 && $x==3){
      echo("ok");
    }
    

    Они же не уточнили, что должна отработать инструкция с условием ;)
    Ответ написан
    1 комментарий
  • Почему zabbix шлет повторные уведомления?

    microphone
    @microphone
    Сломалось - читай логи!
    Судя по описанию тригер ложно сменил статус обьекта на "ок", надо перепилить проверочные параметры.
    И месаги отдельных групп (типа принтаки) вроде как отключались, погуглите рецепты.
    Ответ написан
    6 комментариев
  • InfluxDB, Prometheus, OpenTSDB. Что выбрать для хранения и анализа метрик?

    Не очень понял задачу, попробую объяснить разницу, как я это понимаю из своего опыта:

    OpenTSDB:
    * работает поверх HBase/Hadoop, для тестов можно запустить в standalone режиме, но будет работать _крайне_ медленно
    * timeseries вида timestamp, metricname=val, (tag=val)+ , может хранить только числа (есть batch mode, если нужно несколько пачкой писать)
    * объем данных хорошо масштабируется за счет HBase
    * сообщество сообщает о тормозах при очень большом количестве (десятки тысяч+) идентификаторов серий -- это имя серии + сочетание тегов
    * скорость записи и выборки хорошая: в HBase данные партицируются почасово и читаются только те серии за те периоды, которые нужны
    * для масштабирования ставим доп.ноды OpenTSDB за прокси (если упираемся в агрегации), либо ноды HBase (если упираемся в IO)
    * процессинг метрик только самый базовый -- downsample, вычисление rate из счетчиков (т.е. производная), аггрегация по тегам (например, среднее "os.cpu" для всех метрик, у которых тег "role=webserver")
    * сам язык запросов немного вырвиглазный
    * недавно появился https://bosun.org/, который садится перед OpenTSDB и позволяет еще какие-то операции делать
    * апстрим разработку ведет довольно неторопливо

    InfluxDB:
    * ставится в тестовом режиме очень легко (один бинарник)
    * пока нестабилен -- за последний год сменилось 2 HTTP API и штук пять вариантов бинарного формата на диске -- это моя самая большая претензия к нему
    * timeseries вида db, timestamp, metricname=val, (tag=val)+, т.е. можно логически группировать разные данные. Кажется, можно было хранить текстовые значения.
    * язык запросов SQL-подобный
    * ребята из Coub говорили, что на запись он качает хорошо, а на чтение тормозит (не знаю, впрочем про какую из версий)
    * у них много коннекторов к разным входным форматам (графит, opentsdb, collectd и т.п.)
    * довольно динамично развивается

    Из известных TSDB есть еще Graphite:
    * старый хорошо известный вариант
    * питон с модулями, поэтому сложнее в установке, чем influxdb, но проще чем хадуп
    * база RRD, т.е. может хранить только данные "за последний год, за последний месяц и за последний час" со своей точностью для каждого периода
    * за счет этого данные занимают хорошо предсказуемое и постоянное место на диске
    * гигантское количество документации и всяких обвязок в интернете
    * серии вида timestamp, metric=val -- тегов и т.п. нет. поэтому группировать, например, одинаковые серии для разных хостов придется под разными именами
    * довольно большое (по сравнению с OpenTSDB) количество функций при выборке -- насколько помню, были всякие перцентили, forecastы и т.д.
    * с дефолтным хранилищем при большом количестве серий начинает упираться в диск
    * масштабируется неважно (подробностей не знаю)
    * периодически из сообщества появляются разнообразные хранилища, которые улучшают ситуацию со скоростью и масштабированием

    Prometheus не видел.
    Еще что-то слышал про druid.io, но тоже ничего о нем не знаю.
    Ответ написан
    1 комментарий