/// <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); }
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); }