Grafana: корректное отображение даты

Иногда при построении графика (например Bar chart) на основании запроса в PostreSQL, дата отображается не верно, а именно, примерно так:

Для того чтобы сиё поправить, нужно привести дату строго в формат YYYY-MM-DD. Например так:

select to_char(date_trunc('day', dt), 'YYYY-MM-DD'),count(*) as "${division:text}" from (
                    select 
                            date_trunc('month', agreements_dt)::date as dt
                    from 
                            ls 
                    where agreements_dt>'2018-01-01' and
							owner in ('$division') and
                            agreements_dt is not null
                    ) as agr
            group by dt
            order by dt	desc

В итоге получится вот это:

Преобразование сертификата для подписи ГИС ЖКХ

Дано: флешка с сертификатом для подписи сообщений для ГИС ЖКХ,

Задача: выдернуть с рутокена контейнер в формате p12 и расчленить его на сертификат+открытый ключ+закрытый ключ. Задачу уже подобную год назад решал, но как оказалось мануал который сам для себя тогда делал немножко не точный. Потому обновлю.

Решение:

  1. Для получения файла с токена необходимо воспользоваться P12FromGostCSP
  2. Сертификат: openssl pkcs12 -in p12.pfx -clcerts -nokeys -out public.crt
  3. Публичный ключ: openssl x509 -in public.crt -out public.pem -outform PEM
  4. Закрытый ключ без пароля: openssl pkcs12 -in p12.pfx -nocerts -out key.pem -nodes

Ускоряем телеграм при помощи mtproxy

Для этого понадобится выделенный сервер, желательно в зоне РФ. Самый простой способ — использование готового скрипта с https://github.com/nolaxe/install-MTProxy/blob/main/README.md

Шпаргалка по использованию docker

1) Установка на Ubuntu:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
docker --version

    2) Установка приложения через docker

    docker pull jetbrains/teamcity-server

    3) Запуск:

    docker run --name teamcity-server-instance \
    -v <path to data directory>:/data/teamcity_server/datadir \
    -v <path to logs directory>:/opt/teamcity/logs \
    -p <port on host>:8111 \
    jetbrains/teamcity-server

    4) Автозапуск после перезагрузки сервера:

    docker update --restart=always teamcity-server-instance 

    Датчик давления BMP-280 на raspberry pi

    Может работать как по I2C так и по протоколу SPI. В моём случае, я подключил по I2C.

    Схема подключения:

    BMP280 PinRaspberry Pi Pin
    VCC3.3V (Pin 1)
    GNDGround (Pin 6)
    SDASDA (Pin 3, GPIO2)
    SCLSCL (Pin 5, GPIO3)

    Далее необходимо зайти в raspi-config и включить интерфейс i2c. После чего понадобится малинку перазагрузить. После перезагрузки можно посмотреть, определяется ли она:

    i2cdetect -y 1

    Должно появиться что-то вроде:

    Иногда садится на 77 порт, но чаще на 76. Далее необходимо установить библиотеки:

    sudo apt install -y python3-smbus python3-spidev python3-pip
    pip3 install adafruit-circuitpython-bmp280

    Минимальный код для проверки работоспособности:

    #!/usr/bin/env python3
    import board
    import busio
    import adafruit_bmp280
    import time
    import datetime
    import requests
    import json
    import threading
    
    # Create sensor object using the I2C port
    i2c = busio.I2C(board.SCL,board.SDA)
    sensor = adafruit_bmp280.Adafruit_BMP280_I2C(i2c, address = 0x76)
    
    
    while True:
        print("\nTemperature: %0.1f C" % sensor.temperature)
        print("Pressure: %0.1f hPa" % sensor.pressure)
        mmHg = sensor.pressure * 0.75006
        print("Pressure: %0.1f mmHg" % mmHg)
        print("Altitude: %0.2f meters" % sensor.altitude)
        print("Sea Level Pressure: %0.1f hPa " % sensor.sea_level_pressure)
        print(datetime.datetime.now())
        time.sleep(10)

    У меня выводит что-то подобное:

    1 2 3 4 61