Skip to content
This repository was archived by the owner on Aug 11, 2026. It is now read-only.

Latest commit

 

History

History
66 lines (49 loc) · 3.06 KB

architecture.md

File metadata and controls

66 lines (49 loc) · 3.06 KB

Architecture and retained workflow

Runtime lifecycle

cronJob.py starts main.py for the configured shift window and restarts it if the process exits unexpectedly. The shell scripts provide PID-based start, stop and restart helpers without terminating unrelated browser processes.

main.py initialises configuration, logging, the optional virtual display and Chrome. It opens Remedy and the site-lookup application in separate browser windows, authenticates and passes both window handles to the dispatcher.

Availability and rotation

In production, the weekly Excel plan was stored in SharePoint so authorised team members could access and update it directly. A Power Automate flow reacted to workbook changes by sending the updated file to a mailbox monitored by the GIL server. A separate server-side process handled the email and placed the workbook in the appropriate weekly-plan directory. That delivery configuration is not included in this repository.

weekplan2remedy.py locates the workbook for the current ISO week and reads the column for the selected calendar day. It finds the appropriate team block and returns the engineers whose role permits automatic assignment.

UserAssigned in dispatch.py combines that daily plan with MySQL history. It maintains vendor-specific engineer lists, roles, assigned ticket counts and the rotation position from the last assignment. The original random shuffle is retained so the initial ordering is not permanently fixed.

Ticket analysis

The dispatcher reads the visible Remedy queue and opens each incident or task. It collects the CI, title, summary, priority and assignment information. Vendor and group selection can come from:

  • numeric CI lookup in the site-information application;
  • recognised configuration-item patterns;
  • title and summary technology markers;
  • a previously recorded manual vendor decision;
  • synthetic special-project mappings.

Unresolved cases are stored and generate an email with manual decision links. The next run can reuse that decision.

Assignment and reporting

assigned_user() selects the assignment group and assignee in Remedy, saves the request and handles confirmation dialogs. Successful assignments are written to MySQL and added to the in-memory distribution table.

The same data supports priority notifications, error reporting, a morning distribution summary and an end-of-day summary. The public mail adapter is a minimal replacement for the original internal framework.

The production MySQL data was also exposed through Grafana dashboards. These allowed the team to inspect both the current distribution and historical assignment data: which records were assigned, the receiving engineer and the number of assignments per engineer and day. The dashboards and their data-source configuration are not part of this public archive.

Public-review boundary

The repository validates the Excel parser, synthetic configuration consistency, Python syntax and privacy rules. End-to-end Selenium execution is intentionally not claimed because the original Remedy UI and related services were retired.