PHP  
 PHP: Test and Code Coverage Analysis
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

LCOV - code coverage report
Current view: top level - ext/mysqlnd - mysqlnd_statistics.c (source / functions) Hit Total Coverage
Test: PHP Code Coverage Lines: 23 39 59.0 %
Date: 2016-07-26 Functions: 4 6 66.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :   +----------------------------------------------------------------------+
       3             :   | PHP Version 7                                                        |
       4             :   +----------------------------------------------------------------------+
       5             :   | Copyright (c) 2006-2016 The PHP Group                                |
       6             :   +----------------------------------------------------------------------+
       7             :   | This source file is subject to version 3.01 of the PHP license,      |
       8             :   | that is bundled with this package in the file LICENSE, and is        |
       9             :   | available through the world-wide-web at the following url:           |
      10             :   | http://www.php.net/license/3_01.txt                                  |
      11             :   | If you did not receive a copy of the PHP license and are unable to   |
      12             :   | obtain it through the world-wide-web, please send a note to          |
      13             :   | license@php.net so we can mail you a copy immediately.               |
      14             :   +----------------------------------------------------------------------+
      15             :   | Authors: Andrey Hristov <andrey@php.net>                             |
      16             :   |          Ulf Wendel <uw@php.net>                                     |
      17             :   |          Georg Richter <georg@php.net>                               |
      18             :   +----------------------------------------------------------------------+
      19             : */
      20             : 
      21             : #include "php.h"
      22             : #include "mysqlnd.h"
      23             : #include "mysqlnd_priv.h"
      24             : #include "mysqlnd_statistics.h"
      25             : #include "mysqlnd_debug.h"
      26             : 
      27             : 
      28             : /* {{{ mysqlnd_stats_values_names */
      29             : const MYSQLND_STRING mysqlnd_stats_values_names[STAT_LAST] =
      30             : {
      31             :         { MYSQLND_STR_W_LEN("bytes_sent") },
      32             :         { MYSQLND_STR_W_LEN("bytes_received") },
      33             :         { MYSQLND_STR_W_LEN("packets_sent") },
      34             :         { MYSQLND_STR_W_LEN("packets_received") },
      35             :         { MYSQLND_STR_W_LEN("protocol_overhead_in") },
      36             :         { MYSQLND_STR_W_LEN("protocol_overhead_out") },
      37             :         { MYSQLND_STR_W_LEN("bytes_received_ok_packet") },
      38             :         { MYSQLND_STR_W_LEN("bytes_received_eof_packet") },
      39             :         { MYSQLND_STR_W_LEN("bytes_received_rset_header_packet") },
      40             :         { MYSQLND_STR_W_LEN("bytes_received_rset_field_meta_packet") },
      41             :         { MYSQLND_STR_W_LEN("bytes_received_rset_row_packet") },
      42             :         { MYSQLND_STR_W_LEN("bytes_received_prepare_response_packet") },
      43             :         { MYSQLND_STR_W_LEN("bytes_received_change_user_packet") },
      44             :         { MYSQLND_STR_W_LEN("packets_sent_command") },
      45             :         { MYSQLND_STR_W_LEN("packets_received_ok") },
      46             :         { MYSQLND_STR_W_LEN("packets_received_eof") },
      47             :         { MYSQLND_STR_W_LEN("packets_received_rset_header") },
      48             :         { MYSQLND_STR_W_LEN("packets_received_rset_field_meta") },
      49             :         { MYSQLND_STR_W_LEN("packets_received_rset_row") },
      50             :         { MYSQLND_STR_W_LEN("packets_received_prepare_response") },
      51             :         { MYSQLND_STR_W_LEN("packets_received_change_user") },
      52             :         { MYSQLND_STR_W_LEN("result_set_queries") },
      53             :         { MYSQLND_STR_W_LEN("non_result_set_queries") },
      54             :         { MYSQLND_STR_W_LEN("no_index_used") },
      55             :         { MYSQLND_STR_W_LEN("bad_index_used") },
      56             :         { MYSQLND_STR_W_LEN("slow_queries") },
      57             :         { MYSQLND_STR_W_LEN("buffered_sets") },
      58             :         { MYSQLND_STR_W_LEN("unbuffered_sets") },
      59             :         { MYSQLND_STR_W_LEN("ps_buffered_sets") },
      60             :         { MYSQLND_STR_W_LEN("ps_unbuffered_sets") },
      61             :         { MYSQLND_STR_W_LEN("flushed_normal_sets") },
      62             :         { MYSQLND_STR_W_LEN("flushed_ps_sets") },
      63             :         { MYSQLND_STR_W_LEN("ps_prepared_never_executed") },
      64             :         { MYSQLND_STR_W_LEN("ps_prepared_once_executed") },
      65             :         { MYSQLND_STR_W_LEN("rows_fetched_from_server_normal") },
      66             :         { MYSQLND_STR_W_LEN("rows_fetched_from_server_ps") },
      67             :         { MYSQLND_STR_W_LEN("rows_buffered_from_client_normal") },
      68             :         { MYSQLND_STR_W_LEN("rows_buffered_from_client_ps") },
      69             :         { MYSQLND_STR_W_LEN("rows_fetched_from_client_normal_buffered") },
      70             :         { MYSQLND_STR_W_LEN("rows_fetched_from_client_normal_unbuffered") },
      71             :         { MYSQLND_STR_W_LEN("rows_fetched_from_client_ps_buffered") },
      72             :         { MYSQLND_STR_W_LEN("rows_fetched_from_client_ps_unbuffered") },
      73             :         { MYSQLND_STR_W_LEN("rows_fetched_from_client_ps_cursor") },
      74             :         { MYSQLND_STR_W_LEN("rows_affected_normal") },
      75             :         { MYSQLND_STR_W_LEN("rows_affected_ps") },
      76             :         { MYSQLND_STR_W_LEN("rows_skipped_normal") },
      77             :         { MYSQLND_STR_W_LEN("rows_skipped_ps") },
      78             :         { MYSQLND_STR_W_LEN("copy_on_write_saved") },
      79             :         { MYSQLND_STR_W_LEN("copy_on_write_performed") },
      80             :         { MYSQLND_STR_W_LEN("command_buffer_too_small") },
      81             :         { MYSQLND_STR_W_LEN("connect_success") },
      82             :         { MYSQLND_STR_W_LEN("connect_failure") },
      83             :         { MYSQLND_STR_W_LEN("connection_reused") },
      84             :         { MYSQLND_STR_W_LEN("reconnect") },
      85             :         { MYSQLND_STR_W_LEN("pconnect_success") },
      86             :         { MYSQLND_STR_W_LEN("active_connections") },
      87             :         { MYSQLND_STR_W_LEN("active_persistent_connections") },
      88             :         { MYSQLND_STR_W_LEN("explicit_close") },
      89             :         { MYSQLND_STR_W_LEN("implicit_close") },
      90             :         { MYSQLND_STR_W_LEN("disconnect_close") },
      91             :         { MYSQLND_STR_W_LEN("in_middle_of_command_close") },
      92             :         { MYSQLND_STR_W_LEN("explicit_free_result") },
      93             :         { MYSQLND_STR_W_LEN("implicit_free_result") },
      94             :         { MYSQLND_STR_W_LEN("explicit_stmt_close") },
      95             :         { MYSQLND_STR_W_LEN("implicit_stmt_close") },
      96             :         { MYSQLND_STR_W_LEN("mem_emalloc_count") },
      97             :         { MYSQLND_STR_W_LEN("mem_emalloc_amount") },
      98             :         { MYSQLND_STR_W_LEN("mem_ecalloc_count") },
      99             :         { MYSQLND_STR_W_LEN("mem_ecalloc_amount") },
     100             :         { MYSQLND_STR_W_LEN("mem_erealloc_count") },
     101             :         { MYSQLND_STR_W_LEN("mem_erealloc_amount") },
     102             :         { MYSQLND_STR_W_LEN("mem_efree_count") },
     103             :         { MYSQLND_STR_W_LEN("mem_efree_amount") },
     104             :         { MYSQLND_STR_W_LEN("mem_malloc_count") },
     105             :         { MYSQLND_STR_W_LEN("mem_malloc_amount") },
     106             :         { MYSQLND_STR_W_LEN("mem_calloc_count") },
     107             :         { MYSQLND_STR_W_LEN("mem_calloc_amount") },
     108             :         { MYSQLND_STR_W_LEN("mem_realloc_count") },
     109             :         { MYSQLND_STR_W_LEN("mem_realloc_amount") },
     110             :         { MYSQLND_STR_W_LEN("mem_free_count") },
     111             :         { MYSQLND_STR_W_LEN("mem_free_amount") },
     112             :         { MYSQLND_STR_W_LEN("mem_estrndup_count") },
     113             :         { MYSQLND_STR_W_LEN("mem_strndup_count") },
     114             :         { MYSQLND_STR_W_LEN("mem_estrdup_count") },
     115             :         { MYSQLND_STR_W_LEN("mem_strdup_count") },
     116             :         { MYSQLND_STR_W_LEN("mem_edupl_count") },
     117             :         { MYSQLND_STR_W_LEN("mem_dupl_count") },
     118             :         { MYSQLND_STR_W_LEN("proto_text_fetched_null") },
     119             :         { MYSQLND_STR_W_LEN("proto_text_fetched_bit") },
     120             :         { MYSQLND_STR_W_LEN("proto_text_fetched_tinyint") },
     121             :         { MYSQLND_STR_W_LEN("proto_text_fetched_short") },
     122             :         { MYSQLND_STR_W_LEN("proto_text_fetched_int24") },
     123             :         { MYSQLND_STR_W_LEN("proto_text_fetched_int") },
     124             :         { MYSQLND_STR_W_LEN("proto_text_fetched_bigint") },
     125             :         { MYSQLND_STR_W_LEN("proto_text_fetched_decimal") },
     126             :         { MYSQLND_STR_W_LEN("proto_text_fetched_float") },
     127             :         { MYSQLND_STR_W_LEN("proto_text_fetched_double") },
     128             :         { MYSQLND_STR_W_LEN("proto_text_fetched_date") },
     129             :         { MYSQLND_STR_W_LEN("proto_text_fetched_year") },
     130             :         { MYSQLND_STR_W_LEN("proto_text_fetched_time") },
     131             :         { MYSQLND_STR_W_LEN("proto_text_fetched_datetime") },
     132             :         { MYSQLND_STR_W_LEN("proto_text_fetched_timestamp") },
     133             :         { MYSQLND_STR_W_LEN("proto_text_fetched_string") },
     134             :         { MYSQLND_STR_W_LEN("proto_text_fetched_blob") },
     135             :         { MYSQLND_STR_W_LEN("proto_text_fetched_enum") },
     136             :         { MYSQLND_STR_W_LEN("proto_text_fetched_set") },
     137             :         { MYSQLND_STR_W_LEN("proto_text_fetched_geometry") },
     138             :         { MYSQLND_STR_W_LEN("proto_text_fetched_other") },
     139             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_null") },
     140             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_bit") },
     141             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_tinyint") },
     142             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_short") },
     143             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_int24") },
     144             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_int") },
     145             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_bigint") },
     146             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_decimal") },
     147             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_float") },
     148             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_double") },
     149             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_date") },
     150             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_year") },
     151             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_time") },
     152             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_datetime") },
     153             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_timestamp") },
     154             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_string") },
     155             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_json") },
     156             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_blob") },
     157             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_enum") },
     158             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_set") },
     159             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_geometry") },
     160             :         { MYSQLND_STR_W_LEN("proto_binary_fetched_other") },
     161             :         { MYSQLND_STR_W_LEN("init_command_executed_count") },
     162             :         { MYSQLND_STR_W_LEN("init_command_failed_count") },
     163             :         { MYSQLND_STR_W_LEN("com_quit") },
     164             :         { MYSQLND_STR_W_LEN("com_init_db") },
     165             :         { MYSQLND_STR_W_LEN("com_query") },
     166             :         { MYSQLND_STR_W_LEN("com_field_list") },
     167             :         { MYSQLND_STR_W_LEN("com_create_db") },
     168             :         { MYSQLND_STR_W_LEN("com_drop_db") },
     169             :         { MYSQLND_STR_W_LEN("com_refresh") },
     170             :         { MYSQLND_STR_W_LEN("com_shutdown") },
     171             :         { MYSQLND_STR_W_LEN("com_statistics") },
     172             :         { MYSQLND_STR_W_LEN("com_process_info") },
     173             :         { MYSQLND_STR_W_LEN("com_connect") },
     174             :         { MYSQLND_STR_W_LEN("com_process_kill") },
     175             :         { MYSQLND_STR_W_LEN("com_debug") },
     176             :         { MYSQLND_STR_W_LEN("com_ping") },
     177             :         { MYSQLND_STR_W_LEN("com_time") },
     178             :         { MYSQLND_STR_W_LEN("com_delayed_insert") },
     179             :         { MYSQLND_STR_W_LEN("com_change_user") },
     180             :         { MYSQLND_STR_W_LEN("com_binlog_dump") },
     181             :         { MYSQLND_STR_W_LEN("com_table_dump") },
     182             :         { MYSQLND_STR_W_LEN("com_connect_out") },
     183             :         { MYSQLND_STR_W_LEN("com_register_slave") },
     184             :         { MYSQLND_STR_W_LEN("com_stmt_prepare") },
     185             :         { MYSQLND_STR_W_LEN("com_stmt_execute") },
     186             :         { MYSQLND_STR_W_LEN("com_stmt_send_long_data") },
     187             :         { MYSQLND_STR_W_LEN("com_stmt_close") },
     188             :         { MYSQLND_STR_W_LEN("com_stmt_reset") },
     189             :         { MYSQLND_STR_W_LEN("com_stmt_set_option") },
     190             :         { MYSQLND_STR_W_LEN("com_stmt_fetch") },
     191             :         { MYSQLND_STR_W_LEN("com_deamon") },
     192             :         { MYSQLND_STR_W_LEN("bytes_received_real_data_normal") },
     193             :         { MYSQLND_STR_W_LEN("bytes_received_real_data_ps") }
     194             : };
     195             : /* }}} */
     196             : 
     197             : 
     198             : /* {{{ mysqlnd_fill_stats_hash */
     199             : PHPAPI void
     200         204 : mysqlnd_fill_stats_hash(const MYSQLND_STATS * const stats, const MYSQLND_STRING * names, zval *return_value ZEND_FILE_LINE_DC)
     201             : {
     202             :         unsigned int i;
     203             : 
     204         204 :         array_init_size(return_value, stats->count);
     205       33456 :         for (i = 0; i < stats->count; i++) {
     206             :                 char tmp[25];
     207             : 
     208       33252 :                 sprintf((char *)&tmp, MYSQLND_LLU_SPEC, stats->values[i]);
     209       33252 :                 add_assoc_string_ex(return_value, names[i].s, names[i].l, tmp);
     210             :         }
     211         204 : }
     212             : /* }}} */
     213             : 
     214             : 
     215             : /* {{{ mysqlnd_stats_init */
     216             : PHPAPI void
     217       25191 : mysqlnd_stats_init(MYSQLND_STATS ** stats, const size_t statistic_count, const zend_bool persistent)
     218             : {
     219       25191 :         *stats = pecalloc(1, sizeof(MYSQLND_STATS), persistent);
     220       25191 :         if (*stats == NULL) {
     221           0 :                 return;
     222             :         }
     223       25191 :         (*stats)->values = pecalloc(statistic_count, sizeof(uint64_t), persistent);
     224       25191 :         (*stats)->triggers = pecalloc(statistic_count, sizeof(mysqlnd_stat_trigger), persistent);
     225       25191 :         (*stats)->in_trigger = FALSE;
     226       25191 :         (*stats)->count = statistic_count;
     227             : #ifdef ZTS
     228             :         (*stats)->LOCK_access = tsrm_mutex_alloc();
     229             : #endif
     230             : }
     231             : /* }}} */
     232             : 
     233             : 
     234             : /* {{{ mysqlnd_stats_end */
     235             : PHPAPI void
     236       25219 : mysqlnd_stats_end(MYSQLND_STATS * stats, const zend_bool persistent)
     237             : {
     238             : #ifdef ZTS
     239             :         tsrm_mutex_free(stats->LOCK_access);
     240             : #endif
     241       25219 :         pefree(stats->triggers, persistent);
     242       25219 :         pefree(stats->values, persistent);
     243             :         /* mnd_free will reference LOCK_access and crash...*/
     244       25219 :         pefree(stats, persistent);
     245       25219 : }
     246             : /* }}} */
     247             : 
     248             : 
     249             : /* {{{ mysqlnd_stats_set_trigger */
     250             : PHPAPI mysqlnd_stat_trigger
     251           0 : mysqlnd_stats_set_trigger(MYSQLND_STATS * const stats, enum_mysqlnd_collected_stats statistic, mysqlnd_stat_trigger trigger)
     252             : {
     253           0 :         mysqlnd_stat_trigger ret = NULL;
     254           0 :         DBG_ENTER("mysqlnd_stats_set_trigger");
     255           0 :         if (stats) {
     256             :                 MYSQLND_STATS_LOCK(stats);
     257           0 :                 ret = stats->triggers[statistic];
     258           0 :                 stats->triggers[statistic] = trigger;
     259             :                 MYSQLND_STATS_UNLOCK(stats);
     260             :         }
     261           0 :         DBG_RETURN(ret);
     262             : }
     263             : /* }}} */
     264             : 
     265             : 
     266             : /* {{{ mysqlnd_stats_set_handler */
     267             : PHPAPI mysqlnd_stat_trigger
     268           0 : mysqlnd_stats_reset_triggers(MYSQLND_STATS * const stats)
     269             : {
     270           0 :         mysqlnd_stat_trigger ret = NULL;
     271           0 :         DBG_ENTER("mysqlnd_stats_reset_trigger");
     272           0 :         if (stats) {
     273             :                 MYSQLND_STATS_LOCK(stats);
     274           0 :                 memset(stats->triggers, 0, stats->count * sizeof(mysqlnd_stat_trigger));
     275             :                 MYSQLND_STATS_UNLOCK(stats);
     276             :         }
     277           0 :         DBG_RETURN(ret);
     278             : }
     279             : /* }}} */
     280             : 
     281             : 
     282             : /************ MYSQLND specific code **********/
     283             : 
     284             : /* {{{ _mysqlnd_get_client_stats */
     285             : PHPAPI void
     286          49 : _mysqlnd_get_client_stats(MYSQLND_STATS * stats_ptr, zval *return_value ZEND_FILE_LINE_DC)
     287             : {
     288             :         MYSQLND_STATS stats;
     289          49 :         DBG_ENTER("_mysqlnd_get_client_stats");
     290          49 :         if (!stats_ptr) {
     291           0 :                 memset(&stats, 0, sizeof(stats));
     292           0 :                 stats_ptr = &stats;
     293             :         }
     294          49 :         mysqlnd_fill_stats_hash(stats_ptr, mysqlnd_stats_values_names, return_value ZEND_FILE_LINE_CC);
     295          49 :         DBG_VOID_RETURN;
     296             : }
     297             : /* }}} */
     298             : 
     299             : 
     300             : 
     301             : /*
     302             :  * Local variables:
     303             :  * tab-width: 4
     304             :  * c-basic-offset: 4
     305             :  * End:
     306             :  * vim600: noet sw=4 ts=4 fdm=marker
     307             :  * vim<600: noet sw=4 ts=4
     308             :  */

Generated by: LCOV version 1.10

Generated at Tue, 26 Jul 2016 17:07:38 +0000 (2 days ago)

Copyright © 2005-2016 The PHP Group
All rights reserved.