Exemple #1
0
        private void ExecuteWorkWithSystem(ManagedSystem system,
                                           Action <ManagedSystem> action,
                                           Action <ManagedSystem> onSuccess = null,
                                           Action <ManagedSystem> onFailure = null)
        {
            using var dbContext = DbContextFactory.CreateDbContext();

            try
            {
                dbContext.Entry(system).Reload();

                action(system);

                system.LastAccessed = DateTime.UtcNow;
                onSuccess?.Invoke(system);
            }
            catch (Exception e)
            {
                dbContext.Entry(system).Reload();

                system.AddProblem($"{system.ProblemDescription}\n\n {DateTime.UtcNow}\n{e.Message}".Trim());

                Logger.LogError(e, "While executing work with {system}: {exception}", system.Name, e.Message);

                onFailure?.Invoke(system);

                throw;
            }
            finally
            {
                dbContext.Update(system);
                dbContext.SaveChanges();
            }
        }