Example #1
0
        public override async Task StopAsync(CancellationToken cancellationToken)
        {
            await db.DisposeAsync();

            db = null;

            await Controller.DisposeAsync();

            Controller = null;
        }
Example #2
0
 public VectorPlusBackgroundService(ILogger <VectorPlusBackgroundService> logger, VectorPlusBackgroundServiceDbContext db)
 {
     this.logger = logger;
     this.db     = db;
 }
Example #3
0
        public static IEnumerable <IVectorPlusBehaviourModule> ExtractModulesFromAllPlugins(ILogger logger = null)
        {
            logger?.LogDebug("Retrieving behavioural modules.");
            var badModuleConfigs = new List <ModuleConfig>();
            var extractedModules = new List <IVectorPlusBehaviourModule>();

            using (var db = new VectorPlusBackgroundServiceDbContext())
            {
                // fetch all module configs in the database
                var dbModules = db.Modules.OrderBy(m => m.Added).ToList();

                // for each module
                foreach (var dbModule in dbModules)
                {
                    // if the user has enabled it
                    if (dbModule.UserEnabled)
                    {
                        // if the module config has binary
                        if (dbModule.Zip != null)
                        {
                            try
                            {
                                // extract the module
                                var modules = ExtractModulesFromZipData(dbModule.Zip, logger);
                                if (modules != null && modules.Count() > 0)
                                {
                                    extractedModules.AddRange(modules);
                                    logger?.LogInformation("Added modules: " + string.Join(", ", modules.Select(m => m.Name)));
                                }
                                else
                                {
                                    logger?.LogWarning("No modules extracted for: " + dbModule.Name);
                                    badModuleConfigs.Add(dbModule);
                                }
                            }
                            catch (Exception e)
                            {
                                logger?.LogWarning(dbModule.Name + ": " + e.Message);
                                badModuleConfigs.Add(dbModule);
                            }
                        }
                        else
                        {
                            logger?.LogWarning("DLL not stored for module " + dbModule.Name + ".");
                            badModuleConfigs.Add(dbModule);
                        }
                    }
                    else
                    {
                        logger?.LogDebug("Ignoring disabled module: " + dbModule.Name);
                    }
                }

                // remove all modules with issues
                db.Modules.RemoveRange(badModuleConfigs);
            }

            logger?.LogDebug("Found " + extractedModules.Count + " modules.");
            logger?.LogDebug("Removed " + badModuleConfigs.Count + " bad modules.");
            return(extractedModules);
        }