123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #include "session_config.h"
- #include <util/generic/strbuf.h>
- #include <util/string/hex.h>
- using namespace NBus;
- TBusSessionConfig::TSecret::TSecret()
- : TimeoutPeriod(TDuration::Seconds(1))
- , StatusFlushPeriod(TDuration::MilliSeconds(400))
- {
- }
- TBusSessionConfig::TBusSessionConfig()
- : BUS_SESSION_CONFIG_MAP(STRUCT_FIELD_INIT, COMMA)
- {
- }
- TString TBusSessionConfig::PrintToString() const {
- TStringStream ss;
- BUS_SESSION_CONFIG_MAP(STRUCT_FIELD_PRINT, )
- return ss.Str();
- }
- static int ParseDurationForMessageBus(const char* option) {
- return TDuration::Parse(option).MilliSeconds();
- }
- static int ParseToSForMessageBus(const char* option) {
- int tos;
- TStringBuf str(option);
- if (str.StartsWith("0x")) {
- str = str.Tail(2);
- Y_ABORT_UNLESS(str.length() == 2, "ToS must be a number between 0x00 and 0xFF");
- tos = String2Byte(str.data());
- } else {
- tos = FromString<int>(option);
- }
- Y_ABORT_UNLESS(tos >= 0 && tos <= 255, "ToS must be between 0x00 and 0xFF");
- return tos;
- }
- template <class T>
- static T ParseWithKmgSuffixT(const char* option) {
- TStringBuf str(option);
- T multiplier = 1;
- if (str.EndsWith('k')) {
- multiplier = 1024;
- str = str.Head(str.size() - 1);
- } else if (str.EndsWith('m')) {
- multiplier = 1024 * 1024;
- str = str.Head(str.size() - 1);
- } else if (str.EndsWith('g')) {
- multiplier = 1024 * 1024 * 1024;
- str = str.Head(str.size() - 1);
- }
- return FromString<T>(str) * multiplier;
- }
- static ui64 ParseWithKmgSuffix(const char* option) {
- return ParseWithKmgSuffixT<ui64>(option);
- }
- static i64 ParseWithKmgSuffixS(const char* option) {
- return ParseWithKmgSuffixT<i64>(option);
- }
- void TBusSessionConfig::ConfigureLastGetopt(NLastGetopt::TOpts& opts,
- const TString& prefix) {
- opts.AddLongOption(prefix + "total-timeout")
- .RequiredArgument("MILLISECONDS")
- .DefaultValue(ToString(TotalTimeout))
- .StoreMappedResultT<const char*>(&TotalTimeout,
- &ParseDurationForMessageBus);
- opts.AddLongOption(prefix + "connect-timeout")
- .RequiredArgument("MILLISECONDS")
- .DefaultValue(ToString(ConnectTimeout))
- .StoreMappedResultT<const char*>(&ConnectTimeout,
- &ParseDurationForMessageBus);
- opts.AddLongOption(prefix + "send-timeout")
- .RequiredArgument("MILLISECONDS")
- .DefaultValue(ToString(SendTimeout))
- .StoreMappedResultT<const char*>(&SendTimeout,
- &ParseDurationForMessageBus);
- opts.AddLongOption(prefix + "send-threshold")
- .RequiredArgument("BYTES")
- .DefaultValue(ToString(SendThreshold))
- .StoreMappedResultT<const char*>(&SendThreshold, &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "max-in-flight")
- .RequiredArgument("COUNT")
- .DefaultValue(ToString(MaxInFlight))
- .StoreMappedResultT<const char*>(&MaxInFlight, &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "max-in-flight-by-size")
- .RequiredArgument("BYTES")
- .DefaultValue(
- ToString(MaxInFlightBySize))
- .StoreMappedResultT<const char*>(&MaxInFlightBySize, &ParseWithKmgSuffixS);
- opts.AddLongOption(prefix + "per-con-max-in-flight")
- .RequiredArgument("COUNT")
- .DefaultValue(ToString(PerConnectionMaxInFlight))
- .StoreMappedResultT<const char*>(&PerConnectionMaxInFlight,
- &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "per-con-max-in-flight-by-size")
- .RequiredArgument("BYTES")
- .DefaultValue(
- ToString(PerConnectionMaxInFlightBySize))
- .StoreMappedResultT<const char*>(&PerConnectionMaxInFlightBySize,
- &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "default-buffer-size")
- .RequiredArgument("BYTES")
- .DefaultValue(ToString(DefaultBufferSize))
- .StoreMappedResultT<const char*>(&DefaultBufferSize,
- &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "max-buffer-size")
- .RequiredArgument("BYTES")
- .DefaultValue(ToString(MaxBufferSize))
- .StoreMappedResultT<const char*>(&MaxBufferSize, &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "max-message-size")
- .RequiredArgument("BYTES")
- .DefaultValue(ToString(MaxMessageSize))
- .StoreMappedResultT<const char*>(&MaxMessageSize, &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "socket-recv-buffer-size")
- .RequiredArgument("BYTES")
- .DefaultValue(ToString(SocketRecvBufferSize))
- .StoreMappedResultT<const char*>(&SocketRecvBufferSize,
- &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "socket-send-buffer-size")
- .RequiredArgument("BYTES")
- .DefaultValue(ToString(SocketSendBufferSize))
- .StoreMappedResultT<const char*>(&SocketSendBufferSize,
- &ParseWithKmgSuffix);
- opts.AddLongOption(prefix + "socket-tos")
- .RequiredArgument("[0x00, 0xFF]")
- .StoreMappedResultT<const char*>(&SocketToS, &ParseToSForMessageBus);
- ;
- opts.AddLongOption(prefix + "tcp-cork")
- .RequiredArgument("BOOL")
- .DefaultValue(ToString(TcpCork))
- .StoreResult(&TcpCork);
- opts.AddLongOption(prefix + "cork")
- .RequiredArgument("SECONDS")
- .DefaultValue(
- ToString(Cork.Seconds()))
- .StoreMappedResultT<const char*>(&Cork, &TDuration::Parse);
- opts.AddLongOption(prefix + "on-message-in-pool")
- .RequiredArgument("BOOL")
- .DefaultValue(ToString(ExecuteOnMessageInWorkerPool))
- .StoreResult(&ExecuteOnMessageInWorkerPool);
- opts.AddLongOption(prefix + "on-reply-in-pool")
- .RequiredArgument("BOOL")
- .DefaultValue(ToString(ExecuteOnReplyInWorkerPool))
- .StoreResult(&ExecuteOnReplyInWorkerPool);
- }
|