Esempio n. 1
1
        private static async Task RunSelectedConfigurationAsync(Transport transport, Buffering buffering, Protocol protocol, bool multiplex, CancellationToken cancellationToken)
        {
            TServerTransport serverTransport = transport switch
            {
                Transport.Tcp => new TServerSocketTransport(9090, Configuration),
                Transport.NamedPipe => new TNamedPipeServerTransport(".test", Configuration, NamedPipeClientFlags.None),
                Transport.TcpTls => new TTlsServerSocketTransport(9090, Configuration, GetCertificate(), ClientCertValidator, LocalCertificateSelectionCallback),
                _ => throw new ArgumentException("unsupported value $transport", nameof(transport)),
            };

            TTransportFactory transportFactory = buffering switch
            {
                Buffering.Buffered => new TBufferedTransport.Factory(),
                Buffering.Framed => new TFramedTransport.Factory(),
                // layered transport(s) are optional
                Buffering.None => null,
                _ => throw new ArgumentException("unsupported value $buffering", nameof(buffering)),
            };

            TProtocolFactory protocolFactory = protocol switch
            {
                Protocol.Binary => new TBinaryProtocol.Factory(),
                Protocol.Compact => new TCompactProtocol.Factory(),
                Protocol.Json => new TJsonProtocol.Factory(),
                _ => throw new ArgumentException("unsupported value $protocol", nameof(protocol)),
            };

            var handler = new CalculatorAsyncHandler();
            ITAsyncProcessor processor = new Calculator.AsyncProcessor(handler);

            if (multiplex)
            {
                var multiplexedProcessor = new TMultiplexedProcessor();
                multiplexedProcessor.RegisterProcessor(nameof(Calculator), processor);

                processor = multiplexedProcessor;
            }


            try
            {
                Logger.LogInformation(
                    "TSimpleAsyncServer with \n{transport} transport\n{buffering} buffering\nmultiplex = {multiplex}\n{protocol} protocol",
                    transport,
                    buffering,
                    multiplex ? "yes" : "no",
                    protocol
                    );

                var server = new TSimpleAsyncServer(
                    itProcessorFactory: new TSingletonProcessorFactory(processor),
                    serverTransport: serverTransport,
                    inputTransportFactory: transportFactory,
                    outputTransportFactory: transportFactory,
                    inputProtocolFactory: protocolFactory,
                    outputProtocolFactory: protocolFactory,
                    logger: LoggingHelper.CreateLogger <TSimpleAsyncServer>());

                Logger.LogInformation("Starting the server...");

                await server.ServeAsync(cancellationToken);
            }
            catch (Exception x)
            {
                Logger.LogInformation("{x}", x);
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="THttpTaskAsyncHandler"/> class.
 /// </summary>
 /// <param name="processor">The async processor implementation.</param>
 /// <param name="inputProtocolFactory">The input protocol factory.</param>
 /// <param name="outputProtocolFactory">The output protocol factory.</param>
 public THttpTaskAsyncHandler(TAsyncProcessor processor, TProtocolFactory inputProtocolFactory,
     TProtocolFactory outputProtocolFactory)
 {
     _processor = processor;
     _inputProtocolFactory = inputProtocolFactory;
     _outputProtocolFactory = outputProtocolFactory;
 }
Esempio n. 3
0
        public TThreadPoolServer(TProcessor processor,
								 TServerTransport serverTransport,
								 TTransportFactory transportFactory,
								 TProtocolFactory protocolFactory)
            : this(processor, serverTransport,
				 transportFactory, transportFactory,
				 protocolFactory, protocolFactory,
				 DEFAULT_MIN_THREADS, DEFAULT_MAX_THREADS)
        {
        }
 public TThreadPoolServer(TProcessor processor,
  TServerTransport serverTransport,
  TTransportFactory transportFactory,
  TProtocolFactory protocolFactory)
     : this(new TSingletonProcessorFactory(processor), serverTransport,
        transportFactory, transportFactory,
        protocolFactory, protocolFactory,
        DEFAULT_MIN_THREADS, DEFAULT_MAX_THREADS, DefaultLogDelegate)
 {
 }
Esempio n. 5
0
        public TThreadedServer(TProcessor processor,
								 TServerTransport serverTransport,
								 TTransportFactory transportFactory,
								 TProtocolFactory protocolFactory)
            : this(processor, serverTransport,
				 transportFactory, transportFactory,
				 protocolFactory, protocolFactory,
				 DEFAULT_MAX_THREADS, DefaultLogDelegate)
        {
        }
		public ThriftConnection(IConnectionConfigurationValues connectionSettings, TProtocolFactory protocolFactory = null)
		{
			this._connectionSettings = connectionSettings;
			this._protocolFactory = protocolFactory;
			this._timeout = connectionSettings.Timeout;

			this._maximumConnections = this._connectionSettings.MaximumAsyncConnections;
			if (this._maximumConnections > 0)
				this._resourceLock = new Semaphore(this._maximumConnections, this._maximumConnections);

		}
Esempio n. 7
0
        public TSimpleServer(TProcessor processor,
						  TServerTransport serverTransport,
						  TTransportFactory transportFactory,
						  TProtocolFactory protocolFactory)
            : base(processor,
				 serverTransport,
				 transportFactory,
				 transportFactory,
				 protocolFactory,
				 protocolFactory)
        {
        }
Esempio n. 8
0
 public TThreadPoolAsyncServer(ITProcessorFactory processorFactory,
                               TServerTransport serverTransport,
                               TTransportFactory inputTransportFactory,
                               TTransportFactory outputTransportFactory,
                               TProtocolFactory inputProtocolFactory,
                               TProtocolFactory outputProtocolFactory,
                               int minThreadPoolThreads, int maxThreadPoolThreads, ILogger logger = null)
     : this(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
            inputProtocolFactory, outputProtocolFactory,
            new Configuration(minThreadPoolThreads, maxThreadPoolThreads),
            logger)
 {
 }
 public TThreadPoolServer(TProcessorFactory processorFactory,
                          TServerTransport serverTransport,
                          TTransportFactory inputTransportFactory,
                          TTransportFactory outputTransportFactory,
                          TProtocolFactory inputProtocolFactory,
                          TProtocolFactory outputProtocolFactory,
                          int minThreadPoolThreads, int maxThreadPoolThreads, LogDelegate logDel)
     : this(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
            inputProtocolFactory, outputProtocolFactory,
            new Configuration(minThreadPoolThreads, maxThreadPoolThreads),
            logDel)
 {
 }
 public TSimpleServer(TProcessorFactory processorFactory,
           TServerTransport serverTransport,
           TTransportFactory transportFactory,
           TProtocolFactory protocolFactory)
   : base(processorFactory,
      serverTransport,
      transportFactory,
      transportFactory,
      protocolFactory,
      protocolFactory,
      DefaultLogDelegate)
 {
 }
Esempio n. 11
0
        public void Write <T>(T tValue,
                              Stream oStream,
                              TProtocolFactory protocolFactory)
        {
            Guard.ArgumentNotNull(tValue, nameof(tValue));
            Guard.ArgumentNotNull(protocolFactory, nameof(protocolFactory));
            Guard.ArgumentNotNull(oStream, nameof(oStream));

            TStreamTransport resultIOStream       = new TStreamTransport(null, oStream);
            TProtocol        resultProtocolBuffer = protocolFactory.GetProtocol(resultIOStream);

            Write <T>(tValue, resultProtocolBuffer);
        }
Esempio n. 12
0
 public TSimpleServer(TProcessor processor,
                      TServerTransport serverTransport,
                      TTransportFactory transportFactory,
                      TProtocolFactory protocolFactory)
     : base(processor,
            serverTransport,
            transportFactory,
            transportFactory,
            protocolFactory,
            protocolFactory,
            DefaultLogDelegate)
 {
 }
Esempio n. 13
0
 protected TServer(ITProcessorFactory processorFactory, TServerTransport serverTransport,
                   TTransportFactory inputTransportFactory, TTransportFactory outputTransportFactory,
                   TProtocolFactory inputProtocolFactory, TProtocolFactory outputProtocolFactory,
                   ILogger logger = null)
 {
     ProcessorFactory       = processorFactory ?? throw new ArgumentNullException(nameof(processorFactory));
     ServerTransport        = serverTransport;
     InputTransportFactory  = inputTransportFactory ?? new TTransportFactory();
     OutputTransportFactory = outputTransportFactory ?? new TTransportFactory();
     InputProtocolFactory   = inputProtocolFactory ?? throw new ArgumentNullException(nameof(inputProtocolFactory));
     OutputProtocolFactory  = outputProtocolFactory ?? throw new ArgumentNullException(nameof(outputProtocolFactory));
     Logger = logger; // null is absolutely legal
 }
Esempio n. 14
0
 public TServer(TProcessor processor,
       TServerTransport serverTransport,
       TTransportFactory transportFactory,
       TProtocolFactory protocolFactory)
     : this(processor,
  serverTransport,
  transportFactory,
  transportFactory,
  protocolFactory,
  protocolFactory,
    DefaultLogDelegate)
 {
 }
Esempio n. 15
0
        public JaegerUdpBatcher(JaegerExporterOptions options, TTransport clientTransport = null)
        {
            if (options is null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            if (options.MaxFlushInterval <= TimeSpan.Zero)
            {
                options.MaxFlushInterval = TimeSpan.FromSeconds(10);
            }

            this.maxPacketSize   = (!options.MaxPacketSize.HasValue || options.MaxPacketSize <= 0) ? JaegerExporterOptions.DefaultMaxPacketSize : options.MaxPacketSize.Value;
            this.protocolFactory = new TCompactProtocol.Factory();
            this.clientTransport = clientTransport ?? new JaegerThriftClientTransport(options.AgentHost, options.AgentPort);
            this.thriftClient    = new JaegerThriftClient(this.protocolFactory.GetProtocol(this.clientTransport));
            this.memoryTransport = new InMemoryTransport(16000);
            this.memoryProtocol  = this.protocolFactory.GetProtocol(this.memoryTransport);

            this.Process = new Process(options.ServiceName, options.ProcessTags);

            this.maxFlushInterval      = options.MaxFlushInterval;
            this.maxFlushIntervalTimer = new System.Timers.Timer
            {
                AutoReset = false,
                Enabled   = false,
                Interval  = this.maxFlushInterval.TotalMilliseconds,
            };

            this.maxFlushIntervalTimer.Elapsed += async(sender, args) =>
            {
                bool lockTaken = this.flushLock.Wait(0);
                try
                {
                    if (!lockTaken)
                    {
                        // If the lock was already held, it means a flush is already executing.
                        return;
                    }

                    await this.FlushAsyncInternal(lockAlreadyHeld : true, CancellationToken.None).ConfigureAwait(false);
                }
                finally
                {
                    if (lockTaken)
                    {
                        this.flushLock.Release();
                    }
                }
            };
        }
Esempio n. 16
0
 public TSimpleAsyncServer(ITAsyncProcessor processor,
                           TServerTransport serverTransport,
                           TProtocolFactory inputProtocolFactory,
                           TProtocolFactory outputProtocolFactory,
                           ILoggerFactory loggerFactory)
     : this(new TSingletonProcessorFactory(processor),
            serverTransport,
            null, // defaults to TTransportFactory()
            null, // defaults to TTransportFactory()
            inputProtocolFactory,
            outputProtocolFactory,
            loggerFactory.CreateLogger(nameof(TSimpleAsyncServer)))
 {
 }
        public TThreadPoolServer(TProcessorFactory processorFactory,
                                 TServerTransport serverTransport,
                                 TTransportFactory inputTransportFactory,
                                 TTransportFactory outputTransportFactory,
                                 TProtocolFactory inputProtocolFactory,
                                 TProtocolFactory outputProtocolFactory,
                                 Configuration threadConfig,
                                 LogDelegate logDel)
            : base(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
                   inputProtocolFactory, outputProtocolFactory, logDel)
        {
            lock (typeof(TThreadPoolServer))
            {
                if ((threadConfig.MaxWorkerThreads > 0) || (threadConfig.MaxIOThreads > 0))
                {
                    int work, comm;
                    ThreadPool.GetMaxThreads(out work, out comm);
                    if (threadConfig.MaxWorkerThreads > 0)
                    {
                        work = threadConfig.MaxWorkerThreads;
                    }
                    if (threadConfig.MaxIOThreads > 0)
                    {
                        comm = threadConfig.MaxIOThreads;
                    }
                    if (!ThreadPool.SetMaxThreads(work, comm))
                    {
                        throw new Exception("Error: could not SetMaxThreads in ThreadPool");
                    }
                }

                if ((threadConfig.MinWorkerThreads > 0) || (threadConfig.MinIOThreads > 0))
                {
                    int work, comm;
                    ThreadPool.GetMinThreads(out work, out comm);
                    if (threadConfig.MinWorkerThreads > 0)
                    {
                        work = threadConfig.MinWorkerThreads;
                    }
                    if (threadConfig.MinIOThreads > 0)
                    {
                        comm = threadConfig.MinIOThreads;
                    }
                    if (!ThreadPool.SetMinThreads(work, comm))
                    {
                        throw new Exception("Error: could not SetMinThreads in ThreadPool");
                    }
                }
            }
        }
Esempio n. 18
0
 public TServer(TProcessor processor,
                TServerTransport serverTransport,
                TTransportFactory inputTransportFactory,
                TTransportFactory outputTransportFactory,
                TProtocolFactory inputProtocolFactory,
                TProtocolFactory outputProtocolFactory)
 {
     this.processor              = processor;
     this.serverTransport        = serverTransport;
     this.inputTransportFactory  = inputTransportFactory;
     this.outputTransportFactory = outputTransportFactory;
     this.inputProtocolFactory   = inputProtocolFactory;
     this.outputProtocolFactory  = outputProtocolFactory;
 }
Esempio n. 19
0
        public TThreadedServer(TProcessor processor,
								 TServerTransport serverTransport,
								 TTransportFactory inputTransportFactory,
								 TTransportFactory outputTransportFactory,
								 TProtocolFactory inputProtocolFactory,
								 TProtocolFactory outputProtocolFactory,
								 int maxThreads, LogDelegate logDel)
            : base(processor, serverTransport, inputTransportFactory, outputTransportFactory,
				  inputProtocolFactory, outputProtocolFactory, logDel)
        {
            this.maxThreads = maxThreads;
            clientQueue = new Queue<TTransport>();
            clientLock = new object();
            clientThreads = new THashSet<Thread>();
        }
Esempio n. 20
0
        public TThreadPoolServer(TProcessor processor,
								 TServerTransport serverTransport,
								 TTransportFactory inputTransportFactory,
								 TTransportFactory outputTransportFactory,
								 TProtocolFactory inputProtocolFactory,
								 TProtocolFactory outputProtocolFactory,
								 int minThreadPoolThreads, int maxThreadPoolThreads, LogDelegate logDel)
            : base(processor, serverTransport, inputTransportFactory, outputTransportFactory,
				  inputProtocolFactory, outputProtocolFactory, logDel)
        {
            if (!ThreadPool.SetMaxThreads(maxThreadPoolThreads, maxThreadPoolThreads))
            {
                throw new Exception("Error: could not SetMaxThreads in ThreadPool");
            }
        }
Esempio n. 21
0
 public TThreadPoolServer(TProcessor processor,
                          TServerTransport serverTransport,
                          TTransportFactory inputTransportFactory,
                          TTransportFactory outputTransportFactory,
                          TProtocolFactory inputProtocolFactory,
                          TProtocolFactory outputProtocolFactory,
                          int minThreadPoolThreads, int maxThreadPoolThreads, LogDelegate logDel)
     : base(processor, serverTransport, inputTransportFactory, outputTransportFactory,
            inputProtocolFactory, outputProtocolFactory, logDel)
 {
     if (!ThreadPool.SetMaxThreads(maxThreadPoolThreads, maxThreadPoolThreads))
     {
         throw new Exception("Error: could not SetMaxThreads in ThreadPool");
     }
 }
Esempio n. 22
0
 public TThreadedServer(TProcessor processor,
                        TServerTransport serverTransport,
                        TTransportFactory inputTransportFactory,
                        TTransportFactory outputTransportFactory,
                        TProtocolFactory inputProtocolFactory,
                        TProtocolFactory outputProtocolFactory,
                        int maxThreads, LogDelegate logDel)
     : base(processor, serverTransport, inputTransportFactory, outputTransportFactory,
            inputProtocolFactory, outputProtocolFactory, logDel)
 {
     this.maxThreads = maxThreads;
     clientQueue     = new Queue <TTransport>();
     clientLock      = new object();
     clientThreads   = new THashSet <Thread>();
 }
Esempio n. 23
0
        internal JaegerExporter(JaegerExporterOptions options, TTransport clientTransport = null)
        {
            Guard.Null(options, nameof(options));

            this.maxPayloadSizeInBytes = (!options.MaxPayloadSizeInBytes.HasValue || options.MaxPayloadSizeInBytes <= 0) ? JaegerExporterOptions.DefaultMaxPayloadSizeInBytes : options.MaxPayloadSizeInBytes.Value;
            this.protocolFactory       = new TCompactProtocol.Factory();
            this.clientTransport       = clientTransport ?? new JaegerThriftClientTransport(options.AgentHost, options.AgentPort);
            this.thriftClient          = new JaegerThriftClient(this.protocolFactory.GetProtocol(this.clientTransport));
            this.memoryTransport       = new InMemoryTransport(16000);
            this.memoryProtocol        = this.protocolFactory.GetProtocol(this.memoryTransport);

            string serviceName = (string)this.ParentProvider.GetDefaultResource().Attributes.Where(
                pair => pair.Key == ResourceSemanticConventions.AttributeServiceName).FirstOrDefault().Value;

            this.Process = new Process(serviceName);
        }
Esempio n. 24
0
        public T Read <T>(byte[] serializedStruct,
                          TProtocolFactory protocolFactory)
        {
            Guard.ArgumentNotNull(serializedStruct, nameof(serializedStruct));

            using (MemoryStream istream = new MemoryStream(serializedStruct))
            {
                using (TStreamTransport resultIOStream = new TStreamTransport(istream, null))
                {
                    using (TProtocol resultProtocolBuffer = protocolFactory.GetProtocol(resultIOStream))
                    {
                        return(Read <T>(resultProtocolBuffer));
                    }
                }
            }
        }
        private bool disposedValue; // To detect redundant dispose calls

        internal JaegerExporter(JaegerExporterOptions options, TTransport clientTransport = null)
        {
            if (options is null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            this.maxPayloadSizeInBytes = (!options.MaxPayloadSizeInBytes.HasValue || options.MaxPayloadSizeInBytes <= 0) ? JaegerExporterOptions.DefaultMaxPayloadSizeInBytes : options.MaxPayloadSizeInBytes.Value;
            this.protocolFactory       = new TCompactProtocol.Factory();
            this.clientTransport       = clientTransport ?? new JaegerThriftClientTransport(options.AgentHost, options.AgentPort);
            this.thriftClient          = new JaegerThriftClient(this.protocolFactory.GetProtocol(this.clientTransport));
            this.memoryTransport       = new InMemoryTransport(16000);
            this.memoryProtocol        = this.protocolFactory.GetProtocol(this.memoryTransport);

            this.Process = new Process(options.ServiceName, options.ProcessTags);
        }
Esempio n. 26
0
 public TSimpleAsyncServer(ITProcessorFactory itProcessorFactory,
                           TServerTransport serverTransport,
                           TTransportFactory inputTransportFactory,
                           TTransportFactory outputTransportFactory,
                           TProtocolFactory inputProtocolFactory,
                           TProtocolFactory outputProtocolFactory,
                           ILoggerFactory loggerFactory)
     : this(itProcessorFactory,
            serverTransport,
            inputTransportFactory,
            outputTransportFactory,
            inputProtocolFactory,
            outputProtocolFactory,
            loggerFactory.CreateLogger <TSimpleAsyncServer>())
 {
 }
Esempio n. 27
0
 public TServer(TProcessor processor,
                TServerTransport serverTransport,
                TTransportFactory inputTransportFactory,
                TTransportFactory outputTransportFactory,
                TProtocolFactory inputProtocolFactory,
                TProtocolFactory outputProtocolFactory,
                LogDelegate logDelegate)
 {
     this.processor              = processor;
     this.serverTransport        = serverTransport;
     this.inputTransportFactory  = inputTransportFactory;
     this.outputTransportFactory = outputTransportFactory;
     this.inputProtocolFactory   = inputProtocolFactory;
     this.outputProtocolFactory  = outputProtocolFactory;
     this.logDelegate            = (logDelegate != null) ? logDelegate : DefaultLogDelegate;
 }
Esempio n. 28
0
 public TSimpleAsyncServer(ITProcessorFactory itProcessorFactory,
                           TServerTransport serverTransport,
                           TTransportFactory inputTransportFactory,
                           TTransportFactory outputTransportFactory,
                           TProtocolFactory inputProtocolFactory,
                           TProtocolFactory outputProtocolFactory,
                           ILogger logger)
     : base(itProcessorFactory,
            serverTransport,
            inputTransportFactory,
            outputTransportFactory,
            inputProtocolFactory,
            outputProtocolFactory,
            logger)
 {
 }
Esempio n. 29
0
        public T CreateScribeClient <T>(
            ThriftClientManager manager, ScopedServer server, TProtocolFactory protocolFactory)
            where T : class
        {
            ThriftClientConfig config = new ThriftClientConfig();

            config.ConnectTimeout = TimeSpan.FromSeconds(600);
            config.ReceiveTimeout = TimeSpan.FromSeconds(600);
            config.ReadTimeout    = TimeSpan.FromSeconds(600);
            config.WriteTimeout   = TimeSpan.FromSeconds(600);

            var thriftClient = new ThriftClient(manager, typeof(T), config, typeof(T).Name);

            return(thriftClient.OpenAsync(
                       new FramedClientConnector("localhost", server.Port, protocolFactory))
                   .GetAwaiter().GetResult() as T);
        }
Esempio n. 30
0
 public TSimpleAsyncServer(ITProcessorFactory itProcessorFactory,
                           TServerTransport serverTransport,
                           TTransportFactory inputTransportFactory,
                           TTransportFactory outputTransportFactory,
                           TProtocolFactory inputProtocolFactory,
                           TProtocolFactory outputProtocolFactory,
                           ILogger logger,
                           int clientWaitingDelay = 10)
     : base(itProcessorFactory,
            serverTransport,
            inputTransportFactory,
            outputTransportFactory,
            inputProtocolFactory,
            outputProtocolFactory,
            logger)
 {
     _clientWaitingDelay = clientWaitingDelay;
 }
Esempio n. 31
0
 public TSimpleAsyncServer(ITProcessorFactory itProcessorFactory,
                           TServerTransport serverTransport,
                           TTransportFactory inputTransportFactory,
                           TTransportFactory outputTransportFactory,
                           TProtocolFactory inputProtocolFactory,
                           TProtocolFactory outputProtocolFactory,
                           ILoggerFactory loggerFactory,
                           int clientWaitingDelay = 10)
     : this(itProcessorFactory,
            serverTransport,
            inputTransportFactory,
            outputTransportFactory,
            inputProtocolFactory,
            outputProtocolFactory,
            loggerFactory.CreateLogger <TSimpleAsyncServer>(),
            clientWaitingDelay)
 {
 }
Esempio n. 32
0
 public TThreadPoolServer(TProcessor processor,
                          TServerTransport serverTransport,
                          TTransportFactory inputTransportFactory,
                          TTransportFactory outputTransportFactory,
                          TProtocolFactory inputProtocolFactory,
                          TProtocolFactory outputProtocolFactory,
                          int minThreadPoolThreads, int maxThreadPoolThreads, LogDelegate logDel)
     : base(processor, serverTransport, inputTransportFactory, outputTransportFactory,
            inputProtocolFactory, outputProtocolFactory, logDel)
 {
     // Can't SetMinThreads in NetStandard (?)
     //if (!ThreadPool.SetMinThreads(minThreadPoolThreads, minThreadPoolThreads))
     //{
     //	throw new Exception("Error: could not SetMinThreads in ThreadPool");
     //}
     //if (!ThreadPool.SetMaxThreads(maxThreadPoolThreads, maxThreadPoolThreads))
     //{
     //	throw new Exception("Error: could not SetMaxThreads in ThreadPool");
     //}
 }
Esempio n. 33
0
        private bool disposedValue = false; // To detect redundant calls

        public JaegerUdpBatcher(JaegerExporterOptions options, TTransport clientTransport = null)
        {
            if (options is null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            if (options.MaxFlushInterval <= TimeSpan.Zero)
            {
                options.MaxFlushInterval = TimeSpan.FromSeconds(10);
            }

            this.maxPacketSize   = (!options.MaxPacketSize.HasValue || options.MaxPacketSize <= 0) ? JaegerExporterOptions.DefaultMaxPacketSize : options.MaxPacketSize.Value;
            this.protocolFactory = new TCompactProtocol.Factory();
            this.clientTransport = clientTransport ?? new JaegerThriftClientTransport(options.AgentHost, options.AgentPort);
            this.thriftClient    = new JaegerThriftClient(this.protocolFactory.GetProtocol(this.clientTransport));
            this.memoryTransport = new InMemoryTransport(16000);
            this.memoryProtocol  = this.protocolFactory.GetProtocol(this.memoryTransport);

            this.Process = new Process(options.ServiceName, options.ProcessTags);

            this.maxFlushInterval      = options.MaxFlushInterval;
            this.maxFlushIntervalTimer = new System.Timers.Timer
            {
                AutoReset = false,
                Enabled   = false,
                Interval  = this.maxFlushInterval.TotalMilliseconds,
            };

            this.maxFlushIntervalTimer.Elapsed += async(sender, args) =>
            {
                try
                {
                    await this.FlushAsyncInternal(false, CancellationToken.None).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    JaegerExporterEventSource.Log.UnexpectedError(ex);
                }
            };
        }
Esempio n. 34
0
        public THttpServerTransport(
            ITAsyncProcessor processor,
            TProtocolFactory inputProtocolFactory,
            TProtocolFactory outputProtocolFactory,
            TTransportFactory inputTransFactory  = null,
            TTransportFactory outputTransFactory = null,
            RequestDelegate next         = null,
            ILoggerFactory loggerFactory = null)
        {
            // loggerFactory == null is not illegal anymore

            Processor             = processor ?? throw new ArgumentNullException(nameof(processor));
            InputProtocolFactory  = inputProtocolFactory ?? throw new ArgumentNullException(nameof(inputProtocolFactory));
            OutputProtocolFactory = outputProtocolFactory ?? throw new ArgumentNullException(nameof(outputProtocolFactory));

            InputTransportFactory  = inputTransFactory;
            OutputTransportFactory = outputTransFactory;

            _next   = next;
            _logger = (loggerFactory != null) ? loggerFactory.CreateLogger <THttpServerTransport>() : new NullLogger <THttpServerTransport>();
        }
        internal JaegerExporter(JaegerExporterOptions options, TProtocolFactory protocolFactory = null, IJaegerClient client = null)
        {
            Guard.ThrowIfNull(options, nameof(options));

            this.maxPayloadSizeInBytes = (!options.MaxPayloadSizeInBytes.HasValue || options.MaxPayloadSizeInBytes <= 0)
                ? JaegerExporterOptions.DefaultMaxPayloadSizeInBytes
                : options.MaxPayloadSizeInBytes.Value;

            if (options.Protocol == JaegerExportProtocol.UdpCompactThrift)
            {
                protocolFactory ??= new TCompactProtocol.Factory();
                client ??= new JaegerUdpClient(options.AgentHost, options.AgentPort);
                this.sendUsingEmitBatchArgs = true;
            }
            else if (options.Protocol == JaegerExportProtocol.HttpBinaryThrift)
            {
                protocolFactory ??= new TBinaryProtocol.Factory();
                client ??= new JaegerHttpClient(
                    options.Endpoint,
                    options.HttpClientFactory?.Invoke() ?? throw new InvalidOperationException("JaegerExporterOptions was missing HttpClientFactory or it returned null."));
            }
            else
            {
                throw new NotSupportedException();
            }

            this.client      = client;
            this.batchWriter = protocolFactory.GetProtocol(this.maxPayloadSizeInBytes * 2);
            this.spanWriter  = protocolFactory.GetProtocol(this.maxPayloadSizeInBytes);

            string serviceName = (string)this.ParentProvider.GetDefaultResource().Attributes.FirstOrDefault(
                pair => pair.Key == ResourceSemanticConventions.AttributeServiceName).Value;

            this.Process = new Process(serviceName);

            client.Connect();
        }
 public WordbookHandler()
 {
     this.processor = new WordbookThriftService.Processor(WordbookService);
     this.inputProtocolFactory = this.outputProtocolFactory = new TJSONProtocol.Factory();
     //this.inputProtocolFactory = this.outputProtocolFactory = new TBinaryProtocol.Factory();
 }
Esempio n. 37
0
 public TServer(TProcessorFactory processorFactory,
           TServerTransport serverTransport,
           TTransportFactory inputTransportFactory,
           TTransportFactory outputTransportFactory,
           TProtocolFactory inputProtocolFactory,
           TProtocolFactory outputProtocolFactory,
           LogDelegate logDelegate)
 {
     this.processorFactory = processorFactory;
     this.serverTransport = serverTransport;
     this.inputTransportFactory = inputTransportFactory;
     this.outputTransportFactory = outputTransportFactory;
     this.inputProtocolFactory = inputProtocolFactory;
     this.outputProtocolFactory = outputProtocolFactory;
     this.logDelegate = (logDelegate != null) ? logDelegate : DefaultLogDelegate;
 }
Esempio n. 38
0
 public THttpHandler(TProcessor processor, TProtocolFactory inputProtocolFactory, TProtocolFactory outputProtocolFactory)
 {
     this.processor             = processor;
     this.inputProtocolFactory  = inputProtocolFactory;
     this.outputProtocolFactory = outputProtocolFactory;
 }
Esempio n. 39
0
 public THttpHandler(TProcessor processor, TProtocolFactory protocolFactory)
     : this(processor, protocolFactory, protocolFactory)
 {
 }
Esempio n. 40
0
        public THttpHandler(TProcessor processor, TProtocolFactory protocolFactory)
            : this(processor, protocolFactory, protocolFactory)
        {

        }
 /// <summary>
 /// Initializes a new instance of the <see cref="THttpTaskAsyncHandler"/> class
 /// using <paramref name="protocolFactory"/> for both input and output streams.
 /// </summary>
 /// <param name="processor">The async processor implementation.</param>
 /// <param name="protocolFactory">The protocol factory.</param>
 public THttpTaskAsyncHandler(TAsyncProcessor processor, TProtocolFactory protocolFactory)
     : this(processor, protocolFactory, protocolFactory)
 {
 }
        public void JaegerTraceExporter_SpansSplitToBatches_SpansIncludedInBatches(string protocolType, int maxPayloadSizeInBytes)
        {
            TProtocolFactory protocolFactory = protocolType == "Compact"
                ? new TCompactProtocol.Factory()
                : new TBinaryProtocol.Factory();
            var client = new TestJaegerClient();

            // Arrange
            using var jaegerExporter = new JaegerExporter(
                      new JaegerExporterOptions { MaxPayloadSizeInBytes = maxPayloadSizeInBytes },
                      protocolFactory,
                      client);
            jaegerExporter.SetResourceAndInitializeBatch(Resource.Empty);

            // Create six spans, each taking more space than the previous one
            var spans = new JaegerSpan[6];

            for (int i = 0; i < 6; i++)
            {
                spans[i] = CreateTestJaegerSpan(
                    additionalAttributes: new Dictionary <string, object>
                {
                    ["foo"] = new string('_', 10 * i),
                });
            }

            var protocol        = protocolFactory.GetProtocol();
            var serializedSpans = spans.Select(s =>
            {
                s.Write(protocol);
                var data = protocol.WrittenData.ToArray();
                protocol.Clear();
                return(data);
            }).ToArray();

            // Act
            var sentBatches = new List <byte[]>();

            foreach (var span in spans)
            {
                jaegerExporter.AppendSpan(span);
                var sentBatch = client.LastWrittenData;
                if (sentBatch != null)
                {
                    sentBatches.Add(sentBatch);
                    client.LastWrittenData = null;
                }
            }

            // Assert

            // Appending the six spans will send two batches with the first four spans
            Assert.Equal(2, sentBatches.Count);
            Assert.True(
                ContainsSequence(sentBatches[0], serializedSpans[0]),
                "Expected span data not found in sent batch");
            Assert.True(
                ContainsSequence(sentBatches[0], serializedSpans[1]),
                "Expected span data not found in sent batch");

            Assert.True(
                ContainsSequence(sentBatches[1], serializedSpans[2]),
                "Expected span data not found in sent batch");
            Assert.True(
                ContainsSequence(sentBatches[1], serializedSpans[3]),
                "Expected span data not found in sent batch");

            // jaegerExporter.Batch should contain the two remaining spans
            Assert.Equal(2U, jaegerExporter.NumberOfSpansInCurrentBatch);
            jaegerExporter.SendCurrentBatch();
            Assert.True(client.LastWrittenData != null);
            var serializedBatch = client.LastWrittenData;

            Assert.True(
                ContainsSequence(serializedBatch, serializedSpans[4]),
                "Expected span data not found in unsent batch");
            Assert.True(
                ContainsSequence(serializedBatch, serializedSpans[5]),
                "Expected span data not found in unsent batch");
        }
Esempio n. 43
0
 public TServer(TProcessor processor, TServerTransport serverTransport, TTransportFactory transportFactory, TProtocolFactory protocolFactory) : this(processor, serverTransport, transportFactory, transportFactory, protocolFactory, protocolFactory, new TServer.LogDelegate(TServer.DefaultLogDelegate))
 {
 }
Esempio n. 44
0
 public DefaultThriftFrameCodec(long maxFrameSize, TProtocolFactory inputProtocolFactory, ILoggerFactory loggerFactory = null)
 {
     this._decoder = new DefaultThriftFrameDecoder(maxFrameSize, inputProtocolFactory);
     this._encoder = new DefaultThriftFrameEncoder(maxFrameSize);
     _logger       = loggerFactory?.CreateLogger <DefaultThriftFrameCodec>() ?? (ILogger)NullLogger.Instance;
 }
Esempio n. 45
0
 public THttpHandler(TProcessor processor, TProtocolFactory inputProtocolFactory, TProtocolFactory outputProtocolFactory)
 {
     this.processor = processor;
     this.inputProtocolFactory = inputProtocolFactory;
     this.outputProtocolFactory = outputProtocolFactory;
 }
Esempio n. 46
0
		public TServer(TProcessor processor,
						  TServerTransport serverTransport,
						  TTransportFactory inputTransportFactory,
						  TTransportFactory outputTransportFactory,
						  TProtocolFactory inputProtocolFactory,
						  TProtocolFactory outputProtocolFactory,
						  LogDelegate logDelegate)
		{
			this.processor = processor;
			this.serverTransport = serverTransport;
			this.inputTransportFactory = inputTransportFactory;
			this.outputTransportFactory = outputTransportFactory;
			this.inputProtocolFactory = inputProtocolFactory;
			this.outputProtocolFactory = outputProtocolFactory;
			this.logDelegate = logDelegate;
		}