geonative/garbage-collector

Doctrine Entities garbage collector

0.2 2022-11-07 14:08 UTC

This package is auto-updated.

Last update: 2024-04-07 13:55:38 UTC


README

This package is a Symfony Bundle providing a "garbage collector" command to prune Doctrine entities that you consider stale.

Installation

PHP 8.0 or above is required.

composer require geonative/garbage-collector

Configuration

  1. Add the bundle into your config/bundles.php (likely to be done automatically with Symfony Flex).

  2. Update your configuration:

# config/packages/doctrine.yaml
doctrine:
  orm:
    mappings:
      GarbageCollectorBundle: ~
# config/services.yaml
services:
    _instanceof:
        GeoNative\GarbageCollector\PrunableRepositoryInterface:
            tags: [!php/const GeoNative\GarbageCollector\Services\GarbageCollector::PRUNABLE_REPOSITORY]
  1. Update your database schema:
php bin/console doctrine:schema:update --dump-sql --force
  1. Implement GeoNative\GarbageCollector\PrunableRepositoryInterface on your repositories:
    1. getGarbageCollectorCheckInterval() should return the minimum interval between checks, to avoid ruining your DB performances
    2. pruneStaleEntities() should actually perform removals and return the number of entities which have been removed.

If your entities should be pruned against a DateTime column, you can use GeoNative\GarbageCollector\PruneStaleEntitiesTrait to get started faster.

Usage

Oneshot

php bin/console gc:entities:prune

You can store this in a crontab to periodically cleanup your entities.

Daemonize

This command can also run in a loop and be daemonized with supervisord or systemctl.

The react/event-loop package is required.

php bin/console gc:entities:prune --loop=5

The Garbage Collector will pass every 5 seconds.

Lock

If your application runs on multiple hosts, you may want to prevent several instances of the Garbage Collector from running simultaneously. To do so, just add a --lock option:

php bin/console gc:entities:prune --lock

Tests

vendor/bin/pest

License

MIT.