public PingCaller(ConnectionManager connectionManager, ILoggerFactory loggerFactory, IConfigAccessor configAccessor) { _connectionManager = connectionManager; _config = configAccessor.Get <GrpcConfig>(); _logger = loggerFactory.CreateLogger(typeof(PingCaller)); }
public ServiceRegister(ConnectionManager connectionManager, IConfigAccessor configAccessor, ILoggerFactory loggerFactory) { _connectionManager = connectionManager; _config = configAccessor.Get <GrpcConfig>(); _logger = loggerFactory.CreateLogger(typeof(ServiceRegister)); }
public CLRStatsReporter(ConnectionManager connectionManager, ILoggerFactory loggerFactory, IConfigAccessor configAccessor, IRuntimeEnvironment runtimeEnvironment) { _connectionManager = connectionManager; _logger = loggerFactory.CreateLogger(NLog.LogManager.GetCurrentClassLogger()); _config = configAccessor.Get <GrpcConfig>(); _runtimeEnvironment = runtimeEnvironment; }
public GrpcClientDiagnosticProcessor(ITracingContext tracingContext, IExitSegmentContextAccessor contextAccessor, IConfigAccessor configAccessor) { _tracingContext = tracingContext; _contextAccessor = contextAccessor; _tracingConfig = configAccessor.Get <TracingConfig>(); _grpcConfig = configAccessor.Get <GrpcConfig>(); }
public CLRStatsReporter(ConnectionManager connectionManager, ILoggerFactory loggerFactory, IConfigAccessor configAccessor, IRuntimeEnvironment runtimeEnvironment) { _connectionManager = connectionManager; _logger = loggerFactory.CreateLogger(typeof(CLRStatsReporter)); _config = configAccessor.Get <GrpcConfig>(); _runtimeEnvironment = runtimeEnvironment; _instrumentConfig = configAccessor.Get <InstrumentConfig>(); }
public static Metadata GetMeta(this GrpcConfig config) { if (string.IsNullOrEmpty(config.Authentication)) { return(null); } return(new Metadata { new Metadata.Entry("Authentication", config.Authentication) }); }
private const int MaxFieldId = 536870911; // 2^29-1 static GrpcMarshaller() { // https://github.com/protobuf-net/protobuf-net/wiki/Getting-Started#inheritance var baseType = typeof(T).BaseType; if (baseType != typeof(object)) { RegisterSubType(typeof(T)); } if (typeof(T).IsGenericType) { foreach (var argType in typeof(T).GenericTypeArguments) { GrpcConfig.Register(argType); } } }
private static void RegisterSubType(Type type) { if (GrpcConfig.IgnoreTypeModel(type)) { return; } var baseMetaType = GrpcConfig.Register(type.BaseType); // need to generate predictable fieldIds, allow specifying with [Id(n)] or use MurmurHash2 hash function % 2^29-1, var idAttr = type.FirstAttribute <IdAttribute>(); var fieldId = idAttr?.Id ?? Math.Abs(unchecked ((int)MurmurHash2.Hash(GetTypeName(type)))); fieldId = fieldId % MaxFieldId; if (fieldId == default || (idAttr == null && fieldId < 50)) // min = 1, avoid hash conflicts with real field ids { fieldId += 50; }
public void Can_Fail_Initialization_Multiple_Times() { var grpcConfig = new GrpcConfig( host: "127.0.0.1", port: 40405, serverShutdownDeadlineMs: 2000, serverMaxNumberOfRpcs: 100, clientRpcTimeoutMs: 10000 ); var sdCfg = new SDConfig( endpoints: "127.0.0.1:123123123", etcdPrefix: "pitaya/", serverTypeFilters: new List <string>(), heartbeatTTLSec: 10, logHeartbeat: false, logServerSync: false, logServerDetails: false, syncServersIntervalSec: 10, maxNumberOfRetries: 0, retryDelayMilliseconds: 0 ); var server = new Server( id: "id", type: "type", metadata: "", hostname: "", frontend: false ); for (var i = 0; i < 10; ++i) { Assert.Throws <PitayaException>(() => { PitayaCluster.Initialize(grpcConfig, sdCfg, server, NativeLogLevel.Debug); }); } PitayaCluster.Terminate(); }
public GrpcTestFixture() { Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "IntegrationTests"); string contentRootFull = Path.GetFullPath(Directory.GetCurrentDirectory()); IConfigurationRoot config = new ConfigurationBuilder() .SetBasePath(contentRootFull) .AddJsonFile("appsettings.json", false, true) .AddJsonFile($"appsettings.Development.json", true, true) .AddEnvironmentVariables().Build(); GrpcConfig grpcConfig = config.GetSection(nameof(GrpcConfig)).Get <GrpcConfig>(); LoggerFactory = new LoggerFactory(); _factory = new CustomGRPCWebApplicationFactory <TStartup>(config); var client = _factory.CreateDefaultClient(new ResponseVersionHandler()); client.BaseAddress = new Uri(grpcConfig.Endpoint); GrpcChannel = GrpcChannel.ForAddress(client.BaseAddress, new GrpcChannelOptions { LoggerFactory = LoggerFactory, HttpClient = client }); }
public void Can_Be_Initialized_And_Terminated_Multiple_Times() { var grpcConfig = new GrpcConfig( host: "127.0.0.1", port: 40405, serverShutdownDeadlineMs: 2000, serverMaxNumberOfRpcs: 100, clientRpcTimeoutMs: 10000 ); var sdCfg = new SDConfig( endpoints: "http://127.0.0.1:2379", etcdPrefix: "pitaya/", serverTypeFilters: new List <string>(), heartbeatTTLSec: 10, logHeartbeat: false, logServerSync: false, logServerDetails: false, syncServersIntervalSec: 10, maxNumberOfRetries: 0 ); var server = new Server( id: "myserverid", type: "myservertype", metadata: "", hostname: "", frontend: false ); for (var i = 0; i < 2; ++i) { PitayaCluster.Initialize(grpcConfig, sdCfg, server, NativeLogLevel.Debug); PitayaCluster.Terminate(); } }
public async Task Can_call_Multiply_Grpc_Service_GrpcChannel() { GrpcClientFactory.AllowUnencryptedHttp2 = true; using var http = GrpcChannel.ForAddress(TestsConfig.BaseUri); var response = await http.CreateCallInvoker().Execute <Multiply, MultiplyResponse>(new Multiply { X = 12, Y = 4 }, "GrpcServices", GrpcConfig.GetServiceName(HttpMethods.Post, nameof(Multiply))); Assert.That(response.Result, Is.EqualTo(48)); }
private void Init() { Debug.Log("Init button clicked!"); NPitaya.Models.Logger.SetLevel(LogLevel.DEBUG); Console.WriteLine("c# prog running"); string serverId = Guid.NewGuid().ToString(); var sdConfig = new SDConfig( endpoints: "http://10.0.21.167:2379", etcdPrefix: "pitaya/", serverTypeFilters: new List <string>(), heartbeatTTLSec: 60, logHeartbeat: false, logServerSync: true, logServerDetails: false, syncServersIntervalSec: 60, maxNumberOfRetries: 10, retryDelayMilliseconds: 100); var grpcConfig = new GrpcConfig( host: "127.0.0.1", port: 3000, serverShutdownDeadlineMs: 3000, serverMaxNumberOfRpcs: 1000, clientRpcTimeoutMs: 4000 ); var sv = new Server( serverId, "csharp", "{\"ip\":\"127.0.0.1\"}", "localhost", false); var nc = new NatsConfig( endpoint: "127.0.0.1:4222", connectionTimeoutMs: 2000, requestTimeoutMs: 2000, serverShutdownDeadlineMs: 4000, serverMaxNumberOfRpcs: 1000, maxConnectionRetries: 10, maxPendingMessages: 100, reconnectBufSize: 4 * 1024 * 1024); Debug.Log("Adding signal handler"); Debug.Log("Adding signal handler DONE"); try { Debug.Log("Initializing PitayaCluster"); // PitayaCluster.Initialize(sdConfig, nc, sv); var listener = new PitayaCluster.ServiceDiscoveryListener((action, server) => { switch (action) { case PitayaCluster.ServiceDiscoveryAction.ServerAdded: Debug.Log("Server added:"); Debug.Log(" id: " + server.id); Debug.Log(" type:" + server.type); break; case PitayaCluster.ServiceDiscoveryAction.ServerRemoved: Debug.Log("Server removed:"); Debug.Log(" id: " + server.id); Debug.Log(" type:" + server.type); break; default: throw new ArgumentOutOfRangeException(nameof(action), action, null); } }); #if UNITY_EDITOR PitayaCluster.Initialize(nc, sdConfig, sv, NativeLogLevel.Debug, listener, "MY_LOG_FILE.txt"); #else PitayaCluster.Initialize(grpcConfig, sdConfig, sv, NativeLogLevel.Debug, listener); #endif } catch (PitayaException e) { Debug.LogError($"Failed to create cluster {e.Message}"); Application.Quit(); return; } NPitaya.Models.Logger.Info("pitaya lib initialized successfully :)"); var tr = new TestRemote(); PitayaCluster.RegisterRemote(tr); }
private static void Main(string[] args) { Logger.SetLevel(LogLevel.INFO); var serverId = System.Guid.NewGuid().ToString(); var sdConfig = new SDConfig( endpoints: "http://127.0.0.1:2379", etcdPrefix: "pitaya/", heartbeatTTLSec: 60, logHeartbeat: true, logServerSync: true, logServerDetails: true, syncServersIntervalSec: 30, maxNumberOfRetries: 0); var sv = new Server( id: serverId, type: "csharp", metadata: "", hostname: "localhost", frontend: false); var grpcConfig = new GrpcConfig( host: "127.0.0.1", port: 5444, serverShutdownDeadlineMs: 3000, serverMaxNumberOfRpcs: 500, clientRpcTimeoutMs: 10000 ); PitayaCluster.AddSignalHandler(() => { Logger.Info("Calling terminate on cluster"); PitayaCluster.Terminate(); Logger.Info("Cluster terminated, exiting app"); Environment.Exit(1); }); PitayaCluster.RegisterHandler(new UserHandler()); PitayaCluster.SetSerializer(new JSONSerializer()); // Using json serializer for easier interop with pitaya-cli try { PitayaCluster.Initialize( grpcConfig, sdConfig, sv, NativeLogLevel.Debug, new PitayaCluster.ServiceDiscoveryListener((action, server) => { switch (action) { case PitayaCluster.ServiceDiscoveryAction.ServerAdded: Console.WriteLine($"Server added: {server}"); break; case PitayaCluster.ServiceDiscoveryAction.ServerRemoved: Console.WriteLine($"Server removed: {server}"); break; default: throw new ArgumentOutOfRangeException(nameof(action), action, null); } }) ); } catch (PitayaException exc) { Logger.Error("Failed to create cluster: {0}", exc.Message); Environment.Exit(1); } while (true) { Thread.Sleep(10); } //// }
public static IHostBuilder CreateHostBuilder() { var hzConfiguration = new HazelcastConfig(); var emailSettings = new EmailSettings(); return(new HostBuilder() .ConfigureAppConfiguration((hostContext, configurationBuilder) => { var configurationRoot = configurationBuilder .AddJsonFile("appsettings.json") .AddEnvironmentVariables() .Build(); configurationRoot.Bind(nameof(HazelcastConfig), hzConfiguration); configurationRoot.Bind(nameof(EmailSettings), emailSettings); }) .ConfigureLogging(loggingBuilder => { loggingBuilder.ClearProviders(); loggingBuilder.UseLog4Net(new FileInfo("log4net.config")); }) .ConfigureSimpleInjector() .ConfigureContainer <Container>((hostBuilderContext, container) => { container.RegisterSingleton(() => hzConfiguration); // Register IMessagingClientFactory container.RegisterSingleton <IMessagingClientFactory, HazelcastMessagingClientFactory>(); // Register IMessagingClient container.RegisterSingleton(() => { var config = container.GetInstance <IConfiguration>(); var factory = container.GetInstance <IMessagingClientFactory>(); return factory.CreateClient(nameof(HazelcastConfig), config); }); // Register IMessagePublisher container.RegisterSingleton <IMessagePublisher>(container.GetInstance <IMessagingClient>); // Register IMessageSubscriber container.RegisterSingleton <IMessageSubscriber>(container.GetInstance <IMessagingClient>); // Register data context container.RegisterSingleton(() => new OrganizationServiceDataContextFactory { LoggerFactory = container.GetInstance <ILoggerFactory>() }); //Register Email Service container.RegisterSingleton(() => new EmailService(emailSettings)); container.RegisterScoped(() => { var factory = container.GetInstance <OrganizationServiceDataContextFactory>(); var connectionString = hostBuilderContext.Configuration.GetConnectionString(nameof(OrganizationServiceDataContext)); return factory.CreateDbContext(connectionString); }); // Register repositories DependencyInjectionRegistration.RegisterRepositories(container); // Register services DependencyInjectionRegistration.RegisterServices(container); //Register subscribers DependencyInjectionRegistration.RegisterSubscribers(container); //Register healthchecks DependencyInjectionRegistration.RegisterHealthChecks(container); }) .AddGrpcService <ProfileController>() .AddGrpcService <OrganizationController>() .AddGrpcService <OrganizationUserController>() .AddGrpcService <GroupController>() .AddGrpcService <GroupAuthorizationController>() .AddGrpcService <AuthorizationController>() .AddGrpcService <UserInvitationController>() .AddGrpcService <HealthController>() .ConfigureGrpcServer( Assembly.GetEntryAssembly().GetName().Name, (hostBuilderContext) => { var config = new TracingConfig(); hostBuilderContext.Configuration.Bind(nameof(TracingConfig), config); return config; }, (hostBuilderContext, c, logger, serverServiceDefinitions, interceptors) => { var server = new Server(); var config = new GrpcConfig(); hostBuilderContext.Configuration.Bind(nameof(GrpcConfig), config); server.Ports.Add(new ServerPort(config.Host, config.Port, ServerCredentials.Insecure)); GrpcEnvironment.SetLogger(logger); serverServiceDefinitions .ToList() .ForEach(x => { server.Services.Add(x.Intercept(interceptors.ToArray())); }); return server; }) .ConfigureContainer <Container>(container => container.Verify())); }
static void Main(string[] args) { Logger.SetLevel(LogLevel.DEBUG); Console.WriteLine("c# prog running"); string serverId = System.Guid.NewGuid().ToString(); var sdConfig = new SDConfig( endpoints: "http://127.0.0.1:2379", etcdPrefix: "pitaya/", serverTypeFilters: new List <string>(), heartbeatTTLSec: 60, logHeartbeat: true, logServerSync: true, logServerDetails: true, syncServersIntervalSec: 30, maxNumberOfRetries: 0, retryDelayMilliseconds: 0); var sv = new Server( id: serverId, type: "csharp", metadata: "", hostname: "localhost", frontend: false); var natsConfig = new NatsConfig( endpoint: "127.0.0.1:4222", connectionTimeoutMs: 2000, requestTimeoutMs: 1000, serverShutdownDeadlineMs: 3, serverMaxNumberOfRpcs: 100, maxConnectionRetries: 3, maxPendingMessages: 1000, reconnectBufSize: 4 * 1024 * 1024); var grpcConfig = new GrpcConfig( host: "127.0.0.1", port: 5444, serverShutdownDeadlineMs: 2000, serverMaxNumberOfRpcs: 200, clientRpcTimeoutMs: 10000 ); Dictionary <string, string> constantTags = new Dictionary <string, string> { { "game", "game" }, { "serverType", "svType" } }; var statsdMR = new StatsdMetricsReporter("localhost", 5000, "game", constantTags); MetricsReporters.AddMetricReporter(statsdMR); var prometheusMR = new PrometheusMetricsReporter("default", "game", 9090); MetricsReporters.AddMetricReporter(prometheusMR); PitayaCluster.AddSignalHandler(() => { Logger.Info("Calling terminate on cluster"); PitayaCluster.Terminate(); Logger.Info("Cluster terminated, exiting app"); Environment.Exit(1); //Environment.FailFast("oops"); }); try { PitayaCluster.Initialize( grpcConfig, sdConfig, sv, NativeLogLevel.Debug, new PitayaCluster.ServiceDiscoveryListener((action, server) => { switch (action) { case PitayaCluster.ServiceDiscoveryAction.ServerAdded: Console.WriteLine("Server was added"); Console.WriteLine(" id: " + server.id); Console.WriteLine(" type: " + server.type); break; case PitayaCluster.ServiceDiscoveryAction.ServerRemoved: Console.WriteLine("Server was removed"); Console.WriteLine(" id: " + server.id); Console.WriteLine(" type: " + server.type); break; default: throw new ArgumentOutOfRangeException(nameof(action), action, null); } })); //PitayaCluster.Initialize(natsConfig, sdConfig, sv, NativeLogLevel.Debug, ""); } catch (PitayaException exc) { Logger.Error("Failed to create cluster: {0}", exc.Message); Environment.Exit(1); } Logger.Info("pitaya lib initialized successfully :)"); var tr = new TestRemote(); PitayaCluster.RegisterRemote(tr); var th = new TestHandler(); PitayaCluster.RegisterHandler(th); Thread.Sleep(1000); TrySendRpc(); Console.ReadKey(); PitayaCluster.Terminate(); }
public LinkService(ILogger <LinkService> logger, IOptions <GrpcConfig> config) { this.logger = logger; this.grpcConfig = config.Value; }