Пример #1
0
        public async Task RotateAsyncTest_Remove13days()
        {
            string eventLogsTempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString(), "test_eventlogs");

            Directory.CreateDirectory(eventLogsTempPath);

            DateTime now = DateTime.UtcNow;

            await WriteEventLog(eventLogsTempPath, "test-01.log", epoch : now.AddDays(-12).ToUnixEpoch());
            await WriteEventLog(eventLogsTempPath, "test-02.log", epoch : now.AddDays(-13).ToUnixEpoch());
            await WriteEventLog(eventLogsTempPath, "test-03.log", epoch : now.AddDays(-14).ToUnixEpoch());
            await WriteEventLog(eventLogsTempPath, "test-04.log", epoch : now.AddDays(-15).ToUnixEpoch());

            _mockLocalPathService.SetupGet(x => x.EventLogDirPath).Returns(eventLogsTempPath);

            await Task.Delay(1500);

            EventLogRepository unitUnderTest = CreateRepository();
            await unitUnderTest.RotateAsync(13 * 24 * 60 * 60);

            _mockLoggerService.Verify(x => x.Info(It.Is <string>(x => x.StartsWith("file:")), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()), Times.Exactly(4));
            _mockLoggerService.Verify(x => x.Info("Delete", It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()), Times.Exactly(3));
            _mockLoggerService.Verify(x => x.Info("Keep", It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()), Times.Once());
            _mockLoggerService.Verify(x => x.Exception(It.IsAny <string>(), It.IsAny <Exception>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()), Times.Never());

            Assert.True(File.Exists(Path.Combine(eventLogsTempPath, "test-01.log")));
            Assert.False(File.Exists(Path.Combine(eventLogsTempPath, "test-02.log")));
            Assert.False(File.Exists(Path.Combine(eventLogsTempPath, "test-03.log")));
            Assert.False(File.Exists(Path.Combine(eventLogsTempPath, "test-04.log")));

            Directory.Delete(eventLogsTempPath, true);
        }
Пример #2
0
        public RemoteTaskQueue(ILog logger,
                               ISerializer serializer,
                               IGlobalTime globalTime,
                               ICassandraCluster cassandraCluster,
                               IRtqSettings rtqSettings,
                               IRtqTaskDataRegistry taskDataRegistry,
                               IRtqProfiler rtqProfiler)
        {
            QueueKeyspace    = rtqSettings.QueueKeyspace;
            TaskTtl          = rtqSettings.TaskTtl;
            Logger           = logger.ForContext("CassandraDistributedTaskQueue");
            Serializer       = serializer;
            GlobalTime       = globalTime;
            TaskDataRegistry = taskDataRegistry;
            enableContinuationOptimization = rtqSettings.EnableContinuationOptimization;
            minTicksHolder             = new RtqMinTicksHolder(cassandraCluster, rtqSettings);
            TaskMinimalStartTicksIndex = new TaskMinimalStartTicksIndex(cassandraCluster, serializer, rtqSettings, new OldestLiveRecordTicksHolder(minTicksHolder), Logger);
            var taskMetaStorage = new TaskMetaStorage(cassandraCluster, serializer, rtqSettings, Logger);

            EventLogRepository       = new EventLogRepository(serializer, cassandraCluster, rtqSettings, minTicksHolder);
            childTaskIndex           = new ChildTaskIndex(cassandraCluster, rtqSettings, serializer, taskMetaStorage);
            HandleTasksMetaStorage   = new HandleTasksMetaStorage(taskMetaStorage, TaskMinimalStartTicksIndex, EventLogRepository, GlobalTime, childTaskIndex, taskDataRegistry, Logger);
            TaskDataStorage          = new TaskDataStorage(cassandraCluster, rtqSettings, Logger);
            TaskExceptionInfoStorage = new TaskExceptionInfoStorage(cassandraCluster, serializer, rtqSettings, Logger);
            HandleTaskCollection     = new HandleTaskCollection(HandleTasksMetaStorage, TaskDataStorage, TaskExceptionInfoStorage, rtqProfiler);
            lazyRemoteLockCreator    = new Lazy <IRemoteLockCreator>(() =>
            {
                var remoteLockImplementationSettings = CassandraRemoteLockImplementationSettings.Default(rtqSettings.QueueKeyspace, RtqColumnFamilyRegistry.LocksColumnFamilyName);
                var remoteLockImplementation         = new CassandraRemoteLockImplementation(cassandraCluster, serializer, remoteLockImplementationSettings);
                var remoteLockerMetrics = new RemoteLockerMetrics($"{rtqSettings.QueueKeyspace}_{RtqColumnFamilyRegistry.LocksColumnFamilyName}");
                return(new RemoteLocker(remoteLockImplementation, remoteLockerMetrics, Logger));
            });
            Profiler = rtqProfiler;
        }
Пример #3
0
 public EventLog(ISessionContext sessionContext, BranchContext branchContext, IHttpContextAccessor accessor, EventLogRepository repository)
 {
     _sessionContext = sessionContext;
     _branchContext  = branchContext;
     _accessor       = accessor;
     _repository     = repository;
 }
Пример #4
0
 public EventLogController(EventLogRepository repository, ISessionContext sessionContext,
                           BranchContext branchContext, EventLogExcelBuilder excelBuilder, IStorage storage)
 {
     _repository     = repository;
     _sessionContext = sessionContext;
     _branchContext  = branchContext;
     _excelBuilder   = excelBuilder;
     _storage        = storage;
 }
Пример #5
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            _Repository = new EventLogRepository(MTApp.CurrentRequestContext);

            if (!Page.IsPostBack)
            {
                LoadEventsByCriteria();
            }
        }
Пример #6
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            _Repository = new EventLogRepository(MTApp.CurrentRequestContext);

            if (!Page.IsPostBack)
            {
                LoadEventsByCriteria();
            }            
        }
Пример #7
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (_repository != null)
         {
             _repository.Dispose();
             _repository = null;
         }
     }
 }
Пример #8
0
 public HomeController(AdminRepository adminRepository,
                       UserRepository userRepository,
                       OffenceRepository offenceRepository,
                       MainRepository mainRepository,
                       EventLogRepository eventLogRepository)
 {
     this.adminRepository    = adminRepository;
     this.userRepository     = userRepository;
     this.offenceRepository  = offenceRepository;
     this.mainRepository     = mainRepository;
     this.eventLogRepository = eventLogRepository;
 }
Пример #9
0
        public async Task RotateAsyncTest_NoDir()
        {
            string eventLogsTempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString(), "test_eventlogs");

            _mockLocalPathService.SetupGet(x => x.EventLogDirPath).Returns(eventLogsTempPath);

            EventLogRepository unitUnderTest = CreateRepository();
            await unitUnderTest.RotateAsync(14 * 24 * 60 * 60);

            _mockLoggerService.Verify(x => x.Info(It.Is <string>(x => x.StartsWith("file:")), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()), Times.Never());
            _mockLoggerService.Verify(x => x.Info("Delete", It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()), Times.Never());
            _mockLoggerService.Verify(x => x.Info("Keep", It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()), Times.Never());
        }
Пример #10
0
        public string[] GetRecentTaskIds([CanBeNull] Timestamp fromTimestampExclusive, [NotNull] Timestamp toTimestampInclusive)
        {
            if (fromTimestampExclusive >= toTimestampInclusive)
            {
                return(new string[0]);
            }

            var firstEventTicks = EventLogRepository.GetFirstEventTicks();

            if (firstEventTicks == 0)
            {
                return(new string[0]);
            }

            var recentTaskIds            = new HashSet <string>();
            var exclusiveStartColumnName = fromTimestampExclusive == null || fromTimestampExclusive.Ticks < firstEventTicks
                                               ? EventPointerFormatter.GetMaxColumnNameForTicks(firstEventTicks - 1)
                                               : EventPointerFormatter.GetMaxColumnNameForTimestamp(fromTimestampExclusive);

            var       inclusiveEndColumnName = EventPointerFormatter.GetMaxColumnNameForTimestamp(toTimestampInclusive);
            var       partitionKey           = EventPointerFormatter.GetPartitionKey(EventPointerFormatter.GetTimestamp(exclusiveStartColumnName).Ticks);
            const int eventsToFetch          = int.MaxValue - 1;

            while (true)
            {
                var eventsBatch = EventLogRepository.GetEvents(partitionKey, exclusiveStartColumnName, inclusiveEndColumnName, eventsToFetch, out var currentPartitionIsExhausted);
                foreach (var(@event, _) in eventsBatch)
                {
                    recentTaskIds.Add(@event.TaskId);
                }

                if (!currentPartitionIsExhausted)
                {
                    throw new InvalidOperationException("currentPartitionIsExhausted == false");
                }

                var nextPartitionStartTicks = (EventPointerFormatter.ParsePartitionKey(partitionKey) + 1) * EventPointerFormatter.PartitionDurationTicks;
                if (nextPartitionStartTicks > toTimestampInclusive.Ticks)
                {
                    return(recentTaskIds.ToArray());
                }

                partitionKey             = EventPointerFormatter.GetPartitionKey(nextPartitionStartTicks);
                exclusiveStartColumnName = EventPointerFormatter.GetMaxColumnNameForTicks(nextPartitionStartTicks - 1);
            }
        }
Пример #11
0
        private void QueryDatabase(int?page, LogReadViewModel vwModel)
        {
            if (vwModel.Description == null && vwModel.TimeFrom == DateTime.MinValue && vwModel.TimeTo == DateTime.MinValue)
            {
                return;
            }

            ViewBag.OnePageOfLogs = new List <LogReadViewModel>().ToPagedList(1, 1);
            var dbModel = new List <EventLogModel>();

            if (Session["dbModel"] == null)
            {
                dbModel            = new EventLogRepository(connection).SelectListBetween(vwModel.TimeFrom, vwModel.TimeTo);
                Session["dbModel"] = dbModel;
            }
            else
            {
                dbModel          = (List <EventLogModel>)Session["dbModel"];
                vwModel.TimeFrom = new DateTime(vwModel.TimeFrom.Year, vwModel.TimeFrom.Month, vwModel.TimeFrom.Day);
            }


            //Filter TaskCategory
            if (vwModel.TaskCategory > 0)
            {
                dbModel = dbModel.Where(x => x.TaskCategory == vwModel.TaskCategory).ToList();
            }

            //Filter Description
            if (vwModel.Description != null)
            {
                dbModel = dbModel.Where(x => x.Description.Contains(vwModel.Description)).ToList();
            }

            Mapper.Initialize(cfg => cfg.CreateMap <EventLogModel, LogReadViewModel>());
            var vwModel2 = Mapper.Map <List <LogReadViewModel> >(dbModel);

            var pageNumber    = page ?? 1;
            var onePageOfLogs = vwModel2.ToPagedList(pageNumber, 25);

            ViewBag.OnePageOfLogs = onePageOfLogs;
        }
Пример #12
0
 public Logger()
 {
     _repository = new EventLogRepository();
 }
Пример #13
0
        static void Main(string[] args)
        {
            // Переопределяем точку назначения запись
            // EventLogRepository.Instance[""].Sender = new EmailTarget(smtpServer: "smtp.mail.ru", smtpPort: 25, from: TestEmail.EventEmail1.From, password: TestEmail.EventEmail1.Password, mailto: "*****@*****.**", subject: "Message from EventLog system", attachFile: null);

            /*  " from: TestEmail.EventEmail1.From, password: TestEmail.EventEmail1.Password "
             *
             *  namespace ExerciseLog
             *  {
             *      public static class TestEmail
             *      {
             *          public static class EventEmail1
             *          {
             *              public static string From = "*****@*****.**";
             *              public static string Password = "******";
             *          }
             *      }
             *  }
             *
             */
            // EventLogRepository.DefaultLog.Sender = new MsEventLogJournalTarget(eventJournalSource: "Application",codeEvent: 55555, category: 6);

            // Переопределяем точку назначения запись для дефолтного лога
            // EventLogRepository.DefaultLog.Sender = new FileTarget("dedault.log");
            EventLogRepository.DefaultLog.Sender = new MsEventLogJournalTarget(eventJournalSource: "Application", codeEvent: 55555, category: 6);
            EventLogRepository.DefaultLog.Sender.SetFormat(@"{number:true} {date:dd.MM.yyyy} {time:HH:MM:ss} {importance:true} {message:true}");
            //EventLogRepository.DefaultLog.SetLevel(EventOption.Trace);

            string eks = "";

            // Инициализируем экземпляр словаря
            eks = "one";

            EventLogRepository.Create(eks);
            // Переопределяем точку назначения запись
            EventLogRepository.Instance[eks].Sender = new FileTarget("log.log");
            EventLogRepository.Instance[eks].Sender.SetFormat(@"{number:true} {time:HH:MM:ss} {importance:true} {message:true}");
            //EventLogRepository.Instance[eks].SetLevel(EventOption.Fatal);

            // Инициализируем экземпляр словаря
            eks = "two";

            EventLogRepository.Create(eks);
            // Переопределяем точку назначения запись
            EventLogRepository.Instance[eks].Sender = new MsEventLogJournalTarget(eventJournalSource: "Application", codeEvent: 55555, category: 6);
            EventLogRepository.Instance[eks].Sender.SetFormat(@"{number:true} {time:HH:MM:ss} {message:true}");
            //EventLogRepository.Instance[eks].SetLevel(EventOption.Info);

            // Пишем в именной лог one
            eks = "one";

            // Fatal, Error, Warn, Info, Debug, Trace => Тестируем с помощью единого метода CreateEventLog
            Console.WriteLine("Тестирование CreateEventLog с использованием enum EventOption\n");
            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].CreateEventLog()", eks);
            EventLogRepository.Instance[eks].CreateEventLog("Fall event", EventOption.Fatal);

            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].CreateEventLog()", eks);
            EventLogRepository.Instance[eks].CreateEventLog("Error event", EventOption.Error);

            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].CreateEventLog()", eks);
            EventLogRepository.Instance[eks].CreateEventLog("Warn event", EventOption.Warn);

            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].CreateEventLog()", eks);
            EventLogRepository.Instance[eks].CreateEventLog("Info event", EventOption.Info);

            // А вот тут я хочу записать в логгер по умолчанию
            Console.WriteLine("\nТестирование EventLogRepository.DefaultLog.CreateEventLog()");
            EventLogRepository.DefaultLog.CreateEventLog("Debug event", EventOption.Debug);

            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].CreateEventLog()", eks);
            EventLogRepository.Instance[eks].CreateEventLog("Trace event", EventOption.Trace);

            Console.WriteLine("\nТестирование Log#");
            // Fatal, Error, Warn, Info, Debug, Trace => Тестируем с помощью метода Log#
            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].LogFatal", eks);
            EventLogRepository.Instance[eks].LogFatal("Fall event");

            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].LogError", eks);
            EventLogRepository.Instance[eks].LogError("Error event");

            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].LogWarn", eks);
            EventLogRepository.Instance[eks].LogWarn("Warn event");

            // а теперь попишем в логер "two"
            eks = "two";

            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].LogInfo", eks);
            EventLogRepository.Instance[eks].LogInfo("Info event");

            Console.WriteLine("\nТестирование EventLogRepository.Instance[{0}].LogDebug", eks);
            EventLogRepository.Instance[eks].LogDebug("Debug event");

            // и снова пишем в "one"
            eks = "one";

            // Но я передумал и написал в лог по умолчанию.
            Console.WriteLine("\nТестирование EventLogRepository.DefaultLog].LogTrace");
            EventLogRepository.DefaultLog.LogTrace("Trace event");

            Console.WriteLine("\n -= ВСЕ =-");

            // Что должно получится при условие
            // 1 - EventLogRepository.DefaultLog.Sender = new ConsoleTarget();
            // 2 - EventLogRepository.Instance["one"].Sender = new ConsoleTarget();
            // 3 - EventLogRepository.Instance["two"].Sender = new MsEventLogJournalTarget();
            //
            // Записей на консоле:
            //  - DefaultLog = 2 записи
            //  - Instance["one"] = 8 записей
            // Записей в Журнал Windows(Приложения)
            //  - Instance["two"] = 2 записи
            //
            // Console.WriteLine("Записей из 2 / {0}", EventLogRepository.DefaultLog.EventLogList.Count);
            // Console.WriteLine("Записей из 8 / {0}", EventLogRepository.Instance["one"].EventLogList.Count);
            // Console.WriteLine("Записей из 2 / {0}", EventLogRepository.Instance["two"].EventLogList.Count);
            //
            // Тест пройдет.

            Console.ReadKey();
        }