LCOV - code coverage report
Current view: top level - disco/gui - fd_gui.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 41 0.0 %
Date: 2025-09-18 04:41:32 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef HEADER_fd_src_disco_gui_fd_gui_h
       2             : #define HEADER_fd_src_disco_gui_fd_gui_h
       3             : 
       4             : #include "../fd_disco_base.h"
       5             : 
       6             : #include "../pack/fd_microblock.h"
       7             : #include "../../waltz/http/fd_http_server.h"
       8             : #include "../../flamenco/leaders/fd_leaders.h"
       9             : #include "../../util/hist/fd_histf.h"
      10             : 
      11             : #include "../topo/fd_topo.h"
      12             : 
      13           0 : #define FD_GUI_SLOTS_CNT (864000UL)
      14           0 : #define FD_GUI_TPS_HISTORY_WINDOW_DURATION_SECONDS (10L) /* 10 second moving average */
      15           0 : #define FD_GUI_TPS_HISTORY_SAMPLE_CNT              (150UL)
      16           0 : #define FD_GUI_TILE_TIMER_SNAP_CNT                 (512UL)
      17           0 : #define FD_GUI_TILE_TIMER_LEADER_CNT               (4096UL)
      18           0 : #define FD_GUI_TILE_TIMER_LEADER_DOWNSAMPLE_CNT    (50UL)
      19             : #define FD_GUI_TILE_TIMER_TILE_CNT                 (128UL)
      20             : #define FD_GUI_MAX_PEER_CNT                        (40200UL)
      21             : 
      22           0 : #define FD_GUI_SLOT_LEVEL_INCOMPLETE               (0)
      23           0 : #define FD_GUI_SLOT_LEVEL_COMPLETED                (1)
      24           0 : #define FD_GUI_SLOT_LEVEL_OPTIMISTICALLY_CONFIRMED (2)
      25           0 : #define FD_GUI_SLOT_LEVEL_ROOTED                   (3)
      26           0 : #define FD_GUI_SLOT_LEVEL_FINALIZED                (4)
      27             : 
      28           0 : #define FD_GUI_VOTE_STATE_NON_VOTING (0)
      29           0 : #define FD_GUI_VOTE_STATE_VOTING     (1)
      30           0 : #define FD_GUI_VOTE_STATE_DELINQUENT (2)
      31             : 
      32           0 : #define FD_GUI_START_PROGRESS_TYPE_INITIALIZING                       ( 0)
      33           0 : #define FD_GUI_START_PROGRESS_TYPE_SEARCHING_FOR_FULL_SNAPSHOT        ( 1)
      34           0 : #define FD_GUI_START_PROGRESS_TYPE_DOWNLOADING_FULL_SNAPSHOT          ( 2)
      35           0 : #define FD_GUI_START_PROGRESS_TYPE_SEARCHING_FOR_INCREMENTAL_SNAPSHOT ( 3)
      36           0 : #define FD_GUI_START_PROGRESS_TYPE_DOWNLOADING_INCREMENTAL_SNAPSHOT   ( 4)
      37           0 : #define FD_GUI_START_PROGRESS_TYPE_CLEANING_BLOCK_STORE               ( 5)
      38           0 : #define FD_GUI_START_PROGRESS_TYPE_CLEANING_ACCOUNTS                  ( 6)
      39           0 : #define FD_GUI_START_PROGRESS_TYPE_LOADING_LEDGER                     ( 7)
      40           0 : #define FD_GUI_START_PROGRESS_TYPE_PROCESSING_LEDGER                  ( 8)
      41           0 : #define FD_GUI_START_PROGRESS_TYPE_STARTING_SERVICES                  ( 9)
      42           0 : #define FD_GUI_START_PROGRESS_TYPE_HALTED                             (10)
      43           0 : #define FD_GUI_START_PROGRESS_TYPE_WAITING_FOR_SUPERMAJORITY          (11)
      44           0 : #define FD_GUI_START_PROGRESS_TYPE_RUNNING                            (12)
      45             : 
      46             : /* Ideally, we would store an entire epoch's worth of transactions.  If
      47             :    we assume any given validator will have at most 5% stake, and average
      48             :    transactions per slot is around 10_000, then an epoch will have about
      49             :    432_000*10_000*0.05 transactions (~2^28).
      50             : 
      51             :    Unfortunately, the transaction struct is 100+ bytes.  If we sized the
      52             :    array to 2^28 entries then the memory required would be ~26GB.  In
      53             :    order to keep memory usage to a more reasonable level, we'll
      54             :    arbitrarily use a fourth of that size. */
      55           0 : #define FD_GUI_TXN_HISTORY_SZ (1UL<<26UL)
      56             : 
      57           0 : #define FD_GUI_TXN_FLAGS_STARTED         ( 1U)
      58           0 : #define FD_GUI_TXN_FLAGS_ENDED           ( 2U)
      59           0 : #define FD_GUI_TXN_FLAGS_IS_SIMPLE_VOTE  ( 4U)
      60           0 : #define FD_GUI_TXN_FLAGS_FROM_BUNDLE     ( 8U)
      61           0 : #define FD_GUI_TXN_FLAGS_LANDED_IN_BLOCK (16U)
      62             : 
      63             : struct fd_gui_gossip_peer {
      64             :   fd_pubkey_t pubkey[ 1 ];
      65             :   ulong       wallclock;
      66             :   ushort      shred_version;
      67             : 
      68             :   int has_version;
      69             :   struct {
      70             :     ushort major;
      71             :     ushort minor;
      72             :     ushort patch;
      73             : 
      74             :     int    has_commit;
      75             :     uint   commit;
      76             : 
      77             :     uint   feature_set;
      78             :   } version;
      79             : 
      80             :   struct {
      81             :     uint   ipv4;
      82             :     ushort port;
      83             :   } sockets[ 12 ];
      84             : };
      85             : 
      86             : struct fd_gui_vote_account {
      87             :   fd_pubkey_t pubkey[ 1 ];
      88             :   fd_pubkey_t vote_account[ 1 ];
      89             : 
      90             :   ulong       activated_stake;
      91             :   ulong       last_vote;
      92             :   ulong       root_slot;
      93             :   ulong       epoch_credits;
      94             :   uchar       commission;
      95             :   int         delinquent;
      96             : };
      97             : 
      98             : struct fd_gui_validator_info {
      99             :   fd_pubkey_t pubkey[ 1 ];
     100             : 
     101             :   char name[ 64 ];
     102             :   char website[ 128 ];
     103             :   char details[ 256 ];
     104             :   char icon_uri[ 128 ];
     105             : };
     106             : 
     107             : struct fd_gui_txn_waterfall {
     108             :   struct {
     109             :     ulong quic;
     110             :     ulong udp;
     111             :     ulong gossip;
     112             :     ulong block_engine;
     113             :     ulong pack_cranked;
     114             :   } in;
     115             : 
     116             :   struct {
     117             :     ulong net_overrun;
     118             :     ulong quic_overrun;
     119             :     ulong quic_frag_drop;
     120             :     ulong quic_abandoned;
     121             :     ulong tpu_quic_invalid;
     122             :     ulong tpu_udp_invalid;
     123             :     ulong verify_overrun;
     124             :     ulong verify_parse;
     125             :     ulong verify_failed;
     126             :     ulong verify_duplicate;
     127             :     ulong dedup_duplicate;
     128             :     ulong resolv_lut_failed;
     129             :     ulong resolv_expired;
     130             :     ulong resolv_ancient;
     131             :     ulong resolv_no_ledger;
     132             :     ulong resolv_retained;
     133             :     ulong pack_invalid;
     134             :     ulong pack_invalid_bundle;
     135             :     ulong pack_expired;
     136             :     ulong pack_retained;
     137             :     ulong pack_wait_full;
     138             :     ulong pack_leader_slow;
     139             :     ulong bank_invalid;
     140             :     ulong block_success;
     141             :     ulong block_fail;
     142             :   } out;
     143             : };
     144             : 
     145             : typedef struct fd_gui_txn_waterfall fd_gui_txn_waterfall_t;
     146             : 
     147             : struct fd_gui_tile_timers {
     148             :   ulong caughtup_housekeeping_ticks;
     149             :   ulong processing_housekeeping_ticks;
     150             :   ulong backpressure_housekeeping_ticks;
     151             : 
     152             :   ulong caughtup_prefrag_ticks;
     153             :   ulong processing_prefrag_ticks;
     154             :   ulong backpressure_prefrag_ticks;
     155             : 
     156             :   ulong caughtup_postfrag_ticks;
     157             :   ulong processing_postfrag_ticks;
     158             : };
     159             : 
     160             : typedef struct fd_gui_tile_timers fd_gui_tile_timers_t;
     161             : 
     162             : struct fd_gui_tile_stats {
     163             :   long  sample_time_nanos;
     164             : 
     165             :   ulong net_in_rx_bytes;           /* Number of bytes received by the net or sock tile*/
     166             :   ulong quic_conn_cnt;             /* Number of active QUIC connections */
     167             :   fd_histf_t bundle_rx_delay_hist; /* Histogram of bundle rx delay */
     168             :   ulong bundle_rtt_smoothed_nanos; /* RTT (nanoseconds) moving average */
     169             :   ulong verify_drop_cnt;           /* Number of transactions dropped by verify tiles */
     170             :   ulong verify_total_cnt;          /* Number of transactions received by verify tiles */
     171             :   ulong dedup_drop_cnt;            /* Number of transactions dropped by dedup tile */
     172             :   ulong dedup_total_cnt;           /* Number of transactions received by dedup tile */
     173             :   ulong pack_buffer_cnt;           /* Number of buffered transactions in the pack tile */
     174             :   ulong pack_buffer_capacity;      /* Total size of the pack transaction buffer */
     175             :   ulong bank_txn_exec_cnt;         /* Number of transactions processed by the bank tile */
     176             :   ulong net_out_tx_bytes;          /* Number of bytes sent by the net or sock tile */
     177             : };
     178             : 
     179             : typedef struct fd_gui_tile_stats fd_gui_tile_stats_t;
     180             : 
     181           0 : #define FD_GUI_SLOT_LEADER_UNSTARTED (0UL)
     182           0 : #define FD_GUI_SLOT_LEADER_STARTED   (1UL)
     183           0 : #define FD_GUI_SLOT_LEADER_ENDED     (2UL)
     184             : 
     185             : struct fd_gui_slot {
     186             :   ulong slot;
     187             :   ulong parent_slot;
     188             :   uint max_compute_units;
     189             :   long  completed_time;
     190             :   int   mine;
     191             :   int   skipped;
     192             :   int   must_republish;
     193             :   int   level;
     194             :   uint  total_txn_cnt;
     195             :   uint  vote_txn_cnt;
     196             :   uint  failed_txn_cnt;
     197             :   uint  nonvote_failed_txn_cnt;
     198             :   uint  compute_units;
     199             :   ulong transaction_fee;
     200             :   ulong priority_fee;
     201             :   ulong tips;
     202             : 
     203             :   uchar leader_state;
     204             : 
     205             :   struct {
     206             :     long leader_start_time; /* UNIX timestamp of when we first became leader in this slot */
     207             :     long leader_end_time;   /* UNIX timestamp of when we stopped being leader in this slot */
     208             : 
     209             :     long reference_ticks;   /* A somewhat arbitrary reference tickcount, that we use for compressing the tickcounts
     210             :                                of transaction start and end times in this slot.  It is, roughly (not exactly), the
     211             :                                minimum of the first transaction start or end tickcount, and the time of the message
     212             :                                from poh to pack telling it to become leader. */
     213             :     long reference_nanos;   /* The UNIX timestamp in nanoseconds of the reference tick value above. */
     214             : 
     215             :     uint microblocks_upper_bound; /* An upper bound on the number of microblocks in the slot.  If the number of
     216             :                                      microblocks observed is equal to this, the slot can be considered over.
     217             :                                      Generally, the bound is set to a "final" state by a done packing message,
     218             :                                      which sets it to the exact number of microblocks, but sometimes this message
     219             :                                      is not sent, if the max upper bound published by poh was already correct. */
     220             :     uint begin_microblocks; /* The number of microblocks we have seen be started (sent) from pack to banks. */
     221             :     uint end_microblocks;   /* The number of microblocks we have seen be ended (sent) from banks to poh.  The
     222             :                                slot is only considered over if the begin and end microblocks seen are both equal
     223             :                                to the microblock upper bound. */
     224             : 
     225             :     ulong   start_offset; /* The smallest pack transaction index for this slot. The first transaction for this slot will
     226             :                              be written to gui->txs[ start_offset%FD_GUI_TXN_HISTORY_SZ ]. */
     227             :     ulong   end_offset;   /* The largest pack transaction index for this slot, plus 1. The last transaction for this
     228             :                              slot will be written to gui->txs[ (start_offset-1)%FD_GUI_TXN_HISTORY_SZ ]. */
     229             :   } txs;
     230             : 
     231             :   fd_gui_txn_waterfall_t waterfall_begin[ 1 ];
     232             :   fd_gui_txn_waterfall_t waterfall_end[ 1 ];
     233             : 
     234             :   fd_gui_tile_stats_t tile_stats_begin[ 1 ];
     235             :   fd_gui_tile_stats_t tile_stats_end[ 1 ];
     236             : 
     237             :   ulong tile_timers_history_idx;
     238             : };
     239             : 
     240             : typedef struct fd_gui_slot fd_gui_slot_t;
     241             : 
     242           0 : #define FD_GUI_SLOT_RANKINGS_SZ (100UL)
     243           0 : #define FD_GUI_SLOT_RANKING_TYPE_ASC  (0)
     244           0 : #define FD_GUI_SLOT_RANKING_TYPE_DESC (1)
     245             : 
     246             : struct fd_gui_slot_ranking {
     247             :   ulong slot;
     248             :   ulong value;
     249             :   int   type;
     250             : };
     251             : typedef struct fd_gui_slot_ranking fd_gui_slot_ranking_t;
     252             : 
     253             : /* All rankings are initialized / reset to ULONG_MAX.  These sentinels
     254             :    sort AFTER non-sentinel ranking entries.  Equal slots are sorted by
     255             :    oldest slot AFTER.  Otherwise sort by value according to ranking
     256             :    type. */
     257             : #define SORT_NAME fd_gui_slot_ranking_sort
     258           0 : #define SORT_KEY_T fd_gui_slot_ranking_t
     259           0 : #define SORT_BEFORE(a,b) fd_int_if( (a).slot==ULONG_MAX, 0, fd_int_if( (b).slot==ULONG_MAX, 1, fd_int_if( (a).value==(b).value, (a).slot>(b).slot, fd_int_if( (a).type==FD_GUI_SLOT_RANKING_TYPE_DESC, (a).value>(b).value, (a).value<(b).value ) ) ) )
     260             : #include "../../util/tmpl/fd_sort.c"
     261             : 
     262             : struct fd_gui_slot_rankings {
     263             :   fd_gui_slot_ranking_t largest_tips          [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     264             :   fd_gui_slot_ranking_t largest_fees          [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     265             :   fd_gui_slot_ranking_t largest_rewards       [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     266             :   fd_gui_slot_ranking_t largest_duration      [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     267             :   fd_gui_slot_ranking_t largest_compute_units [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     268             :   fd_gui_slot_ranking_t largest_skipped       [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     269             :   fd_gui_slot_ranking_t smallest_tips         [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     270             :   fd_gui_slot_ranking_t smallest_fees         [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     271             :   fd_gui_slot_ranking_t smallest_rewards      [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     272             :   fd_gui_slot_ranking_t smallest_duration     [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     273             :   fd_gui_slot_ranking_t smallest_compute_units[ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     274             :   fd_gui_slot_ranking_t smallest_skipped      [ FD_GUI_SLOT_RANKINGS_SZ+1UL ];
     275             : };
     276             : 
     277             : typedef struct fd_gui_slot_rankings fd_gui_slot_rankings_t;
     278             : 
     279             : struct __attribute__((packed)) fd_gui_txn {
     280             :   uchar signature[ FD_SHA512_HASH_SZ ];
     281             :   ulong transaction_fee;
     282             :   ulong priority_fee;
     283             :   ulong tips;
     284             :   long timestamp_arrival_nanos;
     285             : 
     286             :   /* compute_units_requested has both execution and non-execution cus */
     287             :   uint compute_units_requested : 21; /* <= 1.4M */
     288             :   uint compute_units_consumed  : 21; /* <= 1.4M */
     289             :   uint bank_idx                :  6; /* in [0, 64) */
     290             :   uint error_code              :  6; /* in [0, 64) */
     291             :   int timestamp_delta_start_nanos;
     292             :   int timestamp_delta_end_nanos;
     293             : 
     294             :   /* txn_{}_pct is used as a fraction of the total microblock
     295             :      duration. For example, txn_load_end_pct can be used to find the
     296             :      time when this transaction started executing:
     297             : 
     298             :      timestamp_delta_start_exec_nanos = (
     299             :        (timestamp_delta_end_nanos-timestamp_delta_start_nanos) *
     300             :        ((double)txn_{}_pct/USHORT_MAX)
     301             :      ) */
     302             :   uchar txn_start_pct;
     303             :   uchar txn_load_end_pct;
     304             :   uchar txn_end_pct;
     305             :   uchar txn_preload_end_pct;
     306             :   uchar flags; /* assigned with the FD_GUI_TXN_FLAGS_* macros */
     307             :   uchar source_tpu; /* FD_TXN_M_TPU_SOURCE_* */
     308             :   uint  source_ipv4;
     309             :   uint  microblock_idx;
     310             : };
     311             : 
     312             : 
     313             : typedef struct fd_gui_txn fd_gui_txn_t;
     314             : 
     315             : struct fd_gui {
     316             :   fd_http_server_t * http;
     317             :   fd_topo_t * topo;
     318             : 
     319             :   long next_sample_400millis;
     320             :   long next_sample_100millis;
     321             :   long next_sample_10millis;
     322             : 
     323             :   ulong debug_in_leader_slot;
     324             : 
     325             :   struct {
     326             :     fd_pubkey_t identity_key[ 1 ];
     327             :     int         has_vote_key;
     328             :     fd_pubkey_t vote_key[ 1 ];
     329             :     char vote_key_base58[ FD_BASE58_ENCODED_32_SZ ];
     330             :     char identity_key_base58[ FD_BASE58_ENCODED_32_SZ ];
     331             : 
     332             :     char const * version;
     333             :     char const * cluster;
     334             : 
     335             :     ulong vote_distance;
     336             :     int vote_state;
     337             : 
     338             :     long  startup_time_nanos;
     339             : 
     340             :     struct { /* used in frankendancer */
     341             :       uchar phase;
     342             :       int   startup_got_full_snapshot;
     343             : 
     344             :       ulong  startup_incremental_snapshot_slot;
     345             :       uint   startup_incremental_snapshot_peer_ip_addr;
     346             :         ushort startup_incremental_snapshot_peer_port;
     347             :         double startup_incremental_snapshot_elapsed_secs;
     348             :         double startup_incremental_snapshot_remaining_secs;
     349             :         double startup_incremental_snapshot_throughput;
     350             :         ulong  startup_incremental_snapshot_total_bytes;
     351             :         ulong  startup_incremental_snapshot_current_bytes;
     352             : 
     353             :         ulong  startup_full_snapshot_slot;
     354             :         uint   startup_full_snapshot_peer_ip_addr;
     355             :         ushort startup_full_snapshot_peer_port;
     356             :         double startup_full_snapshot_elapsed_secs;
     357             :         double startup_full_snapshot_remaining_secs;
     358             :         double startup_full_snapshot_throughput;
     359             :         ulong  startup_full_snapshot_total_bytes;
     360             :         ulong  startup_full_snapshot_current_bytes;
     361             : 
     362             :         ulong startup_ledger_slot;
     363             :         ulong startup_ledger_max_slot;
     364             : 
     365             :         ulong startup_waiting_for_supermajority_slot;
     366             :         ulong startup_waiting_for_supermajority_stake_pct;
     367             :     } startup_progress;
     368             : 
     369             :     int schedule_strategy;
     370             : 
     371             :     ulong identity_account_balance;
     372             :     ulong vote_account_balance;
     373             :     ulong estimated_slot_duration_nanos;
     374             : 
     375             :     ulong sock_tile_cnt;
     376             :     ulong net_tile_cnt;
     377             :     ulong quic_tile_cnt;
     378             :     ulong verify_tile_cnt;
     379             :     ulong resolv_tile_cnt;
     380             :     ulong bank_tile_cnt;
     381             :     ulong shred_tile_cnt;
     382             : 
     383             :     ulong slot_rooted;
     384             :     ulong slot_optimistically_confirmed;
     385             :     ulong slot_completed;
     386             :     ulong slot_estimated;
     387             : 
     388             :     ulong estimated_tps_history_idx;
     389             :     ulong estimated_tps_history[ FD_GUI_TPS_HISTORY_SAMPLE_CNT ][ 3UL ];
     390             : 
     391             :     fd_gui_txn_waterfall_t txn_waterfall_reference[ 1 ];
     392             :     fd_gui_txn_waterfall_t txn_waterfall_current[ 1 ];
     393             : 
     394             :     fd_gui_tile_stats_t tile_stats_reference[ 1 ];
     395             :     fd_gui_tile_stats_t tile_stats_current[ 1 ];
     396             : 
     397             :     ulong                tile_timers_snap_idx;
     398             :     ulong                tile_timers_snap_idx_slot_start;
     399             :     /* Temporary storage for samples. Will be downsampled into leader history on slot end. */
     400             :     fd_gui_tile_timers_t tile_timers_snap[ FD_GUI_TILE_TIMER_SNAP_CNT ][ FD_GUI_TILE_TIMER_TILE_CNT ];
     401             :     ulong                tile_timers_history_idx;
     402             :     fd_gui_tile_timers_t tile_timers_leader_history[ FD_GUI_TILE_TIMER_LEADER_CNT ][ FD_GUI_TILE_TIMER_LEADER_DOWNSAMPLE_CNT ][ FD_GUI_TILE_TIMER_TILE_CNT ];
     403             :     ulong                tile_timers_leader_history_slot_sample_cnt[ FD_GUI_TILE_TIMER_LEADER_CNT ];
     404             :     ulong                tile_timers_leader_history_slot[ FD_GUI_TILE_TIMER_LEADER_CNT ];
     405             :   } summary;
     406             : 
     407             :   fd_gui_slot_t slots[ FD_GUI_SLOTS_CNT ][ 1 ];
     408             : 
     409             :   ulong pack_txn_idx; /* The pack index of the most recently received transaction */
     410             :   fd_gui_txn_t txs[ FD_GUI_TXN_HISTORY_SZ ][ 1 ];
     411             :   struct {
     412             :     int has_block_engine;
     413             :     char name[ 16 ];
     414             :     char url[ 256 ];
     415             :     char ip_cstr[ 40 ]; /* IPv4 or IPv6 cstr */
     416             :     int status;
     417             :   } block_engine;
     418             : 
     419             :   struct {
     420             :     int has_epoch[ 2 ];
     421             : 
     422             :     struct {
     423             :       ulong epoch;
     424             :       long start_time;
     425             :       long end_time;
     426             : 
     427             :       ulong my_total_slots;
     428             :       ulong my_skipped_slots;
     429             : 
     430             :       ulong start_slot;
     431             :       ulong end_slot;
     432             :       ulong excluded_stake;
     433             :       fd_epoch_leaders_t * lsched;
     434             :       uchar __attribute__((aligned(FD_EPOCH_LEADERS_ALIGN))) _lsched[ FD_EPOCH_LEADERS_FOOTPRINT(MAX_STAKED_LEADERS, MAX_SLOTS_PER_EPOCH) ];
     435             :       fd_vote_stake_weight_t stakes[ MAX_STAKED_LEADERS ];
     436             : 
     437             :       ulong rankings_slot; /* One more than the largest slot we've processed into our rankings */
     438             :       fd_gui_slot_rankings_t rankings[ 1 ]; /* global slot rankings */
     439             :       fd_gui_slot_rankings_t my_rankings[ 1 ]; /* my slots only */
     440             :     } epochs[ 2 ];
     441             :   } epoch;
     442             : 
     443             :   struct {
     444             :     ulong                     peer_cnt;
     445             :     struct fd_gui_gossip_peer peers[ FD_GUI_MAX_PEER_CNT ];
     446             :   } gossip;
     447             : 
     448             :   struct {
     449             :     ulong                      vote_account_cnt;
     450             :     struct fd_gui_vote_account vote_accounts[ FD_GUI_MAX_PEER_CNT ];
     451             :   } vote_account;
     452             : 
     453             :   struct {
     454             :     ulong                        info_cnt;
     455             :     struct fd_gui_validator_info info[ FD_GUI_MAX_PEER_CNT ];
     456             :   } validator_info;
     457             : };
     458             : 
     459             : typedef struct fd_gui fd_gui_t;
     460             : 
     461             : FD_PROTOTYPES_BEGIN
     462             : 
     463             : FD_FN_CONST ulong
     464             : fd_gui_align( void );
     465             : 
     466             : FD_FN_CONST ulong
     467             : fd_gui_footprint( void );
     468             : 
     469             : void *
     470             : fd_gui_new( void *             shmem,
     471             :             fd_http_server_t * http,
     472             :             char const *       version,
     473             :             char const *       cluster,
     474             :             uchar const *      identity_key,
     475             :             int                has_vote_key,
     476             :             uchar const *      vote_key,
     477             :             int                is_voting,
     478             :             int                schedule_strategy,
     479             :             fd_topo_t *        topo );
     480             : 
     481             : fd_gui_t *
     482             : fd_gui_join( void * shmem );
     483             : 
     484             : void
     485             : fd_gui_set_identity( fd_gui_t *    gui,
     486             :                      uchar const * identity_pubkey );
     487             : 
     488             : void
     489             : fd_gui_ws_open( fd_gui_t *  gui,
     490             :                 ulong       conn_id );
     491             : 
     492             : int
     493             : fd_gui_ws_message( fd_gui_t *    gui,
     494             :                    ulong         ws_conn_id,
     495             :                    uchar const * data,
     496             :                    ulong         data_len );
     497             : 
     498             : void
     499             : fd_gui_plugin_message( fd_gui_t *    gui,
     500             :                        ulong         plugin_msg,
     501             :                        uchar const * msg );
     502             : 
     503             : void
     504             : fd_gui_became_leader( fd_gui_t * gui,
     505             :                       long       tickcount,
     506             :                       ulong      slot,
     507             :                       long       start_time_nanos,
     508             :                       long       end_time_nanos,
     509             :                       ulong      max_compute_units,
     510             :                       ulong      max_microblocks );
     511             : 
     512             : void
     513             : fd_gui_unbecame_leader( fd_gui_t * gui,
     514             :                         long       tickcount,
     515             :                         ulong      slot,
     516             :                         ulong      microblocks_in_slot );
     517             : 
     518             : void
     519             : fd_gui_microblock_execution_begin( fd_gui_t *   gui,
     520             :                                    long         tickcount,
     521             :                                    ulong        _slot,
     522             :                                    fd_txn_p_t * txns,
     523             :                                    ulong        txn_cnt,
     524             :                                    uint         microblock_idx,
     525             :                                    ulong        pack_txn_idx );
     526             : 
     527             : void
     528             : fd_gui_microblock_execution_end( fd_gui_t *   gui,
     529             :                                  long         tickcount,
     530             :                                  ulong        bank_idx,
     531             :                                  ulong        _slot,
     532             :                                  ulong        txn_cnt,
     533             :                                  fd_txn_p_t * txns,
     534             :                                  ulong        pack_txn_idx,
     535             :                                  uchar        txn_start_pct,
     536             :                                  uchar        txn_load_end_pct,
     537             :                                  uchar        txn_end_pct,
     538             :                                  uchar        txn_preload_end_pct,
     539             :                                  ulong        tips );
     540             : 
     541             : int
     542             : fd_gui_poll( fd_gui_t * gui );
     543             : 
     544             : FD_PROTOTYPES_END
     545             : 
     546             : #endif /* HEADER_fd_src_disco_gui_fd_gui_h */

Generated by: LCOV version 1.14