public void Setup()
 {
     config               = new TestConfiguration();
     clientProvider       = Substitute.For <IHTTPClientProvider>();
     timingProvider       = Substitute.For <ITimingProvider>();
     nonTerminalStateMock = Substitute.For <AbstractBeaconSendingState>(false);
 }
 public void Setup()
 {
     logger         = Substitute.For <ILogger>();
     config         = new TestConfiguration();
     clientProvider = Substitute.For <IHTTPClientProvider>();
     timingProvider = Substitute.For <ITimingProvider>();
 }
Пример #3
0
        protected OpenKit(ILogger logger,
                          OpenKitConfiguration configuration,
                          IHTTPClientProvider httpClientProvider,
                          ITimingProvider timingProvider,
                          IThreadIDProvider threadIDProvider)
        {
            if (logger.IsInfoEnabled)
            {
                //TODO: Use proper version information (incl. the build number)
                logger.Info(configuration.OpenKitType + " " + GetType().Name + " " + OpenKitConstants.DEFAULT_APPLICATION_VERSION + " instantiated");
            }
            if (logger.IsDebugEnabled)
            {
                logger.Debug(
                    "applicationName=" + configuration.ApplicationName + ", applicationID=" + configuration.ApplicationID
                    + ", deviceID=" + configuration.DeviceID + ", endpointURL=" + configuration.EndpointURL
                    );
            }
            this.configuration    = configuration;
            this.logger           = logger;
            this.timingProvider   = timingProvider;
            this.threadIDProvider = threadIDProvider;

            beaconCache        = new BeaconCache(logger);
            beaconSender       = new BeaconSender(logger, configuration, httpClientProvider, timingProvider);
            beaconCacheEvictor = new BeaconCacheEvictor(logger, beaconCache, configuration.BeaconCacheConfig, timingProvider);
        }
Пример #4
0
        public void Setup()
        {
            currentTime      = 1;
            newSessions      = new List <SessionWrapper>();
            openSessions     = new List <SessionWrapper>();
            finishedSessions = new List <SessionWrapper>();

            // http client
            httpClient = Substitute.For <IHTTPClient>();

            // provider
            timingProvider = Substitute.For <ITimingProvider>();
            timingProvider.ProvideTimestampInMilliseconds().Returns(x => { return(++currentTime); }); // every access is a tick
            httpClientProvider = Substitute.For <IHTTPClientProvider>();
            httpClientProvider.CreateClient(Arg.Any <HTTPClientConfiguration>()).Returns(x => httpClient);

            // context
            context = Substitute.For <IBeaconSendingContext>();
            context.HTTPClientProvider.Returns(x => httpClientProvider);
            context.GetHTTPClient().Returns(x => httpClient);
            context.IsCaptureOn.Returns(true);

            // beacon sender
            logger       = Substitute.For <ILogger>();
            beaconSender = new BeaconSender(logger, config, httpClientProvider, timingProvider);

            // current time getter
            context.CurrentTimestamp.Returns(x => timingProvider.ProvideTimestampInMilliseconds());

            // sessions
            context.NewSessions.Returns(newSessions);
            context.OpenAndConfiguredSessions.Returns(openSessions);
            context.FinishedAndConfiguredSessions.Returns(finishedSessions);
        }
Пример #5
0
        public void Setup()
        {
            httpClient       = Substitute.For <IHTTPClient>();
            newSessions      = new List <SessionWrapper>();
            openSessions     = new List <SessionWrapper>();
            finishedSessions = new List <SessionWrapper>();

            // provider
            timingProvider     = Substitute.For <ITimingProvider>();
            httpClientProvider = Substitute.For <IHTTPClientProvider>();
            httpClientProvider.CreateClient(Arg.Any <HTTPClientConfiguration>()).Returns(x => httpClient);

            // context
            context = Substitute.For <IBeaconSendingContext>();
            context.GetHTTPClient().Returns(httpClient);
            context.HTTPClientProvider.Returns(httpClientProvider);

            // beacon sender
            var logger = Substitute.For <ILogger>();

            beaconSender = new BeaconSender(logger, context);

            // sessions
            context.NewSessions.Returns(newSessions);
            context.OpenAndConfiguredSessions.Returns(openSessions);
            context.FinishedAndConfiguredSessions.Returns(finishedSessions);
        }
Пример #6
0
        /// <summary>
        /// Constructor
        ///
        /// Current state is initialized to <see cref="Dynatrace.OpenKit.Core.Communication."/>
        ///
        /// </summary>
        /// <param name="logger"></param>
        /// <param name="configuration"></param>
        /// <param name="httpClientProvider"></param>
        /// <param name="timingProvider"></param>
        public BeaconSendingContext(ILogger logger, OpenKitConfiguration configuration, IHTTPClientProvider httpClientProvider, ITimingProvider timingProvider)
        {
            this.logger        = logger;
            Configuration      = configuration;
            HTTPClientProvider = httpClientProvider;
            TimingProvider     = timingProvider;

            // set current state to init state
            CurrentState = new BeaconSendingInitState();
        }
Пример #7
0
        /// <summary>
        /// Constructor
        ///
        /// Current state is initialized to <see cref="Dynatrace.OpenKit.Core.Communication."/>
        ///
        /// </summary>
        /// <param name="configuration"></param>
        /// <param name="httpClientProvider"></param>
        /// <param name="timingProvider"></param>
        public BeaconSendingContext(OpenKitConfiguration configuration, IHTTPClientProvider httpClientProvider, ITimingProvider timingProvider)
        {
            Configuration      = configuration;
            HTTPClientProvider = httpClientProvider;
            TimingProvider     = timingProvider;

            // set time sync supported to true
            IsTimeSyncSupported = true;
            // set last time sync time to -1
            LastTimeSyncTime = -1;

            // set current state to init state
            CurrentState = new BeaconSendingInitState();
        }
Пример #8
0
        protected OpenKit(ILogger logger,
                          OpenKitConfiguration configuration,
                          IHTTPClientProvider httpClientProvider,
                          ITimingProvider timingProvider,
                          IThreadIDProvider threadIDProvider)
        {
            this.configuration    = configuration;
            this.logger           = logger;
            this.timingProvider   = timingProvider;
            this.threadIDProvider = threadIDProvider;

            beaconCache        = new BeaconCache();
            beaconSender       = new BeaconSender(configuration, httpClientProvider, timingProvider);
            beaconCacheEvictor = new BeaconCacheEvictor(logger, beaconCache, configuration.BeaconCacheConfig, timingProvider);
        }
Пример #9
0
        public void Setup()
        {
            currentTime      = 1;
            lastTimeSyncTime = 1;
            newSessions      = new List <SessionWrapper>();
            openSessions     = new List <SessionWrapper>();
            finishedSessions = new List <SessionWrapper>();

            // http client
            httpClient = Substitute.For <IHTTPClient>();

            // provider
            timingProvider = Substitute.For <ITimingProvider>();
            timingProvider.ProvideTimestampInMilliseconds().Returns(x => { return(++currentTime); }); // every access is a tick
            httpClientProvider = Substitute.For <IHTTPClientProvider>();
            httpClientProvider.CreateClient(Arg.Any <HTTPClientConfiguration>()).Returns(x => httpClient);

            // context
            context = Substitute.For <IBeaconSendingContext>();
            context.HTTPClientProvider.Returns(x => httpClientProvider);
            context.GetHTTPClient().Returns(x => httpClient);
            context.LastTimeSyncTime.Returns(x => currentTime); // always return the current time to prevent re-sync
            context.IsCaptureOn.Returns(true);

            // beacon sender
            var logger = Substitute.For <ILogger>();

            beaconSender = new BeaconSender(logger, config, httpClientProvider, timingProvider);

            // return true by default
            context.IsTimeSyncSupported.Returns(true);

            // current time getter
            context.CurrentTimestamp.Returns(x => timingProvider.ProvideTimestampInMilliseconds());

            // last time sycn getter + setter
            context.LastTimeSyncTime = Arg.Do <long>(x => lastTimeSyncTime = x);
            context.LastTimeSyncTime = lastTimeSyncTime;

            // sessions
            context.NewSessions.Returns(newSessions);
            context.OpenAndConfiguredSessions.Returns(openSessions);
            context.FinishedAndConfiguredSessions.Returns(finishedSessions);
        }
Пример #10
0
        /// <summary>
        /// send current state of Beacon
        /// </summary>
        /// <param name="httpClientProvider"></param>
        /// <param name="numRetries"></param>
        /// <returns></returns>
        public StatusResponse Send(IHTTPClientProvider httpClientProvider)
        {
            var            httpClient = httpClientProvider.CreateClient(httpConfiguration);
            StatusResponse response   = null;

            while (true)
            {
                // prefix for this chunk - must be built up newly, due to changing timestamps
                var prefix = basicBeaconData + BEACON_DATA_DELIMITER + CreateTimestampData();
                // subtract 1024 to ensure that the chunk does not exceed the send size configured on server side?
                // i guess that was the original intention, but i'm not sure about this
                // TODO stefan.eberl - This is a quite uncool algorithm and should be improved, avoid subtracting some "magic" number
                var chunk = beaconCache.GetNextBeaconChunk(sessionNumber, prefix, configuration.MaxBeaconSize - 1024, BEACON_DATA_DELIMITER);
                if (string.IsNullOrEmpty(chunk))
                {
                    // no data added so far or no data to send
                    return(response);
                }

                byte[] encodedBeacon = Encoding.UTF8.GetBytes(chunk);

                // send the request
                response = httpClient.SendBeaconRequest(clientIPAddress, encodedBeacon);
                if (response == null)
                {
                    // error happened - but don't know what exactly
                    // reset the previously retrieved chunk (restore it in internal cache) & retry another time
                    beaconCache.ResetChunkedData(sessionNumber);
                    break;
                }
                else
                {
                    // worked -> remove previously retrieved chunk from cache
                    beaconCache.RemoveChunkedData(sessionNumber);
                }
            }

            return(response);
        }
        public void Setup()
        {
            httpClient       = Substitute.For <IHTTPClient>();
            finishedSessions = new Queue <Session>();
            openSessions     = new List <Session>();

            // provider
            timingProvider     = Substitute.For <ITimingProvider>();
            httpClientProvider = Substitute.For <IHTTPClientProvider>();
            httpClientProvider.CreateClient(Arg.Any <HTTPClientConfiguration>()).Returns(x => httpClient);

            // context
            context = Substitute.For <IBeaconSendingContext>();
            context.GetHTTPClient().Returns(httpClient);
            context.HTTPClientProvider.Returns(httpClientProvider);

            // beacon sender
            beaconSender = new BeaconSender(context);

            // sessions
            context.GetAllOpenSessions().Returns(openSessions);
            context.GetNextFinishedSession().Returns(x => (finishedSessions.Count == 0) ? null : finishedSessions.Dequeue());
        }
Пример #12
0
 // sends the current Beacon state
 public StatusResponse SendBeacon(IHTTPClientProvider clientProvider)
 {
     return(beacon.Send(clientProvider));
 }
Пример #13
0
 public BeaconSender(ILogger logger, OpenKitConfiguration configuration, IHTTPClientProvider clientProvider, ITimingProvider provider)
     : this(logger, new BeaconSendingContext(logger, configuration, clientProvider, provider))
 {
 }
Пример #14
0
 public BeaconSender(OpenKitConfiguration configuration, IHTTPClientProvider clientProvider, ITimingProvider provider)
     : this(new BeaconSendingContext(configuration, clientProvider, provider))
 {
 }
Пример #15
0
 /// <summary>
 /// Send Beacon.
 /// </summary>
 /// <param name="httpClientProvider"></param>
 /// <returns></returns>
 internal StatusResponse SendBeacon(IHTTPClientProvider httpClientProvider)
 {
     return(Session.SendBeacon(httpClientProvider));
 }