# Changes for 2.14.1 - 20260624

## Update

### Added login ID collection
Added support for collecting login IDs from GET/POST parameters and Session objects.
The collected login ID is sent to the Go Agent via the PACKET_REQUEST_END packet (PACKET_VERSION 10111) and used for transaction-level user identification and login-based statistics (`stat_login_enabled`).
Enabled with `whatap.trace_login_enabled` (default: false). The extraction key is set with `whatap.trace_login_param_key` (a single GET/POST parameter name, POST is searched first) and/or `whatap.trace_login_session_key` (a dot-separated path into the Session, e.g. `auth.user_id`).

### Added SQL result row count collection
The number of rows returned by SELECT queries and the number of rows affected by DML (INSERT/UPDATE/DELETE) statements are now collected and shown as a result-count step in the transaction profile.
The count is appended to the existing SQL packet (PACKET_VERSION 10111).

Supported extensions: mysql, mysqli, PDO, pgsql, oci8, mssql, sqlsrv, odbc, cubrid, and phpredis.
* DML (INSERT/UPDATE/DELETE) affected rows are collected on all of the above.
* SELECT row counts are collected on mysql, mysqli, pgsql, cubrid, odbc, and PDO (MySQL / PostgreSQL).
* phpredis collects the element count for commands that return an array (MGET / HGETALL / KEYS / LRANGE ...).
* DDL statements (CREATE / DROP / TRUNCATE ...) report 0, since they do not operate on rows.

Limitations: the SELECT row count cannot be collected for oci8 and sqlsrv, because their drivers provide no function for the total result size (oci8 only reports rows already fetched, and sqlsrv's default forward-only cursor returns no count). DML affected rows are collected normally for both. The SELECT count is also driver-dependent for PDO on SQLite / Oracle, and is not collected for mysqli unbuffered queries (MYSQLI_USE_RESULT) or for asynchronous pgsql functions (pg_send_*). In these cases no result-count step is shown.
--------------------------------------------------------------------------------
# Changes for 2.14.0 - 20260325

## Update

### Added PHP 8.5 support
Added support for PHP 8.5.

### Fixed active stack collection not working on PHP 8.0+
Fixed an issue where active stack collection was not working on PHP 8.0 and later versions due to zend_execute_ex hook not being triggered.
The active stack collection logic has been refactored into a separate function and integrated with the zend_observer API for PHP 8.0+.
--------------------------------------------------------------------------------
# Changes for 2.13.2 - 20260204

## Bugs

### Fixed segfault and zend_mm_heap corrupted error in multi-transaction profiling.
Fixed a memory corruption issue that could cause segfault or zend_mm_heap corrupted error when multi-transaction feature is enabled (mtrace_enabled=true).
--------------------------------------------------------------------------------
# Changes for 2.13.1 - 20260107

## Bugs

### Fixed an issue where debug messages were displayed in response content.
Fixed an issue where mtid and mcaller_txid debug logs were exposed on web pages when using the multi-transaction (mtrace) feature.
--------------------------------------------------------------------------------
# Changes for 2.13.0 - 20251119

## Bugs

### Fixed an issue where active status data was not being collected properly.
Fixed an issue where active status collection was not working properly after the PHP extension hooking method was modified.

## Update

### Windows Support
Supports PHP monitoring on Windows operating systems.
Supports Windows 2016 Server (x64) or later, PHP 7 or later.

### Added stack trace feature
Collects stack information from the debug_gettrace() function as active stacks.
PHP stack traces collect stacks at the point when user function calls end. If the user function execution time is long, the stack collection interval may not be consistent.

Caution
Enabling this feature may result in collection overhead.

Options

The following two options must be enabled. These two options are enabled by default (true).
  whatap.ext.hook_zend_execute_ex_enable
  whatap.profile_method_enabled

* whatap.active_stack_enabled
Enables stack collection feature. (default: false)

* whatap.ext.active_stack_start_resp_time (default: 5000)
Starts collection when the configured response time is exceeded.
By default, stack information is collected when response time exceeds 5 seconds.
Minimum value: 1000 ms

* whatap.ext.actvie_stack_interval (default: 1000)
Sets the interval for collecting stack information. After the first stack collection, it collects at intervals based on the default 1 second.
The default is 1 second interval stack collection.
Since shm_time is 200ms by default,
Minimum value: 200 ms, Change unit: 200ms

* whatap.trace_active_callstack_depth (default: 50)
Limits the number of stacks collected, collects up to 50 lines of stacks

* whatap.ext.active_stack_max_count (default: 20)
Limits the number of stack information collections.
Default: 20
Collects stacks up to 20 times only.
--------------------------------------------------------------------------------
# Changes for 2.12.0 - 20251015

## Update

### Changes the way PHP internal function hooking works.
The existing method of collecting transaction data using the zend_execute_internal function checks all functions, which can cause CPU overload in transactions with excessive internal function calls.
By replacing the handlers for required PHP internal functions, we now collect transaction information only from specific functions.

Added related options.

* whatap.ext.hook_overwrite_internal_function_enabled
Default: true
Collects transaction data by replacing the handlers of required PHP internal functions.

Make sure this setting does not overlap with whatap.ext.hook_zend_execute_internal_enabled .
This setting requires a service restart. Restart Apache or php-fpm.

* whatap.ext.hook_zend_execute_internal_enabled
Default: false
Collects transaction data using the zend_execute_internal function, as before.
This setting requires a service restart. Restart Apache or php-fpm.

* whatap.ext.hook_zend_execute_ex_enabled
Default: true
Collects data via PHP user functions using the zend_execute_ex function.
This setting requires a service restart. Restart Apache or php-fpm.
--------------------------------------------------------------------------------
# Changes for 2.11.2 - 20250723

## Bugs

### Fixed segmentation fault when using session_set_save_handler function
This error only occurs if you do not use register_shutdown_function.

```
register_shutdown_function('session_write_close');
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

or

session_set_save_handler($handler, register_shutdown: false);
```
--------------------------------------------------------------------------------
# Changes for 2.11.1 - 20250709

## Bugs

### Fixes the issue where whatap-php.service is not registered and executed.
- In the case of a new installation, there is an error where the environment value is not set in the /etc/systemd/system/whatap-php.service file, so the connection information (access key and server address) with the Whatap collection server cannot be found, resulting in an error where the agent cannot be activated.
- In this case, you can resolve this issue by running /usr/whatap/php/install.sh to install and then copying /usr/lib/systemd/system/whatap-php.service to /etc/systemd/system/whatap-php.service.
- If you are updating an existing monitoring installation, it will be installed normally.
--------------------------------------------------------------------------------
# Changes for 2.11.0 - 20250618

## Bugs

### Fixed memory leak
Fixed a memory leak that occurred when calling the error function.
if result of execute function is false,  error function is called internally to collect error information from the result.
when error function is called, occur memory leak.   

## Update


### Reduced CPU load
The more internal functions are executed, the more CPU load occurs
The logic for determining the monitoring target has been changed to reduce CPU load.

### Parameters of CLI calls are displayed in the URL.
Example of the call below:
```
php /home/www/test.php aaa bbb
```
URL 
```
/home/www/test.php aaa bbb
```

### Collects file parameter information.
The maximum number of parameters is 20, and each parameter is up to 256 bytes.
--------------------------------------------------------------------------------
# Changes for 2.10.0 - 20250211

## Bugs

### Fixes an error in the arm64 (aarch64) environment where transaction IDs are not issued uniquely. 
When searching profiles, the wrong profile is displayed. Correct the error. 


### Fixes features that collect information unnecessarily despite the option to disable it.

* This has been corrected because system resource collection may proceed even when the option is disabled, causing CPU load.


## Update

### Add an option to stop collection based on specific URIs. 

* whatap.ext.ignore_uris  
Registers a URI that will not collect transaction information. Register multiple items separated by commas. 

* whatap.ext.ignore_profile_uris  
Register a URI that collects basic transaction information and does not collect detailed profile information. Separate multiple entries with commas. 


### Add an option to stop collection by function in PHP Extension.

* whatap.ext.trace_enabled (default: true)  
If disabled, transaction information will not be collected.

* whatap.ext.profile_enabled (default: true)  
If disabled, only basic transaction information is collected and detailed profile information is not collected.

* whatap.ext.profile_sql_enabled (default: true)  
If disabled, SQL-related profiles will not be collected.

* whatap.ext.profile_httpc_enabled (default: true)  
If disabled, profiles related to http calls (cURL functions) are not collected.

* whatap.ext.profile_socket_enabled (default: true)  
If disabled, socket-related profiles are not collected.

* whatap.ext.error_enabled (default: true)  
If disabled, error information is not collected.

* whatap.ext.exception_enabled (default: true)  
If disabled, exception information is not collected.

* whatap.profile_session_enabled (default: true)  
If disabled, session-related profiles will not be collected.

* whatap.profile_file_enabled (default: true)  
If disabled, file-related profiles will not be collected.

* whatap.profile_method_enabled (default: true)
If disabled, the execution time of user functions will not be collected. 
Information about user functions whose execution time exceeds the value of the profile_method_time option can be checked in the transaction details.
Only functions called directly from the php script (1 Depth) are monitored. Subfunction calls made inside a function are not eligible.

### Gather additional information about the transaction. 

* peak-memory: Collects peak memory while PHP is running. 
* elapsed-utime: Collects user cpu usage. 
* elapsed-stime: Collects system cpu usage.
* external-func-count: Number of user function executions 
* prof-external-func-count: Number of user functions tracked by WhaTap monitoring.  
* internal-func-count: Number of PHP internal function executions 
* prof-internal-func-count: Number of internal functions tracked by WhaTap monitoring.
--------------------------------------------------------------------------------
# Changes for 2.9.0 - 20241211

## Bugs

### When displaying session_start function profile information, the order is incorrectly displayed. 
Corrects an issue where session_start profile information is displayed in reverse order after redis function profile information when session processing is performed through redis inside the session_start function. 
The session_start function is modified to display execution start time first, and redis next.

### Multi-transaction
Activate the multi-transaction function on a transaction basis. 
If the multi-transaction sampling rate is less than 100%, 
Check sampling on a per-transaction basis. 
Previously, sampling was checked at each external http call, 
so if there were multiple external http calls, it would appear to be missing.
(In the case of multiple calls, if the sampling is determined in the middle, 
the external call in the front is not linked to the multi-transaction, 
and only the external call in the back is linked and appears missing.)
--------------------------------------------------------------------------------
# Changes for 2.8.2 - 20240911

## Bugs

### Fix OKIND environment variable recognition error
You can set okind with the OKIND or WHATAP_OKIND environment variables.

## Update

### Added option to prioritize environment variables over agent configuration file (whatap.conf)
    Existing agent settings are applied in the order of whatap.ini and environment variables.
    Setting the use_env_first (default false) option causes environment variables to take precedence over settings in the whatap.ini file.
    
    * whatap.use_env_first=true
      It can be set using an environment variable in the format WHATAP_USE_ENV_FIRST=true.
--------------------------------------------------------------------------------
# Changes for 2.8.1 - 20240724

## Update

### Add transaction statistics by IP

    **`whatap.stat_ipurl_enabled`**
    Default : false 
    Type : Boolean
    *

### Add compressed transfer of statistical information.

    **`whatap.stat_zip_enabled`**
    Default : true
    Type : Boolean
    *
--------------------------------------------------------------------------------
# Changes for 2.8.0 - 20240619

## Update

### Supports linux aarch64.  

### Add security.conf. 

* Use security.conf file instead of existing paramkey.txt. 
* Use the value of the paramkey key in security.conf. 
* The default value is changed to specify “WHATAP” instead of a random value. (If “WHATAP” is specified, decryption is possible without key input.)
   
### Change the normalization option settings for SQL statements. 

* Always activate the function to separate and normalize parameters in SQL statements. 
    * Always set the trace_sql_normalize_enabled option to true. 
* If you have already disabled the normalization option (normalization stop setting), activate the setting to normalize and display parameters separately. 
    * Enable the profile_sql_param_enabled option.
    * Normalized parameters are separately encrypted and collected. 
    * You can check the data by decrypting it with the paramkey of security.conf.
--------------------------------------------------------------------------------
# Changes for 2.7.2 - 20240306

## Update

### Changed to allow date format for log file names.
    * Specified based on python strftime use.
    * Example) 20240101: %Y%m%d
--------------------------------------------------------------------------------
# Changes for 2.7.1 - 20240124

## Update

## bug

### Fixed an error where only the hash (number) value, not the name, was displayed after setting onode_name.
    * The original text and hash data type were incorrect, so the original text was not displayed.

### Fixed an error where the whatap-php.service file was not recognized in Ubuntu 14 version.
    * Add /etc/systemd/system/whatap-php.service file. (link /usr/lib/systemd/system/whatap-php.service)
--------------------------------------------------------------------------------
# Changes for 2.7.0 - 20240110

## Update

### Supports PHP 8.3.

### Trace context (W3C) is supported.
	* Supports trace contact in multi-transaction tracing.
	* Supports multi-transaction tracking linkage with Opentelmetry.

### Fixed the collection of resource indicators for Sql, Method, and Http call.
    * Collect the difference between resources (cpu, mem) at the start of the transaction and the start time of each step.
    * In case of SQL resource, it is collected as (sql start resource - transaction start resource).

## bug
    * Corrects an error in which the accumulated number of external calls is incorrectly sent as the accumulated external call time in the active transaction list.
    * Fix whatap-php service execution error in linux.
--------------------------------------------------------------------------------
# Changes for 2.6.3 - 20231122

## Update

### Change the text cache storage period.
    * Reset from the existing daily interval to 1 hour interval.

### Change to not collect cpu and memeory in the kubernates environment.
    * The cpu and memory indicators collected inside the PHP agent are not accurate, so collection is stopped.
    * Replace with system metrics collected by the kubernates agent.

## bug
    * Fixed whatap-php service execution error in Centos9 and above.
--------------------------------------------------------------------------------
# Changes for 2.6.2 - 20230913

## Update

### The whatap.ignore_http_method option changes the target to all transactions.
    * When excluding a specified http method, it is set to be excluded only from a specific transaction name (whatap.http_method_urls).
    * Remove whatap.http_method_urls option and change to target all transactions.

### Large volume profile processing
    Existing profiles collected up to 1024 profile information.
    You can increase the maximum with settings, but the memory increase is essential.
    
    By compressing a certain amount of profiles and transmitting them in splits, more profile information can be collected without increasing memory.
    **`whatap.large_profile_enabled`**
    Default: false
    Type: Boolean
    
    
    More profile information is collected by separating and storing a certain amount of profiles as virtual transactions.
    It is displayed as a list of multiple transactions.
    **`whatap.split_profile_enabled`**
    Default: false
    Type: Boolean
    *
    
    If both options are set, whatap.wplit_profile_enabled takes precedence.
    
              
### Profile data compression transmission function
    Profile information is compressed and transmitted.
    
    **`whatap.profile_zip_enabled`**
    Default: true
    Type: Boolean
    *
--------------------------------------------------------------------------------
# Changes for 2.6.1 - 20230215

## Fixed

### Fixed an error where sometimes normal transactions were collected as transactions that were delayed by more than 5 minutes.
If the order of the start and end events of a transaction is reversed through UDP communication, the transaction end event is processed first.
After 5 minutes, "Lost connection" is displayed in the internal profile information.
When the end event is delivered first, it has been supplemented to wait for the start event for 30 seconds.

The causes of the transaction marked as Lost connection are as follows.
Stops collection if it fails to collect end events for 5 minutes after the transaction start event.

1. In case the actual execution time of the transaction is more than 5 minutes.
2. Failed to collect transaction end event because apache or php-fpm restart or shutdown terminated the process immediately.
3. When apache or php-fpm is forcibly terminated due to an unexpected error (segmentaion, sigbus, etc.)


## Update

### Tps display data is changed.
    * Data changes from 30-second moving average to 5-second average.
    * 5 second average if service_metrics_spike_enabled=false
--------------------------------------------------------------------------------
# Changes for 2.6.0 - 20230104

## Fixed


## Update

### PHP 8.2 version is supported.
    * Supports 8.2 nts, zts.
    * mysqli::execute_query, mysqli_execute_query function tracing.
--------------------------------------------------------------------------------
# Changes for 2.5.4 - 20221116

## Fixed


## Update

### Collects execution times of fsockopen and socket_connect functions.
Previously, only connection information was collected, 
but execution time is also additionally collected.
--------------------------------------------------------------------------------
# Changes for 2.5.3 - 20220831

## Fixed


## Update

### Change the cache data initialization from 1 day intervals to 1 hour intervals.

### Collect cloud environment information.
Briefly collect information from your cloud environment.
--------------------------------------------------------------------------------
# Changes for 2.5.2 - 20220706

## Fixed

### Fixed segmentation fault.

With the multi-transaction trace option (whatap.mtrace_enabled) set
Fixed an error where a segmentation fault occurred while using the curl_setopt_array function   
when the multi-transaction trace option (whatap.mtrace_enabled) was set.

### biz_exceptions option

Errors excluded by the biz_exceptions option are not marked as errors in the heat map,   
and are applied only to the transaction profile and statistical information.  
Fixed an error that did not apply to statistical information.

## Update

### Set log data compression to default

Set the default value of whatap.logsink_zip_enabled to true.  
Compressed transmission is the default.

### Rename the project license key to access key.

Change whatap.license to whatap.accesskey in the agent options.
Existing licenses can also be used.

### Change the TCP queue size.

Expand from 256, 512 to 512, 1024 .
Expanded to handle tcp packet growth if you have a lot of log files set up.
--------------------------------------------------------------------------------
# Changes for 2.5.1 - 20220518

## Fixed

### Fixed an issue with undefined symbol: php_array_key_compare_unstable_i) in whatap.so .
--------------------------------------------------------------------------------
# Changes for 2.5.0 - 20220518

## Fixed

### Fix cpu, memory negative error in active transaction

### Applies the changes from php 8.0 or later resource to object.

In php8.0 or later, 
the resource id of the DB-related library has been changed to object, 
and the problem that detailed information of DB-related errors cannot be collected has been fixed.

### Fixed an issue where URIs ending in / are also normalized during transaction URI normalization.

If you register as /{AAA} in the settings during transaction URI normalization,

/aaa.php
/
Fixed issue where both URIs are normalized to /{AAA}.
After that, only /aaa.php is normalized to /{AAA}.



## Update

### Collect sql bind parameters.

### Add odbc_do function

Added an alias function that does the same thing as odbc_exec .

### Excludes transaction collection for the specified Uri and HTTP Method.

**`ignore_http_method_urls`**
    Default : "" 
    Type : String 
    
**`ignore_http_method`**
    Default : "" 
    Type : String 

```
ignore_http_method_urls=/index, /path
ignore_http_method=options, connect
```

### Add the query_string_keys option.

By adding a Get parameter to the URI with query_string_enabled, it is marked as a service URL.
If there are many Get parameters, the parameter order can be different each time and the length can be long, 
so the parameter name to be displayed can be specified.
If you collect only the specified parameters, 
the service URL is simplified and you can check more accurate information in statistical information.
    
**`query_string_keys`**
    Default : ""
    Type: String
     
Multiple parameters are specified by separating them with commas. The collected parameter information is displayed in the same way as the setting sequence.
     
NOTE: If you do not specify a parameter name, all Get parameters are added and displayed as a service URL in the same way as before.
--------------------------------------------------------------------------------
# Changes for 2.4.1 - 20220216

## Fixed

### Delete mysqli related debug log output

If an error occurs while using the mysqli library, errorno and error contents are collected. At this point, the debug log is output to error_log .
The log has been deleted.
--------------------------------------------------------------------------------
# Changes for 2.4.0 - 20211216

## Fixed

### cURL header configuration information initialization error

When setting HTTP Header (CURLOPT_HTTPHEADER) through curl_setopt and curl_setopt_array functions,  
If duplicate settings are made, old information is initialized and only new information is set.  

When the multi-transaction (whatap.mtrace_enabled=true) setting is enabled,  
Because the WhaTap Header information is internally set with the curl_setopt() function,  
there is an error in which the user header information is initialized due to duplicate settings.  

Stop the WhaTap Header automatic setting function, and add whatap header in the php source code to prevent duplicate settings.  

* whatap.mtrace_auto_inject_enabled=true
        After calling the curl_init() function, it sets whatap header while calling curl_setopt() internally.
        false : Stop automatic setting of WhatTap Header.

## Update

### PHP 8.1

PHP 8.1 is supported.
--------------------------------------------------------------------------------
# Changes for 2.3.3 - 20211110

## Update  

### Fixed GET parameter collection error  
   
* Fixed an error where GET parameters could not be collected when the URL is changed from the Codeigniter framework to the rewrite module.  
Separated parameters from Query_string of URI and added without duplicates.


### JIT disabled warning in PHP 8.0 
   
* Fixed an error in PHP 8.0 where the following warning occurred when opcache.jit=on is set
 
~~~
PHP Warning:  JIT is incompatible with third party extensions that override zend_execute_ex(). JIT disabled. in Unknown on line 0
~~~

### Add function related to file  

Added file related functions.  
When the following functions are called, the file name and execution time are collected.  
  
~~~
fopen()
file()
file_get_contents()
~~~
--------------------------------------------------------------------------------
# Changes for 2.3.2 - 20211020

## Update  

### Change log monitoring options.  
   
* Replace existing watchlog with logsink.files optionSimplified by specifying the full path and file name of the log file to be monitored (multiple files can be specified with commas (,))


### PHP Extension 
   
* Add multi-transaction tracking Mtid lookup function Return long mtid with Whatap::whatap_mtid() function
--------------------------------------------------------------------------------
# Changes for 2.3.1 - 20210901

## Update  

### Fixed an error that delayed TCP reconnection.  
   
* Retransmits previously unsent data when TCP reconnects.  
In the process of retransmission, the encryption key used for TCP communication was not issued normally.  
Fixed an error where there was a delay until the connection was completed due to multiple retries.  
    
Added a setting to disable that feature.
   
whatap.net_failover_retry_send_data_enabled=true
Enables retransmission of remaining data upon TCP reconnection.
--------------------------------------------------------------------------------
# Changes for 2.3.0 - 20210824

## Update

### Added handling of missing data when reconnecting a TCP connection.
        
* If the TCP connection is cut while data is being transmitted to the collection server, 
  the data that has not been sent has been modified to be re-sent after reconnecting.  
  
### LogSink data collection 

* A function to collect log data has been added.

* whatap.logsink_enabled=true  
    Set whether to collect log data.  
* whatap.logsink_zip_enabled=true  
    Set whether to send compressed log data. (The default is Gzip.)  
* whatap.watchlog_enabled=true  
    Collect log data by specifying a log file.  
    
* whatap.watchlog.[specify unique log file ID].enabled=true  
* whatap.watchlog.[Specify unique ID of log file].file=[File path and file name]  

    Randomly designate the unique ID of the log file and set whether to collect it.
    Randomly designate a unique ID for the log file, and set the file path and file name.
    
    Ex) Apache error log
    whatap.watchlog.apache_error_log.enabled=true
    whatap.watchlog.apache_error_log.file=/etc/httpd/logs/error_log
--------------------------------------------------------------------------------
# Changes for 2.2.0 - 20210510

## Update

### Agent active and inactive notification.
Fixed an error in which communication was unstable due to the occasional wrong setting of the security key 
exchanged between the agent and the collection server at the time of agent startup.        
The agent's connection is considered unstable on the server, and agent active and inactive notifications are issued.
Sending and receiving data at that point may not be smooth either.

###
--------------------------------------------------------------------------------
# Changes for 2.1.3 - 20210421

## Update

### whatap-php service  

As the number of transactions per second (TPS) increases, the CPU load of the whatap-php service increases as the data to be processed increases.
I am passing data from PHP Extension to whatap-php via UDP.
Improvements have been made to reduce CPU load by reducing data collection for transactions that require fast response time and low profile data, and therefore require less monitoring.

### Options
* golang debug_gc_percent=200
* whatap.net_udp_flush_start=true
    Default: true
    false: Do not collect the transaction start point. No udp data transmission at the start of the transaction.
    NOTE: Since the start point is not collected, it may be reflected a little later in the active transaction information counting the number of transactions in progress. +
          Active status is displayed normally  
              
* whatap.net_udp_flush_error=false
    Default: false
    false: No udp data transmission at the time of error occurrence.  
        
* whatap.net_udp_flush_end=true 
    Default: true
    true Send udp data at the end of the transaction. 

* whatap.net_udp_profile_basetime_enabled=false
    Default: false
    
* whatap.net_udp_profile_basetime=200
    Default: 200 milliseconds
    Profile information of transactions that are faster than the set response time is not collected.
    NOTE: Because profile information is not collected, it is not reflected in statistics such as SQL and HTTPC.
        
* whatap.net_udp_trace_ignoretime_enabled=false  
    Default: false
* whatap.net_udp_trace_ignoretime=30
    Default : 30 milliseconds  
    Transaction and profile information that takes the set response time is not collected.

* shm_tx_counter_enabled=false
    Added tps count, resp sum, and apdex to shared memory.
    Replace the existing counter with the value collected from shared memory
    (Tps, response time, apdex statistics correction when net_udp_trace_ignoretime is set)
--------------------------------------------------------------------------------
# Changes for 2.1.2 - 20210325

## Update

### php daemon process support

Supports functionality for the php daemon process.
It collects profile information like a web transaction by specifying the start and end points inside the daemon process that does not end.
It uses functions in the Whatap library.

* Start a transaction. Specify the name to replace the URL of the transaction as a parameter. 
    Whatap::whatap_begin_tx("daemon_service");

* End the transaction.
    Whatap::whatap_end_tx();

```
<?php
$pinfo = pathinfo(__FILE__);
$cur_path = $pinfo['dirname'];

// Load Whatap  
include_once($cur_path.'/Whatap.php');

error_log('Start Daemon');
$daemon_count = 0;

while(true){
    
    // start daemon transaction(service_name);
    Whatap::whatap_begin_tx("daemon_service");

    // Internal logic
    ...
        
    // end daemon transaction
    Whatap::whatap_end_tx();
   
    sleep(5);
}
?>
```

`*whatap.trace_daemon_enabled*`::
#Default : False# +
#Type : Boolean# +
+ 
True: Exclude php daemon processes.
The php daemon process checks to start a transaction, but ignores it because it doesn't terminate.  
If not ignored, collection ends after 5 minutes.  
It is marked as a transaction that took 5 minutes, and "Lost Connection" is displayed in the profile content. 
+           

`*whatap.trace_daemon_urls*`::
#Default : # +
#Type : String# +
+ 
Set the url of the php daemon process to be excluded from transaction processing.  
Multiple inputs are separated by commas (,). 
+   
        
        
### php cli

You can override the php profile information running from the command line.
When running the php script from the command line, set the transaction URL with the name of the php file passed as a parameter.
Set the "CLI" value in the host information.

`*whatap.trace_cli_enabled*`::
#Default : True# +
#Type : Boolean# +
+ 
True : Collects php cli profile information.
+
--------------------------------------------------------------------------------
# Changes for 2.1.1 - 20210317

## Update

* Improves CPU load increase for whatap-php service daemon
* When normalizing the transaction URL, the part where it was difficult to check the original URL is improved.

## Option

* Set whether to collect HTTP User-Agent
  whatap.trace_useragent_enabled, Default false
* Set whether to collect HTTP Referer
  whatap.trace_useragent_enabled, Default false
  
## PHP Libaray:
               
## Install & Configure :
--------------------------------------------------------------------------------
Changes for 2.1.0 - 20210310
    - Update :
        - Supported tibero with odbc
    - Option :
        
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 2.0.0 - 20210217
    - Update :
        - Supported php 8.0 
        - Supported alipine linux
    - Option :
        
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.8.5 - 20201209
    - Bug Patch :  
        - Fixed an error where two backslashes, the namespace separator, were initialized in the biz_exceptions item.
        - Add psql_close() function collection in psql module (add the missing part)
    - Update :
        - You can modify the license and watap collection server address in the agent settings. 
          If you modify the license, it will take effect after a certain period of time without restarting the agent.
    - Option :
        
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.8.4 - 20201111
    - Bug Patch :  
        - Fixed an error where segmentaion occurred intermittently at the end of a request while using the cURL library.
          If an error occurs, a "Lost Connection" transaction with a response time of more than 5 minutes occurs.
    - Update :
        - Added a function to exclude from collected information by specifying HTTP Header name.
    - Option :
        - whatap.profile_http_header_ignore_keys   
          . The value of the specified HTTP Header name is excluded from collection and is marked with "#". Multiple designations are separated by commas (,).
          . Default : "host,accept,user-agent,referer, accept-language, connection"
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.8.2 - 20201014
    - Bug Patch :  
        - Fixed cURL multi_exec profiling error.
            cURL multi profiling collects the elapsed time from the curl_multi_exec and curl_multi_select functions to the point when the curl_multi_close function is called.
            Fixed an error where profiling was collected duplicated in the part where the curl_multi_remove_handle function was previously regarded as the curl_multi_close function.
    - Update :
        - Added apdex. It is based on response time and is quantified as the percentage of satisfaction and allowances among all requests.
        - Updatede Multi-transaction tracing. Modified to automatically add tracking HTTP Header (no modification of PHP source). Collecting MSA analysis information.
        - If the result value of cURL or DB library function is False, it is regarded as an error and additional error message messages are collected.
    - Option :
        - whatap.apdex_time : Set the satisfactory transaction response time criterion.
        - Added setting related to error message collection of curl, mysql, mysqli, pdo, oci8(oracle), pgsql, mssql, sqlsrv, redis, cubrid library
            - whatap.profile_[Library name]_return_enabled
                . True : When the result of the library function is False, it is marked as an error.
                . Defualt : True
            - whatap.profile_[Library name]_error_info_enabled
                . True : Error message is collected when the result value of library function is False.
                . Defualt : True
            - whatap.profile_[Library name]_error_ignore_empty
                . False : When there is no error code or error message, it is displayed as a normal result.
                . Defualt : True, PhpRedis library defaults to False      
        - whatap.trace_client_ip_header_key_enabled
                . True : Set the default header key (X-Forwarded-For) value to client IP. 
                . False : Set the default "Remote IP" to client IP.     
    - PHP Libaray:
               
    - Install & Configure :    
 --------------------------------------------------------------------------------   
Changes for 0.8.3 - 20201028
    - Bug Patch :  
        - Fixed an error where sql could not be collected intermittently when the length was long. (sql is collected up to 32 kb.)
        - Fixed an error in which the elapsed time was abnormally collected when the curl resource was not passed as a parameter when calling the curl_exec function.
    - Update :
        
    - Option :
             
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.8.1 - 20200819
    - Bug Patch :  
        - Fixed segmentaion error during memory cleanup after PHP Cli execution was completed.
    - Update :
        - Add profiling related to cubrid database
        - Collects execution results of sql function, db connection function, and external http call function through curl. 
          If it is a boolean (false) value, it is displayed as an error status.
    - Option :
          
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.8.0 - 20200724
    - Bug Patch :  
        - Fixed a segmentaion error that occurred when connectionInfo was not passed when using the sqlsrv_connect function.
    - Update :
        - In addition to the Redis function name, the passing argument is composed of a string and expressed like SQL syntax.
        - DB Connection information to which SQL syntax is applied has been set as the last connection DB Connection information.
          It has been modified to maintain multiple DB Connections at the same time and to set appropriate DB Connection information even when using at intersections.
    - Option :
        - whatap.profile_db_connection_map_size : At the same time, it is the size that can store the maximum DB connection information that maintains the connection. When connecting to an excessive DB connection, old information is deleted first.
          Default : 20 
          
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.7.2 - 20200603
    - Bug Patch :  
        - Fixed the error that numeric values ​​are not deleted when deleting SQL comments.
    - Update :
    - Option :
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.7.1 - 20200527
    - Bug Patch :  
        - Fix to collect client ip normally when there are multiple x-forwarded-for IPs.
        - Fixed an issue where the Active Status was gradually increasing. 
          Changes the active status acquisition calculation method and resets it at regular time intervals.
    - Update :
        - Added option. whatap.trace_user_cookie_keys. Set cookie keys to identify users for real-time number of users.
        - Added Redis related profiling feature. (Function : connnect, set, get, mset, mget)
        - Improved web process usage memory collection.
        - 
    - Option :
        - whatap.trace_user_cookie_keys: Set cookie keys to identify users for real-time number of users. multiple keys separated by commas.
          Default : "PHPSESSID,ci_session,laravel_session"
        - whatap.profile_sql_comment_enabled: if this option is set by false, comments are excluded from the sql statements collected.
          Default : false
--------------------------------------------------------------------------------
Changes for 0.5.0 - 20191205
    - Bug Patch :  
    - Update :
         - Added support for the SqlSrv module for mssql connections  
               
    - Option : 
               
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------              
Changes for 0.6.0 - 20200205
    - Bug Patch :  
        - Fixed an issue that prevented collecting http method information collection.
        
    - Update :
        - Added shared memory between php extension module and service daemon(whatap-php). Active status feature is supported through shared memory.
        - Added Active status feature. The state has a generic function, SQL, DB connection, external HTTP connection, socket connection. 
          Shows the number of requests in progress for each state.
        - If exists x-forwarded-for header, Set value of x-forwarded-for to remote ip.
          The whatap.trace_http_client_ip_header_key option is set by default to the value of "X_FORWARDED_FOR".
        - Added the ability to specify transaction URLs that you don't want to track.
        
    - Option :
        - whatap.shm_enabled: whether to use shared memory. 
          Default: true
        - whatap.active_stat_enabled: whether to use active stat feature.
          Default: true 
        - whatap.shutdown: if this option is set by true then whatap-php service daemon will stop.
        - whatap.trace_http_client_ip_header_key : changed the default value to "X_FORWARDED_FOR"
          Default: X_FORWARDED_FOR
        - whatap.trace_ignore_url_set: Specifies the transaction URLs that you do not want to track. If you register multiple entries, separate them with commas (,)
        - whatap.trace_ignore_url_prefix: Specifies the prefix of transaction URLs that you do not want to track.
    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------    
Changes for 0.7.0 - 20200219
    - Bug Patch :  
        
    - Update :
        - PHP version 7.4 is supported.

    - Option :

    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.4.13 - 20191115
    - Bug Patch :  
        - Fixed memory leak of the whatap-php service daemon.  
    - Update : 
               
    - Option : 
               
    - PHP Libaray:
--------------------------------------------------------------------------------
Changes for 0.4.12 - 20191106
    - Open 
    - Bug Patch :  
        - Fix a part of the load on the Udp data processing when there is a lot of traffic.
          Use queue instead of go channel (process higher priority data first, discarding unprocessed data)
           
    - Update : 
        - Added options for using Queue or setting buffer size. 
    - Option : 
        -UDP related settings
            - net_udp_read_bytes: Set the read buffer of the udp socket.
                default: 64M
        - Transaction processing:
            - tx_max_count: The maximum size of the buffer for storing transactions. If there are many transactions being processed at the same time, increase the size.
                default: 5000
            - tx_default_capacity: The starting size of the buffer that stores transactions.
                default: 101
            - tx_load_factor: The criteria for gradually increasing the size of the buffer that stores transactions.
                default: 0.75 (If more than 75% is saved from 101, double the buffer size.)
              
        - Performance:
            - queue_log_enabled: Outputs queue related logs.
                default: false
            - queue_tcp_enabled: Use a separate queue instead of the channel used to process Tcp data transmission (use the data priority queue).
                default: false
            - queue_tcp_sender_thread_count: Specifies the number of threads that handle sending Tcp data. Increasing the number will speed up data transmission.
                default: 1
            - net_send_buffer_size: Set up channel buffer for processing Tcp data.
                default: 1024
            - net_send_queue1_size: Sets the queue buffer for processing Tcp data. Queue for high priority data.
                default: 256
            - net_send_queue2_size: Sets the queue buffer for processing Tcp data. Queue for profile data.
                default: 512
                
                
            - queue_udp_enabled: Use a separate queue instead of Channel to handle Udp data reception.
                default: false
            - queue_udp_size: Set up the Udp data reception buffer. Set Channel, Queue buffer. To change it, you need to restart whatap-php service.
                default: 2048
            - queue_udp_read_thread_count: Specifies the number of threads that handle receiving Udp data. Increasing the number will allow the UDP buffer to read data more quickly.
                default: 3
            - queue_udp_overflowed_size: If you use Queue to receive Udp data, set the overflowed Queue to the resolution buffer size.
                default: 4096
            - queue_udp_process_thread_count: Specifies the number of threads that process Udp data. Increasing the number can speed up processing of data read from UDP.
                default: 1
                
            - queue_profile_enabled: Use a separate queue instead of Channel for processing Profile information.
                default: false
            - queue_profile_size: Sets a buffer for processing Profile information.
                default: 512
            - queue_profile_process_thread_count: Specifies the number of threads that process profile information. Increasing the number can speed up the process.
                default: 1
            
            - queue_text_enabled: Use Queue instead of Channel for text data processing.
                default: false
            - queue_text_size: Sets the buffer for text data processing.
                default: 512

    - PHP Libaray:
               
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.4.8 - 20190418
	- Open 
    - Bug Patch : password is deleted in postgresql connection string with PDO 
    - Update : Trace Zend function.(compile_file, compile_string) 
    - Option : 
               profile_compile_file_enabled - enable trace compile_file. Default false
               profile_compile_file_basetime - if the execution time of the function takes longer than the standard, it is traced. Default 200 ms 
               
	- PHP Libaray:
			   
    - Install & Configure :

--------------------------------------------------------------------------------              
Changes for 0.4.9 - 20190905
	- Open 
    - Bug Patch :  
               Fixed Server -> Agent Status 
    - Update : 
               Modified to be enabled by default for topology options.
               Added profile function for PHP internal method 
               curl_multi_exec , curl_multi_select functions have been integrated into curl_multi
               Added session_start, session_write_close function profile 
               Added the ability to exclude the collection of Error or Exception information.
    		   
    - Option : 
               profile_internal_method_enabled: 
                 Trace PHP internal functions. Collect when the function execution takes more than profile_internal_time. 
                 The default value is false. 
               profile_internal_time: 
                 Set runtime conditions for PHP internal functions. 
                 Setting it too fast can put a load on the server. 
                 The default value is 1000 ms. 
               profile_internal_method_param_enabled: 
                 Prints out the information of the arguments passed to PHP internal functions. Only numeric and character types are output. 
                 The default value is false
               
               profile_session_enabled:
                 Collect execution time of session_start and session_write_close functions. 
                 The default value is true 
               
               bix_exception:
                 Excludes Error or Exception. The Hitmap is not marked as an error and is collected only on statistical information.
                 The same applies to the collected error class name. 
                 You can register multiple items by separating them with commas.

               ignore_exception:
                 Ignore specific Error or Exception. Excludes both heatmaps and statistics. 
                 The same applies to the collected error class name. 
                 You can register multiple items by separating them with commas.
               
	- PHP Libaray:
			   
    - Install & Configure :
        Modified install.sh.
        Add an input procedure to register the user directly if the web or php environment is not recognized during the auto installation process
--------------------------------------------------------------------------------              
Changes for 0.4.10 - 20190918
	- Open 
    - Bug Patch :  
           Fixed error collecting httpc profile.
    - Update : 
    		   
    - Option : 
               
	- PHP Libaray:
			   
    - Install & Configure :
--------------------------------------------------------------------------------              
Changes for 0.4.11 - 20191023
	- Open 
    - Bug Patch :  
           biz_exception. Fixed not displaying on heatmap.
    - Update : 
           Add netstat toplogy.	
    - Option : 
               
	- PHP Libaray:
			   
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.4.5 - 20181211
	- Open 
    - Bug Patch : 
    - Update : Add multi transation trace statistics 
                
    - Option : 
               whatap.stat_mtrace_enabled - enable multi transaction trace statistics , default false
	- PHP Libaray:
			   Add Whatap::whatap_mtrace_getopt - get option(http header) for multi transaction trace
			    (/usr/whatap/php/lib/Whatap/sample_mtrace.php)
			   Header key - x-wtap-mst, x-wtap-inf, x-wtap-tx 
    - Install & Configure :
--------------------------------------------------------------------------------              
Changes for 0.4.6 - 20190314
	- Open 
    - Bug Patch : install.sh - Apache MPM(event), nts -> zts     
    - Update : Support PHP 7.3.
               Support Topology.
               Update options for mutli transacetion trace.
    - Option : 
             Multi transaction trace
               whatap.mtrace_enabled - enable multi transaction trace. default false
	           whatap.mtrace_rate  - multi transaction trace rate, default 10 percent. max 100 
	           whatap.mtrace_callee_txid_enabled - caller set id of callee, for statstics. default false
	           
	         Topology
	           whatap.tx_caller_meter_enabled - enable trancation stastics for topology
	           whatap.sql_dbc_meter_enabled - enable database stastics for topology
	           whatap.httpc_host_meter_enabled - enable http call stastics for topology
	           
	- PHP Libaray:
			   
    - Install & Configure :
                Set ZTS module on Apache MPM Event     
--------------------------------------------------------------------------------              
Changes for 0.4.7 - 20190315
	- Open 
    - Bug Patch : Fixed view Agent status      
    - Update : 
    - Option : 
               
	- PHP Libaray:
			   
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.4.3 - 20180829
	- Open 
    - Bug Patch : Fixed segmantaion fault (HTTP GET Prarameter)
                  Fixed Self Metering(change CPU Percent / CPU Core)
                  Fixed SQL Param encoding 
    - Update : Get HTTP Header, Set remote ip from HTTP Header ( ex) X-Forwarded-For) 
    - Option : whatap.profile_http_header_enabled (Default: false)
               whatap.trace_http_client_ip_header_key (Defulat: Empty) 
                    
	- PHP Libaray: 
    - Install & Configure : 
--------------------------------------------------------------------------------        
Changes for 0.4.4 - 20181112
	- Open 
    - Bug Patch : 
    - Update : Support FreeBSD (64bit, 10.x over), 
               Add Domain statistics 
               Add Referer statistics 
    - Option : 
               whatap.stat_domain_enabled - enable domain statistics , default true
               whatap.stat_referer_enabled - enable stat statistics, default false
	- PHP Libaray: 
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.4.2 - 20180823
	- Open 
    - Bug Patch : Fixed segmantion fault
    - Update : 
    - Option : 
	- PHP Libaray: 
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.4.0 - 20180717
	- Open 
    - Bug Patch : Fixed segfault (mshutdown)
    - Update : 
    - Option : 
	- PHP Libaray: 
    - Install & Configure : 
--------------------------------------------------------------------------------     
Changes for 0.4.1 - 20180823
	- Open 
    - Bug Patch : Fixed execute script (get docker id)
    - Update : View agent stat (cpu, memory, network), profile Http Parameter (text type)
    - Option : 
	- PHP Libaray: 
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.3.7 - 20180424
	- Open 
    - Bug Patch : 
    - Update : Support Goole App Engine.(Flex/custom Docker)  
    - Option : 
	- PHP Libaray: 
    - Install & Configure : update install.sh
                            install.sh -l <license> -s <whatap.server> -v 5.3 -i /etc/php.ini -p php-fpm [-z|--zts]
                            install.sh -l <license> -s <whatap.server> -e /usr/bin/php -p php-fpm [-z|--zts]       
--------------------------------------------------------------------------------                            
Changes for 0.3.8 - 20180619
	- Open 
    - Bug Patch : Fixed segfault(for 5.2), Fixed memory management(Agent)
    - Update : Support Postgresql 
    - Option : 
	- PHP Libaray: 
    - Install & Configure : 
--------------------------------------------------------------------------------                            
Changes for 0.3.9 - 20180709
	- Open 
    - Bug Patch : Fixed segfault( set max length for query text )
    - Update : 
    - Option : 
	- PHP Libaray: 
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.3.6 - 20180410
	- Open 
    - Bug Patch : Fixed Realtime user, Fixed Segfault(ZTS)
    - Update : Change message priority (Error Message)
    - Option : 
	- PHP Libaray: 
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.3.5 - 20180315
	- Open 
    - Bug Patch : Bug Fix
    - Update : View agent log
    - Option : 
	- PHP Libaray: 
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.3.4 - 20180213
	- Open 
    - Bug Patch : Fix Support oci8 (add alias function)
    - Update : 
    - Option : 
	- PHP Libaray: 
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.3.3 - 20180125
	- Open 
    - Bug Patch : Fix PHP 5.2 with Zend Optimizer 
    - Update : Support PHP 7.2
    - Option : 
	- PHP Libaray: 
    - Install & Configure : Fix command apachectl
--------------------------------------------------------------------------------
Changes for 0.3.2 - 20171206
	- Open 
    - Bug Patch : 
    - Update : Support mssql library
    - Option : 
	- PHP Libaray: 
    - Install & Configure : Fix command apachectl
--------------------------------------------------------------------------------
Changes for 0.3.1 - 20171123
	- Open 
    - Bug Fixed : 
    		Nomalize SQL parameter, Mysqli Connection Profile
                  
    - Update : 
    		Method Profile, DB Connection Profile
    		Support Oracle oci8 library 
    		PHP Class libaray (/usr/whatap/php/lib/Whatap) 
    		Get PHP infomation (basic, module)
    		
    - Option : 
	    	Method Profile
	    		whatap.profile_method_enabled=true - over 1000 miliseconds 
		
	- PHP Libaray: 
			Add PHP Class libaray (/usr/whatap/php/lib/Whatap)
		    Libaray Whatap.php, sample.php
				- Start USER STEP
				    static function whatap_begin_step($step_name, $stack_enabled)
			    - End USER STEP
					static function whatap_end_step()
    - Install & Configure :
--------------------------------------------------------------------------------
Changes for 0.3.0 - 20171017
	- Open 
    - Bug Patch : Fix Statics(Error), Log, Install (PHP_INI_SCAN_DIR is None)  
                  
    - Add :  support PHP 5.2(zts), 
             realtime user count - Set/Get Cookie(Key "WHATAP"), Get HTTP Header Key               
    
    - Option :  trace_user_header_ticiket (Get Http Header Key, Use for realtime user count)
    
    - Configure : PHP Compile without options(--with-config-file-scan-dir=)
                  Scan this dir for additional .ini files => (none)
                  configure (php.ini, /usr/whatap/php/whatap.ini)
--------------------------------------------------------------------------------
Changes for 0.2.7 - 20170926
	- Open
    - Bug Patch : Fix Memory Leak(PHP 7.0 ~) 
                  
    - Add : File Oepn Profile
--------------------------------------------------------------------------------
Changes for 0.2.6 - 20170919
	- Open Beta
    - Bug Patch : Fix Active transaction count, Fix CLI request, Fix cURL Multi 
                  
    - Add : SQL Parameter Encrypt, cURL set_opt, set_opt_array Profile, Error Profile
            support PHP 5.3(zts)
--------------------------------------------------------------------------------
Changes for 0.2.5
	- Open Beta
    - Bug Patch : Fix time sync, Fix Larabel Framework, Fix request info
    - Option : whatap.profile_http_host_enabled - profile Host Info
--------------------------------------------------------------------------------
Changes for 0.2.4
	- Close Beta
    - Bug Patch : Fix memory leak
    - Add : ZTS modules
--------------------------------------------------------------------------------
Changes for 0.2.3
	- Close Beta
    - Bug Patch : Handling Exception
    - Option :
--------------------------------------------------------------------------------
Changes for 0.2.2
	- Close Beta
    - Bug Patch : Hash Reset
    - Option : error_enabled, exception_enabled
--------------------------------------------------------------------------------
Changes for 0.2.1
	- Close Beta
--------------------------------------------------------------------------------
for 0.2.0
	- Close Beta
