Дайджест-аутентификация (Digest access authentication)

Ранее я описывал алгоритм авторизации Digest, как самому собрать пакет данных

Для  PHP все оказалось проще,  в  CURL уже есть готовый механизм, который делает 2 запроса для правильной авторизации

Это параметр CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,

 

 

Полностью запрос:


$request =[
    'SOAPAction: "http://yandex.ru/"',
    'Content-Type: text/xml;charset=UTF-8',
];


$options = array(
    CURLOPT_URL            => $url,
    CURLOPT_HEADER         => true,
    CURLOPT_VERBOSE        => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_SSL_VERIFYPEER => false,    // for https
    CURLOPT_USERPWD        => $username . ":" . $password,
    CURLOPT_HTTPAUTH       => CURLAUTH_DIGEST,
    CURLOPT_HTTPHEADER     => $request,
    CURLOPT_POST           => true,

    CURLOPT_POSTFIELDS     =>"xmlRequest=" . $input_xml // если нужно передать xml в теле POST
);

$ch = curl_init();

curl_setopt_array( $ch, $options );

try {
    $raw_response  = curl_exec( $ch );


    // validate CURL status
    if(curl_errno($ch))
        throw new Exception(curl_error($ch), 500);

    // validate HTTP status code (user/password credential issues)
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($status_code != 200)
        throw new Exception("Response with Status Code [" . $status_code . "].", 500);

} catch(Exception $ex) {
    if ($ch != null) curl_close($ch);
    throw new Exception($ex);
}

if ($ch != null) curl_close($ch);

echo "raw response: " . $raw_response;



Нунчи. Корейское искусство предугадывать поступки людей и мягко управлять любой ситуацией | Хонг Юни

Хонг Юни

Нунчи. Корейское искусство предугадывать поступки людей и мягко управлять любой ситуацией

ISBN:  978-5-04-108801-9

 

Снимок экрана 2021-04-27 в 18.05.17

Не понравилась от слова совсем. Книга написаная женщиной для женщин, где основной посыл — как бы чего не случилось и лучше помолчать, пусть другие сами догадываются что у вас на уме. Будьте скрытыми и анализируйте до тараканов. Примеры  в книге очень примитивные и явно нацелены на американскую аудиторию.

Одна из цитат — Эйфелева башняЕдинственное место, где ее не видно

Это гениально! Раньше такие цитаты очень любили в ВК.

Бизнес в стиле Virgin

Ричард Брэнсон
Бизнес в стиле Virgin
ISBN: 978-5-00117-644-2

Забавная книга, часть которой изложена в стиле вопрос — ответ. В основном Ричард рассказывает о своей компании и его опыт сложно транслировать. Понравился один момент: Virgin Airlines взяла на себя обязанности по улучшению экологии и уменьшению к 2020 году вредных выбросав. Думаю в 2020 году это удалось не только Virgin.

Удивил тот факт, что мужик уже давно не молодой, за 70. Но взгляды его довольно прогрессивные.

The Twelve-Factor App

https://12factor.net/ru/

Understanding your Symfony app with Prometheus:

https://blog.4xxi.com/understanding-your-symfony-app-with-prometheus-fdb4b0124d99

 

 

Сбор и анализ логов с Fluentd:

 

 

https://habr.com/ru/company/selectel/blog/250969/

 

О сборке метриков:

https://www.youtube.com/watch?v=RPK5fp9-4yI

Fluentd

https://mcs.mail.ru/help/ru_RU/cases-logs/case-swarm

Fluentd docker

https://docs.docker.com/config/containers/logging/fluentd/

PUSHGATWAY

Про PUSHGATWAY очень мало написано в инете, особенно под PHP

Для установки локально PUSHGATWAY docker-compose.yml:

    pushgateway:
        image: prom/pushgateway
        restart: always
        container_name: app2022-pushgateway
        ports:
            - 9091:9091
            - 9090:9090
        networks:
            - front
            - backend

 

Есть библиотека для работы с pushgateway

https://github.com/PromPHP/prometheus_push_gateway_php ->
promphp/prometheus_push_gateway_php

 

Однако, нашел хороший простой класс, который основан на GuzzleHttp\Client:

https://github.com/markarik/wnl-platform/blob/9f4383e850373e1849f04f6d1487268cf91fa615/app/Console/PrometheusPushgateway.php

Немного модифицировал его под свои нужды, и получилось вот такое

<?php
namespace App\Handler;


use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

class PrometheusPushgateway
{
   public function notify($count, $code=200)
   {

        $url = 'http://pushgateway:9091/metrics/job/symfony/instance/sender';
        $url = getenv('PUSHGATWAY_URL');

      $client = new Client();
      try {
         $bodyLines = [
            "# HELP response_symfony_code_count",
            "# TYPE response_symfony_code_count",
            "response_symfony_code_count {code=\"${code}\"} ${count}"
         ];
         $body = implode("\n", $bodyLines) . "\n";
         $client->request('POST', $url, [
            'body' => $body
         ]);
      } catch (GuzzleException $exception) {
          exit('error');
      }
   }
}