Skip to content
This repository has been archived by the owner on Oct 28, 2021. It is now read-only.

Add log channels to Aleth command-line help output #5564

Merged
merged 2 commits into from
Apr 17, 2019
Merged

Add log channels to Aleth command-line help output #5564

merged 2 commits into from
Apr 17, 2019

Conversation

twinstar26
Copy link
Contributor

Fixes #5549

@codecov-io
Copy link

codecov-io commented Apr 13, 2019

Codecov Report

Merging #5564 into master will decrease coverage by 0.04%.
The diff coverage is 0%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #5564      +/-   ##
==========================================
- Coverage   62.13%   62.09%   -0.05%     
==========================================
  Files         347      347              
  Lines       28982    28995      +13     
  Branches     3284     3284              
==========================================
- Hits        18009    18005       -4     
- Misses       9796     9810      +14     
- Partials     1177     1180       +3

@twinstar26
Copy link
Contributor Author

@halfalicious @gumb0
Please take a look this pr.
Formatting of the message in the help menu is required.
If there are any bad practices in my code please let me know.

Also for xcode there were a ton of warning messages "This was likely caused by different translation units being compiled with different visibility settings." for a long time now. I googled this and nothing serious came out of it. Thought I would let you know.

@halfalicious
Copy link
Contributor

@twinstar26 Can you also please add a change log entry? Look at recently merged PRs for examples.

@twinstar26
Copy link
Contributor Author

@halfalicious @gumb0
I have added Changelog entry, added README.md entry, also formatted the help message a bit.

If everything looks good please let me know so that I can squash the commits.
If there are any bad practices in my code please let me know. xD

@twinstar26
Copy link
Contributor Author

This is the improved output message.

NAME:
   aleth 1.7.0-alpha.0-10+commit.a597b14f.dirty
USAGE:
   aleth [options]

WALLET USAGE:
   account list                                List all keys available in wallet
   account new                                 Create a new key and add it to wallet
   account update [<uuid>|<address> , ... ]    Decrypt and re-encrypt keys
   account import [<uuid>|<file>|<secret-hex>] Import keys from given source and place in wallet
   wallet import <file>                        Import a presale wallet

CLIENT MODE (default):
  --mainnet                               Use the main network protocol
  --ropsten                               Use the Ropsten testnet
  --test                                  Testing mode; disable PoW and provide test rpc interface
  --config <file>                         Configure specialised blockchain using given JSON information
                                          
  --ipc                                   Enable IPC server (default: on)
  --ipcpath <path>                        Set .ipc socket path (default: data directory)
  --no-ipc                                Disable IPC server
  --admin <password>                      Specify admin session key for JSON-RPC (default: auto-generated and printed at start-up)
  -K [ --kill ]                           Kill the blockchain first
  -R [ --rebuild ]                        Rebuild the blockchain from the existing database
  --rescue                                Attempt to rescue a corrupt database
                                          
  --import-presale <file>                 Import a pre-sale key; you'll need to specify the password to this key
  -s [ --import-secret ] <secret>         Import a secret key into the key store
  -S [ --import-session-secret ] <secret> Import a secret session into the key store
  --master <password>                     Give the master password for the key store; use --master "" to show a prompt
  --password <password>                   Give a password for a private key
                                          
CLIENT TRANSACTING:
  --ask <wei>            Set the minimum ask gas price under which no transaction will be mined (default: 20000000000)
  --bid <wei>            Set the bid gas price to pay for transactions (default: 20000000000)
  --unsafe-transactions  Allow all transactions to proceed without verification; EXTREMELY UNSAFE
                         
CLIENT NETWORKING:
  -b [ --bootstrap ]              Connect to the default Ethereum peer servers (default unless --no-discovery used)
  --no-bootstrap                  Do not connect to the default Ethereum peer servers (default only when --no-discovery is used)
  -x [ --peers ] <number>         Attempt to connect to a given number of peers (default: 11)
  --peer-stretch <number>         Give the accepted connection multiplier (default: 7)
  --public-ip <ip>                Force advertised public IP to the given IP (default: auto)
  --listen-ip <ip>(:<port>)       Listen on the given IP for incoming connections (default: 0.0.0.0)
  --listen <port>                 Listen on the given port for incoming connections (default: 30303)
  -r [ --remote ] <host>(:<port>) Connect to the given remote host (default: none)
  --port <port>                   Connect to the given remote port (default: 30303)
  --network-id <n>                Only connect to other hosts with this network id
  --allow-local-discovery         Include local addresses in the discovery process. Used for testing purposes.
  --peerset <list>                Comma delimited list of peers; element format: type:enode://publickey@ipAddress[:port[?discport=port]]
                                          Types:
                                          default     Attempt connection when no other peers are available and pinning is disabled
                                          required    Keep connected at all times
                                  
                                          Ports:
                                          The first port argument is the tcp port used for direct communication among peers. If the second port
                                          argument isn't supplied, the first port argument will also be the udp port used for node discovery.
                                          If neither the first nor second port arguments are supplied, a default port of 30303 will be used for
                                          both peer communication and node discovery.
  --no-discovery                  Disable node discovery; implies --no-bootstrap
  --pin                           Only accept or connect to trusted peers
                                  
CLIENT MINING:
  -a [ --address ] <addr>         Set the author (mining payout) address (default: auto)
  -m [ --mining ] <on/off/number> Enable mining; optionally for a specified number of blocks (default: off)
  --extra-data arg                Set extra data for the sealed blocks
                                  
BENCHMARKING MODE:
  -M [ --benchmark ]           Benchmark for mining and exit
  --benchmark-warmup <seconds> Set the duration of warmup for the benchmark tests (default: 3)
  --benchmark-trial <seconds>  Set the duration for each trial for the benchmark tests (default: 3)
  --benchmark-trials <n>       Set the number of trials for the benchmark tests (default: 5)

MINING CONFIGURATION:
  -C [ --cpu ]                 When mining, use the CPU
  -t [ --mining-threads ] <n>  Limit number of CPU/GPU miners to n (default: use everything available on selected platform)
  --current-block <n>          Let the miner know the current block number at configuration time. Will help determine DAG size and required GPU memory
  --disable-submit-hashrate    When mining, don't submit hashrate to node
                               
IMPORT/EXPORT MODES:
  -I [ --import ] <file>      Import blocks from file
  -E [ --export ] <file>      Export blocks to file
  --from <n>                  Export only from block n; n may be a decimal, a '0x' prefixed hash, or 'latest'
  --to <n>                    Export only to block n (inclusive); n may be a decimal, a '0x' prefixed hash, or 'latest'
  --only <n>                  Equivalent to --export-from n --export-to n
  --format <binary/hex/human> Set export format
  --dont-check                Prevent checking some block aspects. Faster importing, but to apply only when the data is known to be valid
  --download-snapshot <path>  Download Parity Warp Sync snapshot data to the specified path
  --import-snapshot <path>    Import blockchain and state data from the Parity Warp Sync snapshot
                              
DATABASE OPTIONS:
  --db <name> (=leveldb)                       Select database implementation. Available options are: leveldb, rocksdb, memorydb.
  --db-path <path> (=/home/ubuntu18/.ethereum) Database path (for non-memory database options)
                                               
VM OPTIONS:
  --vm <name>|<path> (=legacy) Select VM implementation. Available options are: interpreter, legacy.
  --evmc  <option>=<value>     EVMC option
                               
LOGGING OPTIONS:
  -v [ --log-verbosity ] <0 - 4>        Set the log verbosity from 0 to 4 (default: 2).
  --log-channels <channel_list>         Space-separated list of the log channels to show (default: show all channels).
  --log-exclude-channels <channel_list> Space-separated list of the log channels to hide.
                                        
  List of channels                      block blockhdr bq chain client debug discov error ethcap host impolite info net peer snap sync tq trace warn watch 
GENERAL OPTIONS:
  -d [ --data-dir ] <path> Load configuration files and keystore from path (default: /home/ubuntu18/.ethereum)
  -V [ --version ]         Show the version and exit
  -h [ --help ]            Show this help message and exit

Copy link
Member

@gumb0 gumb0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of a separate function for this, I think this list of channels should be a part of --log-channels description.

So pass the list of channels to createLoggingProgramOptions and then add it to log-channels description after newline.
Kind of like

auto const logChannelsDescription = "Space-separated list of the log channels to show (default: show all channels).\n" + channelList;
addLoggingOption("log-channels",
        po::value<std::vector<std::string>>(&_options.includeChannels)
            ->value_name("<channel_list>")
            ->multitoken(),
	        logChannelsDescription);

Then it will be formatted automatically I think.

@twinstar26
Copy link
Contributor Author

@gumb0 @halfalicious
Yeah I agree with you @gumb0 boost::program_options::options_description uses automatic formatting.`

So with this PR I have created overloaded function po::options_description createLoggingProgramOptions .

Output:-
from aleth-bootnode

LOGGING OPTIONS:
  -v [ --log-verbosity ] <0 - 4>        Set the log verbosity from 0 to 4 (default: 2).
  --log-channels <channel_list>         Space-separated list of the log channels to show (default: show all channels).
  --log-exclude-channels <channel_list> Space-separated list of the log channels to hide.

from aleth-main

LOGGING OPTIONS:
  -v [ --log-verbosity ] <0 - 4>        Set the log verbosity from 0 to 4 (default: 2).
  --log-channels <channel_list>         Space-separated list of the log channels to show (default: show all channels).
                                        block blockhdr bq chain client debug discov error ethcap host impolite info net peer snap sync tq trace warn watch
  --log-exclude-channels <channel_list> Space-separated list of the log channels to hide.

aleth/main.cpp Outdated
@@ -202,6 +202,12 @@ int main(int argc, char** argv)
fs::path configPath;
string configJSON;

///List_logging_channels
const std::vector <string> list_log_channels = {"block", "blockhdr", "bq", "chain", "client",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see channels like exec, vmtrace missing.

Search for all uses of Logger to find them.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I checked all the instances of Logger

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aleth/main.cpp Outdated
@@ -202,6 +202,9 @@ int main(int argc, char** argv)
fs::path configPath;
string configJSON;

///List_logging_channels
const std::string listLogChannels = "block blockhdr bq chain client debug discov error ethcap exec host impolite info net peer snap sync tq trace vmtrace warn watch";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const std::string listLogChannels = "block blockhdr bq chain client debug discov error ethcap exec host impolite info net peer snap sync tq trace vmtrace warn watch";
std::string const logChannels = "block blockhdr bq chain client debug discov error ethcap exec host impolite info net overlaydb peer rpc snap statedb sync timer tq trace vmtrace warn watch";

(some channels were also using clog(...) way to log, it was hard to find, sorry)

Also move this definition closer to where it's used (right before line 328)

@@ -41,4 +41,27 @@ po::options_description createLoggingProgramOptions(unsigned _lineLength, Loggin
return optionsDescr;
}

po::options_description createLoggingProgramOptions(unsigned _lineLength, LoggingOptions& _options, const std::string listLogChannels)
Copy link
Member

@gumb0 gumb0 Apr 16, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to duplicate the whole function, you need just this one version and make the last parameter optional.

Suggested change
po::options_description createLoggingProgramOptions(unsigned _lineLength, LoggingOptions& _options, const std::string listLogChannels)
po::options_description createLoggingProgramOptions(unsigned _lineLength, LoggingOptions& _options, std::string const& _logChannels = {})

@gumb0
Copy link
Member

gumb0 commented Apr 16, 2019

Currently help looks like this

NAME:
   aleth 1.7.0-alpha.0-8+commit.af3f00bb.dirty
USAGE:
   aleth [options]

WALLET USAGE:
   account list                                List all keys available in wallet
   account new                                 Create a new key and add it to wallet
   account update [<uuid>|<address> , ... ]    Decrypt and re-encrypt keys
   account import [<uuid>|<file>|<secret-hex>] Import keys from given source and place in wallet
   wallet import <file>                        Import a presale wallet

CLIENT MODE (default):
  --mainnet                               Use the main network protocol
  --ropsten                               Use the Ropsten testnet
  --test                                  Testing mode; disable PoW and provide test rpc interface
  --config <file>                         Configure specialised blockchain using given JSON information
                                          
  --ipc                                   Enable IPC server (default: on)
  --ipcpath <path>                        Set .ipc socket path (default: data directory)
  --no-ipc                                Disable IPC server
  --admin <password>                      Specify admin session key for JSON-RPC (default: auto-generated and printed at start-up)
  -K [ --kill ]                           Kill the blockchain first
  -R [ --rebuild ]                        Rebuild the blockchain from the existing database
  --rescue                                Attempt to rescue a corrupt database
                                          
  --import-presale <file>                 Import a pre-sale key; you'll need to specify the password to this key
  -s [ --import-secret ] <secret>         Import a secret key into the key store
  -S [ --import-session-secret ] <secret> Import a secret session into the key store
  --master <password>                     Give the master password for the key store; use --master "" to show a prompt
  --password <password>                   Give a password for a private key
                                          
CLIENT TRANSACTING:
  --ask <wei>            Set the minimum ask gas price under which no transaction will be mined (default: 20000000000)
  --bid <wei>            Set the bid gas price to pay for transactions (default: 20000000000)
  --unsafe-transactions  Allow all transactions to proceed without verification; EXTREMELY UNSAFE
                         
CLIENT NETWORKING:
  -b [ --bootstrap ]              Connect to the default Ethereum peer servers (default unless --no-discovery used)
  --no-bootstrap                  Do not connect to the default Ethereum peer servers (default only when --no-discovery is used)
  -x [ --peers ] <number>         Attempt to connect to a given number of peers (default: 11)
  --peer-stretch <number>         Give the accepted connection multiplier (default: 7)
  --public-ip <ip>                Force advertised public IP to the given IP (default: auto)
  --listen-ip <ip>(:<port>)       Listen on the given IP for incoming connections (default: 0.0.0.0)
  --listen <port>                 Listen on the given port for incoming connections (default: 30303)
  -r [ --remote ] <host>(:<port>) Connect to the given remote host (default: none)
  --port <port>                   Connect to the given remote port (default: 30303)
  --network-id <n>                Only connect to other hosts with this network id
  --allow-local-discovery         Include local addresses in the discovery process. Used for testing purposes.
  --peerset <list>                Comma delimited list of peers; element format: type:enode://publickey@ipAddress[:port[?discport=port]]
                                          Types:
                                          default     Attempt connection when no other peers are available and pinning is disabled
                                          required    Keep connected at all times
                                  
                                          Ports:
                                          The first port argument is the tcp port used for direct communication among peers. If the second port
                                          argument isn't supplied, the first port argument will also be the udp port used for node discovery.
                                          If neither the first nor second port arguments are supplied, a default port of 30303 will be used for
                                          both peer communication and node discovery.
  --no-discovery                  Disable node discovery; implies --no-bootstrap
  --pin                           Only accept or connect to trusted peers
                                  
CLIENT MINING:
  -a [ --address ] <addr>         Set the author (mining payout) address (default: auto)
  -m [ --mining ] <on/off/number> Enable mining; optionally for a specified number of blocks (default: off)
  --extra-data arg                Set extra data for the sealed blocks
                                  
BENCHMARKING MODE:
  -M [ --benchmark ]           Benchmark for mining and exit
  --benchmark-warmup <seconds> Set the duration of warmup for the benchmark tests (default: 3)
  --benchmark-trial <seconds>  Set the duration for each trial for the benchmark tests (default: 3)
  --benchmark-trials <n>       Set the number of trials for the benchmark tests (default: 5)

MINING CONFIGURATION:
  -C [ --cpu ]                 When mining, use the CPU
  -t [ --mining-threads ] <n>  Limit number of CPU/GPU miners to n (default: use everything available on selected platform)
  --current-block <n>          Let the miner know the current block number at configuration time. Will help determine DAG size and required GPU memory
  --disable-submit-hashrate    When mining, don't submit hashrate to node
                               
IMPORT/EXPORT MODES:
  -I [ --import ] <file>      Import blocks from file
  -E [ --export ] <file>      Export blocks to file
  --from <n>                  Export only from block n; n may be a decimal, a '0x' prefixed hash, or 'latest'
  --to <n>                    Export only to block n (inclusive); n may be a decimal, a '0x' prefixed hash, or 'latest'
  --only <n>                  Equivalent to --export-from n --export-to n
  --format <binary/hex/human> Set export format
  --dont-check                Prevent checking some block aspects. Faster importing, but to apply only when the data is known to be valid
  --download-snapshot <path>  Download Parity Warp Sync snapshot data to the specified path
  --import-snapshot <path>    Import blockchain and state data from the Parity Warp Sync snapshot
                              
DATABASE OPTIONS:
  --db <name> (=leveldb)                     Select database implementation. Available options are: leveldb, rocksdb, memorydb.
  --db-path <path> (=/home/andrei/.ethereum) Database path (for non-memory database options)
                                             
VM OPTIONS:
  --vm <name>|<path> (=legacy) Select VM implementation. Available options are: interpreter, legacy.
  --evmc  <option>=<value>     EVMC option
                               
LOGGING OPTIONS:
  -v [ --log-verbosity ] <0 - 4>        Set the log verbosity from 0 to 4 (default: 2).
  --log-channels <channel_list>         Space-separated list of the log channels to show (default: show all channels).
                                        Channels: block blockhdr bq chain client debug discov error ethcap exec host impolite info net overlaydb peer rlpx rpc 
                                        snap statedb sync timer tq trace vmtrace warn watch
  --log-exclude-channels <channel_list> Space-separated list of the log channels to hide.
                                        
GENERAL OPTIONS:
  -d [ --data-dir ] <path> Load configuration files and keystore from path (default: /home/andrei/.ethereum)
  -V [ --version ]         Show the version and exit
  -h [ --help ]            Show this help message and exit

@gumb0 gumb0 merged commit 9b511f2 into ethereum:master Apr 17, 2019
This pull request was closed.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add log channels to Aleth command-line help output
4 participants