tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

hs_metrics_entry.c (5113B)


      1 /* Copyright (c) 2020-2021, The Tor Project, Inc. */
      2 /* See LICENSE for licensing information */
      3 
      4 /**
      5 * @file hs_metrics_entry.c
      6 * @brief Defines the metrics entry that are collected by an onion service.
      7 **/
      8 
      9 #define HS_METRICS_ENTRY_PRIVATE
     10 
     11 #include <stddef.h>
     12 
     13 #include "orconfig.h"
     14 
     15 #include "lib/cc/compat_compiler.h"
     16 #include "lib/log/log.h"
     17 #include "lib/log/util_bug.h"
     18 
     19 #include "feature/hs/hs_metrics_entry.h"
     20 
     21 /* Histogram time buckets (in milliseconds). */
     22 static const int64_t hs_metrics_circ_build_time_buckets[] =
     23 {
     24  1000,  /* 1s */
     25  5000,  /* 5s */
     26  10000, /* 10s */
     27  30000, /* 30s */
     28  60000  /* 60s */
     29 };
     30 
     31 // TODO: Define a constant for ARRAY_LENGTH(hs_metrics_circ_build_time_buckets)
     32 // and use where it applicable.
     33 //
     34 // This is commented out because it doesn't compile with gcc versions < 8.1
     35 // or with MSVC ("initializer element is not constant").
     36 //
     37 // See ticket#40773 and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69960#c18
     38 //
     39 /*static const size_t hs_metrics_circ_build_time_buckets_size =*/
     40 /*ARRAY_LENGTH(hs_metrics_circ_build_time_buckets);*/
     41 
     42 /** The base metrics that is a static array of metrics that are added to every
     43 * single new stores.
     44 *
     45 * The key member MUST be also the index of the entry in the array. */
     46 const hs_metrics_entry_t base_metrics[] =
     47 {
     48  {
     49    .key = HS_METRICS_NUM_INTRODUCTIONS,
     50    .type = METRICS_TYPE_COUNTER,
     51    .name = METRICS_NAME(hs_intro_num_total),
     52    .help = "Total number of introduction received",
     53    .port_as_label = false,
     54  },
     55  {
     56    .key = HS_METRICS_APP_WRITE_BYTES,
     57    .type = METRICS_TYPE_COUNTER,
     58    .name = METRICS_NAME(hs_app_write_bytes_total),
     59    .help = "Total number of bytes written to the application",
     60    .port_as_label = true,
     61  },
     62  {
     63    .key = HS_METRICS_APP_READ_BYTES,
     64    .type = METRICS_TYPE_COUNTER,
     65    .name = METRICS_NAME(hs_app_read_bytes_total),
     66    .help = "Total number of bytes read from the application",
     67    .port_as_label = true,
     68  },
     69  {
     70    .key = HS_METRICS_NUM_ESTABLISHED_RDV,
     71    .type = METRICS_TYPE_GAUGE,
     72    .name = METRICS_NAME(hs_rdv_established_count),
     73    .help = "Total number of established rendezvous circuits",
     74  },
     75  {
     76    .key = HS_METRICS_NUM_RDV,
     77    .type = METRICS_TYPE_COUNTER,
     78    .name = METRICS_NAME(hs_rdv_num_total),
     79    .help = "Total number of rendezvous circuits created",
     80  },
     81  {
     82    .key = HS_METRICS_NUM_FAILED_RDV,
     83    .type = METRICS_TYPE_COUNTER,
     84    .name = METRICS_NAME(hs_rdv_error_count),
     85    .help = "Total number of rendezvous circuit errors",
     86  },
     87  {
     88    .key = HS_METRICS_NUM_ESTABLISHED_INTRO,
     89    .type = METRICS_TYPE_GAUGE,
     90    .name = METRICS_NAME(hs_intro_established_count),
     91    .help = "Total number of established introduction circuit",
     92  },
     93  {
     94    .key = HS_METRICS_NUM_REJECTED_INTRO_REQ,
     95    .type = METRICS_TYPE_COUNTER,
     96    .name = METRICS_NAME(hs_intro_rejected_intro_req_count),
     97    .help = "Total number of rejected introduction circuits",
     98  },
     99  {
    100    .key = HS_METRICS_INTRO_CIRC_BUILD_TIME,
    101    .type = METRICS_TYPE_HISTOGRAM,
    102    .name = METRICS_NAME(hs_intro_circ_build_time),
    103    .buckets = hs_metrics_circ_build_time_buckets,
    104    .bucket_count = ARRAY_LENGTH(hs_metrics_circ_build_time_buckets),
    105    .help = "The introduction circuit build time in milliseconds",
    106  },
    107  {
    108    .key = HS_METRICS_REND_CIRC_BUILD_TIME,
    109    .type = METRICS_TYPE_HISTOGRAM,
    110    .name = METRICS_NAME(hs_rend_circ_build_time),
    111    .buckets = hs_metrics_circ_build_time_buckets,
    112    .bucket_count = ARRAY_LENGTH(hs_metrics_circ_build_time_buckets),
    113    .help = "The rendezvous circuit build time in milliseconds",
    114  },
    115  {
    116    .key = HS_METRICS_POW_NUM_PQUEUE_RDV,
    117    .type = METRICS_TYPE_GAUGE,
    118    .name = METRICS_NAME(hs_rdv_pow_pqueue_count),
    119    .help = "Number of requests waiting in the proof of work priority queue",
    120  },
    121  {
    122    .key = HS_METRICS_POW_SUGGESTED_EFFORT,
    123    .type = METRICS_TYPE_GAUGE,
    124    .name = METRICS_NAME(hs_pow_suggested_effort),
    125    .help = "Suggested effort for requests with a proof of work client puzzle",
    126  },
    127 };
    128 
    129 /** Size of base_metrics array that is number of entries. */
    130 const size_t base_metrics_size = ARRAY_LENGTH(base_metrics);
    131 
    132 /** Possible values for the reason label of the
    133 * hs_intro_rejected_intro_req_count metric. */
    134 const char *hs_metrics_intro_req_error_reasons[] =
    135 {
    136  HS_METRICS_ERR_INTRO_REQ_BAD_AUTH_KEY,
    137  HS_METRICS_ERR_INTRO_REQ_INTRODUCE2,
    138  HS_METRICS_ERR_INTRO_REQ_SUBCREDENTIAL,
    139  HS_METRICS_ERR_INTRO_REQ_INTRODUCE2_REPLAY,
    140 };
    141 
    142 /** The number of entries in the hs_metrics_intro_req_error_reasons array. */
    143 const size_t hs_metrics_intro_req_error_reasons_size =
    144    ARRAY_LENGTH(hs_metrics_intro_req_error_reasons);
    145 
    146 /** Possible values for the reason label of the hs_rdv_error_count metric. */
    147 const char *hs_metrics_rend_error_reasons[] =
    148 {
    149  HS_METRICS_ERR_RDV_RP_CONN_FAILURE,
    150  HS_METRICS_ERR_RDV_PATH,
    151  HS_METRICS_ERR_RDV_RENDEZVOUS1,
    152  HS_METRICS_ERR_RDV_E2E,
    153  HS_METRICS_ERR_RDV_RETRY,
    154 };
    155 
    156 /** The number of entries in the hs_metrics_rend_error_reasons array. */
    157 const size_t hs_metrics_rend_error_reasons_size =
    158    ARRAY_LENGTH(hs_metrics_rend_error_reasons);