puzzle / skills

Open source skill management web application
GNU Affero General Public License v3.0
64 stars 19 forks source link

Create delayed job | PuzzleTime Sync #3 #734

Open ManuelMoeri opened 5 months ago

ManuelMoeri commented 5 months ago

Introduction Since we will be using data from the PuzzleTime API, we need to make sure that this data is up to date. This isssue here is a suggestion how it could be solved. The idea consists of a nightly job that runs every day (or night I guess) which fetches the data of the PuzzleTime API.

This data would then be mapped into our persons and following keep the persons up to date. These changes will result in PuzzleTime becoming the source of truth in the dedicated person details.

Things to consider Handle the update and creating of people correctly. Which means Members need to have some kind of id, so they get updated correctly. This should already have been done in #735 This id prevents the job from creating a new member with the same name but different user data. It also prevents the job from creating a new person when someone is getting renamed (like married as an example). If a new member is added the delayed_job recognizes that and creates a new profile in PuzzleSkills.

ToDo

RandomTannenbaum commented 5 months ago

Stand 28.06.2024 Was mir noch aufgefallen ist:

Bezüglich des jobs habe ich es lokal mal mit einem Cron-Job ausprobiert. Im Gegensatz zu Delayed-Jobs, welche database-based sind, laufen Cron-Jobs direkt auf dem Betriebssystem. Cron-Jobs kann man manuell erstellen, indem man mit crontab -e das crontab file bearbeitet. Darin kann man eine Zeitangabe und den auszuführenden command. Hier ein kleiner guide.

Noch einfacher geht es mit dem gem whenever, was ich auch lokal ausprobiert habe und was sehr gut funktioniert hat. Whenever hat ein config file in dem man mit einfacher Syntax Cron-Jobs definieren kann. Das könnte in unserem Fall so aussehen:

every :day, at: '12am' do
  rake "ptime:update_people"
end

Die Jobs können dann mit whenever --update-crontab automatisch im crontab-file des Betriebssystems registriert werden. Mit whenever -c können diese auch wieder entfernt werden.

Desweiteren kann man zum Beispiel auch log files definieren, in denen der output der Cron-Jobs geloggt wird.

Ansätze 01.07.2024

RandomTannenbaum commented 5 months ago

Stand 01.07.2024 Manuel und ich haben uns heute angeschaut, was Active Jobs und was Delayed Jobs sind. Ausserdem haben wir Delayed Jobs im Skills auf unserem Branch eingebaut und einen ersten Job erstellt.