diff --git a/internal/frontend/bridge-gui/bridge-gui/main.cpp b/internal/frontend/bridge-gui/bridge-gui/main.cpp index 18ed5ff1..74add4a7 100644 --- a/internal/frontend/bridge-gui/bridge-gui/main.cpp +++ b/internal/frontend/bridge-gui/bridge-gui/main.cpp @@ -268,10 +268,12 @@ int main(int argc, char *argv[]) launchBridge(args); } - app().backend().init(GRPCClient::waitAndRetrieveServiceConfig(attach ? 0 : grpcServiceConfigWaitDelayMs)); + log.debug(QString("Server configuration file will be loaded from '%1'").arg(QDir::toNativeSeparators(grpcServerConfigPath()))); + app().backend().init(GRPCClient::waitAndRetrieveServiceConfig(attach ? 0 : grpcServiceConfigWaitDelayMs)); if (!attach) GRPCClient::removeServiceConfigFile(); + log.debug("Backend was successfully initialized."); QQmlApplicationEngine engine; std::unique_ptr rootComponent(createRootQmlComponent(engine)); diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp index 54e96aea..300f2778 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.cpp @@ -123,8 +123,7 @@ bool GRPCClient::connectToServer(GRPCConfig const &config, QString &outError) int i = 0; while (true) { - if (log_) - log_->debug(QString("Connection to gRPC server at %1. attempt #%2").arg(address).arg(++i)); + this->logDebug(QString("Connection to gRPC server at %1. attempt #%2").arg(address).arg(++i)); if (channel_->WaitForConnected(gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), gpr_time_from_millis(grpcConnectionRetryDelayMs, GPR_TIMESPAN)))) break; // connection established. @@ -136,13 +135,13 @@ bool GRPCClient::connectToServer(GRPCConfig const &config, QString &outError) if (channel_->GetState(true) != GRPC_CHANNEL_READY) throw Exception("connection check failed."); - if (log_) - log_->debug("Successfully connected to gRPC server."); + this->logDebug("Successfully connected to gRPC server."); QString const clientToken = QUuid::createUuid().toString(); QString clientConfigPath = createClientConfigFile(clientToken); if (clientConfigPath.isEmpty()) throw Exception("gRPC client config could not be saved."); + this->logDebug(QString("Client config file was saved to '%1'").arg(QDir::toNativeSeparators(clientConfigPath))); QString returnedClientToken; grpc::Status status = this->checkTokens(QDir::toNativeSeparators(clientConfigPath), returnedClientToken); @@ -874,8 +873,7 @@ grpc::Status GRPCClient::runEventStreamReader() this->processUserEvent(event.user()); break; default: - if (log_) - log_->debug(QString("Unknown stream event type: %1").arg(event.event_case())); + this->logDebug(QString("Unknown stream event type: %1").arg(event.event_case())); } } @@ -897,13 +895,32 @@ grpc::Status GRPCClient::stopEventStreamReader() } +//**************************************************************************************************************************************************** +/// \param[in] level The level of the event. +/// \param[in] message The event message. +//**************************************************************************************************************************************************** +void GRPCClient::log(Log::Level level, QString const &message) +{ + if (log_) + log_->addEntry(level, message); +} + + //**************************************************************************************************************************************************** /// \param[in] message The event message. //**************************************************************************************************************************************************** void GRPCClient::logTrace(QString const &message) { - if (log_) - log_->trace(message); + this->log(Log::Level::Trace, message); +} + + +//**************************************************************************************************************************************************** +/// \param[in] message The event message. +//**************************************************************************************************************************************************** +void GRPCClient::logDebug(QString const &message) +{ + this->log(Log::Level::Debug, message); } @@ -912,8 +929,7 @@ void GRPCClient::logTrace(QString const &message) //**************************************************************************************************************************************************** void GRPCClient::logError(QString const &message) { - if (log_) - log_->error(message); + this->log(Log::Level::Error, message); } diff --git a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h index 0a5308ca..892297f4 100644 --- a/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h +++ b/internal/frontend/bridge-gui/bridgepp/bridgepp/GRPC/GRPCClient.h @@ -207,8 +207,10 @@ public: grpc::Status stopEventStreamReader(); ///< Stop the event stream. private: - void logTrace(QString const &message); ///< Log an event. - void logError(QString const &message); ///< Log an event. + void log(Log::Level level, QString const & message); ///< Log an event. + void logTrace(QString const &message); ///< Log a trace event. + void logDebug(QString const &message); ///< Log a debug event. + void logError(QString const &message); ///< Log an error event. grpc::Status logGRPCCallStatus(grpc::Status const &status, QString const &callName, QList allowedErrors = {}); ///< Log the status of a gRPC code. grpc::Status simpleMethod(SimpleMethod method); ///< perform a gRPC call to a bool setter. grpc::Status setBool(BoolSetter setter, bool value); ///< perform a gRPC call to a bool setter. diff --git a/internal/frontend/grpc/service.go b/internal/frontend/grpc/service.go index 5e6bf74f..4318ab95 100644 --- a/internal/frontend/grpc/service.go +++ b/internal/frontend/grpc/service.go @@ -124,7 +124,7 @@ func NewService( func (s *Service) startGRPCServer() { tlsConfig, pemCert, err := s.generateTLSConfig() if err != nil { - s.log.WithError(err).Panic("could not generate gRPC TLS config") + s.log.WithError(err).Panic("Could not generate gRPC TLS config") } s.pemCert = string(pemCert) @@ -135,11 +135,13 @@ func (s *Service) startGRPCServer() { s.listener, err = net.Listen("tcp", "127.0.0.1:0") // Port 0 means that the port is randomly picked by the system. if err != nil { - s.log.WithError(err).Panic("could not create gRPC listener") + s.log.WithError(err).Panic("Could not create gRPC listener") } - if err := s.saveGRPCServerConfigFile(); err != nil { - s.log.WithError(err).Panic("could not write gRPC service configuration file") + if path, err := s.saveGRPCServerConfigFile(); err != nil { + s.log.WithError(err).WithField("path", path).Panic("Could not write gRPC service config file") + } else { + s.log.WithField("path", path).Debug("Successfully saved gRPC service config file") } s.log.Info("gRPC server listening at ", s.listener.Addr()) @@ -435,10 +437,10 @@ func (s *Service) generateTLSConfig() (tlsConfig *cryptotls.Config, pemCert []by return tlsConfig, pemCert, nil } -func (s *Service) saveGRPCServerConfigFile() error { +func (s *Service) saveGRPCServerConfigFile() (string, error) { address, ok := s.listener.Addr().(*net.TCPAddr) if !ok { - return fmt.Errorf("could not retrieve gRPC service listener address") + return "", fmt.Errorf("could not retrieve gRPC service listener address") } sc := config{ @@ -449,8 +451,10 @@ func (s *Service) saveGRPCServerConfigFile() error { settingsPath, err := s.locations.ProvideSettingsPath() if err != nil { - return err + return "", err } - return sc.save(filepath.Join(settingsPath, serverConfigFileName)) + configPath := filepath.Join(settingsPath, serverConfigFileName) + + return configPath, sc.save(configPath) } diff --git a/internal/frontend/grpc/service_methods.go b/internal/frontend/grpc/service_methods.go index cb3a3d3d..287aa612 100644 --- a/internal/frontend/grpc/service_methods.go +++ b/internal/frontend/grpc/service_methods.go @@ -47,12 +47,18 @@ func (s *Service) CheckTokens(ctx context.Context, clientConfigPath *wrapperspb. return nil, err } + path := clientConfigPath.Value + logEntry := s.log.WithField("path", path) + var clientConfig config - if err := clientConfig.load(clientConfigPath.Value); err != nil { - s.log.WithError(err).Error("could not read gRPC client config file") + if err := clientConfig.load(path); err != nil { + logEntry.WithError(err).Error("Could not read gRPC client config file") + return nil, err } + logEntry.Info("gRPC client config file was successfully loaded") + return &wrapperspb.StringValue{Value: clientConfig.Token}, nil }