argus-alm 0.15.9__tar.gz → 0.15.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- argus_alm-0.15.11/.github/workflows/call_jira_sync.yml +42 -0
- argus_alm-0.15.11/.github/workflows/close_issue_for_scylla_employee.yml +62 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.github/workflows/test.yml +1 -1
- {argus_alm-0.15.9 → argus_alm-0.15.11}/PKG-INFO +7 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/_version.py +3 -3
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/base.py +25 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/driver_matrix_tests/client.py +4 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/generic/client.py +4 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/sct/client.py +24 -3
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/sirenada/client.py +4 -2
- argus_alm-0.15.11/argusAI/README.md +149 -0
- argus_alm-0.15.11/argusAI/event_similarity_processor_v2.py +237 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argusAI/utils/event_message_sanitizer.py +2 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus_alm.egg-info/PKG-INFO +7 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus_alm.egg-info/SOURCES.txt +13 -4
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus_alm.egg-info/requires.txt +7 -1
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus_backend.py +19 -1
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus_web.example.yaml +14 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/dev-db/alpha-config/scylla.yaml +1 -0
- argus_alm-0.15.11/dev-db/docker-compose.yaml +42 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/dev-db/export_data.py +20 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/dev-db/import_data.py +34 -1
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docs/api_usage.md +8 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docs/dev-setup.md +4 -5
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docs/generic_results.md +3 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/UserManager.svelte +5 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Github/GithubIssue.svelte +34 -25
- argus_alm-0.15.9/frontend/Github/GithubIssues.svelte → argus_alm-0.15.11/frontend/Github/Issues.svelte +192 -50
- argus_alm-0.15.9/frontend/Github/GithubIssuesCopyModal.svelte → argus_alm-0.15.11/frontend/Github/IssuesCopyModal.svelte +21 -15
- argus_alm-0.15.11/frontend/Jira/JiraIssue.svelte +368 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/Login.svelte +18 -1
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/ReleaseDashboard.svelte +2 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/IssueTab.svelte +3 -3
- argus_alm-0.15.11/frontend/TestRun/SCT/SctEvent.svelte +390 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/SCT/SctEvents.svelte +5 -3
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/SCT/SctNemesis.svelte +5 -3
- argus_alm-0.15.11/frontend/TestRun/SCT/SctSetup.svelte +64 -0
- argus_alm-0.15.11/frontend/TestRun/SCT/SctSimilarEvents.svelte +289 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/TestRun.svelte +28 -1
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/PytestWidget/PytestResultRow.svelte +1 -1
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/SummaryWidget/RunIssues.svelte +3 -3
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGithubIssues.svelte +2 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/argus.css +39 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/login.js +1 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/pyproject.toml +8 -2
- {argus_alm-0.15.9 → argus_alm-0.15.11}/pytest-argus-reporter/pytest_argus_reporter.py +5 -1
- argus_alm-0.15.11/scripts/migration/migration_2026-01-20-1.py +29 -0
- argus_alm-0.15.11/scripts/migration/migration_2026-01-20.py +106 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/auth/login.html.j2 +1 -0
- argus_alm-0.15.11/templates/auth/user_switch.html.j2 +39 -0
- argus_alm-0.15.11/templates/create_user.html.j2 +61 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/css/styles.css +17 -0
- argus_alm-0.15.11/templates/email/partials/generic_results.html.j2 +46 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/partials/nav_bar.html.j2 +10 -1
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/profile.html.j2 +23 -4
- argus_alm-0.15.11/uv.lock +3043 -0
- argus_alm-0.15.9/argusAI/README.md +0 -5
- argus_alm-0.15.9/argusAI/pyproject.toml +0 -11
- argus_alm-0.15.9/argusAI/uv.lock +0 -1636
- argus_alm-0.15.9/dev-db/docker-compose.yaml +0 -19
- argus_alm-0.15.9/frontend/TestRun/SCT/SctEvent.svelte +0 -209
- argus_alm-0.15.9/uv.lock +0 -1340
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.dockerignore +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.envrc +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.eslintrc.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.github/workflows/.gitkeep +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.github/workflows/lint.yml +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.github/workflows/release.yml +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.gitignore +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.pre-commit-config.yaml +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/.prettierrc.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/AGENTS.md +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/Dockerfile +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/LICENSE +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/MANIFEST.in +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/README.md +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/__init__.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/__init__.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/driver_matrix_tests/cli.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/generic/cli.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/generic_result.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/client/sct/types.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/common/__init__.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/common/email.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/common/enums.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/common/sct_types.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus/common/sirenada_types.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus.yaml +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argusAI/deployment/argusai_event_similarity_processor.service +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argusAI/event_similarity_processor.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argusAI/logs/.gitignore +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argusAI/utils/__init__.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argusAI/utils/scylla_connection.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus_alm.egg-info/dependency_links.txt +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus_alm.egg-info/entry_points.txt +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/argus_alm.egg-info/top_level.txt +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/commitlint.config.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/dev-db/.gitignore +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/dev-db/alpha-config/cassandra-rackdc.properties +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/dev-db/alpha-config/machine_image_configured +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/dev-db/alpha-data/.gitignore +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docker/config/nginx-docker.conf +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docker/config/supervisord.conf +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docker-entrypoint.sh +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docs/argus_status_page.md +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docs/argus_status_page_diagram.jpg +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docs/config/argus.nginx.conf +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docs/config/argus.service +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/docs/pypi-guide.md +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/AdminPanel.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/AdminPanelWelcome.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/BatchTestMover.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/GroupCreator.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ReleaseCreator.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ReleaseDeletionConfirmationPopup.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ReleaseEditor.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ReleaseManager.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ReleaseManagerGroup.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ReleaseManagerTest.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/TestCreator.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ViewListItem.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ViewSelectItem.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ViewWidget.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/AdminPanel/ViewsManager.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Alert.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Alerts/AlertMessage.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Alerts/AlertWidget.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/ApiUtils.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/ArgusNotification.ts +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/AssigneeSelector.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/AssigneeUtils.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/DateUtils.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/DriverMatrixTypes.ts +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/IssueDestinations.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/JenkinsSettingsHelp.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/ModalWindow.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/PluginDispatch.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/PluginNames.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/RunUtils.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/SelectUtils.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/StateManagement.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/TestStatus.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/TextUtils.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/UserTypes.ts +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/UserUtils.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Common/ViewTypes.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Debug/FlashDebugComponent.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Discussion/Comment.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Discussion/CommentEditor.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Discussion/MarkedMentionExtension.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Discussion/MentionSelector.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Discussion/UserProfile.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/JobsList.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/Notification.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/NotificationCommentWrapper.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/NotificationCounter.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/NotificationSender.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/NotificationTestRunWrapper.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/NotificationsReader.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/PlannedJob.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/PlannedJobs.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/ProfileJob.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/ProfileJobs.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/ProfileJobsTab.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/ProfileSchedules.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/User.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/UserSelection.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Profile/ViewUserResolver.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/AssigneeFilter.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/FlatViewHelper.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/GroupedViewHelper.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/ReleaseActivity.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/ReleaseGithubIssues.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/TestDashboard.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/TestDashboardFlatView.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/TestDashboardGroup.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/TestDashboardTest.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/TestPopoutSelector.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleaseDashboard/TestWithIssuesCard.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/CommentTableRow.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/DutyPlanner.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/EntityReplacer.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ReleasePlan.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ReleasePlanCopyForm.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ReleasePlanCreator.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ReleasePlanEditor.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ReleasePlanTable.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ReleasePlanner.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ReleasePlannerGridView.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ReleaseScheduler.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/Schedule.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/ScheduleTable.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/ReleasePlanner/SearchBar.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stats/ChartStats.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stats/NumberStats.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stats/ProgressBarStats.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stats/ReleaseStats.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stats/StatsFetcher.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stores/AlertStore.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stores/AssigneeSubscriber.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stores/SingleTestRunSubscriber.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stores/TestRunsSubscriber.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stores/UserlistSubscriber.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Stores/WorkspaceStore.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Teams/TeamCreateForm.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Teams/TeamDetail.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Teams/TeamList.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Teams/TeamManager.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Teams/TeamMember.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Teams/TeamShort.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Teams/TeamUtils.ts +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/ActivityTab.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/ArtifactRow.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/ArtifactTab.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Components/Cell.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Components/Filters.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Components/GraphFilters.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Components/ResultTable.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Components/ScreenshotModal.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/DriverMatrixBreakdown.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/DriverMatrixRunInfo.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/DriverMatrixTestCollection.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/DriverMatrixTestRun.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/DriverMatrixTestSuites.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/EventsTab.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Generic/GenericTestRun.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Generic/GenericTestRunInfo.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Generic/Subtest.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/HeartbeatIndicator.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/IssueTemplate.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/Build.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/BuildConfirmationDialog.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/BuildStartPlaceholder.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/BuildSuccessPlaceholder.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/CheckParam.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/CloneCreatePlaceholder.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/CloneSuccess.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/CloneTargetSelector.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/DummyCheckParam.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/DummySelectParam.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/JenkinsBuildModal.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/JenkinsCloneModal.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/LoadTargetsPlaceholder.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/ModalError.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/ParamFetchPlaceholder.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/ParameterEditor.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/SCTParameterWizard.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/SelectParam.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/StringParam.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/TextParam.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Jenkins/WizardUnavailable.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/NemesisData.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/NemesisReason.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/NemesisTable.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/PackagesInfo.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Pytest/DtestTab.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Pytest/PytestItem.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Pytest/PytestRun.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Pytest/PytestTab.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Pytest/index.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Pytest/types.ts +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/RawEvent.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/ResourcesInfo.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/ResultsGraph.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/ResultsGraphs.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/ResultsTab.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/RunAssigneeSelector.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/RunInvestigationStatusButton.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/RunStatusButton.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/SCTSubTests/Gemini/GeminiTabBodyComponent.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/SCTSubTests/Gemini/GeminiTabComponent.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/SCTSubTests/Performance/PerformanceTabBodyComponent.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/SCTSubTests/Performance/PerformanceTabComponent.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/SCTSubTests/Subtest.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Screenshots.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Sirenada/SirenadaIssueTemplate.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Sirenada/SirenadaRunInfo.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Sirenada/SirenadaTestBreakdown.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/Sirenada/SirenadaTestRun.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/StructuredEvent.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/TestRunComments.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/TestRunInfo.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/jUnitChart.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/TestRun/jUnitResults.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Utils/IntersectionObserver.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/ViewDashboard.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/ViewSelect.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/WidgetSettingTypes/CheckValue.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/WidgetSettingTypes/IntegerValue.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/WidgetSettingTypes/MultiSelectValue.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/WidgetSettingTypes/MultiStringValue.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/WidgetSettingTypes/StringValue.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/GraphsWidget/GraphsWidget.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/PytestWidget/PytestCalendarSelector.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/PytestWidget/PytestCollapseHelper.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/PytestWidget/PytestFlatHelper.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/PytestWidget/PytestOverviewWidget.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/PytestWidget/PytestTableWidget.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/PytestWidget/ViewPytestOverview.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/SummaryWidget/SummaryWidget.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/AssigneeCell.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/Filters.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/Interfaces.ts +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/InvestigationStatusCell.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/IssuesCell.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/NemesisTable.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/PaginatedTable.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/StackTracePreview.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/StatusBadge.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/StatusCell.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats/TestRunTable.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewGraphedStats.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewHighlights/ActionItem.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewHighlights/Comment.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewHighlights/HighlightItem.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewHighlights/ViewHighlights.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewNemesisStats.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewReleaseStats.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewTestDashboard.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/Views/Widgets/ViewUnsupportedPlaceholder.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/AssigneeList.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/JobConfigureModal.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/RunGroup.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/RunRelease.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/Test.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/TestRunDispatcher.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/TestRuns.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/TestRunsMessage.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/TestRunsPanel.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/TestRunsSelector.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/UnknownTest.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/WorkArea/WorkArea.svelte +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/admin-panel.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/argus.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/duty-planner.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/flashDebug.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/font-awesome.css +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/font-awesome.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/fonts/NotoSans-Bold.ttf +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/fonts/NotoSans-BoldItalic.ttf +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/fonts/NotoSans-Italic.ttf +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/fonts/NotoSans-Regular.ttf +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/fonts/OFL.txt +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/fonts/noto.css +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/markdownOptions.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/notification-counter.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/plan.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/profile-jobs.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/profile-notifications.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/profile-schedules.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/release-dashboard.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/release-page.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/release-planner.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/release-scheduler.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/run-by-plugin.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/teams.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/test-run-details.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/test-runs-breakout.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/test-runs-standalone.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/view-dashboard.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/view-user-resolver.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/frontend/work-area.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/package.json +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/profile/.gitkeep +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/public/argus.png +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/public/no-user-picture.png +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/pytest-argus-reporter/.envrc +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/pytest-argus-reporter/LICENSE +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/pytest-argus-reporter/MANIFEST.in +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/pytest-argus-reporter/README.md +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/pytest-argus-reporter/noxfile.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/pytest-argus-reporter/pyproject.toml +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/rollup.config.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/run_with_profiler.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/argus-status-page/index.html +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/argus-status-page/js/status.js +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/argus-status-page/static/app.css +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/argus-status-page/static/argus.png +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/argus-status-page/static/scylla.png +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/argus-status-page/status.json +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/migration/migration_2023-04-07.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/migration/migration_2024-04-14.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/scripts/migration/migration_2025-07-18.py +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/setup.cfg +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/start_argus.sh +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/storage/profile_pictures/.gitignore +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/admin/base.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/admin/index.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/auth/register.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/base.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/dashboard.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/duty_planner.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/base.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/cloud.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/custom_html.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/custom_table.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/events.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/header.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/logs.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/main.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/nemesis.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/packages.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/screenshots.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/email/partials/unsupported.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/error.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/flash_debug.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/groups.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/home.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/notifications/assigned.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/notifications/assigned_email.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/notifications/email_mention.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/notifications/mention.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/notifications/view_action_item_assigned.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/notifications/view_action_item_assigned_email.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/notifications/view_highlight_mention.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/notifications/view_highlight_mention_email.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/plan_dashboard.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/profile_jobs.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/profile_notifications.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/profile_schedules.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/release_dashboard.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/release_planner.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/release_schedule.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/releases.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/run_view_by_plugin.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/runs.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/standalone_test_with_runs.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/teams.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/test_run.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/test_runs.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/tests.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/view_dashboard.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/templates/views.html.j2 +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/tsconfig.json +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/uwsgi.ini +0 -0
- {argus_alm-0.15.9 → argus_alm-0.15.11}/yarn.lock +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Sync Jira Based on PR Events
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request_target:
|
|
5
|
+
types:
|
|
6
|
+
[opened, ready_for_review, review_requested, labeled, unlabeled, closed]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
pull-requests: write
|
|
11
|
+
issues: write
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
jira-sync-pr-opened:
|
|
15
|
+
if: github.event.action == 'opened'
|
|
16
|
+
uses: scylladb/github-automation/.github/workflows/main_jira_sync_pr_opened.yml@main
|
|
17
|
+
secrets:
|
|
18
|
+
caller_jira_auth: ${{ secrets.USER_AND_KEY_FOR_JIRA_AUTOMATION }}
|
|
19
|
+
|
|
20
|
+
jira-sync-in-review:
|
|
21
|
+
if: github.event.action == 'ready_for_review' || github.event.action == 'review_requested'
|
|
22
|
+
uses: scylladb/github-automation/.github/workflows/main_jira_sync_in_review.yml@main
|
|
23
|
+
secrets:
|
|
24
|
+
caller_jira_auth: ${{ secrets.USER_AND_KEY_FOR_JIRA_AUTOMATION }}
|
|
25
|
+
|
|
26
|
+
jira-sync-add-label:
|
|
27
|
+
if: github.event.action == 'labeled'
|
|
28
|
+
uses: scylladb/github-automation/.github/workflows/main_jira_sync_add_label.yml@main
|
|
29
|
+
secrets:
|
|
30
|
+
caller_jira_auth: ${{ secrets.USER_AND_KEY_FOR_JIRA_AUTOMATION }}
|
|
31
|
+
|
|
32
|
+
jira-status-remove-label:
|
|
33
|
+
if: github.event.action == 'unlabeled'
|
|
34
|
+
uses: scylladb/github-automation/.github/workflows/main_jira_sync_remove_label.yml@main
|
|
35
|
+
secrets:
|
|
36
|
+
caller_jira_auth: ${{ secrets.USER_AND_KEY_FOR_JIRA_AUTOMATION }}
|
|
37
|
+
|
|
38
|
+
jira-status-pr-closed:
|
|
39
|
+
if: github.event.action == 'closed'
|
|
40
|
+
uses: scylladb/github-automation/.github/workflows/main_jira_sync_pr_closed.yml@main
|
|
41
|
+
secrets:
|
|
42
|
+
caller_jira_auth: ${{ secrets.USER_AND_KEY_FOR_JIRA_AUTOMATION }}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Close issues created by Scylla employees
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issues:
|
|
5
|
+
types: [opened, reopened]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
issues: write
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
comment-and-close:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- name: Comment and close if author email is scylladb.com
|
|
16
|
+
uses: actions/github-script@v7
|
|
17
|
+
with:
|
|
18
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
19
|
+
script: |
|
|
20
|
+
const issue = context.payload.issue;
|
|
21
|
+
const actor = context.actor;
|
|
22
|
+
|
|
23
|
+
// Get user data (only public email is available)
|
|
24
|
+
const { data: user } = await github.rest.users.getByUsername({
|
|
25
|
+
username: actor,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const email = user.email || "";
|
|
29
|
+
console.log(`Actor: ${actor}, public email: ${email || "<none>"}`);
|
|
30
|
+
|
|
31
|
+
// Only continue if email exists and ends with @scylladb.com
|
|
32
|
+
if (!email || !email.toLowerCase().endsWith("@scylladb.com")) {
|
|
33
|
+
console.log("User is not a scylladb.com email (or email not public); skipping.");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const owner = context.repo.owner;
|
|
38
|
+
const repo = context.repo.repo;
|
|
39
|
+
const issue_number = issue.number;
|
|
40
|
+
|
|
41
|
+
const body = "Issues in this repository are closed automatically. Scylla employees should use Jira to manage issues.\nPlease move this issue to Jira https://scylladb.atlassian.net/jira/software/c/projects/ARGUS/list";
|
|
42
|
+
|
|
43
|
+
// Add the comment
|
|
44
|
+
await github.rest.issues.createComment({
|
|
45
|
+
owner,
|
|
46
|
+
repo,
|
|
47
|
+
issue_number,
|
|
48
|
+
body,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
console.log(`Comment added to #${issue_number}`);
|
|
52
|
+
|
|
53
|
+
// Close the issue
|
|
54
|
+
await github.rest.issues.update({
|
|
55
|
+
owner,
|
|
56
|
+
repo,
|
|
57
|
+
issue_number,
|
|
58
|
+
state: "closed",
|
|
59
|
+
state_reason: "not_planned"
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
console.log(`Issue #${issue_number} closed.`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: argus-alm
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.11
|
|
4
4
|
Summary: Argus
|
|
5
5
|
Author-email: Alexey Kartashov <alexey.kartashov@scylladb.com>, Łukasz Sójka <lukasz.sojka@scylladb.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -11,19 +11,22 @@ Description-Content-Type: text/markdown
|
|
|
11
11
|
License-File: LICENSE
|
|
12
12
|
Requires-Dist: requests>=2.26.0
|
|
13
13
|
Requires-Dist: click>=8.1.3
|
|
14
|
+
Requires-Dist: lz4>=4.4.4
|
|
14
15
|
Provides-Extra: web-backend
|
|
15
16
|
Requires-Dist: PyYAML~=6.0.0; extra == "web-backend"
|
|
16
|
-
Requires-Dist: scylla-driver>=3.
|
|
17
|
+
Requires-Dist: scylla-driver>=3.29.4; extra == "web-backend"
|
|
17
18
|
Requires-Dist: Flask~=3.0.0; extra == "web-backend"
|
|
18
19
|
Requires-Dist: Flask-WTF~=1.0.0; extra == "web-backend"
|
|
19
20
|
Requires-Dist: Flask-Login~=0.5.0; extra == "web-backend"
|
|
20
21
|
Requires-Dist: humanize~=3.13.1; extra == "web-backend"
|
|
22
|
+
Requires-Dist: PyJWT[crypto]>=2.10.0; extra == "web-backend"
|
|
21
23
|
Requires-Dist: python-magic~=0.4.24; extra == "web-backend"
|
|
22
24
|
Requires-Dist: uwsgi~=2.0.20; extra == "web-backend"
|
|
23
25
|
Requires-Dist: python-jenkins>=1.7.0; extra == "web-backend"
|
|
24
26
|
Requires-Dist: python-slugify~=6.1.1; extra == "web-backend"
|
|
25
27
|
Requires-Dist: pygithub>=2.6.1; extra == "web-backend"
|
|
26
28
|
Requires-Dist: boto3~=1.38.9; extra == "web-backend"
|
|
29
|
+
Requires-Dist: jira>=3.10.5; extra == "web-backend"
|
|
27
30
|
Requires-Dist: prometheus-flask-exporter>=0.23.2; extra == "web-backend"
|
|
28
31
|
Provides-Extra: docker-image
|
|
29
32
|
Requires-Dist: supervisor~=4.2.4; extra == "docker-image"
|
|
@@ -42,6 +45,8 @@ Requires-Dist: nox~=2025.5.1; extra == "dev"
|
|
|
42
45
|
Requires-Dist: pytest-xdist~=3.7.0; extra == "dev"
|
|
43
46
|
Requires-Dist: pytest-subtests~=0.14.1; extra == "dev"
|
|
44
47
|
Requires-Dist: boto3-stubs~=1.38.9; extra == "dev"
|
|
48
|
+
Provides-Extra: ai
|
|
49
|
+
Requires-Dist: chromadb>=1.0.15; extra == "ai"
|
|
45
50
|
Dynamic: license-file
|
|
46
51
|
|
|
47
52
|
# Argus
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.15.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 15,
|
|
31
|
+
__version__ = version = '0.15.11'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 15, 11)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g1da64281a'
|
|
@@ -5,6 +5,8 @@ from typing import Any, Type
|
|
|
5
5
|
from uuid import UUID
|
|
6
6
|
|
|
7
7
|
import requests
|
|
8
|
+
from requests.adapters import HTTPAdapter
|
|
9
|
+
from urllib3.util.retry import Retry
|
|
8
10
|
|
|
9
11
|
from argus.common.enums import TestStatus
|
|
10
12
|
from argus.client.generic_result import GenericResultTable
|
|
@@ -33,11 +35,30 @@ class ArgusClient:
|
|
|
33
35
|
FETCH_RESULTS = "/testrun/$type/$id/fetch_results"
|
|
34
36
|
FINALIZE = "/testrun/$type/$id/finalize"
|
|
35
37
|
|
|
36
|
-
def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None
|
|
38
|
+
def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
|
|
39
|
+
timeout: int = 60, max_retries: int = 3) -> None:
|
|
37
40
|
self._auth_token = auth_token
|
|
38
41
|
self._base_url = base_url
|
|
39
42
|
self._api_ver = api_version
|
|
43
|
+
self._timeout = timeout
|
|
40
44
|
self.session = requests.Session()
|
|
45
|
+
|
|
46
|
+
# Configure retry strategy
|
|
47
|
+
retry_strategy = Retry(
|
|
48
|
+
total=max_retries,
|
|
49
|
+
connect=max_retries,
|
|
50
|
+
read=max_retries,
|
|
51
|
+
status=0,
|
|
52
|
+
backoff_factor=1,
|
|
53
|
+
status_forcelist=(),
|
|
54
|
+
allowed_methods=["GET"],
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Mount adapter with retry strategy for both http and https
|
|
58
|
+
adapter = HTTPAdapter(max_retries=retry_strategy)
|
|
59
|
+
self.session.mount("http://", adapter)
|
|
60
|
+
self.session.mount("https://", adapter)
|
|
61
|
+
|
|
41
62
|
if extra_headers:
|
|
42
63
|
self.session.headers.update(extra_headers)
|
|
43
64
|
|
|
@@ -101,7 +122,8 @@ class ArgusClient:
|
|
|
101
122
|
response = self.session.get(
|
|
102
123
|
url=url,
|
|
103
124
|
params=params,
|
|
104
|
-
headers=self.request_headers
|
|
125
|
+
headers=self.request_headers,
|
|
126
|
+
timeout=self._timeout
|
|
105
127
|
)
|
|
106
128
|
LOGGER.debug("GET Response: %s %s", response.status_code, response.url)
|
|
107
129
|
|
|
@@ -124,6 +146,7 @@ class ArgusClient:
|
|
|
124
146
|
params=params,
|
|
125
147
|
json=body,
|
|
126
148
|
headers=self.request_headers,
|
|
149
|
+
timeout=self._timeout
|
|
127
150
|
)
|
|
128
151
|
LOGGER.debug("POST Response: %s %s", response.status_code, response.url)
|
|
129
152
|
|
|
@@ -12,8 +12,10 @@ class ArgusDriverMatrixClient(ArgusClient):
|
|
|
12
12
|
SUBMIT_DRIVER_FAILURE = "/driver_matrix/result/fail"
|
|
13
13
|
SUBMIT_ENV = "/driver_matrix/env/submit"
|
|
14
14
|
|
|
15
|
-
def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None
|
|
16
|
-
|
|
15
|
+
def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
|
|
16
|
+
timeout: int = 60, max_retries: int = 3) -> None:
|
|
17
|
+
super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers,
|
|
18
|
+
timeout=timeout, max_retries=max_retries)
|
|
17
19
|
self.run_id = run_id
|
|
18
20
|
|
|
19
21
|
def submit_driver_matrix_run(self, job_name: str, job_url: str) -> None:
|
|
@@ -12,8 +12,10 @@ class ArgusGenericClient(ArgusClient):
|
|
|
12
12
|
class Routes(ArgusClient.Routes):
|
|
13
13
|
TRIGGER_JOBS = "/planning/plan/trigger"
|
|
14
14
|
|
|
15
|
-
def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None
|
|
16
|
-
|
|
15
|
+
def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
|
|
16
|
+
timeout: int = 180, max_retries: int = 3) -> None:
|
|
17
|
+
super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers,
|
|
18
|
+
timeout=timeout, max_retries=max_retries)
|
|
17
19
|
|
|
18
20
|
def submit_generic_run(self, build_id: str, run_id: str, started_by: str, build_url: str, sub_type: str = None, scylla_version: str | None = None):
|
|
19
21
|
request_body = {
|
|
@@ -28,10 +28,13 @@ class ArgusSCTClient(ArgusClient):
|
|
|
28
28
|
SUBMIT_EVENTS = "/sct/$id/events/submit"
|
|
29
29
|
SUBMIT_EVENT = "/sct/$id/event/submit"
|
|
30
30
|
SUBMIT_JUNIT_REPORT = "/sct/$id/junit/submit"
|
|
31
|
+
SUBMIT_STRESS_CMD = "/sct/$id//stress_cmd/submit"
|
|
31
32
|
SUBMIT_EMAIL = "/testrun/report/email"
|
|
32
33
|
|
|
33
|
-
def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None
|
|
34
|
-
|
|
34
|
+
def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
|
|
35
|
+
timeout: int = 60, max_retries: int = 3) -> None:
|
|
36
|
+
super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers,
|
|
37
|
+
timeout=timeout, max_retries=max_retries)
|
|
35
38
|
self.run_id = run_id
|
|
36
39
|
|
|
37
40
|
def submit_sct_run(self, job_name: str, job_url: str, started_by: str, commit_id: str,
|
|
@@ -124,6 +127,22 @@ class ArgusSCTClient(ArgusClient):
|
|
|
124
127
|
)
|
|
125
128
|
self.check_response(response)
|
|
126
129
|
|
|
130
|
+
def add_stress_command(self, command: str, log_name: str, loader_name: str) -> None:
|
|
131
|
+
"""
|
|
132
|
+
Submits stress command information to be viewed inside Argus.
|
|
133
|
+
"""
|
|
134
|
+
response = self.post(
|
|
135
|
+
endpoint=self.Routes.SUBMIT_STRESS_CMD,
|
|
136
|
+
location_params={"id": str(self.run_id)},
|
|
137
|
+
body={
|
|
138
|
+
**self.generic_body,
|
|
139
|
+
"cmd": command,
|
|
140
|
+
"log_name": log_name,
|
|
141
|
+
"loader_name": loader_name,
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
self.check_response(response)
|
|
145
|
+
|
|
127
146
|
def submit_screenshots(self, screenshot_links: list[str]) -> None:
|
|
128
147
|
"""
|
|
129
148
|
Submits links to the screenshots from grafana, taken at the end of the test.
|
|
@@ -258,7 +277,8 @@ class ArgusSCTClient(ArgusClient):
|
|
|
258
277
|
self.check_response(response)
|
|
259
278
|
|
|
260
279
|
def submit_nemesis(self, name: str, class_name: str, start_time: int,
|
|
261
|
-
target_name: str, target_ip: str, target_shards: int
|
|
280
|
+
target_name: str, target_ip: str, target_shards: int,
|
|
281
|
+
description: str | None = None) -> None:
|
|
262
282
|
"""
|
|
263
283
|
Submits a nemesis record. Should then be finalized by
|
|
264
284
|
.finalize_nemesis method on nemesis completion.
|
|
@@ -275,6 +295,7 @@ class ArgusSCTClient(ArgusClient):
|
|
|
275
295
|
"node_name": target_name,
|
|
276
296
|
"node_ip": target_ip,
|
|
277
297
|
"node_shards": target_shards,
|
|
298
|
+
"description": description,
|
|
278
299
|
}
|
|
279
300
|
}
|
|
280
301
|
)
|
|
@@ -45,9 +45,11 @@ class ArgusSirenadaClient(ArgusClient):
|
|
|
45
45
|
"skipped": "skipped"
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None
|
|
48
|
+
def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
|
|
49
|
+
timeout: int = 60, max_retries: int = 3) -> None:
|
|
49
50
|
self.results_path: Path | None = None
|
|
50
|
-
super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers
|
|
51
|
+
super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers,
|
|
52
|
+
timeout=timeout, max_retries=max_retries)
|
|
51
53
|
|
|
52
54
|
def _verify_required_files_exist(self, results_path: Path):
|
|
53
55
|
assert (results_path / self._junit_xml_filename).exists(), "Missing jUnit XML results file!"
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Event Similarity Processor V2
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This directory contains the Event Similarity Processor V2 — the new system that generates and stores embeddings for SCT events. It supersedes the legacy `event_similarity_processor.py` that worked with the deprecated `sct_run` table, but for now both systems are allowed to run in parallel (see "Co‑existence with V1").
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
The processor follows a clean, decoupled flow:
|
|
10
|
+
|
|
11
|
+
1. Event creation → SCT events are submitted via `SCTService.submit_event()`
|
|
12
|
+
2. Queue → ERROR and CRITICAL events are added to `sct_unprocessed_events`
|
|
13
|
+
3. Processing loop → `event_similarity_processor_v2.py` continuously reads from the queue
|
|
14
|
+
4. Embedding generation → Message is sanitized, then embedded via the BGE‑Small‑EN model
|
|
15
|
+
5. Storage → Embeddings are written into severity‑specific tables
|
|
16
|
+
6. Cleanup → Processed events are removed from the queue
|
|
17
|
+
|
|
18
|
+
## Database Tables
|
|
19
|
+
|
|
20
|
+
### sct_unprocessed_events
|
|
21
|
+
Tracks events that need embedding generation:
|
|
22
|
+
- `run_id` (UUID, partition key)
|
|
23
|
+
- `severity` (text, clustering key)
|
|
24
|
+
- `ts` (timestamp, clustering key)
|
|
25
|
+
|
|
26
|
+
### sct_error_event_embedding
|
|
27
|
+
Stores ERROR event embeddings (separate table for performance):
|
|
28
|
+
- `run_id` (UUID, partition key)
|
|
29
|
+
- `ts` (timestamp, clustering key)
|
|
30
|
+
- `embedding` (list<float>)
|
|
31
|
+
|
|
32
|
+
### sct_critical_event_embedding
|
|
33
|
+
Stores CRITICAL event embeddings (separate table for performance):
|
|
34
|
+
- `run_id` (UUID, partition key)
|
|
35
|
+
- `ts` (timestamp, clustering key)
|
|
36
|
+
- `embedding` (list<float>)
|
|
37
|
+
|
|
38
|
+
Note: Using separate tables for ERROR and CRITICAL events keeps similarity searches scoped to a single severity class and improves query performance by avoiding mixed‑severity comparisons.
|
|
39
|
+
|
|
40
|
+
## Running the Processor
|
|
41
|
+
|
|
42
|
+
### Standalone
|
|
43
|
+
```bash
|
|
44
|
+
cd argusAI
|
|
45
|
+
PYTHONPATH=.. uv run event_similarity_processor_v2.py
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### As a Service
|
|
49
|
+
The processor runs in an infinite loop and every ~1s:
|
|
50
|
+
- Reads up to 100 unprocessed events per batch
|
|
51
|
+
- Routes embeddings to the table matching the event severity
|
|
52
|
+
- Handles errors gracefully (logs and continues)
|
|
53
|
+
- Can be stopped with Ctrl+C
|
|
54
|
+
|
|
55
|
+
## Key Features
|
|
56
|
+
|
|
57
|
+
### Severity‑specific storage
|
|
58
|
+
- ERROR → `sct_error_event_embedding`
|
|
59
|
+
- CRITICAL → `sct_critical_event_embedding`
|
|
60
|
+
- Faster similarity searches within the same severity
|
|
61
|
+
|
|
62
|
+
### Message sanitization
|
|
63
|
+
Uses `MessageSanitizer` from `argusAI/utils/event_message_sanitizer.py` to:
|
|
64
|
+
- Remove IPs, URLs, file paths
|
|
65
|
+
- Normalize timestamps and memory addresses
|
|
66
|
+
- Clean up stack traces and backtraces
|
|
67
|
+
- Remove redundant/noisy details
|
|
68
|
+
|
|
69
|
+
### Embedding model
|
|
70
|
+
`BgeSmallEnEmbeddingModel` (BGE‑Small‑EN‑v1.5):
|
|
71
|
+
- 384‑dimensional embeddings
|
|
72
|
+
- Optimized for semantic similarity search
|
|
73
|
+
- Same model family used by the legacy processor for consistency
|
|
74
|
+
|
|
75
|
+
### Error handling
|
|
76
|
+
- Event not found → logged and skipped
|
|
77
|
+
- Empty message → logged and skipped
|
|
78
|
+
- Sanitization failure → logged and removed from queue
|
|
79
|
+
- Embedding failure → logged and removed from queue
|
|
80
|
+
- Failures are removed from the queue to avoid infinite retries
|
|
81
|
+
|
|
82
|
+
## Testing
|
|
83
|
+
|
|
84
|
+
### Unit tests
|
|
85
|
+
```bash
|
|
86
|
+
PYTHONPATH=. uv run pytest argusAI
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Covers initialization, single/batch processing, error handling, and shutdown behavior.
|
|
90
|
+
|
|
91
|
+
### Integration tests
|
|
92
|
+
```bash
|
|
93
|
+
uv run pytest argus/backend/tests/sct_events/test_event_embedding_integration.py -v
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Covers the end‑to‑end flow from event creation to storage, proper routing to severity tables, verifying that non‑ERROR/CRITICAL events don’t create queue entries, multi‑event processing, and error recovery.
|
|
97
|
+
|
|
98
|
+
## Monitoring & Metrics
|
|
99
|
+
|
|
100
|
+
Logging:
|
|
101
|
+
- INFO: processing cycles, batch counts, startup/shutdown, table routing
|
|
102
|
+
- DEBUG: per‑event processing, chosen table names
|
|
103
|
+
- WARNING: missing events, empty messages
|
|
104
|
+
- ERROR: processing/database failures
|
|
105
|
+
|
|
106
|
+
Metrics:
|
|
107
|
+
- `processed_count`: total successfully processed events
|
|
108
|
+
- `error_count`: total errors encountered
|
|
109
|
+
|
|
110
|
+
## Differences from V1
|
|
111
|
+
|
|
112
|
+
Improvements in V2:
|
|
113
|
+
1. Cleaner architecture: no Vector DB dependency for processing
|
|
114
|
+
2. Better error handling: failures don’t block processing
|
|
115
|
+
3. Simpler flow: queue → process → store
|
|
116
|
+
4. Severity‑specific tables for similarity performance
|
|
117
|
+
5. Comprehensive unit and integration tests
|
|
118
|
+
|
|
119
|
+
What’s not included in V2:
|
|
120
|
+
- Similarity search (removed from the processor itself)
|
|
121
|
+
- ChromaDB collections (not required for embedding storage)
|
|
122
|
+
- Historical event backfill (processes only new events)
|
|
123
|
+
|
|
124
|
+
## Performance Benefits
|
|
125
|
+
|
|
126
|
+
By separating ERROR and CRITICAL embeddings:
|
|
127
|
+
- Faster similarity searches (smaller, severity‑scoped sets)
|
|
128
|
+
- Better data locality
|
|
129
|
+
- Reduced query complexity (no severity filters inside similarity search)
|
|
130
|
+
- Improved scalability (per‑table tuning)
|
|
131
|
+
|
|
132
|
+
## Configuration
|
|
133
|
+
|
|
134
|
+
No dedicated config file is required for the processor itself. It uses the standard Argus configuration for database connectivity (e.g., ScyllaDB settings from your environment or YAML config such as `argus.yaml`/`argus.local.yaml`, depending on your deployment). The embedding model is auto‑downloaded to `~/.cache/chroma/onnx_models/`.
|
|
135
|
+
|
|
136
|
+
## Co‑existence with V1 (temporary)
|
|
137
|
+
|
|
138
|
+
- For now, both V1 (`event_similarity_processor.py`) and V2 (`event_similarity_processor_v2.py`) may run in parallel.
|
|
139
|
+
- There is no data migration at this time; V1 will be disabled once the team fully moves to V2.
|
|
140
|
+
- If you still need to run V1 locally for comparison or fallback:
|
|
141
|
+
```bash
|
|
142
|
+
cd argusAI
|
|
143
|
+
PYTHONPATH=.. uv run event_similarity_processor.py
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Notes
|
|
147
|
+
|
|
148
|
+
- Avoid mixing severities in similarity queries; use the dedicated tables for the best performance.
|
|
149
|
+
- If you encounter repeated failures for the same event, verify the event content after sanitization and check connectivity to the database and model files.
|