application-manager-tools/am-driver
Symfony bundle + framework-agnostic PHP library to connect managed apps to Application Manager: orchestration commands, consumption webhooks, and instance operational state push. Includes OpenAPI 3.1 spec + Swagger UI, plus integration guides.
Multi-Tenant SaaS Orchestration:
integrationInstanceId in callbacks to correlate tenant actions across distributed systems (e.g., link CREATE_INSTANCE in AM to specific integration instances like captain-learning:dev). Example: Use integrationInstanceId to route tenant events to dedicated microservices (e.g., tenant-provisioner@captain-learning-dev).integrationInstanceId to logs in AmDriverEventListener for granular traceability of orchestration commands (e.g., CREATE_INSTANCE for tenant:123 in integration:captain-learning:dev).Usage-Based Billing & Compliance:
integrationInstanceId to scope usage metrics (e.g., proof_storage_mo) to specific product/environment pairs. Example: Charge captain-learning:prod separately from captain-learning:staging based on integrationInstanceId.99.9% uptime for captain-learning:prod vs. 99% for staging) by filtering OperationalStateStoreInterface queries with integrationInstanceId.Self-Healing Infrastructure:
StopInstanceHandler to validate integrationInstanceId before shutdown (e.g., block STOP for captain-learning:prod during business hours). Example:
if ($command->getIntegrationInstanceId() === 'captain-learning:prod' && $this->isBusinessHours()) {
throw new \RuntimeException('Cannot stop prod instance during business hours');
}
Developer Experience:
integrationInstanceId in orchestration:simulate CLI to mimic multi-integration environments locally. Example:
vendor/bin/am-driver orchestration:simulate create --integration-instance-id captain-learning:dev
/am/swagger) to highlight integrationInstanceId in callback payloads for API consumers.Security & Compliance:
consumption_webhook_token with integrationInstanceId to restrict usage data pushes to specific integrations (e.g., captain-learning:prod token only accepts metrics for that instance).integrationInstanceId in SIEM events to track cross-integration command flows (e.g., CREATE_INSTANCE in captain-learning:dev triggers a DB provision in database-manager:shared).Adopt if:
captain-learning:prod vs. captain-learning:staging) and:
prod).CREATE_INSTANCE → DB provision → notification).dev, staging, prod) and require granular control over lifecycle events.Look elsewhere if:
integrationInstanceId contexts).integrationInstanceId may complicate key management).For Executives:
*"This update adds integrationInstanceId to AM callbacks, letting us track and control tenant actions at the integration level (e.g., captain-learning:prod vs. staging). This enables:
captain-learning:prod separately from staging based on per-integration usage.CREATE_INSTANCE → DB provision) with their originating context.Example: If captain-learning:prod hits a storage limit, we can auto-scale only that instance while leaving staging unaffected.
Risk: Minimal—this is a non-breaking addition to existing callbacks. We’ll validate in a 1-hour spike by testing integrationInstanceId in our CreateInstanceHandler."*
For Engineering:
*"The new integrationInstanceId in callbacks lets us:
public function handle(OrchestrationCommand $command): void {
if ($command->getIntegrationInstanceId() === 'captain-learning:prod') {
$this->prodProvisioner->provision($command->getTenantId());
}
}
AmDriverEventListener:
public function onCommandProcessed(CommandEvent $event): void {
$this->logger->info(
'Processed command for tenant: ' . $event->getTenantId() .
' in integration: ' . $event->getIntegrationInstanceId()
);
}
vendor/bin/am-driver orchestration:simulate create \
--integration-instance-id captain-learning:dev
Tradeoffs:
integrationInstanceId is only available in AM callbacks (not orchestration commands).consumption_webhook_token is scoped to the correct integration in AM’s UI.integrationInstanceId if not used (no breaking changes).Next Steps:
integrationInstanceId in CreateInstanceHandler for captain-learning:prod.integrationInstanceId to Swagger UI and internal runbooks.AmDriverEventListener to include integrationInstanceId in SIEM events."*For Security/Compliance:
*"The integrationInstanceId adds context to audit trails, but we must:
consumption_webhook_token is tied to a specific integration (e.g., captain-learning:prod) to prevent cross-integration metric leaks.integrationInstanceId in all orchestration events sent to SIEM for forensic traceability.integrationInstanceId (e.g., STOP allowed only for captain-learning:staging).Risk: Misconfigured tokens could allow cross-integration commands. Mitigate by:
integrationInstanceId in AM’s ManagedAppIntegration UI.integrationInstanceId/token scopes."How can I help you explore Laravel packages today?