Module Compliance Subscriber
Overzicht
De Module Compliance Subscriber is een nieuwe functionaliteit in de SoftwareCatalog app die automatisch de standaarden property van module objecten synchroniseert op basis van gekoppelde compliance objecten.
Functionaliteit
Wat doet het?
- Luistert naar module updates: De subscriber luistert naar
ObjectCreatedEventenObjectUpdatedEventvoor module objecten - Haalt compliance objecten op: Voor elke module worden alle gekoppelde compliance objecten opgehaald
- Extracteert standaardversie UUIDs: Van elk compliance object wordt de
standaardversieUUID geëxtraheerd - Synchroniseert standaarden: De
standaardenproperty van de module wordt bijgewerkt met alle unieke standaardversie UUIDs - Slaat module opnieuw op: Als de standaarden zijn gewijzigd, wordt de module automatisch opnieuw opgeslagen
Architectuur
Module Update Event → ModuleComplianceSubscriber → ModuleComplianceService → ObjectService
Bestanden
1. ModuleComplianceSubscriber.php
Locatie: lib/EventListener/ModuleComplianceSubscriber.php
De subscriber die luistert naar module events en de compliance service aanroept.
Belangrijke methoden:
handle(Event $event): Hoofdmethode die events verwerkt- Controleert of het een module object betreft
- Roept de ModuleComplianceService aan
2. ModuleComplianceService.php
Locatie: lib/Service/ModuleComplianceService.php
De service die de logica bevat voor het synchroniseren van standaarden.
Belangrijke methoden:
handleModuleComplianceUpdate(object $moduleObject): Hoofdmethode voor compliance updatesgetComplianceObjectsForModule(string $moduleUuid): Haalt compliance objecten op voor een moduleextractStandaardversieUuids(array $complianceObjects): Extraheert standaardversie UUIDsupdateModuleStandaarden(object $moduleObject, array $standaardversieUuids): Werkt module standaarden bij
3. Application.php
Locatie: lib/AppInfo/Application.php
Registreert de subscriber en service in de Nextcloud container.
Registraties:
// Subscriber registratie
$context->registerEventListener(ObjectCreatedEvent::class, ModuleComplianceSubscriber::class);
$context->registerEventListener(ObjectUpdatedEvent::class, ModuleComplianceSubscriber::class);
// Service registratie
$context->registerService(\OCA\SoftwareCatalog\Service\ModuleComplianceService::class, function ($container) {
return new \OCA\SoftwareCatalog\Service\ModuleComplianceService(
$container,
$container->get(SettingsService::class),
$container->get('Psr\Log\LoggerInterface')
);
});
Configuratie
Vereiste Schemas
De functionaliteit vereist dat de volgende schemas zijn geconfigureerd:
- Module Schema:
module_schemain de voorzieningen configuratie - Compliance Schema:
compliancy_schemain de voorzieningen configuratie
Schema Eigenschappen
Module Schema
standaarden: Array van strings (UUIDs van standaardversies)compliancy: Array van compliance objecten (related objects)
Compliance Schema
module: Related object naar de modulestandaardversie: Related object naar de standaardversie (string UUID)
Gebruik
Automatische Synchronisatie
De synchronisatie gebeurt automatisch wanneer:
- Een nieuwe module wordt aangemaakt
- Een bestaande module wordt bijgewerkt
- Compliance objecten worden toegevoegd/verwijderd/bijgewerkt
Handmatige Test
Voor het testen van de functionaliteit is een test script beschikbaar:
# Eenvoudige service test
docker exec -u 33 master-nextcloud-1 php /var/www/html/apps-extra/softwarecatalog/test_module_compliance_simple.php
# Volledige functionaliteit test (vereist geconfigureerde schemas)
docker exec -u 33 master-nextcloud-1 php /var/www/html/apps-extra/softwarecatalog/test_module_compliance.php
Logging
De functionaliteit logt uitgebreid voor debugging:
- Debug level: Schema matching, object counts, UUIDs
- Info level: Succesvolle verwerking, updates
- Warning level: Ontbrekende configuratie
- Error level: Exceptions en fouten
Voorbeeld Workflow
- Module wordt aangemaakt met lege
standaardenarray - Compliance objecten worden toegevoegd met verschillende
standaardversieUUIDs - Subscriber detecteert module update en roept service aan
- Service haalt compliance objecten op voor de module
- Standaardversie UUIDs worden geëxtraheerd uit compliance objecten
- Module standaarden worden bijgewerkt met de nieuwe UUIDs
- Module wordt opnieuw opgeslagen met gesynchroniseerde standaarden
Voordelen
- Automatische synchronisatie: Geen handmatige updates nodig
- Consistente data: Standaarden blijven altijd up-to-date
- Performance: Alleen updates wanneer nodig
- Betrouwbaarheid: Uitgebreide logging en error handling
- Flexibiliteit: Werkt met elke module en compliance configuratie
Toekomstige Uitbreidingen
- Bulk updates: Voor het synchroniseren van meerdere modules tegelijk
- Caching: Voor betere performance bij grote datasets
- Webhooks: Voor externe notificaties van updates
- Dashboard: Voor het monitoren van synchronisatie status