Example #1
0
 public TestBase()
 {
     s_log         = new StringBuilder();
     _traceWrapper = new TraceWrapper();
     _laserCondig  = new LaserConfig();
     Log.AppendLine("TestBase.TestBase()");
 }
Example #2
0
        private async Task ProcessMessageAsync(ExecutionEvent message)
        {
            try
            {
                LastMessageTime = DateTime.UtcNow;

                if (message.Header.MessageType != MessageType.Order)
                {
                    return;
                }

                string walletId = await _settingsService.GetWalletIdAsync();

                Order[] orders = message.Orders
                                 .Where(o => o.WalletId == walletId)
                                 .Where(o => o.Side != OrderSide.UnknownOrderSide)
                                 .Where(o => o.Trades?.Count > 0)
                                 .ToArray();

                _log.InfoWithDetails("Trades received", new { Count = orders.Length });

                if (orders.Any())
                {
                    await TraceWrapper.TraceExecutionTimeAsync("Trades handling", () => ExecuteAsync(orders), _log);

                    _log.InfoWithDetails("Trades handled", orders);
                }
            }
            catch (Exception exception)
            {
                _log.Error(exception, "An error occurred while processing trades", message);
                throw;
            }
        }
Example #3
0
        public async Task RegisterAsync(IReadOnlyCollection <InternalTrade> internalTrades)
        {
            foreach (IGrouping <string, InternalTrade> group in internalTrades.GroupBy(o => o.AssetPairId))
            {
                DateTime lastTradeTime = group.Max(o => o.Time);

                _internalLastInternalTradeTime.AddOrUpdate(group.Key, lastTradeTime,
                                                           (assetPairId, time) => lastTradeTime);
            }

            foreach (InternalTrade internalTrade in internalTrades)
            {
                await TraceWrapper.TraceExecutionTimeAsync("Inserting internal trade to the Azure storage",
                                                           () => _internalTradeRepository.InsertAsync(internalTrade), _log);

                try
                {
                    await TraceWrapper.TraceExecutionTimeAsync("Inserting internal trade to the Postgres storage",
                                                               () => _internalTradeRepositoryPostgres.InsertAsync(internalTrade), _log);
                }
                catch (Exception exception)
                {
                    _log.ErrorWithDetails(exception,
                                          "An error occurred while inserting internal trade to the Postgres DB", internalTrade);
                }
            }
        }
Example #4
0
        private void AddToBuffer(TraceWrapper trace)
        {
            // le lock va empiler les appelants (mais c'est ce que l'on souhaite)
            lock (_key)
            {
                if (_buffer.IsAddingCompleted || _buffer.TryAdd(trace))
                {
                    return;
                }
            }

            // l'appel temporisé n'est pas locké et gère donc le catch des ajout alors que la collection a été marquée comme terminée (CompleteAdding = true)
            // ReSharper disable InconsistentlySynchronizedField => pas de lock pour ce cas car on ne souhaite pas bloquer le completeAdding aussi.
            try
            {
                // sinon, on envoie un évènement pour signaler que l'ajout n'a pu être fait immédiatement et on retente avec un temps d'attente
                RaiseSentTraces(ListenerHelpers.GetExceptionArray($"impossible d'ajouter immédiatement le message {trace.Message}: buffer plein : {_buffer.Count}"));
                if (!_buffer.TryAdd(trace, _maxTimeoutForFullBuffer))
                {
                    // Dans le cas où l'on ne peut pas insérer une trace à la fin du timeout, on lance une exception
                    throw new ArgumentException(
                              $@"ERROR: Max timeout for trace insertion in buffer reached ({_maxTimeoutForFullBuffer.TotalMilliseconds} ms)");
                }
            }
            catch (InvalidOperationException e)
            {
                RaiseSentTraces(ListenerHelpers.GetExceptionArray($"InvalidOperationException (cas du buffer où CompleteAdding = true par exemple) dans les traces. {e}"));
            }
            // ReSharper restore InconsistentlySynchronizedField
        }
Example #5
0
        public unsafe void Run(Func <uint> statusCallback)
        {
            Logger.Write($"Initializing fuzzing monitor");

            var traceBuffer  = new byte[Fuzzer.MapSize];
            var locations    = new ConcurrentDictionary <string, ConcurrentDictionary <int, int> >();
            var getLocations = false;

            fixed(byte *traceArea = traceBuffer)
            using (var traceWrapper = new TraceWrapper(
                       traceArea,
                       (i, s) => {
                if (getLocations)
                {
                    var entry = locations.GetOrAdd(s, new ConcurrentDictionary <int, int>());
                    entry.GetOrAdd(i, 1);
                }
            }))
            {
                var ctrlSocket = new ControlSocket.Server(_controlPort);
                Logger.Write($"Server listening");

                while (ctrlSocket.WaitConnection())
                {
                    Logger.Write($"Client connected");
                    try
                    {
                        while (ctrlSocket.ProcessStartTest(
                                   (collectLocations) =>
                        {
                            getLocations = collectLocations;
                            locations.Clear();
                            traceWrapper.ResetPrevLocation();
                            traceBuffer.Initialize();
                            Logger.Write($"State was reset");
                        }))
                        {
                            Logger.Write($"Gathering state");
                            ctrlSocket.ProcessGetStatus((out byte[] c, out string l) =>
                            {
                                Logger.Write($"Reporting state");
                                c = new byte[traceBuffer.Length];
                                traceBuffer.CopyTo(c, 0);
                                l = string.Join(Environment.NewLine,
                                                locations.Select((i) => $"{i.Key};{i.Value.Count}"));
                                return((int)statusCallback());
                            });
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Write($"Client communication error: {e.ToString()}");
                        ctrlSocket.Abort();
                    }
                }
            }
        }
Example #6
0
        public static IList <object> CreateDriver(string configuration, TraceWrapper traceWrapper)
        {
            Driver driver = new Driver();

            driver.Initialize(configuration, traceWrapper);
            return(new List <object>()
            {
                driver as IDevice
            });
        }
Example #7
0
        public void Initialize(string configuration, TraceWrapper traceWrapper)
        {
            try
            {
                _laserConfig  = LaserConfig.LoadFromXml <LaserConfig>(configuration);
                _traceWrapper = traceWrapper;

                _traceWrapper.WriteInformation("Laser initialization start.");
                _traceWrapper.WriteVerbose(string.Format("Configuration: {0}", configuration));

                _telegram = new TelegramsOperating(_laserConfig.IPAddress, 2111, traceWrapper);
                _telegram.ConnectingSuccessed    += new ConnectingSuccessedEventHandler(on_ConnectingSuccessed);
                _telegram.ConnectingFailed       += new ConnectingFailedEventHandler(on_ConnectingFailed);
                _telegram.CommandReceivingFailed += new CommandReceivingFailedEventHandler(on_CommandReceivingFailed);
                _telegram.CommandSendingFailed   += new CommandSendingFailedEventHandler(on_CommandSendingFailed);
                _telegram.Sopas_Error_CMD        += new EventHandler <SopasErrorEventArgs>(on_SopasError);
                _telegram.SetAccessMode_CMD      += new EventHandler <SetAccessModeEventArgs>(on_SetAccessMode);
                _telegram.LSPsetdatetime_CMD     += new EventHandler <LSPsetdatetimeEventArgs>(on_LSPsetdatetime);
                _telegram.Run_CMD            += new EventHandler <RunEventArgs>(on_Run);
                _telegram.LMDscandataE_CMD   += new EventHandler <LMDscandataEEventArgs>(on_LMDscandataE);
                _telegram.LMDscandata_CMD    += new EventHandler <LMDscandataEventArgs>(on_LMDscandata);
                _telegram.mSCreboot_CMD      += new EventHandler <mSCrebootEventArgs>(on_mSCreboot);
                _telegram.mDOSetOutput_CMD   += new EventHandler <mDOSetOutputEventArgs>(on_mDOSetOutput);
                _telegram.mLMPsetscancfg_CMD += new EventHandler <mLMPsetscancfgEventArgs>(on_mLMPsetscancfg);
                _telegram.LMDscandatacfg_CMD += new EventHandler <LMDscandatacfgEventArgs>(on_LMDscandatacfg);
                _telegram.DeviceIdent_CMD    += new EventHandler <DeviceIdentEventArgs>(on_DeviceIdent);

                Run_CMD = start_Run;
                SetAccessMode_client_CMD      = start_SetAccessMode_client;
                SetAccessMode_maintenance_CMD = start_SetAccessMode_maintenance;
                SetAccessMode_service_CMD     = start_SetAccessMode_service;
                LSPsetdatetime_CMD            = start_LSPsetdatetime;
                LMDscandata_E_CMD             = start_LMDscandata_E;
                mSCreboot_CMD      = start_mSCreboot;
                mDOSetOutput_CMD   = start_mDOSetOutput;
                mLMPsetscancfg_CMD = start_mLMPsetscancfg;
                LMDscandatacfg_CMD = start_LMDscandatacfg;
                DeviceIdent_CMD    = start_DeviceIdent;
                if ((_laserConfig.TriggerOutputChannelNumber > 0) && (_laserConfig.TriggerOutputChannelNumber < 7))
                {
                    _maskDigitalOutputs = (byte)(1 << (_laserConfig.TriggerOutputChannelNumber - 1));
                }
                else
                {
                    _maskDigitalOutputs = (byte)(1);
                }
                _isInitialized = true;
                ErrorStateCounter.PrintPropertiesSettings();
                _traceWrapper.WriteInformation("Laser initialization end.");
            }
            catch (Exception ex)
            {
                _traceWrapper.WriteError(new ApplicationException("Unhandled exception in LaserDriver.Initialize()", ex));
            }
        }
Example #8
0
        public async Task RegisterAsync(ExternalTrade externalTrade)
        {
            await TraceWrapper.TraceExecutionTimeAsync("Inserting external trade to the Azure storage",
                                                       () => _externalTradeRepository.InsertAsync(externalTrade), _log);

            try
            {
                await TraceWrapper.TraceExecutionTimeAsync("Inserting external trade to the Postgres storage",
                                                           () => _externalTradeRepositoryPostgres.InsertAsync(externalTrade), _log);
            }
            catch (Exception exception)
            {
                _log.ErrorWithDetails(exception,
                                      "An error occurred while inserting external trade to the Postgres DB", externalTrade);
            }
        }
Example #9
0
        public void TraceWarningPassesThrough()
        {
            var target = new System.IO.StringWriter();
            TextWriterTraceListener listener = new TextWriterTraceListener();

            listener.Writer = target;

            string expected = "some message";

            Trace.Listeners.Add(listener);

            ITrace tested = new TraceWrapper();

            tested.TraceWarning(expected);

            Assert.IsTrue(target.ToString().Contains(expected));
        }
Example #10
0
        public async Task <InstanceDiscoveryMetadataEntry> GetMetadataEntryAsync(
            Uri authority,
            RequestContext requestContext)
        {
            bool foundInCache = TryGetValue(authority.Host, out var entry);

            TraceWrapper.WriteLine("GetMetadataEntryAsync - response from cache? " + foundInCache);

            if (!foundInCache)
            {
                await DoInstanceDiscoveryAndCacheAsync(authority, requestContext).ConfigureAwait(false);

                TryGetValue(authority.Host, out entry);
            }

            return(entry);
        }
        public async Task OpenAsync(IReadOnlyCollection <InternalTrade> internalTrades)
        {
            var startedAt = DateTime.UtcNow;

            var positions = new List <Position>();

            foreach (InternalTrade internalTrade in internalTrades)
            {
                Instrument instrument = await _instrumentService.FindAsync(internalTrade.AssetPairId);

                if (instrument == null)
                {
                    _log.WarningWithDetails("Can not open position. Unknown instrument.", internalTrade);
                    continue;
                }

                if (internalTrade.AssetPairId != instrument.AssetPairId)
                {
                    CrossInstrument crossInstrument = instrument.CrossInstruments
                                                      .Single(o => o.AssetPairId == internalTrade.AssetPairId);

                    Quote quote = await _quoteService.GetAsync(crossInstrument.QuoteSource,
                                                               crossInstrument.ExternalAssetPairId);

                    if (quote != null)
                    {
                        decimal price = internalTrade.Type == TradeType.Sell
                            ? Calculator.CalculateDirectSellPrice(internalTrade.Price, quote, crossInstrument.IsInverse)
                            : Calculator.CalculateDirectBuyPrice(internalTrade.Price, quote, crossInstrument.IsInverse);

                        var position = Position.Open(instrument.AssetPairId, price, internalTrade.Price,
                                                     internalTrade.Volume, quote, crossInstrument.AssetPairId, internalTrade.Type,
                                                     internalTrade.Id);

                        positions.Add(position);
                    }
                    else
                    {
                        _log.WarningWithDetails("Can not open position. No quote.", internalTrade);
                    }
                }
                else
                {
                    var position = Position.Open(instrument.AssetPairId, internalTrade.Price, internalTrade.Volume,
                                                 internalTrade.Type, internalTrade.Id);

                    positions.Add(position);
                }
            }

            await _tradeService.RegisterAsync(internalTrades);

            foreach (Position position in positions)
            {
                await TraceWrapper.TraceExecutionTimeAsync("Inserting position to the Azure storage",
                                                           () => _positionRepository.InsertAsync(position), _log);

                await TraceWrapper.TraceExecutionTimeAsync("Inserting open position to the Azure storage",
                                                           () => _openPositionRepository.InsertAsync(position), _log);

                try
                {
                    await TraceWrapper.TraceExecutionTimeAsync("Inserting position to the Postgres storage",
                                                               () => _positionRepositoryPostgres.InsertAsync(position), _log);
                }
                catch (Exception exception)
                {
                    _log.ErrorWithDetails(exception, "An error occurred while inserting position to the Postgres DB",
                                          position);
                }

                await TraceWrapper.TraceExecutionTimeAsync("Updating summary report in the Azure storage",
                                                           () => _summaryReportService.RegisterOpenPositionAsync(position,
                                                                                                                 internalTrades.Where(o => o.Id == position.TradeId).ToArray()), _log);

                _log.InfoWithDetails("Position opened", position);
            }

            var finishedAt = DateTime.UtcNow;

            _log.Info("PositionService.OpenAsync() completed.", new
            {
                PositionsCount = positions.Count,
                TradeIds       = positions.Select(x => x.TradeId).ToList(),
                StartedAt      = startedAt,
                FinishedAt     = finishedAt,
                Latency        = (finishedAt - startedAt).TotalMilliseconds
            });
        }
Example #12
0
        public void Initialize()
        {
            TraceWrapper   _traceWrapper = new TraceWrapper();
            string         _laserConfig  = getLaserConfig();
            IList <object> _laserDevices = Brace.Shared.DeviceDrivers.LMS511Laser.DriverFactory.CreateDriver(_laserConfig, _traceWrapper);

            laserDevice = ((IDevice)_laserDevices[0]);
            EventHandler <StatusChangeEventArgs> _statusHandler = (sender, e) =>
            {
                if (StatusComponentEvent != null)
                {
                    if ((e.OldValue != null) && (e.OldValue.DisplayValue != null))
                    {
                        StatusComponentEvent(e.NewValue.DisplayValue + " ; old Msg: " + e.OldValue.DisplayValue + " ; date: " + e.TimeReached.ToUniversalTime());
                    }
                    else
                    {
                        StatusComponentEvent(e.NewValue.DisplayValue + " ; date: " + e.TimeReached.ToUniversalTime());
                    }
                }
            };
            EventHandler <RaisingEdgeEventArgs> _raisingedgeHandler = (sender, e) =>
            {
                StatusComponentEvent(e.Raising.ToString() + " ; date: " + e.TimeReached.ToUniversalTime());
                // _traceWrapper.WriteInformation("Raising: " + e.Raising.ToString() + " ; date: " + e.TimeReached.ToUniversalTime());
            };
            EventHandler <FallingEdgeEventArgs> _fallingedgeHandler = (sender, e) =>
            {
                StatusComponentEvent(e.Falling.ToString() + " ; date: " + e.TimeReached.ToUniversalTime());
                //_traceWrapper.WriteInformation("FallingEdge: " + e.Falling.ToString() + " ; date: " + e.TimeReached.ToUniversalTime());
            };
            EventHandler <ScanDataEventArgs> _scandataHandler = (sender, e) =>
            {
                //  string sTemp = "";
                //string msg = "\nScandata -----------------------------------------------";
                string msg = "\nVersion Number: " + e.ScanData.versionNumber.ToString();
                msg += "\nDevice Number: " + e.ScanData.deviceNumber.ToString();
                msg += "\nSerial Number: " + e.ScanData.serialNumber.ToString();
                msg += "\nDevice Status: " + e.ScanData.deviceStatus.ToString();
                msg += "\nTelegram Counter: " + e.ScanData.telegramCounter.ToString();
                msg += "\nScan Counter: " + e.ScanData.scanCounter.ToString();
                msg += "\nTime Since Start Up: " + e.ScanData.timeSinceStartUp.ToString();
                msg += "\nTime Of Transmission: " + e.ScanData.timeOfTransmission.ToString();
                msg += "\nDig. Input : " + String.Format("{0:X}", e.ScanData.statusOfDigitalInputs);
                msg += "\nDig. Output: " + String.Format("{0:X}", e.ScanData.statusOfDigitalOutputs);
                msg += "\nScan frequency: " + ((e.ScanData.scanFrequency) / 100).ToString();
                msg += "\nMeasurement frequency: " + e.ScanData.measurementFrequency.ToString();
                msg += "\nAmount of Encoder: " + e.ScanData.amountOfEncoder.ToString();
                if (e.ScanData.amountOfEncoder != 0)
                {
                    msg += "\nEncoderPosition: " + e.ScanData.encoderPosition.ToString();
                    msg += "\nEncoder Speed: " + e.ScanData.encoderSpeed.ToString();
                }
                msg += "\nAmount of 16 Bit Channels: " + e.ScanData.amountOf16BitChannels.ToString();
                if (e.ScanData.amountOf16BitChannels > 0)
                {
                    msg += "\nContent: " + e.ScanData.content16;
                    msg += "\nScale factor: " + e.ScanData.scaleFactor16.ToString();
                    msg += "\nScale factor offset: " + e.ScanData.scaleFactorOffset16.ToString();
                    msg += "\nStart angle: " + (e.ScanData.startAngle16 / 10000).ToString();
                    msg += "\nSteps: " + (e.ScanData.steps16 / 10000).ToString();
                    msg += "\nAmount of Data: " + e.ScanData.amountOfData16.ToString();
                    msg += "\nData0 .. DataN: NOW do not show!";

                    /*  for (int ii = 0; ii < e.ScanData.amountOfData16; ii++)
                     * {
                     *    if (((ii % 8) != 0) || (ii == 0))
                     *    {
                     *        sTemp += e.ScanData.data16[ii].ToString("D5") + ", ";
                     *    }
                     *    else
                     *    {
                     *        if (ii == 8)
                     *            msg += "\n";
                     *        else
                     *            msg += "\n" + sTemp + e.ScanData.data16[ii].ToString("D5");
                     *        sTemp = "";
                     *    }
                     * }*/
                }
                msg += "\nAmount of 8 Bit Channels: " + e.ScanData.amountOf8BitChannels.ToString();
                if (e.ScanData.amountOf8BitChannels > 0)
                {
                    msg += "\nContent: " + e.ScanData.content8;
                    msg += "\nScale factor: " + e.ScanData.scaleFactor8.ToString();
                    msg += "\nScale factor offset: " + e.ScanData.scaleFactorOffset8.ToString();
                    msg += "\nStart angle: " + (e.ScanData.startAngle8 / 10000).ToString();
                    msg += "\nSteps: " + (e.ScanData.steps8 / 10000).ToString();
                    msg += "\nAmount of Data: " + e.ScanData.amountOfData8.ToString();
                    msg += "\nData0 .. DataN: NOW do not show!";

                    /*   for (int ii = 0; ii < e.ScanData.amountOfData8; ii++)
                     * {
                     *     if (((ii % 8) != 0) || (ii == 0))
                     *     {
                     *         sTemp += e.ScanData.data16[ii].ToString("D5") + ", ";
                     *     }
                     *     else
                     *     {
                     *         if (ii == 8)
                     *             msg += "\n";
                     *         else
                     *             msg += "\n" + sTemp + e.ScanData.data8[ii].ToString("D5");
                     *         sTemp = "";
                     *     }
                     * }*/
                }
                msg += "\nPosition: " + e.ScanData.position.ToString();
                msg += "\nDevice Name enabled: " + e.ScanData.nameMode.ToString();
                if (e.ScanData.nameMode != 0)
                {
                    msg += "\nLength of Name: " + e.ScanData.nameLength.ToString();
                    msg += "\nDevice Name: " + e.ScanData.name;
                }
                msg += "\nComment: " + e.ScanData.comment.ToString();
                msg += "\nTime enabled: " + e.ScanData.timeMode.ToString();
                if (e.ScanData.timeMode != 0)
                {
                    msg += "\nTime: " + e.ScanData.timeYear.ToString("D4") + ":" + e.ScanData.timeMonth.ToString("D2") + ":" + e.ScanData.timeDay.ToString("D2") + " " + e.ScanData.timeHour.ToString("D2") + ":" + e.ScanData.timeMinute.ToString("D2") + ":" + e.ScanData.timeSecund.ToString("D2") + ":" + e.ScanData.timeUsecund.ToString("D4");
                }
                ScanResultComponentEvent(msg + "\nDate time: " + e.TimeReached.ToUniversalTime());
            };

            laserDevice.StatusChange += _statusHandler;
            ((ITriggerProvider)laserDevice).RaisingEdge    += _raisingedgeHandler;
            ((ITriggerProvider)laserDevice).FallingEdge    += _fallingedgeHandler;
            ((IScanDataReceiver)laserDevice).ScanDataEvent += _scandataHandler;
        }
Example #13
0
        public static IList <object> CreateDriverInstance(DeviceType deviceType, string configuration, TraceWrapper traceWrapper)
        {
            switch (deviceType)
            {
            case DeviceType.LMS511Laser:
                return(Brace.Shared.DeviceDrivers.LMS511Laser.DriverFactory.CreateDriver(configuration, traceWrapper));

            case DeviceType.FTPServer:
                break;

            default:
                break;
            }

            throw new InvalidDeviceTypeException(String.Format("Device type {0} is invalid. There is no such registered device type.", deviceType), null);
        }