Exemplo n.º 1
0
 public CalendarController(
     IAdobeConnectAccountService acAccountService,
     ApplicationSettingsProvider settings,
     ILogger logger,
     ICache cache,
     LmsFactory lmsFactory
     )
     : base(acAccountService, settings, logger, cache)
 {
     _lmsFactory = lmsFactory ?? throw new ArgumentNullException(nameof(lmsFactory));
 }
Exemplo n.º 2
0
        public static async Task Main(string[] args)
        {
            const string ConsumerKeyParameterName    = "consumerkey";
            const string ConsumerKeyOutParameterName = "consumerkeyout";
            const string SplitSyncModeParameterName  = "splitsyncmode";

            const string neMutexName = "EdugameCloud.Lti.LmsUserUpdater.BackgroundMutexName";
            var          parameters  = ParseArgumentList(args);

            // prevent two instances from running
            bool created;

            var configurationBuilder = new ConfigurationBuilder()
                                       .AddJsonFile("appSettings.json");

            var configuration = configurationBuilder.Build();

            using (Mutex m = new Mutex(true, neMutexName, out created))
            {
                IoCStart.Init(configuration);
                ILogger logger   = IoC.Resolve <ILogger>();
                dynamic settings = IoC.Resolve <ApplicationSettingsProvider>();

                if (!created)
                {
                    logger.Info("The application EdugameCloud.Lti.LmsUserUpdater could not be run because another instance was already running.");
                }

                try
                {
                    logger.InfoFormat("===== Update Lms Users Engine Starts. DateTime:{0} =====", DateTime.Now);
                    LmsFactory lmsFactory      = IoC.Resolve <LmsFactory>();
                    var        lmsCompanyModel = IoC.Resolve <LmsCompanyModel>();
                    var        syncService     = IoC.Resolve <ISynchronizationUserService>();
                    //var timer = Stopwatch.StartNew();
                    IEnumerable <LmsCompany> companies = lmsCompanyModel.GetEnabledForSynchronization(parameters.ContainsKey(ConsumerKeyParameterName)
                        ? parameters[ConsumerKeyParameterName]
                        : null);
                    //timer.Stop();
                    //logger.Warn($"Retrieve companies elapsed time: {timer.Elapsed.ToString()}");
                    if (parameters.ContainsKey(ConsumerKeyOutParameterName))
                    {
                        var excludeKeys = parameters[ConsumerKeyOutParameterName].Split(new[] { ',', ';' });
                        companies =
                            companies.Where(x => excludeKeys.All(ek => ek != x.ConsumerKey)).ToList();
                    }

                    //SplitSyncMode mode;
                    //if (!Enum.TryParse(settings.SplitSyncMode, out mode))
                    //{
                    //    mode = SplitSyncMode.None;
                    //}

                    SplitSyncMode mode = parameters.ContainsKey(SplitSyncModeParameterName) ? (SplitSyncMode)Enum.Parse(typeof(SplitSyncMode), parameters[SplitSyncModeParameterName]) : SplitSyncMode.None;

                    companies = companies.Where(x => (mode == SplitSyncMode.None || x.Id % 2 == (int)mode) &&
                                                !LicenseExpired(x) &&
                                                x.LmsCourseMeetings.Any(y => y.LmsMeetingType != (int)LmsMeetingType.OfficeHours)).ToList();
                    logger.Info($"[Companies to sync] {string.Join(",", companies.Select(x => x.Id))}");
                    var groupedByCompany = companies.GroupBy(x => x.LmsProviderId);//.ToDictionary(x => x.Key, y => y.SelectMany(z=>z.LmsCourseMeetings).GroupBy(c => new CourseCompany { CourseId = c.CourseId, LmsCompanyId = c.LmsCompany.Id }));

                    //todo: Task for each lms if possible
                    foreach (var group in groupedByCompany)
                    {
                        //var service = lmsFactory.GetUserService((LmsProviderEnum)group.Key);
                        foreach (var lmsCompany in group)
                        {
                            try
                            {
                                logger.Warn($"[Sync start] LicenseId={lmsCompany.Id}");
                                var timer = Stopwatch.StartNew();
                                await syncService.SynchronizeUsers(lmsCompany, syncACUsers : true);

                                timer.Stop();
                                logger.Warn($"[Sync time] LicenseId={lmsCompany.Id}, Time={timer.Elapsed.ToString()}");
                            }
                            catch (Exception ex)
                            {
                                logger.ErrorFormat(ex, "Unexpected error during execution for LmsCompanyId: {0}.", lmsCompany.Id);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    string msg = "Unexpected error during execution LmsUserUpdater with message: " + ex.Message;
                    logger.Error(msg, ex);
                }
                finally
                {
                    logger.InfoFormat("===== Update Lms Users Engine stops. DateTime:{0} =====", DateTime.Now);
                }
            }
        }