Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/moesif/moesif-symfony
Moesif Symfony SDK, for API Monitoring, Analytics, and Monetization.
https://github.com/moesif/moesif-symfony
analytics api-analytics api-logs api-management api-monetization api-monitoring logger logging monitoring observability php php-symfony symfony symfony5 usage-based-billing
Last synced: 8 days ago
JSON representation
Moesif Symfony SDK, for API Monitoring, Analytics, and Monetization.
- Host: GitHub
- URL: https://github.com/moesif/moesif-symfony
- Owner: Moesif
- License: other
- Created: 2024-03-18T17:16:15.000Z (8 months ago)
- Default Branch: master
- Last Pushed: 2024-09-04T13:28:10.000Z (2 months ago)
- Last Synced: 2024-09-05T16:56:13.972Z (2 months ago)
- Topics: analytics, api-analytics, api-logs, api-management, api-monetization, api-monitoring, logger, logging, monitoring, observability, php, php-symfony, symfony, symfony5, usage-based-billing
- Language: PHP
- Homepage:
- Size: 114 KB
- Stars: 0
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Moesif Symfony SDK Documentation
by [Moesif](https://moesif.com), the [API analytics](https://www.moesif.com/features/api-analytics) and [API monetization](https://www.moesif.com/solutions/metered-api-billing) platform.[Moesif's official SDK for PHP Symfony](https://github.com/Moesif/moesif-symfony) allows you to automatically capture API traffic and send to the [Moesif API Analytics](https://www.moesif.com/docs/api-analytics/) platform.
> If you're new to Moesif, see [our Getting Started](https://www.moesif.com/docs/) resources to quickly get up and running.
## Supported Symfony Versions
The SDK currently supports all Symfony 5.x versions.## Prerequisites
Before using this SDK, make sure you have the following:- [An active Moesif account](https://moesif.com/wrap)
- [A Moesif Application ID](#get-your-moesif-application-id)### Get Your Moesif Application ID
After you log into [Moesif Portal](https://www.moesif.com/wrap), you can get your Moesif Application ID during the onboarding steps. You can always access the Application ID any time by following these steps from Moesif Portal after logging in:1. Select the account icon to bring up the settings menu.
2. Select **Installation** or **API Keys**.
3. Copy your Moesif Application ID from the **Collector Application ID** field.## Install the SDK
Moesif Symfony SDK is available through [Composer](https://getcomposer.org/), the dependency manager for PHP. After you have Composer installed, execute the following command:```bash
$ composer require moesif/moesif-symfony
```
Otherwise, manually add `moesif/moesif-symfony` to your [`composer.json` file](https://getcomposer.org/doc/01-basic-usage.md#composer-json-project-setup).## Enable the SDK
Follow these steps to enable the SDK:1. In your project's `config/packages` directory, add a `moesif.yaml` file. This file holds your configuration options.
2. The configuration file requires you to at least [specify your Moesif Application ID](#get-your-moesif-application-id). The following shows an example:``` yaml
moesif:
moesif_application_id: 'YOUR_MOESIF_APPLICATION_ID.'
debug: false
options:
max_queue_size: 50
max_batch_size: 25
hooks_class: 'App\Configuration\MyMoesifHooks'
```
For more configuration options, see [YAML Configuration Options](#configuration-options).## Configure the SDK
See the available [configuration options](#configuration-options) to learn how to configure the SDK for your use case.## Troubleshoot
For a general troubleshooting guide that can help you solve common problems, see [Server Troubleshooting Guide](https://www.moesif.com/docs/troubleshooting/server-troubleshooting-guide/).Other troubleshooting supports:
- [FAQ](https://www.moesif.com/docs/faq/)
- [Moesif support email](mailto:[email protected])## Configuration Options
The following sections describe the available configuration options that you can define in `moesif.yaml`.### `applicationId` (Required)
Data type
String
A string that identifies your application..
### `debug`
Data type
bool
Set to `true` to print debug messages into the debug and error logs. This can help you troubleshoot integration issues.
### `options`
Data type
Object
If set, contains various options to configure the SDK beyond the defaults.
In this object, you can set the following options:
#### `max_queue_size`
Data type
Default
Integer
15
If set, overrides the default `max_queue_size` before sending data to Moesif.
#### `max_batch_size`
Data type
Default
Integer
10
If set, overrides the default `max_batch_size` that is sent over to Moesif.
#### `hooks_class`
Data type
String
If set, this must be [your implementation of `MoesifHooksInterface`](#user-hook-class-options).
### User Hook Class Options
You can override and customize certain functionalities within the plugin with hooks. For example, create a file `MyMoesifHooks.php` and implement the `MoesifHooksInterface`:
```php
use Moesif\MoesifBundle\Interfaces\MoesifHooksInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;class MyMoesifHooks implements MoesifHooksInterface {
// your implementation of every method follows.
}
```
See [the Example Implementation](#example-implementation) for an example.Make sure to set the [`hooks_class`](#hooks_class) configuration option to the path of your implementation file.
The methods you need to implement for `MoesifHooksInterface` are the following:
#### `identifyUserId`
Data type
Parameters
Return type
Function
($request, $response)
String
Optional.
This function takes the `$request` and `$response` arguments and returns a string for a user ID. This enables Moesif to attribute API requests to individual unique users so you can understand who calls your API. You can use this simultaneously with [`identifyCompanyId`](#identifycompanyid) to track both individual customers and also the companies they are part of.
#### `identifyCompanyId`
Data type
Parameters
Return type
Function
($request, $response)
String
Optional.
This function takes the `$request` and `$response` arguments and returns a string for a company ID. If you have a B2B business, this method enables Moesif to attribute API requests to specific companies or organizations so you can understand which accounts call your API. You can use this simultaneously with [`identifyUserId`](#identifyuserid) to track both individual customers and the companies they are part of.
#### `identifySessionToken`
Data type
Parameters
Return type
Function
($request, $response)
String
Optional.
A function that takes the `$request` and `$response` arguments and returns a string for session or auth token. Moesif automatically creates sessions by processing your API data, but you can override this through the `identifySessionId` method if you're not happy with the results.
#### `maskRequestHeaders`
Data type
Parameters
Return type
Function
($headers)
$headers
Optional.
A function that takes the `$headers` argument for a request. The argument is an associative array. The method
returns an associative array with your sensitive request headers removed or masked.#### `maskRequestBody`
Data type
Parameters
Return type
Function
($body)
$body
Optional.
A function that takes the `$body` argument for request body. The argument an associative array representation of JSON. The method
returns an associative array with any request body information removed.#### `maskResponseHeaders`
Data type
Parameters
Return type
Function
($headers)
$headers
Optional.
Same as [`maskRequestHeaders`](#maskrequestheaders), but for HTTP responses.
#### `maskResponseBody`
Data type
Parameters
Return type
Function
($body)
$body
Optional.
Same as [`maskResponseBody`](#maskrequestbody), but for HTTP responses.
#### `getMetadata`
Data type
Parameters
Return type
Function
($request, $response)
Associative Array
Optional.
A function that takes the `$request` and `$response` arguments and returns `$metadata`. `$metadata` is an associative array representation of JSON.
#### `skip`
Data type
Parameters
Return type
Function
($request, $response)
bool
Optional.
A function that takes the `$request` and `$response` arguments. Returns `true` if you want to skip the event. Skipping an event means Moesif doesn't log the event.
#### Example Implementation
The following example shows what the `MyMoesifHooks.php` file may look like with a `MoesifHooksInterface` implementation:``` php
headers->get('X-Company-Id');
}public function identifySessionToken(Request $request, Response $response): string|null
{
return null;
}public function getMetadata(Request $request, Response $response): ?array
{
return null;
}public function skip(Request $request, Response $response): bool
{
return false;
}public function maskRequestHeaders(array $headers): array
{
return $headers;
}public function maskResponseHeaders(array $headers): array
{
return $headers;
}public function maskRequestBody($body)
{
// this can be a string or array object.
// because prior to php 8, can not declare union type (such as string|array)
return $body;
}public function maskResponseBody($body)
{
// this can be a string or array object.
// because prior to php 8, can not declare union type (such as string|array)
return $body;
}
}
```
## Examples
The following examples demonstrate how to add and update customer information.### Update a Single User
The following example shows how you can create or update a user profile in Moesif using the `updateUser` function.
The `metadata` field can contain any customer demographic or other information you want to store.
Only the `user_id` field is required.
For more information, see the [PHP API Reference about updating a singer user](https://www.moesif.com/docs/api?php#update-a-user).
```php
moesifApiService = $moesifApiService;
}// metadata can be any custom object
$data->metadata = array(
"email" => "[email protected]",
"first_name" => "John",
"last_name" => "Doe",
"title" => "Software Engineer",
"sales_info" => array(
"stage" => "Customer",
"lifetime_value" => 24000,
"account_owner" => "[email protected]"
)
);$userData = [
'user_id' => $data['userId'],
'user_email' => $data['userEmail'],
'company_id' => $data['companyId'],
'metadata' => $data['metadata'] ?? [], // Include metadata if provided
// Add more fields as needed
];$this->moesifApiService->updateUser($userData);
```### Update Users in Batch
You can use the `updateUsersBatch` function to update a list of users in one batch.
Only the `user_id` field is required.
For more information, see the [PHP API Reference about updating users in batch](https://www.moesif.com/docs/api?php#update-users-in-batch).
```php
moesifApiService = $moesifApiService;
}// metadata can be any custom object
$data->metadata = array(
"email" => "[email protected]",
"first_name" => "John",
"last_name" => "Doe",
"title" => "Software Engineer",
"sales_info" => array(
"stage" => "Customer",
"lifetime_value" => 24000,
"account_owner" => "[email protected]"
)
);$userDataA = [
'user_id' => $data['userIdA'],
'user_email' => $data['userEmailA'],
'company_id' => $data['companyIdA'],
'metadata' => $data['metadata'] ?? [], // Include metadata if provided
// Add more fields as needed
];$userDataB = [
'user_id' => $data['userIdB'],
'user_email' => $data['userEmailB'],
'company_id' => $data['companyIdB'],
'metadata' => $data['metadata'] ?? [], // Include metadata if provided
// Add more fields as needed
];$users = array($userDataA, $userDataB)
$this->moesifApiService->updateUsersBatch($user);
```### Update a Single Company
To create or update a company profile in Moesif, use the `updateCompany` function.
The `metadata` field can contain any company demographic or other information you want to store.
Only the `company_id` field is required.
For more information, see the [PHP API Reference about updating a single company](https://www.moesif.com/docs/api?php#update-a-company).
```php
moesifApiService = $moesifApiService;
}// metadata can be any custom object
$data->metadata = array(
"org_name" => "Acme, Inc",
"plan_name" => "Free",
"deal_stage" => "Lead",
"mrr" => 24000,
"demographics" => array(
"alexa_ranking" => 500000,
"employee_count" => 47
)
);// Prepare company data for Moesif
$companyData = [
'company_id' => $data['companyId'],
'company_domain' => $data['companyDomain'],
'metadata' => $data['metadata'] ?? [], // Include metadata if provided
// Add more fields as needed
];$this->moesifApiService->updateCompany($companyData);
```### Update Companies in Batch
To update a list of companies in one batch, use the `updateCompaniesBatch` function.
Only the `company_id` field is required.
For more information, see the [PHP API Reference about updating companies in batch](https://www.moesif.com/docs/api?php#update-companies-in-batch).
```php
moesifApiService = $moesifApiService;
}// metadata can be any custom object
$data->metadata = array(
"org_name" => "Acme, Inc",
"plan_name" => "Free",
"deal_stage" => "Lead",
"mrr" => 24000,
"demographics" => array(
"alexa_ranking" => 500000,
"employee_count" => 47
)
);// Prepare company data for Moesif
$companyDataA = [
'company_id' => $data['companyIdA'],
'company_domain' => $data['companyDomainA'],
'metadata' => $data['metadata'] ?? [], // Include metadata if provided
// Add more fields as needed
];$companyDataB = [
'company_id' => $data['companyIdB'],
'company_domain' => $data['companyDomainB'],
'metadata' => $data['metadata'] ?? [], // Include metadata if provided
// Add more fields as needed
];$companies = array($companyDataA, $companyDataB)
$this->moesifApiService->updateCompaniesBatch($companies);
```## How to Get Help
If you face any issues using this SDK, try the [troubheshooting guidelines](#troubleshoot). For further assistance, reach out to our [support team](mailto:[email protected]).## Explore Other Integrations
Explore other integration options from Moesif:
- [Server integration options documentation](https://www.moesif.com/docs/server-integration//)
- [Client integration options documentation](https://www.moesif.com/docs/client-integration/)