Beispiel #1
0
 public LogBufferItemKey(
     XEventsExportSettings.LogSourceSettings setting,
     DateTime period,
     string logFile)
 {
     Settings = setting;
     Period   = period;
     LogFile  = logFile;
 }
Beispiel #2
0
        public async Task <ExtendedEventsPosition> GetLastPosition(
            XEventsExportSettings.LogSourceSettings logSettings,
            string directoryName)
        {
            ExtendedEventsPosition position = null;

            if (LogPositions.TryGetValue(logSettings, out ConcurrentDictionary <string, ExtendedEventsPosition> settingPositions))
            {
                settingPositions.TryGetValue(directoryName, out position);
            }

            return(position);
        }
        private async Task LogExportJob(
            XEventsExportSettings.LogSourceSettings settings,
            CancellationToken cancellationToken)
        {
            while (true)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    break;
                }
                bool bufferBlocked = (_logBuffers.TotalItemsCount >= _settings.Export.Buffer.MaxBufferSizeItemsCount);

                try
                {
                    if (!bufferBlocked)
                    {
                        using (XEventExportMaster exporter = new XEventExportMaster(
                                   OnSend, null, OnErrorExportDataToBuffer
                                   ))
                        {
                            exporter.SetXEventsPath(settings.SourcePath);

                            var target = new ExtendedEventsOnBuffer(_logBuffers, settings.Portion);
                            target.SetLogSettings(settings);

                            exporter.SetTarget(target);
                            await exporter.StartSendEventsToStorage(cancellationToken);
                        }
                    }

                    if (bufferBlocked)
                    {
                        await Task.Delay(100, cancellationToken);
                    }
                    else if (_settings.WatchMode.Use)
                    {
                        await Task.Delay(_settings.WatchMode.Periodicity, cancellationToken);
                    }
                    else
                    {
                        break;
                    }
                }
                catch (Exception e)
                {
                    RaiseOnError(new OnErrorExportSharedBufferEventArgs(
                                     new ExportSharedBufferException("Log export job failed.", e, settings)));
                    await Task.Delay(60000, cancellationToken);
                }
            }
        }
Beispiel #4
0
        public async Task SaveLogsAndPosition(
            XEventsExportSettings.LogSourceSettings logSettings,
            ExtendedEventsPosition position,
            IList <XEventData> rowsData
            )
        {
            if (position == null)
            {
                return;
            }

            lock (logSettings.LockObject)
            {
                var logFileInfo = new FileInfo(position.CurrentFileData);
                SaveLogs(logSettings, position, rowsData, logFileInfo);
            }
        }
Beispiel #5
0
        private void SaveLogs(
            XEventsExportSettings.LogSourceSettings logSettings,
            ExtendedEventsPosition position,
            IList <XEventData> rowsData,
            FileInfo logFileInfo)
        {
            var newBufferItem = new LogBufferItem();

            newBufferItem.LogPosition = position;
            foreach (var rowData in rowsData)
            {
                newBufferItem.LogRows.TryAdd(new EventKey()
                {
                    Id   = Guid.NewGuid(),
                    File = logFileInfo
                }, rowData);
            }

            LogBuffer.TryAdd(new LogBufferItemKey(logSettings, DateTime.UtcNow, logFileInfo.FullName),
                             newBufferItem);

            LogPositions.AddOrUpdate(logSettings,
                                     (settings) =>
            {
                var newPositions = new ConcurrentDictionary <string, ExtendedEventsPosition>();
                newPositions.AddOrUpdate(logFileInfo.Name,
                                         (fileName) => position,
                                         (fileName, oldPosition) => position);
                return(newPositions);
            },
                                     (settings, logBufferItem) =>
            {
                logBufferItem.AddOrUpdate(logFileInfo.Name,
                                          (fileName) => position,
                                          (fileName, oldPosition) => position);
                return(logBufferItem);
            });
        }
Beispiel #6
0
 public void SetLogSettings(XEventsExportSettings.LogSourceSettings logSettings)
 {
     _logSettings = logSettings;
 }
Beispiel #7
0
 public ExportSharedBufferException(string message, Exception innerException, XEventsExportSettings.LogSourceSettings settings)
     : base(message, innerException)
 {
     Settings = settings;
 }