mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-14 18:32:42 +00:00
* Start implementing proto_array
* Add progress
* Add unfinished progress
* Add further progress
* Add progress
* Add tree filtering
* Add half-finished modifications
* Add refactored version
* Tidy, add incomplete LmdGhost impl
* Move impls in LmdGhost trait def
* Remove old reduced_tree fork choice
* Combine two functions in to `compute_deltas`
* Start testing
* Add more compute_deltas tests
* Add fork choice testing
* Add more fork choice testing
* Add more fork choice tests
* Add more testing to proto-array
* Remove old tests
* Modify tests
* Add more tests
* Add more testing
* Add comments and fixes
* Re-organise crate
* Tidy, finish pruning tests
* Add ssz encoding, other pub fns
* Rename lmd_ghost > proto_array_fork_choice
* Integrate proto_array into lighthouse
* Add first pass at fixing filter
* Clean out old comments
* Add more comments
* Attempt to fix prune error
* Adjust TODO
* Fix test compile errors
* Add extra justification change check
* Update cargo.lock
* Fix fork choice test compile errors
* Most remove ffg_update_required
* Fix bug with epoch of attestation votes
* Start adding new test format
* Make fork choice tests declarative
* Create test def concept
* Move test defs into crate
* Add binary, re-org crate
* Shuffle files
* Start adding ffg tests
* Add more fork choice tests
* Add fork choice JSON dumping
* Add more detail to best node error
* Ensure fin+just checkpoints from from same block
* Rename JustificationManager
* Move checkpoint manager into own file
* Tidy
* Add targetted logging for sneaky sync bug
* Fix justified balances bug
* Add cache metrics
* Add metrics for log levels
* Fix bug in checkpoint manager
* Fix compile error in fork choice tests
* Ignore duplicate blocks in fork choice
* Add block to fock choice before db
* Rename on_new_block fn
* Fix spec inconsistency in `CheckpointManager`
* Remove BlockRootTree
* Remove old reduced_tree code fragment
* Add API endpoint for fork choice
* Add more ffg tests
* Remove block_root_tree reminents
* Ensure effective balances are used
* Remove old debugging code, fix API fault
* Add check to ensure parent block is in fork choice
* Update readme dates
* Fix readme
* Tidy checkpoint manager
* Remove fork choice yaml files from repo
* Remove fork choice yaml from repo
* General tidy
* Address majority of Michael's comments
* Tidy bin/lib business
* Remove dangling file
* Undo changes for rpc/handler from master
* Revert "Undo changes for rpc/handler from master"
This reverts commit 876edff0e4.
Co-authored-by: Age Manning <Age@AgeManning.com>
161 lines
4.5 KiB
Rust
161 lines
4.5 KiB
Rust
#[macro_use]
|
|
extern crate lazy_static;
|
|
|
|
use lighthouse_metrics::{
|
|
inc_counter, try_create_int_counter, IntCounter, Result as MetricsResult,
|
|
};
|
|
use std::io::{Result, Write};
|
|
|
|
pub const MAX_MESSAGE_WIDTH: usize = 40;
|
|
|
|
lazy_static! {
|
|
pub static ref INFOS_TOTAL: MetricsResult<IntCounter> =
|
|
try_create_int_counter("info_total", "Count of infos logged");
|
|
pub static ref WARNS_TOTAL: MetricsResult<IntCounter> =
|
|
try_create_int_counter("warn_total", "Count of warns logged");
|
|
pub static ref ERRORS_TOTAL: MetricsResult<IntCounter> =
|
|
try_create_int_counter("error_total", "Count of errors logged");
|
|
pub static ref CRITS_TOTAL: MetricsResult<IntCounter> =
|
|
try_create_int_counter("crit_total", "Count of crits logged");
|
|
}
|
|
|
|
pub struct AlignedTermDecorator {
|
|
wrapped: slog_term::TermDecorator,
|
|
message_width: usize,
|
|
}
|
|
|
|
impl AlignedTermDecorator {
|
|
pub fn new(decorator: slog_term::TermDecorator, message_width: usize) -> AlignedTermDecorator {
|
|
AlignedTermDecorator {
|
|
wrapped: decorator,
|
|
message_width,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl slog_term::Decorator for AlignedTermDecorator {
|
|
fn with_record<F>(
|
|
&self,
|
|
record: &slog::Record,
|
|
_logger_values: &slog::OwnedKVList,
|
|
f: F,
|
|
) -> Result<()>
|
|
where
|
|
F: FnOnce(&mut dyn slog_term::RecordDecorator) -> std::io::Result<()>,
|
|
{
|
|
match record.level() {
|
|
slog::Level::Info => inc_counter(&INFOS_TOTAL),
|
|
slog::Level::Warning => inc_counter(&WARNS_TOTAL),
|
|
slog::Level::Error => inc_counter(&ERRORS_TOTAL),
|
|
slog::Level::Critical => inc_counter(&CRITS_TOTAL),
|
|
_ => (),
|
|
}
|
|
|
|
self.wrapped.with_record(record, _logger_values, |deco| {
|
|
f(&mut AlignedRecordDecorator::new(deco, self.message_width))
|
|
})
|
|
}
|
|
}
|
|
|
|
struct AlignedRecordDecorator<'a> {
|
|
wrapped: &'a mut dyn slog_term::RecordDecorator,
|
|
message_count: usize,
|
|
message_active: bool,
|
|
ignore_comma: bool,
|
|
message_width: usize,
|
|
}
|
|
|
|
impl<'a> AlignedRecordDecorator<'a> {
|
|
fn new(
|
|
decorator: &'a mut dyn slog_term::RecordDecorator,
|
|
message_width: usize,
|
|
) -> AlignedRecordDecorator<'a> {
|
|
AlignedRecordDecorator {
|
|
wrapped: decorator,
|
|
message_count: 0,
|
|
ignore_comma: false,
|
|
message_active: false,
|
|
message_width,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<'a> Write for AlignedRecordDecorator<'a> {
|
|
fn write(&mut self, buf: &[u8]) -> Result<usize> {
|
|
if self.ignore_comma {
|
|
//don't write comma
|
|
self.ignore_comma = false;
|
|
Ok(buf.len())
|
|
} else if self.message_active {
|
|
self.wrapped.write(buf).map(|n| {
|
|
self.message_count += n;
|
|
n
|
|
})
|
|
} else {
|
|
self.wrapped.write(buf)
|
|
}
|
|
}
|
|
|
|
fn flush(&mut self) -> Result<()> {
|
|
self.wrapped.flush()
|
|
}
|
|
}
|
|
|
|
impl<'a> slog_term::RecordDecorator for AlignedRecordDecorator<'a> {
|
|
fn reset(&mut self) -> Result<()> {
|
|
self.message_active = false;
|
|
self.message_count = 0;
|
|
self.ignore_comma = false;
|
|
self.wrapped.reset()
|
|
}
|
|
|
|
fn start_whitespace(&mut self) -> Result<()> {
|
|
self.wrapped.start_whitespace()
|
|
}
|
|
|
|
fn start_msg(&mut self) -> Result<()> {
|
|
self.message_active = true;
|
|
self.ignore_comma = false;
|
|
self.wrapped.start_msg()
|
|
}
|
|
|
|
fn start_timestamp(&mut self) -> Result<()> {
|
|
self.wrapped.start_timestamp()
|
|
}
|
|
|
|
fn start_level(&mut self) -> Result<()> {
|
|
self.wrapped.start_level()
|
|
}
|
|
|
|
fn start_comma(&mut self) -> Result<()> {
|
|
if self.message_active && self.message_count + 1 < self.message_width {
|
|
self.ignore_comma = true;
|
|
}
|
|
self.wrapped.start_comma()
|
|
}
|
|
|
|
fn start_key(&mut self) -> Result<()> {
|
|
if self.message_active && self.message_count + 1 < self.message_width {
|
|
write!(
|
|
self,
|
|
"{}",
|
|
std::iter::repeat(' ')
|
|
.take(self.message_width - self.message_count)
|
|
.collect::<String>()
|
|
)?;
|
|
self.message_active = false;
|
|
self.message_count = 0;
|
|
self.ignore_comma = false;
|
|
}
|
|
self.wrapped.start_key()
|
|
}
|
|
|
|
fn start_value(&mut self) -> Result<()> {
|
|
self.wrapped.start_value()
|
|
}
|
|
|
|
fn start_separator(&mut self) -> Result<()> {
|
|
self.wrapped.start_separator()
|
|
}
|
|
}
|