PHPackages                             gemvc/apm-contracts - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. gemvc/apm-contracts

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

gemvc/apm-contracts
===================

APM contracts, interface and abstract base class for GEMVC framework

1.5.1(3mo ago)01122MITPHPPHP &gt;=8.2

Since Dec 30Pushed 3mo agoCompare

[ Source](https://github.com/gemvc/apm-contract)[ Packagist](https://packagist.org/packages/gemvc/apm-contracts)[ Docs](https://github.com/gemvc/apm-contracts)[ RSS](/packages/gemvc-apm-contracts/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (2)Versions (11)Used By (2)

[![gemvc_header_for_github](https://private-user-images.githubusercontent.com/211101824/531099600-25268760-3a70-4077-a268-f0ed69eff938.JPG?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0Nzc1MzUsIm5iZiI6MTc3NTQ3NzIzNSwicGF0aCI6Ii8yMTExMDE4MjQvNTMxMDk5NjAwLTI1MjY4NzYwLTNhNzAtNDA3Ny1hMjY4LWYwZWQ2OWVmZjkzOC5KUEc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwNlQxMjA3MTVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00ODhhZDllMjMyNGQ2NGJjODNjZWZjMjQ5NWZhNDA1YWQzM2E4NjU3MjVkZjEzZjBlNWI3NDdhOTQ2YWQ3NTQwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.EUG1iNZcMXbJrPRu7Cf_AP5HEEPxLSaXDWkLA2eTljw)](https://private-user-images.githubusercontent.com/211101824/531099600-25268760-3a70-4077-a268-f0ed69eff938.JPG?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0Nzc1MzUsIm5iZiI6MTc3NTQ3NzIzNSwicGF0aCI6Ii8yMTExMDE4MjQvNTMxMDk5NjAwLTI1MjY4NzYwLTNhNzAtNDA3Ny1hMjY4LWYwZWQ2OWVmZjkzOC5KUEc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwNlQxMjA3MTVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00ODhhZDllMjMyNGQ2NGJjODNjZWZjMjQ5NWZhNDA1YWQzM2E4NjU3MjVkZjEzZjBlNWI3NDdhOTQ2YWQ3NTQwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.EUG1iNZcMXbJrPRu7Cf_AP5HEEPxLSaXDWkLA2eTljw)

GEMVC APM Contracts
===================

[](#gemvc-apm-contracts)

[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](https://opensource.org/licenses/MIT)[![PHP Version](https://camo.githubusercontent.com/c5e8da782b1a0673c08b4f474108036d2cc973470eed2d5d89d48e8c8475eee6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344382e322d626c75652e737667)](https://www.php.net/)

APM contracts, interfaces, and abstract base class for GEMVC framework. This package provides the foundation for all Application Performance Monitoring (APM) providers, enabling developers to create pluggable APM solutions that work seamlessly with GEMVC.

Table of Contents
-----------------

[](#table-of-contents)

- [Overview](#overview)
- [Installation](#installation)
- [Architecture](#architecture)
- [Creating an APM Provider Package](#creating-an-apm-provider-package)
- [How It Works](#how-it-works)
- [API Reference](#api-reference)
- [Examples](#examples)
- [License](#license)

Overview
--------

[](#overview)

The `gemvc/apm-contracts` package provides:

- **`ApmInterface`** - Contract that all APM providers must implement
- **`AbstractApm`** - Base class with shared functionality (request handling, utilities, configuration)
- **`ApmFactory`** - Factory for creating APM provider instances based on configuration
- **`ApmToolkitInterface`** - Contract that all APM provider toolkits must implement
- **`AbstractApmToolkit`** - Base class with shared functionality for client-side integration and management

This package is **always installed** with GEMVC (required by `gemvc/library`), providing a standardized way to integrate any APM solution (TraceKit, Datadog, New Relic, Elastic APM, OpenTelemetry, etc.) without changing application code.

📦 Installation
--------------

[](#-installation)

This package is automatically installed when you install GEMVC:

```
composer require gemvc/library
```

It's also required by APM provider packages:

```
composer require gemvc/apm-tracekit
# This automatically installs gemvc/apm-contracts
```

🏗️ Architecture
---------------

[](#️-architecture)

```
┌─────────────────────────────────────────────────────────┐
│                    gemvc/library                        │
│  (Core Framework - uses ApmFactory::create() -         │
│   Universal abstraction, like UniversalQueryExecuter)   │
└────────────────────┬────────────────────────────────────┘
                     │ requires
                     ▼
┌─────────────────────────────────────────────────────────┐
│              gemvc/apm-contracts                        │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │ ApmInterface │  │ AbstractApm  │  │ ApmFactory   │   │
│  │  (Contract)  │  │  (Base)      │  │ (Universal) │   │
│  └──────────────┘  └──────────────┘  └──────────────┘   │
│  ┌──────────────────┐  ┌──────────────────┐              │
│  │ApmToolkitInterface│ │AbstractApmToolkit│              │
│  │   (Contract)     │  │    (Base)        │              │
│  └──────────────────┘  └──────────────────┘              │
└────────────────────┬────────────────────────────────────┘
                     │ implements/extends
                     │ (Auto-discovered via dynamic instantiation)
        ┌────────────┼────────────┐
        ▼            ▼            ▼
┌─────────────┐ ┌──────────┐ ┌──────────┐
│ apm-tracekit│ │ Datadog  │ │ NewRelic│
│  Provider   │ │ Provider │ │ Provider │
│  + Toolkit  │ │ + Toolkit│ │ + Toolkit│
└─────────────┘ └──────────┘ └──────────┘
     (Any provider - no factory modification needed!)

```

**Universal Pattern:** Just like `UniversalQueryExecuter` abstracts database connections (PDO/OpenSwoole/MongoDB), `ApmFactory` abstracts APM providers (TraceKit/Datadog/NewRelic). The core framework uses `ApmFactory::create()` without knowing which provider is installed.

Creating an APM Provider Package
--------------------------------

[](#creating-an-apm-provider-package)

Follow these steps to create your own APM provider package for GEMVC:

### Step 1: Create Package Structure

[](#step-1-create-package-structure)

```
mkdir gemvc-apm-yourprovider
cd gemvc-apm-yourprovider
composer init
```

### Step 2: Set Up composer.json

[](#step-2-set-up-composerjson)

```
{
  "name": "gemvc/apm-yourprovider",
  "description": "YourProvider APM provider for GEMVC framework",
  "type": "library",
  "license": "MIT",
  "require": {
    "php": ">=8.2",
    "gemvc/apm-contracts": "^1.0"
  },
  "autoload": {
    "psr-4": {
      "Gemvc\\Core\\Apm\\Providers\\YourProvider\\": "src/Gemvc/Core/Apm/Providers/YourProvider/"
    }
  }
}
```

### Step 3: Create Provider Class

[](#step-3-create-provider-class)

Create `src/Gemvc/Core/Apm/Providers/YourProvider/YourProvider.php`:

```
