/// <summary>
        ///     Die Priorisierungsengine liefert den nächsten Job für die verschiedenen Kanäle.
        ///     Dazu wird geschaut wieviele Aufträge aktuell im Repository Service am laufen sind und in welchen Kanälen.
        ///
        ///     Wenn es in einem Kanal Platz hat, wird der nächste pendente Auftrag aus der Datenbank abgerufen.
        ///
        ///     Es wird mit 4 Kanälen gerechnet, d.h. alle Aufträge werden anhand ihrer Grösse in eine Priorisierungskategorie
        ///     eingeteilt.
        ///     Die Auftäge werden dann anhand der Priorisierungskategorie einem der 4 Kanäle zugeordnet.
        /// </summary>
        /// <param name="primaerdatenDb">Der Datenbankzugriff auf die Primärdaten Jobs.</param>
        /// <param name="channelAssignmentDefinition">
        ///     Die Konfiguration welche Priorisierungskategorien in welchen Kanälen
        ///     zugeordnet werden können
        /// </param>
        /// <param name="prefetchCount">Einstellungen wieviele parallele Jobs die Repository Queue (RabbitMq) verarbeiten kann.</param>
        public PackagePriorizationEngine(IPrimaerdatenAuftragAccess primaerdatenDb, ChannelAssignmentDefinition channelAssignmentDefinition,
                                         RepositoryQueuesPrefetchCount prefetchCount)
        {
            this.primaerdatenDb = primaerdatenDb;

            // Fülle in einen Dictionary wieviele Jobs pro Kanal verfügbar sind.
            MaxJobCountPerChannelForSync     = GetMaxJobCountPerChannel(prefetchCount.SyncQueuePrefetchCount);
            MaxJobCountPerChannelForDownload = GetMaxJobCountPerChannel(prefetchCount.DownloadQueuePrefetchCount);

            // Definieren die KategorieRanges pro Kanal
            KategorieRangesPerChannel = new Dictionary <int, List <List <int> > >
            {
                { 1, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(1)) },
                { 2, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(2)) },
                { 3, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(3)) },
                { 4, SplitKategorienInRanges(channelAssignmentDefinition.GetPrioritiesForChannel(4)) }
            };

            Log.Debug(
                "Initialized Package Priorization Engine with the following settings: Max job count for sync: {MaxJobCountPerChannelForSync}. " +
                "Max job count for download: {MaxJobCountPerChannelForDownload}", MaxJobCountPerChannelForSync, MaxJobCountPerChannelForDownload);
        }
コード例 #2
0
        public AssetManager(ITextEngine textEngine, IRenderEngine renderEngine, ITransformEngine transformEngine, PasswordHelper passwordHelper,
                            IParameterHelper parameterHelper, IPdfManipulator pdfManipulator,
                            IPreparationTimeCalculator preparationCalculator, IPrimaerdatenAuftragAccess auftragAccess,
                            IRequestClient <FindArchiveRecordRequest> indexClient,
                            IPackagePriorizationEngine priorizationEngine, IBus bus)
        {
            this.textEngine            = textEngine;
            this.renderEngine          = renderEngine;
            this.transformEngine       = transformEngine;
            this.passwordHelper        = passwordHelper;
            this.parameterHelper       = parameterHelper;
            this.pdfManipulator        = pdfManipulator;
            this.preparationCalculator = preparationCalculator;
            this.auftragAccess         = auftragAccess;
            this.indexClient           = indexClient;
            this.priorizationEngine    = priorizationEngine;
            this.bus = bus;
            aufbereitungsZeitSettings = parameterHelper.GetSetting <SchaetzungAufbereitungszeitSettings>();
            // read and convert priorisierungs settings
            var settings = parameterHelper.GetSetting <AssetPriorisierungSettings>();

            packageSizeDefinition = JsonConvert.DeserializeObject <AssetPackageSizeDefinition>(settings.PackageSizes);
        }