From f4169d20e9dfcc630bb839feaa36523f32bef195 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 22 Sep 2023 22:06:44 +0200 Subject: [PATCH 1/4] add influxdb and stat of page view --- src/Api/InfluxDB.php | 46 ++++++++++++++++++++++++++++++ src/EventListener/StatListener.php | 41 ++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 src/Api/InfluxDB.php create mode 100644 src/EventListener/StatListener.php diff --git a/src/Api/InfluxDB.php b/src/Api/InfluxDB.php new file mode 100644 index 0000000..ba5e16c --- /dev/null +++ b/src/Api/InfluxDB.php @@ -0,0 +1,46 @@ + + */ +class InfluxDB +{ + protected ?Client $client = null; + + public function __construct( + protected ?string $url, + protected ?string $token, + protected ?string $bucket, + protected ?string $org, + protected bool $debug = false + ) { + if (isset($this->url, $this->token, $this->bucket, $this->org)) { + $this->client = new Client([ + 'url' => $this->url, + 'token' => $this->token, + 'bucket' => $this->bucket, + 'org' => $this->org, + 'debug' => $this->debug, + 'precision' => WritePrecision::S, + 'timeout' => 1, + ]); + } + } + + public function isAvailable(): bool + { + return $this->getClient() !== null; + } + + public function getClient(): ?Client + { + return $this->client; + } +} diff --git a/src/EventListener/StatListener.php b/src/EventListener/StatListener.php new file mode 100644 index 0000000..999aa56 --- /dev/null +++ b/src/EventListener/StatListener.php @@ -0,0 +1,41 @@ + + */ +class StatListener +{ + public function __construct(protected InfluxDB $influxDB) + { + } + + public function onKernelRequest(RequestEvent $event) + { + if (!$this->influxDB->isAvailable()) { + return; + } + + $client = $this->influxDB->getClient(); + + $writeApi = $client->createWriteApi(['writeType' => WriteType::SYNCHRONOUS]); + $pageView = new Point('page_view'); + $pageView + ->addTag('request', 'view') + ->addField('value', 1) + ->time(time()) + ; + + $writeApi->write($pageView); + $writeApi->close(); + $client->close(); + } +} From 5612ea2acd94728d3926ceb0869b7ed0222d1a6d Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 22 Sep 2023 22:06:56 +0200 Subject: [PATCH 2/4] add influxdb and stat of page view --- .env | 5 +++++ composer.json | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.env b/.env index 5b6040b..eba2126 100644 --- a/.env +++ b/.env @@ -35,3 +35,8 @@ MAILER_SENDER=example@localhost ASSET_BASE_URL=null UMAMI_URL=null +INFLUXDB_URL= +INFLUXDB_TOKEN= +INFLUXDB_BUCKET= +INFLUXDB_ORG= +INFLUXDB_DEBUG=1 diff --git a/composer.json b/composer.json index 6ac589f..8f4606e 100644 --- a/composer.json +++ b/composer.json @@ -8,6 +8,8 @@ "beberlei/doctrineextensions": "^1.3", "friendsofsymfony/jsrouting-bundle": "^2.7", "gregwar/captcha-bundle": "^2.2", + "guzzlehttp/guzzle": "^7.8", + "influxdata/influxdb-client-php": "^3.4", "knplabs/knp-markdown-bundle": "^1.9", "knplabs/knp-menu-bundle": "^3.1", "murph/murph-core": "dev-master", @@ -31,7 +33,8 @@ "sort-packages": true, "allow-plugins": { "symfony/flex": true, - "symfony/runtime": true + "symfony/runtime": true, + "php-http/discovery": true } }, "autoload": { From f81e2a99a7026ec7ba55246716bdb6168ef70b1f Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 22 Sep 2023 22:07:17 +0200 Subject: [PATCH 3/4] update ci --- .woodpecker.yml => .woodpecker/build.yml | 52 ++---------------------- .woodpecker/deploy.yml | 25 ++++++++++++ 2 files changed, 29 insertions(+), 48 deletions(-) rename .woodpecker.yml => .woodpecker/build.yml (53%) create mode 100644 .woodpecker/deploy.yml diff --git a/.woodpecker.yml b/.woodpecker/build.yml similarity index 53% rename from .woodpecker.yml rename to .woodpecker/build.yml index 09ee63b..56359d3 100644 --- a/.woodpecker.yml +++ b/.woodpecker/build.yml @@ -1,17 +1,17 @@ variables: - &volumes - - node16_cache:/root/.npm - node16_cache:/root/.npm - /data/deblan/deblan.io-murph:/data/deblan/deblan.io-murph +when: + event: [push, pull_request, tag, manual] + branch: [master, master-*, develop, develop-*, feature/*] + pipeline: db-wait: image: gitnet.fr/deblan/timeout:latest commands: - /bin/timeout -t 30 -v -c 'while true; do nc -z -v db 3306 2>&1 | grep succeeded && exit 0; sleep 0.5; done' - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] db-create: image: mariadb:10.3 @@ -19,9 +19,6 @@ pipeline: commands: - mysql -hdb -uroot -proot -e "CREATE DATABASE app" - eval "$MYSQLDUMP" | mysql -hdb -uroot -proot app - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] app-config: image: deblan/php:8.1 @@ -29,18 +26,12 @@ pipeline: - echo APP_ENV=prod >> .env.local - echo APP_SECRET=$(openssl rand -hex 32) >> .env.local - echo DATABASE_URL=mysql://root:root@db/app >> .env.local - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] php-composer: image: deblan/php:8.1 commands: - apt-get update && apt-get -y install git - composer install --no-scripts - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] db-migrate: image: deblan/php:8.1 @@ -48,17 +39,11 @@ pipeline: - PHP=php commands: - ./bin/doctrine-migrate - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] app-jsroutes: image: deblan/php:8.1 commands: - php bin/console fos:js-routing:dump --format=json --target=public/js/fos_js_routes.json - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] node-build: image: node:16-alpine @@ -74,18 +59,12 @@ pipeline: - yarn - test -f public/js/fos_js_routes.json || echo "{}" > public/js/fos_js_routes.json - npm run build - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] security-check: image: gitnet.fr/deblan/osv-detector:v0.9 commands: - osv-detector composer.lock yarn.lock failure: ignore - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] cache-build: image: deblan/php:8.1 @@ -93,29 +72,6 @@ pipeline: commands: - cd /data/deblan/deblan.io-murph/ - mv "$CI_WORKSPACE" "$CI_COMMIT_SHA" - when: - event: [push, pull_request, tag, manual] - branch: [master, master-*, develop, develop-*, feature/*] - - app-deploy: - image: deblan/php:8.1 - secrets: [ssh_user, ssh_host, ssh_priv_key, app_directory] - volumes: *volumes - commands: - - apt-get update && apt-get -y install rsync openssh-client - - cd "/data/deblan/deblan.io-murph/$CI_COMMIT_SHA" - - mkdir "$HOME/.ssh" - - echo "$SSH_PRIV_KEY" > "$HOME/.ssh/id_ed25519" - - chmod 700 "$HOME/.ssh" - - chmod 600 "$HOME/.ssh/id_ed25519" - - composer global require andres-montanez/magallanes - - cp .mage.yml.dist .mage.yml - - sed -i "s/ssh_user/$SSH_USER/g" .mage.yml - - sed -i "s/ssh_host/$SSH_HOST/g" .mage.yml - - sed -i "s#app_directory#$APP_DIRECTORY#g" .mage.yml - - /root/.config/composer/vendor/bin/mage deploy "$CI_BUILD_DEPLOY_TARGET" - when: - event: [deployment] services: db: diff --git a/.woodpecker/deploy.yml b/.woodpecker/deploy.yml new file mode 100644 index 0000000..963cc0d --- /dev/null +++ b/.woodpecker/deploy.yml @@ -0,0 +1,25 @@ +variables: + - &volumes + - /data/deblan/deblan.io-murph:/data/deblan/deblan.io-murph + +when: + event: [deployment] + +pipeline: + app-deploy: + image: deblan/php:8.1 + secrets: [ssh_user, ssh_host, ssh_priv_key, app_directory] + volumes: *volumes + commands: + - apt-get update && apt-get -y install rsync openssh-client + - cd "/data/deblan/deblan.io-murph/$CI_COMMIT_SHA" + - mkdir "$HOME/.ssh" + - echo "$SSH_PRIV_KEY" > "$HOME/.ssh/id_ed25519" + - chmod 700 "$HOME/.ssh" + - chmod 600 "$HOME/.ssh/id_ed25519" + - composer global require andres-montanez/magallanes + - cp .mage.yml.dist .mage.yml + - sed -i "s/ssh_user/$SSH_USER/g" .mage.yml + - sed -i "s/ssh_host/$SSH_HOST/g" .mage.yml + - sed -i "s#app_directory#$APP_DIRECTORY#g" .mage.yml + - /root/.config/composer/vendor/bin/mage deploy "$CI_BUILD_DEPLOY_TARGET" From a9fe3c488fd0a84b9a2d4b7063085b7510253e4f Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 22 Sep 2023 22:07:22 +0200 Subject: [PATCH 4/4] add influxdb and stat of page view --- config/services.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/config/services.yaml b/config/services.yaml index 832f63b..2fde6d0 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -4,6 +4,11 @@ # Put parameters here that don't need to change on each machine where the app is deployed # https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration parameters: + influxdb_url: '%env(INFLUXDB_URL)%' + influxdb_token: '%env(INFLUXDB_TOKEN)%' + influxdb_bucket: '%env(INFLUXDB_BUCKET)%' + influxdb_org: '%env(INFLUXDB_ORG)%' + influxdb_debug: '%env(INFLUXDB_DEBUG)%' services: # default configuration for services in *this* file @@ -47,6 +52,14 @@ services: resource: '../src/Controller/' tags: ['controller.service_arguments'] + App\Api\InfluxDB: + arguments: + $url: '%influxdb_url%' + $token: '%influxdb_token%' + $bucket: '%influxdb_bucket%' + $org: '%influxdb_org%' + $debug: '%influxdb_debug%' + site.route_loader: class: App\Core\Router\SiteRouteLoader tags: [routing.loader] @@ -69,5 +82,9 @@ services: tags: - {name: markdown.parser, alias: comment} + App\EventListener\StatListener: + tags: + - { name: kernel.event_listener, event: kernel.request } + # add more service definitions when explicit configuration is needed # please note that last definitions always *replace* previous ones