argus-alm 0.15.6__tar.gz → 0.15.8__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.8/AGENTS.md +27 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/PKG-INFO +6 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/README.md +4 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/_version.py +3 -3
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/base.py +5 -8
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/sct/client.py +21 -0
- argus_alm-0.15.8/argus/common/email.py +33 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/common/enums.py +1 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus_alm.egg-info/PKG-INFO +6 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus_alm.egg-info/SOURCES.txt +18 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus_alm.egg-info/requires.txt +1 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus_backend.py +28 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus_web.example.yaml +1 -1
- argus_alm-0.15.8/docs/api_usage.md +280 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ViewWidget.svelte +33 -5
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ViewsManager.svelte +28 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/ModalWindow.svelte +5 -4
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/TestStatus.js +16 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/ViewTypes.js +16 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/Login.svelte +1 -40
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/AssigneeFilter.svelte +5 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/TestDashboard.svelte +2 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stats/NumberStats.svelte +3 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stats/ReleaseStats.svelte +3 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/ArtifactRow.svelte +6 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/ArtifactTab.svelte +40 -3
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/EventsTab.svelte +207 -49
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/IssueTemplate.svelte +8 -8
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/NemesisTable.svelte +1 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/PackagesInfo.svelte +15 -2
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/ResourcesInfo.svelte +1 -1
- argus_alm-0.15.8/frontend/TestRun/SCT/SctEvent.svelte +209 -0
- argus_alm-0.15.8/frontend/TestRun/SCT/SctEvents.svelte +314 -0
- argus_alm-0.15.8/frontend/TestRun/SCT/SctNemesis.svelte +84 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/StructuredEvent.svelte +29 -9
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/TestRun.svelte +81 -43
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/ViewDashboard.svelte +3 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats.svelte +2 -4
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewHighlights/ViewHighlights.svelte +318 -63
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewReleaseStats.svelte +2 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/pyproject.toml +1 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/pytest-argus-reporter/pyproject.toml +1 -2
- {argus_alm-0.15.6 → argus_alm-0.15.8}/pytest-argus-reporter/pytest_argus_reporter.py +2 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/start_argus.sh +5 -0
- argus_alm-0.15.8/templates/email/base.html.j2 +46 -0
- argus_alm-0.15.8/templates/email/css/styles.css +179 -0
- argus_alm-0.15.8/templates/email/partials/cloud.html.j2 +29 -0
- argus_alm-0.15.8/templates/email/partials/custom_html.html.j2 +8 -0
- argus_alm-0.15.8/templates/email/partials/custom_table.html.j2 +25 -0
- argus_alm-0.15.8/templates/email/partials/events.html.j2 +23 -0
- argus_alm-0.15.8/templates/email/partials/header.html.j2 +9 -0
- argus_alm-0.15.8/templates/email/partials/logs.html.j2 +12 -0
- argus_alm-0.15.8/templates/email/partials/main.html.j2 +27 -0
- argus_alm-0.15.8/templates/email/partials/nemesis.html.j2 +29 -0
- argus_alm-0.15.8/templates/email/partials/packages.html.j2 +21 -0
- argus_alm-0.15.8/templates/email/partials/screenshots.html.j2 +15 -0
- argus_alm-0.15.8/templates/email/partials/unsupported.html.j2 +11 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/tsconfig.json +2 -2
- {argus_alm-0.15.6 → argus_alm-0.15.8}/uv.lock +25 -1
- {argus_alm-0.15.6 → argus_alm-0.15.8}/uwsgi.ini +1 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/yarn.lock +30 -15
- argus_alm-0.15.6/docs/api_usage.md +0 -120
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.dockerignore +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.envrc +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.eslintrc.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.github/workflows/.gitkeep +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.github/workflows/lint.yml +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.github/workflows/release.yml +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.github/workflows/test.yml +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.gitignore +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.pre-commit-config.yaml +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/.prettierrc.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/Dockerfile +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/LICENSE +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/MANIFEST.in +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/__init__.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/__init__.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/driver_matrix_tests/cli.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/driver_matrix_tests/client.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/generic/cli.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/generic/client.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/generic_result.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/sct/types.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/client/sirenada/client.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/common/__init__.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/common/sct_types.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus/common/sirenada_types.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus.yaml +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/README.md +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/deployment/argusai_event_similarity_processor.service +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/event_similarity_processor.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/logs/.gitignore +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/pyproject.toml +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/utils/__init__.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/utils/event_message_sanitizer.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/utils/scylla_connection.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argusAI/uv.lock +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus_alm.egg-info/dependency_links.txt +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus_alm.egg-info/entry_points.txt +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/argus_alm.egg-info/top_level.txt +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/commitlint.config.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/dev-db/.gitignore +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/dev-db/alpha-config/cassandra-rackdc.properties +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/dev-db/alpha-config/machine_image_configured +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/dev-db/alpha-config/scylla.yaml +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/dev-db/alpha-data/.gitignore +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/dev-db/docker-compose.yaml +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/dev-db/export_data.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/dev-db/import_data.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docker/config/nginx-docker.conf +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docker/config/supervisord.conf +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docker-entrypoint.sh +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docs/argus_status_page.md +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docs/argus_status_page_diagram.jpg +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docs/config/argus.nginx.conf +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docs/config/argus.service +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docs/dev-setup.md +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docs/generic_results.md +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/docs/pypi-guide.md +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/AdminPanel.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/AdminPanelWelcome.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/BatchTestMover.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/GroupCreator.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ReleaseCreator.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ReleaseDeletionConfirmationPopup.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ReleaseEditor.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ReleaseManager.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ReleaseManagerGroup.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ReleaseManagerTest.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/TestCreator.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/UserManager.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ViewListItem.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/AdminPanel/ViewSelectItem.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Alert.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Alerts/AlertMessage.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Alerts/AlertWidget.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/ApiUtils.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/ArgusNotification.ts +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/AssigneeSelector.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/AssigneeUtils.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/DateUtils.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/DriverMatrixTypes.ts +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/IssueDestinations.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/JenkinsSettingsHelp.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/PluginDispatch.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/PluginNames.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/RunUtils.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/SelectUtils.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/StateManagement.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/TextUtils.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/UserTypes.ts +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Common/UserUtils.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Debug/FlashDebugComponent.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Discussion/Comment.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Discussion/CommentEditor.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Discussion/MarkedMentionExtension.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Discussion/MentionSelector.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Discussion/UserProfile.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Github/GithubIssue.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Github/GithubIssues.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Github/GithubIssuesCopyModal.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/JobsList.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/Notification.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/NotificationCommentWrapper.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/NotificationCounter.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/NotificationSender.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/NotificationTestRunWrapper.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/NotificationsReader.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/PlannedJob.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/PlannedJobs.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/ProfileJob.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/ProfileJobs.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/ProfileJobsTab.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/ProfileSchedules.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/User.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/UserSelection.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Profile/ViewUserResolver.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/FlatViewHelper.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/GroupedViewHelper.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/ReleaseActivity.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/ReleaseDashboard.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/ReleaseGithubIssues.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/TestDashboardFlatView.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/TestDashboardGroup.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/TestDashboardTest.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/TestPopoutSelector.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleaseDashboard/TestWithIssuesCard.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/CommentTableRow.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/DutyPlanner.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/EntityReplacer.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ReleasePlan.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ReleasePlanCopyForm.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ReleasePlanCreator.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ReleasePlanEditor.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ReleasePlanTable.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ReleasePlanner.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ReleasePlannerGridView.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ReleaseScheduler.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/Schedule.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/ScheduleTable.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/ReleasePlanner/SearchBar.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stats/ChartStats.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stats/ProgressBarStats.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stats/StatsFetcher.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stores/AlertStore.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stores/AssigneeSubscriber.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stores/SingleTestRunSubscriber.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stores/TestRunsSubscriber.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stores/UserlistSubscriber.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Stores/WorkspaceStore.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Teams/TeamCreateForm.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Teams/TeamDetail.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Teams/TeamList.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Teams/TeamManager.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Teams/TeamMember.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Teams/TeamShort.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Teams/TeamUtils.ts +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/ActivityTab.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Components/Cell.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Components/Filters.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Components/GraphFilters.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Components/ResultTable.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Components/ScreenshotModal.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/DriverMatrixBreakdown.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/DriverMatrixRunInfo.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/DriverMatrixTestCollection.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/DriverMatrixTestRun.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/DriverMatrixTestSuites.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Generic/GenericTestRun.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Generic/GenericTestRunInfo.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Generic/Subtest.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/HeartbeatIndicator.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/IssueTab.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/Build.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/BuildConfirmationDialog.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/BuildStartPlaceholder.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/BuildSuccessPlaceholder.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/CheckParam.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/CloneCreatePlaceholder.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/CloneSuccess.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/CloneTargetSelector.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/DummyCheckParam.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/DummySelectParam.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/JenkinsBuildModal.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/JenkinsCloneModal.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/LoadTargetsPlaceholder.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/ModalError.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/ParamFetchPlaceholder.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/ParameterEditor.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/SCTParameterWizard.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/SelectParam.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/StringParam.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/TextParam.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Jenkins/WizardUnavailable.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/NemesisData.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/NemesisReason.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Pytest/DtestTab.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Pytest/PytestItem.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Pytest/PytestRun.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Pytest/PytestTab.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Pytest/index.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Pytest/types.ts +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/RawEvent.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/ResultsGraph.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/ResultsGraphs.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/ResultsTab.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/RunAssigneeSelector.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/RunInvestigationStatusButton.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/RunStatusButton.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/SCTSubTests/Gemini/GeminiTabBodyComponent.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/SCTSubTests/Gemini/GeminiTabComponent.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/SCTSubTests/Performance/PerformanceTabBodyComponent.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/SCTSubTests/Performance/PerformanceTabComponent.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/SCTSubTests/Subtest.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Screenshots.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Sirenada/SirenadaIssueTemplate.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Sirenada/SirenadaRunInfo.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Sirenada/SirenadaTestBreakdown.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/Sirenada/SirenadaTestRun.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/TestRunComments.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/TestRunInfo.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/jUnitChart.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/TestRun/jUnitResults.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Utils/IntersectionObserver.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/ViewSelect.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/WidgetSettingTypes/CheckValue.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/WidgetSettingTypes/IntegerValue.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/WidgetSettingTypes/MultiSelectValue.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/WidgetSettingTypes/MultiStringValue.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/WidgetSettingTypes/StringValue.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/GraphsWidget/GraphsWidget.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/PytestWidget/PytestCalendarSelector.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/PytestWidget/PytestCollapseHelper.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/PytestWidget/PytestFlatHelper.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/PytestWidget/PytestOverviewWidget.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/PytestWidget/PytestResultRow.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/PytestWidget/PytestTableWidget.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/PytestWidget/ViewPytestOverview.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/SummaryWidget/RunIssues.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/SummaryWidget/SummaryWidget.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGithubIssues.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/AssigneeCell.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/Filters.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/Interfaces.ts +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/InvestigationStatusCell.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/IssuesCell.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/NemesisTable.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/PaginatedTable.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/StackTracePreview.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/StatusBadge.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/StatusCell.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewGraphedStats/TestRunTable.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewHighlights/ActionItem.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewHighlights/Comment.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewHighlights/HighlightItem.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewNemesisStats.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewTestDashboard.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/Views/Widgets/ViewUnsupportedPlaceholder.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/AssigneeList.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/JobConfigureModal.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/RunGroup.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/RunRelease.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/Test.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/TestRunDispatcher.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/TestRuns.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/TestRunsMessage.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/TestRunsPanel.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/TestRunsSelector.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/UnknownTest.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/WorkArea/WorkArea.svelte +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/admin-panel.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/argus.css +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/argus.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/duty-planner.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/flashDebug.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/font-awesome.css +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/font-awesome.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/fonts/NotoSans-Bold.ttf +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/fonts/NotoSans-BoldItalic.ttf +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/fonts/NotoSans-Italic.ttf +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/fonts/NotoSans-Regular.ttf +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/fonts/OFL.txt +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/fonts/noto.css +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/login.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/markdownOptions.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/notification-counter.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/plan.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/profile-jobs.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/profile-notifications.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/profile-schedules.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/release-dashboard.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/release-page.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/release-planner.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/release-scheduler.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/run-by-plugin.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/teams.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/test-run-details.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/test-runs-breakout.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/test-runs-standalone.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/view-dashboard.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/view-user-resolver.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/frontend/work-area.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/package.json +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/profile/.gitkeep +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/public/argus.png +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/public/no-user-picture.png +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/pytest-argus-reporter/.envrc +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/pytest-argus-reporter/LICENSE +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/pytest-argus-reporter/MANIFEST.in +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/pytest-argus-reporter/README.md +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/pytest-argus-reporter/noxfile.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/rollup.config.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/run_with_profiler.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/argus-status-page/index.html +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/argus-status-page/js/status.js +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/argus-status-page/static/app.css +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/argus-status-page/static/argus.png +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/argus-status-page/static/scylla.png +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/argus-status-page/status.json +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/migration/migration_2023-04-07.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/migration/migration_2024-04-14.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/scripts/migration/migration_2025-07-18.py +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/setup.cfg +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/storage/profile_pictures/.gitignore +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/admin/base.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/admin/index.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/auth/login.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/auth/register.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/base.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/dashboard.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/duty_planner.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/error.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/flash_debug.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/groups.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/home.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/notifications/assigned.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/notifications/assigned_email.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/notifications/email_mention.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/notifications/mention.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/notifications/view_action_item_assigned.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/notifications/view_action_item_assigned_email.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/notifications/view_highlight_mention.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/notifications/view_highlight_mention_email.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/partials/nav_bar.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/plan_dashboard.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/profile.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/profile_jobs.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/profile_notifications.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/profile_schedules.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/release_dashboard.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/release_planner.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/release_schedule.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/releases.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/run_view_by_plugin.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/runs.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/standalone_test_with_runs.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/teams.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/test_run.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/test_runs.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/tests.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/view_dashboard.html.j2 +0 -0
- {argus_alm-0.15.6 → argus_alm-0.15.8}/templates/views.html.j2 +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Repository Guidelines
|
|
2
|
+
|
|
3
|
+
## Project Structure & Module Organization
|
|
4
|
+
Backend services live in `argus/backend` with Flask entry points defined in `argus_backend.py`; shared helpers sit in `argus/common`, while CLI tooling and client integrations are under `argus/client`. Frontend assets are in `frontend/`, compiled into `public/dist`, and HTML templates stay in `templates/`. Test suites are grouped in `argus/backend/tests`, `argus/client/tests`, and `pytest-argus-reporter/tests`.
|
|
5
|
+
|
|
6
|
+
## Build, Test, and Development Commands
|
|
7
|
+
Install dependencies with `uv sync --all-extras` and `yarn install`. Rebuild the Svelte-based UI with `ROLLUP_ENV=development yarn rollup -c --watch`. Start the API locally via `FLASK_ENV=development FLASK_APP=argus_backend:start_server CQLENG_ALLOW_SCHEMA_MANAGEMENT=1 uv run flask run`. For linting, run `uv run ruff check`. Run server-side tests with `uv run pytest argus/backend/tests` and client utilities through `uv run pytest argus/client/tests`.
|
|
8
|
+
|
|
9
|
+
## Coding Style & Naming Conventions
|
|
10
|
+
Python code targets 3.12, uses 4-space indentation, and a 120-character line width enforced by Ruff and Autopep8 (see `pyproject.toml`). Prefer descriptive snake_case for Python modules and functions; keep Svelte/JS components in PascalCase folders aligned with entry files (e.g., `frontend/AdminPanel/`). Organize Flask blueprints by feature under `argus/backend` and export public APIs through `__init__.py`.
|
|
11
|
+
|
|
12
|
+
## Svelte 5 Frontend Patterns
|
|
13
|
+
- Favor the rune APIs (`$props`, `$state`, `$derived`, `run`) for component state and avoid legacy `$:` reactivity when a rune captures intent better.
|
|
14
|
+
- Reach into the DOM through Svelte bindings or actions (`bind:this`, `use:…`) rather than global selectors; never call `Node.querySelector*` inside components—track nodes via bindings and stores instead.
|
|
15
|
+
- Prefer component composition, snippets, and `@const/@render` blocks over imperative DOM updates; lean on `await tick()` when you must wait for the DOM after state changes.
|
|
16
|
+
- Keep data transformations in script context and pass plain data to the markup; don’t derive clipboard or export payloads by scraping rendered HTML.
|
|
17
|
+
- Encapsulate escape-hatch logic (Bootstrap collapse, portals, external widgets) inside reusable actions/helpers so behavior is testable and discoverable.
|
|
18
|
+
- Use TypeScript-friendly patterns (typed props, `import type …`) whenever you bind component instances or DOM nodes, and co-locate UI-specific helpers next to their components.
|
|
19
|
+
|
|
20
|
+
## Testing Guidelines
|
|
21
|
+
Tests follow `test_*.py` naming and Pytest markers such as `@pytest.mark.docker_required` for Docker-heavy suites. Keep unit tests close to their modules (e.g., `results_service` tests). Execute full coverage with `uv run pytest --cov=argus backend/tests client/tests`. Add fixtures under `argus/backend/tests/conftest.py` when sharing setup.
|
|
22
|
+
|
|
23
|
+
## Commit & Pull Request Guidelines
|
|
24
|
+
Adopt the Conventional Commits style observed in history (`fix(scope): message`, `feature(app): ...`). Compose commits around a single logical change and run lint/tests before pushing. Pull requests should describe intent, outline manual validation steps, and link tracking issues; include screenshots or API payload snippets when UI or API responses change.
|
|
25
|
+
|
|
26
|
+
## Configuration & Security Notes
|
|
27
|
+
Never commit secrets: When testing against Cassandra, use the Docker compose setup in `dev-db/` and tear it down after use. Keep sample data archives outside the repository to avoid leaking production artifacts.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: argus-alm
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.8
|
|
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
|
|
@@ -24,6 +24,7 @@ Requires-Dist: python-jenkins>=1.7.0; extra == "web-backend"
|
|
|
24
24
|
Requires-Dist: python-slugify~=6.1.1; extra == "web-backend"
|
|
25
25
|
Requires-Dist: pygithub>=2.6.1; extra == "web-backend"
|
|
26
26
|
Requires-Dist: boto3~=1.38.9; extra == "web-backend"
|
|
27
|
+
Requires-Dist: prometheus-flask-exporter>=0.23.2; extra == "web-backend"
|
|
27
28
|
Provides-Extra: docker-image
|
|
28
29
|
Requires-Dist: supervisor~=4.2.4; extra == "docker-image"
|
|
29
30
|
Provides-Extra: dev
|
|
@@ -50,6 +51,10 @@ Dynamic: license-file
|
|
|
50
51
|
|
|
51
52
|
Argus is a test tracking system intended to provide observability into automated test pipelines which use long-running resources. It allows observation of a test status, its events and its allocated resources. It also allows easy comparison between particular runs of a specific test.
|
|
52
53
|
|
|
54
|
+
## Contributing
|
|
55
|
+
|
|
56
|
+
Review the [Repository Guidelines](AGENTS.md) for project structure, tooling expectations, and pull request practices before submitting changes.
|
|
57
|
+
|
|
53
58
|
## Installation notes
|
|
54
59
|
|
|
55
60
|
### Development
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
Argus is a test tracking system intended to provide observability into automated test pipelines which use long-running resources. It allows observation of a test status, its events and its allocated resources. It also allows easy comparison between particular runs of a specific test.
|
|
7
7
|
|
|
8
|
+
## Contributing
|
|
9
|
+
|
|
10
|
+
Review the [Repository Guidelines](AGENTS.md) for project structure, tooling expectations, and pull request practices before submitting changes.
|
|
11
|
+
|
|
8
12
|
## Installation notes
|
|
9
13
|
|
|
10
14
|
### Development
|
|
@@ -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.8'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 15, 8)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'geb08ab7cf'
|
|
@@ -37,16 +37,14 @@ class ArgusClient:
|
|
|
37
37
|
self._auth_token = auth_token
|
|
38
38
|
self._base_url = base_url
|
|
39
39
|
self._api_ver = api_version
|
|
40
|
-
self.
|
|
40
|
+
self.session = requests.Session()
|
|
41
|
+
if extra_headers:
|
|
42
|
+
self.session.headers.update(extra_headers)
|
|
41
43
|
|
|
42
44
|
@property
|
|
43
45
|
def auth_token(self) -> str:
|
|
44
46
|
return self._auth_token
|
|
45
47
|
|
|
46
|
-
@property
|
|
47
|
-
def extra_headers(self) -> dict:
|
|
48
|
-
return self._extra_headers
|
|
49
|
-
|
|
50
48
|
def verify_location_params(self, endpoint: str, location_params: dict[str, str]) -> bool:
|
|
51
49
|
required_params: list[str] = re.findall(r"\$[\w_]+", endpoint)
|
|
52
50
|
for param in required_params:
|
|
@@ -92,7 +90,6 @@ class ArgusClient:
|
|
|
92
90
|
"Authorization": f"token {self.auth_token}",
|
|
93
91
|
"Accept": "application/json",
|
|
94
92
|
"Content-Type": "application/json",
|
|
95
|
-
**self.extra_headers,
|
|
96
93
|
}
|
|
97
94
|
|
|
98
95
|
def get(self, endpoint: str, location_params: dict[str, str] = None, params: dict = None) -> requests.Response:
|
|
@@ -101,7 +98,7 @@ class ArgusClient:
|
|
|
101
98
|
location_params=location_params
|
|
102
99
|
)
|
|
103
100
|
LOGGER.debug("GET Request: %s, params: %s", url, params)
|
|
104
|
-
response =
|
|
101
|
+
response = self.session.get(
|
|
105
102
|
url=url,
|
|
106
103
|
params=params,
|
|
107
104
|
headers=self.request_headers
|
|
@@ -122,7 +119,7 @@ class ArgusClient:
|
|
|
122
119
|
location_params=location_params
|
|
123
120
|
)
|
|
124
121
|
LOGGER.debug("POST Request: %s, params: %s, body: %s", url, params, body)
|
|
125
|
-
response =
|
|
122
|
+
response = self.session.post(
|
|
126
123
|
url=url,
|
|
127
124
|
params=params,
|
|
128
125
|
json=body,
|
|
@@ -2,6 +2,7 @@ import base64
|
|
|
2
2
|
from typing import Any
|
|
3
3
|
from uuid import UUID
|
|
4
4
|
from dataclasses import asdict
|
|
5
|
+
from argus.common.email import RawAttachment, ReportSection, ReportSectionShortHand
|
|
5
6
|
from argus.common.sct_types import GeminiResultsRequest, PerformanceResultsRequest, RawEventPayload
|
|
6
7
|
from argus.common.enums import ResourceState, TestStatus
|
|
7
8
|
from argus.client.base import ArgusClient
|
|
@@ -27,6 +28,7 @@ class ArgusSCTClient(ArgusClient):
|
|
|
27
28
|
SUBMIT_EVENTS = "/sct/$id/events/submit"
|
|
28
29
|
SUBMIT_EVENT = "/sct/$id/event/submit"
|
|
29
30
|
SUBMIT_JUNIT_REPORT = "/sct/$id/junit/submit"
|
|
31
|
+
SUBMIT_EMAIL = "/testrun/report"
|
|
30
32
|
|
|
31
33
|
def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
|
|
32
34
|
super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers)
|
|
@@ -136,6 +138,25 @@ class ArgusSCTClient(ArgusClient):
|
|
|
136
138
|
)
|
|
137
139
|
self.check_response(response)
|
|
138
140
|
|
|
141
|
+
def send_email(self, recipients: list[str], title: str = "#auto", sections: list[ReportSection | ReportSectionShortHand] = None, attachments: list[RawAttachment] | None = None) -> None:
|
|
142
|
+
"""
|
|
143
|
+
Send a testrun report email using Argus.
|
|
144
|
+
Documentation: https://github.com/scylladb/argus/blob/master/docs/api_usage.md#L124
|
|
145
|
+
"""
|
|
146
|
+
response = self.post(
|
|
147
|
+
endpoint=self.Routes.SUBMIT_EMAIL,
|
|
148
|
+
location_params={},
|
|
149
|
+
body={
|
|
150
|
+
**self.generic_body,
|
|
151
|
+
"run_id": self.run_id,
|
|
152
|
+
"title": title,
|
|
153
|
+
"recipients": recipients,
|
|
154
|
+
"sections": sections or [],
|
|
155
|
+
"attachments": attachments or [],
|
|
156
|
+
}
|
|
157
|
+
)
|
|
158
|
+
self.check_response(response)
|
|
159
|
+
|
|
139
160
|
def submit_gemini_results(self, gemini_data: GeminiResultsRequest) -> None:
|
|
140
161
|
"""
|
|
141
162
|
Submits gemini results such as oracle node information and gemini command & its results
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
from typing import Any, Literal, TypedDict
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ReportSection(TypedDict):
|
|
6
|
+
type: str
|
|
7
|
+
options: dict[str, Any]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
ReportSectionShortHand = Literal["main",
|
|
11
|
+
"header",
|
|
12
|
+
"packages",
|
|
13
|
+
"logs",
|
|
14
|
+
"cloud",
|
|
15
|
+
"nemesis",
|
|
16
|
+
"events",
|
|
17
|
+
"screenshots",
|
|
18
|
+
"custom_table",
|
|
19
|
+
"custom_html",]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class RawAttachment(TypedDict):
|
|
23
|
+
filename: str
|
|
24
|
+
data: str # Base64 string
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class RawReportSendRequest(TypedDict):
|
|
28
|
+
schema_version: str
|
|
29
|
+
run_id: str
|
|
30
|
+
title: str
|
|
31
|
+
recipients: list[str]
|
|
32
|
+
sections: list[ReportSection]
|
|
33
|
+
attachments: list[RawAttachment]
|
|
@@ -39,6 +39,7 @@ class PytestStatus(str, Enum):
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class TestInvestigationStatus(str, Enum):
|
|
42
|
+
__test__ = False # prevent pytest from collecting this Enum as a test class
|
|
42
43
|
NOT_INVESTIGATED = "not_investigated"
|
|
43
44
|
IN_PROGRESS = "in_progress"
|
|
44
45
|
INVESTIGATED = "investigated"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: argus-alm
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.8
|
|
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
|
|
@@ -24,6 +24,7 @@ Requires-Dist: python-jenkins>=1.7.0; extra == "web-backend"
|
|
|
24
24
|
Requires-Dist: python-slugify~=6.1.1; extra == "web-backend"
|
|
25
25
|
Requires-Dist: pygithub>=2.6.1; extra == "web-backend"
|
|
26
26
|
Requires-Dist: boto3~=1.38.9; extra == "web-backend"
|
|
27
|
+
Requires-Dist: prometheus-flask-exporter>=0.23.2; extra == "web-backend"
|
|
27
28
|
Provides-Extra: docker-image
|
|
28
29
|
Requires-Dist: supervisor~=4.2.4; extra == "docker-image"
|
|
29
30
|
Provides-Extra: dev
|
|
@@ -50,6 +51,10 @@ Dynamic: license-file
|
|
|
50
51
|
|
|
51
52
|
Argus is a test tracking system intended to provide observability into automated test pipelines which use long-running resources. It allows observation of a test status, its events and its allocated resources. It also allows easy comparison between particular runs of a specific test.
|
|
52
53
|
|
|
54
|
+
## Contributing
|
|
55
|
+
|
|
56
|
+
Review the [Repository Guidelines](AGENTS.md) for project structure, tooling expectations, and pull request practices before submitting changes.
|
|
57
|
+
|
|
53
58
|
## Installation notes
|
|
54
59
|
|
|
55
60
|
### Development
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
.gitignore
|
|
5
5
|
.pre-commit-config.yaml
|
|
6
6
|
.prettierrc.js
|
|
7
|
+
AGENTS.md
|
|
7
8
|
Dockerfile
|
|
8
9
|
LICENSE
|
|
9
10
|
MANIFEST.in
|
|
@@ -39,6 +40,7 @@ argus/client/sct/client.py
|
|
|
39
40
|
argus/client/sct/types.py
|
|
40
41
|
argus/client/sirenada/client.py
|
|
41
42
|
argus/common/__init__.py
|
|
43
|
+
argus/common/email.py
|
|
42
44
|
argus/common/enums.py
|
|
43
45
|
argus/common/sct_types.py
|
|
44
46
|
argus/common/sirenada_types.py
|
|
@@ -275,6 +277,9 @@ frontend/TestRun/Pytest/PytestRun.svelte
|
|
|
275
277
|
frontend/TestRun/Pytest/PytestTab.svelte
|
|
276
278
|
frontend/TestRun/Pytest/index.js
|
|
277
279
|
frontend/TestRun/Pytest/types.ts
|
|
280
|
+
frontend/TestRun/SCT/SctEvent.svelte
|
|
281
|
+
frontend/TestRun/SCT/SctEvents.svelte
|
|
282
|
+
frontend/TestRun/SCT/SctNemesis.svelte
|
|
278
283
|
frontend/TestRun/SCTSubTests/Subtest.js
|
|
279
284
|
frontend/TestRun/SCTSubTests/Gemini/GeminiTabBodyComponent.svelte
|
|
280
285
|
frontend/TestRun/SCTSubTests/Gemini/GeminiTabComponent.svelte
|
|
@@ -390,6 +395,19 @@ templates/admin/base.html.j2
|
|
|
390
395
|
templates/admin/index.html.j2
|
|
391
396
|
templates/auth/login.html.j2
|
|
392
397
|
templates/auth/register.html.j2
|
|
398
|
+
templates/email/base.html.j2
|
|
399
|
+
templates/email/css/styles.css
|
|
400
|
+
templates/email/partials/cloud.html.j2
|
|
401
|
+
templates/email/partials/custom_html.html.j2
|
|
402
|
+
templates/email/partials/custom_table.html.j2
|
|
403
|
+
templates/email/partials/events.html.j2
|
|
404
|
+
templates/email/partials/header.html.j2
|
|
405
|
+
templates/email/partials/logs.html.j2
|
|
406
|
+
templates/email/partials/main.html.j2
|
|
407
|
+
templates/email/partials/nemesis.html.j2
|
|
408
|
+
templates/email/partials/packages.html.j2
|
|
409
|
+
templates/email/partials/screenshots.html.j2
|
|
410
|
+
templates/email/partials/unsupported.html.j2
|
|
393
411
|
templates/notifications/assigned.html.j2
|
|
394
412
|
templates/notifications/assigned_email.html.j2
|
|
395
413
|
templates/notifications/email_mention.html.j2
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
|
|
2
|
+
import os
|
|
3
|
+
from flask import Flask, request
|
|
4
|
+
from prometheus_flask_exporter import NO_PREFIX
|
|
5
|
+
from argus.backend.metrics import METRICS
|
|
3
6
|
from argus.backend.template_filters import export_filters
|
|
4
7
|
from argus.backend.controller import admin, api, main
|
|
5
8
|
from argus.backend.cli import cli_bp
|
|
@@ -12,8 +15,27 @@ from argus.backend.util.config import Config
|
|
|
12
15
|
LOGGER = logging.getLogger(__name__)
|
|
13
16
|
|
|
14
17
|
|
|
18
|
+
def register_metrics():
|
|
19
|
+
METRICS.export_defaults(group_by="endpoint", prefix=NO_PREFIX)
|
|
20
|
+
METRICS.register_default(
|
|
21
|
+
METRICS.counter(
|
|
22
|
+
"http_request_by_endpoint_total",
|
|
23
|
+
"Total Requests made",
|
|
24
|
+
labels={
|
|
25
|
+
"endpoint": lambda: request.endpoint,
|
|
26
|
+
"method": lambda: request.method,
|
|
27
|
+
"status": lambda response: response.status,
|
|
28
|
+
},
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
15
33
|
def start_server(config=None) -> Flask:
|
|
16
34
|
app = Flask(__name__, static_url_path="/s/", static_folder="public")
|
|
35
|
+
METRICS.init_app(app)
|
|
36
|
+
if os.environ.get("PROMETHEUS_MULTIPROC_DIR"):
|
|
37
|
+
with app.app_context():
|
|
38
|
+
METRICS.register_endpoint("/metrics")
|
|
17
39
|
app.json_provider_class = ArgusJSONProvider
|
|
18
40
|
app.json = ArgusJSONProvider(app)
|
|
19
41
|
app.jinja_env.policies["json.dumps_kwargs"]["default"] = app.json.default
|
|
@@ -35,6 +57,11 @@ def start_server(config=None) -> Flask:
|
|
|
35
57
|
app.register_blueprint(api.bp)
|
|
36
58
|
app.register_blueprint(admin.bp)
|
|
37
59
|
app.register_blueprint(cli_bp)
|
|
60
|
+
with app.app_context():
|
|
61
|
+
try:
|
|
62
|
+
register_metrics()
|
|
63
|
+
except ValueError:
|
|
64
|
+
pass
|
|
38
65
|
|
|
39
66
|
app.logger.info("Ready.")
|
|
40
67
|
return app
|
|
@@ -40,7 +40,7 @@ AWS_CLIENT_SECRET: YourSecretKey
|
|
|
40
40
|
# Client ID of a github oauth application
|
|
41
41
|
GITHUB_CLIENT_ID: YOUR_GITHUB_CLIENT_ID
|
|
42
42
|
# Scopes used for Github Application:
|
|
43
|
-
# GITHUB_SCOPES: 'user:email read:user read:org
|
|
43
|
+
# GITHUB_SCOPES: 'user:email read:user read:org'
|
|
44
44
|
# Client secret of a github oauth application
|
|
45
45
|
GITHUB_CLIENT_SECRET: YOUR_GITHUB_CLIENT_SECRET
|
|
46
46
|
# Github personal access token
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Argus API
|
|
2
|
+
|
|
3
|
+
To use argus API the user first should generate an API token. To do so, proceed to the Profile Page inside the application and locate the button to generate the token. WARNING: The token will be shown only once, so be sure to save it after copying. For each API call, the token should be provided as part of Authorization header, example:
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
curl --request GET \
|
|
7
|
+
--url https://argus.scylladb.com/api/v1/client/driver_matrix/test_report?buildId=example/driver-matrix/test \
|
|
8
|
+
--header "Authorization: token YourTokenHere"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Current endpoints
|
|
12
|
+
|
|
13
|
+
```http
|
|
14
|
+
GET /api/v1/client/driver_matrix/test_report
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Accepts following parameters:
|
|
18
|
+
|
|
19
|
+
| Parameter | Type | Description |
|
|
20
|
+
| --------- | ---- | ------------|
|
|
21
|
+
| buildId | string | build id of the test to query |
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"response": {
|
|
26
|
+
"build_id": "example/driver-matrix/test",
|
|
27
|
+
"release": "xxxxxxxx",
|
|
28
|
+
"test": "testing-driver-matrix",
|
|
29
|
+
"versions": {
|
|
30
|
+
"datastax": [
|
|
31
|
+
"pytest.datastax.v3.3.24.0",
|
|
32
|
+
"pytest.datastax.v3.3.25.0",
|
|
33
|
+
"pytest.datastax.v4.3.24.0",
|
|
34
|
+
"pytest.datastax.v4.3.25.0"
|
|
35
|
+
],
|
|
36
|
+
"scylla": [
|
|
37
|
+
"pytest.scylla.v3.3.24.8",
|
|
38
|
+
"pytest.scylla.v3.3.25.5",
|
|
39
|
+
"pytest.scylla.v4.3.24.8",
|
|
40
|
+
"pytest.scylla.v4.3.25.5"
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"status": "ok"
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```http
|
|
49
|
+
POST /api/v1/planning/plan/trigger
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Accepts following payload:
|
|
53
|
+
|
|
54
|
+
Type: application/json
|
|
55
|
+
|
|
56
|
+
| Parameter | Type | Description |
|
|
57
|
+
| --------- | ---- | ------------|
|
|
58
|
+
| release | string | Release name to trigger plans in (can be mixed vith version to narrow filter) |
|
|
59
|
+
| plan_id | string | Specific plan id to trigger |
|
|
60
|
+
| version | string | Target scylla version of plans to trigger |
|
|
61
|
+
| common_params | object{ param_name: value } | Common parameters, such as backend |
|
|
62
|
+
| params | object{ param_name: value }[] | specific job parameters |
|
|
63
|
+
|
|
64
|
+
Example payload:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
{
|
|
69
|
+
"version": "2024.3.1~rc0",
|
|
70
|
+
"release": "scylla-master",
|
|
71
|
+
"plan_id": "some-plan-uuid",
|
|
72
|
+
"common_params": {
|
|
73
|
+
"instance_provision": "spot",
|
|
74
|
+
},
|
|
75
|
+
"params": [
|
|
76
|
+
{
|
|
77
|
+
"test": "longevity",
|
|
78
|
+
"backend": "aws",
|
|
79
|
+
"region": "eu-west-1",
|
|
80
|
+
"scylla_ami_id": "ami-abcd"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"test": "longevity",
|
|
84
|
+
"backend": "azure",
|
|
85
|
+
"region": "us-east1",
|
|
86
|
+
"azure_image_id": "/subscriptions…",
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"response": {
|
|
97
|
+
"jobs": [
|
|
98
|
+
"http://jenkins/path/job/one/1",
|
|
99
|
+
"http://jenkins/path/job/two/3",
|
|
100
|
+
"http://jenkins/path/job/three/5",
|
|
101
|
+
"http://jenkins/path/job/four/9"
|
|
102
|
+
],
|
|
103
|
+
"failed_to_execute": [
|
|
104
|
+
"path/job/one",
|
|
105
|
+
"path/job/two",
|
|
106
|
+
"path/job/three",
|
|
107
|
+
"path/job/four"
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
"status": "ok"
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Additionally, this endpoint is available inside `argus-client-generic` executable, as follows:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
argus-client-generic trigger-jobs --api-key $key --version $version --plan_id $id --release $release --job-info-file $file_path
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
`--job-info-file` is a .json file containing `common_params` and `params` parts of the payload, everything else is specified on the command line.
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
## Email reporting API
|
|
125
|
+
|
|
126
|
+
```http
|
|
127
|
+
POST /api/v1/client/testrun/report/email
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Payload
|
|
131
|
+
|
|
132
|
+
|Key|Type|Description|
|
|
133
|
+
|---|----|-----------|
|
|
134
|
+
|recepients|array of string| List of email report recepients |
|
|
135
|
+
|title|string| Title of the email. Use `#auto` for automatically generated title |
|
|
136
|
+
|run_id|string| UUID of the run to report |
|
|
137
|
+
|attachments| Attachment[] | list of attachments to send |
|
|
138
|
+
|sections | mixed(string, Section)[] | list of mixed strings of section names or Section object |
|
|
139
|
+
|
|
140
|
+
#### Attachment
|
|
141
|
+
|
|
142
|
+
|Field|Type|Description|
|
|
143
|
+
|-----|----|-----------|
|
|
144
|
+
|filename|string| Filename of the attachment |
|
|
145
|
+
|data|string| Base64 encoded payload |
|
|
146
|
+
|
|
147
|
+
#### Section
|
|
148
|
+
|
|
149
|
+
|Field|Type|Description|
|
|
150
|
+
|-----|----|-----------|
|
|
151
|
+
|type|string| Section type [Required]|
|
|
152
|
+
|options| Options | Options object with supported option keys |
|
|
153
|
+
|
|
154
|
+
Supported sections are:
|
|
155
|
+
|
|
156
|
+
| Name|Description|
|
|
157
|
+
|-----|-----------|
|
|
158
|
+
| header| Topmost header of the email. Contains the link to the Argus run and a status icon |
|
|
159
|
+
| main| Info block similar to the Info tab on the Argus run page. Contains info about the run such as runtime, used scylla version and sct branch and others. |
|
|
160
|
+
| packages| Table with package name and version information |
|
|
161
|
+
| logs| List of links to the log files stored on S3 for this run |
|
|
162
|
+
| cloud| Contains active remaining resources running at the end the test. Table |
|
|
163
|
+
| nemesis| Table of nemeses in the run with their status and durations |
|
|
164
|
+
| events| Event block of most recent events sorted by timestamp |
|
|
165
|
+
| screenshots| Grafana screenshot gallery |
|
|
166
|
+
| custom_table| Custom table element. Can be used to display arbitrary tables. HTML in cells is **not** supported |
|
|
167
|
+
| custom_html| Arbitrary HTML |
|
|
168
|
+
|
|
169
|
+
If a section is unrecognized, it will be rendered as a special "Unsupported" section which will print all the options sent to that section.
|
|
170
|
+
|
|
171
|
+
If a section is passed but data for it in Argus is empty, the section won't be rendered. Some sections are always attempted to be rendered.
|
|
172
|
+
|
|
173
|
+
The `section` block can be provided as empty array to use the default template.
|
|
174
|
+
|
|
175
|
+
##### Section options
|
|
176
|
+
|
|
177
|
+
###### Events
|
|
178
|
+
|
|
179
|
+
|Option|Type|Description|
|
|
180
|
+
|------|----|-----------|
|
|
181
|
+
|amount_per_severity| number | Amount of events per severity to display (default 10)|
|
|
182
|
+
|severity_filter| string[] | Names of severities to include in the email (default [CRITICAL, ERROR]). Available severities: CRITICAL, ERROR, WARNING, NORMAL, DEBUG (case-sensitive)|
|
|
183
|
+
|
|
184
|
+
###### Nemesis
|
|
185
|
+
|
|
186
|
+
|Option|Type|Description|
|
|
187
|
+
|------|----|-----------|
|
|
188
|
+
|sort_order| tuple of key of NemesisRunInfo, direction | Default (start_time, desc). Direction can be: asc, desc. `NemesisRunInfo` can be viewed [here](https://github.com/scylladb/argus/blob/master/argus/backend/plugins/sct/udt.py#L78) |
|
|
189
|
+
|status_filter| string[] | Names of nemesis status to include in the email (default [failed, succeeded]). Available statuses: started, running, failed, skipped, succeeded, terminated (case-sensitive)|
|
|
190
|
+
|
|
191
|
+
###### Custom Table
|
|
192
|
+
|
|
193
|
+
|Option|Type|Description|
|
|
194
|
+
|------|----|-----------|
|
|
195
|
+
|table_name| string | Table title|
|
|
196
|
+
|headers| any[] | Table header columns (Required) |
|
|
197
|
+
|rows| any[][] | Array of table cell arrays. |
|
|
198
|
+
|
|
199
|
+
###### Custom HTML
|
|
200
|
+
|
|
201
|
+
|Option|Type|Description|
|
|
202
|
+
|------|----|-----------|
|
|
203
|
+
|section_name| string | Section Title |
|
|
204
|
+
|html| string | Section HTML Content |
|
|
205
|
+
|
|
206
|
+
Example:
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"section_name": "Additional Info",
|
|
211
|
+
"html": "<h1 title='lorem' style='background-color: red'>loremLorem, ipsum dolor.</h1><p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi maiores, eius nemo veritatis dolorem blanditiis nam magni dicta laborum iste!</p>"
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
### Example payload
|
|
217
|
+
|
|
218
|
+
```json
|
|
219
|
+
{
|
|
220
|
+
"recepients": [
|
|
221
|
+
"john.smith@scylladb.com"
|
|
222
|
+
],
|
|
223
|
+
"run_id": "17351a94-3aba-41de-aba5-cda123dff0bb",
|
|
224
|
+
"title": "#auto",
|
|
225
|
+
"attachments": [
|
|
226
|
+
],
|
|
227
|
+
"sections": [
|
|
228
|
+
"header",
|
|
229
|
+
"main",
|
|
230
|
+
"packages",
|
|
231
|
+
"screenshots",
|
|
232
|
+
"cloud",
|
|
233
|
+
{
|
|
234
|
+
"type": "events",
|
|
235
|
+
"options": {
|
|
236
|
+
"amount_per_severity": 10,
|
|
237
|
+
"severity_filter": [
|
|
238
|
+
"CRITICAL",
|
|
239
|
+
"ERROR"
|
|
240
|
+
]
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"type": "nemesis",
|
|
245
|
+
"options": {
|
|
246
|
+
"sort_order": [
|
|
247
|
+
"start_time",
|
|
248
|
+
"desc"
|
|
249
|
+
],
|
|
250
|
+
"status_filter": [
|
|
251
|
+
"failed",
|
|
252
|
+
"succeeded"
|
|
253
|
+
]
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
"logs",
|
|
257
|
+
{
|
|
258
|
+
"type": "custom_table",
|
|
259
|
+
"options": {
|
|
260
|
+
"table_name": "My Table",
|
|
261
|
+
"headers": ["hello", "one", "two"],
|
|
262
|
+
"rows": [
|
|
263
|
+
[1,2,3],
|
|
264
|
+
["four", "five", "six"]
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Response
|
|
274
|
+
|
|
275
|
+
```json
|
|
276
|
+
{
|
|
277
|
+
"response": true,
|
|
278
|
+
"status": "ok"
|
|
279
|
+
}
|
|
280
|
+
```
|