Задать вопрос
  • Скрипт для ubuntu который перезапускает сервис/службу при снижения входящего трафика?

    hint000
    @hint000
    у админа три руки
    [ $(( ( $(cat /sys/class/net/eth0/statistics/rx_bytes) - $(sleep 10; cat /sys/class/net/eth0/statistics/rx_bytes) )/-10 )) -lt 5000 ] && echo need restart

    Это в CRON на каждую минуту, а echo need restart заменить на команду рестарта сервиса. 5000 (байт в секунду) заменить на желаемую величину.

    Скрипт берёт значение системного счётчика принятых байтов, ждёт 10 секунд, снова берёт значение счётчика, вычитает одно из другого, затем делит разность на те самые 10 секунд (на -10, т.к. вычитали большее из меньшего), получается среднее значение за 10 секунд. Остаётся сравнить с пороговым значением.
    Ответ написан
    4 комментария
  • Как исправить json плагина REST для терминов таксономии?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Всё элементарно. В PHP любой массив - ассоциативный, что соответствует объекту JSON.
    Но, если индекс массива начинается с нуля и содержит только строго последовательные номера (0, 1, 2, 3 и т.д.), то для простоты он представляется как классический массив, в том числе и в JSON.
    print json_encode(['a', 'b']); // ["a","b"]
    print json_encode([0 => 'a', 1 => 'b']); // ["a","b"]
    print json_encode([1 => 'a', 2 => 'b']); // {"1":"a","2":"b"}
    У вас массив заполняется по индексам $term->tid, которые не образуют классической последовательности, поэтому и представляются объектом.
    Ваш код можно переписать так:
    $vid = 'digest';
    $termDataAll = array_map(
        fn($term) => [
            'tid' => $term->tid,
            'name' => $term->name,
            'weight' => $term->weight,
            'childs' => array_map(
                fn($child) => [
                    'tid' => $child->tid,
                    'name' => $child->name,
                    'weight' => $child->weight
                ],
                \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $term->tid, 1)
            )
        ],
        \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, 0, 1)
    );

    В результате должен получиться такой JSON
    [
      [
        "tid": "11",
        "name": "parent-1",
        "weight": "7",
        "childs": [
          ["tid": "14", "name": "child-1", "weight": "0"],
          ["tid": "19", "name": "child-2", "weight": "1"],
        ],
      ], [
        "tid": "12",
        "name": "parent-2",
        "weight": "6",
        "childs": [
          ["tid": "17", "name": "child-1", "weight": "0"],
          ["tid": "18", "name": "child-2", "weight": "1"]
        ]
      ]
    ]
    Ответ написан
    1 комментарий
  • Как сделать плавное изменение яркости ШИМ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    хочется чтобы лента плавно изменяла яркость

    для этого нужно менять скважность ШИМ не один раз скачком от текущего значения к целевому, а постепенно, за несколько шагов. С постоянной скоростью -- примерно так:
    void set_pwm_smooth(int new_pwm)
    {
        static const int pwm_step = ...; // шаг изменения ШИМ
        static const int pwm_step_time = ...; // время одного шага изменения ШИМ
        static int old_pwm;
        int pwm = old_pwm;
    
        while (pwm != new_pwm) {
            int next_pwm = pwm + (pwm < new_pwm ? pwm_step : -pwm_step);
            if ((pwm < new_pwm && next_pwm > new_pwm) ||
                (pwm > new_pwm && next_pwm < new_pwm))
                pwm = new_pwm;
            else
                pwm = next_pwm;
            analogWrite(LEDPIN, pwm);
            delay(pwm_step_time);
        }
        old_pwm = new_pwm;
    }
    Ответ написан