Я обожаю данные! По большей части я люблю программирование не столько за код, сколько за то, что код оперирует огромным количеством разнообразных данных и переменных. Я люблю оптимизировать данные, структурировать и логически организовывать. Возможно мне надо было пойти в Data Scientists, но я знаю свои ограничения – не хватает сильной математической базы и знания инструментов для анализа статистических данных

Тем не менее я обожаю наблюдать за разного рода графиками, анализировать их и находить паттерны. Возьмём, например, данные об активности в GitLab. Они хранятся всего 2-3 года, что для меня неудобно – мне бы хотелось наблюдать активность по годам. Для этих целей я и создал следующий скрипт. Совершенно примитивный код, который просто берёт данные и конвертирует их в CSV. Запускайте регулярно и вы тоже сможете иметь такую красивую инфографику

Зачем это надо? Ну… Я могу сразу посмотреть все 9 лет работы в компании (да, я не сразу додумался до скрипта, так что первый год безвозвратно потерян). Могу посмотреть когда у меня случилось выгорание, когда я от него оправился и вернулся в компанию, переработки и отпуска. В конце концов это просто интересная часть моей жизни

<?php /** @noinspection PhpUnnecessaryFullyQualifiedNameInspection */

require_once __DIR__.'/vendor/autoload.php';

// const GITLAB_API_URI = ;
// const GITLAB_API_TOKEN = ;
// const GITLAB_USER_ID = ;

try {
    $client = new Gitlab\Client();
    $client->setUrl(GITLAB_API_URI);
    $client->authenticate(GITLAB_API_TOKEN, Gitlab\Client::AUTH_HTTP_TOKEN);

    $eventsArray = [];

    $page = 1;
    $fetched = 0;
    while (!isset($events) || !empty($events)) {
        $events = $client->users()->events(GITLAB_USER_ID, [
            'page' => $page,
            'per_page' => 50,
        ]);

        $fetched += \count($events);

        foreach ($events as $event) {
            $creationDate = new \DateTimeImmutable($event['created_at']);
            $createdAt = $creationDate->format('Y-m-d');

            $eventsArray[$createdAt] = ($eventsArray[$createdAt] ?? 0) + 1;

            unset($creationDate);
        }

        echo \sprintf('Page: %d', $page).PHP_EOL;

        $page++;
    }

    echo \sprintf('Fetched: %d', $fetched).PHP_EOL;

//    \file_put_contents(
//        __DIR__.'/events.json',
//        \json_encode(\array_map(function ($value, $key) {
//            return ['date' => $key, 'count' => $value];
//        }, \array_values($eventsArray), \array_keys($eventsArray)))
//    );

    $eventsCSV = 'date,value'.PHP_EOL;;
    foreach ($eventsArray as $date => $count) {
        $eventsCSV .= $date.','.$count.PHP_EOL;
    }

    \file_put_contents('events_fetched.csv', $eventsCSV);

    return 0;
} catch (\Throwable $throwable) {
    echo \sprintf('Error: %s', $throwable->getMessage());

    return 1;
}
{
    "type": "project",
    "license": "CC-BY-4.0",
    "minimum-stability": "stable",
    "prefer-stable": true,
    "require": {
        "php": ">=7.4",
        "ext-json": "*",
        "m4tthumphrey/php-gitlab-api": "^11.4",
        "guzzlehttp/guzzle": "^7.2",
        "http-interop/http-factory-guzzle": "^1.0"
    }
}