Naar hoofdinhoud gaan
Delayed::Job is gemaakt door de uitstekende mensen bij Shopify en is een van de populairste background processors voor Ruby en Rails. De AppSignal-gem detecteert Delayed Job wanneer deze aanwezig is en haakt in op de standaard Delayed Job-callbacks. Er zijn geen verdere acties nodig om de integratie te activeren. Deze integratie heeft als doel alle verschillende enqueueing-methoden van Delayed::Job te ondersteunen. Voor sommige methoden gelden beperkingen en aanpassingsmogelijkheden.

Klassen met #perform-methoden

Let op: Het rapporteren van jobs via deze methode wordt ondersteund vanaf AppSignal Ruby-gem versie 2.11.0.
Delayed Job ondersteunt het enqueuen van jobs op basis van instanties van klassen of structs die naar een perform-instantiemethode luisteren, wanneer ze met Delayed::Job.enqueue in de wachtrij worden geplaatst. AppSignal gebruikt de klassenaam van het object als actienaam en voegt #perform toe aan de actienaam. Een job voor StructJob wordt gerapporteerd als StructJob#perform.
class StructJob < Struct.new(:id)
  def perform
    # Do stuff
  end
end

Delayed::Job.enqueue(StructJob.new("id"))
# Reported as "StructJob#perform"
Houd er rekening mee dat deze manier van enqueuen geen argumenten ondersteunt, aangezien een volledig object in de wachtrij wordt geplaatst. Job-objecten worden geserialiseerd bij het enqueuen en gedeserialiseerd bij het verwerken. AppSignal leest de status van het gedeserialiseerde object niet. Het argument id voor de StructJob in het voorbeeld hierboven wordt niet gerapporteerd.

Jobs die display_name gebruiken

Delayed Job staat elke klasse toe om een eigen display_name te definiëren. Deze waarde van display_name kan interfereren met de rapportage van AppSignal als deze is opgebouwd uit dynamische waarden, zoals de argumenten die aan de job zijn meegegeven. Als de retourwaarde van de display_name-methode geen string in het formaat ClassName#method_name retourneert, behandelt AppSignal elke job als een afzonderlijke entiteit, waardoor veel incidenten en meldingen worden aangemaakt. Dit doorbreekt de groepering die AppSignal voor deze jobs uitvoert, met als gevolg dat AppSignal veel unieke variaties van incidenten rapporteert en onbruikbare metrieken in grafieken laat zien. Definieer een appsignal_name-methode die een jobnaam retourneert in het formaat ClassName#method_name om dit te voorkomen. Op deze manier worden de jobs weer correct gegroepeerd.
class StructJobWithName < Struct.new(:id)
  def perform
    # Do stuff
  end

  # This returns an unique job name, creating new incidents and graphs for each
  # unique job name.
  def display_name
    "StructJobWithName-#{id}"
  end

  # This will group the jobs back to a single entity, allowing incidents
  # and graphs to work properly.
  def appsignal_name
    "StructJobWithName#perform"
  end
end

Delayed::Job.enqueue(StructJobWithName.new("id"))
# Reported as "StructJobWithName#perform"

Ondersteuning voor delay-methodaanroepen

Methodeaanroepen die met de delay-extensie in de wachtrij worden geplaatst, worden gerapporteerd met een actienaam die overeenkomt met hoe ze worden aangeroepen. De argumenten die aan de delayed methode worden meegegeven, worden gerapporteerd als de argumenten voor de job.
Post.delay.archive_all("some selector")
# Reported as "Post.archive_all"

Post.create(:title => "Post title").delay.send_mail("mail subject")
# Reported as "Post#send_mail"

Ondersteuning voor Delayed::Job.enqueue

Let op: Detectie van jobnamen is toegevoegd in Ruby-gem versie 2.11.0.
Aangepaste job-objecten die met Delayed::Job.enqueue in de wachtrij worden geplaatst, worden normaal gerapporteerd, maar de argumenten worden niet gerapporteerd. Een volledig object wordt aan Delayed::Job meegegeven en geserialiseerd naar YAML en terug. We kunnen in dit scenario geen argumenten detecteren.
Delayed::Job.enqueue job_object

Ondersteuning voor Active Job

De Delayed Job-integratie is compatibel met Active Job. Het zal wachttijden in grafieken, wachtrijen en prioriteiten rapporteren als deze op de job zijn ingesteld. Upgrade naar versie 2.11.0 van de Ruby-gem of nieuwer voor verbeterde ondersteuning.

Wijzigingen in de integratie

Wachttijd

In AppSignal voor Ruby-gem 2.3.0 is een wijziging aangebracht in de registratie van wachttijden. In PR #297 wordt de starttijd van de job gebruikt in plaats van de aanmaaktijd van de job. Dit betekent dat de tijd vanaf het moment dat een job is aangemaakt tot het moment waarop deze moet starten, niet langer als wachttijd wordt geregistreerd. Dit voorkomt dat zeer lange wachttijden de wachttijdgrafieken op AppSignal.com vertekenen.

Voorbeeldapplicaties

Hieronder vindt u een lijst met voorbeeldapps die beschikbaar zijn om de Delayed::Job-integratie mee te testen:
  • AppSignal + Rails 5 + Delayed::Job
    • Het voorbeeld laat zien hoe u AppSignal opzet met Delayed::Job en Rails. In het README-bestand worden alle bekende en geteste methoden voor het enqueuen van jobs vermeld die door AppSignal worden ondersteund.