AutoMate Technisch Help

Background Processing

AutoMate.API gebruikt twee mechanismen voor achtergrondverwerking: Hangfire voor recurring jobs en batch job processing, en FastEndpoints JobQueue voor asynchrone taken met tracking.

Hangfire

Configuratie

Hangfire wordt geconfigureerd in Program.cs met SQL Server als storage backend (de Jobs-database):

builder.Services.AddHangfire(configuration => configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseBatches() .UseSqlServerStorage(jobsDbConnectionString, new SqlServerStorageOptions { PrepareSchemaIfNecessary = true, QueuePollInterval = TimeSpan.FromSeconds(15) }));

Relevante instellingen:

Instelling

Waarde

Toelichting

Storage

SQL Server (Jobs-database)

Persistent job storage

PrepareSchemaIfNecessary

true

Hangfire maakt schema automatisch aan

QueuePollInterval

15 seconden

Hoe vaak de server de queue controleert

UseBatches()

Hangfire Pro

Batch job processing voor IAM HR Sync

Hangfire Pro — Batches

Hangfire Pro batches worden gebruikt door de IAM Employee Schedule Dispatcher om per tenant een batch van sync jobs aan te maken. Een batch groepeert meerdere jobs en maakt het mogelijk om op de voltooiing van de hele batch te wachten of een continuation job te plannen.

Dashboard

Het Hangfire dashboard is beschikbaar op /jobs. Toegang vereist OIDC-authenticatie via een aparte DashboardCookie/DashboardOidc authentication scheme. Niet-geauthenticeerde requests worden doorgestuurd naar het OIDC login-flow.

Het Aspire dashboard toont een directe link naar /jobs naast de API-resource.

Recurring Jobs

Alle recurring jobs draaien in UTC. Ze worden geregistreerd bij applicatiestart via IRecurringJobManager.AddOrUpdate.

Job ID

Cron

Schedule

Beschrijving

iam-metrics-daily

0 1 * * *

01:00 UTC dagelijks

IAM metrics genereren (dagelijks)

iam-metrics-monthly

0 5 1 * *

05:00 UTC 1e van maand

IAM metrics genereren (maandelijks)

iam-sync-shared-mailboxes-4h

0 */4 * * *

Elke 4 uur

Shared mailboxes synchroniseren

tenant-sync-info-hourly

0 */1 * * *

Elk uur

Tenant info synchroniseren

devices-sync-autopilot-hourly

0 */1 * * *

Elk uur

AutoPilot devices synchroniseren

iam-employee-schedule-dispatcher-15m

*/15 * * * *

Elke 15 minuten

HR sync jobs dispatchen per tenant

iam-employee-cancel-failed-jobs-after-retries-exhausted-30m

*/30 * * * *

Elke 30 minuten

Gefaalde jobs annuleren na retries

IAM Employee Schedule Dispatcher

De IamEmployeeScheduleDispatcherJob (iam-employee-schedule-dispatcher-15m) is de centrale dispatcher voor IAM HR Sync. De flow:

  1. Tenant iteratie — De dispatcher haalt de lijst van actieve tenants op.

  2. Tenant-specifieke cron expressions — Per tenant wordt de geconfigureerde sync-planning gelezen uit de tenant configuratie. Dit maakt het mogelijk dat elke tenant op een eigen schema synchroniseert.

  3. Tijdzone support — De dispatcher respecteert de tijdzone van de tenant bij het evalueren of een sync job gestart moet worden.

  4. Batch aanmaken — Voor elke tenant die aan de beurt is wordt een Hangfire batch aangemaakt met de individuele sync jobs (via Hangfire Pro batches).

De dispatcher draait elke 15 minuten en bepaalt zelf welke tenants op dat moment gesynchroniseerd moeten worden op basis van hun cron configuratie.

FastEndpoints Job Manager

Naast Hangfire biedt AutoMate.API een Job Manager op basis van FastEndpoints JobQueue voor asynchrone taken die een tracking ID teruggeven aan de aanroeper.

Eigenschappen

  • Gekoppeld aan de Jobs-database (gedeeld met Hangfire)

  • Taken verlopen na maximaal 24 uur

  • Maximale uitvoerduur circa 2 minuten

Multi-tenant support

Implementeer ITenantTrackableJob om de TenantId automatisch op te slaan bij het inplannen van een job. In de handler is de TenantId op te halen via IJobQueryProvider:

var jobRecord = await jobQueryProvider.GetJobByIdAsync(trackingId, cancellationToken); var tenantId = jobRecord?.TenantId;

Endpoints

Endpoint

Beschrijving

POST /admin/jobs/schedule/example

Voorbeeld endpoint om een job te plannen

GET /admin/jobs/progress/{trackingId}

Voortgang van een job opvragen

DELETE /admin/jobs/cancel/{trackingId}

Job annuleren

GET /admin/jobs/all

Alle jobs opvragen

Last modified: 24 March 2026