SPB Git forge

spb/job-ka

Public
227commits 1branches 0releases
37.7 MBsize
maindefault branch
1 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%
10.3 KB

# Ciena (ciena)

Employeur direct · Plateforme ATS : workday · Statut registre : actif · Connecteur : jobka/connectors/ciena.py

# Description

  • Site : Ciena
  • Page carrières : https://ciena.wd5.myworkdayjobs.com/Careers
  • Secteurs : Télécommunications, TI
  • Région : Québec
  • Offres marquées « Offre directe » dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.

# Accès

  • Mécanique : voir la fiche plateforme ats-workday.md — API JSON publique du site carrières, backend requests direct (Scrapfly seulement si indiqué sur la fiche plateforme).
  • Identifiants du tenant (attributs du connecteur) :
Attribut Valeur
EMPLOYER Ciena
HOST wd5
SITE Careers
TENANT ciena
  • Throttle : 0.7 s entre requêtes.
  • Filtre Québec : seuls les postes localisés au Québec sont conservés (facette serveur quand l'ATS en offre une, sinon is_quebec_location côté client).

# Champs → schéma

Complétude mesurée sur les 5 offres actives de la source (base live, 2026-09-21 18:06 EDT).

Champ (jobs.*) Rôle Complétude
title — Titre titre du poste 100 %
employer — Employeur nom de l'entreprise 100 %
url — URL lien direct vers l'offre originale 100 %
description — Description texte complet (HTML nettoyé) 100 %
city — Ville municipalité normalisée 60 %
region — Région région administrative 60 %
address — Adresse adresse du lieu de travail 0 %
postal_code — Code postal code postal si publié 0 %
work_mode — Mode presentiel / hybride / teletravail 80 %
employment_type — Type temps_plein / temps_partiel / … 100 %
salary — Salaire ($) bornes numériques normalisées $/h et $/an 40 %
salary_label — Libellé salaire texte salarial original 40 %
benefits — Avantages avantages sociaux publiés (JSON) 0 %
requirements — Exigences scolarité, expérience, langues (JSON) 100 %
date_posted — Date de parution ISO 8601 100 %
date_deadline — Date limite date limite pour postuler 0 %
category — Catégorie taxonomie interne (TI, Santé, …) 80 %
language — Langue fr / en / bilingue (source ou heuristique) 100 %
company_logo — Logo employeur URL du logo si exposé par la source 0 %
apply_url — Candidature lien de candidature directe 100 %
gps — GPS lat/lng (géocodage sans invention) 60 %

Exemple réel : NPI Test Engineer — Montréal · Pay range $91,800 - $146,600 CAD · parue le 2026-09-17.

# Fréquence & budgets

  • Cadence : resynchronisation horaire (PM2 job-ka-sync = run.py watch 60), suivie du géocodage en lot puis de la déduplication inter-sources.
  • Throttle : 0.7 s minimum entre deux requêtes vers la source (request_delay).
  • Budgets / plafonds (variables d'environnement) :
Variable Défaut
JOBKA_WORKDAY_DETAIL_LIMIT 300
  • Cache BD des pages détail (detail_cache) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.

# Volumétrie & complétude live

(mesuré le 2026-09-21 18:06 EDT dans data/jobka.db)

  • Offres en base : 8 (dont 5 actives, 0 masquées comme doublons dup_of)
  • Salaire : 2/5 actives (40 %)
  • GPS : 3/5 actives (60 %)
  • Mode : 4/5 actives (80 %)
  • Parution : 5/5 actives (100 %)
  • Dernier sync : 2026-09-21 16:48 — trouvées 5, +0, ~0, -0
  • Syncs enregistrés (sync_log) : 267

# Erreurs & dépannage

Erreurs relevées dans sync_log :

Erreur Occurrences Dernière fois
Workday non-JSON après 3 essais (HTTP 200, text/html) : Expecting value: line 1 column 1 (… 2 2026-09-19 03:21
502 Server Error: Bad Gateway for url: https://ciena.wd5.myworkdayjobs.com/wday/cxs/ciena/… 11 2026-08-29 10:30
Expecting value: line 1 column 1 (char 0) 1 2026-08-29 03:23
  • Rejouer un sync isolé : .venv/bin/python run.py sync ciena puis inspecter sync_log : sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='ciena' ORDER BY ts DESC LIMIT 5;"
  • Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant active=0.

# Licence / conformité

Flux public du site carrières officiel de l'employeur (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Ciena » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai) sur les accès directs ; requêtes throttlées et plafonnées par budgets.

# Historique

Mission connecteurs du 2026-08-18 — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :

  • fd4bfc8 qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
  • 5a66f48 +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
  • 4917d57 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
  • f6e7571 portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
  • 744cbfc badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
  • 1604ff9 reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).

Commits touchant jobka/connectors/ciena.py :

  • ae44d7c 2026-08-29 [ka6] fix connecteur ciena: repli « détail seulement » pendant la panne d'index Workday du tenant — l'endpoint liste POST /wday/cxs/ciena/Careers/jobs renvoie 502 backend (errorCaseId Workday) pour tout le monde depuis ~12:39 EDT le 2026-08-28 (reconfirmé le 2026-08-29 depuis le nœud, via proxy résidentiel CA Oxylabs et en navigateur réel : le board React rend une page vide), MAIS l'API détail GET /wday/cxs/ciena/Careers/job/ répond 200 avec données complètes et ciena.com/careers pointe toujours vers ce board (pas de migration). Le connecteur revalide donc les offres actives connues en base via l'API détail quand la liste échoue en 5xx : 404/posted=false = offre retirée, aucune donnée inventée (tout vient du jobPostingInfo live), et si RIEN n'est validable l'erreur d'origine est propagée (sync en échec, inventaire préservé). Dès que l'index Workday revient, le chemin liste normal reprend seul. Test réel : run.py sync ciena → ok, found=7 (= médiane 7.0), updated=5, removed=0, 7 actives en base. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
  • dab8068 2026-08-29 Revert "[ka6] fix connecteur ciena: panne PARTIELLE côté Workday (tenant ciena.wd5 uniquement) — l'endpoint liste POST /wday/cxs/ciena/Careers/jobs renvoie 502 avec errorCaseId Workday depuis ~12:39 EDT le 2026-08-28, pour TOUT LE MONDE : vérifié depuis le nœud ET via proxy résidentiel canadien Oxylabs (502 identique, errorCaseId différent = vraie erreur backend), toutes variantes de body/locale/en-têtes testées (GET=400, POST=502). Le reste du tenant est SAIN : board 200, API détail /job/R031484 200 avec données complètes, tenant/siteId inchangés (ciena/Careers dans le HTML), autres tenants wd5 (vfc, dupont, fiserv) 200 depuis ce nœud = ni blocage IP ni panne wd5 globale. Pas de migration d'ATS : ciena.com/careers (403 direct, contourné via Scrapfly) pointe toujours vers ciena.wd5.myworkdayjobs.com/Careers ; l'API legacy refreshFacet répond mais vide (même index de recherche en panne). AUCUN bug dans le connecteur ni changement de code : panne externe transitoire, le cycle horaire de job-ka-sync reprendra seul à la fin de la panne Workday. Les 7 offres actives (médiane 7.0) sont préservées en base — un sync en échec ne purge rien. Sync isolé rejoué pour trace (502 reproduit via le connecteur réel, actives=7 après). Note de contexte ajoutée au connecteur. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200."
  • 4faea71 2026-08-28 [ka6] fix connecteur ciena: panne PARTIELLE côté Workday (tenant ciena.wd5 uniquement) — l'endpoint liste POST /wday/cxs/ciena/Careers/jobs renvoie 502 avec errorCaseId Workday depuis ~12:39 EDT le 2026-08-28, pour TOUT LE MONDE : vérifié depuis le nœud ET via proxy résidentiel canadien Oxylabs (502 identique, errorCaseId différent = vraie erreur backend), toutes variantes de body/locale/en-têtes testées (GET=400, POST=502). Le reste du tenant est SAIN : board 200, API détail /job/R031484 200 avec données complètes, tenant/siteId inchangés (ciena/Careers dans le HTML), autres tenants wd5 (vfc, dupont, fiserv) 200 depuis ce nœud = ni blocage IP ni panne wd5 globale. Pas de migration d'ATS : ciena.com/careers (403 direct, contourné via Scrapfly) pointe toujours vers ciena.wd5.myworkdayjobs.com/Careers ; l'API legacy refreshFacet répond mais vide (même index de recherche en panne). AUCUN bug dans le connecteur ni changement de code : panne externe transitoire, le cycle horaire de job-ka-sync reprendra seul à la fin de la panne Workday. Les 7 offres actives (médiane 7.0) sont préservées en base — un sync en échec ne purge rien. Sync isolé rejoué pour trace (502 reproduit via le connecteur réel, actives=7 après). Note de contexte ajoutée au connecteur. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
  • c45c753 2026-08-23 Vague C — +620 connecteurs employeurs directs (350 -> 968)