From 29a22bc32dd47997b07ceee5b7bb2570d62a9512 Mon Sep 17 00:00:00 2001 From: AmsterGet Date: Thu, 17 Aug 2023 10:02:41 +0000 Subject: [PATCH] Merge pull request #591 from reportportal/develop Release latest changes b029bd39ec482aff45e6516b4f4a583ba47c8869 --- 404.html | 4 +- admin-panel/AllProjectsPage/index.html | 4 +- admin-panel/AllUsersPage/index.html | 4 +- analysis/AutoAnalysisOfLaunches/index.html | 4 +- analysis/HowModelsAreRetrained/index.html | 4 +- analysis/MLSuggestions/index.html | 4 +- analysis/ManualAnalysis/index.html | 4 +- analysis/PatternAnalysis/index.html | 4 +- .../index.html | 4 +- analysis/UniqueErrorAnalysis/index.html | 4 +- ...board-2e25ca8b7611c63c5cd7f605b2b3cb3d.png | Bin 0 -> 69982 bytes ...board-4f7bc94f27a9ffb36b7b5f8c81fb3d75.png | Bin 19484 -> 0 bytes ...idget-25ed2492b3e2a2abc0b915d59d695542.png | Bin 31122 -> 0 bytes ...idget-f596ab25c80ea89a250a68dfcff3f53d.png | Bin 0 -> 193772 bytes ...idget-029599e6fed04ca6071d96980828538f.png | Bin 0 -> 182198 bytes ...idget-372a06c18d9aa15b6c80bef0a03c0828.png | Bin 29721 -> 0 bytes ...board-94ed5725252069d9c2565d1b56f7c5bb.png | Bin 20703 -> 0 bytes ...board-de6c2f781a84e327df0f8a29fd761374.png | Bin 0 -> 77708 bytes ...idget-14fae75ee085ca966504213d5ba8cb09.png | Bin 30133 -> 0 bytes ...idget-1bed7f83ff7701a4798a05e6c16a8c68.png | Bin 0 -> 119498 bytes ...board-65933356245c0ff0557897065a20848e.png | Bin 19434 -> 0 bytes ...board-931c64aa1443a24eb4f7ca8390714030.png | Bin 0 -> 76666 bytes ...idget-3ba0f4537b2c0f83f581b256a71fa0bf.png | Bin 0 -> 170195 bytes ...idget-df992198bf7499a6180883f83b489330.png | Bin 24087 -> 0 bytes assets/js/0e384e19.d1d3a88b.js | 1 + assets/js/0e384e19.fb41a6cf.js | 1 - ...80f2e.5e68215f.js => 33580f2e.d4dccbfe.js} | 2 +- assets/js/40be41a9.619ee169.js | 1 + assets/js/40be41a9.6445dfd1.js | 1 - assets/js/5668619f.3177252b.js | 1 + assets/js/5668619f.72782681.js | 1 - assets/js/6ef1a459.3ffd4a9b.js | 1 + assets/js/6ef1a459.8a6685fe.js | 1 - assets/js/7bd95ec4.12b719e2.js | 1 + assets/js/7bd95ec4.9bd7a5e4.js | 1 - ...1fcd9.2d13f844.js => 98a1fcd9.494f8b22.js} | 2 +- assets/js/a68ea571.295d7694.js | 1 - assets/js/a68ea571.85917d12.js | 1 + assets/js/a76ff2eb.25258038.js | 1 - assets/js/a76ff2eb.6b79db18.js | 1 + assets/js/a830598a.376dedc8.js | 1 + assets/js/a830598a.4fd1d6d5.js | 1 - assets/js/bdb17ab6.03e80846.js | 1 + assets/js/bdb17ab6.fbdff6bb.js | 1 - assets/js/bf477335.c38ae492.js | 1 - assets/js/bf477335.dbaea5ba.js | 1 + assets/js/c3038888.8ba87a9d.js | 1 - assets/js/c3038888.fa2c8662.js | 1 + assets/js/c60355ff.66645129.js | 1 + assets/js/c60355ff.e76f313e.js | 1 - ...084ee.449dca62.js => d09084ee.c6557d0f.js} | 2 +- assets/js/dc2f4bb3.011105a8.js | 1 + assets/js/dc2f4bb3.e775a227.js | 1 - assets/js/dc8f36d8.4e8837df.js | 1 + assets/js/dc8f36d8.bb175eed.js | 1 - assets/js/de98de14.484f49ed.js | 1 + assets/js/de98de14.6a3df179.js | 1 - ...n.c10e0a5c.js => runtime~main.a58c9405.js} | 2 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../ReducingRegressionTimeBy50/index.html | 4 +- category/admin-panel/index.html | 4 +- category/analysis/index.html | 4 +- category/case-studies/index.html | 4 +- category/dashboards-and-widgets/index.html | 4 +- category/developers-guides/index.html | 4 +- category/installation-steps/index.html | 4 +- category/issues-troubleshooting/index.html | 4 +- category/log-data-in-reportportal/index.html | 4 +- category/loggers-1/index.html | 4 +- category/loggers/index.html | 4 +- category/plugins/index.html | 4 +- category/quality-gates/index.html | 4 +- .../reportportal-configuration/index.html | 4 +- category/saved-searches-filters/index.html | 4 +- category/terms--conditions/index.html | 4 +- category/user-account/index.html | 4 +- category/work-with-reports/index.html | 4 +- .../ComponentHealthCheck/index.html | 4 +- .../CumulativeTrendChart/index.html | 4 +- .../index.html | 4 +- .../FailedCasesTrendChart/index.html | 4 +- .../FlakyTestCasesTableTop20/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../LaunchStatisticsChart/index.html | 4 +- .../LaunchesDurationChart/index.html | 4 +- .../LaunchesTable/index.html | 4 +- .../ManageWidgets/index.html | 7 ++- .../MostFailedTestCasesTableTop20/index.html | 4 +- .../MostPopularPatternTableTop20/index.html | 4 +- .../index.html | 4 +- .../NonPassedTestCasesTrendChart/index.html | 4 +- .../OverallStatistics/index.html | 4 +- .../PassingRatePerLaunch/index.html | 4 +- .../PassingRateSummary/index.html | 4 +- .../index.html | 4 +- .../ProjectActivityPanel/index.html | 4 +- .../TableComponentHealthCheck/index.html | 4 +- .../TestCasesGrowthTrendChart/index.html | 4 +- .../UniqueBugsTable/index.html | 4 +- .../WidgetCreation/index.html | 6 +-- .../WorkWithDashboards/index.html | 13 +++--- .../APIDifferencesBetweenV4AndV5/index.html | 4 +- dev-guides/AsynchronousReporting/index.html | 4 +- dev-guides/AttachmentsGuide/index.html | 4 +- .../BackEndJavaContributionGuide/index.html | 4 +- .../index.html | 4 +- dev-guides/PluginDevelopersGuide/index.html | 4 +- dev-guides/ReportPortalAPI/index.html | 4 +- .../ReportingDevelopersGuide/index.html | 4 +- dev-guides/RerunDevelopersGuide/index.html | 4 +- dev-guides/RetriesReporting/index.html | 4 +- index.html | 6 +-- .../index.html | 4 +- .../BasicMonitoringConfiguration/index.html | 4 +- .../DeployOnUbuntuOS/index.html | 4 +- .../DeployWithAWSECSFargate/index.html | 4 +- .../DeployWithDockerOnLinuxMac/index.html | 6 +-- .../DeployWithDockerOnWindows/index.html | 4 +- .../DeployWithKubernetes/index.html | 4 +- .../DeployWithoutDocker/index.html | 4 +- .../MaintainCommandsCheatSheet/index.html | 4 +- .../index.html | 4 +- .../index.html | 6 +-- .../SetupTSLSSLInTraefik2.0.x/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../HowToCheckLDAPConnection/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../IssuesWithLDAPSHowToResolve/index.html | 4 +- .../ResolveAnalyzerKnownIssues/index.html | 4 +- .../TuningCITool/index.html | 4 +- .../HowToRunYourTests/index.html | 4 +- .../ImplementOwnIntegration/index.html | 4 +- .../ImportDataToReportPortal/index.html | 4 +- .../ReportingSDK/index.html | 4 +- .../Java/Cucumber/index.html | 4 +- .../Java/JBehave/index.html | 4 +- .../Java/JUnit4/index.html | 4 +- .../Java/JUnit5/index.html | 4 +- .../Loggers/ApacheHttpComponents/index.html | 4 +- .../Java/Loggers/Log4J/index.html | 4 +- .../Java/Loggers/Logback/index.html | 4 +- .../Java/Loggers/OkHttp3/index.html | 4 +- .../Java/Loggers/RestAssured/index.html | 4 +- .../Java/Loggers/Selenide/index.html | 4 +- .../Java/SoapUI/index.html | 4 +- .../Java/Spock/index.html | 4 +- .../Java/TestNG/index.html | 4 +- .../Java/index.html | 4 +- .../JavaScript/Codecept/index.html | 4 +- .../JavaScript/CucumberJS/index.html | 4 +- .../JavaScript/Cypress/index.html | 4 +- .../JavaScript/Jasmine/index.html | 4 +- .../JavaScript/Jest/index.html | 4 +- .../JavaScript/Mocha/index.html | 4 +- .../JavaScript/Nightwatch/index.html | 4 +- .../JavaScript/Playwright/index.html | 4 +- .../JavaScript/Postman/index.html | 4 +- .../JavaScript/TestCafe/index.html | 4 +- .../JavaScript/WebdriverIO/index.html | 4 +- .../JavaScript/index.html | 4 +- .../Net/Loggers/Log4Net/index.html | 4 +- .../Net/Loggers/NLog/index.html | 4 +- .../Net/Loggers/Serilog/index.html | 4 +- .../Net/Loggers/TraceListener/index.html | 4 +- .../Net/NUnit/index.html | 4 +- .../Net/SpecFlow/index.html | 4 +- .../Net/VSTest/index.html | 4 +- .../test-framework-integration/Net/index.html | 4 +- .../Net/xUnit/index.html | 4 +- .../Other/index.html | 4 +- .../PHP/Behat/index.html | 4 +- .../PHP/Codeception/index.html | 4 +- .../PHP/PHPUnit/index.html | 4 +- .../test-framework-integration/PHP/index.html | 4 +- .../Python/RobotFramework/index.html | 4 +- .../Python/behave/index.html | 4 +- .../Python/index.html | 4 +- .../Python/nosetests/index.html | 4 +- .../Python/pytest/index.html | 4 +- .../test-framework-integration/index.html | 4 +- plugins/AzureDevOpsBTS/index.html | 4 +- plugins/EmailServer/index.html | 4 +- plugins/JiraCloud/index.html | 4 +- plugins/JiraServer/index.html | 4 +- plugins/ManagePlugins/index.html | 4 +- plugins/Rally/index.html | 4 +- plugins/SauceLabs/index.html | 4 +- .../index.html | 4 +- quality-gates/DeleteQualityGates/index.html | 4 +- quality-gates/FeatureOverview/index.html | 4 +- .../HowToInstallQualityGates/index.html | 4 +- .../IntegrationWithGitLabCI/index.html | 4 +- .../IntegrationWithJenkins/index.html | 4 +- quality-gates/IntegrationWithCICD/index.html | 4 +- quality-gates/QualityGateEdit/index.html | 4 +- quality-gates/QualityGatePurpose/index.html | 4 +- .../QualityRulesConfiguration/index.html | 4 +- .../index.html | 4 +- .../ComponentsOverview/index.html | 4 +- .../index.html | 36 ++++++++-------- .../index.html | 6 +-- .../IntegrationViaPlugin/index.html | 6 +-- .../ProjectConfiguration/index.html | 40 ++++++++---------- .../ReportPortalJobsConfiguration/index.html | 16 +++---- .../authorization/ActiveDirectory/index.html | 8 ++-- .../authorization/GitHub/index.html | 6 +-- .../authorization/LDAP/index.html | 6 +-- .../SAMLProvider/AzureSAML/index.html | 26 ++++++++++-- .../SAMLProvider/OktaSAML/index.html | 6 +-- .../authorization/SAMLProvider/index.html | 8 ++-- .../authorization/index.html | 4 +- reportportal-glossary/index.html | 4 +- reportportal-tutorial/index.html | 4 +- .../CreateFilters/index.html | 4 +- saved-searches-filters/FiltersPage/index.html | 4 +- .../ManageFilters/index.html | 4 +- search/index.html | 4 +- .../index.html | 4 +- .../PremiumFeatures/index.html | 4 +- .../EditPersonalInformation/index.html | 4 +- user-account/RestoreAPassword/index.html | 4 +- user-role-guides/index.html | 4 +- .../FilteringLaunches/index.html | 4 +- .../HistoryOfLaunches/index.html | 16 +++---- .../InvestigationOfFailure/index.html | 4 +- .../OperationsUnderLaunches/index.html | 4 +- work-with-reports/TestCaseId/index.html | 4 +- work-with-reports/UniqueId/index.html | 4 +- work-with-reports/ViewLaunches/index.html | 4 +- 236 files changed, 476 insertions(+), 466 deletions(-) create mode 100644 assets/images/CreateDashboard-2e25ca8b7611c63c5cd7f605b2b3cb3d.png delete mode 100644 assets/images/CreateDashboard-4f7bc94f27a9ffb36b7b5f8c81fb3d75.png delete mode 100644 assets/images/CreateWidget-25ed2492b3e2a2abc0b915d59d695542.png create mode 100644 assets/images/CreateWidget-f596ab25c80ea89a250a68dfcff3f53d.png create mode 100644 assets/images/CustomizeWidget-029599e6fed04ca6071d96980828538f.png delete mode 100644 assets/images/CustomizeWidget-372a06c18d9aa15b6c80bef0a03c0828.png delete mode 100644 assets/images/DeleteDashboard-94ed5725252069d9c2565d1b56f7c5bb.png create mode 100644 assets/images/DeleteDashboard-de6c2f781a84e327df0f8a29fd761374.png delete mode 100644 assets/images/DeleteWidget-14fae75ee085ca966504213d5ba8cb09.png create mode 100644 assets/images/DeleteWidget-1bed7f83ff7701a4798a05e6c16a8c68.png delete mode 100644 assets/images/EditDashboard-65933356245c0ff0557897065a20848e.png create mode 100644 assets/images/EditDashboard-931c64aa1443a24eb4f7ca8390714030.png create mode 100644 assets/images/EditWidget-3ba0f4537b2c0f83f581b256a71fa0bf.png delete mode 100644 assets/images/EditWidget-df992198bf7499a6180883f83b489330.png create mode 100644 assets/js/0e384e19.d1d3a88b.js delete mode 100644 assets/js/0e384e19.fb41a6cf.js rename assets/js/{33580f2e.5e68215f.js => 33580f2e.d4dccbfe.js} (74%) create mode 100644 assets/js/40be41a9.619ee169.js delete mode 100644 assets/js/40be41a9.6445dfd1.js create mode 100644 assets/js/5668619f.3177252b.js delete mode 100644 assets/js/5668619f.72782681.js create mode 100644 assets/js/6ef1a459.3ffd4a9b.js delete mode 100644 assets/js/6ef1a459.8a6685fe.js create mode 100644 assets/js/7bd95ec4.12b719e2.js delete mode 100644 assets/js/7bd95ec4.9bd7a5e4.js rename assets/js/{98a1fcd9.2d13f844.js => 98a1fcd9.494f8b22.js} (84%) delete mode 100644 assets/js/a68ea571.295d7694.js create mode 100644 assets/js/a68ea571.85917d12.js delete mode 100644 assets/js/a76ff2eb.25258038.js create mode 100644 assets/js/a76ff2eb.6b79db18.js create mode 100644 assets/js/a830598a.376dedc8.js delete mode 100644 assets/js/a830598a.4fd1d6d5.js create mode 100644 assets/js/bdb17ab6.03e80846.js delete mode 100644 assets/js/bdb17ab6.fbdff6bb.js delete mode 100644 assets/js/bf477335.c38ae492.js create mode 100644 assets/js/bf477335.dbaea5ba.js delete mode 100644 assets/js/c3038888.8ba87a9d.js create mode 100644 assets/js/c3038888.fa2c8662.js create mode 100644 assets/js/c60355ff.66645129.js delete mode 100644 assets/js/c60355ff.e76f313e.js rename assets/js/{d09084ee.449dca62.js => d09084ee.c6557d0f.js} (56%) create mode 100644 assets/js/dc2f4bb3.011105a8.js delete mode 100644 assets/js/dc2f4bb3.e775a227.js create mode 100644 assets/js/dc8f36d8.4e8837df.js delete mode 100644 assets/js/dc8f36d8.bb175eed.js create mode 100644 assets/js/de98de14.484f49ed.js delete mode 100644 assets/js/de98de14.6a3df179.js rename assets/js/{runtime~main.c10e0a5c.js => runtime~main.a58c9405.js} (73%) diff --git a/404.html b/404.html index 59eb92500..037882fda 100644 --- a/404.html +++ b/404.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
Skip to main content

Page Not Found

You may have used an outdated link as there have been some changes in the structure of the documentation.

But it/'s clearly here somewhere!
Please, use the keyword search to find it!

- + \ No newline at end of file diff --git a/admin-panel/AllProjectsPage/index.html b/admin-panel/AllProjectsPage/index.html index 20deda07b..72be2dc28 100644 --- a/admin-panel/AllProjectsPage/index.html +++ b/admin-panel/AllProjectsPage/index.html @@ -12,7 +12,7 @@ - + @@ -30,7 +30,7 @@ button to complete the registration.

  • The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT MANAGER project role.

  • note

    The link for registration will be active until the user registers in the system for up to, but not exceeding 24 hours.

    Detailed project info

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Projects" page.

    3. Click "See detailed information" button.

    4. View aggregated data of the selected project. Available period options are:

    Delete projects

    To delete a project, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Projects" page.

    3. Click on ellipsis button on the project preview.

    4. Click on the "Delete" option. A warning pop-up message will appear.

    5. Click "Delete". The project will be deleted from ReportPortal.

    note

    PERSONAL PROJECTS cannot be deleted from the system.

    - + \ No newline at end of file diff --git a/admin-panel/AllUsersPage/index.html b/admin-panel/AllUsersPage/index.html index 2c42d7bd7..412d7fc05 100644 --- a/admin-panel/AllUsersPage/index.html +++ b/admin-panel/AllUsersPage/index.html @@ -12,7 +12,7 @@ - + @@ -36,7 +36,7 @@ dashboards and widgets), that the user owns on the projects will be kept in ReportPortal.

    Edit user account role

    The only space in ReportPortal where user can get the Administrator rights is All Users page.

    Give ADMINISTRATOR role

    To give Administrator role for any user, perform the following steps:

    1. Login into the ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Users" page.

    3. Hover over user's name. - "Make admin" button will be displayed.

    4. Click on the "Make admin" button. - A confirmation message will be shown.

    5. Click "Change" button on pop-up window. Account role User will be changed to Administrator. The user account will be marked with "admin" label.

    Take away ADMINISTRATOR role

    To take away Administrator account role, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Users" page.

    3. Click on the "Admin" button near the user's name.

    4. A confirm message will be shown.

    5. Click "Change" button. Account role "Administrator" will be changed to "User".

    - + \ No newline at end of file diff --git a/analysis/AutoAnalysisOfLaunches/index.html b/analysis/AutoAnalysisOfLaunches/index.html index dff96418d..cb8160114 100644 --- a/analysis/AutoAnalysisOfLaunches/index.html +++ b/analysis/AutoAnalysisOfLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ For effective using Auto–Analysis you should come through several stages.

    Create an analytical base in the ElasticSearch

    First of all, you need to create an analytical base. For that, you should start to analyze test results manually.

    All test items with a defect type which have been analyzed manually or automatically by ReportPortal are sent to the Elastic Search.

    The following info is sent:

    For the better analysis, we merge small logs (which consist of 1-2 log lines and words number <= 100) together. We store this merged log message as a separate document if there are no other big logs (consisting of more than 2 log lines or having a stacktrace) in the test item. We store this merged log message in a separate field "merged_small_logs" for all the big logs if there are ones.

    The Analyzer preprocesses log messages from the request for test failure analysis: extracts error message, stacktrace, numbers, exceptions, urls, paths, parameters and other parts from text to search for the most similar items by these parts in the analytical base. These parts are saved in a separate fields for each log entry.

    Each log entry along with its defect type is saved to ElasticSearch in the form of a separate document. All documents created compose an Index. The more test results index has, the more accurate results will be generated by the end of the analysis process.

    tip

    If you do not sure how many documents(logs) are contained in the Index at that moment, you can check it. For that, perform the following actions:

    • Uncommented Service ElasticSearch ports in a docker-compose file or add them: 9200:9200;
    • Restart-Service ElasticSearch with new docker-compose;
    • Send a request to ElasticSearch:
      • how many documents in the Index: GET http://localhost:9200/_cat/indices?v
      • Detailed information: POST http://localhost:9200/{project_name}/_search

    Test items of a launch in Debug mode are not sent to the service Analyzer. If the test item is deleted or moved to the Debug mode, it is removed from the Index.

    Auto-Analysis process

    After your Index has been completed. You can start to use the auto-analysis feature.

    Analysis can be launched automatically (via Project Settings) or manually (via the menu on All launches view). After the process is started, all items with defect type “To investigate” with logs (log level >= 40 000) from the analyzed launch are picked and sent to the Analyzer Service and the service ElasticSearch for investigations.

    How Elasticsearch returns candidates for Analysis

    Here is a simplified procedure of the Auto-analysis candidates searching via ElasticSearch.

    When a "To investigate" test item appears we search for the most similar test items in the analytical base. We create a query which searches by several fields, message similarity is a compulsory condition, other conditions boost the better results and they will have a higher score (boost conditions are similarity by unique id, launch name, error message, found exceptions, numbers in the logs and etc.).

    Then ElasticSearch receives a log message and divides it into the terms (words) with a tokenizer and calculates the importance of each term (word). For that ElasticSearch computes TF-IDF for each term (word) in the analyzed log. If the level of term importance is low, the ElasticSearch ignores it.

    note

    Term frequency (TF) – how many time term (word) is used in an analyzed log;

    Document frequency (DF) – in how many documents this term (word) is used in Index;

    TF-IDF (TF — term frequency, IDF — inverse document frequency) — a statistical measure used to assess the importance of a term (word) in the context of a log that is part of an Index. The weight of a term (word) is proportional to the amount of use of this term (word) in the analyzed log and inversely proportional to the frequency of term (word) usage in Index.

    The term (word) with the highest level of importance is the term (word) that is used very frequently in analyzed log and moderately in the Index.

    After all important terms are defined, Elastic search calculates the level of equality between an analyzed log and each log in the Index. For each log from the Index is calculated a score.

    note

    How calculated a score:

    score(q,d) =

         coord(q,d) -
    SUM (
    tf(t in d),
    idf(t)²,
    t.getBoost(),
    ) (t in q)

    Where:

    • score(q,d) is the relevance score of log “d” for query “q”.
    • coord(q,d) is the coordination factor: the percent of words equality between analyzed log and particular log from the ElasticSearch.
    • The sum of the weights for each word “t” in the query “q” for log “d”.
    • tf(t in d) is a frequency of the word in the analyzed log.
    • idf(t) is the inverse frequency of the word in all saved logs in the Index.
    • t.getBoost() is the boost that has been applied to the query. The higher priority for logs with:
      • The same Launch name;
      • The same UID;
      • Manual analysis;
      • Error message;
      • The same numbers in the log;
      • and etc.

    The results are sorted by the score, in case the scores are the same, they are sorted by "start_time" field, which helps to boost the test items with closer to today dates. So the latest defect types will be higher in the returned by Elasticsearch results.

    The ElasticSearch returns to the service Analyzer 10 logs with the highest score for each log. Analyzer regroups all the results by a defect type and chooses the best representative for each defect type group, based on their scores.

    note

    In the case the test item has several logs, the best representative for a defect type group will become the log with the highest score among all logs.

    How Auto-analysis makes decisions for candidates, returned by Elasticsearch

    The ElasticSearch returns to the service Analyzer 10 logs with the highest score for each query and all these candidates will be processed further by the ML model. Analyzer regroups all the results by a defect type and chooses the best representative for each defect type group, based on their scores.

    The ML model is an XGBoost model which features (about 30 features) represent different statistics about the test item, log message texts, launch info and etc, for example:

    The model gives a probability for each defect type group, and we choose the defect type group with the highest probability and the probability should be >= 50%.

    A defect comment and a link to BTS of the best representative from this group come to the analyzed item.

    The Auto-analysis model is retrained for the project and this information can be found in the section "How models are retrained" below.

    So this is how Auto-Analysis works and defines the most relevant defect type on the base of the previous investigations. We give an ability to our users to configure auto-analysis manually.

    Auto-analysis Settings

    All settings and configurations of Analyzer and ElasticSearch are situated on a separate tab on Project settings.

    1. Login into ReportPortal instance as Administrator or project member with PROJECT MANAGER role on the project;

    2. Come on Project Settings, choose Auto-Analysis section;

    In this section user can perform the following actions:

    1. Switch ON/OFF auto-analysis;

    2. Choose a base for analysis (All launches/ Launches with the same name);

    3. Configure ElasticSearch settings;

    4. Remove/Generate ElasticSearch index.

    Switch ON/OFF automatic analysis;

    To activate the "Auto-Analysis" functionality in a project, perform the following steps:

    1. Login ReportPortal instance as Administrator or project member with PROJECT MANAGER role on the project.

    2. Select ON in the "Auto-Analysis" selector on the Project settings / Auto-analysis section.

    3. Click the "Submit" button. Now "Auto-Analysis" will start as soon as any launch finishes.

    Base for analysis (All launches/ Launches with the same name);

    You can choose which results from previous runs should be considered in Auto –Analysis for defining the failure reason.

    There two options:

    If you choose “All launches”, test results in the launch will have analyzed on the base of all data in Elastic search of the project.

    If you choose “Launches with the same name”, test results in the launch will have analyzed on the base of all data in Elastic search that have the same Launch name.

    You can choose those configurations via Project configuration or from the list of actions on All launches view.

    Configure ElasticSearch settings

    Also, we give the possibility for our users to configure 2 main parameters of ElasticSearch manually:

    Parameter MinShouldMatch is involved in the calculation of a score. It is a minimum value for coord(q,d) (the percent of words equality between an analyzed log and a particular log from the ElasticSearch). So you can increase search hardness and choose a minimum level of similarity that is required.

    With the parameter Number of log lines - you can write the root cause of test failure in the first lines and configure the analyzer to take into account only the required lines.

    With these 2 parameters, you can configure the accuracy of the analysis that you need. For your facilities we have prepared 3 pre-sets with values:

    Remove/Generate ElasticSearch index

    There two possible actions that can be performed under Index in ElasticSearch.

    You can remove the Index from ElasticSearch and all logs with there defect type will be deleted. ML will be set to zero. All data with your investigations will be deleted from the ElasticSearch. For creating a new one you could start to investigate test results manually or generate data based on previous results on the project once again.

    note

    Your investigations in ReportPortal will not be changed. The operation concerns only ElasticSearch base.

    Another option, you can generate the Index in ElasticSearch. In the case of generation, all data will be removed from ElasticSearch and the new one will be generated based on all previous investigations on the project following current analysis settings.

    At the end of the process, you will receive a letter with info about the end of the process and with several items that will be appeared in ElasticSearch.

    You can use index generation for several goals. For example, assume two hypothetical situations when index generation can be used:

    note

    The new base will be generated following logs and settings that are existing on the moment of operating. So index before removing and index after generation can be different.

    We strongly do not recommend use auto-analysis until the new index will be generated.

    Manual analysis

    Analysis can be launched manually. To start the analysis manually, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select the "Analysis" option from the context menu next to the selected launch name.

    3. Choose the scope of previous results on the base of which test items should be auto-analyzed. The default is the one that is chosen on the setting page, but you can change it manually.

    Via this menu you can choose 3 options unlike on Project Settings:

    Options All launches and Launches with the same name are working the same as on project settings. If you choose Only current launch, the system is analyzing the test items of chosen launch only on a base of already investigated date of this launch.

    1. Choose which items from launch should be analyzed:

    In case the user chooses Only To investigate items - the system is analyzing only items with defect type "To investigate" in the chosen launch;

    In case the user chooses Items analyzed automatically (by AA) - the system is analyzing only items that have been already analyzed by auto-analysis. The results of the previous run of analysis will be set to zero and items will be analyzed once again.

    In case the user chooses Items analyzed manually - the system is analyzing only items that have been already analyzed by the user manually. The results of the previous run of analysis will be set to zero and items will be analyzed once again.

    In the case of multi-combination - the system is analyzing results dependence on chosen options.

    note

    The Ignore flag is saved. If the item has flag Ignore in AA, it will not be re-analyzed.

    tip

    For option Only current lunch you can not choose Items analyzed automatically (by AA) and Items analyzed manually simultaneously.

    1. Click the "Analysis" button. Now "Auto-Analysis" will start.

    Any launches with an active analyzing process will be marked with the "Analysis" label.

    Label AA

    When the test item is analyzed by the ReportPortal, a label "AA" is set on the test item on a Step Level. You can filter results with a parameter “Analysed by RP (AA)”

    Ignore in Auto-Analysis

    If you don't want to save some test items in ElasticSearch, you can "Ignore in Auto-Analysis". For that you can choose this action in “Make decision” modal:

    Or from the action list for several test items:

    When you choose “Ignore in AA”, logs of the chosen item are removed from the ElasticSearch.

    - + \ No newline at end of file diff --git a/analysis/HowModelsAreRetrained/index.html b/analysis/HowModelsAreRetrained/index.html index 48c6dd016..60408c691 100644 --- a/analysis/HowModelsAreRetrained/index.html +++ b/analysis/HowModelsAreRetrained/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    How models are retrained

    In the Auto-analysis and ML suggestions processes several models take part:

    • Auto-analysis XGBoost model, which gives the probability for a test item to be of a specific type based on the most similar test item in the history with this defect type
    • ML suggestions XGBoost model, which gives the probability for a test item to be similar to the test item from the history
    • Error message language model on Tf-Idf vectors(Random Forest Classifier), which gives a probability for the error message to be of a specific defect type or its subtype based on the words in the message. The probability from this model is taken as a feature in the main boosting algorithm.

    At the start of the project, you have global models. They were trained on 6 projects and were validated to give a good accuracy on average. To have a more powerful and personalized test failure analysis, the models should be retrained on the data from the project.

    note

    If a global model performs better on your data, the retrained model won't be saved. As far as we save a custom model only if it performs better for your data than the global one.

    Triggering information and retrained models are saved in Minio(or a filesystem) as you set up in the Analyzer service settings.

    Retraining triggering conditions for Error message Random Forest Classifier:

    • Each time the test item defect type is changed to another issue type(except "To Investigate"), we update the triggering info, which saves the quantity of test items with defect types and the quantity of test items with defect types since the last training. This information is saved in the file "defect_type_trigger_info" in Minio.
    • When we have more than 100 labelled items, and since last training we have 100 labelled test items, retraining is triggered and if validation data metrics are better than metrics for a global model for the same data points, then we save a custom "defect_type" model in Minio and use it further in the auto-analysis and suggestions functionality.

    Retraining triggering conditions for Auto-analysis and Suggestion XGBoost models:

    • We gather training data for training from several sources:
      • when you choose one of the suggestions(the chosen test item will be a positive example, others will be negative ones)
      • when you don't choose any suggestion and edit the test item somehow(set up a defect type manually, add a comment, etc.), all suggestions become negative examples;
      • when auto-analysis runs and for a test item it finds a similar test item, we consider it a positive example, until the user changes the defect type for it manually. In this case, the result will be marked as a negative one.
    • Each time a suggestion analysis runs or changing a defect type happens, we update the triggering info for both models. This information is saved in the files "auto_analysis_trigger_info" and "suggestion_tgrigger_info" in Minio.
    • When we have more than 300 labelled items, and since last training we have 100 labelled test items, retraining is triggered and if validation data metrics are better than metrics for a global model for the same data points, then we save a custom "auto_anlysis" model in Minio and use it further in the auto-analysis functionality.
    • When we have more than 100 labelled items, and since last training we have 50 labelled test items, retraining is triggered and if validation data metrics are better than metrics for a global model for the same data points, then we save a custom "suggestion" model in Minio and use it further in the suggestions functionality.
    - + \ No newline at end of file diff --git a/analysis/MLSuggestions/index.html b/analysis/MLSuggestions/index.html index e287cf7ed..fe75c802a 100644 --- a/analysis/MLSuggestions/index.html +++ b/analysis/MLSuggestions/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    ML Suggestions

    ML suggestions functionality is based on previously analyzed results (either manually or via Auto-analysis feature) using Machine Learning. The functionality is provided by the Analyzer service in combination with ElasticSearch.

    This analysis hints what are the most similar analyzed items to the current test item. You can interact with this functionality in several ways:

    • Choose one of the suggested items if you see that the reason for the current test item is similar to the suggested one. When you choose the item and apply changes to the current item, the following test item characteristics will be copied from the chosen test item:

      • a defect type;
      • a link to BTS (in case if it exists);
      • comment (in case if it exists);
    • If you see no suitable suggested test item for the current test item, just do not select any of them.

    How the ML suggestions functionality is working

    ML Suggestions searches for similar previously analyzed items to the current test item, so it requires an analytical base saved in Elasticsearch. ML suggestions takes into account all user-investigated, auto-analyzed items or items chosen from ML suggestions. While the analytical base is growing ML suggestions functionality will have more examples to search by and suggest you the best options.

    ML suggestions analysis is run everytime you enter "Make decision" editor. ML suggestions are run for all test items no matter what defect type they have now. This functionality is processing only test items with logs (log level >= 40000).

    The request for the suggestions part looks like this:

    • testItemId;
    • uniqueId;
    • testCaseHash;
    • launchId;
    • launchName;
    • project;
    • analyzerConfig;
    • logs = List of log objects (logId, logLevel, message)

    The Analyzer preprocesses log messages from the request for analysis: extracts error message, stacktrace, numbers, exceptions, urls, paths, parameters and other parts from text to search for the most similar items by these parts in the analytical base. We make several requests to the Elasticsearch to find similar test items by all the error logs.

    note

    When a test item has several error logs, we will use the log with the highest score as a representative of this test item.

    The ElasticSearch returns to the service Analyzer 10 logs with the highest score for each query and all these candidates will be processed further by the ML model. The ML model is an XGBoost model which features (about 40 features) represent different statistics about the test item, log message texts, launch info and etc, for example:

    • the percent of selected test items with the following defect type
    • max/min/mean scores for the following defect type
    • cosine similarity between vectors, representing error message/stacktrace/the whole message/urls/paths and other text fields
    • whether it has the same unique id, from the same launch
    • the probability for being of a specific defect type given by the Random Forest Classifier trained on Tf-Idf vectors

    The model gives a probability for each candidate, we filter out test items with the probability <= 40%. We sort the test items by this probability, after that we deduplicate test items inside this ranked list. If two test items are similar with >= 98% by their messages, then we will leave the test item with the highest probability. After deduplication we take maximimum 5 items with the highest score to show in the ML Suggestions section.

    ML suggestions section contains at maximum 5 suggested items, they are shown together with the scores given by the model and we divide them into 3 groups:

    • the group "SAME", test items with the score = 100%
    • the group "HIGH", test items with the score in the range [70% - 99.9%]
    • the group "LOW", test items with the score in the range [40% - 69.9%]
    - + \ No newline at end of file diff --git a/analysis/ManualAnalysis/index.html b/analysis/ManualAnalysis/index.html index f5354d7ab..6e526b4b9 100644 --- a/analysis/ManualAnalysis/index.html +++ b/analysis/ManualAnalysis/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    Manual Analysis

    Manual Analysis is presented on our test report dashboard by “Make decision” modal.

    “Make decision” modal redesign

    Redesign of the “Make decision” modal was implemented in version 5.7. This feature helps to sort out auto tests and decide: What is the problem? How can it be marked? Is it required to post issue or link issue? It became easier to use this functionality after the redesign.

    The “Make decision” modal can be opened in three ways:

    1) from the Step level

    2) via Actions

    3) from the Log level

    “Execution to change” section

    “Execution to change” section is displayed at the top left of the “Make decision” modal. It includes Step name, current defect type. Also it can have a log, a comment, a link to a Bug Tracking System (BTS), a label (AA, PA, Ignore AA) if exist. You can expand logs to understand why this step was failed.

    How to set a defect type and type a comment

    “Select defect” section is displayed at the top right of the “Make decision” modal. It includes “Manual selection”, “Analyzer suggestions”, “History of the test”.

    You can select a defect type and type a comment manually. Selected defect type and added comment will be applied to the current item (there is also a possibility to apply them to other items – please, have a look at “Apply for” section).

    How to use “Analyzer suggestions”

    You also can select any step from the “Analyzer suggestions” with a similar log. Similar log is marked with a red asterisk. Then the defect type, the comment and linked BTS ticket (if exist) of the suggested step will be applied to the current item (there is also a possibility to apply them to other items – please, have a look at “Apply for” section).

    “History of the test” section

    You can see the “History of the test” – which defect type this step had in previous runs. You can select any item from the “History of the test”. Then the defect type, the comment and linked BTS ticket (if exist) of the suggested step will be applied to the current item (there is also a possibility to apply them to other items – please, have a look at “Apply for” section).

    How to select other steps for analysis

    The “Make decision” modal works not only with the current step. This feature allows to select other steps with “To Investigate” defect type which can be changed as well. For that, please, expand the “Apply for” section and select the needed option.

    The “Results will be applied for” message is displayed at the bottom after selection. This section was added in version 5.7.

    Now you can view all changes before applying. Expand the “Results will be applied for” section to see information about changes. You should click “Apply” button to apply selected changes.

    Bulk update

    There is also a possibility for Bulk update, when the changes are applied to all selected test items.

    As you can see, “Make decision” modal is a time-saving tool for engineers.

    - + \ No newline at end of file diff --git a/analysis/PatternAnalysis/index.html b/analysis/PatternAnalysis/index.html index 1ed575b13..2d35eb73a 100644 --- a/analysis/PatternAnalysis/index.html +++ b/analysis/PatternAnalysis/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ Add The most popular pattern widget (TOP-20) and track the TOP-20 the most popular reason of test failing in the build.

    Use case 2:

    Problem: Test run has finished. A user found that more than 3 items have failed by the same reason. And he want to find all such items.

    Solution: Create a new pattern rule on Project Settings. Launch a pattern analysis manually for one launch. name. Find all items failed by the same reason by choosing a filter by Pattern Name on the Step view.

    - + \ No newline at end of file diff --git a/analysis/SearchForTheSimilarToInvestigateItems/index.html b/analysis/SearchForTheSimilarToInvestigateItems/index.html index 910c8f731..6c7aa244a 100644 --- a/analysis/SearchForTheSimilarToInvestigateItems/index.html +++ b/analysis/SearchForTheSimilarToInvestigateItems/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    Search for the similar "To investigate" items

    Let's consider below an example of ML-driven failure triage in ReportPortal.

    Use case:

    Situation: Analyzer has completed its work and marked known issues with defect types.

    But there are a lot of failures with a similar unknown reason in the run. All such items have "To investigate" defect type.

    Problem: A user should check and analyze all failed items.

    Solution:

    A user is on All launches, he clicks on "To investigate" and opens a list with items. When a user clicks on a pencil next to a defect type, the system opens the "Make decision" modal. In this modal a user can see all items with "To investigate" defect type and the same failure reason.

    There are 3 options for search the similar "To investigate" items on the Step level:

    • Current item only
    • Similar "To investigate" in the launch & current item
    • Similar "To investigate" in 10 launches & current item

    There are 4 options for search the similar "To investigate" items on the Log level:

    • Current item only
    • Similar "To investigate" in the launch & current item
    • Similar "To investigate" in 10 launches & current item
    • "To investigate" from the history line & current item

    If launches are filtered by filter on All Launches page, then addition option Similar "To investigate" in the Filter & current item appears on the Step and Log levels.

    A user can select all identical failures and perform the bulk operation for them.

    - + \ No newline at end of file diff --git a/analysis/UniqueErrorAnalysis/index.html b/analysis/UniqueErrorAnalysis/index.html index 2f7d9547c..9c468f17f 100644 --- a/analysis/UniqueErrorAnalysis/index.html +++ b/analysis/UniqueErrorAnalysis/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    Skip to main content

    Unique Error Analysis

    You can look at the test failure analysis from different points of view: qualitative (passing rate – How many tests have failed?) and quantitative (Why have they failed?). For example, if 1000 test cases are failed, then

    1. they could fail for the same reason

    2. they could fail for various reasons

    While failed tests allow you to understand what is broken, “Unique Error analysis” functionality implemented in version 5.7 will show you why it broke. The main advantage of this solution is that a list of all unique errors of the launch is presented in one place. Moreover, the system automatically groups tests by the same errors: when you expand some error, you see a list of steps where it occurred.

    “Unique error auto-analysis” is set ON by default.

    “Include/exclude numbers” settings

    There are 2 settings: “include/exclude numbers” – it depends if you decide that numbers in error logs have significant value for analysis or not.

    Now, Unique error auto-analysis will be started after a launch has been finished.

    To see the list of “Unique errors” for the launch, open any item level in the launch and click “Unique errors” tab.

    Finally, you can see the list of “Unique errors”.

    There you can see a list with groups of error logs. You can expand a group to check what tests belong to the same one and it could give you a hint during error analysis and defects assigning. The groups are formed based on unique error logs, some small error logs can be merged and displayed as one error.

    How to run “Unique error analysis” manually

    tip

    You can also run “Unique error analysis” manually from any item level in case auto analysis is set OFF. Please, follow the steps below:

    You can also run “Unique Error analysis” from the menu next to a particular launch.

    Examples with “Include/exclude numbers” settings

    Let’s consider some examples with the same Unique Errors but with different include/exclude numbers settings.

    We have 2 errors with identical text, but the difference is numeric value in the first error.

    1. An example with “Include numbers to analyzed logs” setting. Error with numeric value is displayed:
    1. An example with “Exclude numbers from analyzed logs” setting. As you can see, error with numeric value is not displayed:

    How to get ML suggestions for the group of steps

    In addition, there is a possibility to get ML suggestions for the group of steps. It speeds up the process of analyzing failed tests and assigning defect types by several times.

    Also, the new Quality Gates rule – “New Errors” – was implemented based on the “Unique Error analysis” functionality. This rule helps to identify if there are new unique errors in the current launch by comparing it to another specified launch.

    To summarize, ReportPortal got the following benefits thanks to the “Unique Error analysis” functionality:

    1. a list of unique errors for the launch with grouping,
    2. facilitating tests results analysis,
    3. ML suggestions for a group of steps,
    4. new Quality Gates rule.

    This way you can easily sort out the failures based on the unique errors found.

    - + \ No newline at end of file diff --git a/assets/images/CreateDashboard-2e25ca8b7611c63c5cd7f605b2b3cb3d.png b/assets/images/CreateDashboard-2e25ca8b7611c63c5cd7f605b2b3cb3d.png new file mode 100644 index 0000000000000000000000000000000000000000..96300574ffe5e076aad0db898611570a45a3838c GIT binary patch literal 69982 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
    IH!LL{D@F>r?oITGG!6F0>sdO7AhVsf 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 VeTHZaZvEQg=Y#m}saNEU{{jdG?#TcE diff --git a/assets/images/CreateWidget-25ed2492b3e2a2abc0b915d59d695542.png b/assets/images/CreateWidget-25ed2492b3e2a2abc0b915d59d695542.png deleted file mode 100644 index 3800c1a0f294dde5df19ce181e9494393cc4b222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31122 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 K%2mpmhWrn4C?bmh diff --git a/assets/images/CreateWidget-f596ab25c80ea89a250a68dfcff3f53d.png b/assets/images/CreateWidget-f596ab25c80ea89a250a68dfcff3f53d.png new file mode 100644 index 0000000000000000000000000000000000000000..985c6c3e45cc748fc65730b8ecb3335a3d7cdbf7 GIT binary patch literal 193772 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 jUIO+45So>V0*#u* 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 literal 0 HcmV?d00001 diff --git a/assets/images/CustomizeWidget-029599e6fed04ca6071d96980828538f.png b/assets/images/CustomizeWidget-029599e6fed04ca6071d96980828538f.png new file mode 100644 index 0000000000000000000000000000000000000000..3266cb1b6ea2c296ba8e6eccfaa934fb08087fc4 GIT binary patch literal 182198 zcmc$_by%C*vo_q87K#^lC{Wzpp?E1)+#L$R-KE8yQna`Ric4^ZAjRF?EjS_gm;HP9 zK4+ivz2D#8btQr1dY<*nT5D$3%sq2Qd{L4`MIWzfjj5Fi#c>!apU0AR`1aUt$dnBi_{{6#Sug^IE<^R3_{+}?- zIEe0_8{SfGbC`@D8qXe?Ok!PF9h^Q;$G%kb`PY!-2r`)%w~FOw3>Cova(I++!Reb1 zktJo)Dg1jNzfti`!v8hgi&`QhItvpyW8rqik^VV`rr?J>Ul%5V7Mxo4B|2hArop(4 z+hbPL_CY96ui9wYCy!>+^3o`!sD5x=LAKKiYxox|#QzW{KW^S_?- zUhzK8Ow}pBO7$E>f2dMCWYsOvp`8ZBK>J@aaG!ee77y73s7&X7DeC$(wc6$N0r)tc zD|z0s_K45ccBR^J6o72Ci1Xj`mJI}oT=Pp!t)AaXE8cJPgl&0r+>^<~k;k|l&6?~E z|AIjr0-`7-L$A`G_CEf5(fP5tA;0@6)1a|qY^ICywNE=KMt!FN&pu@aE%>Xet5!BP zvbws0(Bp+54zs@X5CX%_DwCeOm8T;3Fc0dkoBf0D_fKWzD-wq4{E}_Bn}v?N*-qn5 zK<=Q$r%6EX1v!Ac%5aVvvq}F%@`jfx=H!GMY6lT+jP^OswrgXqwImXmyDrcYz|?gx z`*^+oU9*VbzN|xt?N`{UBhre<h-&&0nVLf|BJ-yhP?%cUw#vj zoOTBkpcqX{`8kI)(d%Xx-|dUlC3-vBp+m2%`G&e&oIRC*>wP7OJDz!oyZ1hv9O+^Ptu*AnSbY+#qkqTp;q1>cz($B*N zu;5#8Tt`O&+qN!i6?|HB*owM-aam$i=r=_!E(-2!vlA;08UaXq!C>Pl;K*n1Uz$qU zQ%3%n2#P)z2|r{^QxG!)EBt3m?T+qP8!FX2R@z#{j&DD0^CCJ?@?3E+ln-2M-VrBG zg1E!)+^@AAl&Mp$SCM=~SC*C2R zK13@!SKKN0MwO=k(kRsMWv%;amE?ul>o5hjOO4;tgQ8GfHqp`<1CRa5@Opv{S&^Zm zbQw8IhZgdqlLCTIIJ$r!B^98;npq}yIy$0AGx%auN$=O@E3Y~9*sLqPF&{hX$#CCO z(PuD6;?BSp+a=afxgGV~!sV%bb_J`Rj>s5}-mUxg$m_PQ@q1y80VvLGgx@LdEkGJ+ zJZEn0kED2V>2bni>Xm3*;$^j^K;9+b9po!p(div)xwyV8`FQBxX1-~RHVxv_W7a15 z87z0Qk-Ci)JBD5J-VZi#h#2jG+M_=9cK9Mj+*OfUfeJF4${p>2sWy+7jhqzTP;9Bi z4I#_Uwq2CJG>9z=*h$hl+lmv*D=Q98;b$Ezc-sH(TD`F$*#)d zbab>Ly@GF26@7lJ-siIrE%vOA{iqPi1$qEiXBolKj=_GPv+WrM*lG-S+YMl%?mz9i zNjjU`RP*lC;Ij8;xCFN=)WMc%7ibt3yDM?*j?vv=blrcMVs8qLVJB5&k}dr-Ww#vV zjIQ`LGPbW6mG4}rLEAH_;T2*j7NaaP$)fcJIaUNRRot`30!20$KS#;poAe6CSooKR zsk%>|n)RKg6S*baWJ9blQ$1B4!RBF89VFE$Z1zjl7f+BH3V*jhn3p1E>jul;SOxNQ z5_56fW7G2Te0H`swbF(i?c~u8T*SSY?QWnt z=^|;TQI_attnf9%^ZpLQs~*#i58zo)lpmfOr25Ij^syt{&##vn!@p2*5L!d-Y@~RI z52o!kJ4s6aOz!Zyh_X@zK`j8nd`GsMOr?Lf$uhj=N&M^DfSpjfB|`AmmA5)rzwa<< zsLHC#cQ}oM!lr>#!tra}{OE^4TmUm-BAusk|3j~Kl@;ags4tn?Zdw2D9McJVeDz-a z?n8^AD#umf<0jH5{FpZ~32$~6&3*6x2*&S`mMveBFn2iV5FX@T~*oLlO7a$oAXLid>iQn{D1)fA+4wv0Jof61v&s z(CgggTKUNW{P@kBBfn5S$Q?^|Rar(6X;4q2s@d1C;8a3do}~G1+l1q2qImM-ie-~w zrF57kIKF*VsXnldCl>9`$nV0YS-I$miZ(9v0lE1A4A|%6;n|uj zl-F)_%;kK3RQA(h`O9btuV_KI1*Xe7S`Q;mS`UxCZ(nORL>ZZgfK15_BiZ+An4bE3 zt;}5kCN;mHGWi%Wg$t=}55zKeU-LB|_HS%xm(ZS|eYRyH2Z7ICqVH;bP0t4Llpn5< z9gaV!gtf zbB|Sm@6kiZOoiM?Sns?ynzo)AwHKM&UkWDTeK5VcnX6*1A%z%Rn9j#G20K37oA9-6 zlZU(^?}9a`vBLUGIX>AR1os+;N^1lq`1`~3RQlxkBsh*j*`DU)v=nX>r8UAJe_oUu zCeFPat9tP;wq*}X$2sw&VJCq&8(AQIERr_VjV|sW$?CulY|8o$L#h_b7fJZBL<^M! zg}Jqr*7)Zd@rPzQ^{!=M_RZwcrYh2^q_E;{e=v=nKQXFA+`yarIP4ZDt&oYBEX0S| zyrli`GY49av`TzQHS0_94biEbbI>)f;%g8&jkuWcaX4~n8;s2M-U>CjO%P*i&o0=; zIcQ!p5eXr(XUyalm2E4j@Tkh-NYi#1%Cn5am^AuXXWc|0l^r9$_jK4sZ!EuHMo=)9 z=9Y1Gj65!$I?S~D=gmguRAB)hiQo@UGm5Wh6ftx7mA&^Qt9=;})a(``1mTRT4E>-R zHH3>m2btKp25n&|je=40%O$bp;9f4E>BSMr#!t=42gA?#i|_rlgi5fh99FrbiG;{; zikN%q61^>&4721*ob?x*2@`0Q`wu!H$leljN8sXMS$CZh%A%+{e- zJex|8uIM$4-Uqkzv#w^mR8i{>ntqT7;-q7s+lr3Z&B(}n`>n`urs&IrloJ^#xfZLq zcDql1$IG#QJ}UYMOg^D6eY*d1LkJMNCm;kkSeJIi9*M#@D{tFry%pV2c9#{z6~!Wk zHQs3NVnw9Ju38)lUYr3Fu7s?meXUa7co9YLlj}vy8co;nQNI^PV`~mJtFvn0p*)9y z#ZU;iN+xXg{icj_N*I-T_b3;vKz=6-ZeG0juYq|$G1+I8KY1ZGp8Tr{tXiWX_Yv?& ziOYD(Fg7yayq6%UL$ASJ+SPTKjJn-N5Ru7Q)U;{YTG*{p4cJ)~)5^xe(zDSc#z=i# z==EHswhIrRF~cxu^YJ69CkWjqP$@h^Hg>k!`PIK*Cj5Du$qhM*s@_jSdKyd8Hiz;+ zhMcR`L0q)3y_}QpKtBx4Y}Y>5XMIq_QFVnd($J{j)@el_RY`>!kzyrZ+JsI<&>UNf zNn#_cLU1Qm8q3RS@|UzouSdae#Ox-o^|;a3)Wz-S$xzMd8NU3U_lLi&d+-8`9=Z-b z>N7cDt-TN_iTufN8_qQ=rRACqjll9eNX4v}wgU6I!G?QKpU`fAj z_bLr=eoWCH&S*vik+;K+653&c^7=o`MRq`J<=68bJqTvYf#<7u0cdUHK?+H3ktBe{ zy`uij4$^Dz?owV)Ze?%RQ5KA==wk*Wwi_3T?U6{;fo2oER@m~im2ki`5mz9mN-37s zeuaA@;_U`z?CqwNcsWd>bXY6y9At-T7F;)^aBiF z5{j6Ux3^|63?exDb@W9O^c%0F*cam}QgVKj+m*AxGk{d~jsGohCuo&F6HB z|6}#hZqsWx^9qsIVIh*Il-BgJ*VXF!tHo7-RxX>SQf6c?NnD;fucFHvMiQZM8jlj* zmlWl{q7E)Gsg;?=kVW$1e80^Z{)(aKv4PJPoi%_R;c{&?gn5B?=B2049WJxyo{xEH zuVpQ{7hgvwJZ!4ktu3Wj(aHHO*Ei>&&>J@mv5Rr_3Y4? zDpUZnqkjVhVJ0Jcy*Yqgr19}e?c{#;aA0Z_rF&C(Pn+M|QD%cuJs|Q*#ZSRUL-u8R z`+5WsImcU@*`;LN9|`zz)Ds<500)jPfe&alswKy$m1(G(-V@BO@g}( zsE>9AlmW91AW(OIKf%I+z$AgH%*G85w0wwV@YCa%*fXhFf2<$^&fka(jr6Z)lc^Lk7pimO#L`zNjk0&d7$hHKw;x(|Lg_@7Z{;wv>F^TNfTp}O$ zO%{z9?XU@~SU#itKK{ADNY%4GuTH0XI`-wKN}r+X;0=}v+gyunHd`u3oZ!t< zh{B?2*gOkRZr->)^R-CB7f@8v^TS9UN=J!ra1>yFB{_=JS*TB)ZFyv}=(FzEn|S&y zs)+3g2BK*HgLAv6a4&{)G)I^8(J*hM91nK&ljP~anp@&f%D|P(5&aqmvK8V`V=c8b zK!H?U=}}h+i;1W1AgMWjyg2u?xOAE@+(coEjjL%71BiXy*FSdo9DJ3Fj;_NG^2C)X zd&I7`s6nJH1w3yK&3m(AD-sJ3>*p(wnDan7dV+OMjr%L&&PRWG@e?tf{%+`b4lDQc zyOo`9vqv=4Ya(j*x^UvgDKQ;0?)y>gxtD`vU4HXnBAFl(!et09z+}rSlU53uzHF#z z0CZe`CN@{H3h%F|t2DbP%M5pTx0l`6Iruw$lFhFBtck>Fbb+X4Ei*`GNq?Mv)Y2=> zHR<*Gh!)UzRR}4b^0fEuukC>wL*V1hfNF#vS1Fdi=hh1F5%??hX4m}#clg?YFk9>S z;gNRRBh}yzL#|E8T-F;xPB**^s*>_IsVzS|{pe(#PuzTuGGEqBs3P5 z7CeJ{S)7p%J-zO~6gg+Tzg>|zMui9IsW4Q?_E9#Rvbru)o|h+pMDbfOE~OEXF7D zvfq?(q6C~kg~2x1*S_vqhOE?=6ey!TOogcYr?Z?_&)=?&|J|?G&xlK|d}MAgQA$+6 zpxO?vj)EgPdjH|}Dx{=hxJz)(N~$iZo5lLWno=+HhZHlW5;!D75Gzw2@FOKVL|GF1 zOvdq5yBwoL+iZB>1={hAvcwmA+WJU80~~Kulga#eJ#}-l@AH zlZ3)He9?0`Pd56O>C}@ymdD$aX0#)YROGa&FZ3zmV?i=U9L%MRT@kIE=H@^XvvC%w zdSdCM^bM@^@H+7bn4kboN_SqhSmDFy3$V{$@xbLrc$j}M`9;hJTE?m*EUny}uQn?#DQP!by=lngzS`Q{tad$^e5srQ2MvXBoj>?V za;&zWd=GGwlQOg*T5Z`5H1Y!GwHlz-syrx&y_#xQApX6G0qYB17kk)`T>;F@s*Eqv zHio>}%vQSVDy$-(d-ZshoguNVJ3-Y!UqvYR;|FQP8o67am_B+>(u3f@?L0bSbu~8x z;o+>PsP$}&;PLEe=*jab5A*4;fMmA+uY+GM-t#t9=;>rr@nPu=#X}E~!!Zs4TbG8YACuRM}p_;45~P*ajn%iwvFC=^W=?=O% zY$!N6(ON}Wg&-a9Owcb}C0PIB%}kTFPZ#>LE5obY3sZ;5Yj#LfZjwQCJwB<^4cMh9 z$gycyv`rZW7{Pl#<(dsjb@crP>z3YV-3G1GXL8 zr|J$lc`dzeg)N4ieQtOPO_DL}PN(iOp0ufDS9?$z@!3;*jsNLrxi}SSX6S==ZcrLMKk=7EJTAM^P{g^7{6ci56llayjU%(hTl}oip-$Px2b#{ zK$3Tt$jKNAi3<1<4-O{41ECf?)u@HSs%VNVYRP0bWN+2t~<57XkUw1yC4#JmrB!5J#bmQ1bSYi zBNLdYm_J+m5^dyxCVIW4V;PtY;Skci?Fe zyypRKCw8O?^csju5tH%p*l`VQI9M8Mkr`>&8CS@i{HNTYNL_9`OVc2m*ZM>0KNhqR z*3Q15b>Ihqm5A2dO6vrW`d>||%&yYcV}cuWG<$@MI3T4tSohkhX`zx`4UR1;F&BM| zq{!jjAwM}^hlOoPHS++=Mw?>zlv~zU3Un=eG~{SkvE7CaYIIK`PfQl`^U2efgB+Vb zV|<*=Z7#v@g;*!frmQzQe0X)lGOoF67Ul6l!ba%F+G6x&{U{mlO5YjnG5BP*SqIM3Qh;VIpq-AcWt6yiG$2;P-%hru*MIOie$d4N-x@Hi+%Z4(adD09pfp09d>^*E)At;B51r)35-lNiSHr6()J`*e<67^duU)sZ_M=pv=A3BP4|`J67r^vhzQ zgtR-_(@qr<)N+n7|Idy`_oOcBUO4;1y_4m`Es+?hQswtic(RcS$#~*Ut0}^*EHd-(j^}PyA|(?m%9W{LEzz7JgJa=ht(2klh_nepA2OcTsFo}!taV8L{&aST$j zDdPIt%}ZLPIBwG(?~T`}qSHIbPkv=?<}GhEY?A}qbkd+gwCjZj=^IJbnGs59P@Ay0 z?qR&szwmL`eko2kTS|u$VlRk71cIJ%0qu`ho;A6Bde5B%UazH@Iy*@Es1NgG0J8Z# z#{#l<+EMevhP$3z{`|NZ+4*hG2a#pF#c!|{MEbgTgyQt@SeVLbN2$+QAkK=<12*d) z)~ddG-1=dVkZ6{EcE{whp7^0zJ@0WR%1UVPr=#Z*qXH?%Yc;JCX=B6M>rI37@JxrX z{?v%ev)OySvyJ2tZLU){1%E%RSh&-z3;?~IGRh3`;DvO~Hl%DN=|r8!xKJ(jZt%I| zt-~(nI4u6qE)S<<4%tsVxt%YyLu`XD`11>CNW|=aeaAxWkPKN3{yBciej6gdkDbaS zXaY|gK4d(;x(ti$rgw@V6#6O*9McU+5ck?obUC_WzdlWcUjKo?Vgyq8ZJ4M^0RPl` z5Ru@uinV)bP|9g*I5Z8mtY#-D($^S_)(PUHq@={2^8K0AtgjH=_3FkGci`KwcG#(3 zpwn-VkE^G@HI?DDqI8i?`wc7M+Hy^tDgl;(4(o1XFtyAbx<~EHbfVnw zn@7B86lTKe-?YvlaC$0Sf6%pLh??9YLJn+hxPOeDZ>}ZwJ%gp z6o^F`#MAU_5w#`FAKp;hu1ZweXmWb0%?!GW#)QBID)$%J5uSvb-Fn1ZaDV zV@FG&tz|y3F7ff*th3U+W#G$nsDVM6;nx6Ek7hhbSuYp7{Z^Ywibj?y1#*fF{NE9_tHUv$|5Y zCujkt5-y10GDr-2%5ZgHCK6Rw>iyGtI2}ef>bC{c(B_&K4jC?8*@h^+bjSxV?hm+Q z6dt`bXH+0pVq;v3p#xx!jpSsxXEfgJYm+5^51Qa0bnZi^UdD-^p=ISkgl86WbZzW^_(-EN{mvgkzQ8m* zBHT9l^2Dav+sMN*M9#wYy4P8=nc0bRk|cX#tP}AIOeO^Q9vWP_8nu~Y4(#(aEq{1) zP*+<(ZM3UbkS+44O|Wm*0M9LQPXttJsMwEo(Vyom>(Jb zy`mzc`wXRy`mTuGv9>*n4ejC|2WVOau37YB6vKv!P&wQpRzQ4t%rK#7vO5$}QLKt# z7di)f_hc!v(~A_2i;?_+-*cT0@23n6e+bn&8b3-Xcwe)?lC&$2N061YVS~8ChBajU zY=+$p6s$eL43%5?Q4P|6Xswc3rC8K=9L1_$PW55*UyM2A$+;6B;+!hPCFCC$V5x}t zf73Gh<#v++b?^&ByPcPi<#ZoS3;r$NK%J+199~VH!Z+5v?{&11@zqYqN%j56y`IAT zqm{2Wk71L_L>5Uf*=4BN)g}x7p)0xA$x7g_9+~wvwOlLpK~3te1D9b6(U+&b4+5gv z{D=u_qQUA56Ig3u{)+d5^tMK~jI?7bQ3d$tnfd<|#))3T%VR0=j|&;9q>V{o2o0Bs z0Ox`WJ)twV&#diuL;ebEQduxtZoPM!I&n6)c>KR~g4c{t!9P1a8*w!^oehbcbqh>Z z^zi*eMptp2v?ORn@s6==p)s9uL~-tkTVxH6%f}omihd_7!%$@$Co3EbPo%9cfVf|) zaEM`;3wy$E7u1jr^%^uq&!g%&lQVs3UsSa2>We;YAV>tjYMI6CJsWpy1(4%~ z!lX7^8WmJDX=fvM#C8X@=fWc|ut_oFdgoqpH2zRSO_~V2n^Zr>{1fW-w&q7O0s%sP zInYlLV;2dSD^560v zoa9zjx7M*`7&483oHjZ2nvbQ1A^=4c+7?nHbc5yU7#E!bc#dX=Lzv|!stP_9udDdE z1cheK&d$J*cuYz0*PI3cOH1*)ZQR$gF~l)sLZUKGPI8s$FI4H2GT^NY{$AVT&etrNwqwsl1SF^2a9 zb_P^p3Hoz4vXu=0u^Bcb^hqC$nT>CybXh`p!KH&yW_1H&vHguWd90SgXGQ%6=S3IK zMIvXd8O=rIs9)O*y_y)|#aKJ0Q6H};2!f-IeWk`miJg*7TAvuHTmLGE_gp7t8%+OjucE~q!5E^VMDZcHS6X)cG`7XeOFv>?HZ`~WPj{ev zR^Ev4*&dz#dB5pOfXG2;M+YwAo~n}x*HJm}0gLVU6Pu)y<|}xz6KWA3@`Xe?i+9R! z)T@J|P+@u~u%bkPS!65FsD+lQO^*9VMv%dAX)ECUDRF-o(iUc%kC|Rc<9J$3eagh) z`-+qSm$fjs`F;1xlBOzJ<$Ln}1(n?0h(i56C|#ES{w)a|de0Rm26ee1F}P32WznI- zmM2qMd~jM44mhBYqE~zboV_g5tA8gX_V~84;(>IcH|gxjoE-RRN>qznpX+eSpxS%e zk$L$b_!YnxRRe6)n^w(ca^kNwT|7MNwR<{U2ggGoGO;y^TJ=b?V`M?Uhqg(tYGlnM zE^aeZsVAe!gvhDGV!&4C9@7H{o|bdyJLuPl<$c~gk|nGt6s+l?zb^wmR=BnuB{UmJ zl`i9rQymW6KaK*#0#^DzC5=f+xT@l}g`QvXb;|!KK*bWP=pCQ9bQ)(F5~S)JN9*XZ z;n?0O&`|B|;Bp@0jdZJCT6Ra^6W;TmYFdcbXmAgh_@lVNJ8}3sA2<3v@ zS4XrTW&p|$*)F0mAv!jTyNrN$&(B;~L(e}njpY~0L%Y>|vEwc8%{6TP*d0gxIQONF zy$fDXyTY+$lvnO9G^f6XSKLh#e}sQ`&RqPjJ2u zHP|G@L$$iQ&vfdqf5Qy1-OkWrJG;iEGGbT)b-}R>4s^x|0k7IIl%yQxF=h1!O#|hv z_*WY(0U34*-4Yha6tv%2-J5PfCogsZ}4ZZ_~Eq-Ta__@m2SRxYBc2M zG9ugu)jAfrAG+(mjSda7D|ocYs{YjBV$>rz>F=S0gSOM84M_-RKFZ&da4zus&@Nvo z?R8*h+Z-RP?lUz@U|Q*c%_%q>3FzQ%?j-g>t>gK+FtA5GnieS=2#y7g@d~U`K z$qB{B<*UytDMv-jCs(u((Dqy;qV}7NS6zzC1M*J07vC!o%-AhfitGeduO56VvHj-Y zO8>O6kFJ2bgzpjV3?e&=eG7+54}+BL_o!QPUxrBEdali&KHn;^KM>Eb^Ud`LJ>d(> zlYCJ(48LJ(*$^`f?;O!}a++|Rmsv#GjI>jNU3B~Wg08|CE6FV^-gw@GB0cQ~v#}(s}HxWM|Ox1ppBuZ#4ZF6f}|dX0DKAdSs(+$4)mz&#aO06-9G7#-%z|IrXs2T}^MPfZaW8kqQ&zx2mqxw86I)dewW##gHevnH1$e&Y9Wqmw z*a^6_A>=gWZEwVmTrSflUFF7MLr;%0d+8O)P=3TQqO3gSzpyE1%wtm@!9!8B*RavzAD> zcOsX0y5WAcZw+KzP;Ta$d_vl$XWN^2f6?Efc+Zq>X*OD-_;$ENS{y9EoXw3=S-udo z?d?TQq>}E8KGYZ23EpX0|Mep*@f}@R20z-?8vnNf#t9*gI_l$X#8zQ*WDEh>{G3+e z!UoCn-cSKT0WT7XsPaohT_bKG3|X_Ii42O^axTNZZS5Upaop+!VH-yt zmd5j`MEtm4@_fU58vd)riWZKyj!=EQr{_f&Lcpn#aO5xl$YG6hlve%W{maro>~kgU z$O|1{5?cX_tr}%TJu-EM!K#Vy{Z9Nukl- zw1RZOcT@q{Qc{BgkfTAzzB$bNW!3jaVN83VwS9bKK7k@X7nWC4k{nm2ud&tJh5&#; zut%2MKz-~CUQJHfIO-{=3i& zXwQc5k@n4OGc&W$MzkW23jxB3l` z1HZj`RJTnH`^BIl=_gj{*a0@yE&O_~rCkso&xXV&`gVExL!KhP=+9x$X5nMEs8AOj zt{M_41#;YPTKe!xzrBpgSJJN`d#fA}7Vjj^qDLRN`M3<$R$T`Y@X{qmSUo=dg@~XH zfQ+h)b1$$L^72ecg+1Sy^+h*vIrs%EEn_x~G&*gq@9kBlLJ^&?oBC|W!HC3rzgAKqOu z3QO3kfCcr;Rnz9ZGC<_g{mjL21mh9*n8pim9wr)l+>gL?xF$umXOZWCkZ@KXHhyxM zeglt_-UKi_#X7}^Yg?3>29xMopD*l?c%HbveJHVuD<)ccM~L<9`FsW4RuPYY+G*l` zaR&YQR@U<2T*dNX2U*$oonEj^4D8^7Kw9^kZ0<`TrEQaIUJ0B`+rker0PZr$7tg_m`nrOw9o9;?}! zhVNVhixZT;i9IdF*~6F>_4B}Q-qDI!yKJ4utr>JNi7$LPP@q?e0=ulOc9y_QolGXE z1-V~5Z}?cYVrk{I%ICc2L3zF%K!3zD$igiMEIO4S&=+2+Hc|NKq{jf~3QCe#cT z9#1H;;b!}^i-MvX%}#>0IZpBg*Bdb^;8E|vfBsW6;RW`SANUpN)nE#GnCcqa*>mV< z-&|G*Rfn*zKmgSfgd)sj=$suC<=*x%Duw3vh~8)!5n4~!>yS^b@mmz;xxgGvB&v`o z^vaBO1e{FWPVd0Qz=!QUGxc@RvLzsFFGw8L41|~?+?L(p>F_U=))5Y8jc-@!Zz1#k_P|wPn5d- zPlF6;Xa?ostuO|BB?`J(%${+q{PV#;mPS&|Vg<8&hv6Q~Qp4`&^dZC~E^(0vSryScRud7b)pT!=etu+Ir0RP zd=8VlSGHn!fs0Di(S8o&e|Iv62mMve9R)nMlzxXvVlh3_VKK3t#c7nG&2@i%=-MEG z;b0j(UjvjaP%^TtaV?^qk-IGAbn0myi%VZ>;neiIJb0Iu{5=Y9vUFeK;hzc< z=Q}O!Z#G0bR$8PM|6O4s?nXsf|7jRKS+RQSR>HWEqH0T~{WV4W%}uZ;>8L$kd|o1! z+s-ZjyR>gJ;>a+1DzXORvY>6<=!kS?p zOcXy+VbJa7R`rkyjrEF9xJGBDGq)Jr_V>uwwb>$cTu_l?p z+mcC}w>;XV3Stc|+a%sza!w`e>= zH)0YW9l=bDOi0}sHbK8%#IJd}3jwdv7q{q}bgS=&X2e$vF;5FzA5vAmr@5DNzKQF~ z!4exSxwnZ=IKyah^$1Xz6|Fut{VG7LK0C1^<5tvIwQXF~2wS#4{sKG&l(2=V z*$V1Q`w6u~o9fUF4n{h1v*P$ji$KGDm4K0`7J4bFS*k_?oCb3dlid=e1V( znKjGrmt>a$VP&=xqFw{GlZ;adpYmI4+Ynii0sILDF|$etY1W^sv=X;;X5Y3=e2ZP= zB#n^o327zXv8aieDTK*Pi`W0QjkD3QD8{+Bt0ubeRwS@yjC7I)V%>W`xMM}8&s6QZ z?bpb6M}rWjU2mFH5lHoP_01J_Gc9TSm#V zTbxEuE{qw-EJGohDTOtsspI1`GOR#7VoWfRCS>!X8jgMvtdS%j&j3^!oges@H;2lP z5_+6=<{2jNEu{=tyO=mhSafj|9{;JbKh{x#lX%WPZKc zGh$l>N6iH~s`;M$Cay!|^36NDF4teeKGeZg^y%OG4s0{u9*B=zV3l2gQv(W947-a} zoU?YSG3}Ozd})<3is2YpVq$a*$(j~$E`I7*Siul(Qy=5|DwW!&HQLW=!v3rlPV|^! z4>8jY5Tv;ScGM{@YCq~rK@Kc*%QLoC+lONf<0>jzhNi6U3wYAKm3OFy;*S(%&U*mm z*~7BL<)6J(zNW~uznGiO4EtnLRfKmmEYqaFT{^|E^ciQVy<8?AYiPSTUzF+4Tr-)DY2%;Dc z7BuWyjA+dnh^3qVg7UVYdbQpcq%^B3t6;{g8rHmNCSO`Ct(aD(&L-VwsO2f2ZEZ9RwyJ3@%x9FTY0cUsX}~JizgAY)k}W0_5RKZnY@i zV;CF#{B%$8MN`vW=<1_|MH1)aQ&AdpmchwC?0k!EJ&LVe3IHI=$jHFuYVWx6%l!un z{Yykr+`suSXrGUPZSp3C|DoUf=(B=H%Ij$3pzO*Ivq$J~az{-=UENma zcZ9(!fsXr?)4$|_Kn9wQcW{L`R|b=qk_aYB)Mrzy27C+QLyP~g8 zkBSt21xkit3@-zD4U@c0@IK;R>6e-Q= zT=@(a5fSZ8et7kjg46sh++%$E_U%QlZ3^|aPi$k#CoZGUqb>ov!$hsnMVrV4G3#mi zvi0sh~95ea1VirVL{|qvYkr60K`XT!{ zVDG&X+FvRK*Yr@Qtv-{R6Xp1X1g6*~6^_OG)!*?$3bZ&Em#B_c`y9ccp$tQXcf^nG zI33m1$SG__eHj8SiOzRS9b*53TqW_A$QGU~r3_%*z{yusK*jXXo-oY(;sL=K#Q?S4 zPm+ddSI(K-u=|P>YlqWsadB}Ms=5N1u^BgpO24O!79RhH7QB-fFgEK1wn?QOP8v6K zs6!_Uhpeou)T1xksSkGOAF`;=cb*|?M^Z8}CPT?AgE8OMo}X?oEoPVght|KPG_N}U z0`yZZSYSne;IWzQ92!Dp)F?6?yy2@cjBQQHKbe}EsPR|WfT z$nQVygmWJD=PyxCoTncL;;F0sAHBhSeR-ww`Gg0~Qf+RrK3tJe@@H^0G+hM!j$B|X z>ONrW2>br;J)jK!(bYG`3AX}(y`k^9bTqjLaf?SlC7Rq2W-v70+l*-8e>yjTuuhXF5jq!u4@uPp= z`$+j%`{c{>AO0XlSg)x{tdO({?!R6h@^_Yxx7J_|*#BYRt&N0lJOUq^#z6t@@SXb~ z*WTd6z16N|Ds-i<^+DKq`_o@*X4W6w+gQDY+ZX;EN6zzEhi>Xh;n@X_E*?uvW#!RF z{`c#I1y0u+kxYkD%f@!^tK{QJ`Y$)0r?Q(+!3`|<4-TE#;5I|5pan5dF|&f*?Sfk& zi~CIiSn$`^ZWuBzS3va7u$AFwhW~HL1n&25POvU#RW9?7srUM0dprT7aoIVkrwMe* zy|^KOHZU_N%|LWQPM8U{P#o98~mgxr=?^ zj>qhBxp*R<7R zl`@2XX9Pb&2#H$%?;~cAp0mbWwC8VRBLc693&qgYXceoKYPn3P{GYo|opz%WoUx$| zX69%A_my<G^-%wZ07nAEBO5jQ(2}g2aTX4l?Q> z_|f)nMZk4)fFEqOa7_yf0*d@gLvW>6^x*6?lE3r|uF?N*jes*uo%pR5)&4!&bQ}B# zuZD|4it+#VW46TM{TyZXvxi?wXLBl|gyp9fpGweWmKHw#J(cOHGWX1?EqKbY5{XAg%=6@0JF11_-8qlOBJZVOQqd!`%1_%#A))cg`#`2D=T_WR%VS6rlVfxMvA zN{ywpH0|*0U-gq_GkK;fqA|_L-X`Mdx~zU|D*TF|OjI%*vcIf%(O7{jryA=L;1zFg zP6AOJ?i+ANTYaloP+$;kaP$!xm4c~KS2pFS!y?sV|D_pc{h&3+t} zh5HJ0MW0PaVfYc|0XIw0md*2j%(DLn_Xa)^m?0pW2ck3pu6vmZ{cGuBemVi8`6xbk z>F-?8Om}jRLpN`78~(LcaK&~LJBR(PsflL$I=mZJi$Ymei(Z=6yHLQz8@ZB z{_X3W(L{!5m-E>n7W<4v81aN7_*RNQ|1F&ayG)VtV3pG#>8YoQaNwgdj^cgS7~CJK z(JJ?X4k}I0FJ`psRI6M$3^S?F?-^3h2APMAto7QR@iZ5wmU|hQ)5Ns?ly-0;zEZrm zOpygF4vj`GKaE3tcPxNg%iU+q9=P@WK-@Y0ujv);YXxWs-KhyB->?~Ag45PNOc(Ri*R6cEv(?yKPN_gL8HjmLbAn!4(okM_ zLX!rKli`L0q**Ou`jan$vW5MHX~zshFMp4GYkZfsbb0=m=0zyBEv>NT{HQ~GZDWpKUz;`7H8ju-!#D+;`K z7gkKM=#whA3Jy=d zk+gqJU0tzIziTf*pt+tsdd~=Wz7e2UW-hHRzqK%*^~kN2XVOE(55mtpWF;gO1p0x1 zZ8j=}&a32O^ffF^dR=&Runq#>b1&yuyFdByy~RPgE66>M%#lW4;+8ry+F z)KS34^*y=~fSA)XVe3Voy%eurfD=gqn=v%H!HH9*`RZFc6$X;#NFT{jgYi+a-I-ja zMsj}byP}Szpc}r{IJeSdG%5qall;7ru#6p_0;0{%Iw;0_>#bK}^Vp{%n!6hC8_5&tiW1uPXcqekA= z=9EQVmT6R~*Tl*3C$>B@W^}I>V8*J&#$6q?re^ZYO{Nf*4X5-XhYE3_2xpLo0G?;c z^(_|D)l8qCA@IiPyBdnT5)xaR@}G5WKaFTj4KWoi-fB(8x+1H{tlqGp>XJmAhXlMz z4jX{Vfw7-IWH8yOUNooZ4qiCXw!dJZiZ7{n!Do7*!cq0^?)OYSH)QA2{SB1^LlBa3 zl-ZwABW`A- z!i=&|1BGVX6ll!eUJDp>hbgxDL3EFId))V3u;kvG zMof(xf+Qvekp?C7nZdvou+{!MNz;ZQu`>YR^%m5#;tCbmgC{N_l8VIQfhuQ<30N z{d@;1GF@g0ZHGN)M_pSYjo$_p;%Tk;R(0|atFYX_+igqwTlgN%%)G=1&}#8zTOZF2 z52x-M^D634>>E&23QjC30>0m+U*FxkzxDaI-}6Vt8Lb%dvVa*`wk7dbRJGx(74B{+ zVi8P3xr%&@bPk!Sx10YT=H5D{uC4p~t>C_Kr$BKl?oixi7k78J;!vQtmEvy2-QBf7 zad$1nedBN!=bY!{dEflr3vdLOg#vJk)-$^1cR-(2UTHCLR>0*9Qghz~r z6_#vpyXnhgY-~bWJ7SuZa`^$Z6Rqw5oCFcVav8L%8&#s07=0e@OP$A0FZQaJ0hklm zY-CrIb|dxvX|@$J<#s#@v8s75e!Nw78|nLHTXPYUxyQ9@)yzac9U;6z9Gm%1$$lq~ z)rzOi9j5Dk9&!0?akIw#EgLjp&-RQ3OLlN2r2~R`r+sv~;KF^c(_4Cz^1+@6D?cuk z*{{yv-H3BxF6cl*2{*rK z7<-=-3npAaFD_LtA8f4i(rK5R_IGcGENn}=ny$h>I4ncSrf}iK=C{5nP+y9clYkLe zsKh0gko&_q283IWHN#9ci#OfRCm$4uO^^r1K(lBwD< z<&syOCthK*_@<*uGaFA{l!Gl#x-p+%;Az;$ScAQj6Px#`j!bvkNoYHEa{5AAUr0uY z-%E7&N*v6vU%NSMxi2iQgLrtoBe(y#Hw;Cyq|7j%5nRx$>b#gTU#diU{dy1MU}?M@ zOs+t0SFLAstmLaCfhdePcu?y6l(tJ{_Z{ib>!65kZjLSzx2? zYQ!k)a*ogZ)_=U^>DY-ecEHjwmMY82aoy5)E?o-F`Q_^pm(Y@fL;Z<#wFBHUJ$^HHM z?+l9`gl7o-ej}7i=pR?ST<`Y|=o~)01Hs$Wf3EtYs0Hr=>LnHS7nH6G9A z&Zauu`x>##whx%H$)bS#%sFt#Jx)Q?hJD&{*DFPo>%Wg_h@){zsr4}V+TB06 zbn}4+i#%N-q%$dXWhnTP|JtJ0~u!_>xt!#_IxyAj}nXuum?0MXz zuR8E}jUbTU!YHUwaf-%A$`djhK~rxhzBnpVve-iV_XD$I@2)4(j*?w z&iOCTC(}w=rU^%dMyYF%s$gfD%-5%z=p`w**`)xt_k@@&2}t5(ib$79$!tZM(lSZdF_ydKjtt9M9cR_F7w1BLjSrFTP-N|^~8;IZ+fOguc4he41&ps&Gb7y4Z`qs zV=wH)ptjfG#+bR%WwgQJumQdkyMkCWzq z+0w4$df<=*0s0H)Q{w`!Kn=&Tq4a<`?lo)T(=H|Xc4?V*j@l0yvGvV=#{`pkyDO~8 z3?Gv{kM}LY2;6YGaP(=L9doPH?#<@5#T59<5u?zJP};!&I%_5S`!^(aYvSMn(2mKT zy4wUn#eKoLq6c>|?CD47mrzK7;|R#mhB@@)uh*0~@c-UF7M|`xcC#6wmQCY}1R8PQ zzib>>a0AxVQwQSHW0>GjZ{N5%N6))&6hFC7c2fIxw3a!;NStpud~W?0L8D!+#QcY9 zL|F4jBmsq{B_05Z9C9O-SHG%Zf?ofmL*;A(J->qCNpJM12e&^wd5rzl?j_x^l#$lk26#>zHJpHSn#@R*~%@uH?|FzNXdi za)yj!Zzr0#V^{vO5%0s=6!`ozJu8*-YYJ#VV$pC5U6Ji7nO(lz^@x+yr`C# zr$2M6KLRh^P0$6ej+^khBj0p6D!i+pD&AGr)5RV8H}rB)gd&OcA_0g5FN!E;WvY`J zFs!81a3oY}i`etino(HgoK>tV#Lva+Al$GM)_qJ?;(pb%Yxv%cL-A=9vn{0)QPEnB zrLt@;#FNIpcXd5qiVxi)AhI9J%NT=#w7vGQqPJhSR@^uwLp}-Q&1|+pI(>QeBLW&O ztYu)!pX59d&nGcHuySeDW+1e?*6F?S8MF;h?Z5VulJ=^wVeG`oV1~1+L0Psc8}0tQ zYyQ6EYEU|)D-r&4rf|Suq5UD|Zh#A|*I7Cod|&?`^gkqMLxLz%tL0kAWq{1mBaq-( z!_Fj;-hALYB8fo#R1)t|JDsrk&Gkdnj=DGI+WNZ@1WB>nvV};Z9sBc|l~;SzogBOG zv}tP|Gt_w;elcMVTcs3ZEo#CKXv0w7Da^%W4)Cd9F*=)b;uj%Ow@O>M;At9wSWH}LoS7q@ESGPSLX!9R@H-WcA3gs zu|_IREz<7o_iwYLJkB{7wauA#zHuwBL~KYoZm2pt^0DyPDY(2?k%;3rH`g?yuhZ^l zIiUu^HM3OaHhCu&>`UQ-bHU3h8tRpfcH6$hH6X^p38erBZu+WDJ!$6?CglZrs((OP zEmq1$!3!b$S<6Hx)j43>uu(E%u@<%@M`S+kN^`$9ReMrA=mR&k`bI|yFA7S`Ff|0^ zjbJ%pS=pIW+}&^tvM<>)(yfm(IQpe7T5N5TP1|G2sV931I?FZB74u)%ydfDX6qf%? z_*)yLZ}}Z49JbdeG$d8xmXb7ECHy?im_D4b@;B)ZC6&z_Ju*WW`;Hx8nV*{siKGXd zo?pG&F)13;Yla{5Y^QGYU9tM%{n?UF7j-y5NGtNlmeaE#Qv$br$l7nzbg{rief-n6 zFI8&(mG7v9q#8Pz&@WnJ#XO6?q2sK0Km5Al+Bk?VDzB2}Svam~?XIFOpZ8E&7w|~S z_ck|abBsMvP-xs_>eIVz{}TK?8&NIb&1uPjK@P)aWtSkaZ4F8C+wCEj302d?%9uWL6eg<)n*0nH;3aiakchO zGt{U@=bVMD*ur>{vTCqqKP5(zhbV!l+8Yy5Jq`EYOYY}=#TYl$KHkTB(F_GesVPuFSDs)Y5d z-i*-ELz#(GpqON;9iu$E3#g7h61}|_^1#e*o1G^b{;4=qR(M_>(|ay;{w<6rFk|v^ zzP_QkV4!F(UNpFJ5biLtqQ2i*SjQweiNN0KOMaUi_FMeoFb6*BHzxy_+0}X2!EI#r zbthR27K`_NJTs}cO-*qZkr zi4diaWNgF;Uy_??#9s2h{{uJ=+zdoRga?y_3gvdHe4&6C-i_d{SFih;+0gQRq3@I~ zV#T_mwIoPFQZ0aqzvs?Euu3|4Y88Kt6NhT!Z3kN%0ln+uWJ)gf#^%jQR7rJxSsq^E zgNQvx!&{zMDX9|X;hNnpVBxlTjrGXP1)MIGydDC`*4u1nvmf5^pQ0Hjh+U02NZ*qo z3^+D-I6WpqxFOegJ(3^<*b$w$ zDUfZ@xlAgAL6e9wBs}Zz^yk2j_W;w$l=!n15)vLv7|NulOgHy9LxcKIQL{RveSQ7O zQ;t~RTBfUPG$WB3t5t+-LwnL+b0Yb6oS)c%BcQeHJ;u}+?53~|RYdyE%`yejXx%J{ zm6H?RYO`03-qcg29j1Q@06>>+LmkSLqCXBWx`}-?QnTJjPaG012@=;1ky})CgTC3S zD~UN()%CIxHn-$UNW1R4c4X`j@Me$Aht9Z`Vj8GQBA`8s^nLTaudaU_9QOD)?dw_p z2N&1MVc(Rn`d*;S^6;y~&B|4Lx_oT&YuFVLdxtMLO#hW!y`!Pj7Ik^6+lc*clarG| zAeQ`aCw5}ttxwhdN_B{vX`Ux;>s=BA+xxA&C(M>&l+AW&IeakR12bp0<>K(3)R^gD zh-CPeLVYig8vDE0Py0Z=gfTFFNYb##i92tovqlcw5I^==iWNXrs2_UVNknJZXot(O z;>dG`?w(sr#2vtd5O=fO#>8k_QA2IE1lXNU{2~hw7FLu+2F*7Pa~UCQ$X8=PutfF& z_gi4Mz|>aZjAhahvTAJj?J;xXO1{6ZEG~xxR`xJ9f#x=HU;;~NJ6?Fm=X-rd8 zDu(J;HV|CZ0`Ww1S{EgFh@1Gjbn;^nV!$RvlBk9T9=tkcyzefTl+w(e=^Mk$H&eRu zGjtNO!-=#5i&2qrULMA^R&Y-{o4;PCj{F|-qIZlw^Z}LCV`bA!xQ($AFAOnWuK8$A z_$+!@d1bzb{Q{_N&9h>fNgrOoChLzE_D!&oGE*X?_PKU>B*_kTV1>K(I+WLU438BC zNn15L1#IiSEbL2MmOkdV0r1n2d#=?>pxVv!$JSST$XZy@?LCT_OQtO3f=-C}=%Q+l z>a~WrR`~qXa17+Pcv=%4Tmhdaub}#03wy0La~6O!fIy0vyQ9{EX-8WX#Tr6Mr*}awD&>!R`?WkIy{=SAH({wEf6;53BbK-_9TiaR7qlA_Y+Ae4} zdpJu-RG5DCBC0#(o3VC8WRL2ax|`}x?(<)RL(PF@Ik8og)bJ8U=%-D-m_C2baxlc2 z@d>ZOg(Oj@1a?)?1r!R=a1IpbXP$TzCkI zqV~1vxsL)*WbTv4>;6a1V71`F`XQe~dFTs^#Mm1Hnsi zG+R!jPKUN=dbzs!KZgMhK$|MiRfij1F>?Q=eYbEotVv=U+3g+%Q+H?y$Hg0g0Hq-`%E<%Q4M)gs=}HRgBcc1U=tHwFv@N zx{|+9)MNf$zo@iMwaAP#65W&~38!PES%HzTNrW?h-h<*P-3d{3qdq`z>}^akZ|7aWd3C zR8cC@j{$U6MKs-$1no)ry{n<~m}sGP!b&mI^ZdBw9gtyV4Sn-k`RLff*7Q05;%dN~ z$M9MC#7zTskdNeXWW0X3GfRn$_ts))H;H9N;Qu1stYU z-;Lf*M#=B=>-ty)J3947JnFL~^`mz?rB{i}W%-Cdg)4Mz-=jyeR6vXjms z+{Y$ViukvX=jUYghCx9T_Wh@fgPP%pQAT7yIun1e2+Y6NM8( z1#`K>`X@X|ZQ@D@Ov&iwU&{tjA7VqFnzzO zBRDV{T!gG-N@gs^$Me*Pla-A*a&%_`KXYHMGinegts1iAl*zyzrT@Aw>Zr$XkfLdf z)66F%*C?3&?mY22O31N=A=7gjhmvSWOv|LMPz(Oxd|OXA}Z{$$LOEtV&&>ePa+@PoZRr%(j3q`}m$St(Gqsa%xmuQi=X%>V8oso*-4&PI93kqch~PnPndSkp9T=yr58H{51iJh zej>v#Xo~TfH_~C&bQXfi8;YWBO1a2#-m@y`^kNj_ zkR&#dZSb6l;wVXgZZM3^H3k+oXsOtvuljlxsFt)z7sp#@Jq+J72iSc7eU3Y)=#|Rz z1!pP+iOdvdx2&)tqQXgwcfx`*+_PBW{wIyiyUlxufX!r{7i{U1Sfr*|%btO73pIIL z715PrNPD$pur#QpAguP5Azg9BdvZBX!e()l!xjOWDSb+{x&Z*d<5oeoQ?%&r zj)JI!;#0iRZmSzV8cF|;Y$0dN!pwI{3@Dy3J$23ZqwRSNsJzEDHLrY@f$Ngh7}RI5v&BVV{&%n3>^Mfg<^t?oCm?Ws?4HKMY=$t=CP&}_`=kk zKW=TWe{Hsm=gh1HYBSCaJ4e0$E4nvXR7hvh`2fldMpcu&+#v5an%v$?nx$H4jLD6= z>IsVM?+sOAwy`|95`<2Hj4?(p))o+Fk7#15s`SWd$5kM1T56t*P~6Cb4rKm2VS+PX z36NeK{)qUU>59+WG8|WrvVOFQ2eOn_JOHfwAhDvyc0>|MTxTJuE(RF53s$*%Dp&v& z07#$d$KHR75mDJ@3tv4k0qJ$~|0WSoUuX*eR63?2_Wd`x1dt4b0Q3cr3KHZg5J9;Y zx8gsvOFQ19TuS{|siPK8Wx~HNn&Gh^$K@@^Btvw#7@HJW;{KNPD6x?znlK)~fUU(LH8D8CsP*HUiet)|CLDsK)za>}^s%W_; zK65DkLm6GwN*l3lu%A%7VXBe-sD2iB(tlr^|61nF=K3dfi+_oh2==_OcaK4^Qp9rr z4m0F%%)~S)XYBG;AVP{@Tn@#Dq#5teEudBZ7pfEmn+*A-$q&r`R!N+;ms|!-dsBR{ z0!Fp{&TDej{~%!==Pcp#$M@4-hYCZ-4Zecv-0wCM6gFAn3cj8cnAHJr%a4wC|M}LT zExPExAsVFTD)W-cA(;OeqB&woVc5p&W$U~M_-Dck3q-0>*YwtWK3seN57*2KD3GI) zCpUNS4X#MCJ{k0$1jPG={0GAUdKCW&C;y(gzd`u_pMzQdH!-u{O%_V|Js>;*Yban% zWB%*Y{Y|+1O|NC7@>w7d#*i|h_BGY)#{Zu{w+sSiLny)+y~lkuF8A}e{}XBV7l-se zB7A@O5dVhq|BU@A0AJ4o#3~BxzggP9=d`&2fQ|lw#f1JBif;OGCbL4E@a+p>_W>8_ z1AgRx!LHwYzCCI9w&Ob>y`XuyH8rvSb@hZJ$=$_Fh!Jq70T-YY4{utN{9k{ZM4c2o z7*qS}u8B?iQ?c6r2J`^j?@X-rZ^Y{V-B0`XjQM-R{6&5KKOMn=kFuV*6L0}tAO8Yx ziC)jy~Tlp3h~-Pd5>J&c1)Vy}#cWI^XCKr+z+ZvJH`>n?oj8G$ZiS<}frqX@y02 zp{)SZa4v5oArUNDBBZ8<^B10b3mx-V3JV>27!7*ClKFUGCP{LEx#x?s5cF!iI`M4j z-wb!cs9dw~KfjJW>8BgkOXf!B^~JT*aqVxmeWWtNV)Y%}1mEoYyWH-YQR$!jgimU* zW(#UHW`7{TemNQb!F)3a|MNiqVu4Xj7EuW}-jGW~cEWc^oen0yNxY;v#q>?@rldRA zWyA|~iizD=HCow~---ua(XA38pF9)|IjZ?RJom2{opsv*y|6Eo=gU_N#{T;NoUZ`N zlMJDHOWDP3!%|Ku7v!{WoQ9P4HHKV5fAsqV7ZD3QXD`cra~stF-BOvG8Im?@KJ_rg z7}1#8560Zg?|cN*dn|*K|Olj}<4P-yk}a3umJ3 zIQFD0|M5F#|GMFbu}RbRrw8NK`!n^2CqPi?XU{(z`u5L%AB0~{H+!a>x?dL0LnB}} z?_=s#j)6P1Q4^-bXgsU*x%S;=nu-YJ-`ymf*`7_+wyQt|iRBaXrDr_zU) zPrft@JEQI&F<~3F5V6e!m715 zzjHtn2<)Umwm1HP<^(z3Y2PiWbFOpo>;9sbrQ*HGh{p13T^G`l0pT5_|89qFKq*X@N z`T|opSpZDov4+y=liAB~12*k{`Yc6&%ktGtxi}CYEQ$D@IJG3X<-HPY6n7O{5Z$}9 zR0jOVgffC$>+7M?m>c~HmnP$>c89-L^R%x9sz2Z~A^v@1%s0R(`RnqVZ&ZkXmHj+G zM^mp}HrasHV#x%>5ZiDBgSh$jZo9>_VX`W!RT=%bg+~P^HQmVg%7W_eqMCfpgZLvC z@g;#|Wd0#EUl(zcD)1ciRXQL0I6*xAO3XrG&5qHd_4wk{&=FfDBZmmx`Qhk5n7CQx z%nEI|)U?!LP0?<*z+||$a>>y>Wl0%UX3N1+#df>J{F7mRu^UdC}T)$&i`9!tOb zL1=d1p@HLxA8X!leD`wWO;pzw=TTqX_s6OhHuHNU$lcXwMPS zISl$sQ^MPqG3kk{C82zZBJ?ZMiyAN+7%-ZP-aM%~yE!d68@k(L6*pMo+=@>eTb%m| zzIF6S(?FCk8ViLVa{Rffgi(3TwJGxOC8~bTBu;ewh^=zm9WX^{n*xfN5abYQfh#W5$7Z_V@ z9;)_Kv-NFfl-Lxt_MrDlrO;=kc;$J$4PVIiDWfPvlsut?XyqjWrUc`5#l5@tCTAY{>~Id zh%r$2LkbFF=$^^*vKtjx0qD}q_i$k^`X}Vrl16y_YM9GuKjM!}dY47Pg*|eFgi1Iz zWt(`@hQssLO0J;k(kcV>YxW}^T$`n(rI#J;p!^rlHJJthjBpRR8G`m?J~dOE3qq>3 zH|S_`f(wTm@7OTed&P(9APqt{7wxCEs%+BKTVPJhaYPcn_Q<;n=tvH1u^rWUusX{@ z-x&NdFJ0IT(lj~&D><^ofXK{Sj-p(t93@PEg0X>Z6-@PWxATdV z#nQ)IvP33}PSKigF@##ZA%(&R?>b*IeR$II2@EZ17k8AykrgL$hGAV)Vl?dXhi*)o zM5!5^$~yU&G6ycz;~~Hpi0D2w=wWuAe_y)fO>9E8Rw_fl?D;$Ol<5FnDAb$@1eKz~ z-uN)#JhFUFj==k>W>nLaLfwX`_sW}O{R-YFt~CfbH6-w$L&V1flqR6#r}zBZB!W-? zy(d_+U;zJo6HPXy3fh33@?(1N$=q0f$FnJ0eVY7NLX13l*Z$T$qq9w!o)5xaC-DT{ zJ;57+&z$%K9TyTdHb|?6 zwcExHc;yyOmyiV^JgPUhjT&jmG^#g>t|1G(AfRtK@Zq#%zTJ{BKLXE2PS6qQcdIL* zdzt05*`2}eqy{dp^kKL*rw2A94OuL=D<|R;!Qk1nR6rK%+qKb*C{iXQ&=K>ehvUfp zA9Hh?_6)}xr2N;+4%*Fcd zH_JI7*|1OS-0BG#Xl__LKVrwMP40v6j}ZauwwL*z^XsvwQ_B8VQp5pG>_&U8dK!*f_l39*(66~E3=56 z2+nKr4|QlWSUZEVA>!uh2q`0ElC4i5Rr>o^q*yCLIZ`T!yKRV-)^iq^;qNAl5tX;e z*IgzCD)sxV<{e03ux3=K2c?A?eUXN=mL{~-0;`7{w<)y;TBg+W*YeDjr@3tD-F&pt-YQZN|*26R`bw*aN)?!DSb1;E_TXaOLX!3Q1qiFh<0cgyi_V|W`ZlA zUXM7T+D_dhL1A&JNuGHUiYOfE+6yp1Z*%|9CK^vk2Gd~)K%oSV&|=f__w^~Rb~JNzgc z&&3o;3*}XVG`#ls1}w&2NJ}T=Aca?apcN1PEDn;LU1^VMSVKF4tZKO(Jd(t$ya)2v zE(ItrUZ~P2a6T@Oc&gqRg<0rx|SS#(SR8#GtX%=54a$7%Z zpCX|v7qiizT<*{fj+s*1l68)s*In~IezBD(fWr>-Rdj@?KCQUB@yWv~bpQM!#f8BF z4_hIpoG_Loh!C7cMSCEBqc!L4Y@cSh$fU`NZ`M;foVVxu@cTWzr;L0w;05s!D#Th; zu;XUi40T=G(RWkf2!lM1l}defwTv4M;s+vO@!#h+c|~#7dxdW49rgMz9Bh1_AcOQy zl1m<9W-hJY@9-uuZ^^m+4l!3KO}wX#)NhkV%!QY1fq+!Y=ffIR7tlYubnljksW;cS zexu&SEJG0Zx=;fkc%|NN!JKXK?zQSv5S`*0GThYsiY`|lu_3dXH0_zmsBxpEO5+}I zub57c*6?aiUN20Q>a0ZmB>CQmnL5`q;nnrcyubYp&LWUUSb~=ENd%IZs zBaabwR{{%GBwS;hl(t->w*f15`vvoN0+Tnfg`}e2a4nJ1byy9m|9o?F!Re3I2nesj z8uDr|onWK{g94LF@PP9g^5y}vp8y92! zDR0%2+2yC_=^$FN*7WJUCC#iYZzRu>hnVB)9AlZe7FJHQP45tDG#N)X-U*XVXgH0_ zrutx$ljmF@FpKV*?u)X3MS)T99kE;t*59h0nfI>gPCzR}xP`$eU>KPA=D1U1`)a`R z>Nhzx3-!-z+V)URN~Qs|T59X4H>{po(Z^BIFOvUfQTXxu%aW0hEGfX*5@VSHL1lFL z23Hw1ZT_NVqi}L2WGG&hxU31*-KaRNF`p*kYWl1_!HF;)vBbZ`p4@!zED0}1!Ty9* zc$akzr&rC~^N!5$>FHQpRXzgsgvg@dg#kkDMX3l?RDyl}?)Ne3x&9MbHP8l-cg!M$ zG;a~!%5O#{S8PNQ1>3JMf!G}fle~mdmYEz%ceaK@%>+CB8w7>5>l)Ypv}9qJ%m?&7 z9xssD;qfu`&o^}R*({h-g0^Xo$Vj*ooidBTXkLUerepo7ODG$f`fn_GMb~NdPEBRZ zc6ZL;Q)9jt3mKz&FK9|>K3YpzS z7jtM@)d@LG2J`wqmGHE5!InjqbFD1$Zp;VPA)$fTf z0Lismcs>RILI5WS&G}^o98|jXy#CRkrN1}W-^H0|)HC<=&8R}w)xWoA@aPcqel~Aw z{ccrg^W3#VOgtQVhBWwt>p2-AB13TV_*=XA08typ_NB@_ zEg$R_Kb(0JP_*mi#@#ANMBqk(M1nTT9(O&VL(y-m*;GtmycB$+urAE>XRBS$9f3oG*}{Ec;>39j_6`p0*^97Eov3m~y}qc;c?bNkbm;nk4}CMarO@%6P2mnjulzS0f5c4>vQ22*KLn{Tg?BIWX2$u0(2%-eNi- z_{XgT?fem8B&q4uLBnxp6e_2|?ec=#{V)Nw&53*Ni;Z#6{>vi*4Yu0Yx{FKXKfx)u%sX{B^c>MCf2*UaK4veB( zj3czUv~{)`njy6LdilEon^lR!ZSHN-*|EWUiRO(J*VWp{L)z|`$YEyJKG(sy5dB{Q zsLk^VWk`jhr*S?;un9~)u;mTXU=?uC-Cngj40i6ss$AC_X46Sb>T}6h(OOhT`X5{*V&+H-zE7Z98z)u~J+0CAotoT(^hlZ1 zVV0hLeg^G+F({?#9Y1xOs9 zTP3kd{2<_lvFdZ5co)XL=Q1={p5e5pmJpxyqn7Zh?3}uR{B#^PiN}#Ee=Ln@(dM*2N@Ha|(jhuc zg{Zf7?dD2$c`7ZN$pX!4Hr6*?mCJ1NOX$aJxCb7$q(9(GtbYL#S-~$|$v`)s?`E4? z)t)^ZP<>xi!Fza%J>~^n!r}FmXsO=l9ui%7)wYww=FK1mMLkVhXdF$bM6-J}y*OgmaMDz7FumTIspm5#vkOoxPtSXs&{LZcU zet9;|IuW{(VoB8JinYGOIWYiJ4yIn7mlTg5=$m6HUkn%z3pZrpx!rRDs{J@{G2W)ZZTv*-!XTFLYFA<=Jol{uxmhPR{ZiL zM_zyD@b+eiUxbhZakmB#d|;u@0+L@ZP2^Dnc8fS$Bfl+@?)wM0JdVjmxzoGPa_2y? z34RB9tpQCkpULF}!mVPf_BbG8sS%v*&LZir&E=fB_AM|zm>msp`5dD&ragg3=u?A2 zFI>r6CFPrQgoduhDld;JVzlXYUtxj2WkU-MG#H*2ZX|J-Q7p5n4EeZX1{(}a(%`b% z;6a}3@o`4EH~wUkbGfqPpQ~6T&(#|(e2;`HM-xiWtxX(#6_|j{ zBqY8rNV}stokd1#8|zop%4(|b)~BiFuaB71_&s0COSE?{;>A`S({UU3j*i%>&K<3 zIo+T=95-B4nvK1-UTei9A&d@?hQj436NewlvJtuoZTR4`BOsa>`sL?z;PN+_`Sx>{ z2x1N-k)X(doXE@`!7@TiP@x7r?GLV#o}p`$%>+2~9l|WlSm?ze+(Vr!9?CIwnCL@! zP;F@E&q4_sQ|hQA4~&Wk;y?qDAcNkoV)L#Xy6_3rwq6k`bR6Wh3g7-z+ksRMj~}_} zy+oU6&v*p1Z)wF*Nf`Ip5o+cRzdE^rlzF&=iy!;UUe90dYZ5kVyc6zKb@ORP59ja- zpXRvF9l;;eP%0ryKb;*>bD)-t3Y#Q-x-?U-U3Yqag@E2uY0+otb(n^nlnU~)V|Owi63JY9@}yZvyysXqLUd2iX2-s9S+_xj~Wo(m=OCn+%T3uIAE*m8Xh z_72acBPo2UwZrxigq+9+3V}IAZO9Y5uKEznDz8HG3Wo~At)~)6COZtjY8PqzNU-*x zwD9S~KKK0i$(a`c#;jN1yuUM{)&)$x7YR&!A5<)L%kiv9sizBvKug?LlvvQjfU42{ z*NNF%t6-GAlc4snqhK9}qx(p=$4K%)i)rd3(lL|Vi7zSJPU@%omTB$DOrI5N!O<7d zFYyDuJ4-(Qy-`4$peg@sj?c`*jq@I11Of9WceBOQ>|AE|Ssuc(VYFKb!?{JztGV7Y z-AC@t;YHBxBW>w|m%95|rI^4k^~5ly*|s2)OkH7z5^(MFm>?6NuJVlv{@>LEBv%Eh zm-AG!tC}(UC@83DXt3f!p4GDQs}Xjv@(OJZl;6 zG}S^snJlqPbA*2!q<(`Oqe^aWRV?IgLbS*uww^5;L-vL(9Y2yiKBtuh^hbS)#xGV1 ziq!_WkQ&Q{hEYhv1UZFwdg!U1QzbX26@h_P%OfT_zXU^$-GsWr;)^tcpw~bJ0n!|PZmhe5RcIS$QLE_67XF!D36lFmwpJ}z91r|?cc;?79tPYo zw0~S*wWFlOxY%B_a@Qn7w>Sk=_PwJ{M_P=Rt*$7}k!MM(Y-iAjddLE_gDciqw)bhR zsH3^=^^Qs3HD5*`1xttOw3>2Oak&_c+HrwuiMWmfNSf{-8~wI+R!x1l$*DXpx4!&! zor(!{!cu7S>Vlw#ycq#)_>dyiqAvNaS6$glNiak8@0=CuB#9D4XnSfQY#+cAmd+R} zY`X562$wtm4gW)o328!issE2kUY6YBh-#55mBTmJDk79ZHlyS#0ymOC0c0 z#2qkVKf>A$uaT8*U%}1h99$oR6A>hLsdW^MpBN`X3-LG*)4Yekc%KY7ns{)VnV-B8 zh6)?vSP@F~Zc=5MTsj~dnphgq<(`y`T0KsUmft47IMK)#&h%K(fwjU9Sk^NUJc&(& z3o_0!wL{H|B11cf&m56~%7(C=_gOg-Slw1fwCJJa*UGJVe>&e|Ea5HF{ZZE-Ejkk#)$3 z^N5`%Ni>r3z?o|Q5{|8 zUxg}a>c@;k>-}`&JUg~t%HDjo86kixrQU(`^ppg{)Am|CKnQ@@$HO~d&eZN@($)AY zuUmXR`Nq6V?Z{u@E2l&EdoD7jwj1!Y78Nsl6ARxW>DGK<=jK`d z$llp*sZNX8eW2Y*mhI;iN;^Cyh=lobNaWLZiRBkG3-P7+gVq&n!`oKgl7SD-aB1pA z((y$2Jf;(I&6K~g(BSiHOTc9!ym|0(&bcUih9LgVT#Tnl5b_WSgLgW3B*t^A1_g%6 z)riXx*|8BM1a4|7)kKyB?rSOAW_Y4?AO0d|gP1ddoum>E*XoF*CR{U~%}VPRr|nuG zz|v-p69D(V>^20lNA>5R>6uKcwm`cRkdSlOt6!{t=3g3CZD(i$Pb*pA z@AwqA)Q*R8G{@S$8tnWu^C_Y*6_BI(DdCiO)Hsx-sZF@!kzQCMUmq%IhYS(@ND~Pm zzAtF2Y2~$XR^}**dptOH)tDMKT4-3Km|GZ* z^A<@j9D92m4ovMW^ouj>Zo4?WXD=FrO5k^~%ScUS;L9rx!vu&rBnkxLa!-`YlvSjV1b2-S-Bsv}uGMJkREo?=c#87gKK7nUw14P;Pht6YS5~4=Z-YBy< zcW2QC9c++uInqFJ=OHV)a*%UU;7c{dD~5JT!1xhenG9mv#3sZChnZGIiU-m*p&Dwa z+A>?F0_i7nUUAEX*?ir5Jz7XM_YCyGs@GdJLz&)ldM(e;cZ%>K%I1ZPBDShLldRQX z)j7&HhHu$68>eSxvh(ubO>Q*?%gz1jDKU1Vyn-=^tEfw@zevOMLm(|Un@NM~^&IT4 z3Va?=Br2e@vUJO!l6BIF%q=X%wLB5`t%?!8#hDL;F0npNH1v2&r7C zG*kB#btn?lRC9%DE06|{b_&IGBd;ROj}&RT8cGw3>%dZT+FF4*Iq1{jPEu5(3@#Fg zmL>u!?B>U4x32ZMRaGDxKs9y^Sw$=Syh()6DpEC)V*&kUE81B{M3oWecRx!szoNDW! z8OqAcZOTPd^8RoZ@x))^tMI1a6ZE=gW19>u64eGdKkcs>x7)3$Q}wmi2{C;Bc9 zQN7_##LcA0*k(NKB={P~=Btt;20gTZo97Ys;q&pk_JtY(f;AtE76qtmT`Rx(JUCs6 zYopw^lbv1b%yk;-Ic^ zf6-`?O2ry>9a>E9lN<(Hu`B2s*j8?g=LGi6FX1?c}d|wYOSOxz%%Y<2EO6 zz4l0COQ|MoM?h0Bfj2QT?fI#H5a$JDCg<8+B!>!36%=^&*!}_% zl-NS&)oq(yuLK*=46On7vA+h=?+u9M&3B}^IU4YnJ0bKgPTc%vRh8iPP^lGP-B|rpG!?lvHSH!WX>B{_ntW>gxkoY@jr4OYB9+M zRkm?da<=UzIp1}S;f+3pQjbLU_JwnT)u&!7c~Wfp^KI-O2c+uSo+8MJ8whdO>NbB3 zdEmiCw!{=~SwDq0`=M6f{li8q>{^T~I4@Vq>g%dNb>_=SE&8v6Ii(Dr-O@LjgdoA)-JK8!?oJ3A+}&kxm*5iI zLU4Dt!5xBYa3=&C7<7<9zImSKob$f*Ro!#%KevjaHhb7>dUyBg?$ztJy5acR&V0e8QW%0w=66FA=Gddf_Uhfn=;rKCZV;j*KbS zW+sTg*M&nZ2eR%Rir3uUfa|tSRrb{T_FiLa zSj(v^{FkVd1Pgvf`|8YkL4&YiRhSN|V)wO9?bDLS(M;M|@DK`t>GTcxY4aVM*M6lj zkIjtQ(wh^y3i5-N+Fk~wS!?@=zNMHF)BUM&#(J`x)!!#xz86ryv^`F)l-TA0-)%&e zEG*@T#ajcUY%4@XAS%!A00%I1(ea*u(c65k<_EC5f5y7m~IhI_INARLHg zLiDR_9DQVeyymC9wPZjQ!;}$E^`GcKY zHF#G$s>f`Oe$g(?x5XRrj(;JAMAJ)$U{DYHgxirKn=Qj&mDwIx_j39IQ!}h1@H>L| zSLPa?Vzo;J)onx$wq1OT#J@wMyT5A**{aj0$ZYjqaA{#CuOVfRT4&PB!*z*=U90fw zyP?a(E}|MJ;&-y=N*jCNF{AW550B!&Yg9AFxQ}=rh^34ZedYdz~Ulxc{Mlj`?i;?U83LY_263A;GrSDE@-2dNIqa+DTh= z79%G*GSoZWS}k9VB5FUbBIrl5iaY$#sM2eL&w(Twzy~Y?w}rFhZNur7@az_A!d%z^Zxo1%dOdGm}GC#&=4zbbeyMq@wIb=7d;APyZkXgS7I zp^g1yFBA`XOqlm_ofYbAyC(q-;TL>Cu=-WMd@)7sclza3bsuVocx;lnDCv_eg$MW^ zm7?lZnDL)8~vM)bk28xQ9V8)0~$?2X+0tn&L--IU2@i(RzeDp z$k)0ofx~YIc49Pe2JS>z9yOrm7oTJ#nJ={)8-{k8JI4;QEi!m61wsJ8i`5;d(ZI`h z78N8y5%%!ovtPI6$L^a6yuMOtV+n^bv?`;P*GpfHjT@H7x;P5_%m^;2y8su*iYXq) zD(OT~EC)4I)#7Ldu0+ALIl)$@L<bpW! z6G~!oK@^X0ZvcD!-oS{G0)r`&%D3?X+-bBs$89HaY)%sX9HfPRxW zEBknI?cT3PIDkXyYb4Ak z*69-^;9+vmF%Qlsnr!DjHp1dlOG5VzZ`+}O7W|>z>EKwa+q)6o}8Z^rSD|usDwu`v^LCCRDDP`a}3YBjxch!%~J^I zwue7*6s1<0%)LCi{soWn#{AD}cTmwc*6^+HBoco!3d`my%JiTRE*;ePpduE4%ptBg zjMv%b!qVw#Zfqt|iG;m$i;BGjJJHzWQCxFcz9gM+hyIx4y3=Gwv?+)m&Vxle+O}{r zmQ`SLr~5Wcux6YfS0@ioyzuh=#~o{kl#X)sjfL$;9jrU&5xwt?#(3R;>EL=1EQ+2E z%&j~8e##$JR73C-HHJ|fwNjL|jEFTx0YS08`ZKh_gWTy|+TG8Tj=x3^=kRIS?{WKv z48{(k7sUKJp4cWbdq`y^#%2wP;|!?fgs}AI801i8HB3U0qL=pE{JI*dxqIDZXi!&` zevbgnz#R&lX7`9dLX9_tI&bX-u)cfX>d1!QEC+^+2FG#FiukYDP3i*oZB)pd(ZSVz zh$Edzs@mU!lXI*3YUXzqDV;ZTVcl8qM#gD_C2(w$YWFrQNSyaHpI(JXscvav(YEJA zBqJ^RIc|p5ma*pjYLk681GkpW-JN=M^jC^s} zPD5HFBBMm*``j;)a{i+NEw*f;9nmwl66k%x!*0|O0jgru@A80q7H{2|L;%u#1YLov zH5Bqy7;&R{M;f+qO8f;fw&yz7?a+BlfbV*PEYa=Mno-|nAYiKpC*t5M47ScB2%0>R6 zxgU>73oM6w7t@%PXul)>!v3y1_He1OlX@t?2I1Kwj@?roz#KG$b%(0R% z!cur~k{}HfNsttibY6~Au%!REW)>F3BI`^>Oe3;F-6*X#aP@}|R>whg$kT?9x~0)j zPO9Jz@i?Nk*rGd`U$Z#_DY=Fy5v|YQHPN;G3VKh9%X+iGw`M470u`ym1VX6dq;*+z zSRegGp2{3$A_g+?vFaCt@$lL#OMQ*>kyW@j#_Dh3#}K@kHhSGNHzT$xU2oLHn@8Pu zSt*OgUF{qdE3dewWZ_s^j%f_FtH^m^2rptDx$EgNaRoD+j<7FiOM4{sYB$VdjS>LU z8|Lqb1n&aHCGlBPmv(~`87o*^0X|E%j4K-iqBU^M78YeSIR50;lff$`Vas-ID36C= z50S&O^1jnX#QKtHsFT^2I~~co@U6GQCPEL$R;WoRT$*HB%*&I_=Kbmu8~VzYG(QEc z;|bZqmAEPIr^3!U*C7wD=uOI1I=?0V`NfsEx!)ZCPZwEk(booMG(U8Y6EOXV2>i|{ zdl(VFosdjLY!zA+M7$j*<%SCzS9?blU zyTBWy5Y}%~%tF9F2(Y?}gS7Cy!($}n`}PK)3h4p9mv;C*2EU`MD(7js|>*#gQM^3%~k_Rn3lAa9nCSx+RAt-b?@3ckGLry zc3PiEs~>FIp(Dz|suC#Rr;3806zM6Zc;$EB>S$)#2YibE9 zk78pt3JenCAhTa@r+BaeZ5x+|DaN4p3sB-@J4m1Z5{}M}SO83IzP8jwtTUd(*A^{9 zNLsJ=xv>RGMIj2SviG|$g=%sig!Wzkd`-F}5ZhRawhiD%4clj$F`$W;oSN-_(mN^0 zZ&UNjM#I+AhTG85ibE8^pLx#*hvLeWCFDhDAM*8rNLz<+ z?~aO2`>wRGk&`0F2U>4Yi#*j9k=MiuhcBCEnprMNynK+0Weh(Ahdjf>6A_gv%)W^< z#FoxA^PweZ$i|;k81RPN{`}Y2792E7Pw*ZU*zx}8>Y1!o$QX{9qAD5u;$8h!Rt@G% z*PV@@co1uHR$W#_slrEiBgkeJrGOiuS#b zf}6r(G=oVCFTZ)Bmd#t$*_rS-h-M4BTRzVoIXhn)^`SWF8+Pr11961o`_W;6RTYD* zxZW7@^ERwVUr$NE)uI8cA7^J48d)M}7|i|7bJKKiXXIU?vpYG#%QLE^N=CKeTZUMe1^Y=jgZz z%+(BTPomZD+D59aY;^`3zGwI4-|pWB;4XMj2`-~Sa(EMGjaD1a-CJuI(GBrSO?L1? zJ3j>kf3^J0uoWIwjG=~dGBcYHBe>+h<9|w5~D1btDN01h>_)G-=5IX3#GkU zeT6%XF%zt2aA{V8Vn&1$5sduDQG4DFADP%KXmDuSdNw zX$4$dDoW8=P}9(n9o?tetIS1}M3aWz8}$`eevSM*B_*NH{oxbIjAm*`WF(S#Ixljp zotbyboez${a!|Q|C{`aY``&Ib3oth!w!MUyR#r&D-lGlhk~Zu@D~xMoH9l+w>kZ1A z_kJJCQU79~cw7tXkr7X0^3>YNN!CnOrtlc|v}e@dZD8aOpNiCM(m!4$xz##0*e;&*D55@JshL z6-D(?yuQu-ur(hR6*IS`B3@ga{k0gGrTy%e4mesQqy2+R#R4I((YKu5^TfeOx?Fh@ zSZ=rtSY$gq1id`Fsu-vS$;Q+A8&-op9xuCw?~F-{zLlk;Vc^0e%78Dct`vLY`&rGf z7?|dZ0%g@z$w-e3stf?);YJ{vB;0{KpJ+i`4h~h)&PoCe(G|1H6H9{6t@usc>Xf{K zB=_)ijANrxhB_aA44&waKs!%ZViMAD7IvyZvI+)TPsUIZQ&U4O1=v|vXVt%iPo%uvx!+6XT0WQx zC|VI~YT=IePj4%$a*z`2F#M7hpVCC?0n7djaC;T~6&|=OpjKOlhG9C|FI0UbFz`JQ02ki+e`eO7S=y!`uiX~ucaRE;}HMP2{x&Z z(7=}^%thFo#BH$HpVpY}E^Xmi%&lOS@R1>}@CuCfcbaT2mQ%*R>A+U|prSUkNCq*i zh`vflObol!ZFvMiYuQI-EoJD(mfZy|L}5NcWm8>lbv!_B^-H+HW>FJCzm;K3Zby2~ zna85M69I)Is+*@f^8ROmwUxYva-!7 zZBvGoU0)a%nPzAvd`v^Ao?qg4W}h;p$Eo!RIE-*8-rjhV`sPtON{`QW{NCu#Ybd;B z?oej%{oD$;tf%L$pKiWo@)1}Y9N%JF_~38?y7F!uxlm(yY`dRu#WJvePwV5SOhB@I zzHgqZvn73O9x}$@dEj=X+w>%I5CATWn8pM{@2{Ua@1T2I<>A}=Dj{DT=?^tD=Ro164MgW>`hyc{gxU{e7CRC>Pm zh}<%(1Z=Sf2tr9$R|RMK$hU5tC6-;TpzaOemfMedp$BFmHWyYy%D@q;?HI$54R-v? zN7rNQvysL6?j`xa|M9n?f-ltq1oE8+6};kI!ZrLEW!$-YnkSvoM>IR zSARLot-l?4(C$}-19?0L7~K(fZVf^0`d#a%bJ%FWRyUBXyIbb=XZs$7YyXA=%hro1 zoTpj^KeoU8yo#aZ|Hu&7R0`9!zitbSCdm2z{W&AhUG%?Dhkdji`&{Tn_9VU^H7CO8n>2T5`@1awSvr zRF%=lY4-40d?E1a<}Vx^g#!Ng&Kf)ld?LpY=N3T{goc;)lo29B2ZFs(@&JeLv$72mva*7clCV=!QwQeekdx_^((abQDDu!mk|fAK!!Sz1 zhW+;?>~2Hu68&jg-2uPHHD7Q@@a)P8lc7b9shwF&6b`+--{Wmq(bG>f`G4^`B_HK~ zE@5|9rtK0T`ish$0%ShzKCoU%*tN{l{aUPO?uvf=-qC{xcijn16m9n+Hd`ATvF+^w z3yX^dB_-ki@Fa|Szp1q~#@8?@|C#VFS;J&`GI@J5BDabGmNQtrBEI?3ofZ8AMMq|t ziDCT7(Hnk45~h2blyd-;m<#xANy&A3KSlK~HHf~Ro0*~14z!pWs`5&J|}UC`RSupgHy48?y4kdMl0z`z5a&qvKis6QbaF zPQ*Xl4yHs3ri{!FDH8shq`?^pn8t81+HA3a4g$E8k$O%uYY+N|R`z`{zM`RZ#SF!y z8!t|*Obdg>{$fn{f1VSc%lT_4Bvb3Z!c(HUCa~}JOgx~vlM-}qMkfq5{;$NV zD?-b^lPZETPnV7j+UTQO=~g@HV9TZ{&;1`{oeMTba%e zPjY10jUNG|PubGi<*M#TsI z`b)`SvHxG{^On;sp^4!yo(B`^{$;ul*iOBHz=L8ZR8&;J)2h3+t~M15mx4Cu<>h6a zVSuo_Z}bApO#CCJL&|@T()5?r>P%`n*xAjA@fJCGF2s=CJKON>k52ra5M<#p9=b*+ zeD+_7_O`H@9vFJkYCJGLPO(8kMjkGVlwIz$X#`{zK^18J3!f;;<)E7Y`5ucaO;%l? zHlHe6`hC(FL+pQh&m!hiZ!i9=mB#L*J6@ac|Dwn=?lvza|4r0?FQfjS`1!Xx|F?Q} z3Uz|7{hvy|iv62|#;DSP-+FRrYh{SY{~qVQTP6-6>YrJtd~|k({~$d_%$W3V84*g( zQqb6lcEUvP0R*$rf6HNa|3BXjlS3&gH_Y}9zzpy|Gr^EN3G&Z)k}z{PCieg7QKMML zqeqcWJU6%aPB1XyX{Iq%&rgwOCz~kPe~FB2_XSI>IKsb1_!@fNGC#{CDXQu8`tL7{ z-1*#^63`QlBb=SR`!dQtcbtw&0Am6I@n2~Vm^FukAp#J^GaP2nD6WcmM7XMR zjgds;l1^5!gqzvE;-)dkhb+UFQg3W0_>l0US?v1$q$DFdL`IS9XyadXa|>BQfXv843Xf6L)Dymz=rNu#V>d)lQm3p`# zkdK{h#U1%z-eK9R=&3jIE@JEUlmX}o)EFrp$-RLwa_omeD>pu*0!Cp^EgC9-vf&In z_n(Z3PvR#h|ClMx^)frB;n+^unfQxf0g_vyL9acZO*3xKmMAcl?{!LQ{?)E@6A^Lr zu)mLwb!(#}FA2?0WN&Zp^P8KnjEoFSEiJ90xP*H2|0Rk5W9}yRfo&zYKdTz1KcwMH zvdm1<8>?CB2TBnV!%la7MT!esaLW@DBcr2abtOm(3aAr*=zY`5xLuo9i%P1{ts5f3 zebmEXj~-|dEYbG+0*6vlxw}SU+fUciy%$IH2E|m$^GsI3oik~#0E>tyrYgzjqS`5_ z1|Np0%j>+yTa<=Kt~*+UrJ<3`G?>Ecrg6wN^0A#P<|}Fu2#1C33f|_Ik`?opN5;mP zg9WkQWrSIK_nEr2E*4Z&=-)Z&+Qq1@o+kxYmEsg1nfxpd_?WLbEKsVy0A6WCTx)Ug zP3rQ!MJ8*5`T7fC=3bQ!stU1Ee`#3z#o{cTG|VSv z8nLquDtvzzI7OC5@;BXry#NF;UXU~L4L^s@?+GkIQ3GMQ< zH*|Bce}?H7Izc=a;YaosCmtrJ+e;mW0-34_iILWei?Tzsg}>b$S+TcIp*LlgtaEGw z1hO%lX8MPnLl0uUzSQ7Cr@OLTHn5iY0*nT4MAXpZmJZSU zxM}td6clN_413C-8g@xpyx0OOscWbgwCvCk01FW=Y>0kVlldvf+=`Qn_#s(XSb&!6 z;q+P^@rL~#U!tRsb-F4ScNUe@db<0Nvj4jd z0D1d(G+(X_ltLf-lT(KO(j}UGGihymf2O4B+eyQn?VmW$*liLdrD1L?nSh1AsXl_d zsH5ktcOZY~&VF{kg;VJ=6b~Z<$tXth?snlmAz3fpK=uYeSM%v{WJwW?y&^|SWry-3 z9aI$z0ALC@ve_*~5BhKY97oA+<1sVKYs;Of@Ojmyf%4w<85`2QUnjZr&YR=B?X)<` z3)h(d&%q$Fs|YznkR##u^lX?QkLxzp7G<{x;KzzfW@aYrT*GN_(N<63OEMs8TF_O~ zuT=Vl23ep2>&)WoKqh|uZEJM3p2>EH88VH3z6s$Y2)(48RmkfaQ^$Sxr1q=278jov zyjemeFR_GVqL2;t?xsIMl-V%l#a?`FxWU10&Px|3wZtP5XZAi|UN`*0XjI(s)CV;C zeyBQFYnfAn7?HtUco1#*skNX=roXDxszsE)YAXPBQG~NB@C)L-TSJ`RBQLf1bn#PH z?(OLGvV$n@6C0FqZIjl%)ZpfvORZP+M9?dP-{7?RqgPn{gu+b7LkR+ROy=63hR^G_ zF+*2;)r%{Fw!vg`aQBV}BxB1-z zCE{7&^_8|!=51?hCL;14wLG^)7&T?0vL;hlV+NTYSnm5HT_P*v@^UY`^Z8TB;Gh(# z2{=*V!5<0{Cc3(K0k1YI5JJPk!i1N!Y$_*5K87S~_o$(d^PWby8;f)_!}mql@7Uzt zeGaTFq{4aqd{OJ%uvi%zDF44aABVE7H$xhqhDn?~8@5q#MHT;@nijTDwsbiuhzbW>~3s)q(D-Ii1>HDrni8a_$ z_R+hH-v{HfTeS{;F2bNFCi(9Rgx0`;LDGm+3h3iUr9|3OFLbY&Ti@^Ywd=`e_`p<-r)tW zSX;WkEd=!Jd_3|rE_O#nCbq&%WO?`?z_N#x3qbsMN*38&_GV+-bjKqPednw+-|dn6 zjau&6Vc9flaD6m3s(nr0fFF+^!kVCkP{5=1VbKi%q-&@3O33G04mLOFTI==a$!D7j zDuu~Ff+h}Z9cH3gL9@+P{|o!Ri}J}uRHtgTg1`ND3s76 zemni~-4m;Mt~KzNrDMr z&unw<=*;6wDGsTF6y%p$d9-02Ja|$O7t}Fgdf*Rjrgafxulr0Dc2MA)^78FFg4^4` z>CIiUi;$c-^(2JW0loY|k@W8_7r{Kg8{FyMv`H9sA>wh$N51=Mmg|jUT6<{HvW}kR zd`nP`;&6X1SQEcLnjSlm9OG+MI#UfSYdyjvw3PC@H?q zfRrcJ#-CaMkE#&cr1bz0O%hs8XqS-eX)1iNyF}dgMMT zLRAr&&eMTur_K<*{Q$B8I#75|1@RQ0sFal!*W9iImKOa3o;CYapII&K?1{VjZc7Xn zE-r3aie9xNKGQ+C#+(+O zmbO2;hSz51QL>ea@S~BP6hpd=)U(>Eo zq4VXtV56JtlJ&-N-1`gXV||5I@0g^sl8UQ9{d*W58&Au{ysTNH?WC0#6Hents6 z#ts9-pbk!S(j784Y}tfdMKW(ct)mYb;M@=_*gqzGVR=Ba zV~GvVF2UxWsLekdbqa(lc${$7U%{<`5Z8IAOI_w6z-=6!Ux;7L6;H?CJXqe?HjxPq z8$xtU^q(1#G{ zCjB5 z7_sekBi|47fWyBsP^>=%wQs`W?cC;kU{Y_2}3N&FE4cgks7|xJr=489~P&13Nbe7^mlywm#Pj znc*t4J)KWHVvfj8$BPS#F_-<~!B+*zq)9d^pO*PqO>*wiIymbf0K_(ohLn)rSyO!d z8iJxPyn&Um6?{Bsyqu*LUVa7d1vQjOnn^4d|9(UCeXYH5DwrQNTPRU|Eo8CE_x*B7 zZ%uAQ>pT%i&jV9jIwaF)&HJgnEMzgTMY@N3d^CSUet}#hpO4U`WD1yRFy0a&)70eN z;803paY1$70fJATm#rUq#717#=4F_DV>RhXRZK2-DfsRQGm%g6oHJyF-`A@n%Zf~$ zSBTwO+EWA79?wI3y#F1+1}MLChsBH5&r^1%1K{e4W2teS?Jz5v$?FuJo}PY(WvYvv zU*d(WxsTAC>4WNJceu1?SLI2B{Bho^vqEZth-T44@#3FXxn`h&FW^l0eTf@ z3jfHh?!22q#IAo8z8GFTsdn|B)JY?R}MS-iL^7;qQdK>8s3`Jg>TV@Q4<> za_&4E98o9HSR8GZeHF5_;-Ws_z9Ir?JMQ0kU=w0@5Nqm~h1q6l6DWKG+(v%O6(K7- zuzy7x4cc-@6|!N7_Y;A~5o3m$8!ZfwWCWh zMHkygCBaR()}d%;cHZ1$g&2-wuI}&NiScD|N|QtL+L52~0n2#O)dejK!!|rq@CKC7=zB zM{8NY$?MHXT&|e9sMA)?Hj>5~iX5w*n53Bq`|9e>C+*km9mqS5{?)cFRGgleNk zgI>MJZ!zsEyzj%h!tnq2H)4`h56r%g%-zVkM6de5J~FsB^p{lWNm+)myFREdi25f^ zjj1nJoQ3KbBM|Eio!Z->gOszwW#1c(u?t-{1m)}-q!dB7L(go0bspPH_1$vmT@1yn0+!IeJ!TqXQuibl{fx7lEEAN-mN{xbk;4cmKrCTVi}W!H z{jJHwWby%_yEQ>&F8s$^Eykm32*FuFUOvfb>JiYq0{H|*)u)uPGRiE2!%$R6=6Il| zp5U@}apmhHRZqa^IN3qduly1Zy+eYuP0J_Wcxy7Ihd1AI3WurK;gA*Gcn^gG5~u5Yuq+NTtVUm| zRC>R}kLr(-m~Q>4`|Xgkok{1X zHe}2{za^bm08Bh5dO-k!6=Ttf>DkE2se5%7QBr0G^!o1ceZ0&V&9T(*dN{s#mOcVV z7Gz;1nimJ^_`z_Wew=q^Mzb!Os0)=Lfa@fR-e#Ic6nZVn>d{wuQb=O*?uFzHj4N;_ zKSPV28Z0C>d|R9&DMrhDf`(igIZYn4zH?boEmZYWO(Z(jNQl3NI#LVQ??u9!R;-jJ zoFVB6N*6Uw*-@uM@7tbELO7XQ%xLc9|zWsz7@KF<1*9D0si!Tt*JFE>b zYZ%Yfik*;3gyQ?_7oU54*Vb<4a=tJ5JJa;XUUig%EO4aA-s^s4k<1Sc#MmN_Dg{+w zwDbq2`O?CV!Um6WGOi+>Rp^ofC!Ew~1I8A4NKba_+gg48ed5|aE>BZnf`JyJN~=~Q zs6ttJ6B9X+I=T(x;nm7Qiu2_pEDAmGVGig zQ((bta*~`)BoTd=>PRc-wfDHAViKV^A+7OUI@)r-Y5(4Ai3wJNnU^SIlX<2yZETX) z!;Z1fkkH9}U{n(>vr{T0c~`cE&lHo^F<0QBNqNM0r*CZ;pYKjv{3!A8BQp)0N&P}Z z^MC`A=3)pG4t6Lu{C!!OAZ2|$Jbw+oih%`Nq=(6SJNLJ7@21b>e(yVLPQ1MNVmaBD zb&pbib?uIOshjQ4cJ4eE^rcg7RZAwKH@b^FHy6+E_*EyibV%r$Ed+Qd2y|j9u7lgM zO*d(n^HlI+0>&y0bEM(eQ5mPJnjXD?nPG*X4$3dsWlv& z+oXf5b~pmedPi*~FY+DQ@$J^%AvVz7VODXp6%+)cl_^*ImORa(V*4kqVFLr)-yH*vRGnA09-FM4|(H6qYGM+4Bmsbg?kA!K_ zC{&Lr2V0@xv;6DPY%u!@{e5E6g%PBh!dC@Kf)HE?9046q|wAKCMKrH z(2jyD>W?BkA@w_0MX09lXTBK4YvSRJ?yEpcv{q$hqA8dPm`)KOPd2C}_1%yxexrfy zH0!FF;Sqm+{>ZldSJhoI+fHrKw_uK;#usNBr-*Tkv00tepvDgLezv4|JBnWOX{kH> zkJPhsZx5y-kf(>@OztTE9kggIy(gqZ~QkfMRN-N@ZV~915eK^1>J&5itNxsYlyrf?q(7UKt|4-tZxV;Is3M4e3>4mHF10G9m6*dnFBBkjSQjsumY&4YyY z92u`%!N@?x48*pNdU>a~p&$C{n(`@UP<&)Dj0fiSzd!YTw$_$LzAWxwqR^VS0jMbw zIMx^UgI2=}wE2!Ic8c=pf{$WGGJkjKYX}Rk8i=cNv7sJ=n zvG6GQh1RpZSzN<(C`g_swtZ=1%q*J%pEn=%T`&;)&X; zjUw*+C+9XM$)~yx(1^;dxQh5dnDVQ_Wcbor8)_VOd zZI{o>nuIdSpt`*fWs-$6`0f6*r%4punMEqq5EMIW#p-UNrfipzwfboWj~`NjP7 z@30fQ!^Qp?F?ZtB0*#$@zRz!1cebDnVc&sjXtR%)N0%z!1;5jL29yfRHQfXa?WpXy zM&Ag(8&H`&`xY*x%*u_^9FuhnaA0f{SJMh0oS4eRi+kJ_)B<%?JM&3he_tOV$hW}^ zc5Dg9hxZm;6ImH-@NMetTf;`)g=$G5^qC$>t2Zbg?h@myN8to+375}kdP;nDV4E{w z-|Z~$;{V~Yb5ihbgzqAP{m#L3x`lC>Q(Y|p+va8_|N_&Av<5uIzGLb|I%mZ{gQG&KbzcRq#^T8n-{$0 zlz#89zpu&gL%rXnj;F#$awG1MS%1AcH(1T8??S}nQ3d3Vf+x`S%$z}0G{N=QTHJsR zJ0B=Yc)(Al8d=RetmltMdR030>V&rr8{S0Cv7;(2uHl(Ld>g%Xlq^zoYG=%lujCNl zRZDYPf%uHj`psm3O^*#udt!+aBd}he`)$>GloV2SOyp56T zt&R=&whZ+&?6r!Q6?Iw-RxEVUej`e@SrO?AfBg7adB0s9FOsw@;xav|Wz)bz6&~Kq z+#L3&Z8?~c1=s|hZ;OkcD-<+V6WQE?>YdUf-kZ=#?Bnt%T5OHW;|xZg{AfW+4hA+k zNtFfT2~9IJ27C-*dod&tTyD59)tV!NmEl8?t+?#=o9Mdw4xSXrCN=t54HE2L8hGjy zC|dU%7GV0nGsp6h1dDB2C=3Ouw4j4!b<-Ai_)bH>;%K-R#zX@uZmQ5BW6*v*&UqZ> zB)y#Ld`QldB0xCj`0!gJ@@ol(Ql4Q%hV)DnHN@0Dl^>l1U-cd71mAsx!LX@L1=|Hp z(p{3>r_^%=-#Iw>D9hL-dTBf|aw^-d-qylrAy)nxab`+7Nh7~=T!ClX^X>m^195qS zwnP8j!VT>sn{w)eq%z*mHuDBv;@8zUR#;RMEvLmKN3YYCYkd@Ge@08@*ZYV%5=07w z!4;Qwk~&17`+FkBQOLA;bG4hA{$)*ZBc%^IG1(xCSr3Ss+Ia!;+$2Iv1V&Cv64rFk z$T>1&hr(Bej{G|f$Zp^|#O9I#ISrE5q#Og@=mP(ImqFF*C!W$?ziBt%Fl0skgV@~s zeAv`VjHSVO+y)hd=p2XOrnsZ}^k^s1V031dGt}ra-q;?y`2273u@8@V)uvH{wu_1^ z7-8k7M4|Pq8U&^>XgH~u41P$(0Ikh;Yt{jDWUKRwJJ)ooWGAG&ie)-RveFh<>)+J3 ze{3q_E{2L9C2&fFb+q<_?*b0jwk%#q_=HbS87;Gyfjuu|QD!5ba3PN#hV$L$zvW@h z`FgR5K)EdN6O|Btwxn^9wXd}A=G9uQDJ>MoH(ah3Ffu$Cuc-v zZKG%=24~Ej-);&qc0S1n9w*mGDhx!r$Av{iGG2_R30q0sY)w4;YO;z&2Hkk{B~zfP zxDqgEW`)1k>8QlCJP`?=q7ykNe!ZmMyb^TCcMWnB&L|gQw3Q61GkWbANGrY=GZ5xK zC>nNi&&1|sU4uAnotU+6-bS)BK?Vua5)MzAVggp~VYZ*J& zc$z#a33Khu|v_J(-dPwAblr<9TX_fhAn?+4Ti-Qb^{kvI{a zdw22%Z;P*261l|$1bmJCiqZGb3EnYe!{*TaX)Xm@cn!F*zrC^%jjhW!UO-{n#U7sB z@*J-M&KW;^Wqon+;m964~RSnLhcsza#ygGOsC|B`5k^Qb`?lPIy)0JK2ow>SC2@1%%TG= zeDs5IA^kfeJb0{Mg+4Q&7C0)abLDeux3Wbu4)qL@{&+f<Y%uZ5i5Yyrha$SbQdx zwRuj&etw}~HIlq_4s@lT;R8(%%L_~7*0lB*2U20ducYS}1>|qhCNX=F91Y9~$^$jM z49LdDMiO{{a8@#c577(n9gOeQa6hrRT!Xui&x?q6&YJdMgN4f2FK5|-> z5lQ^=dla6yTe#fzIUU@$sW|D&A3P}^4>dtsr~m3&~ih&NU2dfy_X$o0K!%y`BE}P(WhKhwB&% zYn5IEDz1EU(8Ze1_<`NuTBfSw9Zyx-fTe*Ttb@+3M6V>b2haBLQI~eT8`C0qG1LyW zoj;CaQpg%#te|C@8O`swe?f7C{@c*AKdP%>?KZ3Jt0}~HMOE*W(f&q%1{62$lY4vPbCNT4QA;ON+xA{R9v!%$j86V$$P!pk%@mAUo2iTNUBY(DI|B zKGc7Th4(DH+li2Q<-my48>{qN+ciikC5BvGcz0G4H{2Ed0Fc|Yw92Op+R8)9{sN_J zwIoYX+7iP9!+VtUo^NB7<*N6m#a7n2#8aJJ@lJ?Dbn*q3Q7i|gf?Ss?En;a+WaUui zHmd9FhFY~7l}Xyi73(~tzLU9X5$G)|==X3`Y-yiSy$Vf%8E9JN(&Thc1wtNNn%?egvYP>LVz8;bM!>;myU2eE-p(3Gp6>D4{?_SJUc!4XGXr^#27P|(MA z)$?s3&B-SOhV_0`Og!{8yiJLt%(x$Kmx)OGh#}vbJ5m8GHBt!+Oz4JnUr=F-@Y#pm ztaA`#aD1;SF*DBT&a>U^BZO2q0?BYX8ywjQj-FJ&7k9kEvOdWkF8A*aZgPsM8)>(& zt9OTb*l*N+Q@`nwGYvE0A7;Wwv2Xzvfzf(Ip5-_fv&+RChZ;}3tt5#_ zwK{rdgy^wA@bl!+b!u6VNEp}elYU@aIZ%w zWK_j#XZ8={`08v~y=$R(KP0?3>coLMR4(!qmNG~0=B~N7IXsSI9A&(>p_DRm<m@hfB)Vr_^50n*Y z`mo|%NP9blmvNS*DZ8tFoVc$5l; zcK=-t8hm@^crnj29qgc+_1{R$?%J<~;=7G*4HQ;O-|?&3RoH&|u!Gy`ULbySO7Pry zYHH=LIX6yY8Oxo-J#*tbTNu%16FGlYo6MNrVs!nlb=;qZgd(ajVsFZ96YE6W z7OA93@3nutxYn;s&mPf|M8{qsjMs<}WjoT`)%qp8_)7x&No9vW;U5Eq3 zZ@|V_=`@(^+7xZWG%01TPKta&JiEF)C6Et_=q!AFgQl^4z-sGMA>%Oqg>$&aY1T?L z)Y7>JSXzzDG^;8%Rw2d$HO!>T8uX$(p9+tNh?r5`BjaN~zTby6E!sXg8Q;tay&dUJ zP6FXVR%EFK_z4tuEl#W*q!g>Qn>>Ey7gbH*F&IvxD z^Qi%xN1ePu9zzQ0URyh!g}NF1f{(N~@weoMJ`(G$_~Q25Ps#kIm!kS0f|oj3;JIO- z6w$*-%s(!QV?;j6W767Y;3?b4W- z?LqNJfOzHxpCUAN?bV!GEOGW&U@Z-jBAW>UDqw6MRST{iW!?6E?9e7!*lL^b-<_; zDfvPPIOv04pK&NcQe7RpU)ti_Y-G`|0iHJwvnAPLK7Y72&thuXVlLn1#M+rJn~?|K zN}6ZC@vWq!PByq^M)GYqCIMM!PSZ2qM69vlIp3Qi{ILsy5;hyqvtBu=m+G{)=_WC+ zXI(pIeftMtYnyYjvI@y;-w$m+YleZbb`9v>q!bcDk=H_HS02F%<+)FHeI#X8XB@0S zXI>EYV%5{JTDv~gyAoEYr0AnA<5KVK_+r24@*Cs%2*qLiG#}}gpez&@OFijGaL0~a ziL}y-)MLo0b^2k1Rq3#}jVJuuP6nw%qgJkyeWwulK9jl%k_O$@t6Psteb?;VB67t@ zPj`e<&^WD~@(l0z;M`X2Cd2aApO+R!e??WCi-VzZ`37G!aT)DRpBIEzCj)40G7fUh zL*4w?H*jp*(078wGhk+VWUIiM?QKhwbpjVt0t#i?s^y=IIaS`Dk5R7uAWy`o*%(4E zyk_~I)itfkXS9~`OKxxBX;pGi+(z2_1ZFg)ubEUQC4Mm*z>lflG8GlQG&TLM$;-NH zIM9+%T8lqf1zD+LTMSG#nequykWtkq5u8nobA`J36eM441&At=?Ue}=UA@nymgO#0 z>|>EVvT_yN3;Rfj7dV*pg1g!!>p)|P(x1Z2*2adJ)M`;kJUkqvs5rD`JsZAbS17Kj zR$Ok=H+u(GQ^L@lu~?d+)Wy(Ed8^vp%_kyaTTp0aa+LSDEjV?>^a7KpkRwEqAPpMv zirgK6SE2c%T6?!N#|fi%-kNgjNi+E1h4sHp&L~K~{YX2Gunp4Drr9UwS@kv$+EbU? z>RD49UziOVU4!M%ga1x{9ppfyOBx*%C7Sk(C?~%hGi|ywb8!so03Ch%_(IzC#qvAy zj*Q}BX1!K#eN6E53}~p=t#osMY21I1U5oSwDyHF)qyp|_lr9yu>&Kqz7omsUGLr`1 z{IFqQaDi!6XiJMj^Vj$h4{{{#)m1YR##CW6S6A11kf6ARGKNx&$?Em9$v_x)Vrt)v zZy1d1u*7s2=pjd$U~+C}ZpZE=yhHMI2cB2K$rFml6JAZoinb#4coTkA(|g8l-=g%V zRyCbbc9Ri~U;j`Iyyeq#JYC_fm;QN)vr7Z;(E)0Frvq(n-lO!S%=Y?dL;7jd!_KP? zcnF9L#~)o;*?4gJa6e-B!=rQcbD?BU!j4-EAbVlcTbz6n$jrzx9=P8 zrmz|KBYKgjrF_sP#Z_krxsq=VrH!y6B)Fex&us7+j(i5+u>lqj4?4JiYA-4u?qTFZ z?t_Z1!g|^c79p6DkXxrPG|eZ(;jCN|ykeF`3rcGQ2+mj=z5- zVu!23cJES4)Lp_^y}BIcL&99lx!@lS-ov#`z&NUUQ7{k;_MQ#+JOTZVR207Q4E^Y* zCD_aUAMyX(;2V@*GATfC7M`9^^UdX;!3~d)zv-;>Yj(KRt9%8|$ONR{g1ld1ASg{{N0>J#2Q0<%q z-Vo@GzH?SZF*%E^eW~H-taj9R1HPPWOsn9(--!5+>I^|MVwe4y(A{0)leg^bg2N`PBblRV%VaB~;_6`UsrsQId zjqTV!p)kD*DAcB{Lnlta?((^34O^)h#BPh(0I1lHr+BOwzv3A_CgwV#q|Ag(gL(gx zCDPKy4$Clx{2zBF4>A}J8u=vV)Qw682w*f;HyC?IdNzk%2XG4gW4E9x6VD5k&z$kf zJk0=UPF+P(9+t3AAH;)IM?M|eJ+5QINFO$_@9la2HCBbcIGCgYZ;j+u4K`YO6EUhp z5~RpGuGWrqc!X}&)luF`gt8QC+uz_n|5O?i&u3po$r2MgoaEXNbJZ*)`)yEt%&B_+ zmaLv%Y1We{LVn7I0(h1S0sdAq@~Nk(?LXo?oa1C^gqzjRJvFS3*YMJ`_0s&e6_xFN0>-YN$Ne@ow zOXAwH27|#NT7gITMMc=M(d0PhyBM|cUiNZx(F?zmbI7W^i8K$ydkQ9dvV;!hcBw#j z9hy|1Ro)_h*PGudkmj51iWtyZz0uay4O`T$Szadsg9bw*o-FpjnPJ9EUI>kP!bZ9v zO!Pu?dd0+t7!*a(bzM(fy#ZdCk!OoLDV3BZj)*2+vr`i_@e}!CYl2XwV8{Q}2cP4| z{!!rLQLgczzzaD3>l>QP9CF+DW1|`MM7#0nZt9~Ersb#cdK+BmTF78IVG)QE4;l*=JbLM>w zEy+Ct7!?N`Vwo)mrdq=HwppU`uBK0HT3w{m9U=!@MN-cdo)EvP7};hP4xIklWA<7@ z4}ZC^s+1J&`kNe@us>acQm-XKQ3qT5SU-YMKwQpv;%%XGXRhP4Ar6?HKx-uKHpJ=7M%q(z%=Z(J^9TV}-f&Ws%NyKWw zU12e=TbwFJQ9pV)KcCS8M(nR&@r*E7N@VAKRg+vU)2?&`j{>bU%%V zh<=lIF-gcJ+LQh zZ$-Pr8&pn0ao^5u>0f=1u@!QZSjOj|%i8Kc6Y{g=bq#>lE%SA5y$F)qee|}2_4{D2 zOf^mx6#Sd<>O*x0mG4t#+z{4}xHWjg}U!{i+kr>)ZZCZb{hE z8LzQ=WFaiIX3!x+y94SN*i0?QHD71Yk`q07+f+rA>UkJqF;Pd!+lkQQQtX$yAXuQS zFCk;<)29zxW)@$cGH5Z^_6(Wf-S^+E;}2W6=CL#(NL=97?-R!vKj3H zhNS%6j@tf@N||?LBzNj`ZJJJOKjT^3E@9{qBg-TRUPnDo69Iedh`M!8WeK*!z9lf7 zadM{VSA-$?scGC(%QE9QjvIYCH>&PQl7CqSh+=w-K})zG7SEW8?>Foi&XE*YnJ-@*NLcd?o>URj0eLL=bIaqdlP=^u|*SY5>y0IXD@-l;W{j;+0 zyx9NA{GG@2>~(}V`}fCOETBx>C>7RV{nI_1k=s>O)j)9i$i$LLa8Mq;F@9qRdYnZU z73VXejYxorpJvJYRn{7W;Q z5ZUzbu7vUkiN-#p=DIK>LSEcm5+(Vy(CAZ9;V%`;BtY}5fWXja^CCkeU?un8d+&OyQkg`NHW3dMyrSDuC8pUulPRXD&(llZ7Kc{!T!c&?g!&bb8`UhmM;1Oj*q{f zCAltsd3Q{SPOct&c3{aJ0zIYw$F1ql<>%&xYoTEQka+yhD+~D>4F}kW1Cn+c5i7Ah zCgwyaOBQu@=hq-az?;D8Z@~Nygcy?yh@szkLt9{ahlcRV066h<9KfLefZ2cju!hwL zm+h|e{#*@-PLfVLvWbOj`oBB_?8)gLmG(!L2bFdX>%q6w3{hM7TAL-n>)f^AYoY1z zz5s9yH9+J0pRe&AkXOUq1IRIO;QDNHodoI1{oj<}|Gb7lc=gc`pvFdwIj_?~13+L3 z-_wI@>yxct4iSM8M2CN`A;~ZGx26?T@FA{k0xlb(LXm$tNz}{g{<-(x3iDrx9WXfg zU5-3p?|-!o_&0U3$v*_d_4amdJaPWgP9*h&;J1b|8Oe!|1bH+ zj^zKHh4l}N-mr*1?rXCJx!!8Mik3QtaQvmQPAQxsL$O$`nUVa-+SYiBLpF{Ui?w3g>M%hPx)!>@b4c20KN$rQzypP-oD`19Ra=v zT!+gt|MfQ>Dgr`A+5@@=N0k4tYdVb{zKG7}fO!QGP*(ji`uo*kK#k&^dOn%m*o;p$ z^xpETy_BpeS3^pQ@36~>*MoJ&(J$)^|6gAMz+h~C^KZ9sQt8Z-n_bNaf1>lb-bIWe z$~)S4#|1-B6N}$C6}E({kiAAec%aK39{;w{&y6Ui)$6{RdD>w^CG>P z=w5m)ID=Un{)1{xo1{4MN1LuTc|l+xL^lznNMPtrWE!}Kx4k$hW1zv*VC4y{^n(r{ zMEs#e5b{44U`1Ucu8nG+qlNRV!>ubtyH=ir7{!(PCUzu-_XZ}%3rud(;}e!MTcuKN z!qbn7z7iBmg?>$9YW0ydzPuN1+eo@KYW7+DkH>S`WCf8LzWL>oP~3Puj&^Zq_;F-} zq@rZF8xpV->G}8~1trWfULMbO2VQj6_5Z5!37P-%ww2+P{=C87ND@voMQ}3q`1QVC zEsP!4CXMO2Y%gS6BqtJr8I$1|ah${zQ)45bTW2F#Ss}<>meKvm$cq_i)LUuN$F;hG z^Erxwowd=tnSN@s8_`u&f2V>ZW~W?UeF;MJTVhPrD2vZ4 zp3|>9m4Sj12>buo@<7S~>}Hq-6Gd@;HA9ZZ5&vpFaGY+N&)@sEW0N-FMU9kr9rvwr z@wYh8*eNClWnDodi=#!K_a}155enhE(kpd#NQbM?v_39Dz*yUK7qLO+Zuk4LW$^=p zw%rt_rhHl!r?Euj3-L$4#vP{|3UWeq z#q%DFufnFPi;zV!IzP%KZ^6b!)%iK!yBn8IjoQ_>N@zCNRbMW)A78@i`8NeKL-4YHj~j~a!_9;>RaLl8OxCKCqY>Sg z=qFql6r4qSE9r@F*8^1Gv>oZYEh`IV6}}I9wPD@&{fJ#Imp>f%I7E7L;CaBLNpLn$KHo$;O|L17b?P<`d^wu7`b zG(I;=XS0X2@uNOg>q%?1up7hHii8CHzNxfr&{KP^!=Cl?4%kexRoniWh$pa>fLo(A z7j-yOjDbdQWghW>;!`s@!jlom%WQL8q zCf9Hxj2Y9u*)hW8B!l8X?WCQ`_oSf|Uf<_3uCSo9`5`HSXjTK7U(DAvUMHg$C&pi+4REgwm5ZZ@3_?+FZCK;_% z_^|R8F3ma27)A-=$?ROJT}Ap@9E&@m??~Qu9feRDV0iMn>FLyrniH1uO0Hf?7N4WF zzo{*O-WM}?7dt^V<|AS?i-*cP*tAnlWKFd^EjRp$hNlC!=6&`aD=mimnyH7CuOEvW z3%q+v5}0im1XE*sAXie1=VDUNVBP^XrjCM@HaXY;B_6ItyE5M$JHgoBNiF+(+0`c6 zm%+k~43#%|qE55$Qp;bznj|HOuH=dRI6Rl~(^X9B6huM2(Sd<=(FH4<-Z7W@`KwB$ zBaTPy(ewHwcwBozWQMxK#@LTJfC(X@pW82g9#p`!^3#LsRZLMe^xY{gzkq;9Oc5U5 z=b3M&1bIqH^e2!qz(M4p0~)&e;+1SZd-e}edNiT3VB?@Op1XD6p|e=<0V)Y~Qr_D@ z)!iweEy{#_#YW=ogGO?xjn8xG#<~GMdzyhGawV^Dr#(;Z!`?zEch5F_yJ|h1qJ89w zz#x%jMD{t1BnhrPVlk)|-B@#X?}M1Vm1z|v`PE`WG#gpz%1E9awQ5=CawFGfI#+OA zANiZ&bl*Ei3hEvIF}b^+rs7i!ClN&c$0K6F^PlK?m#VR}TggTCcq#jyqcz%-tj<5T zE&epR^T|9OZr4cv1H8@qL3Z0C$(K$|(QEW$O4fcK;nNmH+Ap_1eGI*aU~qJ72tu9~ z4z0`!E^qR{kD6Pap4)SEs%6v>3GZJ*N1ZwiUoLXY-B3StxJ}9)?VHV)wE4Ta(VDG# zixVO5rHqdKh@74<5k|3(pPM}bIZASo6KJix@F2HtRQuw>K%7#x(8Xt0cbs&OcQc#(-zF$yTi3*|na2fG*m1a4hxqN9tVUa1L&Bi!Ianaw~q)Dv(Py>1MeMkVb z@L;qi{Hq*<2YRf15A~Cr;@lb0MN_<&n%XC~ADG6*#!pk@H0Np#OQ+ zQr6ZQtaJ5x9V18*+{KLqZJ4Ah@Ok&;CeaqsADkl#vTlL*-ih}l_!_>QL8d;QzEJ|N zTWQ@LL?DRPG)8Q+h^wH6d}zDp&m4qj`{qc;qMX=9tgrSouClMt_PK#R4f1YEz}4&V z8RodzmDODDdgrF}7>wB9(3x)0;81j}<5qgRc2q-Sfw;;7YTka$1kOHzyGyla@@za< zEWDzhkAO%3+u%;{_Lj|=?8H!p6^t^UzFc?QO*);@jxH~%u)ME|O=>c+n(~Pz?$AS< z@!5RWeE7ng%+D%b{{e5-Wd)MgDoc~ks>zyIR;zw?Air>=6ESo{&qg@mCk7*0vjrLz z0bf>1^AxbhjzO2RcWNUsEcqg@MW;%i2~?Oln`ex;-@Uj+g;*5_ezx=ACv(Hjq*90h ztxLw;D$1noQBRVkMO3;UQTcQe=J@cU0~SWGjz>}A?ZKu}vghS4^rx}Pm|b(p>;eKm zOI`;zM3Mxi`7h4buE&HDqaV*+w0V3)8I7s`Z*d|Sh!f+u+uPe&+3T}6eLFil+Ry4< zGN#e&IQl=7>j22;oJVCdjL}m?neKdPbBfX>HYAdPXDF;!e=>iAQknS@N>rzZda5A0 z-s4=3i}%WJ5Ibf><5W?SBFH_7nK90}1)+Cr`St*ogb3 z58K_)cU&R8sPEA6XX;5WW!vtMr>>Ae2Ca~}!6Z5TM*M>m-b~ZQ38G7C zW9ZF`H96$6*UgOT2zl|cnRT;7v1se%8#07N+OMTC*%Vw9VOaAv*H%gp2u;1P#8&19 z<`>Kn4+7mlo3@=?w(yOSP(@2FsjID{{JLgvVHAva?h$R=$qfY#->PNy6|*OMe6#(M z%UyB}-JQ3X+qm6%3%L)=iA8%fvx;#-zh_Sdg16O*FNe7W$MPwAl>0$&PnxY(I3u$?0B%l{-yzG(7TRM#j!ay@3NN!g~$?oBwJP{axGTP#?Gt z-ON_Cw&yA&jJ0bf-rRUN602xwAp}YW!&$Kn&0hYMtnFz$g9OS5*nD=-mw2wQ`{+cu zJ{uyRhUIFxq2-?=S3y?Q4(01}aAZHa3F|FYAl6+iMT;Z^iO3WRn8d|1iE@a*ctvZ3 zpeLd0xlx#pC$fAMz=?<5QitcZ_rv5#uMFmIEl-TLti5BWCqj z<%C_)3{NVK9<@OwZf9GwWv)%*_ERDwbPTB>X&fOw(IZ(D;Q<^JRS{mbkwik8i8>S< z-oovhgW`9UX1#9?Ue4z!wtwRkobJzd>S2{4OzW)JlS!mt7A*@5xcmYPrC#|&P=)}8 zm;YLu7s`QH*S7|*iAkpHJJUr#fr6L9jV_1XrTUhsM2K zs`K8dnsVf(-@~9a9px5e=;_<@?j7Sy6Old%UzRlH<(_JR3n_vf@yh&{X~PakV1MD+x{eXk}z07KN`;sKQ3g z%WKs;LhmzbNb*yUVM@;2wjy9O4fw;kyi+i-*|BttGqRc1j=tZwK4~#kak_)~Ip7mj z+{N|rd`GGiV#>U>L>3tk-7P$kCv5fF?RCdoyj#57RLeq=5P`r~&CHMC9#g~4b~7Jb zylFA4EuKY_1w}TB{`5yJXH^ytu^qG7CvKcDSbc>$sUw@cu|78=K zfs$|u%*MVXUE&r7AX>+wEzn;cQc&uXNi?A;(p!Nty(fqumt`362huq>}LI|n_z5SZd zUSUDU_-Q?lIk4Re!@NxtF)x{^no7@;dA3(1Y&+n&%M7CrYxY!Jem=sz*JgO8t!1+H zmJ!&&2*`Ccj#@ed3a-+tXA@S5tDcJdI&2)At6RJ)491%bD)*7Tu?0gbnPi>-p6r)y z76PDG;Fv{8`Q#<7Gb?#_$-K3S`w?^o@qpp^zTqP%R6O_|R4|d@+r;zgBe;)$O35=U zU@SwlP+=L$m2%$J8Fp~S%?hP=;ydHFCeF)P*K{A&CEZ7~&N+ehh z>ZSzEB+|c-INy+eJ0~NYST_RxQWht^dcR+@4+!7jGAQHa6jpZi;t87*AG1gqhW2b7gaQ2673Ye=U$;h$%-bH>KBvVnzyIZ}=X6@3hiUE+JS0MQPUI5N;?Yqow zi`G*8;5q->Oc!|qC&?vpb$-_3(j1!cw#qi=N-i~K&JJ;_dwasbvVK*W{t(2+V`u%8A?dJkuRv2#h z1gm%`TC`dotSCIl*RZs*Moo|C|5~-19^dj+^d= z4uN<}d@1C5=)nqdIqHfZdd+c_;@&QAO(!w}Se5>A2R@;bStQYxw z@hMAJ&|44yYdql}&9M8wW_mCno0fP<&krH7?#UJu z9NDsgubGtu))4adPug@qHh>AudRJfwIvDkbG4u(wH}zXKa>ye@D3dOmqEuhZNv|$1 z+|$^6%EJs(EGXoRAs=xA**b&u02cvf$*Ptw2A34h)mG}Dnwr<^H zycc2hE5#_+l#K zhEDl`^~PAODZ&C9p^p-j*#4>C1 z5eLmse7F_E94d&0JjJ}suxu10){x64zNYeINeZBOiGj1)Z~5V91s#=HO=Qh!(W)8Y!U1f@A!#xYyA#xey32KR_87F4|+z@vsPlQbBG zeM64|k#=sRSgYcmvSMDMP~KTEi@jORg2*xhd2v}x#S}t!$~*jgEzwbqutS-BKtabd zxY%N~%4EGKqHP@s2eZogX)>R!1c>6>RIR4L$F~Wj7v-EYm8z#uwcK6}h5x`x15%)+)STKWKP`5VF6@^<|_#^kJLRF;2LjPS|X;~)7) z84Pp|qSvrkhTfsQa3~+C*`ncF)}sUK7?k^0LTDyS4Xe=2dN4Y6{K$D>35`@gqQ@)D z$F6>ubY5d2@WzMH5TY5VdW@xw9r; zHnpJ6;wWi4#pOHW1qwJaog^=1=XsAUi`{Z+ctax;VS$1U+iq11yN^%w74Po!b_-N= z*S0$ge5{@`lHm)!5*2U1T}z%|du8u2NZ9Fpij-wBB6GR>!*aG>m4DTyOncpose#W{ z{6h(=CIShvgr1tkuI+%I5t*LrWYCcZ*-H)PZa$fB;F1<5m!+m2_|WCWAS`<^c|0C| zY%n5}+liots2!=0&h|BDGQ(Cip!H$Vx*Hfpp5J$Azc_vJ2DW8nE`%a%K4R(8PhZp| zAqM)qsz*C6EwQ)uYBmJA@@mSw{L+Nm8UtPhvMJwL2|1~EL`>sFLkh>IvR)Ldwq3fD zn!HN55GDh@-)2(+lXKPGDU7zy)$yg73kWz% z%Z4XN2?D4vWV%PCmH_Z!MZRbLbZHMvXDc(rN2)XUjj<;uCtF?Nc9bO~p2Rcj`t3}Z zH>nl=m0*#quryV|(7ZFjY%m0l2Ua9~elPGla$nmwTcIJ`DQyYoC8Yg`JdYsBHTsdGQ!*;6aPIDc_az~~D`H=VvrNzBp=me0dD z$&gVxmg~nZ^X+t?0XR(0sAAl%ihFv6Mx@JfrXAX&Ylhd!BuQ*)1OiCBV?XXgsT_{P zq|7SYeJJ0u9YS$KRv6;$Sp<(Fq=#lhd*|7S3c2#A4-GRYAtK)1C`h&)SAjKT?PCJW z92s6gLRA(tjyr0&rH0W{Ln&ijbN*CE`AY2GhHaV+(AHX)2@MS-WHZsrG|`Ux0`r$9(V)s^%+C8fMcRX9 z%7>{P%)=KV(yFei=^GmQ)WihdyFky?l}}h$*x1IC_%*M6+aOU@IwG?J1xVL4nBBR;1omRE zhxh8-uXs-Z^9-m&Pl->~k~i@wud+mc9FiO%m$%CMe4Os`o@1zTN|5?gVX;M8V-zII z_TJ;UHw-qadSE49I81PK`PM2OZ#>-Is&AlRX~~c8ai-FVUPZW2elH@Z;8qm4^4STo zJSsw^HOUt*Hhdp0(|Pm^4KeDdUgM+aqlH%%2RRKw5XpJ;>`2A(VKq2N0z)<}7@8?^ zUYB(#G4riwE*vBVPd#Jy(r(@Ea$@KPDV(ht6_w*%Si4oe{~p+1>gOC!>iij1ah)FE{l z6$2Dc##$vt{GpPu^TCW0ss7bTI3L+PNU=ptR^R8h=4&?Rbo!iQVRuJLZu-F$#3vB+ zubvaw4w3MEvG}3;lR_xup6|SZQBKPQVb^vT8DF4wp~2gOaiN8vu~xrBss?^gAT1!n zde*p5nNqO9vK(9+`+E9O2f~TlNc-za^N6_Qi#tYA9=5x+I2`)KZKJvaaW~MABvZn< zXHU9HhJhz6y1gW<&d7WOG`RNbQP$j>XYZy)p0Cx91YA->U<{sEtQ^28KM{Mj)qxSi z?=5U{9o0go@Ub60@b1lzru&cTWi9pra~FHOS-Pu_^z_fmIaM$ep1jZ1{Tqt@=jHa{ z0inl5F|FRz?A3d0JS#<|o-Q@;2bkH#`ZR3&upiHL|FEk=ecShxGY~^Nmq*-;Cgqtb ziW4Y{-q0!UDxT?Fq=Qq^(OhQseIt9QX$>f7o*7fcRe(=k$+Lxcu&#p#Zwxbq?qDX< z$%6g#xnhJJ0qVbIPHRjhvAZXcQOE!%Y3E)0*+5R&{(7H8up+ z(;O6PD_QC7r{f69+@TySg2n_Ph>F>U;6$aYte^1|J%J*)^;%4X4=kPAa<#k9G8=q_ zuvvcNhtFlmqx6C}cS4*Zz_gP#w-j%XNYlX>Vp9DU8B}(|q(93aTZ-Cq%@`dw?*0(# zySdobuEJkTsaqMd;z@0?gZ*YClIi?8=iuT!Q0)K84nSMr;h>I6pf|Adz(Qc;DoDP3 zn2W~MByo6ce(BhNHhnvz6NL^0{63Ch&8+XMb%2XDGtl{JXVkEsEfrhLUpmL&COhHN ze{EAO7{)}9PYLO^M7+qO>0DF9wDWXf9#NjPWtKSDG0dW|WPbLZf!caDL5`H~vExw$ z`8lc%x%gC7&dVe}KaH;{t!Ckriw3mw^>3_!<1n{8Bg(gYY>H%4nldgmMu*t^^j+Q&T2rzMb+e^gf(NMH#zaXGBM0|0wQp!x{b`Ir zv4IZqY}G_j;GL(ko;H@~pU+-nzS}_gxeUoKC|RjYKUx5d8lRFszx}Qre&y+{RBh!J%ea#n17q`GEbSgk&3(bBv?yS~CA( zHyio*-DIHWN2*N(tJV{;4}YQ44>`@wKsEc(44`~G@M7jk2kh_C(sqVsnG zhs`Y@hxfkmG}>Xpw%3~)SYy^<#rcuO@nVQfY@)KK6>YHmCiNNX&7h3qXvV0^mY6ix zZlK3Rvl+8ThuM9!6rIE2Jr+xXsB~e!bIwqDNI9Z&SF#MAuimjwYzTS}TBM)RyyJdTF|=KxdK6@6J-_nG)ReSb zAmmm{R9gC&!nd&%w~pxE_3-2vo4=UM{Z7ak9)k0pcOs_Q2K&=2FF6##A3yeK-Y)?u z;i3t4I6nhf2z;tlf~~~-y49VF_(aMK(A1je7s0`$$sANDGn46ZITZt+q>WeAhq@eKnnLe`3fZO+eT42t} zy7a|v;3xbt`aK*`@FRH~25PTEJ$0M;pv{AMI31||c**-k52Frz*rY;Z_t6v<;}gLS zi%Zs~?BIb*;sWg&xV@_&6TcUDn|rwH`Z%@eZ*?W^?YJ#x__>eIkYP7*O$)Uic^7rm zF|qFH%u`u4l9a9rUAaYiOqt*9#^JPZi@?FnH`nh7p^#;^V$~59m$>E0crD){x((Vz z-*L^|Es1{~Lw)0UONT9b6Hr6IOmU*di#_L;(5F4M)C3j97QIEaa@zdjcA%?%G~-L} z&5e#>PjXX($A(;{zg#6l{<#OeV^NwS1qKz!E6!?`^7ET1i1NVstylrvfYxRafRAqg zKGg$zvR~zw=@@`FsX~D{<;OGh&gkm>H}>YuD)z~NBSl(Q?SztCj5GEbjkoo7079VI8c&kjD`DnmJuhQAWF2@(?6Yah=1gzk~ zJQDh}so;hQ553DI|ArN@(1E28y5>>yb6d7fTlnQ`f;I^Lg)8^BNa>x5Lb(hfeP?eJ zpnG6dO#tA+&aUv79*ZAGi{Z6HDS?+OX3}2vb3h9mG>=ZZo%Uguhh`9Cs;#o_3)z1~ z8Gq=MH`oBk9?}A4oF1ICOW?s7QJ!6&qW9z!MB3tQE_`=v$})M-R^Q_cQ9Sz*q`IZ@ z+l8&Q1B>teP?`D26GjnHq@?gXD&xVeklX3)ws5|54%3gF7E@IN;GGGqR!5p~baJVo z7B9=WS~T0Hb^1cdX$HS?!z%Jj!7y$7oNzkvPeKYE0-m+^VMZ`gBu_KnY-si#p>=h} z{zxp*4C>o-1!B?@6p?$?t~tK7i&#ya;QKoA6(2=Cj$K%5u1PZ^b70Zr=8 z@;e6S<@@&;Iu~M}DHlA>xLh(QDwiVb4VsS#7#D=#o*H`l28^v^L611(JiD;@pL)jc z*E@!!a=^q0xlk&}BW)m{3&&jObt~)-UdZp=pnZSl9#C{ZfC5^iDipe>uVhz2*z$@P zt8jtv+~Iazi}2^=TI; zOE_#4R*yF{EmWP_8Ex6_`bLSW25TJJ%_!^)?ubk7q$-zR+c(&|$%j)sQf-yGT5Qc) zy|Z9k;6e$_@O)M(Hl(22lw7QQe=M2feFE3MIn=Rue~Xow<=5U3oH3O_{=u`Os3wH} z8^u?c^EbLPXUA$}ukA>_=v}a%YT9)5>t}-XO3)1pKO4^_$$|^xc_7gx6P^~hRQmnN zx&YBBNZE!}!nriu*g!PAj;JV#Fn1$RjD+9hQU|TTa3=h_0@o zDM%$PB^U4m6&3ZWs7sOTCDsfKU}(2E8dH?Ld-U3#1hHLF4M9G>UE$}k$Nl3d_-);9 zsG56<9P+uihNp9v4S{Z3gLDyU0^#56>H^-UxxJs8vHzg_0^MBDke~*y<5G{nYYr8S z;cl5|%6umAd#5$c;Zka(jA(ZHNZ!%s^JS*pF57OeCG$H?{vPRE$X2fb56THe1ki_X z+H4A_T`_B)M*$Z14%2GAd-a5G`FnH?7S--cco}{D0uEKVg9e1@hkT#ZcFDX`NKnn{VX_jI~SSh&6e$ z@2quAm9x?BZkXgm%= zk1IRp3f~2z-Kn$Vp7(uavL#thSOvFDBtHU_Fe?{sGewNoc9)%#&4B6ylv$2UV-*Mo zn^I#)PI($SAddo^cDhf~s&;Pa_GQ1X8$QDDj;^()$bR`=P|d>Aw^O+VbEuf&K8(&m zo3lGw_GjGF`U*1?n`lzsj9Ok!JlxUVQrEr#j2A66l|9GAmqh)+4*OG9z&y`uFE@p| z!veMpgY$WDA-#ttYv46J*Go0lwl|-V2d7!v5G?GB;^qYICI(?tyYSXZJ`f@*9;C5* zfBfK+1PYytSamK%G3FJq=Bh3}rhrEW7uFJVYX_J%Pw1y!I?H(XzB~_rdSe3Y2nu^H zYIm<&ATfVdRw){si+HH+&4t&NL4i(s4m!})V7V6lN6T^X#+Z5!Zl`{X`X?2Gjc+@sT*ZfcpkTxlw*UNj_<=ec4YykLbwNF@$`$Veb);B<1a3 z;>p6=X@4NUe8t+M7mIs0{2eY^eXwGX0r5beJCPL8O5?ru4hi#HHUNvW<~nfCR2IEn z5kuWS)_Uc7CoT4fi-pti`%`pYJM>|U5f7G+ra3eygEhg3kho-YE ziEKqG5Bjn9@gpe=Ypx}}CtYAG$fk9xtdE1spc+tS6#A%BDF#P=hZ%CirRymsUa{s3 zl*SSDt}-;n+ys{Q0doUED0~J_w(hTDIIOVAd;8jq_cSdTnIsK0@Gxe~a5A0_2pahp ziL)rp>$)2a@Cvi5c3eJ^WJV`-Z*SoXe^Qg_Fb_-jw#WA~lY>XeQ~Gqqo;Vyc@QV^$ zoME`Ci#}wr>B^q#8SayKaZiFfhBj7uyrZ+(3r~jS*M`VjRw*1W28eyc_IxYMA>cuF zd?&>L$5BDNVb=T@0`5lTl(xM|jOrmU2PVs0n^rM9S|1KQ&_=zJBW*djvPLoBEgq7C zY}4fUoFaW{y@uD)EDZ?tdoszx?Vu_R*A;S9H9ix zU3{u5tOMAx|9cRx?7R2lWIk<(G_=eh_*~=m+M@3gASjsmQ&`RdED;y5*eeWAE4%=< zNNf&;R>FbEXPGv5{*R8*3J|X`L$>kkVUnl@y5^NX1n-|xvH70~grUEb*^PJ_0G3CD&-a}7Oc`;dnk=w52#QDZ?mY!%qa<1$MEB)qbLiJ$ zDnx#Dn4!i>SWx~#>n1$E>BIQUpKFxYAK3D?GMyBoF7JhruPS&=ZxTXox0vFFfb#<% z9t7Y_0rP}5r*)ZBL5D}k{r%;pwlc|C)Pj8WGFz0xPGfvc%{%6{GR^JcZv1=3pf4OP zXxO%VpK9~#ME-AIhP0z8R}`E`JB9L@8h?D&Dd(r0X_esVg6Z;h4Cmq#CK!afx=bN@ zU3ep3Y34jDeB&S)nE2he=hLE?(WSOh6N_SxF=Wsrnof?BFZNGYDMmfaNW-F)WKVyx zVM15)LwulkZ$t>}0l*Ekzg(u6VJnnALrV4e0c)#V9EO#W(x_7r&}g6C(F#w2p|Oj| zQT6*Wo#5_f(8}T4ht@$y9{R=Ju-|jrZ37~`7rbDJ65>}HFF0gNP-91e zR(o`9gj8zU8wN7B_aTS8_Bo$4CO*^<_)E{{5iiHk8#j{mp96cW%X%`S$NpT8ed-Q= z^R=u=gA00I(X^ye9X3O8yTet#0e1jIgImbJk_+e18Y0o8xut0n(j3XX)&)D%pZKthe{eNxpJ>YfVq*4Rk0$bZ)Gj-(dSv}m( z?O1Qy6fg}XlNiQ_uv@uYzC+V4+bv_~6YYt@?a|KIrE^Jf;*!hd8nHdL*k}Zd=rAEn z@f4^g<{~4?9}o@3*OY;YGh!}-IhFg`RtQu@&&Q*jj-`{%fs^6o^Pdaf>KklHs?o_i zYr4A|-P70J^*ByV%VA!2R8)8E^`FkqY2(<0 zSbE_Z4ZR2`5eyLsD@02ua+NPr|gN@y13x8qRY|Bu9 z?{ciOW^q#s9UYKWQ)MC`fT zc9`XDJHn~$xUwJtQ{ij8rsJ?v=AN8jUQ=ce>GHQ8z=%C9tWhEUdt?nk7y`OcN*1+J z#U(ZPr~Kr>QY7$GP2*$y!uuy8r+cbCMq;c2yTHkYRPnGo=wJUIlxFDe5QZU#W@wO{L1L(x_xAZd=lst5TjxFJKh|O`*3#?#T(S4Q_GPYmPY@!G zt)lu_P_dofn6awQQqfjWy^L1!T$|KipRozkDl=&xP%9I?j6uf*?8@e!{i05!&-pq{ z)6T)$^m_mCj1lMhcgiO>pW+i9Z>+8NJ8jgWcQx!*I+?uZiqd{QHA_q!AKizIjC9tP zQziB4MpeGmMIXJF^JhS^+(R?RikGvun8%X3?ELC1%9Xy_s9{#7 z+SfOa7j6ghPzd%y2>QJy7~T6axo%g#%5On9czC4OW{^1Z`R51vB#eFMa$&h8#i0Tm z9MgyMK@QfVi5Aug#$lCibnjd=Nwd|wbm%^DB?iV%BlC7mbOVSRuIX~$ZQ)kiNbpsB z?2j&xK)tWO_aX5YqQZ!DMWnq4rowGHn0&J(Wo32z&{3H!fe&_`p}@W_b`>kfe{fw# zBm3MU2u>}&@ga(?XDm6*i$xx4>^J4o>>20nHg3`s#2wL{hI6A>ghCx?3R8DBjH3MG!mFK_|Ii#;YPKw5<@!W`Kp6w7aXuGBM1Q2SJfAD0&hxii?pbvPm z4yP+D-znnpy!{Q8ky{!~!(C~iPyoKT>aX`2j^J?>VZ>{j$c-l8GW|)rH!y`6BMakS z!KxH@7Tk7MnrMcve!gn~g%`141N!lSr+8V6kz599d_j0q-PZE7fsPdv*U_uR6OOP`;6!CPrt=K8TkCZ z1=b-sd-LnST7l=_<};AKOczf(;V6u&XLfHZwbCGVcyL4jtwU7&6K0xW&FXMvosT@~ z)Xfl_o763bcy>YEkov9<+QOdI(*S3Ekuzg1-Igr{@#m5iGL0>{YT5*1r$1 z$@O~m{wKA}@S&>Cf%?NmQ_oG@b4JPFtm_K`xBWQoC*8Mwc$-h2zNv6%2OLqB%eE%E zjQ00{Jw*ZmU@KxigZEmp_NzRf63Jf5=|r0?6>}#(@rf7e#Pe=(CeNU71KPL9DAIWw zZP#wG7?Vzc_8p@GhL&|++s$wKi{bs*ck}-kA^sREEmRs?dS>)P?ei=`;B-=J{xN*( zE>o>27!L(_Ix0led?4c4npDQm_g|5NPmx;@3U)GC;ZamE@4P*DoO0|hUS%Msb{2z= z3H%LCt0rh}NHnvuBTp|s1dGa*>dJy1+J`n7`Cd)`XzDb%+jemnw71qf=Yn8vI9leW zk0~h2XPvI7T5hMyveQpdc#@e+v_Dbr&LG)%+$Z;e=-|%|c;79gK#kp=t@h#n8pM~t z=1wfOOixZUA3&mTC|DB~m0MOpEZU1H&{K1GOsR$g;spYuLdt{pvL2~wS9S>}JyVs^ z_{FCJ^b+JbOjSLq5Ns~pFt&p$BiCSz1>&sa^0pU+$L9Yv8{zTJ7A;Y$HTvQPC+K-M zPn9%eMArw!@(h40gEQ$38tsF|YRu={5V_3zjmOIb@*EuE+0P?{-M#5@p0v7GxPFpW zp_83I2!#wyXojLKG^idWs17EG?S)sTVT!fWqT(Wb6Pb2u7j_i&~6U zl$BHOlhv?AV%2IxKiLnItTXsLS_nDDcN9Vq%OpqZf*%5hr0LHOdxr}YYc{&>YGich z|5}KOdis=0ojROc1xV;r?6GW5N!!FqPw48#yt*J<{LGDKnh@^2cA!7l~n%c0!7R2){RbZuI=E zeO3BlF0Jk_&vrEqp1UeNJTvHEko^2Wi7s7>Yc#_GDi4VBh_OF)Xw1FA2BzcFb0Od{+Ii zUW>NQ=(dEZzpw0jP()iUI2M*rLhJB;Jz@w$uQ4GAs3Phe)fG3)Os zJb-Ue46+dl_Bt~kWc@Nm|G;4(c?FJc0~ ze$tXKU{PY^s=U+bY0oD;4LrP1zQq$7@<)MJuS5Q>(2&1;-S|nfq zOmjWN0~bPVkdsOz|K4x>k8j}o`#X)G!`U7L0RzrN1Z!A6IdPSQ?=JunXzZ;zGZ0w0 z5$$;Pwo4V_<5Qp!N%J(H%=hy=OuNn3IWwiMbdWPacqtqdwrOLx&u8%zWB8c;9SS>w*PP!!{kywZ4ix0RToC$`w=E zM)v+#QsL4SoQ)aXT zLa3S@4(+@l(ka)+bPVo5=>|C?IyXg6j|s4UItHn=t>g4VnA3 z02a%dDbprcN4q&a?WUT#CsMr{i>8A{GrxVUX%YF4{BMQw=H{mQ^VXY)#nXLa|K&36 zD&RL>gcja{Vy~$P5K<7!C^WknIXDAi&DR=TW4K$Oul7bd4ml3%$EF{qN{tEGRZ?0=Llo|#mcTfz6y&)c>kqzO&E_V*e?q_Z30wxtH6K)4y2Tu{;}~e_rgzFVTY@~?L4WK} z$48EhmR?@P-jZoxdn*^M&#~VHzX>S~(7$*`%EtLZ^Yc3aMS-1wK>EbY4vdQfMWh!N z{?FW>KApE;Wa_Y{D}H((k2I@ic|j#*d1NVL=hOCsR*V18#n5gL!V=B zXtJi9_`iOI}EZYID^W)>pp8~^G_xuE{o02=;y%#$90`)ro zSjXqu|M=iy{@4hGBg}AlKT>*dV_?^m3w6UiZ#!U&W}S|1Wm8-~sIwOD+v|=jQV9{^ z^Mq8_)&xql#_&I*+uIIJD0gV9t$s+EmZZ&1uU61NZ1O4c+OHB<`O_IIcR0iT`c42~ z9h5y_o`_b_)ulPm%>p+xg!0lcorxLrAm_o6xK(Uz+2J!Z^1U21DHbOHQx#dexjRwN zL+5L@Q97V5V{f{NZ;JN(h0mBJJFvSN!%;D5-C37 zMo9-tr3nRoXp3`ov;cr00~iMT?O?}?npvwQYUx*!D(7X{jrHHo%R0xXQnqgQb|AgP zE-rb-w`MpvI<+seMa%_L91qGG!*ISYEg^a)G@gNtV%KBXMw4emUi5!f>^mf+^qPf^ zp_)J=Pt%{wb61NvU@eUDP8180{EkXC`8wqreQGi&AffF^yJ`Te4qT(Orku=FVGj?{)cA zAgFbMVOlEl0cOYUdv?Zc)E#4E)!#arXElU)4h~jFY!vXzXef88^rBTVmOm0D{l!A?Y>a*iE(nUBGOMMisX$%=#{Wu)Kw$+n&TNAKUyz zD8BDL_gc#(JN|ph{6oz!&;5$>o!b)GmnvhHTm*~}Qd0^At3n+^<%IT5O{FR4IUO>e z+12)bvrPWNXBs}VOf32-Y1H6i`Z3}9eA(_UNbR)I|d z%|GeRT_XhQ^O#0zI`AL;4w0ZnsLhmEp9{%jyGWAmwu6VGSGbfJhxq?{4(8wZ)(R#C&{5h!*@L7Fq%AD-5?y-Mx4~)*dMsdXahb3Z`-eOEC}j zCW>aQWZS5w+f%=3eBB1jdKQPWkV^@tBPuH>hGg1~CeZtjVje<;Z>57A)EODs;1PeG z-63T4uo94Q+nJk}TTo?`aNJ{q14C8tG_&Uek`m?pZ*px2asvok$ zAp&%%vlDVL1=7U!z`Zer(($Nt%8ZZnZN5Xpxau$9xQBXws*OkJ%rhCy3QImUNMrhj zULWtEYz_t88I_l>9 z5p98$3p_u>lL7I@?|ksp4MLYE{qJVA#|hix=1^9e+kQ_jU%z#vN~5@ff#Fhrq^6HC zl)%;V)jcser!A6lkk1o+$f~V@0izJMZgH{Bu+6|DEdbH=LR-`4fpqik?fZ3ph3 zw<~BF>$$m(=RPih>C(F!`#A4`%s*u6?&Gv33XBdD58Tw1?g1+MlaNAROxXXIB}oh%lC^u;FCX~Tm_@y=JR3al`T=}Z)%K|4>Ic#K9@rn` zm`pOS38F7n4;@#GG_|5l`TD8%^avo|!sZw{87-RO$`;Z&9E)_w0n6DxjMJFl&^~@- zpA8Q_=7tC#(?gYZ*zDPgyxeILv!fmZz9}Cma;sb$OfW3N?kler=>xkvW%>2Ya$IhMatWsNCNJyL6-S`2m>f5{049_#c zxS^ER)axHFuf!R5jJ^(&&LS7T=?srL%LFaCkZt!_u73OgKIQpXK|TwU+b~Hk%pS7k zB}BJ)I`+YX`&KaovH@#le*}ED7*r8neC3WTKWGd`ywDMuj#)MWF7kM+W+ZFQu-EQm zm_m{YC+bUCEIu@E`jm`Z&8#?32k5cVbFYr_4g6h zcawCOsKTywr`XpkX2GB4j}eU1J80~RK}`5$fJT!(lR^yL^68Rw=U}vcsw;h0A7`ZI<}>7|dsw2rHqMgIR!GUN5`~ zy=c6M{i-;IRoCzX*1r?>w=BdS57oUNM?y z+RpClyMoBC)4IpDP%9<0M;f|KsWwA418`+q1;+(T!IQb;EHk&AQU5&7&(uc{h9GXt z$ZX4QVEJ*|0G6>q@=SDAIp~3;RHxBKz6+$<#5iktsXEFzVV2O`yl%)F)Sk#`&rk<8 zKU1iF-1fbf;}ASq>Z@g`v@qovJ?YP4T}2H{PtyQpxJ96RjRu5@XMn&t@AJ31WB8_w z7vJb6MPd4&0;vY4;sa-@5GEnCAP=$Jtfh$of=HFflP|pSNKeo@MnY(6+OUY3+K|bV25rdfvoSutxwVa;#n{+VF)_u~Teorst%dS;~ZCgHI_5bit&-HBLXH^*8A1br>4I07=9&cYe0`Q^S z(JEZ~&~zuNE-BiB-S3bosOjFNktX-E5RN43`orp*;P$FdSy34McBTUDtlq@j$EmB` zHlYOmLC3eWNWM15+jmqQLv|c?Fe=uaYH3z*+@7`RrhM;(D8cD#n+Jcxx0DEr7R74s zp6%L`FFPgb5MCqd5Kt`;L%jyNiVeXxn4-FJLalO{6Fd?h`Wg6cTDlpV@--u%C6(9x z3^e?^)O1nVQ<0&L7l7#)Bajk3l@`hX`7~Zq5Rf7Z>niU86&s;$D#c!F6c65SuKP0| zoP*;qARBzpS9&IqO8r@JcTHL?RTnMq+{Mk>Am*V(}NIrT%T-kzbUF^Beiawl+&wbHmb^b;_YHNaj0a9NvS@O z@GC|$C|bnR?Z#gRg8Jd=-mdd@mlz#Ee}27#p{!`eL_O*hY?AT8#rGtrIHD{$Dy0d+ z&NCUM-mFcpSy^EmDYP|c(-%Tz_^GL>g`b@d99oRLa|DHIxf^lkyHS=X>m0vgfu3~rmI^g?$+3+?WxANXtLD4kTz-6baFuhH$}b{$ zR9%DeIkwnf+>7p<4uv)2miRLtcYrWnJNm}bByNHK{q5TjzcbOcW8pAE%@cRZub$xA zugzHu$*nD{FbL6XX4Zt271wEwR%*GW@b2!N7Hlpzy{|*4hde`s151Q^^3vZ%O{+R} zZE&+Mz4LYTad^G-#H$LTbopilCgoa~d4n3m(kV5Ap<0jE1{tCzPh5tD9!*^o=Kai5 z_TuC=J~!%&lPynbnBTKCL`L-SYrS4mFC#JE`=y_{+P^1H0&CheDcpA<{9M^X;zxly zpBxZ2FMH=wHs#lqQA5vKr$=(<@P(sivm5S_ZM4PNIvu&+n9YE(yp22#P~iN|Yh_;$u1UHTZM#bTm@Us(c8`Q^p8;>Eo`e~e_D zw#1NCnc)zuAO2!0tVPSMzg_UY8py#!OZhnKiauO4cZg+<_dCn%7oE&LV`L0>^BA1@ zn}}hNHr7a5>0vXleet$<<1ZXWMK%E;?sryDR#7FEt2nG1GUE9>rMUzCQP8&I(lo7A z7Zk*R{RP(Md(fI_^6S?=%8*M+`|^t9rfr=-&Rf1`7vZca_B5rb%GMzeii|?pkBbh| z1s=~lph3p;$%Z-(BI*YPd3PfaUZ-^q2(kNN&534pvno7`uC$hMY1QdS^~rPH_N23N z&?Y9@P~(P{XxP7hien>KeUtnKIpSc8eXQ+ox%J-( z+k10q#c2&M03ybvq6cUZ@3(@;q)I4=;11mXCDndTI8WeIqx^Q}-3}aZ90YuOFH2(D zi*X#Eca8HZzsew5Vbj-4Ji{_pBlp{63NgmA?>3%g7}yPuN_})no$%ay#k(cQ!}}eR ztXW`Qi|6}(o5ZiX6N@_ib}|N`Ejm>B9*k1_>SA1B+Xp z4qxqmJrS*E8jT;qs+h+1I10G2X`^O zYpL-J!C!t)%aoM>u|iT8VS0*u+w)lVD0Hb>a~;q=!tr&-8bGU)$N>o>&T}|2m~hdX zKpZvzjgGU@Le$?mV#?AQYH_oxVJ_f4DjrQEtrY-A_ijE(MclrQrj?-G7>Knr9;~i{ z1DBruGtAq+MW)({0V>tqmxhQ-9Ito&PqIE@4jZ|s#ng7C+d~_he@|CsLu0qr zV;Z|^svE;@Yb|iyUF0Gg#j>jxL(SWL7wg?L25n~7cmoB7aJvswfs*`_ zrWQEd{TE~d-c~>GWBwShyaWI-7yf@+9pB`0vd5}lW9o@umAX+MxwU(z`&1uZ!sBuR z(u6?W5C{>SnB8k9CtP7lYy8Hj<+$>1br?_JFXYtK)tm2cNueZ90zRGF8i%A)_pqjA zAfRiD$o`+2s)oKqWT^Gpqqd}wgIXg&>C$G;>tN*ZE0R4Ny^VJ$c|{VN__SJp3kR0K zJFiq^ZvqN9Im2~Y$YJNKw|f;8rUM;(E^htUmX@1eJab0}up!vkulC78#=aj0jEFHv zx79Y1ZDwRM!#%kvkuUKC5vmZpzF1zrfEo$fI-)yM)=K&gv3PtQf=dNAXO~@zZHVOe z8(M~a@CW@$GQ*S3N60^ES^hOx9z~Wum>opcW7L~c{*ztfPP|Tn49JS--pct)38Vef?cuw&$mA z{Vn%RQ*&s7n}64>$U6du75=ub0F-G4{HU?>Pjhn()VP@(8D(#opp}Vk(k+Xv$=)3)8n%Pb%iWP74;bh}ek!23zrX*73npV#6i#kyO;rWL@kg1;CBdRM&pv0G=_d>xuP zx=0R|uH4^Z`!%qh9JP|EGJLciQVBXW6)P9 zIQ=?zY7?-Y}CWqnTi26bDdFiq`gz+Rw^5jBT(N z6$r{`AlsBf^Q$ELbxxzeVo(%Q$?J=Mr%yolCJ6jk>H-*g15V(#z?#LLdQPFVV-(mC zevRX3Wkn5A&52M+;Zt^uFDx!rNKJz3Z-p=C@ci?%;MWLkzLTD}J}vHXpYn7~Ioray z_K6sz_itH|8Q<)w+hmB~VTOa#0Xx*aA>RC-q%DJO@vx<|<=9S1zmxfFO$A*Q7UHyvyWNXvVo9hC_ZDpI`HcE7-($0sd2OG z#>vV;_uUTQpS=4!V(|b2bh?(Ev;5$_BH?QLdYk?Aqyp(!2cx@xP6bpUgt=+8Pw&Ci zffn6~Z;oPIxYH|zjVMjCr(EOn<<+%px%PPnR%trx$O{>?8_}()2{YzD_imy^wY-U9hw~6nm zA=A4_%kY-FEpDNKQwRHL{)%p!0!tY}k3#%ug1RC0>~&AesN*tR~WXz00}ATKI!u;5S!XUAY0E z0JHIHAf*;!Zd{ho+jQiyj4@;ftWH_LSRpC-254tApfxptA@w3W^Y*bSDXdE~6u(zi zJO>;$ZubDB{_10!b9%koM5SXmj?5V1En)A?fywCbL#BX-zeY|+DdxaZ^lv$fd+zl> z78JPLnQ+K3^n@PXQ>fCV_S5TqWOK7N>HkA8#6{X?5y6Je0 zilEmL8uMZ0Q8Uaz5Ji>`tS{uUG@U#tqcL{(N{Acr>KMQ(qtPCWewkg#m#+hH(ye^} ziypHz&~ew>=z-4D00#v|RN28u#b@x)Yc`Hr=FvzpUvInj#l+GQ5AL<0l!xhF zqIJ)4#DBh9e*LF=bT#KoA~%D-3{P?lF-Fj<{nXvtSG&6K#k8}`znJN^5kWzcSp1hc zJn>8J%hTKrgu0c|%_Di3xdy7gk?ZDIITh^I1mX_KCQfpDY)m|c1Usv5w z6PT7nQ9gIkW@tz{(gZwE8y6R0@JpS}v$A8tMWc*jQKR|!b){2$osv*fEl#@UMNuR& zxLY8j0eo?K0=b$35j|JeiPFJX?hULt(%rA5Mn%+zMmI1Cwz^?F&rsPa>90(e3XwTw zM)A~S8PS_k>V-3T$3JWxx@%hHQ){FsWC_0Yn!$RG71rUb?&dw|Dyf@>JUm*O};8WZO2trAq9rat+cm*Mh)7qUrY|FrG0cQ{;q?)@Ec~M5<;vQP>s?}ako_AbVFG8Q0S^aB-zFOkv(#d?#sWQhRVpbKe;?5zP@F;R$Tv6A126gL(J)!jO(b-cKy7cdcX#HAv2@X zX-;Bug68o}s1g$iioYOOJyjp~+w0V5HWfb_`-`e_+voJpw(geF_<(Lb;A_7|)5Jen zg(sEsA=KA#?Q0A3v;DVn25O92$OBha=AeGtl4ZPZl$2IeFomf*uxNMl52oz|Rht5; zmLfqbs|i4l^Zz6)rns%)Ec;TFiCIG4e5YrGxg}-%O5SK+v@}`>=wm56N_zPoHZSeK zH`Y6J2*jh%PT4-g8dr-j6dmi<%N=%T2LjUUcKwY5aY$fE=BbllEHGG4kz}rd@VOm zA6htLC}dg^kUPe}+rSCC4?8R6Q09w?WNQU8j%ybAo2-5Iz8 zrtyz?erLAaMf{>%Q%|BrjjpU+?AOnS?mzDom?t2`UIMhD#}{9~nNAjOF8UY-S`X`b zOufGVb{F@F-(wluN@dXey7|Dr4uSR4d-0XZx3e~eG1&q>KLN&!Xi&WwF1}1c19Tm{ z_XT2N>`2HENf1S8S`vbFPX|)1+oGxC)3T8u4p?cKd3%f3>eUWINiGj8jj9*ZA)^m; z;m0|B@vJ{+BuncXd-Ez@3P5oOM^%yL-*%<`hj6li>!^ZnF33!B9mC!BVH@lHQCy}$ zg?oE8njb&rH8njbQO|j)1PmX-!dNevnxDM4iu-U{h&vct)CHMg09%g5kGACSbYvYd zTVs#_pS&+zy_uPQ&GlpoVFDyL5QnIDEiyLAaTgccDkbe(qX7PQ6 z;*BcM>5d-1^WUX=-r!S$Ba(9Jj}~(9zvjhPjPAmdmbR+}2TgtF_zrNV)B5@ZU~?+4 zKfhrEA*qAI5CZv&d0FE)Srv;Q;3NcHm_)z z8loPTCl0G%dWz!h!hz?M$m`Z&JMstU012ZM!O@EK_CMBj`hvw3o}v7+^u2MnEuOt& zVavd=!9TG*oeBqiqwUsTyW-kE)9vIWt$}nY)Tok}H_#vQwA*KDdMHL)PogW@S>_cG0P{HlThEa8SsqEl|F zh99}~g{P8);p9W0pjZ=T;%Hr5>ZobotgO;8r)gGIJ^n$1&FOit5s3&E7+u>p96#_10d7YWN*7`N zyS6w^b+W@8yS=fI1n8NH!n(r#AlBq`^mOorkdDhO9PJ;!-`x0&<}}_R8@QVoe zGA!vR!XhC4^aj)wsr*cLRmjSB3l8oG%Hy-3K0L!$%Q$gjGna8Xp?d!tmLbn3YZ|gu z(pA){I5h!9_P9KEh-N%5#;LEv8oOnYbFw)3R7g#2vJ8~j9p93o+r4I2A#)vmV`3&M zssmTIehUwemo0d{C1=>V+PAIMhmE%TdDb-)pG8r<&v?mQp8co~k$fgAeMe6>Pib*C zOq6%ndA8IdTwxX&9**DjFoibSol1hlP(^?Pbr%i)dH>+~Q86!N%C=9QUaV7x;>KgN zAnHkwKg9!S#RalX^JKL5#S|T?LD%;ZK7+&V_`vI;je&Sas^sY|U>jTS`t~=SudH_o z=V?G&&K)YhnB)VD+?PJ;C2BGH5Px(ivKX{1^o74pcvwYmeVAOgr#zO;$~vxM$9!qp4Ol=b&StxdnDvwR*U1!!Vv zW$*uf2xUquls0~md{NZteUa^Y;gK^Mt(wO>7Rw-2)YvwB<+d;Avx_@n?}qaqG0Q8W zSiqb2&9H!4q(eDx%sqKJ46;}o|31)97s#v+BEoV^YgS*y_D*Dz8hU;g0c&NvV}4&7 z+SD}|pVNDQqPvqY*FdBHWvU82HqO%2hpqUk)9dkLc|8c=ENIFnmXRY)wPO0C^ zN2G`-3UF)&B0L9Aa~afd;I&t#Ewy(pYC*~&?a}peRv~|cw8YSKA`?MQ#xC?_RPcO+ z3xLUJ387Ccm$suu#!>^>-O&}MXI&1%k4!mz2d^j@+V_Im+MUB^5^aI(TD!O~=SN#= zbmrLI03WrSrK8<&2#|sulk~QgGmqw_PdEZbDc0)$J-ZKN*PN4H&Agen>Mj+Cr`x0H zK^6K9ZydiQNVi^?46WwnFYW=Rd`v*^)JmLVUFBO!HQDh2deuoZANq3tgP_box`7wW zgIU+A;U1YU_rp3~tcz#G_e%VxM}YP6jx$To<12UpXwm8UI86+YJ>8EZMHMX*!F?X)A3YH{`fQJm2q0%=}DRtO=p1n9gMs?@xi>dLO)?bll zZ~O4KR#SbF-Wcu7MX#DXf5sSM8x*$jtHi&%z7vs-&;m3#!>u*gsFBe|zH;>5B+I+_L^g38Wwl*~i>?BjZYYkh0`8(}V%(024nKLHi#!|Ho% ziqVwIS|0xf2;96l4!`V21t{fN-p<;75O}gq%lYevr7upe!5e{|Lyl;z6$O~-1GJc@k=3>pY5*2~f9yGI}4G%J{vw;ynbl9QXNe^EIMo2EWK z&ErI#*K}FFh7RGq@+l-SF=34-^}@Ci(h0YXpAzIo;D@#*M`gPd7)A;9VygcHjUFbsEO(hxt$%cU8@!)vlzq~<~o>%W?emT zI%>31yQYVx#P!Fl$vJP4`1b>*2zZU1SNOA`B!kv(-`W8cD*>ojx-qL~J&7|!Xb}97 zmROIWq4Vf06^X9l4-pahvOE?&9mu<6F%+$<4rClAU(k#-R(0Ax$;Q&-MRfyVs@aHo z2V8biUf{O1v9Wolrx#gUTk99**!bgz@|DsiFwp-+142q_Yu}&x9Py*hDFENa|5Vkm z{drY)^0jfEw6z_8)c>NTaJNr@mr?c^=3xU-PL*Wnld>wauNN-OXXQK5?%uK8V@au- z`hi4J=d1EZxT~A$0c}ijsl5D8=VXHG9B=zO$*y2j*U`OargFg@XR|W5gcsOEuevvf z#RmXPG=(oD=wE>w{e@rL(4e!o7b#$AN$>12DE;{HG!0!r+Qm;xD$h59at&lY6H3%+ zs}YOuUk`-6ViTfvc~(ktHaK)TdMEgCMIX16{#w)OpkhIC{HKQ7&>3J{Wm#Fw&hfA8 z?OkZ+xxb+F^<`iz4KicvX-jIhLNl^ zqQ$HrmrRL@(F2D+3f>_uwVSR0YXQHrS-?l3I21cy7oyVxUv+T`Xs#Dgr3Pj|l)yT5 ziuCh$_8`t5G&l4XB67N)q{H~N2<6D0pL~8b-660GLiGQb$C{QJB%AR6`@X8mBVuDi zY050m?V_jQsTmm?doyMK5Q6`bJK5XYBQ7omfyPq)UwkkC;WLG`{Z|wRcuSYj-ny%u zy;L>67w&$GtryE5lotHk0DePKI^n!c@r?6^)0F_-c7^*_E2@dvq2@hJN{$0!=fpek zZk9H+qB&w?SS2u_GhU;?ZF~ZM$MO~Y>aQlxa>0t+=Zd59774&K=lTX|LUcIMF{B+n z5UdXbo%eGL;gtnpdWzoku|{`W z>u^W&LqHS*J;E#SYu`RU_uNz{W1JC)8viCUSUx<&Twa~2;!3ZHQHl|K<7g60C*>hO z_HxWB#Y`2?Gm;<1*d2GvcCEccaElOIyC9Vk1VMCF^^t_;%U&|A9YLLZjsb%U;?rBV zMv}c9I3mG~J!?5b5*P5&So-LHVfL4^O;-RO1IVRqr%E;iq%fCXr-^}XFnWftV+;$k zcW@N@mXUGD;%pP|+E1vA_YJtCUrKm)4=-ov%aaP4^B<(CV~ds=5Nao-g@ih7*lPua zo}nRJm|f;HoEq$<_wF6DFZ;>AX^I|;X0g`fb;r|)tiSq<6vrH3EC+f>G!S*{?{_n- z;lT33KS45l<82MSGJY_y8YMDJO{c{*)K*h@@*5y4a|~ri>*?Xwn#^Y2_uhP#($l@! z^sRw$bly3kDe(_H|9}b9cJ4*Kvt_UJzhtPyAPJVJpFP;2;_Xp$aY6AW0Me)L=Rb{G zT%W+MuUM!0vEmL6H5{!Y+&f;dJNmOdbE36s^0b|S$%EtZDub_?ndA9sX`<7nVXqvN zg4<+!Noap}jE|b!R|!pi5de4xr_+4T(M=sdlKE*L$Xwqi8mKF$5GSXKq%{AKhlMW- zLa82e#yRUyP{eju&gAcy;S?CEAlfloxu}K6M#jsga|}9~4(=EB^~;~? z6vI1}CTBg#Gk8WqJUTJerVqeTJ?tbTOP?^ty$+6+RW;8l94Baug!Jm%#_d3{J?|VJ za0Z(?s0q~fXaEN$|3=SlrHzJ@lM`4NIrLC{`&L6ohwJ}}9)D|bZFTiS>A#dOA6!QH z8aVpeego()2-*LwubCxHI{%ux7;KDV-;JqI?F$CXFph5t;ogb(heCaybRB7q-bZ)y zi3k|E(WQkMj(^ASPtKopdMcK?{dJN0a6WrE3&=#J_s$6i&3ogUkTYUUXP07J^nfP3 zMRLx}k^i);(a9-*^xD6}r11D;Yi?&JEaTvu*4=c7Dx4fNL_98U&APYfM%!i<9&mo&M$v-9Jrl^f>{{oc$#I|u{k7!uu%3Y@p1brO$wm*6jOZ<=YiSN+)Ow_wRu$#1T` z7}&b(C@bx=zDnF}6dWy5Juq-;af& zJrdftk_*Fp84PBRCK0oT4mU_{gKKwzvC*8k<%4x- z(o9r8;r(-r7Vt`gW@7ADR>b$WL!YUr2-miB%f=LxJ0kEzR#gt6AN4;NjJSWh80!%3)~>^Jh{EAW)O)q*3udw3G!w%2wsU z!kf65_`b2fs+*BU^~nxPfF%StMzZ^OfMenoGf)Iq63%7lko$lP!$XI4psJ0XM_|Mo z7WZ2|D)NYW?|rPZ4F4KaLZqcc0sD7ebr@g@QlliJaxSYucL5;6gBw>n{@q#poxMrU zWZ!<4;H*@wz*ZPJ8yW-*Yaj4cR?Zz9MEj_#lY_er3%;Lc`lTqW1nGUisdsM>@91WN z{m4sAq6q&o4a-*_RX;QLd?~xgwB2lLlFCSwRp4!s{hhe1U?;Z`BU9|i+daMeOf~9B z%KM4mm=S>_L0=WTx(k`mnRsr2w-VSv(>m_{WqBD}VPAg8+&(@2QkD=x6WBz%7NuqA zexnq(ufQuO{3W{omwg`fy53`-U-Ab_e*?^k{d{0{KX$FeVCh<5CF!VLzC~d`HpIR+ zrR;-%$U1<%QJTB*Q-Qam#`uggq8G?89KIXs05;ks8{caKnfD(YIh1qqhdC{+*ZQ4` zZ}J#~+n1~H02TB{3{kZ1q0aVpXp)+m67b;hu8qjNc|(lO4%|L2h@q%sd@2YSe5V)m z*fM4aucw_xA%r~!em>#!Vy`i^0fyx#V&~f>U*xzGHiF*HelPUTn&D`4X>?{(HpIZUSTT>KgEi~)p|Uw>h7p*kui1xE942_2B4Wr@H1SNs)7)tbP7VYpLY zccBxv=D=#6|hB33)5jG3#d@%@r<<@|e{a#)HOt_D|ZGLCY;+ z6Dp^4`BEfXFRnYLsJ@ z$z*(gq})(I=~sw#&)eNY-$)w4kE!IkF~b@kQ`?&F$=dN9e}8iCX6NbLv8I{XCn90@ z#IE4woV9quxlIK*G44AASJvCN_XgTVnfs22UnT^uWtbZbQXf)&a1!z2+YUA8eV2ki z;Zi45VE6_h_kuLE9MUZtHi&O;7wpE@_u8isAu3Lo^A^=Q&Wjq^V@qwSefZ&qeUWBr zIRlqzm98YE+BhNNCz=1AU#Kr*8QqS5&~`Kw=`(D#ga$oyh`wU{Eh#xy{V4)y-oG_M z%#82rK*BB0@&h#NZLht23D90o?Uz?Y$bIEE z`P@Yo?ZLZ$W;a{83ib+XNi=Qqpztw!=FD#{=@bdAJa*8s!^u(dg5{VRt78cENc_TB z6IhyrK2zh%G6fR=D%G$w8lU+Wkk9kaQs?Hodm%(p05D}b{3vl@A%A90=iAvE-aUx} zq=+-J7{bR%rN7?uhUozlZm5x#IOx-x!ty!hz=vTfLVSB7lV6U%_)~-AyI4F(RO2>Z z*&f?l9r6uKLqt-mf6yl6vw!z{2_BtlV|D!HUP0kh_1HY$X`eCIX{UC1 zTTTKg?jqaEQdgr;PCt6(xQbADkd-b{M9W@3%JfJ?+D5K-(d;eKH!xyN3^6DYfdYtY zzrMA7Bi!5F)^Dhu3l3QfStr*Gr#PjYXtAlPRdgZ}3>7-cOuSl_|p3pCOd+e4*T|zQ^zKGc~wMMdxLU<56D^=RLYSLAp^gxfM-h5;H1xA-Iii3;D05bc zk zoPn{K+Uf^-na!}`HvdHYhMZ0|n9PG?X-G#l+ESR^C&+SJ&e;R?j+~G-<|afhytcmk zk+-*wxK!`L1nF93<;C;BL*^61^t!r`9k2Yoz~#KvD$vmF6{%D*{ja+E+#xh)UrVV-k55*^AQq|A zy8nm0w+ySQUAM;tq(MqLm6jG1kOl#z6{T6QKuTJqOS(a%TT*F|78c#z-6-9$h$ZlQ z(DyxO?|sg7_Br4FAO0V>E+(DKjcHULkr$}iK@(v}iQ7CJ&rXQk zXAkuuE+1@WlXbS3d%t_Qhi*`0w3#v$wJEf0f7~M5)#7yNug50cTA7pM5!~ltvJmi5 zrvJ2`^qKlbHuQ_{qx^Z;StOT9)Q@~xpE-EXA{pFn<{%A<;Bk{D|o6o$R zd7)x0Q!6i8YFKk2oVq4AWA3gpd5tW9z%Hl0#*3~FZQdykSe}iZ3Iw%aj@ptkoqDRP z0tYJNM=M1>D3HX2^tM42jfD(}DI-{YYL-1oKDm8tEDO#l@mqff$3I4@s!>(W<@;3;+wbu8qWtD`}i%%J3#M$UU z{_AraiS029U29~g3+?)w^JYHRM+zfw=)q7(Jnbp6Y9~1jYi<2Zy6J>!2VR4tl=AGd8uhrv_iOQDs7s zt1?O`c*YCKRzyO0##c~t{N_4*Pu33NN^pMV>pk>nxDRSmF8J3Z(H}eyl;2RbcUFAi zw(H|i*mn-L-EBiYJYyJeRC>*=`TB$GRMdA8c!%a?^*(??F0oUS!kWSeR%{g}ZYhO_ zYiw@@#{iP2i%UlDwAS#KRG4UYeZ4d~Zk@5|R(e-A1u00n?YOBz9(r^0NA+4Op{+fPMjVfKx98Ul^d71jybFZnzO3?t1{R-=dMx**n)~aya%bOb^;GkoR=O z0I{*mC%DvgL5pwo`pc`L%VqacI7!+q=en4-fe+Z%zU{tTFTS}6?1qsAW3S{aeyHSZ zj^hZZ$)qpP)hQXCqh__RfjgbQD<>nvC^MuyiLO(3N8dXx5To1-j|pf_k0B0DsLMv> zAe%CLqP1wFS)2w#9t=&Bke1_(WsLdnRt8I@}=Olu-iGb zb8>O%RFp|&hv7~?nO+FQc^6G6BEskS+2j%cO}(T~BhSP?I3=N)T@B9VCS8$HXOA%48E>A>pV{j*>}+)%!fDc6pFb$??oU4i?7i{xlRE?6&ly zlu(2>G@jg_)h%+x5iW91$PMjs2DZ*P4B_X!?Z9lHVfp-nk|fFMPR(tYJKpD-E!3Qj zSJ360ILRbRQ6CUA?3n{Us88^2ihsWchSz0ZKATu0+t%@$^5Vj$qz#)UN|S4wRwi%Q zWEh+G8VLL;vZZ{9qIJjJUvA)_`jH{>A;~5bwqYQ^sp-vVWrg8jFP#{Go~oglK0kWb z()-u=iv;p-zm`j+2z=jHA7L{eeUV z?s37z?xHo5LU^86lb0)ZS71}~d(rCXJsxfj`diQ-0w*JL`hvLqRSiDLvL?RS2pZhX zia0;zw!oB;?pC@rEK^@m35mp_@}j_kAlqavwM*>swM*D7CVxPO+ z*^35J{SC3pOS&B}EmCwBmo|er`unSU>+2srjy+BpkAmlsl8>@5>WrJeMUu&3(Ovy8 zYwv;aJop3CNkJSY=hSMp3pQ-C&rZFG+g_+ZRY}s^k-({8ogcQ@mL31FnRe^P*9Yru zV&2e;$GO#{o>wras8Hn@Gd`AE9QNgaP{<~lqG7q9X9$YWHurQH7X96F{0d>RWu5Tz zdjq!j+Rj>dw`)qoPUQg-5d7}To~_3PRl&E)0F-=cbPK1l$bqBWi2-0pvL3p)fSMOmbb?`XdSM9KCC)z#~dES*#NM2`LAwSOYBu z)EpQDMe1Nn{}1f?C%Hcr23aCN%88Ld?@w^7gUd0%cl7O+0LA!Dsp+G~WIic9JeJae zkN1M5+YXAoe&JOVE`oe#+x3f6!^T3U?Vg^B6+hVoNncCq6a~gNJ!Eu8M_*?rI{Pj{ zVNk$Sl#$6B%TJ}REBzcmqG(y36u*=ZhYfE#YdV^g>+Qp8-^SS#o1>-{$!5IFa@YSv ziJYHo$u0Z|Ey|ZtqdfCf{KcO?=T(&RG`r8FdW8^}lZQq;kp4MBvzSwrqcXnJoJDV2K=FH=m4POpLk;HDQX1 z%rL`9`>BL+a?oV7vF&n|n_SiZg3))P>P9oTMV|5YobXMdG0JsT%wQ*0x;>{$XDyh? zi3HdqFz83>TS-Ker2^*sB#bov5Xt(%5QyUduL7}XifY*NVaT!S%od>C=~l_xH^e=guwYi;YB_r5ueb+Sbj$9 zEO~#n+H~Y2Ja?j71F2_Lv7}1?tIyqUaQf&juYptX#oO%d*9+PV%k>mbTvHpl-Pv4m z&%{+l(;DOB>X9Gkrn5kdBS;){97G|MoFIS3Zw(_TrSSQg8qLQ-DsPMb%&kC6}7%ucv!GdgU(pfk|nv*v4{PL zbL;55;6e{c(=%WkrneN?r$IHL5!l%lZlh-rfUm5~a0EG7U6m|$nQxXPHg2m&t=%^t z8%DwjRWULNlh6NE;^K*+Ff7H*FBJdAo%H>2EF^jt_p;#Dy0LFF3q1u~Qx@uQM!34; zyz6*PujPNo2QXKLzm0c`4PNWnF4pdy|)7 zQ|XTSy9K|t)#jOnX=$jaZP)GTrDAf}G9lFI>4&_=NFmzQC7vdhI9D=@xq2D4Gmh1H zytG?=JNQ4gLXP_TP5F4Gu#4%tFLG#Ib?WroYr~N!GfEMm9!EC1wOhovVpy_KoVLXB42d`p(o(a3|qAfa7>t?%i>;rDxIAotnj`X(Y& zp8lU+0Hv8&^NHVJEre^E#4 zhHFs;-b_>;RyajBvKY`rq20Ie#GvTyok#qT^GW4-d(yFV5Wc7X?dk!VV2oiwXU#$y zj;(RAtT^%T9YN$Tt;UmO-&@2g>^9S0)EYA!hT-D>SPaFTpJ(}2MQS{8RurEwa zX{K*>fVLr;i{LI$2@xg7(d7r@KExWBWlt zS?FO{}B3{v(Hb}61#M?<{jOV;SowutE+B!gQhJ>&?mf)l@C@qWu14toQmo0;F?=rb9iT)SO{{h39>c-Pvhv_yufmW-{5Yut)!fb;`b_^=icDnC1x3CRuj%L!&`@3t#w;Kf>-HuRq%Fx`p zR4(OPC(CHFCwqrCZSYQ9(7zUEHlw_*f1d_k6JW{s$iJ$=IltWoI$$MqmB!*o>qpN- zvhQ%xdXJ0im8Q15@kGPXFElF1%9A&+`g;&gJ^$I)sTv9RNGSy>y`4CXzar|4pH0s` zd)qFl#_I%I?5MYj6)R9G@Uw^CF{M@V9#1C%!8sNTrp&{UqopxnK<7HtgZ;maRZ>#r z5ClblK&*wDvX6Ks`opg>sv(N=F`|nyGPdLDdX$Ty&?fvEJ8$9=iC@|zzR;AFJJ{EGmz1WdPyJn4F-AMD%5R@ulcEHz0vi8 zw!`8AG*U)w^P&PA?Cl&GCaDYUtnjt_^NC;=7rhxQm#hHhyN%dzvI(MmvVrY}= zka3?)TmfZLU=n6x-6r2P=}YufeA=deA+-*Z_Rt10e_Sz+b+h6#orre-SbpV4Mc9Zs_4xZ#{)4sm6EEm9B6)S9XA! zP+p!Pagd4m#E~WB3Tv&m-JlA{t2i8<2G^4AYH-LD1_hOru*bc9z`Rw#Sje6jrnqmA zOZ|=?y+wqF%!T}(cR^arl`TAf&(yBP@0&vo7tS}7^fcl-JLQi`I%k6zr_4&8xX@rb zF0>_2n#5PZUNO4Jvtbk3>fx?PRY6l>nApRJ$15H(t5{AncUtm)$`5_by__$Fe6b8Q z4xv@C)o0(%>|fOWLXnOZIELojGSPK5{`|0g@#ia)jW15~8_)s7MB2Ha*69^jkyd|` z3op9G{y|F$@OYZeP$;aR&`2>K8J4K^!hB#^_=0T7rxSLMTN#&NUKrR9dcOHq4-g~d z`BkPC`FIKIkHpQJZF1{hq?<&AkQ~g;3m~(tp_X-|?mWhpg{^p!u=RMw;`$Ts|Mj@D znTZX@a6Q&W2^;KqCO{ULQ+NHbzi7|&HSp29zAMmiC3fKGRBt3OOl?d*4`nr=PPQ?w z$x?Txr!@Wgrq~4@pTt)I=&E2rc;8}f-NW&_Eais2P@Z>n*_CD5(mTyiKJqs9j~fh` zf9Ob!Gh*=B^Z1sr!i_N^TXXwJ3?Kfe3Q5brsxP#?;~=U zdsot2I`4FJ**J=a43v{@oEJg89YB`mpg^m|wr5ykckWstF^_?*T|3%n@fyj>s6Pe^ z;W*y8*nD+ttx~n>Y1^!Wf)rjPu=q3VA*FeF$@HOB+Lc#^1Sn9}S;p2drdA8w=Xh|d zzH3Q?L3d@@a7&#lmt0ii<1QwQT`zvkzlD#DFyvEJ%a2Kd$(&@LrYl5zY4&Z^Oy|Bu z4y#xB|CbH^9CS6?ed!%Z!?i@^j9kTQ{ER_sUYX%AwCc+uhfV(#p=H1|uJl&G{kERF z0kPF|O;+SqlR}@H2A|=Z<&Eb<)`bf51B@-Hfw#`1o;WP`FB3F40T5%B9FunkxmUwG zmylyojrd*MsAT=gpVG|_%<;;JBAU4m*x5f>Nm%dMDTEa5@=>ZyN2Jo<|AH~KSWKU0 zYyHWI7?kX|(~5EFzAd;kM;8zW&JuaYwvBu1dt6g-i>Fj_;vv{_!$Tz#pzqnV>{^elWK9%Wbq`nR30l3akZQ^ z()Z5340;~MXPU|cZWJTFJI61y7U?Dj|(t+hWXQ92Lz;N+V-0ByrfFD9e2SDCeg;^ zc%bEspkz!qnO1#rp>*VN5|(4ka(L7@&w*s4e8)%4fh-5BkiGSqJ0FF1Q@S{c;K6Z* zUSbkXW(#wPjrG0vE41RSjy%S#qZqJt=J(|_1d%GfzwmvTtYe~_XqW`=H7BteAifE$ zmR!C~t0%N1aeG&_1MuxO(GBdTbvN1&Y`(}kLT zOA+j==s_EzIkiE;Y1PD3{)(DL%RNBx3De{CmC2|zK9<-Thep3cEGkXli_t%0&c$RFTc#>D?zJJVQ&5L3)-yBA4Kk{7!oU4iZ z^a&2J*3Vy_EQ&;@e2BK*B3Kq7F zGk9aGtENBG0?EJfqd6CjjFONX6;_lqig>DThhTeMM(Udy`RU7yW2IZhPHq+Dy=Q;e zXO4E=8m1HrP9X2}C>o@l(UX$?@Bk^}JI8oBZM~DS@ua6zc9k)Po2wKG!9UU(b6ekh zI-a{>eE+Y|;g)RJ-n^XKl1h--6=UE`8NpbGSX5;TH2H!DadFBb_6v8{Vzk*gsZGFe z&-WpU>gWb#M$o|H*QMYc00oWz4+{? ze|aY$v)iR~ACsum&bP`vcY;r*Z11TWo@i4&OrCqF3e6{l?WwezGT9DX2f*@9X>WZk z>W<;eXU8A-7B7#Wu{J<{ zpjWpmEfzBtO6!~WLgG_B=^rTOg{)b`G9lEGlzkAHWaC(DWbIZu!7%#YjwnW<6!Nay zLbnuB7(JBODC*}f(X;WMdi()!{(+rAk$7tXg@YT5t1*|Jgz))*N!>fMv}(u2!I zG-)2&f6A*wh#;sf!S!>>dmOYN6a9qul;2&0d5n1Xqy|g|RJmMUd+mJzrL}ZVK8Xjr zMp13QaC1>NysBw7{nR+ur29#cbWuh(5;H7&G!~a5K6 zXLA*H3&R=e$fa`vN8^oA=wmy1;X~UdFH^BI8eP8|rE&uKXNO0I=_MY1ao}qw$TU7{ z$H!QbB9w5Tg?)*Wq%{V%A$_gXhcBcSlzLOw>M-0EtYl!y_&InF`uL6KNS!sUmU3FG zDA~CTb@pX`-n;EEjbPn$_$1NlFBT?r>u(9w_PpfA!Dne z+#Z6fab1)HoWZ{tenuj&O6BiiK(o5T=}WUG-H`tS201o33{>$rTTY=63V}wJ2JCp! z=DHD!Db4%I8;c6Lbrh-al^$itlNVWja8Z>iZ^tvDU!+~~7-#Tp&Cxe*voa^`EtQhE>i?g-DmO`N!s6yphO*cN$B z+Tzc=YjOXB+uItO;i^`tUo|a))GRFzI&v_ozpg!!Qpe+Px%gU9AtB+*HNJhvSJ6el z*a+Q_Noe5J>(P+$&|~7k9t@)K;*uUY|Msh>0%ILNt6x&=(=YsUlQdx;;Td1ZkAr=( zU~eNjruFLZTOH;KG$kp0u5uiP8Te4qPE)BMy1)x5)pot`VAo|NK)H72)~#ABjap zHfA4xxmTH(WY2+Tdwy$|6QPAaX>9D*;WBYprD)=N``0hW`OTkSC`}|KEu~lS5-v+Z z9r?(#67ESVTfdGzS%$5*q(^?EVA?3P=~eQRK1A)EamFjF5^E7oCv|_sB>R%f#r_T9 z%on#vWq_4F3~`;m-{GHv_p_+SPx*6Tsw}lB`RDmo{6e9QQmq5*^3)5CU{EF(C~m-o6d~Qq=R2occB%oC^1$6ps)a zM%gQsanEYw0xwM&s(f-YZpH7ug0`oACv2z*a14;ALE5rm6sOPB zWkE(p5GSoe5j3VGo%t*m{HC7e)pR~I;=O$=9I>0y82!d^XyqyJF4;AiiE{+24nWnd z;^4Hpv5Iw!s-#%lM&{ck^Op0Je?^)2S*-)(ptr8-xInG3YJqR896~K?fUzc_#uEPYJX3c+#(e> z`2r6*E<(D$oo+9#u`5juh~l%prP>Bp zHAD4?u1E$@#M)Tr%$}8Md83E-44Kkta%DD+r1nAlP;NlcGi!dyufk3UL`gy$HuE7b=(+YWHYP>aME^+KYkj$TSVAq=43L2c7p-|jwPtfp(p;^K>S#$<2jWku7y)ey16 zsggQcSXS|IwCSewb!oGSw0WzZpM)A2Nj3szZ(-jCBb+_vlX7At%YyWy$p;X=mf^}7?Bz)GP z60r7LxCJiQq$k7mBYjU?oZ1jdK%$U0$F}&9#H(iNUVM6MAv=kj^vsNVHp=H15}c$J zo{|AMZ-@a6$u_I6!!LK!-3Oqe7bnSe5gtoyFdT5^lyLW)&<>tV8cx47Nhr8GZzL+k zCWKRy54#1ebjN#BLsL7bZTbNXs69|kGcP9v7JuxKH{4dbPISK%{J4N*?bA|Eb4@-S zaZOby*zk00+_UY7@fwf$z3g%c@W@S^{yaI2R%kJE$-H$k*u05u?PKQ=!{v?VFUilQ z;6!9tPuJY0SM230e{uR2tyWP;glxQKsANFN*JBy8*ANiYw0LvmCyGBOrc>NRHVdSG zfES>(xXG7_Z-GnD#}v>={&T;a%c>z)OnQtv+bE}Y3{oJ<&qKX9%DQp)d7pq-yfBVD zSW|A=@q1?RadUY6u%_4cfxiT=ePLGddo_yQPh9$|aPZ^ocmmZE2QC+aE-8HKeex02 z#}ndPgP0PV@K>|S16cUR@kis_bMVT&(8p3E7`Ur4rtcp;?YTo)PR%c4-Y?)4n_O!8 zj3%@@p6dnSK6CW6yT3NY0yHg!^{|lo;MvS=Bc@eT9zJn9F*(jFs+kj3$ITK!W{!2g2SY`|m`lp{gK*T}?2-m55ZhVo9?sDAGN&Zpy4wT$`^ z>kBzo3EmNGrW%QoPEB-JG?^*mQT?!BiNY#uJbJlp;3|THA(iaeUo;e};n`4Q#u)e~$cc;T(5Pf>DQmDua%5c-CG~WqR z-C@VK2B(JN@_{YLaV2wxerhQxMG!0ZGhvjY)|tWS*P*mddK)Z3rkVA_zI98y1*EMp z%};odw8(#rP|pp}t*s4@yAzmlKO&x13QCEXYo2JyeXtj+Z5!$0X+PqT&mKJ&nK63v=9x^q$*#BB@{4t* zWM8voTvL0khKx*Oh4jSq*nhh`Se{NRCkmVw76*U$ZL5Z`%CO+wsrkAF+q6F(%;-Uj zR#U4c-VE!rMY2)A?5In|R~W!)^ri`X=G=msrorWMB{CPvJxQ~Gg(!HlPSxE}H|IAP z=6S0xg)v?UwjShRZ19GWWY_J^)^#=;QaMG^ zvQ{ATY`8!4?PJ&a%U5Cyk5+a7(}?`4`8&#Y^7NAKAb(3W~V>b`vAWlnrb88kwob3#`Y6(slrCSquVBb0VVzv*ItzosZ^IGp8nR z55x&AK7E7lM&u2RCJ3&X0?~bw5$udsR{G#Osrz^Sa$a{(m%R<^wK2^p@X7^Qx!Evd z@6-^OifP31?%6?JMh0<?s$q9_eKu==?Va;5h>umfBSdvlVg|-XfN(V zPPCqYuPz;%pJpJu!vU`))ruY|!v1yazw3sL3yI z=HTs$HU6qO;&GeA2&Fx}+*;V%>IEP6ThaSm3|_uQ_z@(0KSNZtw3aj-&@e^)ib<@vr)c^d92}FC93<1zPi!2I8mG!k zY=3kTEO}f!TuJ?FCmhD(-8t`_aIh4C@^rpL*G|@MK$bxFhJK{+KA*Y=O7hM(qAhIUl%NVzrLBFs7*TNFdjHZ9qbGcg(yyK#SKu^0YxdJi;_eFmg9_x=h`So zq0}H#^J!2UN_L~fXzCm=H5+(V?)~Wn9gEYsqy{>+G@K<$LRVyg^=9OkmFWa zRI&OmG85u#^|!P(?rEGM*^2Rt+{#H_~f00lO)-y zF)Gvp4>571y!3t)*Jt~d#*YF&2`xTA)$w`#ma`z71OU=sN-i2Fia#D_n4EaK3=x4f z@ozSWr^aB_&pNpx>PhxteHG>tJf8E&=@YO?hwnarz5DyhW?Vb37Yac3;Z8p)z##>x z7J9sk=VNP3mSY6l0Mr%D>vYI*yI_-rIEzk60#XO+V3wG{hm=;N2@+CTRfs zD1##*g4knLIikp`->XMA*tNc>b@g%yFe7B6!Vmi^*V1l(@FL(0aBbpYq$(@>zN@$J zLdAjgcLJ9#!c|w_XH=!$0VKFla`{u z>KFcNAIzjIORJ|4es2}Ne;e%rm}W(PkEQdxzij8+>tk9Ro+7Sd`VMZ~L34o{7ws!` zb$L%YLJt*cVH^CT)&7pt73N^8FG7Eh2rLF(cZr+!Gp{g!#E|GN7ZAqSBWcut=qncl ziX*P2CF}t5qEj3WNj;4jAHedpk`ds0Io`}pe+Qmm#;s5tI%SIo2#BiBxh~eO-XQ-)(sYX{g{S|w|36Xk;gSYFU}rb!cOFI!0@<2JeR()jkb=wrB&n*TQG-WZcC z*XgEQr(E8JxemA7`dU!XO4z|jCTek;NimuI7nQX;uhq5_0~3Rsr`#u)D;(=EP5#nx zul8@Dy5gG{xQh!gWkh~I;O*{8&geiiZ6TCv{diy?>HxeM|;hfFv8qfn- zE)WYfvoPc5Oqr)geItI-g|6?+j-C^w&ch6^p?d@Z=2MrU26|Bp?{%8_U8DBcw`5E@ z`152dAtMe}+7)yuDM?fJp3M>lI-sl|5xqz;8yrG?e|*r|L(Ych4~41)mOPeOOZ-MR zro8^bnq~A8F86bhTU&-}rKS_A3L&utMiLc1Dl-2zRsURzNe<}ABUFde4%|m5$MaoS#Zuv8@ z*lYSnKT7rH=J-EmMQ>u^b;Y1x2QAgz(7bMbWWvKaIJ~?X zVb5bm$@*|S)wGfI6DTqB%lS-qVSxP3_=)Bu@)xdH9;5Hue+#C2{t#Bd(H>6D{JrpR!>Ob?wjEG_ z<**c=xP_aO!}9K(xbY~K6BU-PhYN&E9& zVs?xLWh+qUV|J2lryCWMhDdG>&55tvO_lC{46|;=ra9H_c%5fs*Ap1@va+yGjHY29iOFA@!mD} zOl#E9dWQz_Udm~#PY>SaznlZ)PbyX3 z%gL2}e={rYP~Hsv$V99tU+t8)Az8|>$)o!ium61%u?iQc%MOc7Cy<*IujCSZ_XDH; z+C#D!0lJ8y&S&nwoSS@Oi zgnDUtE-BWYYf5zLtgx~_Eo8ABm>68NrW>D{rh}T_>gAQ><{hD2t;yGbO`&II*$qZ; zHIMfFB6{)(&i_gq!~V|$etu@Q@a-Kj#af>fy>-guLdn{g%zp~D6|^Z6V>zXx{Qb`a z3-!+&&fx%90zB?NO%ftCr|r7>wWka8svrWlHn+ASqoP7onU%|)Jb*mw>FM#CINS`+~$>qDV9X!aJ}uxgF3B}TNP**m;L#E*h3(%{#(Qj#$+>=OR6w77R2s0 zlmE?_oLL~wk4W^5S|3bKO&d;+Zg}@Dz|5*YTd}KfkgiW7hr6IWX5ob!8vTPgMbh z#~b_%)T>^6acD7(;I+7OaV*5-s;hFQ^Dt6A6=1Hv^HKX~_%Hjz=ej6mPL6*{T8BGq z2A+|>8*cpZq=r0qy|ZU|eR+o2Y~g$rBmbV3cHz`_GmMg-+kBP%#uEPHWisZ1GCoWh zL@|HN`bI1H?jOH<`2J<3_{u&cp0>x|{?L+rTJ!!hUo#%!coN+p)?(M8s4V8d2+aDc z*66+%jp`La5?a`;kh7|01g;jh)0O@JXm?q6P>Q!Zd|z4jc42KgGG(7HS|qqJ zasyV*Z#eO5etDH}4T0+L<)3aM|LkjUlb3%vQgG(nQ&do}g>MTAyBuSj?up^ow_Am@ zjk1p1?pinya!-IRApPZnw)R?;=$GA|gq;a$j^%E=2-l7@El7DWy+1aZH@9}a1)4o1 z&_s4nK^Up<7&hrBjAV(pg9Nei{$M>e{Qx1k{(L70(lk#F-vT04L>DgYM1tcT1o{Np33Ph3j>?xpdUjWLj64h|3c zN2c@O9OL>G+Zp#ohGcmHlcPV=)(#v0lWxEeWh*1H1pZT#YK64Mh1n1{KfxJ2asC6; zvj{5LS>jb+3Q+wu>}-}!plPH@0vHiBA2Nuwav^YRK2lp!|rAJ#9596K2O zMNMal*%^dhbQsH0`{RN{k6-H_w?7OGE^7K=ITlZ=d%I8Z6k2yhp+o<2i86MdqIQhA zl>3k-$I3alR9kZ{$T^5MBUf2O;9?RlQugY({&c=q3g{QwQT0SEu7t4%FvtLRM!4oslv`!B%wKR?Oe`b>Z; zfPbJv16;KKl5yUA_Dxyu5AgW6s^{jhz3BqIKo#cy@H})F28+P^<-e2+|NqDMhcZRc z|JUC}{+Uxj_3gs%7p7yQGWnHO*T98$`o5YRZRkyR9`G*roJTd0tEdG6#}mrhZVb07 zXFT>l{%OGUca`{`G-Cfbn{GH4THSI7lkGSW>|y(z-B}CH`d|Hq6}Pe?Wa|H5p{K%| z>|Xid3`<`1{@{={J#)y9pos-`KcJTSS3T@^KN2vGzf1anU2$6i|2EG)s0-~Jkj34Z zHj~hZU&iYjCBEzreS_z#%YZpM0)BY|H}_oCGIQ^gB>nkdypo+BU|sv~ZhBK5Ax+*C zpG5Kju$C_S@nm86ZV3!F%3wHt<2DDU%KF0ucz;gKUBlnBgTJf4|D?MGivu6rD+*Y1 zV{vc>uiuL=(+Uy7P-37GeLLqe`!8ttpK0hZFySlB3bOA-REG3yU|oX6f2&?o_s(g# z){SXLcL&{$e9~KP=03a;)jDpru`dhco|C9-oI5e16zBd6Tn(P3I}Z{uyNU$#Jk)Qj z?WXl$CJuRf=m}pxUmDrEad-%9a(-9*?dek-xDE59TKSaxv??DA{mK-aIC2*rH)+er z#YDS=Fb@OoncvMbOi_#TyDs>T{J_gcA5T&y^dJGwBC(E6)XSb?t(EzvcQqFfKnnYZ z`>OKVYykT$=>OZ@(?cw0=FI4j%-XS>f~Q}bR4R+BKhOeQFl1MDx>E~_7~OQ9>Jal* zUB-sj(d12B1+O8tP`AZO8Z6+#Z-ig6T9Ee;219F4c@R~bA|5;iQ%8#fCS6S?B_W>3 zTXT6Qbr$C7QgEQo@FX<- z*oV`4oEDxZtIn)jSIYzW`In$b&PYyKa*U$!rKmk2K>dZLCM&-a3`?Mt+F@G*f5zC6 zy=N99;#Xm_dg-1c`i;GoCzU}&F&6_wEWC}CO}c7^*o~HbU>f6;h{vXT+Lv)-OWL!D z?aU#nC=K6T$32}Hk>6wIpQ8F}_FdnuZlA`dN*W2~<-3QDd>hl4lQ{(>b5`p6YfS^J z9##j5lSylBRj%=tdfT=qe)HqlcRXoCnWyZ!gLcR4mQQ>qppb|*8g0ErPyVw7ywV*9 zzmnofp7oe2++CO(3DN$?SE z18Ix>edYq6obdUvxH5l8gAZn9<4O&j5P%?3MeBT8FKca2WxTXfw0|WpSM19)p{Dx> zUM4?iIwf8Z>k3%5-8mFo5)8gf&TC3j9rBrZCX(nI#jL!1u+ov?S@pANuGSIY2q@*{ z<$ebl!(GRPCIPhuQ4zW&~4VH3n6LR1Cy5_DU|L%4^SSjuKxrJDmOYSv)ZFZ@O@K0w$XBNsEt*>aq1gd|lY#lNZR>wL@TvrHw?n;zio>5yuTc zo=%k+45e*h)z77Z`9u9r^CxwermF7UT0gabfWUk0y4M_jet!EWC(>qSxyK|Y7}qEb z@4E<>;$MH6{cevv4M7pKEK(qfhO-L4na`sTp;nVU)hED8SEe>CCpRoQ!AW@IdHS*IVAPlLA)4c#9Z|JaBZMSQT=e-pp!yH zM*m7F5$%RkXj+Q_BuoYOW?{%WqM#eWo^2QJhdgz4b>(~fSkC%I#6D7FL_~xZgyG4P zC(C2`>ciTj^uO*8_4LRWX1VL?QnRzOgT6;u?k`?M(&<}$O();l-KsU}AsHPVeFg?Q zIwl6X)}Qhm{JR+DX&;XUvwBs`pir2EwuK7M|~i6Y(R z-beOWq+D*E2hvNUjKB6Syim}66N)zPUO5Upeyp~`xehogj#uIQ~Z~ef15rH2- zTps@8u+Ie)Ys`<2GhN2H_~MsEtZ*Mn}`q(OJF{3O#=Sb_m-=FfN0UO)l&AKh%9Q9@?jd=qofUcHK4GOuNMs|uz&s?QfxTs04p;wd$Ne8hyfeAQ zHjnJM#{B~f&4>}JFz=JnuWtP=pt5bwn3W}7V`yZqJM3% zH3h3nj53Yh4x#n*Df6O(bkvW>j7m})ma|LDDq}>#tQ;*#va^BO&ayU3smIQx(X+i$ z!+z*0euAuXJH>TEpJvW#Dgr=Hiz_1D_R0t09Lu$7|`Kl0e1 zCwovqp(4oAZXsd0;{)4)DW14@2RoIw9z_f+ogLVHeFcB1;f}{IPdTKf?PW4RQ?_}< zq+I-l?s{2d|Hbpm6}HKaD`P+3V#)Uwq7PoZe@OWp(Vu=m7S<7ckB=tvV6riw-H?xl za(~ci8wR4&-$y6N=GB~Lv<4^l$%2H257w7ZlEtF@f4ISAs}4|$lKW*{x?fmmS5Q1Z zcbrtNT6}wjWHI?JaLxlKj)u)vSsq?T(M_}Xrd#PpX?|cWrjYIOJkjX5`civ>Mb}ZV zX2jPzX4Aszu)1;-f#~?q%OvCy14RZaHnW+@)ZOAABaR1oIkyE%2__TVZU?Mnmbwf$ z*S#En;i7!1E=q}^cGp05R&852KJbhq$(HUXUw6zw)U-wG^r%K~Zx&y&kR6`#u94wd zB*OGHt&JI~E944CDqdp;Bj2vw{7oRo_Tdoad_4-WG>=kP_H_)btc^P&P z+S*XomM9B&5gNf#H#e@Hyl%Z(uUKr`!S3u*kXlZ)oTRFtm43;SsbeN9KO(Oqn&30~ zW9uucSePX`S9%WQFe_2M-|+G~U4cd#vyQ?+`DpY#_n(Ak(jAN8!w^JeW=$#5z@g)^ z3X~uf@+6>_zRPKx!I`9(Wc>n*Xd&{Uc zx~L8GtsuqSrG?^@;2tPWaSFwq;ts{FE$*chx8hLTo#3Gq*PsD{6!#Daa?@A7?_2lR z{d?ESS~)YxnVDmIo@ei~_ui4}6Cm2j>5zt%yORI|KgK$>e{tWI*ej=J^qsaZGz$J$ zGVreY0l{v$n3ElT?CxL-nE9L>g8PBow%fi{NKL{?PUanxiFij$Mc*XE{Ve@L=%ueo zT1dl)p{?eWWD{`7R4maQE@7erl!1>48`*$eSI)5^jj6aenaSr-mmh+iKnSACRL0sD zFOrRQYWYdbuI`@*o3by*y)Ej5^WcT+o8>jpsf;+87fIrKRNf|jNX{0krhCC6LWsmW zQ0T4oKZuB_k#xnU!(y3Lep$U7#&;z)&i*!kW<~Bp3pW2YS7=x#E{^91b2G=VO~dL5 zBR^_8%4@}ytxtF4N0^-xW9DR@0?h31}eIofj9%CTxZ;GYfF})`qafh`MhZ2j_ z!>)TngfHor5-OL*-`uM;&gXvt=2}Kr)B?AvLptf> z*ewIA#Ye@=vj3N!DxW{c&=2$0(7DD!OHcRdakjSvj80FB)qW`B_&h%V^Lj)2BO0q_ z+KRF12rHz%p1g?(DxFOP;uk0qN({P?K!W^*GlFrq1P<36*2RY)7^WN!Ph}6mVLL7o zzvqnH=)oIJ8y2k>=vJ!DNC!X_=u1Gunf#pB(+D}U*$meA%98RwDt3R~w;}S$Si2%y zoDv~kYZPbk&VBY?ngJ&IVo$V<6z+G$#VugD?RE-oxyE`8o$P(d#4MW2+6hZGe6GSt z_h6y_!Zo1KWKs!63p0K58&xeQwxj~175UL4>0E(ffBP8oDJ681#*{;^=? z+yx-QS`8p+YTTg7$1{>IAToW4wcB&Aq!Rq{&O8M!x=yo{tBdd}{`OWrxTrhopn{#{iiYw+9=s(P9pet++)hMvI5;UAgbNw%=KIj?MH65)bbHWZ$iq7XhfEw zV@cQ0z~rW)_}e|n-Ps|D05Z~KtCm0{|C#e#{bT4yF>>{F8q|alglRaFA<8Z`EqEUr zXRRNs$0tul`Dm6mkQV$xX*5Wv5}xIuL~{6lBKhAX8->z2{5O(9u=_Ae%n$A#W13mo z(=a2Fihvuud_?YP6&*Q*LP#5KIOlw^Qs zgM*m5daXW|eUs(cH|TYzy;~#|_#+=TljaY7{C1x=^+O5n5$ra8T_8c0_v<}L?ZPdL z&*pPG`|HcgAjGMk&d9dJQ~bL?yge*d+D7AY7vYNiU^zzkYw@bu)4aN(oBKBvr&po% z=Wm}@8Dr>Ti#dvB#dD;Kt*viFP6#-xubVyMOQ3Br_<-g=Us#|moSl&f^1@bI4ygJ@ z9+ljz{@gj6Z{*+>(sefAo@#{&NlMr+*)Vt74V~Se>z=p9a}3bUuTeR}q53uU{OwNw zk$)RV#i)71ni8s6=@TIFOiXL6Ku_NWt9GaXBzh%K+8NPb$&qMM7@!;FWHnzC7$|H+ zQ?UjzXGD29KY!^*&Sg9#-O|n^&N#<7GfgHcSnk$z!a0X%>3L-)po0|a?p48dD>>${ z%68%Gj4E_mt*NuB+(;Rui>Xf-GI0*7}4EyUD} z+Tw7Nu%&LU7>=7p*vlUg#YIP!=|;3bI}apQ{Aob;;`)1`@_sM)mCSTCL6lS4=e_LHy)G z&PLsHUkZFyXCkcyOBc7A$*&55=*h3@jsS1=T;W4rj_RU);flkli{xRD20@x0DL2LV zgpVF4)`i&}kqYW`Ybx>#M8sE?$+;XUVK3L+Q^@BOfE$n>P`JTa}NRFWr1J7&{d?fnk@Y)Hi0(D zcRaazuz6m5Fb}xDzDpNZfHB|4=<^CrClc?kp1VGLT5ur3^uj9}pG?f9CoUqv?Q+WP zB@^?8**E;G?2*I|hhc@;AzzDH+b~%yI@X(=iJQO!mdPbT8+GF_w@I0-v2nBU7th2{ z`>8gMBRu39Z3FZ_**8`1vC}aGI+UIe`oF_@mO$C) zexNY#A6M*gt(e~Z=F^S}+E?T18`@Eub8YP+dOI*oYz{Fvh6DXkN?o3>KXr69^NS%n zo&#~+jgu{2#rdaihsDKGIRdm>3r|Fmj2!7VTIbyK4lA_gcDo-x#v$DrrFrcugTKTb zDqu~N_Kz!k%{i#PYcX8yj$e{DQjHH!suVdee(d%ehnk`cao@&#P>r4yjTI46_GIqp zSKqm)Rp8r7pBn^v)tUP7To(8=;#mEm)qh=h>infK`+iPN|Mp*Sqr*;u;QOez$K^kM zv7CM{dnABTcIZeYUd#!xiFIPx2|+JdoPV^$uCUEd7G@Dk740tE4{x#2CyGEtp&TFo6SwCL z*bi^+n-539l1m1Y5Djp&H!T&E5+WcplV2s}?p8Enw-YCKT@ORH!r0D|k^5pf^ZPcx zf|}mhVfeTx%-zjKhl_TBGFERZzM@D+jPY|J!S7W~CS^=$_`zJgG6x;iqH>6!649B( zp&W<69sE2F8``q8emg85IE**E`$pR?Ubo*d1xjgfdCNp5p{FRKpjo0agWAL+w z5Hc?weK7iA$6(A|=~Q86AXC6YCkuyHrn?*}kY}XCjM{j4Wh3QfMc4eCP#xo2&p*w+ zO-nht7y}ESH~>FtjiaXLdxQreokeOe6dHi)j3=2nhk*OwKdj(GeRb$D=<5A|vsRTN zUGCG#h{avsKouCzebzt+)!)7|+VMyCdI2>5!|k3Be}(@`^PZq!=6_)a)KRn#b(+@| zrG5UlSo43V@_#i@rojJ-|9`LiyR5;*!69k&58?gOrbONMiEtDq|M%$coY;TT6BMva zb+xro#l^+h+S@bytyq7)DeK|Ehsp=z_jg9SKic}IFM|C<|A)oL9~A;0?#p$nLl=zy z{3t~bdb>^@V~k?_{~SgavA}qEs^v@3|GtITf1Uo{!{h~wpnCs5Ma;il{@>Sd1j?q+ zh#II;nwN)c|DFApu;c%q)uHuw!~Sg_>Wdy_6`Tz(1m?M;vJ(H(&j0!G{|df;XTbkH zjPQS)WRlo!Jh&K@{qT>e5cQd%lYkfT@cwCHfcV9xi{wLBnl7XElRx}r(pYn2U>~Kc zDy^(!`seSF3E^{dI=hj2;;O2u{A$d9&I;t^k%0cW>(f(|N8g{~shiaQMl^o*cW+^C;G*t75d)y^ODw8H2@Lauj5y z+d+_UX0Kpc=uSfI{bhD@{wLtvq9{sF{hDgw*t3Jkr6|l4XRbhhGu1GYS`%73I(9N& zdV1&Y;9_SXIZlV|AD3w$2XFt7`=MhsyRZ2Y?giPOzlD!C)&~wWzk(xg1?(%18^#MC zQaY**90HRzb(*r}YgssOp@6SD^VgS$w=FMcg!ngBN?3jI0t}}t_p>_!13W+9-5N&V zD`P+C?_NnZ1S4vHnI4Z_&2lc|`yU-I--n}r5U(fmQt6bShX}rG2Au~KRZ}m%tiH>H zsoh>WxvVE3N1Ldjz?5stZE(a%07T^HSnm9iMS^ObP0@}sSmZ`+F#`d!PAJNYT9GMf z5GYu$ME*U6w+f*}ohL#@A6~LPdk}j#g1)m89mGD42N_(aMa7v*WZ}muK=kfb+*Ehm z@D)U5tzlS#O@8~=^=>1EpkISSxL?8Zh$FM;lDkpi>q94{pz3o$F)b+MVwFPHC-%1X zLu{OAN#k`V&$&O$7q0hm9{1M&tG`Qfyj>_55cn~mg55D<+KqO4_L2mYk{Cb!((>g` z__c2BDH(mczy}dB=YYWA?CHU)u!|sQECv*hp4!U@T7$vd0q^w^1CmS3k>ykm-EUal z9Syn%++M*8c936zTwa`5S3`p#E`#6$2e3n5Ge>8_SoM`ZY#09sDg-k=ZFti(?q&q)m7J$owwGAre}TQHEyabBTCNdj2BocZ}~3|LwC0 z<&@jH(}IwL$WwDWq!~f3X4Sgb{=mJM_0OZ1GWb|q{Dj?QL4T6c|pNOmv6Iio9@>j)TO;|rom9>W^XeI3WBD5;sjIEWiJZh~o7Z(Qt4$0d@m z(SuV3mw4+02kdxbPH7Jh+^QYgzNWZa|4GOQoy&4pLCbB;TOaY;$FR!zbf;?gf&k4* za~u$AE2|)9sk|()x#GhW3E$o}5Esr2Gp1%_TC$LJS_};o(bZg;i9PctcV+!5DFhd- z+o2#2#?htM&1)^P{4xp{%Fw*t#Ci+wXNbN#NNMq*0o`CWj;gY@b6nqz9$Y`W>U4Y3 z#Imz)=gDUx(HV;vQtY?MQqVW1&RBS!V;U-$3RO_rFxiCq#k0(x5rXMZ$%DW_QPv5T z9v5VrE1c%!yvH3~2lx&<*qA|i(?*6-pNW4)F7@VM_}|}Nw)tG4*)KRuYhQ=b8j96M zbqezIo+tDc<6^iTdGR2PgUly(yC7)B4uPc3SxV+t1Mp}5CTKBWz;F+5(Hdo1=PxdVm)(5BU zy*kcgHqo1)?5@{(3>)~lmetfCz|U)K!&8Fvb}z=mktZ|t=Vg0t{bel&0FGTPc zV0O+<3YXK=iefdinT!Pl^+39G@&yUUvc8b%T}USfF+PXADLwMi(@NOehn^_jSe|J~ zhfz#H{b(sHt#owCg9}S@$&2y9i&9Jnf@W~Zm!%Y^fYW~b8{+fcxFaN5_tL$L>5sV2 zQ@qh#JdYx9G`d8Herjr_@jr$^%gVn)7KF1|7{G#>2BzHJag3c@!rnXiceODX7ByB zGIJtk5<`aR#%dVO0fcBENQew$ifhfy_Z7AOTplWm*TE*NFTQpv92b)7M#kj%%GSX* z3}a`ymLnV}DcB^D=7yf|Yc;k~45Xv#$hp)zNU_69RFe!$Wrh14C=GWvg12mK9i@#2 zj0=wzUc?4p3#TNwxN}KLJ)s6G4aPVg%$-?_kAu@R4L4l*bK^p&mnK&iKTe5VL)ti= zk<-=9H$}yb8|;NSL;?4`)@Md{97hJ^#QhJIoEZhoG4S5MH;1M;^-=)kDca8h!8wf7 zrX|KLF<%vQYizt3#+IvJ*Pozc2GbpQN@T;wd}3C{x>A-$`ciD+2A*B=<`4196cNPp zF&blo*AY$5=Fn7eaAiAw{hje(6*fdT)mZsm&FPvH{LU7Y;Ae2-){hYle?hNfd-aXi zT|FAcG?vE76oU#4Q59{pOYQtCx)SH)y1N0mTglx(bG_%zqfOJmXg|S0haeY_;+NQ- z7&o4Mf~LCD%k4BLMMcoZd?i7$N_J`I4M7?SPildwQy%)HE6TXxE)q4V`u+(jG@7dO$Rv2^;gn(}GWUh~K&6g}qF#<1jRRmmn!uF_WOq@R^2H#W3 zKw$J^U6Qs#tiprF=GAXSh-50bZ$02ZxL99AT>o#kBpzt@qscO%le#GU*U*Dp^rlwb zFbs1Mo2U0Tmm2W%1Ml#J9voxC{w?xaWI6aJ?h#@=!PJ7F9dPf5d%x{qi$)_$i99Me zu(iG0;t1eyba*Nsm-7*g`O{F_>EpNqA6tjYzRCk*SKhRUHw6lBOr{A7c;@XHo#*FZ znrg8ZS4CHMv#DwCN#muxc9K)QE!Kq`+qEj(e!H_7EG<0GQa|v`!WQdH#}x4+B~Q|^ z7}kZFpSU&!?gp(_pMO~|AWS^_>%bjLh)ArnYXH}l5dAtpM~%Zi*Hq5v3+=XQcIYG{ zV3@}9#R&17NMKFbBS_4bYmaH6i<8HA;3Fvcg)4(t$&2(1F;PdMPhM>gB zWsQ)R$LVP`{#dh16j&}b*5#EhlvUR?c9ELFi{Q5Y? z)9>-d;&m}h_ve7z?LMnBZBAqV#{oX48%E0!rlu=)Clan&E#K|!oO=7TkZaCWQ9ohw z&%jF)d6wMcoCK*3rW-SDTWP!txYz2Yb+8=cSRww}m^KW^dvT1mIX9oNqq?nkk9v1h zde*8j>R~at9wFR5w~iIVem!baUONxWcDTwsa3%1gP;(Pj^nt`%Vs1Wope% z?TyM0`RUesyWr2>=HKQC?O?=G_8iCD-6D2t5{3tqCCJv2==XBXBKjNyPOlY(tJG!C z{G&1;!X=H3=wS*%eHL@?V`(H}<3K1Enx{Zn>*e@vpvS~r2(l2dK_%0mN5%=G zK0|bUAs3$9hTLcc5vQj^uCY0G-Gfp>kiagW^%|@r1B0b@ZuW6Ki@MoTqC`op$66Z~ z_3VMCBkSR2`1Sgj_!vVdJT_*o z^}4tyuXJv1=PT;>q`&USn-o!&Dp07wVA&bT7CtrUg;4L zK0d64g@W(>pr<>C%X!y@l$iDsZ}S^%V8v+QFr7KEKi4fW0U)v6Z`Tm^O5)Au;IngQ zrKj?>^CzQsr#n1Pp+N#@<`LCvn(INf`1He7=Hbs0g8PTu(yTTj7*nGc?wU4sTMs8F z2D`?qPOlwawXW(#^Eq;wq|{?+h2N9PSOa=$mkvlBERo5^VjUfUB=OTW=3A4vtWv`ppL`L@-5fJ_Z{}Q+VW;J#NiRH9Mhyh}Cy?^XX^t5}3tK zvfGoW2`=EHuVwM3`h~M9xeBrXw->G0&on4jF^Wk#qu3$df9w@S?gBZeejPJRSyMUo z;uU;b2_EhIfZ&|!&RX!`hB}j0r3lqJH5D9g2~@c8f1aLGwyoxnu4rer7CY`qN`2)x zF*icz%?7{Lvq&_jII5{N{#jLuRdW0gKM-^Y+{rmw z%5}aH*$-X0I_R8V^{*7zG4iNPPXcCp^oy{3eq@OwIQEE|r8~_GwX1H>3>HZ&IJlX` z^m*tF(c?Ff!3oVTDL+|J$CzQQLIduJ=QZM}@_zJ--N#ZTo9I0X%csG$fAZ}r!EAL| zq$O>RefSA~^ixMSs+j6v(`cBGNxpVoXq_;10*rpmH{-1z)@udL>LwgbLvqWWAGmsg zHfVU@)V%U~T!DO(;bE-z;+WvGTpQThtS)Ogk=<6~MEVc61rJhdfMoP05!yGaB33pw zIV+h=Ofv`9^KQ{teJ=ulM{+*y)=-cismXaz-<6i`x}P<1p@L`S9Vfc_UPY#BjwG4k zcvtA#BI(tndOf}^8x@max<=c+@`=hciAiiXJGoL;-S34h6vKPWJcUyQo9k~zkalRj zbnm5#e)R9}e@a8%rRoLVzA%uLERCTz|8?PV(uad@bmC=zh`p zF54>osiI%FANWf)L@ieJ$F!^2rHh{18oT>1?fhzG4I`uYHs(hDzBhXcZY~rTPKv;t zIMc3c!e8E51DVoHKiI$d5K~7Nfr3Mzx=&xU=Y%gbww%ImSvATylWyvNG(9umAt>o7 zo^41Vp5OS48apxZ6UHg^JBhh}516Kd&%9x;mX5#tv5g7lu$cSR^9mJ-Tw`s#F z5>TwZ@=5nyQ*q~G!u@T_BCwoxj11K*B}CFjLg%<8I{ydOw zgP=8Qy?bk5<$*CHhriCZqw9#}ADKVQ&Z-onS)n0SImvMTSuBX=IP`nFh{ij%#N=C? z1o|$iIGs3q!uD^vY$tnrFGg;Biz1JCH8k0#*zG6mqqGW{PE-zuI@~C<9_|IUU81_n zm){b~Br{xJ(=G?T!)c6^6vZ*N9c>NA#ojTyTb$Lax%n7LD(lGnc&n;Sg+^Zt9aIU7 z?!U#-X2t&Eb0uN2^DatQKB9p`?6f?Rwz`Y+^N(H{f1S4#g+KceTa$PKlO>5_I5hRY zCXlNiZ|Gac{Wi@^%aiGsRTUB56(A43^TKKhU6G<27-0(Yxx09=k-L>wF#R<9>_yhj zScu1v3?Vq00x|o_XAD6(EowI5S%^KQHSrr;?!+CX_6dy%JC!G z)oRCnB)t|FANyB-E2oUH2M4>UocT?|JK^gNrHkZ+hU3pv_GeHbavU#DdUyA61DWrCk|RJabu}#enQpgfNBNs( z);&dpvGqoKZt>bsh{XrRq;Sri;+04)V^U{2gD_CA0A825ccQLRtv{Jb|El~~XK8nqRkh>a{omo!?JtWue>Y zgPX3hp#m6*(=(s^CRbPI{aagBIXE1?(|$bVj2WP6wU`dtj8XMZIk;$5_4hRA%*r;Z zkwmaAmn49??npd9Gz zBb!FWGy&#dw40BNYq|b5DT5SXGuzFzQoN4*Yx)MkHQM3)vlIJ@(!-VW2yM*8_|vQy zSAkCKwTk?CcQwzx=-jLqBD zc4Zb#X;{u5lf|ZgY`jm9&82L&iCjv9-=8YknPwOVdtafCWVGP>=7$z)@F=G3CgiMG z5j`{(Afzz2?>ipN*JY0UTzs2#krf*yp*!)iDr6=`0&#R4LvU%t1}ATorT;(`HxaY8 z5{gFxmHZ?EYI#vrvE!G)Y$-NO%vkG}EEZ2E89D$O@4kmH?B0H|jx|)VGWh!LhervP zCUsVg{q(!tXMefzC~Y-vuI|o)bVu%%$`qV#tVZtOEEQ*IYDhHT&9U?$=s&DCES4{wY>0ScHOSqdGWrM``c=&FK>f3{k{>g30L3FR7hu^$_FGn| z5Zk)qqSpZ{rKmJXWfqBAC+HYQtgN-vmegN+=hk-g_ob5JMkkOdi=#;dI3&PFTk5^s z$2*rTDYL9j-izYb^7~odf}77LoOruTT?r@!NZx&Tb66s*3)r&`V(9+3Su?8FVhqq z$(w>OmMLda<#q9o1^!-<$YzZdix+_gW9(=FCK=G58Z)Q~&QCt4ytUT4dNem~{8u$c zYf3@-iRgR6VotBY7=!QEzR#KOBp}^9<~j3T9yqT1z~Z!*IId&TE73Z&Vr-fK|>0ao5ypGIC1{WQTiGhVji* zgl}*gl79D#8o}==>pMPc7857hxj!u)(Tng{0D|SR8HzbO$s^zW0uqqa5fcaJ#;k?D zW$T(FyW%|r9Crgen%ASI0&o_=8h1Ed*vw{Ui+rUu{RLC*f*a!e+sgxkQKmh1!JPI* zzaqwPRhx+B6H40!?!AD?tOGeNY;94k=i4!-r0H<{H03FN#Oc6>`GoR>_|{vBRoQ=kj|*)M-|x75DADD~&%`?5j39 zE6m$+Pg;HX6(M1RCQeqHsAjewr9)6o1Tnv|9M0>-C0R2((kh?I!EbE)uEO8udc>n9 zYB&_j2zolp@PvLgm{NbvM^BW2a#a@C*#e|adMWj4j-Fx-ba&f7Udn(+&}pZ0K)!{C zaM+k_^b%-G$IP!U@f?<*LEJb=2-owbsM4RMCo@DI$?k>_j9d>;3Z0ES!B!0t7gW0= zEPqTdRp2yu2&_LH#R@Lej{4F*ZT<1ZB4CU=nm){Oy?J`QNr<3CEsPQ2BW#hg{o0bK zk|ZRSDMoPJ#EY#8@v2*xMY2$X(>NOw5Mu{0W}yYzcumv10s^^^UH3%}#pSg6sU4?> zo5{kNvbyBBB)Hq3(n8%>$!yScoqRZ_vI7N5ruyLg|DGkP+P&LH2;Hw#wfv@5ECC5+o)A+kvva2k;@*Nq4IPjJ8t1ufZN%(mL0Xw=V!~b zB#jgU5FT0fhpvf#zH=c#b*gnRGs_Tk zRh=0_s$kMxs`cD)+L04NA7Ze})8!`~ch-Y|+L*z{2$lm;=Y&5Mn6vX|l4W{Ze2*9BVkf!NWTDmwK=sE!1Mb^vBA5|&kU>#h$kafrQ825y$^--v+vntVf3`9_^4GaReHBJt1S@T(|GE%-M<2^L%4<_0*f9ay}UAMf(bO(4rBIKkJ66 z8;G*s^MeEOE$1@pAZNC`I40y{t3!N#>AP6ISO$}z@#}1^F&BA{)Y3h0wKrMJKpl(V zp+Xm=!RDu0Ur&Q6$LFz$LgqC49JBKaXsv}eXU5PMFM&)r74NG{E6kM^3bobA35rZN zF|$rg-UP-3GC7h`qP|+cJ#xe^(|hJhbJohqE*KWOomZz+T-|&#VU3;0U_5n#Touwy z=p7R}YeS(Dy$TZNhEbXeuPQrXmup8;)gdUOL9vq#(+e?Q@)8HP^-8ldf$n-8F*%*!>A$thq+^+N*U{3T-p8lYszZQZKX8)ma ze&Yx9L##gi#|tVRjjtx(?1A8v=hvrpoa9c3JqJ;8)3t<$d1%dcx2j!JKpe$;PB(Ws zmBdH1zPhy=SEsJ{fv>7!gdlZ$eZ`%hO!Aj5a_&37GQoe#zJ-Y1Zg0jy0%+shH8UUn zLJB#DmM_WsxI{_&WmCw{*la{DY2RK0f|FO3Pi8@P*!R9ot$}lr(u&2v(am&GZ0h)z zuVZr5d2KyhEJLO#Dq<7~xA+<0kr+XD)2UOf$h}|Q^Ft3ccGV$0@1@~IhiO3nSI*?k zQBumZT*%77gIN}h;^ccyE4qftgwUzE23;m|aDz$lUBrzp?;*9DTXo&HKftDjBsn{slxDOz1`zpBs+OP`C|67J{g9iUS{ey}F|czTP;VI<`6& z3&C59i{5w&+&jx*v_FGN1OYz+pxf8dIW0)fa-=;;eh4qCctnnceT(SMx)8P#P zQBErt7DF0IK2#jC%Y+vd(%KbIs`HyH78_pq38ul$B_1zgQ4w3(OQZ^ZW~e*Tn|8`qy9yuykiK$Z z(VFl>UTp4qMw?n6$r!{%Cbz}11_qJ(FV9=tq3a%q(uH*}^F|P_iTG17j~TOBtc|)F zcM=e@yy`iH1h9>bwycGx^A&H{>rjhA2Vavs*q*YF;7>o)(Ov!cVBzCRf0SgyfN&P1 z3vV$m+hNm=LP%PJ4LHx+(d3Q-eMZxw3Qn&X(D|Z#j-M0<4l{AyU1RLtDNa#cyzM{; zbdlAb0hAwqIV&r^%RJZP_F}LGc!!rn&dzh?L`BsD39}72;smvU!^E|Shg)=PW5AnZ z;_^tzXgO@5^*2r|RA2ku`XNL6?h*~dPZ47|S3%P`i!5WXg1>A=vKVd@7p5BkelM%4 zgAG2OloT;|Uy0=_UKDbq!y}wvE|WoaE7ySg=;OgrsR_%r;{Gq?du)PZnHbe4^8^bT zm#hTmHm{^NGtp0d$rssIy@Srb7u05ZiuV=+V+L+yYwaY@28w~oUQ}GgcTwaQ_P^BL z8!tvd2LS`Ep)8mS9gj1I8ps)+`MC<5XW?&ioykkzC?f#WF_$d4`TG4Q{Mu!HUUfSe za1;)^oQUjJ1&l_LKZ$B${#G<#Sw0O&TXQ24xy!VzyBYT`xD? zW;l>bo*AF`K~V3F*Ok@&BuYtBh=OxRmj!sw`6}VOyMwvQQx*AjC|Y|0+AEf7~s823*ulit?K{tno#}cXrZ-qYjR=LbQg`Ial0=&?OMh`^DxpuWs~P zcoH_ASCI}m_9JCy*$}DXhY}W3IjBugT0}MXv@-dd-Vf_-k z^HfLu8VwqJN4_gp9wo5BEug+8;J_P1#&fb6WqHzE-4&()!ET5a^op`@ukx|n*!+p< zE0w?yEu1n&k2cP**iKtRCK-1*@XLPkQDv*}wkYX7UW7R~LjXc_sM#7r$E1srA03!-6m-Rd+Uq=kqhHpAA?2fzhx5kvL!t5zNL#X1Tr{vd;g|Squao ze5`VpZR6@MWJ7*oYaF*<+}Aw2Aj!JF5WBVXDB5zV00b0S<=Ps_skgxcO0?NXwvt&% zVBwVYJFpXA(GVKz5lw$X?nAgsP&z7_HC3kQ5qZGrsBlX}2SL$aZNs5gIi}~t*^Y}S z6#=-v_-=?i6VAC{2T6lpSTKL;V#AkmC^4I}*WIPiIU?Q%!|HT%>_3TF;rh;w|0 ztnpf8&kB}1uO6_;fA(%%`T#Yt^WGKYbv@#Lwi=6v|AcH~Ty5zz*2oJBBx$`^lDM=Q z+mg+}yC#Qa#euVqdD}`?OH4!^(nHYOz*IX66I`svb-7P8B@H5WXp7A z0e2K{AXWU^9Tv6jY*mqg4%~wxSOO$yT0fe|)O!WjcX9_U_lt}u2F!Y>Vi&m*WSE6< zKd@$-P{=8dC<3~$RxNB)kz5lQa5<9A`#QW-KKn_X)Ywk!lJ1{Z9Tc1sAC+P*sF5d2 zy0CR`LBdKG12!P}fFm*fdRb%hs;;L&mElOi=4|t$Qbn4yU*DYsYne z6(rXO%Ed1<*IoB3u@PaTrRsR#7MH=^Yg^7Ap4;wGUt47K5c{Ibnvwm3oCnSIs6iDl zqxDf%=WUpze`~$bj0#D>H+_q!mCYnd^?o&=F3BasUuhTZcb-HbcuezMKzz6J*_;E^ zei3|>9wO)5!;P=pHfb%_=Q~$DrMx2!6kk6&dZymIg}9q9gOKEKqD#JN*=>JJ%;FO% zm2$a-W3iS@5W5Q{$)EwE95 zd}b3hTMGWD^1%;RzmTL45)v)NothDY;ph#vtE)^CHl}^UKcU@s0nCdRbKpz;zcES< z3ZnpDnVubGz_TqL2HQk!FI_@-zpb7OK#Mu$wBIJZXAPd|FMP~j6nW;>I}dW{Zq!bW zWZ+E0u|4MQ`R*4YQw}yCIY@TBy7&y1SNHLC?jAXXaR)Eq&Xfw++Sw(>T0RST+~W*_ zwa3|La%_Chau7q!wrZ{Uf-b4)Y6RtY^9Hs0WLW(GZDhb$8K9Ik$NiJ)LsBP1{69;1g_cLfG_N3~Px9 z9vKxcY)$aa@b)N>ZmXfCs|ENp?2DQLF5vNVZ^dBD z#NRUvS8%rxy7MPw2+7y=6sCI6-Py?nCa&C)lk6*@+b%fk+jlF)sZlw@$yK@h2d0-C zSu(k4P}4c9u4Ym9DvPm>Ys?nF;Ae(8aacVKC@wc5jxJMH{NNEjK0ar*D7x1Ck%B>t zu*p{69}(fM@c$AKyB=xqp7P*j*d_~+6Y_Voew^;D=Bv|Em1YDd{Eph{^#>ct#wXA>fk#5Qc9)cA($# zWsx1N@lvFDod@QBd)MrHf-U@MXlPoPmI`x6A8L`KF08c2;pVgck`qG0mY$)L!CO$P zG~;{TI{%!$mFtp7=Z+hr=gL0=o(j~pm?~_<#4Nh(>mzXIrE#;EkabvuoZc=Y({Hhk9Gttjq}(1>Ui;Z(XF>$<(t}*7%pvb?7op&*qT2Nsgs3lQTdyJ z$ypE#096f{&v`8yc^vN{Q{YBPnWdJ|E;K*k-U5Txmr(wQJ^{}@2o?t-GFtW2)QKW9C=A_eT<(!b?_WjQ zrJl1b2laoUsGe@ca)5>rwx)0(GZs>atM?e{+-)3V7wkH!r(&|sSXo9%NOm?xbup#f zh=V>;Xw+X<3pGD*w0W8pEBo!Ye{gj&;(DLH7CscngGow`j=Kl18U&Q9cLWmk!rNHV zRs97v@JD(IDSy>UzQii&m6mHwY&m~Pn=s}C-pnOuEFRic7rbCtz0~4yx;A+qz1fzU zmv+A7omOW-Ev*)H+k;W-HLQ;C{fQ_3io7R`;)`|%!slU%z9#mfPULDAu|E%6Yuhhv za1I=*g$a9csu@L9DvH;lX|W*Ji>wIV1ozhf>F3hn7&hbmBSjLzY-1jJijk%BXdPTG z@{>u*!oPPS3RwCtsVL)D#?&apg4n98=9KOh2mhdNi`wv7iDtV8UPszuE)Vdz3EyGh zPE^`-@?1lS_t{fM#0Q$XQ|{8%1c>5-QByKFKXe&Q0G zd!nOgf1D1({!%}X;IvTI1Q8Yv;E!HY9d$URD3NYf!RXOOxCL>+~%k9Kg|T+t$-I%fqdLv$ow$(zve@XJkVm_juqsq1~@x*12uQ(AK-i`K2dr+ zZ~L`hMAVocQQTfOGYLP`JwB9YRIxDnN*hQp4Z8P^O+Sp7zs#qXqZOTDdK&=mL%m^x zZn^g4jI3&I%|EFi{qOgAytnBJ7c$`Q^VRh~5l|g}n5+o!5WnYyv@3MX21+QVya7_{ znvG>d<`j1dufBKdNFr0{JR0@o%;6@>NgQXA=@7i;w@%0oZwvwxkg{2He1D$R>V>hj z(HHF>QQQ5K_7p4b;wxlKjdrTqv9Iv>A-Wo560eo;yG#W*g-W%n`%&05F%fgQ{n>O7 z;<4oTRZr4e0h}g)SCKaZWyb04h+r%sEQxaemVm?yYn?@gz;*3q&bLVaGC^Xb&TVL; z)YatkULAv=s2l=2)y|LU^*b9UFmwu~jhY}hK#%UsprJE!3bBH48j;Qlc#EwS_;{{! z=QhPb%$y|f;&eY7HMv$vGvSP;C=vU<1f|K0sGyIyyyrm~0Lk`ks$_<+l?gcHnT-8N zooV$#a=Y#yWpWiN6$1l(y`sD8*5fUvRH9Y?@vn6D}l zaDQ=(Sju{$_^Nuaemaw9cgLmQ^B%41#*1_AP&nd)9Nz^A%`|IiBgG4ea~{;@o1Egi zJ4V+GN&M6)1Gz6%5qVnp?`{~Mx){f~N#4?$-d-yQTsPD61m-D)$yBHRYzS{gBGuC9g+j+EOq)fNp6at3gx>JwrT^84 z_4)JlcL?VZ0;>SFN)CHpjP5aqQu09k99N?A;FXWR%4RLP8Myh^juIQwgcs0wT2=F_ z^yNWI_+1I6|HIBeEP z5JX{@K9x*xV`XvYWq@LFCo_f=w)GmuubT?f+g)|U`IQCtLjzUig7;eed+~ers#?(P zmP2fIGa=#C`2;(9^_>3S_|O7ZH_&-nf~^;gPuKTFEsD;o*Z8+aN`h_&X%udEO;5q5 zbBqT44q^BS=9B&Or?cc25*f!l(5;$Cd~F5^0#IKiUjn@s*xO50CEMiNO6+Iy`J%=x z(8G(8+2}lj z$qn}X{gR3!c3T85DuXw$%y*x=IPlIJrR(%KxITWkkmMN`q8SiqY-#Xd3PK`v5$Cy} zUTARkBd7*py+G4d+BfN`nDa^PjBw?MPHv9_dQHTaR}bI6)9PQz&N+U-@)rMHSn3$Z$>#fW|`+Jk`Q zTEK?6`n1F$(YENT-l%@8O;fRtt(K`TMB7aol7=Tx+g4f@hlL;#fi%mHkMoLeNSCuE zT!U2eC2!n2QH)dv@V`1QrD+obsA0LhsvH~p59;qlhjZxK-;xW8-<&tadJ(?!PkL-A6eI7LHo4O%ov zafebIin~LBK!M;^Jh;2N28W&Y`^h=~eR0OQI{V^`k&8FUo2+-qTx-r}J@Z-l?{o;t z{W!pEy&C*lQrRk5Eix?N;zt@{qK9le7sgM?1B^_XStSLyqy{JxmkEs750gS^?-C!& zWu%mlUJjIumgMtIjT&a*PPl6BOA3QJQ_0mY|2tGikJc|M4E;-m@W35BhoLRZNn)ACt>Y-;t5BX(9 z5^=KeOg?D)JZwc3SuWc{nNTsvbe3IA=T}jDA0GL&|oYL3|9qAv-T5R)*LCjSd}NiRG}`fWqZ<*DfTqi zgqU!r8yjHOq`bx|COUSqp+^BRu*!-0ix4Kxz-gWwHR>bGUGgz+#^LO~X?^vepIii~ zyi>3X5h_wuegi!g>-eqaDcI=4yDKM9+D@FVBZh+BKq*-^_k})J=pRPdpB+N;IdoO> zQGGqXpJyLVLCMC_u^&188qt_>IllBZt}UA-j2++em0zdp7vrD$ZMs$CQxPwHl+H3K zA_MifK?Z=i4ax9>*o_Agg-(U_yF@jjf0huI=WtlFgsYa6;8k-yP`9PZbs5c>GXb>1 zmoN9|ao59VsuPbYwfqoFhE;pN@iW;BM} zBvY>R658uT5XN($t)XtPld7EVe5T?OACs7-uCe7_t8461xD)ObGqcP?HyF_6m`uA zz6WYpHm9DqM=X9oeMy>X@qOD30Wka4``*(6-i;amp-u7R6+qtTy5_0BT*(Jg486;) zn*vd`8rXm9=WAUl5>7Y2AM;$jbsO6iNLS0Kr!fJ%0LJ%T!)n~lQ}<2zjG9oWr@VUV zIn;h0DR9izic$`R7Oadm`W}N-GO!%Iip6S`fCZixGchpE`dKZW{Yc z&zUbviQTo&t`aAZ)7IsCYk%MsQ>2T=*e|sf?#|^>6)h(Ecyq+@%@DPZfad3!_n+fV?;CL?7jE$_T!-o)~# zay~sG-dtQ)%~VM*q8dD`yC_tmf>JpSo_?vcQ3xl9dYjU?zPhxnz`hDf$YoPsSH|Ciht-m9=|zUzZ`}eIN^U63eWM3KPLYdm1?LZ4t_R68&hkBd$N$SWv{Sr31j}Us@#89$XKJUj0{d6LD9`wIy_u- zv7aV`T1`ktI4XK3jX?-rP<+lMY`1j|9|Pig8&g``3{&9H;S>bwzIDBx!djqzG> zkwB@_`5hlGbTyJTUJI5JD_J{Yq5Se`#6sjrNNMoCA^rY=tP9+rb$HPGx7%z?_u$wP zKDVoDiZq64*igQEU*NEE6a}ceC0BLIU5oVCvj6nDpLao?Eo7CJb8)4o{cvZLpXP8_ zsjHRQPb)HP$rs=l6>gj#s&vWJT_UFIdt?)<=FH7Z5z4l*rRjoJ$QWoE1&9zc^+B9Al`+~@``N~aM z$uJ4mGhqZS3H|t1_Lye7#OYfpqIH#3E=Nw+%l%R)Ly6V3VaOK9v2yn1_0Z2I@8fiU zz?eF$EwDPJb*XBe!t-Vz#S-Ou=M8Y6Hg#Qe-h%S|DCeLz@JM}sCFhP@Te>&fX?dCo z{IfpheQwLA=0?AOCUCpOG}D_c_<0|DOGvx`*@KR?s8vQ=OQL{Js!wji*pu=TlUvwa z6Rm2#?=yAg*edvom+a@2?o#jiJ(Zv*&Af-N5|uN8R<@bX)n847@F7Adr&s3p3aY3j;);8Eh72(OyH1M%gowg0GpoID#QveT37rXzuaA>*jkr&$(>mww})0U9dY;e=tB8v zg7MeMy$8syKc)m-s#=W+?i*|$HHLZVp1XI5Y-Rbpy38R~yYK_r+Ez3HF>YI~Q=@^D z)1jt*FD>|4{pX=Cii9IY?|QeIiKFnnOJW`R2wDY^va*7}O^qW&30Ct-e4DBdMc!&D z_Tx;$g{LZR>3`;xNp;(~7%%v|@;yCxthR7P)!-2$&3vdUnnmaByO7}i4-=DUdWRx3ME`R~*~Ns7xzt*NGXXg`5iqmG5bEw~S;+K|y^391?W`MCs{`fCrb7E-29*kch^DmxFjk$pWLF-0^EN812m*Td zy&<%=Dd+8#+ohRe*80%vW5X4ZTp`6Wr<%;xy>}BN(?@iwsR;}qM%T!#s7BN5UaRqU za&E4ykg6u8$}`)_$&o;hlbC2yqn^xG>M{|E3f)hjd9=k@$FDB8s*wBj6QK^1c>(jZ zJ2oOlrKn88*+dA7RVP}>0`N}rhYg8+QTMO?41EdTjkmRgtNpRL0c5pz2<> zQQHdHoJFTJGblCFNHjVZ>OOqw>!g-n)*23hmIRJ=jy~Woc1{rk`R;(_3KSwsekoe|5Off0DxleD5=htKe97>5) zpIsj>V#T??SMkB?nD^imjRv@9lGrU%AIL$J$k9(v)ez?lYHxZI*ME;6b<@q1v<*>R4j)9ZSZ#tzg(rz#$9oPFpvUi+0Yso!cusBWSg~NR<%fzLF|5%lyMuuK$Jy_j zwX8pnjkDUPzE+FqLYJ$8%5;Tg*d>cQViXK5M}(xLG&K0K@!1N8b_#n}^NLU=l)UN+ zJS5;OvrJ>`v^W;rnAUi`HR@T0vmPJ>Rb>-&bhtUJbck@LmVNo|cPCsiwwi#m(y+}J zsyO&XH^5ufO+`OFV8tw=YQh^E0e18@hTlu-Tfx`|JoY@!=;5!8gH1CnUR?A;Zat6d z*eW`w$RYeqpVwgzGyC;qeySr`MejR{TY9FUR+e~|)`Or>$S_Ow@FMnOFRUHd&T1Q` z=s#sW7jdn=T+0m;Gb=hBgr#%Y-szbLgmUo2TYiwhtYmSDBw{ z@~D|a0^M=fuo#kF=}sHT3dUMEc_pThNc&cd zDnBM>Eo9kZ{p3(`cLtarQ)TriLXI=fGshq(SSal?yQcmq! zc2K*8!m8YOCB?O;z&o8Lc{;nLf^f@F&kR-f_{DO>Y|+Q4o)R+~2ex{t1NyP_PoH~l z6l?kEI%?#6$=mKXn_~6H=|vkAxhK*hs7wad=mhW!-yY-nzK9_7qy|t|beEvaG&pb~ zP^tSSvj(8)jf57kUfQJxwgcO4<7O zZ5D(M6GX(?U2wj&sUMFW)Asu}h1&qrm`!iFcWL#}j#AzNcKbyp;hJPH{I(s|gp<_IU4OOH=Oao`p z)QK$ytlfu4VE0v()h@yhcU=ZCU=KlSorB;bPLAmh=ZxUr=x%HI{jbILrElqQk2&T8 z^60CJKdt(YI0>LENvxH3YByU`ouy6owNOMNi9bZnf-18M@{vY5o2y;t>EaVbdkea! z+`pHk`yq0h8|_XFEUrfhIdv1j<_E`gahA0NA`|fB;WZZTY*5KzWb|v9zjc1szk&S9x-~hm< zUZtVwQ05-CmSmwGl4=><*pi-dQI@wuYzSu7v7gABe$9%|Gerr1r5mWH(aaMU2V=$c zl(%hu*|UIRd9&DEyTpVjilhX>oxy|u=HFQG9!3eyFd);VahQKFbFt)dd}j*+^vQh+ zn6dAsA@|XbE+|Wzsp=y66o-xj@qS(~1VCG+5Uv{PMN!xu4%RzyuAON1f7%mFt{x=` zVHc4$D$7D8r(vbx_y0H_$?bZcR;+uk=CYzdT!AY7HSj?gfiT>m_nAwi$gi6-`Dr@+ik<*MCdQ7AQ&eK{@1I6nXWS=VsG zO5%6K&1n?N4YphMqi8vDNaevsvCn(Gy@WfcUq`~x2O^YXX?Dh`N%UOR$)Di~Z_gn9 zl59QZ_#VTjC!%F1U0iP?6EdfV5k7bmA^lCZl~Q6;yx74JAzmM!j!!qr7_n zcTA6vv6v6GO+}Ct4YiNKg7-1W=$(9chG^FG~hu))TbFW;{D9e;~m`suMFw?`LT06Q(^6l*1OVj25{N1 z_232?+Lx7{Ccph5_7-z2M-*|7uTP}84zWM4=1{no)5uZuHSNaa54f#b$--e;?NG?4 zn(md!H=;ddM7jA>gO&{fY_c0R2}SwDmRn2y^J@tL=RA0vAzDU*gPSKyEqL?w9wwWS zvks!95zUd>wyFG>=hL?|Tw(-DLbMnnZ~p=+aKbQF0c6@ERXe9Q?)4|dOdg_)`TLda zdc!-9%f!L@3eYcD;us zC^SLnl(la&{Z_!kP+C(8m;IWpw>D*CPd~HivgeHu~%w5X)9X$ z+Y+7`+AjN|>Vc6~p=lUDmRcx%EXGEst}y_K?yn4JDu^C_^$xptKG=q%%3!KJ^woYM zS`4@<`-K|LK?wPHdPjDkCx|}Jp8tXSM)l6>^fHoH@04B`Q+Rr~W0(wy239!2?6_ou z*{rOa*lShj#v69s@JXc7rcfN9y|&EDpt8U!lk4tc%u-N^A#GIieC`Y`!QX-{W-PK% zJ%xt;3D~}m?C67FP(4G3u(@`PjO$A_r)S$El|DMJZ~w=k+avrp23ffJdCtD^9d}rx zEix0nh7FF}C_%;Z>C=-7EY?erFn@F29B(4yd}VyD@be*?I3nh(5}Q~+Szg6ZZ~3=F z?YCwKTE}7$Imi@iS8N@rN<`F}_VdPGx$nSVwv>tMYcVk*Q8U z&J7|rm)hM^H3KK^R%fc(FzfqjM;b$e;Py?Uq(G!0F8I9AqZBvcTh#pzMN?CvtdbVA z@H}*FUJxdG{uDgbznGrnPD^l}_mGI~tS!JPT>v|$nDz-7pCoNqo6 zU^MI9#z<=&5qB4CfD|f9vJIS@4qMPefji>5fs67Is!)~}cG|>MYG&C*1MD=q!Y6 z?Yb6j2N=<^#f^BFBcLleG5pO*%c;=zkcKHs6*Zh1l$u1nJ(ge}UCmcuHvO*;_2Hkd zL#@PZycxqw`W-#)#wfRYJyvBG*txP+`psE&s;EfzT&)sciTbHiAVGx4M+vC8 zzkFd^RGWczjWwR+u?6iqI5dRtmRjD-hvEChm|FTvsPL5W@1AEOA6TT1YPcPAnlX~b zWCkZD{lYKY$rl=M)C#`Mn*^5RdHLN^!>Zs_Zg`yW`&Zc=zlO+{;%JzPetb&Wo;j<}K}0 zyxi4SuGOYWAPJRVxaTVmwo*!P#ph-oMJ|O>35H zZU$48YTd241W0fl=AT#Yep^y_SKvKZ5tMj}1E)yCkz}#|BFTgWkc(^k%GbIoH#7+Q zTa~@c+mkbnN0^rRBk|))$*l*kxrXoxWcVP&8djqdqp0OKXsQ}Z;^Am`)3kg|$Y{?M zs=ChoZ>j<6!mpG)Kl=@+;_ozl^YB373la+qUNc6g&>v~Fuu9ecI$ZF{W@#< zOaLy`vNbr1>LEY!h!8aGYBbz&_`bBVbFtI-q?QTcgOyfv+bEV)8sQD6d7J?$ekiq! z(k&fp=C2p<9At!dV{Ju{azaj&X)h69j&VSyH*}$el{CwBwf&JGxsG1iGoF}D{zQ)p z(=OI(M~&#U>7AXl7%MKwCAVgriegV|;PceI)8g#`vA~F-|F`YSv27RlAbudzT6fN6Y`A7)}e%K-O(W{_dg)q*{H+Y!}3!H4@sQF!MV^GwbIy8wDKZ7 zbtybuE9=Irn@f4c^eTJ{Zqk#zK=du)5Q)?a;NCk06U4oJve7wcSnx!RHZSnGWZa;H zVp0p@-t8OPG%+$ei$O=5hxK>3%0r#q8=h9Xb;>g4Ys5%# zBl!7wvt?|eV}--*O-=&^1&BY1$gMl3)kz)i#MK`-G8mYJoug7fGF0GF=w_ z@|Ep1IG+T{g~CO49Z0*54A2-V)r$_eR)?%O2K5C{GD;s}E1rkj-x@9byqRGHtLsVw zOO85SqVcdqzj;3Enc_LX6Z;I z4lbGN`zfVfrv)XlT`A~Q#>)mZryP4f-MVdUF+ex29^{ZvkL9p!;jX&RmUT9BBaUb? zy4Dz4F@~X8pSB8p$3FtQYBvGz3Gd|L7LzAaZ$;GvlDKm38}$P}Z#IXAEjD?f|H(W5 zmIm7#S>Xi{x*Ci~6>_4_TMPy{YlLfPffQce+k!8LJOnl_SX$ES2&;oAj8}}lg6Yw5 zn;@%u5VGEA3Yj)&ocp(B1T!^^=%ZObT0g&;nr_4+6!z@AUx?vy)Y=eBCNHdv_6Tyi zjEsd)9hQe!4%yd8pWKX~%*y0qJ_vrj{t^cne@+&@pRz9tv-LZv1GyeqYru)d&X)oXbUiV3D= zcIPLI(urylz7bWtJ45kH=6CihvU&ZHayh_7VQOu(`wi#k=epr|xCe*GBZrSU>CXim zE)aeykg0qD5%q95w5#jd)xe3=vOypTpP7|rq(`~v)nv;7^q}XdW1px-Vq7->SDgaY z4~mgCjj1(*ht9KpJG^f+Y=zR8Ti(Qn&K*T+Ry5&yaS`{% zgizC0KZ6I#-$6~Ee1G_cdjgxTHw*C)`8XX$dDptT103deSoT2V!Xo?~PY1LUVG=1H z9Z~izhI{;G#wg*5mOP$LGZc7K~(8 zEjk9gc!9jS;_8NbE<;_2rUD7=2u6yiwo+!Ke3Kwyu@@*Y5f=>{(^~zQOr<4!NAnsE z_Qe>y`=CmFM7ivbq_E(4ElnIvg`YWM7^x>8;?iCe^=p*3HgZjM5yQ=+;I3p4Kp8I#*1!K{lT!ZH7FLl__L4mK|p1i1_ zH_fh=39G_%uCjijsC9Mupuk+h5{Fysjn@pO=%|(wUfr!G;#X(RXHX{tq_-U}d&LCJ z8`IJ1$N3<~wcI^N_qO}G1tjKusXtTqJYve7`s54`KcTffL-70{hM%44sxSffI~*K#z}x%!csmR4`>reDMN zNTRgkON_@O>T-bMh*ZGl8KSVw}zh~w3kQWwKkmi&vOEtg59Q4ONi-v-cveP}2s z6S{P(YEG*9ajlJN-}Inp}86Z3^t+wWc&ABpzlhG0ALS~i*HEDzGs!<2Ssrzd)z-UQ}SHaf- zT3__-o>6P>TyM>jrPxZw+e(PCYpJbnpWoq1N61=th{LA_g7TLKVvOnQ%{~qY9|5i# z;bPaR>lc^GZJoO>;5haUHH7pP+e#_`NnRa?yI(iHkMIqqNzm(H|{3?7zD zR3_(rX@a7afdT3EG!@2mN>pP3+B&92ja(V9GlLpFprpv@E?kuFZ2S*n!aIfPEU z(b5%TvY0|P?V(A?Dp(+))K||gsTi+-Jud&_7T>p1y;q=T+~&4z5a#`_Dz)S059h7{ zhwrM@Zxss*Ycn3Q_jlMMZUd%N3LAZRp60z9W3Is7^aDa^Qy&TD)hfxzaQ2TQ;gWl? zC1t@SYJOb~f}H{{Sc@!)%bYcCQ+)iqSkc9eZ<|1MFWu_r#md zdVf5-obxe$x`5(eTSU~i22X;Dpc>nCBWKc~9xz&Eo_pX}qY18pt&$6FHMnjn-8E4% zJKwr7hR&Ee92;nC69;|Wt#upi$^`I^2%Q~tj8DJakr_0>bH=03?ItGNH3%jYiMi;x zucHABs>4MR-|5~nHB?-7N7V{BBZp_R9n!hXbZK6^C=krx={1#35@->WtzrGhxXE8% zCrqDvU4M1mVLq=$C?6gG+Qu8=zufE0I0YE4*`!tb6XShJZ5-^aB_AnSIu*IB!+#1# z{Xx$@+tYb5VHeWgSRd-ac3Kr5!VH|XSLIQI z?Mf*Y#o#eH8g^YB(mwd-<|zw!nE0=h4ppnUIO%!JboyjPEtd{U;<-x-7th=sU%U$` z?X7pA<_J*RjC${BtHAc32QiR`f05HR;2X>+03PAx8Csu%KtBerD!854B>&exF5>+U zkBwCr&f5Cp<&;6`{$oggGxq)oY8L+w``VlLaCcx}iHPhk?*TqidB4NE?(dsih5yiJ z#LVZ?6zPB07W)08>-gusF_~(Pu(cKJ?CJf(EjT3<{uv#I4nwIAD&OHI+aJ9ubwkCw ztu1qTHa50@OaR^)p@iKKc$tE-=6`;n@R+l_UCVkA@_8Jv^q21D4c9a3_1~?GMh=i5 zZTQpBf1ia`M>bbA-1qLM2$twa<-1v7tbd-@BQ&wkXxzv2uYljgr}0OV0K#A+;y*7E zvM)G8F0GBMeSi{QF-<#06ykT$+Dr|93KXm=fq;&$b)< z&n1b$|6k<)+lKwc{jKN5lKarc+WO@B)I`MdV&_m^wy5tZZW#E zGf<=!t5>hFhT!HmTIerts@;60MCmNPZ6sqEU01VGx*(%q$~rD=Wn&YEb1jiq>iyaE zc>`$w7pvv|XP7vJ7;DD;Hl5w0${nhW2@7kVsWzdDBICz`pL*Wo`*i$70fHS=AGE)v zC80gbH0b`gZ6M$&Lae&|N>v=g-b%@X-Yy-hdo>`Wis9|cVwbNH313$_9|e3aaIlaT zC0&E2e)4x>(2iKPX7N6!T&R4BNvRummEn+N#WA6ti^eG zFJ1;A%-7q8)YR1cssC@wlQk>y3i0w9TWsYo)@*~z@99OtB06@bF&P^@5ujGQYSzP( z;|-qTN{Qx7wD7ZgH@7I7`|qk&Md5$^FCk3$1n`e}(7M5CsM;Sh#fAz*xj(#pz5Uyx zq0%`ZB#A%T@Pl*&^bBf|k2gf{As&DF;_aHSjkDwV8B!h}&&p|bguB5UV?KW~YWM7n zI}g_2^y^M91f>RFPMiuG{VFI3Wmvo~1Q6UxIQws+E1akI*CsprDB#m=VpY}KhK2@h zFtK?c?U9jG2r*TCA}y>-OaB8I)_$kW$=(-KtfMH2giV%$(tP}@iXZLe{5(x9n5QTs z)Wx+Dw`Gr3FNS*;<;MH&gp4=7UVG0%E2JXMc!$ZCL*zEk&SU<=u>HRmOvrbbq8f0$ zw8Nv@Dm?ei!J25e;7jX{OT*}_O87Rm{fd=D4INS+#1+HBFh1PZg=TkwL|S|>sQn(d z6NAJ+mR6{|6qMLz%%O&41OJ+o?)R#bdTJ@{U87d-JmL^^ zGU`5L~;_1N#E!t)R z;pDUY{n2TAs^R5#9Y)K4&4g(w44iBj^vP$ zVj6CK8SwOAFym_&w$woh9t79A< zk&~!KP@+iOFbcZ)6vWs!B9)PYEOa_)Vp}390l>A^3o+|XQI%lO-DmE0 zNe-b2dI{v>IryK}Ke&?*nD*l&I$EOwzgVU6@;}AalRCkk5A;%Ap=w4v^+f{6mXstp z+B5fVCPcjT=up0{e1h3uUuDvN-pWaE2b`X&>dH>wN&`G1CDN7cEF~Z2>tS^?m$EeB zHav-kEyjVeGFwz=cH6#$Ug5z<*XSbJNcMu{4pSe+hf?!c!Xz7A3iyms+0OT2FSo zd_EWDy7sl=RYOL2*Y4Vpb`JX;`@N`s)!_*Nz71O#UtYRUV5mY&Hjx>N0($I^ACbv8 zh7ES;ZQMZ;FLLrjeNw_w`OY~f^RZ94XcZ2yiLKRe_Uh5*qr0=lgm59bq*ue&os->2 zexEXOwdR9@H{M33G(Stj4$SR0mEJAqVJsOcaPCgio7vh$;CEAYKNOAz5v;vScX9VR zWfak0a1_|Wd^4h*+qU@``(6yhHZ0m7dp5_m{Jhqat;6tz2?*Yz%a`35O?seEMbK?Z zd4KK3j(OIda^;6!tEVUj$Jrp3k^av+d(sBq^Plc%v(#+9-7=$>Xr14<6+Ka=-6`vx zJ-dVO8$A_U>;PhQqWJlv+s9d+S#*L|yO{Vl;7j;ho`UtfeV)ig4+=~Qpg@fUnK{xZ z@1(yorQurNxX`(e|JayXUVc6`EiK~i?rz`EP*7zh2mC;$;M-fzB8`%IU>-1E4J}C0 zZ%XTYKqyLys$bdajSc9|vqda^IaM}u9_Ds@4yV}jrjyP<5gy?^RTN!=ROYW{-toA)f zTxBL)Z5DdY?c0B-DS!GbwK)$zaD2i7=Ea*R@;4ay`Pku31)o0QYx-bcUXEsjFM3pu zxI4-$|AG9xfCVVIat4?u)X1vj>)66QA*T!FxvGeuu90*GHSs*UB-055hQK*m3v3TniW{ z?P1)X98Nck4w{oOa)}Ade+UOb^suP!2T8g_+yi=Cvkr!_6!jq_vCu21Wl8t1%2^KsWVr&y5Wl$>XCvQ&86U&^ZG<2H^lV8ILpCpMV`noO`IEA`udtqVI| zNcfquZ!QZU7)}ofkhtK*3MY2BoNM6=UZddh9fF{0fiup20u8n#lyrHtJgm50-E% z%W%_Qr8xHcY3+$yMiO${RQ1fk;JK}~{}f$~3co$q-quIS`EZY~15RHm4E=*|)bqaF z%Fo9yfsNU%w-u$wJFLE*b1_BvjPd1P^@-mQO{7N=k3K%C_}DboLA(VGwZ!5xr8D)a zla>L#zKpHBkdf_uytAvL%B35$Iq=~z_GW$JWK-*{Qwu8SK?Yv;!$reYd4}rs{7R{- zkjsqRyW+~|i?#V}I=;nrytFJT_Ro2P zO~em+eZ5BZC3O$S+nk|7+e=Ai%!Bn<^-;o9aA%GIU-VmI=dAbkq7F>!W^pO7uM6i3 z@lwS(E$8Qlt4&8ny>Q39YijZq7&2!0V!#CDL!okS1~9g-=vaEOh8ye3aA{F0dE1#Z zMW*|G#A1vNd(tShqU$u^IV#9F<9DHl_lw6newzAux9c~IT4v)JZzbmS5liWur*DL9 z!y2OBFB@n#(COsWQag2z2&6$FeXr{L%z4Hz6mR9{ARzvQ#YHyI+sOL{6$fN-{RftU z?&!|ihSOwr9y)VY`ejnuhrC0p>UGZ9@3N_$pdaxc#mlWO1P`Z$pWaV&l>SF_{%Avbf1XTJq(1-_fxdQyHu$N4g< z_PX;T>VZl4bfB(P_>1rRD8A|5=()( zg)_7MvaL#m3D#aHa(_(6^q+>1o?9FeH29d~NvbzmDB*$&&f^AR1zdY<&(ijmR-8tq zMd**ETu{V9j%c`7Noo9PB(NQm7H31A&L#y0GsKY83qE##H%rQjmn24fnPJ#|qy#_} za3<5#%@Q->@TzQ;2)XbeVE>5KvCfLgv&jMHs3SeL8wu3flfm?dWr!|{+#S&1T9%zw z{XF;AG0UCDrorzkyQ9YE9fam>5w?5hn3g4cuXRq>V^U%Bb|9L)P5GTD(dqA0RgZd} zXq)j+?U=3sxvJkb48sfk$fDe;=QCrz7anrRFgxKO`~+MfnYF?zL#*@{c;9ohR;heb z{ZrJ3HaUbJi46`tPF_ZJ{1Q2*q8EDkk(SFC@h7={Ri+XM-2fS%p4@M{r4to>KH6m* zt{82^#*CMs^2e5*^zZ+tPO z2v~E!f6u zlb07Cg8sJ-w8C+0Kfhw_lMHvEo`EBW2gxPm8;BBP#*>F&&nma}^bz5Hy<7FpL{~GfB3L1LXG-bTr^6p2o z{u^&VtQQug-bj|r+|RKv7}ox&0#369Cyn#-%NkK_x2*&^$g6Dz^3DK_s3K#e3KYAp zvCAa^&&^+^Du|n?sheT@ziV-9h$`3tVd>B1*9=_*KpkY%yITUq_fe2DirgYTs=H%g z52F;aVe>|<)RR6hg|y<=~+w0in#gR{lK7^Am>iy$>EdR)9!fnJU>F^K-4=q z!3uBdr46z+kPoo5xu`eIc?5=le8?nMm{0sw%r?`gtqN%!;k60$d@ag4A@ zCo++~kEXHw#Omr~E?n_fMl$8*z&jKkio&rR9k?8B6ddp&|EhH7X7q2o>R-WQZW11o z$F-p)ALKa94f762<9+TZ(Ayda%^)fH?KkjSCD0;encUivRcgUenKgxzx0-m{Ns0-)Wz%k4|j!YDLJNCeaonaBL!wj62|jQEH+( z_nF@jI;Z2K6RS=GYEv#{R(qZdtoxb3P->)1lN4_AICkOjn{X4dZzP~+>%PP&Pdlv1 z(l?c~wgbKa8R*j&6jFuHla_zPCbnghTtP5Fo)YEoP>#`N2f#4f|Mk-F3v#2-q`QX^ zmAPVuKU%~hjt`3r*V^S|;^R50q=z~+)^T`O+6P<|@b-EG;)B~;A+q2tYZ25F|G05{ z#gt=zJnW(Ut=g>~ljEN{$s*o}Fx&Y^sqEFh?M=sEB={QT6ruzogSWN7vozRoM**by zul(x2U^-cj;E#CvN06?kAr1|$ou_t&8CFlh^6Q(so2DX_Rtv2PdH4y;T1A(O0c>#< zlpajK`xuLOI4Z}`A&p4Z<+De2(^p?TgSt*Ml0n|kB1ES@{e z@5_0)WmESd2#`iXq~hN+Y(#aWHj3jx^fK&R&I4I^jvw`arJ)|yjtoLCLUOsYSlJ|0 zZ@t|QFWSIFQ8`tF_-2K#Aw{I5oZ932E^DX=0i<*!OpL`~5wp=;uR0GZl;Y`$H4WoX z(*=9HIou{4uKnF*l%vCUYP;wI8KNXrkEOYf`~C%5ezhB>&A&C@J-~Q$@06dXLqn&` zd4+`bZkK(7kvGgjof8rx!V8YXJ!&-w)`rq-H74tGI%kj}0n`j>Fhuk;*kAZa7T%y( zZ3PcaRaPAK@J9Wf{x3*#t1C_a{$Yacemj@w^hwa^xi1>zc`HLPT#~5kXJHNQDG{v0 z>=S|V0i zJ+a%)4e0$5a{4bO`wJfL{(p3zH@`tSUBkiAOCq9Afg*hYzdn&VULCMEG&UGLp$EmE zQU5=-4aVQveYWl$Ku51y+I-#7;cC);Y~pyMN&T}jqirp0-|>Eda`4HHl#;Mck86g3 zh6bUcq9TzkIF?GvY;Jnj`j6Y7**%&JV~ElHvyR|?YxI4uc(;o1zoXaimVyMa>dlxA-ZOM}vpXsA}HxBUe2Qw|EW@b4Z!d+LHP2F7^AOACG3*=lc z#s+v?xKR(ZKfcd{2Y*TTfsn@>uc>w2`8%eYu%!pHv}G{Fdq{a^pW}8x_tQKK#w%`g z$dS7gy5F6IvRIqxYe63$wWwU-<>VXj#lYxsB@Om;;~TKrAYOY&fj9*ZJMER~!B-~R zrIk1G7rzKVH;0#3A!mBycVAkhbuz!Vy7^uXE02PKe_ZXlvOgteR)MGa#EmLj8Cx$K zzz>rJz)rvECQdr@vc-Mh*U|+Lg$`27+EmI-y#K}8dxtfhv|Ye!MWm_dqEtl@5CIXT zH|c^1sEBkF5h6sSmypB`N|)ZHcR~rB5a}XFuR(}3sUg%*Lc%xTuFvlCuKT{5>*%`c#y z!K$vC{W%q`ZP;mNF}ZTOQV6P~cb79!%)@;8A(L_};+2P=CGRy`+idi4#xL2fj*hiJ zDOmU-jyIq99IBIXN9RJQ-QYbF6Tg}o#p~co`CF`!0z5oCfGv52HZ-V?Pfo5$B6W3x zR=OU`4g6g*z!qJ+5WXI=wSS_yxf#YQ-xEqI`9m}yOr(wdkPPICu;llEaTqK!O)mG` z!oQn(FAyOSkxGfph+q-lH(d`2>*SascHZJMlTqr6r~bBOe?*H6py!qOfp;|*dYx&%F1v_rjwuo zuLu-(#m(K_fMkAhL*!2LSa*pJEL(nINuuS_>+nW*mOm?5T{=;JmW)Kd29-eU6jfB& zU2N&=gX<1EITb76b^QVfaS`y-*U?$5*P^jCa6oTVO%>fB%X`|wks)z+2YiONt zq9yw?GiCBW@YFZip|55h~2POOi~|LU9V6 zY=T^;29pUSxjW%nFxC10!+)kZ2;O}s7yJ_VfR7ot8+I zB!7RDn=85dal5YWGsos|aEt~2Iy{H1lda;5Ck(`ko*v2vTRrajr1A9kUdQ8o#Ri=; zTw(-hT`I;?_j_+` zZOKgvU%2odNG11$Bdrzh(G{J|Dl2k3kwrtx9;fU@VFg;C!0_d9`8R0 z)qgbqh0xPdt{l1Cn0H`hjak1dhG>X7M z^kC@a3BHR$%J%mcr72p@1whOEsnR!X(v88v==o76^F6Qn0%B*Ido899@rqO9&2amx z(`^$cCmlE>n*#DJd)E3X>W~3u?|=ZW;Nalo19ZQe4-{Cgry)0a-Q3*Nq3Ek3+0gR_ zUyeUU8W}~0JQ}oGDN{|_NZwlM!o`!8n9*9(#g7<6ZG?9gjXn(^8Sm=Mcn@P6m^=>_ z3WH7ZuKv`R3px96!`e+d;_Tp7F$g_2>&yYNIPAgdyAuoj9PiMF^RenBeP$u}-L+dN zJ}*2zj})$JSGPLa{8A2VKaY*n5xa0PMY*ag!d*3v!-EiYrqp{4$-1oiW*kJX$SE{jcyysweN1#_a^*lTOa1%*XvovrdGCh#4>987D0yJA1znwwZ&I%B^UCg<@)Tlk+em zsh&>6-=7IB}qZQ935LC_?Uog!h6AU@iZtC0ccU*IGXa9aSVui!nt}kH?(6 z#*+h9CFY|?tHDCFsg+g*BiW60sk38_1mMm%uy3fK#YR~=J~J;?q})b%t%~b@S$=AZ z3GpSJ@vsxXdXs*&#tiC)xN%IjshyFzNPqwSNay==$_Nb^?mE&J#UeE2OpUTBD5_E) zq-&^*kH{_z&-rlBXrC#|p3d1L+5ck|vh=yTarg{PajlJyunUKzAARV0ti^_H-u+)M zY&&aH-fqBku1xo$B3xiHkI_A0$2eYT z!5&2vOs=|YIS|-(VT|!gz`fO{w9%yOGoYjX=i5cDb#-?5KI^6|APd!^-b$auMWRm# z>j_`vk$R(H^g4MaTs=dJ^BhL?F@ep=$>pAg(-ENBa?}f|yg&1Vh~whxSj>o_Dr}fB zjmm}?2fvzobHj;Y-~xr~&40;2J3f~m3n4MhFsr6J!al-nnFTWKTiwp2zx~eVz~n_9 z|EB<7IR_r4Hm}+dOv(Frq~tGC6{4sY_CJw)geO8ZP_DgQVK>+!J z5`6yt()jg-Lzn3*K}8U|&XM~1 zlzt8bSCid?5y?g2L#082@a~kR>MHx~ciUGaf73h9KaEjVRjuji=_#n+!8P(9(=T{6 zpqXSJ@ds{vr4NO~-;IC3A2j`|#V?6Y)xv86|FP%l?Wb3A6}GYtw6${7>&i2E65tG> z2bU+6m6Y~9wz1LG*XPa1$e`V`XV1Md2OdKsqZFtB8ajl^$L&DE;-BB5Vxqe5!kCrU`yh*VDBWlJsMZKTgi zYRgKsIAOaPsbKVxv%3gg1r-jp%dy$1oBSv^08X^#8RW6H78r-puEct*u}tWfq*mdy_o_T4sT=XzrvR^1fx~6*T<94T>nv7G z2z+?e)c0qNG$|$JfTg7+ycKolLdt*2q){lmPXV+E0w>)s#rBScRg?hSOq+o z5PvQ(iqupLt$WG*=&M=hI~qQHB_l8Jwp+6-Sc}bm;YI9rpWTT2)#l2qXE#F0Ys9f( z46L(_hKW=C4JIuu4VZ$a--I`wGSAF%bC1z&&=Cv>9u9o`t1&zd#jyoCPxAdPO{mGK z5Dp3oWz_TeU9c$S(`WVi;I685JJI5i{9Digyxe4K?8_b3kYGIJk$PAUs(0td}v+TMsT5Ye46?%QAt6X_bip{G=b=g76 z1HZI<{9laR>zW>1i>< zT61O-qQ06kzHLQT3*Se= ziS;K|B`vE?wwY4iR7@fA`*IUHtt-u%WW-M%d}Ob@OFoAI`P>K0LP?Bb1TWs7IcnSj zr+-$gf%+vQ^)ju7(ts;Wa0?>sj`p=yO&o1YB5sYo9dY3jHoJy&Fx zr`#uLLUbDHTD3zxsnv@oBfu=@z@z-%R>e=lqN-4YB50nMSYM!Os zZi<=@-nG-Z%8ZVVuA{sATs@qkLIQ*11WH@&^u@X3oZrPGx^P(wTaQcCeUxuR;$ldE zMOzJn#Pd%fdWgfzxzo67!JV@@A^FM- z_R0f;ZvJp|<=k(BPwd_wY;frGm#~{Ft2mKE5DW{Wm({=3Rz2CPx)X#YKYKM@ljkWs zN^OOsjSE%Nk4v7^n%p5;@z8=-3OZrBoVEL~m~sYv1}}1G;Ou`|zUinq>DL;M*<`Tl zfGe&wPrf4dQP1r1;gzYLdsh&&VzvhFQD;2P8dCj zmWc_>(tH5-_T8|Q1cSmi;WFX&?C?E}hnxRVL?t6h_9Kg*g!|NuHd8&n9>UX@wS8HT zMjVa&a!_~R?m1(L=dnhZZ-oLUQJPWartDTvFF8jZ*;=`@W8I>^D*5(c!<8gIPL*wA z;JpaQ5#e;175`d9DCRwEvn(ih$|LTCEO;5rnQcDNLtcO?lPdd{&aNFngf9QG$#g^F z@%yUG$N|~lMx}k9m*^V&BI zmm+Vx&u+(Nn5h>Nio;d6Q_+C66+94@zc2d+Q!qC{g!}H0XELrCT=@+CvmXO&OYfPh7PoB3N2#g?^ z@G>TKrRH+kyu_5h&-T11-{b-Ir_#<=#lOc7g9>$B+V_&7@VxLxvJGkDyaxGS*ab}hj-@-nUJ1h#?1TLc@VsOKiZXDjKJ|y3)Xm_x!wNHM=)->`qo`b zQ4qUqIKwtX`e-=BfLrauZP|~DWpQrzdO75I&z<`=)sZBD*eX32WhoEebh-!*3)9on z;}Z~o4XWZ=+uGDjP2*M&d@qK16q=cJqf{;8%$2TOxpJD9H?3`hKNew#*E0Vv;UYw} zF~#962(gYF4!Bi-qv;RbB8374dicQKl#8n%E>8IaXrhT+M<12SJ~yMa$J#2(;LSuSFg(N7^*&- znV9;8MD;~TeM+Tt4~`uPcDcR99r!MMYRHTtYgU&=ay46G?wxHe-m3mdDuP$(R^aqp z;DV0oRQNWio$kbu9)#6POQCVco4oS~MrE7&C4!NU!;zvIu8wfW`zC?~`~v$}N^+D} zns4>@u1_?F_m|oyopW_{1p@4d9g@r@2F0EG;*A!+{r(}S)H>R%U}A0v+p zQmsGGRxR=%LPfLj~=+0tmuv;Zu zmn?GCqf6-f3gou9aX;$QpqeND@eUvGQ(FR}^547*yz{^HRshfs&aw(D1;&Q@i#Ii? zBZA+}q~7h$DhP_SxUSj!Oaofjp3m{?_2K{2A|`qu#u5Rx`bWwq4cbrHots_5BD?Rm zXE)wpOo^-`2mnnLLgc@8h#wzqomOC%WPP>J<@&+8(DTy%AK-4=z?vWNx;a73e*Ni@ zR=mgChBI5NR{w?fzzD5E?#3G@eQ+n<=Rb`7`G`kRK>q?{AbvgsQ|=QCyZNmZL!<5% z=3ma(tfmAi&pQia{2tl&s2HVt-%i!x;m_(q6s<4D(}NNy{{f&TO zsJLmWcE3>fPVosQZLa4f0Zdzr%4bYEURART75-~3+!f$!V{u>i?|*XCJ~ZB&**`|b zH0jH^)N3FK>~vk*GfsCVR5iYt&B(KObYWULopVbPX$Pj!f3Wp+a8a(nXlICokPDKyXG#hP5+4~RgkxKBf9JE&bg`r%Yrn9H@^RJc7nVFwQ^ zkM0MedYfk4J;TfB_EjOPE~?`&>Q#)ELY0}k$qMBLzAK(t%FaQIAkPb82WIO4I-JQw z-AD43Nj^^)q52PPq3s4kZoK5Hh2#XE!oSBW4T5SI>(VVf9?W0@lfETn)-X_r3L;-V z5^fe6W!2XwS6j90s`K^XllZ2GFHBKLHJ}Ud2?vkR+goEX%-Vcw8`KKWm!c;EuK8w!3ZO;-Qd?aQM$3o zT3r9R?Gv{y#tu^@R8(t9KB(yw+qHVLPu66cG$UrbT1M0_L*f@HGZ9nd$f~qyGR}1H zppjG6RAt9Tp+0uxV!8GdB7yv7o(sI`MZfRlqP)B#T3Y*-l{-Q9^)vLdetEEXS^q{V zqxBWT6`o8m8%|oxC>z;`vf^;a-aQ3z5Y*%Jg27@y1;XFA zeR4R+(1pwm&On_L z?FVbo51MIp_Ts#r%R_zrC*LzBS+1>tnRiJw#zGGVog1DzXw@cosC?;|;G2YsgJ3A_ zP*jg{WnX*YV@6+NM#|lJh2$GS(uOp!w~WSFRgtK30YeA7HPFI>X~? zX;%BTc})kp@lvuV7}st@0VPL!_A=ps+jsQMAx-VI&0`V=g#)_e$1A@c#G~SKNAhGC zW5p$@_Tlr)rksr;@Og62;d<|as{}2A8^_pd$G0aE8B!!7OSN89H=|B20t`^*DwAf*wOnDBj zT9gN>fPbxUqBA|>XwKMzk06Janewc}7PsN76fx1>zanjOS#E>1a$OhfBBL|-!+SI$uNuwlhN?{XXi9pgY^etP; zrb2-SStALavkGcbftwWt$1?j+?W<|>zaiO`yQtVL8Z>AB9+lWq#*2iMrHq?*@H-ZW zT_-TUpQKORF)r`ef(?n(d3e>Ka`CAsWQAPB`t`MIn9PJmN=HJ64=m&QSJymx9s=4Jtk*)yBEab+@ns;-R;1jnDx3}8U#HtwK z8k{K(AGB-$Vw}pz=}H* zO5mMHi|<90gvWpQqcjNH$g$KdySoX@CZ1QXUL}r~{HRdb4Vn&aiHqi1)Do^PxaZN* z+$N0#wih=JFZeo!g7V_@$JwEN&$fNh^H1uA!=;B)iJrwLqUTF7!FbI%HS)aM_m@Dl zx3;x$OY=-bQHDAOo_FKK)idCNUrut;^XOrfi;6Wa*p5`x!`_CFBAl&)H!V=0b3}lM|F(E^gU`>OI`IF zJW@7l74u~(PEZ5N$Im~V5G(CkGc+_*KqGqGn7`_oSt7O?-ESY^Y2%xmQPOzdFCMm#rl2ty>^io$FqUl+mNf7~L`jb<3qw274akU2hKf6#jfMOgq&W$aD> zria%*f(;%4A=Dr;I29Owed5wtu-yMFP5f`j5!4U{7q8fIAl5BU_{aMyJRIjw*0a_{ z5T(Sl9c!N;wQY@`a;6Zts^lPAFvL+pyF<>@dvq9#Sd>Adfj%gkqoQroDO!67{OQ>> z(a|RJ9q(<()cPGp(Ip@#j{jj{+ktWaMlykDY3ifT;`*`H;;gZ8O#c0sbfe4G{4Z|G zl)D^nZOv8Z>xy!v{C5BTeX!b!0CnmXSYIvy%)Pnqrxdx%LH-p&x&xRBUathCuB782 zwF7DvNd;!VpOWYQ1p>>{{D1xU9Tc|B4iLEpKolQ=R5{J`Q)m0%Ny3hBN_7O^mJfKD z_W&}GDi7XjY1iz@>d{q2=YcWZ!p5IuTiDV#QtY;Idg`;|m3x_Kp7ylTo}N#qjQ2j4 z-+~VUvmp_bgm%V-|1R35os#(Tam{9XM-wKu?fJ(5LGr+<&dwa2@$xSUUKaa)dQ1B} zpoB|tbofIG7m`M2SUR99+%8F3*LSLLq;#c})f(|KsZr=GzdVx$j}xA~3^NDItASo7DZY*JVJ)N#5l<*J0tSe2CI9@i)J+ycT( z+MF`Vw;t_d4OTotE&Wufv?0r0<;iq-^&4a2O&Mu!n=aENeIvumE5@1?r)|2blB*qZ z;0H}ZWI!=&J8>lgfNVMw;tqbEq-cCv-O*DUclA_?WWw@!{jRwA@HSdNiaQcYf z-95!>a4yr;c1AFRgM<^mmpB`f>smfPy;-7P0xltgW8aT&!5i1IEE0)Un{iZjifW?6 z^xuK?Puy6VTU4a?j=b5dE<(uSl2cnMynHexNA;_01zoPtlm2bRGbx_n*aI(4kd?qr zS|-5lL@Cez6wbTMqe*X4j~Pppa*zYoEoNH}jf;2YC2)3}v9g~vNO>tr=y7viy_|~| zKDPQ;t$|=&_f=3qMMHv{bD#x{bz^yV*O68==_nA=({plE0D?{iy9W7l5)!U$uBD}e zE8d+~oh7L2A1>0=_eNHvgz_+g#QE6Px^6>1sQ>)!uDF(LaTQdGOTP`?{M~2YHt+i0 z!6i?P=QAAfr^LtMYC8h6LmXtgZ2oU_LtYIV1ROSY4qIbFL%dGdcDT}700?lH>M}(m z-voF@j<2ndoVLNq?^GfNd@@c8&Mv(c>l(zADVUW9wzI5!*voWG+4yCvI_a zb8~;2nRz_$;LQtQ*#rRE?~We59|XCSp7JpW=&(1CKeOqT{#03WMH>_T_on9(&`svo zXP;%3volDk(MUku+(%?u4mzj8veJy{(6%BAmlw=)5FUn<4wW$ zDqM29RgIWyagUBooJpsw&@gKh5=1wRlR7+aAvPfdZ6JQ)Qk{V7^>a};-thNOn-s8R z^RpV6)M_WYyB8CjJ z)2MzFQo5H_!1mL7gEl)AOXs2- zlx(`(fA&^x_J^N_+mpbZDN;I7k-k=K@nh3nX>Lnb_R!L1q}y&T(8n_+>YWz4{M&Gx z+#&CGUNx8VGnZBw*6mhnsJHFYKU{S`cocCIy8Vr%Ly8gW-7E5gGZZ_q|KJSP94~*! zwBf#931TNU_kKZ(N3uRe3>>tTT`&f&nF|6ex@@v}P6afHH{}&ES~2WwY;@w{;-wW8 zwY9bTj7px=m*5dTp#u7fDYvd=+^K?EI6GfGOh?Ca^=c$iIH>H_ty|nFy2yJ8yoSrm z%j6hrdb;{1;sn%V~RKY zpsKGb>1)OZEeNcy_no;+V5w_UwA4HhlJXf?gyFytO;KCkDEOW>hAR$V(v<>GZ{Ry` zGWCMs>!o^8C(1O_M=qKU^mZ*$c`Po6FZ&k5y&c^)i9*TWB5e+eZRK+&({5Fq;GLv0$5^xwBe@+M9G9R{Y><0%u z)^1}lYm5PBzYwJ-vmHw-u%2P?wf-=8af(S3?~n&&-Tj<9Pfqe`Zps(Y=qnY4*DJD2 zZjN4}_d41l`SQ2w-=6J{IIF;Y`OLAmzwLQ(?$8m*N%e=%KCaE^PjN@fs(c^|I*DhJ z$&r)Ne!013dKkMNqdDpa9gg3BepVRxZ3K(EF2 zA~%I3q2#A>Xk$WraYA_eL=}d3cvHQeIa4(NXe7s>ck9_NkNFrA83qERp}$4F&hC9ngT`l^|Tn zI=Hs~j#hkJ)W`My{pTB0FSQT)#Kj@#83XP+j7pwQ+giTwQuP5{axeu08uC~Nm!(9T z4nn!}@U+sfk=Ti-WL~_^YoA(vV69lNRvJ$c>5PKIWOQ+4P7U(u*PV#r4`|-IAJ9x& zIyli{pOO^JCCRVv1}C}m+=nzg3m(b3a8-31Kd5bw*1x=*$<^ba>q<6&07g{_GO3YSp-pAf_%}=0Z=S=_+JBC2`*%!DELty`n{$Yz&UX4xNC z+HWg+aW=kAJ{Kd&?mzzZu&>mG%GX0Fl#kZfB%Z2CjV4JWO>$;ynt#}OTt&~R;xLk{ z&1DY3ML~zkK?5AwvGTA>*fVxioLXy}LmY{>06%w;K%s5Sy1FGuc%A!>J*G77b;Agv zJNb8uc99`{onMX)%8D|}llZUxt2C`=$W$d6p(eGji_m^{1Y>C1_YseTX~Z~hjGAtv zBmM6xBTwIr&1BE)XD@f7)2bEKHftOoPo_TC;O_n@Wv2&#EyuJ)fBP z2^j*);%2V^`Acr6X@ie1TVb)gbhV7B9v)Rb>I#v+`T{4dwwQ(863u>F{%l;-%D!+h za!iHkBzuE7aluDmMXh|+9-DV0z-Y26`*r8=8ko}jA*AJlDYE%{Q{dmcI^*(9Dg_D7 z=RI@-kGv+Z^_@NUP{7|*Lv40$Qn3Ug3XfgVMC)x#i{YW5>r?P7BL3(L5p4g@qKQa>=kb6sNo~SDQKba6C0B z{lh1;-*5}%#RGP%$WNoG2H0ynSV+%1*zBEf*OKR&orO72qFkM?&$6{=Uqo zgfBmNxD`>ja(PM4iMZ`w)fp^;7}p?9j_$YbH8Cn zRn+PzarSPvahV%g%Z)RcHnM$w`duIUQ6KL?X9h!_;#~PuG1;dCA;SJCCCdeohDY6n zpK!^(SV@h{dL2b%SC}(tgfAJ1=B*hYeoTIZ6PJ>D_vX#P?(Xgn;9vul@mdp2O`ls) zQPEHNpiE-CC=trHvOo*cGo(*e7J?UrJ@ zGinWQeOXS4KY}j1yl}1*6BC;u8cgm(YLcmHP5q07n9{KF!{K%@3Nsr7x9!QvZ}VE6 zajV^94Z}w~SGOs*FVYG3rr!AWXk|~f?1};so-Xq{(_jqIWCH@6{yXme#=>ujv)5U< z1K3sXS@Q{5>YINR85*qXF-}A?sTxMZ&k_Q-9J1R7Z+wv2X60t&svhySQ0HGAT2%dO zDj{Ac@A(?gR#RI5lPIxdzMEs{<80F_S#T`g)AOXkiMv&I>{*AHP@@XAjBhx!PG*!n z$22}kbap%0)1>Q-L9kH#zr+!lZXZ-DV8U&ZBwmg!FOS?kP=W8NO0D?ZaSR`PI~Xzx z!%cQSk~ADO8h0yMCfILDnjWZ#+X-92k$H$Pn0qCSL5ri>5~evLVCcvWzkVT_wTRg! z7OvNrQE920%|7;3#kGqwUwvg}l^vlcgsQOYY-{6?+YLv8(OgJ!wDv-Wk=-bZ+LGDP z4zOcO{rdH4aE{o@!$*%EERNQ%*9#*OwiT0ebLUmqCfwcK%Q!c(^zJ`+us1X`bQ4`& z9qx(`$37Jl5OA!hN=#HlhD^RNz{q@djC|5fS72(8YJ6>xJ2%`)nyMx@8et1*Vr~QB5P)*_#+@jozAFJ@I<^Xb?#r zv*>C)Z>MPDJR~s7@|8e5P>402InYNHo0$Xyf3?7PlB5xPBfOLp?uhxYrmuHmra)AL zf=95d3!8?Juw>zOjNtwWEy3kp{G(OHFJmz8Vd~MlM9CM)vwga^@RKgcwjylH=3v=y zU#DrW%}TYWU%0Jhs70di6zz>EtSmO@sWADMi+z;v{c-UxE;USEPN|=lSy| zS7bVF_T%2(yV)R`(N4XeacxpmpfATaacWED;T>nGIGY=OW4fQO+umC|+B+}nx8y&7 zI$iL&dnJT`^)9yS|15kn+rDf)J0}Hh=`}`X-coSUD+doQ&TqgfqvG!>tqDW=>;HAS zFb~+dgpw|sKK#1A4?w1MBOKj6lcG<;9+=m)G(Tcv-@vmBiMf z{I^-n+{Ell95yVJ6U8Z4TUt_sqN3gb4r0{Cgj`qJnzNFx<)U{jlM*7qD?ob#0Q(sIm%1Mr`v#6_YM-d;5GUU)zB~5BHGC%R}ib z4>1Kd`aB}f&jzm^F6_bg^_m%m1gwm)1uc~B$%);U4z;bJ)V$E{X)gZk;75weF$*kz z@gjWng#psfCf-L;lr$!N-Awe4uCLe-V}-FTjE@BC_X?K|;^{1rWnFkxiYHOnJ!GQE zA$Cx}`LfA(XM*sg$2B6V^Oj6m>-%Zy*`n(l4FI=5%dI>jM ziLe7W@dt_++rKH*okF2citQ<7+g8U;R*J4lzUJeH#+HTp9qYo0Me4~nPAyz&INuXK zC-iHm3;Io-h*ET``#mN-U7^KGzPhh!N!@~j;^V+^Q|^FmLHnxe~s<4jk+WX-#%+I6GGD3^lRQ!u`xiAqTKUiFTGaeenyIejxU-_u()j+DWMax?G zbZ+Gn-0X~*_|U0B$O}14{;<^=+I47eKuM3EdzxB#AmXt=Zw~%hp!1-;R0Zc4?&726 z!ziOv-Yy1DfNc7pUAA4Zk-P7EdC+|f{O4S1app#! zCp7BDas>zlv zIIoDS%&)u}N3IPs%xy~0#$}AzUkQ^@R&f@8Df3~*Ptv4p1R$6=P{&L=!9#Ii6m@8NJ2cqK}mfxO%(lgw@$EK8H$uE&N zD}`&|Cp6V~{iJ50BwXXm>OEKFa}*laCC;C35XqJG*OoFxOa5z&wdJ|4kuvnwJGEUC z^2#_47-=Vb7;;@(J@G;hw~z8kn#*6$a8TZ~f`*nyD`KTXCl$?fYp({*X8Rz6IQJP( z=`bPFH&+M!&y?K%XoWP<{_9F=rwO~CoORIE4zId7Wcx5R<&2;#!}O_o>!~=(tJ3y= z9)U^y&g&mvO_)>ll{Q^HP%S_xqR5M+nnC0*&kPFq0Zr&yEppyEh@}OS=rs|lsP4p%6EzE*COQyhu_V#H?*7~oxJ7^B_?(H`= zG`HIW#OBCN;fttkg4IGV(-)TMJA@6L-GqQXHl0pZQKsf#r>Vb< zWYrgc^2R$~?Ne!&O=%Zt{u15Br!1V`jT^hH6!5i<{pF6ri2+Fe+mZtGivuYsVhDp z{i@f~4U*Q^R-u;(MBbUsd?fktD_j4Mn7i88yEgPHR>I%D1|4FT$U8tz40dwIyTF87 zzxTBoo8W`|Vy$lL43P`qw{PE04Jyuf_`sot)LCVfXGFe~K1`DtIA!c?~IZ%x=Lf#_iGn2eYlkRpnf{>iJv^56>ABfr(0K9N zw+&tf8#LyNxQ9-Y1XpZ3i=~s!Y5ibnxJ<)37UPCD$)Tx(#qDPY;W^*l4Ko&!+yxwB zniqu{G3?uq28(sZh>I8UmpA;!^aLFcVasUwO)c)(P|A67n=Scwhleqr+=A>add2K` z?={-EyGwd_e4pgJ3=*Qrn%(`jl7NKa#jSyt0{x`#l4!}ew)(pM)ANl_YPhyZ#F3Z# z4n#QJi08am+loSRZZCbISVxWpm}tkzyiL&zmx>#Rp3fJGzfOLiOZG21HhMniOH~l5 zkxBCIlw?&1z`%c>z{K27sw+_vQ^@!Y;vc6X6{1hlfpNU%q^K zh=HNLf>@PRVrOptQG|D8vcYpn&M**bOdt~b(zI?=8s}9CH9MD7p-|dCXxHgB%W_@e zPac+$xvOvtJpFOj%3JjI&C$Lfz37Ci>Sh>!w0^N3Cqv6-b3bBwUmw*W&2#~c9m-%a zCJ&~sHBc`X_mpAgd+8ogcvcH?S_!Mk!`3JR%mDTM^fB=2T$UATXDU;O>{1mP6xP_2 zXj~IrpQ>kI;rs;4O2!qY%1*Pw)e`Ns@M0m?S-r+a+tr5h?>IA6SnTY9Lh5@DgYXt2 z&TPJ$ZP4Z}svNsN3DY{eCidoR6wo(ef9gG6tcUGo#(#U~ktSjq?t2wWUp>G^D}lD9 z5wh${LJ{N=#f{a{ED)}zvV|4qMobP#AAg5Q;I${;XG(1_I_kQ0sD{bw!5V2_>GFr^ z`cReOXKO$~Bm!|8{QUSgC}-#Q-RH(E=Pe<^>)}T4fvuyz3!C~1hHJ#i=0&fJbmOrB zfkToWP$jC~tN1nrrFtz-Xssn$TJVyP5F@d2nGvxy#x=$(zd?(j%$kiY$8T3s3%3p^ zfz3BQVxP@&9$8wR5fxzy3d_5{N_)v*+9GEd@qy~ z!LB%+!}luN_+=5B%eSwDi^;sa-*EL^hXQ2$+GUOMx0lXVZpCJjSGvQ#sXjR7z$K1N zkDo(i3d@gOCU0 z0Auy z8)f<#1X+l@_tMIPJ3VsMIT3uXytq`A>yE0`9N~01z{F~Wt+7f_`tdE69(U$lb>}DH z4Xr9ZxlHz?N&~fQr*gK-xMHJP56`Jn`d5q#0t*G4c@iB-w{ZfmIuRoZzgV-^k}33E zXED~9n=9eG{!Y$`g^uluEpb2CTx{OfUe8B;LR-}dI)f_3(%B00s97Ml{`qNWoS~;n z8)uhelVU58IOv6{tNXSQf>ag)iH48BPta3@Xoq}21CdsHi{YopEkH^4NSbK;j3Wv~o5S8NSEqFRqw4#{#YBOJ@0dQ?pJmxLK&Y z+9-Q?#;QkmYjz(CKjDNT1pD*@dQB#Tq)e*;12vI4{7+a8I4r&P6SEo;kMz^?XO7Y? z_5}q7KJy78=UpB@v@~OeuqoyEW5msh&X4(pdMz}hj*)zdhuAJtmU*B*3x};mX{&A) z&ZWB_ZL*&_marT`I-Gzu1AO_P0ig+miN2)wj5t3hzoctWaP-T{Et&BXAs-SPNx=ym zzb>tTRie|B=bsug*vT1u`{XnM;m#J*VR{Fg8*OF%RpeT1)1nAH6O)CT(~Y}h-y~Jh z5R2g9?FHpu4q?U=*%XY%FVNgQHOcokm6MFC99G9B)FpM){OZjt!yA>LweJIhYSQ7*xEp_B3b=F3+HaE zh)u!BH)fez(N483dXz}j7I&Jqc2UnIWOnp+4#%^GkM*!VKTVLHH>(cV{ziAN4Ex*d zlQlU$HjArV+lPHvwtquXzAyz*?+gcHa9p9PU(&vM8Glj>ttc46fgzYvlkJw$jc z^a%1Vu1Ybh!uOkM%1l>=eJM3zT+)IC&tV6k+ei(oW0kPLOb3z3>BashRtXs~6wmd3th zp&_dFdx3R=+TeV>eaY(1pNxXWjQw3D=O@<12T^|(qc$8Xd;5CFa2SF9z?HYt#e(CX zHVj(39IC`@qD#6A&3uwhZMa!LcasP2_#uQ99wL*I+1X(02O(F6nscH6(U<}!x?|Nr zcM)gPl|NU@u9LCr7w&Ris5{rNus*#nWY&!Ts-KUKoR=Q$>SiTstnMxI`czWDO1#M+ zZ`)Ah`BG_=$d_Pu6ZfG?Aa@`zox{OU_|UE(XsS$6;Ga549;kR-f}J`T#laqJo`NwS}yviYrpH{ z)l~P(DA9&1+TWcmi>F&pE@PgQ3!tJ&9$r%T7*C$4yL3 zP|1ab%%IFDYW65AusY!yd+S%bSpkAkh0%?{?-bu}iX;4#cT$Bry%&K#7Qm`0l2}w* z2_J6m|8(gt{&OQ+R!xg#hhjkSkj<0H-BP0XSuoU5=rz1s(b`69{Fq*EBx(G-;xRd~ zq2kx&hOK=&l`+*K$GUniZNdiKXXm5qObL?8 z(7>5mQ%JpQd=Gt`&E?TG*HuPUL%XwcYVqH04rz)6MMeS<`4GFT#~p23+l#{pGIVPt zOGX7er*c)fJvPQ8qc4jaL^ zl1``T!C0g_d?hsXaoUMlB#}<$;HQ*LJ%WlHGz*bRDLIS7aecrYIEZ)!(9Be0)5!Tl7Yb1i9_zJE}v6rrLKG z@xMz?Z@{gC&H<#>)iJ-{RXaBWr?UsXEV`Y>p+i>f&VXh1hNIoRwi|%2Q*-Yxb{HU> z;h4=?^o^B#noz#H^Y{W-Qkj2u^p|Lrb<=z@;Tzdnpd68=0x2;J)6rnzadw%YJgrZO zu&dk1B=M?1E2LI7MLq)1bk<Um(R1LovR(GcZ*A@cNf7t zomb(qGg{lr@c5rW!cIv{4S8gj+4WN^s&i5^C7Z_+hz)QoQFMLBfb)b(;i3@%_9npJ z|6nBS4UW!YWm*`wKPv3qUf^3iA&#kcJX^)`bJ_qiJEeAXK8jkcn*t-CGCjC z23Pu^%g!V%lX}hbf0i+h(zR)uiX&*9iDTpZA(JLfKHdh@iuY7~KD|^%iNuiVlg{IW zfnKWgv`riQZ-MW}T^Bgfx=)&leOic9Ez;$E;FfcuFONDW>2hwuLEK+|=GTD<4p`Ry z$h0}ac`f3fOWnMapeHi~Oj7~V)J+dvzF5zo^P22?gV(uCu3x}~i5bsX0h0Xl;E^j? z=cqJ7BBJAEPgrkLf?@!XZGo^dHe5-(K6do=l~`#v0I7K3H;ffd@cawCH>$|7$QfHf z#>ISa$6kx|LHku_a*-&rXMh`wcR*II3gIwU&BAyfPfMf(LEUCz3fw^egnze;$*a2W z5Xm)-_y!>RcaPAvgUq|lot#8^q{qd{+~>!wa>R;roK81)iYdzxSov~Zz5ZtfaT!Oo zw?ti$xXfz(vRP;Dy@6`+wIeGr-i%q8qu@l^XpGWu#9}KQ+0J}%S3CS9?Kpp}#WjxxK?}1koWsp~V=WwyyBJIy< z2sE!rv)^JBA@3t#n1K!GGEPd#mSg_}mID!=CsZ}|A@O_+spQcFpo;$G_X91SIDbW$ zS!vk&gTtUZqtLM@Hoi_qCu0++`I?Do!8RO68v_~i2r56lWgkb- zLY{pE28RClxM0F0LtG0dU>zMf_S3?Ix)K6-L@GWDBNV5{R;Kob67+8Z^bTr~)t{CC zM-5ESawse32+v4Jo6<7s_|p1->(t4`Hx7F3`Bb&jUGXbntQVL0InSIOZWw-aX5zs^ zTSNJ*Kb!mHZ%7kUFVJc5@$x?V_>r}sT*Cy2Ry@Tr7OaHTlO6a&SYyH-&+22kpBCO1 zyhgE8(*Lu(1J|~R38PyhFSG@fg}jJ$PEK%G)RSdFuar4^P3Eks-Sm`qt%d3+E{9u*-b;=bE zT{~?tXnpCcJss`Hk>J=+AI~bss+wf1amf^ItB4d*Z@o3%uQIM5V{gO2 zISMod;f^rx#%$k|nfRjoK_e+7ax=NDvvbUGoY4x(lgjgW!4$~OZ zmakvUF}Ez=p_3VqiMRy5F2-xL%#^|yz~8(2?8sm;1ZKK;{PGZX)Xe4iCExt79LhPr zz;VdJ5uj3%Fn8@-hJ;e5@UktD5E;_rTxv2QAfQmchDkRc2#ke~37OU-*~J2f23h$1 z2u<<{LA?Nb$EhQ!shgWS>Fpy3Y|YnSI2lou&s%QN_*Ks8sT1c0J_@U@=W?f5bPTW| zO^;g(A|l4QxVV-$a8&PHZ50^Vp=)*A3$^Jm{>e=QFc7t|zuf=JlTR~AsU%3IVb@Bp zbo%;H1-b~38>>Hy1)yuvzBW5R-m-!jPW5PY zxxR_Ut(gPHv0rA6V?qOzNwxb0o+1l24^E+0m>Tcg0UpN(Pn|&R)2;XLp*#6>-E13K z&0!bw1no%2o1~r(eDIj7fk!pEuyX{_4)@ubsN=||9%^yxrB9c&3=Gb`fB$~@HWKU& zbh17I=Fp%MxV%#79i*tP{$8|c^tEj4J5gu5YS#t7EA!{Ba#m=vFB9u)WC#ML|+nLMMAtgx^$-$-=(qImjEszRFW4=H zJ`Be8BaF6O-%uaygVm^-XMG&BEDto0jnL_Q->F()9~ZA6q6QSE@Dc17iykgIZyj}< zC97p3B)vl$Uck8qnN$Qpck6aK18M!#SV9BD=!s@xVKR0@5nk8u5X;c)-)*WC+kG}VlbAd z>#S_Nv&k^Ni)E}x3CTJUD}wGgiAUt|DuT;FB7J{X$E z3TFxUe&eiVKcLCbk;bIAN~N5POsHzQ(g$7xnvFJ41roKtOF6e(8mAfw5x^Svbx{2s zx8<&H1ugbuo{Ma3icT9>oUxocPZnIU65PYvDy5WkCql}Jv)u*N%@O!4k@ebvc8pEb zxu8YOcW7lK&%yfzmgiR-WEFDVT?K=JG{*RrxlUOjTpNVTXTP;yG)1g;7NHHNEfeNo zeA5P6;E>cUy9WOWdRSrCh4@s!5Z1RcxFwxa^IK> zd@o+cdU~3wrA#?GDL*iLv&%_ZYTi+i=;X{8q%5yn`8?=@{hV>ALoJg~83oAd(EmX0 zz}wI{Osnx8Wc|0HJ%D#R#W4=2!R;`iVy)A39?NSz9j+6*fse2%ULJ!zrJ$gI-)3+M zHS5jU!{WaBdf*nqR|lm=etv&FB`uc{hr=0}ns@F&Z}hjezLs(iH$H9TZ@ic*$32eY zc~|cmSZfoN*-h+-pt>EYBv)=pnF*H`UxpP05CZMtE|a7 zLVesWBf{xylTmZct!ixn=C^2ljj`4n+7Y-=bM8PcJt7`w_icOC8%%+ue+%gZRagZ! zWv0lIyRZiEQWMUu0N5sBseF);GQ@d;P~0UO3v6-Kwz)tB@}eb;p*Yv1MObD1yS{YQ z1ptvqh+cyut6pkI#l>a3NN)2UY1C$n+!ch(UC{C0#aH7kh&44^Hee}k9~2pcGk25_ z3QWs}Fu$#4!@BHLz*sR~SkdLf{y8JFfb*|^A`qzNSN~%qXA!ccT7EyP&|s-b+mF7c|b4-dF;p&BxQtDu~vXFU^V8rV;9`(?YvnJaTY)Rd-=OHkC2NGl#oEfF;)O)RpHMRkHcHx zmKS#WmAoq-37JudYz)&&z!fU+^;SOZHYX#Rl3wRXYKY03Eu&t7$AHoPm(r$bB?`Qq#^l=#x!tW7?T`6$j%QC1EJOTECS zNcSC>yZM_avSn8UgM!#mf&4=mBJBbZ1swD@D zAJuoYk(~`ZfZZ7(ZkU~sM5<2Lm6CO>2SJ;Rq%t!!`U8H;d$L`eN)TcoHGnrWF3Iiw z#9b+l4XGh%qBPj8`Y+MVaqoSCxlE$u`neJL&Kb*>iHV69aL}nu_4Cv&2R2DX2VrFe zrcdjgEPB1{rXR5LdxXsLoxN7BEGjToJ$HzB*!|6xhgv>yty*65d`c&J<3wChkMs4D zVZz*eO~Ll^a&nV7gFZqL)EXenDdTjF-*c13xe5FXD_M$La==jJA9xUJicp@ppm)af z5O$<8*?B8N;%_{y>Bccwj-GGHcWK1AZUJ6H^%4zGPZ8*#&3~}tiFIGN1a2KmbcXH-N*O*`73q`;6SVhfRhug$Jvl*cf z|EYl}LLJ3>uvKP9S6BH<5Uft>=;|0UzJDCj6G{(TS8a$B#hR-1Rx=udZzJdT1)NyF z$=is}TUEAY98fhC-*LV*pJ;STMEy67W9CB68H_zFuq30PGTm)J#{AA@nR=Foh^f71 zvQ%7Ql9aqTWjSASNNtd9i93Hgc{9!TvpAT6^;+g{IEXQ@Lx%azr)2`{;qfQ`Rs{DB}gn)viqo&??k)W?9tV2Z{g)% zdT!>TtbF7_y6O`Jk+t0%Dw$Q)0SpTuE^!!QWGgBvI7kGV!zIoR4d-h&0*LdSGc0%*m6f12K%KA;+r-d*w4`Q{X+uTS*8<)tm+8$8%EpiBec z#eumXE*lWw@g0D#9@CuLB3FT@raRyl_rdlX1Pi+Jv`6~2Q@P*8-~kgGiSO0~k7&~e z05)_(mK;E*PLZ#^D}llir|jZqV7@j0CC2ql%a?I|O-K7X-_$NxA|Ls05BQ|kJ2stA=x%f87=w^#}|8 z`0*yGGW=o=u2eYix;%~%Q7qY`+h(< zMBvXEG+U!p!|*Sx;H-eWuctC4({A%ctSK-wNU4w1(RyHWc$Nt7yG>j;F{4pHCo0gJ zE_|{gn}u{(L?$K5=}uyL`avLLbmm$Pip&h6Sq9g;3O*RMp0>5Kd!3huhjK4&Ze`5k zrE>D}Z&FjG6UHwItrLlOKg0eEOCzHe0N@`!fI%=>(2r$H`G8haW&W-9i|a)#HF+T5 zGR}vYwt&1b>DuAbkOPV`o=_l&Hw4Oq4H9r3QJhNO=6a{@6J7G1^#F7>utTO2Ry4sI z8c7CO3&THrHMhFvN~sKQYc!P7>jiBEN3C|cF+E5k-7puCxA3XDi{KOa`mE5S)u-7= zapQ)dFQ%V=X1|)>eN(=N#OyR~6`Ux`jqxJ3o*eh%UFHE5WzpIV8&9$vK*n9&12Eqp z=l&qz9eKxwjw&5_XlMsyb0A9eY4=+6x+8zk=Plphc6h5j|=w>b0#lr7BL!@3PJi}sD zQ=ntBDsWHat_s-aqF52G_GIz732H^qEx1dS+9V-7F;lN1?UVN3K7o6tHADu6Hw)G3 z=7PW;akN+4yu^S=+Ow6(g*ZLdX;L=@rwMUBWlg|<6(PAh^TFzzUn12`d5j*tIMshd zoRP_lCr{SF-kb#(hUW){0cm4xL@C8uH(R#3+rF-huTOm_9a@A+TSWUCsD2XHz&^XB zz5>B6de0T@3tN$H2!BE0W^gyrakf^q>`q~bk=?=%kw5W+!dth;|HWJLO2$P2q=x?q zs(uFy|8x`l4(gIX=Bq1U9b?jQ4W-lL0N*(aA(=nqz+a=1w?@5XJk4lrm(ffN<>4uQ=A@Jk0TN^=#A_Ei?7!h1{aZqKfi8 z$pwrR-!$?*EJ-o`Uw%|P*xAiZ=en*K8;wef&-(_`o&uoN#FjkGt#Qz+%r`pLb?Ex| zeI5D`Y$6>q^XJh}y_Zck{s*b`%-V=7@&A|K@6x6n`RRrO+w8g6%Iw-)pOWA}|5#Tc z*Nxo)TDuh0-h9+|*u&{%{!z+LMQ8Av;AC{mIeCSlk9f9K{WWW|eI?JMXS1WC%78r@ zO#8nF{V(Ev=3=Fo?n1iB?!8~d(bZg{(tgzJ)MAo^)!s6zI_t!}ojYbx@ zkMlQW=6fhl%qav?x^yE2zNZC zD?X!OK5r#r_-2si!Xm)*(1~>P=Y9Vj%F^Y9Pb9X6#%AiEd;))9e;clQPvf(#0xRKi&<(4Y{8$9O zR$5+4EhbN6^e=46mqO2;Rn3EPJM1p>S!KVnH;nq}=3p2AZVu351(l!wCL;qUNzcHb zq@{(kGBGuoN4-CQ&Yj~K*e9S%{%FIBz;bPLjo*GN>gZXGQE$KI%>4_}d41~Nkj|Ey z1K6+=%~wVW`?dgMMy(ZRO$p!Khi>mJf%+;DI1vCcJksciFG1=&ND-C?aZHx~!@KB;mq!@;P%sjI2-t zMz<8*DF~|!an{Lq&b4a5qEug)J;pQ(YjhdAqL|L1$xi@MH6-r)`({_%~& z7G+gt46)O36TFdW+Par2!7$^%d~BvYVf-{1-?VhVu-)IlQ5nW{C5_e}8kwta?}YP& zQykYgZ<>SlGj{wZGrZw+bQ(CkVcDN()>W5BTt3tUB(;u9bM@p29?PD94KHVZ?Kxq8 z9N)B(78S3IK49*=(>%yx*tweRApbf17>ksu^;$#7l!T{N;gfSUUa0`yCmbQX%*^B@ z@rDU8Fn&Vr6Gi}!2TOtNB)s3WOT^O9R-XEAy4;zO`T06LNTT zJBIxW)Nc$2mBDZM=jTERk&)i$k&Z_zq%8BdBwI?ch|OK)<)atB9B9wBZ-whWNQ@$b^u>>H-xmeFvVXH1dHmI;s)!vrZHq1%j(ccQA+Dh?BwJm2XNf9 zWaUS6H)Mu}@)z`(MQ>bc7fOwwi|nMVzS_`b@L;a^Ah1qAm(B!q);Bz`%+D;E+M{>U z5TChJ46ZwHnMKe!DqA*~{^xr|yNh?{8dqQa`HlS<5s~H|Hf2ktdu=*p{SBaDO5;0X z8mEQs%%cXJv_G0fXCG9UI=j~p|1=wneAcjUNOMjIc&JJZ@lEvr$O5~JnU)Q7c&_`w z%@iSTyg3GQI|(QCW$Ar>9{`$QGHN(5=EO3UQ0w7~%~!|y$^$lEUmi3ov+-&Zal~$4 zh*NC?8vbuiv+oan?VU$`Op4~PGYti2|4r-*!f>hx1=lbIO^BwCHf&Ql94=u>1?&ot z1A`YhFs49@R>0%7Zt=K~Ks;N%nHPkjaF(^uBRRM~gLA5R&T**iR zhwmkSfn9~IG;6Tq^ z4D8^aF~NQbV`{nA8)Pa8sawP9WBr@)V0R{E%u!H9(?j(s}oH?LEv0I$mpRf|(SzMa`|6#l>uJ6yXw#zngvj z=t#zpqoWFwQHXS4AplI-e{;J2#HRIa+McA4_lM-<%GdWUtaXHPF4&BIaftwub~Ui# z0;Ke(Ry&X%7@`IrLDXRO8Qj>#_0pHl2ZQ_t4|%JcWM--%)il;#Om|5N1noqQY<150 zpWyB#8RGR(QKPEWs<+rjj$zpg(n5}HGRDmfre?scouKzBdw0ZX*s%0qy}4;^(c{MH zE}g-sgSHLs<#`AHJbOweBYX4|;XwSDAUq-ORd93?Z)l=XoBg73un%V7G( z`SQaE!a-K}hO>;A{9OWCN7vtGhYNW!7yCSYen3B7;HhlEbFR_P&5D0c8}5FO`aM=< zE$2$bt`Prr3)XK{HJ447* z4L~Ndksc6dWd>bs;Yn_FAt&VI%gH(3&oT1);QU>p>yvRAUgMvIJ72)1h2&#(-Kmx@ z#clV5u`S4dSckXW*8F9Uw*8{{|0n|KMT1oO zwtAhsi34qOE>D<3t#WeE`sg|`_t$bSM)R%s92>R&cVjCM{c zhuuYXQ61-7$fJsAon5WH(8o+m>+LY$L?KFE2wDh9*w~FGPSwyIugjDIGm(7j>?l z7c(slG$Qz|vetrMLPzxVwia0(bv#ksdFWUu1{R&6{Z7ylc=)!^z;y68h|hvZDl`1m zJ0tz@OaLZ!MyQ(7Sp#5=nvoI%~@NZkJ%XZL4pVZX%@EPiJLmC&sXAJhH5oTO5)Z+ix z*1*W|pkz?=i^e|el_ff;$-@a0Dxsy?GX&M0g;KC7ZX>&1oT4zqu&Yp=+BS(Na)sCc;13+QvCYe~w{|$$;YY<>l zew!6X)L54e6plJa`-QG{+WLtC4HoHETAwU-g7G88$_H@E*8hFL_F+*D+9I^ z8XkPQ+u7F?S#%dhhqKd015*_BhU!bgk;99}d6^QNvFy!hQzgM_^HcW;;7L#|GsB6a zY?_g>uklAkxL{Zgp#9$@kJa)Y52WOqLl-8Oq3*iNPDdAEL}~5O$!?^IdSt&_z*ozl z5XH_(5KtHfxbR2(?EZ%(;T!?&<2ip>1hEl+VtC}I1rsWV!A;DB3~^#|F6DD#o34KK zvmx%m!N<$bdeQ7-GrhU0#kQ%~ldOQ&>4AuraY+nq=rvuV(J{+N&nJk)+D`3=v;{3w z(Cv;RI}e2vc`_BNe{UIGdI7Oi<~XBDTP6D)wM2z<{Lm33a$rRb@)r)yov16x~aU6ZL!SYj9~+1!}rhLu__*((oBz9Fz7 z{jV@1=p~9)2R{Gm@EvnfWTfl;u9B-F3yh68QkE<0W$5s>OnZOoweg!u=XePx*)wsX zJF%=jmwLpl`Btz>+pF%o|0mQFRMV!N86J@~o>0<%2*EjOFJKUcTNj?c0M_S!$6iuu z7zKIfa}tt^5h@OV$qnBYQ~wv(71Sn-8zb=F$7|8iGk4FaZEma`dxzrdyNmgFio#RE zJ^b6zkY=u{*Pj%RGlTYxrOCp2y#M)i4V8GPg z%a}wVq;ltzmpLa!1!oOlprKy+xt6yiN2!w*=gzVcttihiwwD6R^-sTI#|4~}da%ve z1Hr-U!HRqPDVwYFDkdBzEtH0?XG3 z1G>!n*MK3?MNDF6=04uRd@p8@(j!V^wsQ3D8!_g6VvRfLvaHLAE3YwY7L7Vf=9;y` zpqt*d`861d)7yeLJ<94d_A{Km`x>?rUlt-EI6Fe(->NDV4vi>%-W3{DA7ZSjxh#+_ z6G@6-15{_lzYyzB&frXy?MK9JUIy@|;d57eUCK;U8$85bhC!2CL?jbAr0lyqn81vF zip*uB-!xR1@!Mz`P~AunR2WLI@cks(H$~cLzZ@KoXy@9P(_m8?=<;f9RZ2j})fY6s z8%apt&o@}UCmxwYxRNQ9+0h3*({6R0v`+qO)6p&xB#f48?Xwg(=4A)#ezp;Kh@Dut zc#@v^BZ4}vQdA9D<;p<&=>M|^TxiYoICd3*!EPEZYU`CRA8~3d-Pj07DwR5T-gvI+_O!VtY4T`)YRuuIIk>2(C}^KFcRM#*Tb`ykL2sz% z6}n9uGkJ;2|C;Q%bA}eTF4O~VxGPy;C8|_}pMO%ROo*Oj`~U{*JX@X2a)B~; zpmtRdq>AWZs0V$q9H!#7B*9-HkOp|^U@x;ua&-^52>o$ayQLN7W9@?pc)pb(vvOdO z($|}a(!aOTgi;_|85tR^-jk7)4NgeNitR5I8ZCVL;S>wP!r)GLie*NFW!d()coY0$pn(f7WJ1SzyM=rs0k zO%=0wv@P{@5hLbizDu*jh&!0Ym9za-S~%g5USf(+$co178FqFGkZoEgilh}1$tqPI zSxHZiJF|q1Y&;u0#hFD2L+=hQ*FYHs$3vz<2v(DU7n2UX)@TX9^?Nkp8m0%tpT2yN z5iTn$gA)E=LyvWyZ`2+jY6EtBDb#}Bzn>&ZzgYJ>m-bT{ECyQ;ZFNA~_zsq%JL|2r zevQ=lJI}(FNN3y6UWB+b6NoKK2m4Q?&%!#%@o6A)Q-q%36@f7B&m>I$OTr+zOQZ1R z3$L~>BK@%G53y36yKWb|v52mcslgK}NH6vV+&k_q>0$5j8G$g0wKCj|fs+zi(&7-cM?Az7zE1H+nFf7;w@YZotK?R53&Jj#UEiIll3OiNJ~mks9n3j}_MmVj>S&9QCd`b{jyY9D&- zqWfB!!@@8~yLo)(xP(}c;#iug1d0Qtl19wOWp^wp!Kl(#@=rONQQFocKlmRT85dt4JdFIAc3}d(%Du6cKq|r; z)vt{tY|b-|J%i zmw^D^i%4f$DpD?T7~V4fWi9jMuDdYwRoBvz9YGf{+Kdi#b5-q9W0NjitUgiEHyrf5 zyZDYyew+H7yCYftLTYJcqCY;1dv7W+W?v~nI&53$Z&coGMw$C@+MEnWQ-$-~cwyJUnir`^Zs z80JhR44j0Y?Ha=U+e(lT#bmBoLxWd$iA9qmRJKMefr9a)Lz*2*jF=LJVI^8czPDxk z15Z0bYOGdUZqA4zDeRun9W>nQq7=&Ly%$%rXv(M5*&Xyc@T#Vtu^irRdRp%no;ST~m&Ki;zDx zbA!%)=8&ZISVe>D%|@D8%_6@6GP6)8*}U;Q&$|9jrm=`@vpUYV$5tNFC!Q~J+s}Ub zlhq9}u1x8P@2O2h{;bmBoOV1?$BHXk*YM4JIwQL{pN^hUmmmDGLV&RNgB}?(A=@LJ zJLZFS|I5`vPU4zl>~clzX1TOZW6GCN4I5meA-;LpD#X=3c$X=OpQW5uviWiR29}>D z=9#?q>CC0{krRY;xUVD%akbx;C0kJBQ?q;CvFQhy)r-`~C-6)^Nn;}2tr89^4)QUv zN*HURV)eL<9RDRZmDUSpLNR`=uiU1W4mu%L9@cr!4VSHS>n?q9SZFGlel+qRgV0=g z>UjwE(fWolV?g=DYJKGXj^hJWMJZQei|IWs7PVB2Lwsm7edW;53wu;E)jyQ=Py*S& zxs<9vIcrG9`mDNN6YJF^x<;n5NV?4Gx?K$O3V!6nYhwxeId(To$rj2Qlc=hqL-OGKI-8#88K7;vf2<{de0Ld?@Mb3XQ2I=H9E zl7--1b1LiHUuOP$swwKN2x3Axvm%m`h6i=qOj~-neI_#2ddlthgr{Qy7^q{ouJbGN}s)&pjZXs>25 zN?AL-06i9Y1LI?D_`{;TUQ!${w7Pym^0F4)%-oHII35(0{SYB+`Zh<@+I@XXr|X3B z6%mnM=VK1@Y(@6+Jx_R*>+)Blq}q8`O~3qTO^Nu6trJWZ zm&8omx%W=z1k=z46#rFNc#0;8)S<}qDV($$xex)bSWKk8(mm*|v?axy`yl~?w5QZN zig_NvJ*|gbvPG{^8FLAKSh79MjH(ko)=tO5^ik1ePiCxOVAYiSF)8m6F~gI$q@F3d zveH`_uXwCpJBu~CSSRkfY+)v1ze{bR^21!u{{Hu~t?)QTmd`CW*sZaZR+ma76V9pZ z4A&BUcGMwY;^P;d;xrb3Cfq$ewLZqxC(|4*XF>Qe;5p7Ev)9<|P>MU@wTq8A5uM7Y zq6a&bn{v?MXfx}z)W4daF5Aw#7BVHJPJCEVoS(pK^y%xUDSr-vQg>FL)xJhV zv(S!~O2OL746*Mt_O6wH39X2_%igfOAeu4+_35U!r@nQFq{9msr45)YwCc)U>=!Z? zebT?n<-;-pq4+h@yKzw6x4)@3&kgi00O_7_$6Elv?7jwED)CAio5hx61Q8Rd)xW@h N(vtELnPLy0{y(;XU2FgV literal 0 HcmV?d00001 diff --git a/assets/images/CustomizeWidget-372a06c18d9aa15b6c80bef0a03c0828.png b/assets/images/CustomizeWidget-372a06c18d9aa15b6c80bef0a03c0828.png deleted file mode 100644 index d35be506414989a9ef7a90cb20633877f7bc8f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29721 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 Vgt~#l|K%rv?mff1wRfDN{~zUkYTW<; diff --git a/assets/images/DeleteDashboard-94ed5725252069d9c2565d1b56f7c5bb.png b/assets/images/DeleteDashboard-94ed5725252069d9c2565d1b56f7c5bb.png deleted file mode 100644 index 6d3c8598c5ca4ba74673b17621d2ce3460286ac2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20703 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 diff --git a/assets/images/DeleteDashboard-de6c2f781a84e327df0f8a29fd761374.png b/assets/images/DeleteDashboard-de6c2f781a84e327df0f8a29fd761374.png new file mode 100644 index 0000000000000000000000000000000000000000..95ad0e7d0cca2464f32d7fa1f7df40574c87823b GIT binary patch literal 77708 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/images/DeleteWidget-14fae75ee085ca966504213d5ba8cb09.png b/assets/images/DeleteWidget-14fae75ee085ca966504213d5ba8cb09.png deleted file mode 100644 index b408348f02033bb14fb4d06fb49862308733afcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30133 zcmY(q1yoeu7cfe92uPQTfPj=p*8n0QrPAG90z(ZA64D_cJ+yS!z>oqWHA9C3NDd7$ zbiMKS|K57vTWjX7bN1PN_TFda-hIEk*H9uQVj#l6z#vsoe)ACn0~?9{Vh~`XAt8=X zaSRMB&G%~Bif`X2y%Kyi67Dfs>DtxRomv?`@@r%gKKbzQ;GXldwyE`}y{eR?)Od%p zS~R4uw@*Y^q`RwIP(Uy36CG3&uyu7?(ViGVIJSRIRC@{#^$1frxqOP_sE-r3&XZP#ZuOHrjnCwU#2y}*3 z`Ie7QmR5EoL8m5R15}TwC&nijv+E||6_Y=zM@#IwYh&xcsXdvo4t5TcxCp-IKQs~cS+q$kEYPZU<+OU+Q^xld*>#t3n ziSORXzws;RJ-oZ0gpGECzX=Hm6_+Q+mnalK`XBCQ;E?>}%6d_^nxF34Z4+>{M_zH0 z_plV{Mz`0IrJdoz&h8m?+5J-*kM+J)<#KTOcs)`}uPJTI3%G%&B-Hnp_$V~QTROMy z4f~tL6_h!v#0=+sde~_T$Zu@ed-xdrE%Y_tohiOGy=EwJWH zuTFpUF?_Ow()7ioPqyn1NlF(v{x_B>!A~Xde4y00xDXI^JAUdhuJ*EDdMYF- z>3#lB4+{V%$Co4B?~KwaA$$N@N-!}jY9hr06Y~B-A{7Iw3E+Ga!uPyt5Enm}fbh&1 z3)P5+xQ%~rQs_pMs}X;bh;ipE=N8hI^u85np)7j@CjJ%C^>`1BhL5<^4U?BQNul?` zyj}=3?Y{yiy(b6CDR(~tYoXcm%ax(AaG}5a1YSUj-}C=4x%AY$#>JF=0ifNbM#^D= z%tAD9k@8TyTq4*68StYM?B5Ja+86V$yGt0~(ra~H1RS6?qic-`Ny4}zc53(nA%v*M zF0iw6Mm8;1P<-5mJx#-!ZB@Vqcqt zUDEp6qpS1L^fV^l^=JZHx&c1)*{)%(#LC_sOSn1VF#kkVU7nDd1*PU7v{^49@7;Jo zb-{pqtGGlmFM3oo=cD6Lsi5wu9bj1~a9|e;b{AuI$O?;4q`iIzXoW=XXGB(=ABLI2 zNH&{{`N}F9c*($(Swq~48!{MB%0gmT1PBM@k`#0f=6Ru_;zNy+e@XM@O{3={kwJsy?z=|GC z33@q!Lx6_~t6F4=JhTZJh;^Mr7V>IZ5w_Vj)i33J5x?l&kc9_BxMr-(av@V16f3}~ zR6!IAl=Qx78>#2(L&c@Ma5=M@kUWip-nrw8@0uZeDB+O9X}OFo2mxe(H6A4OD6bNC z3Ipu;p>@e+ESCic@ZKFPeimr-3&5qC7OOqK1 zLw;O)pE?y_bEeDhjJnD3VpHKg{{QwC3v|-*FnMNTnDhQ?IVD3$IllGk8Lz|D-|-#_ z;Ost2`>z}|t=#)``dW9aK}Q#Shy;URY0()@d#c%Un8ewmclJAVyi5y3K!04I53L-z zQlQKmX}g=(z(mM_w+~ndrurApnGVS=PguffUa?c~+$C9$@#8LLNr-<~`1sPtcdL!+ z04p46xy0FOr_EK(d!#=_5%C!j>ZOfpb&L6^;GvPtDD~d&-$4jsynY$s;{Evbt&@2MC1$fMk7cfxRnAa zTIS95RKM@O+n2L@h7zbp4w%DwVg^nQ?kZGNdYi-6MJD&ap4gIO1SFHdS&2&d%Z$57 zMMqPg9HP7A0dv3wHX$WzMeZJ65W*rfidf?&^*v!`6DDM@V9C?nF4n3(f7jnEf5ZAt z<@Pu3oEwtxV6-DCkFx&#Om%P!fA%S#5^P8uS>8baD&hSD*1}@_ znnF5OQf<_`#`}==@K31%XC#2%B}yb~2+2ksMptB~Ix4Nnggt6rP67N9@y+?Mz>Gz! zX^=87Ht(~X`N5@DtcDqTuaAx3wHT-g`Ll((C|izI-{9x^{a{WjR-ob;2QgnSBnuf_aHRwiavRnQkKQi11a_Ffp$BCoj*5{`hTNBwy;lf49{TjHJOBTz{a`4mZLG*Has42y3 z1umy)vQRMU#aTS)HMcYyTJvIL&c~sye6K4PGna{OV3h6U{=@r5tHBJoldr>rkN3vt z>z2RkL?FUq&{kB6-rzd zcx(1kbiI=uX%Ph}9>A)P1pBYys{W?mB|ruDc1u@quKUiK7+B-B`R;7L5;_OH(r}Y} zPYjX|{(7U{?bgbLBstPdqGZy0jVUB@)b6~PA*ij};#aQL2wL)o=X){> zmLO8+>;9?d>wOjKu~AI%a*2;$*RD_H|hI`qRf|k_PNVo zh!E(ZgBhIP;0MHE4h!`#0w;?6f{2>Ir-*>D>ahdsC(78cP4;Y>zn6ve^uU!Btq6< zYhVtLhkJ280_Ph|GLMPR%|RFwql>G8KOXu}-eqX#y`HH`2$LN5F`r}Ces~(t%Us=Q zY3JHPLV5MLecb|zkWdPl8qUT?wk{=!il2B7E%Cy z>U}onJ7UI`NN30=3Nl|kM{33Tg8Z^blfz)t$IY3KUa-z>>}Ps+mmfIzznJ$?EK)I_o(W79bm(|7vUT&!Z1!TRnk zCoUCCgL__Jw^n=!5`x4QO;cw(mQbpP-_CF^Sm-^(lNiQt`Kl)0)sfyZ(YY!quf>#M z_m`m$sa)b`-in1!PEXx_?w#RH|49Ip&4j9v2m6v}$u86Lk(ZwY@5;ITUHu{vd+#SG zQMxL&8DQ-@NeTP|F5UqoPEjV4~|COW^OlVWuh>giiyal0DnWTpCQamwf-mpwwWSoClk!3Zxp^+z`HEjIti-!B3ajG8U0` zh@)JNJu>Sfg-gv=B3WKH> zI2FL%=f$6!F`Yi^MxPr7iNh1piq3T8fxn+Oy<2nD3T}5K{*9CBk*&-qh;vbU;I};I z?VNzo{yC-R)FpM!@9x@b|8o84wA1@%vnt;ldsJqfC_Yg09a+iO$8V3hMBgXYOU=bI zLR~d0Lrgsd5*!Tc5cESz3PPWD8H>baM4-IuO$#qMO<9QAOn7qluj zkTdSyS~aDi39>6s*pLLiyBgem{B89kdr&3bMWTcR?XJf-OVGn1Y~~4q`OYxH_5t|% zNes&xwS?-qKY|d|NO;X}go_Fd%t^cqSI0)ItH>c)EZ>fjSPV(^|CsK2ADwnrAE2X0*dkpklwJC*5G&UMNGUE6s*#{k$ni?p=Ho!o*PyQ`{bV&A_gzhcBWKJngeLw3j4WmBXKeUa?E;3OBrz+#1B|L)> zqGoZV-#rt4f%Q*Df(Doh`5Y@3zzI|Nw+>DvK&u1bq(JNT<;}k}%74KBmlnPD4~QeN zLlQ#va9qwjeV3Yw#(2g|j5>6^t+u>XpPGFb3i6y$LKB^ZFAvMP(R!h|OlIOsE2BZ% zJ#fiA+`GGn_alc#^_Q(nFA0H^p+Tj92W$es5SHAWDpoGA20)(A17mM|4nzCMjvT0h zZ~W}v&;1@-u;?^W9ac2H+ISQe0%~RQAIWV5P1=)u`uRn4p+S z_>-9^!XkSqppphB86FfHfL|5mPI-0zHDkbXzz*MpCx#v4Zs^PlD;M=aPSbwvy!b`w zA3;w6hv6pZEq#oQowJQPdwL`T-reW7h(H5(#ZJ8`coh8P$`3HbT~&1%z!yb|vS95w zB*K^9V~98`PGo@0VMrH@F_C~?8WFL`OD~$9oEFStLoJl>>#!}$ON+?YGgn!%1M0(` z2BioulV7*JSSI0IsdjsWEY>AJr1JC+Ry#;c$zcO|O{#B)1D*9{=Z!KQS&%jPgplct z5vSHBv0K*i1LW;6Eya%G;* zn5{R;64_VJX15aVoE~D9E^{a;|1tS^KDgVniqmEB-dyA$&dG^r#|e4p7fm_g9LnQ;7?m3n@WOvO z{fBDej~L1Lu){s-qd)79l%lGB|DlU2bEj!uNr>(ge|})-CE)rMz?mCXlz4Tga7?G{ zY&}5QKV`K{Pov1mzYbh{DUP(CS1~2@<(v{cy5rOeaTiXW7%&h`b>A))>805ns_RTl z`{dXo&~xSF?bySIT6kY}F^T-%F|^(r>aDv5mh@kEgk<)e85P)KNEpupwS}&GiRII( z`XkX{dcg(c3=Du-<(jaCo0w>Yo6HT|P{~bg$qCsv{H*!F;NUH<(CHt$s=YXB&3N~j@+YB~mv*E=NzJE4Cyl}`XsZ)h4% zUOyTGu$~$M<~)H%Ht9v-r-|{j>P0?-DJQzP2%ZE9CIrQaXC5%|+2ksMYAe^BVdST$ zrEz!D7Imy*{TtEIBtvXeIL@tjW<(?WeDC`E%^5c`=bEXwxtXK*S`C@I6rlaCP ztOZjhe*&3~+=D!;*9A>8oQo-7&eZw_CG%(Cj+0Ylcli-ghV|KU?i0+$G`h4$($&GhRdpT;uny)%kxE*pz@NU zaN1c0j(i)w!19P`%Y@~v3rORhLrRdJy2pycugzu%{0Iqlt4$_AQQdtc?x?cmVZWA< z_#%JNh$|7Km1d$pmH*q-XFX$%0AybX&wt5a&?tf0>?KOfX}ZBe$~#FfG;jztnw)Dmy_-xVOs zMd=LMH#FA50~~D40yLm$4|Q0Pg>TACpKSV!o5l?=DwW%i3Z?9fjszw^j{)}U(9aF7zHKq-@2uDYnN)S%>gb-t4LKv5#;dZ>#BUo?1ER05Fixj%=q6ds z*u<10`1xpN1XK1nm;CdFK-gghwLv6Jkoe;-L^6tLPhTYQnipoSw{ISg*-8Gyk#3Yc zb9NHuC73<1Rn3APL!VoBX+QQlqrDo9FcX9$k-`l>EOD0D0Nm^5&Rn|77@We|nT?{*MVE;?A40sQ-2)NDVq1;;+$?x=r2=F7(5LWz@pf1cG^ z1U`73mDFKK^Y&npK1iZ7r zJEHzuu}k&KkX6atnCH_s4G5ZXEg`oTdQth?Dgm{*I(TLf>GX4il=Df z)#FU#piSp^8c&bs{Zl85KMys2?P7PToRY_*5)AC_D}OAy@VA#B^Hp%FKTPlOIo-=7 zJEw2CE5rNpvL8ewQ)Tw ztt0%vgd@^DZ!4-sS}T4F+}DUyo-$(zpq3Q!wzpP+RrMd-%tAwPWwYItT6t~5_+C8it=zy|f04wz zs^Eqxyn83>Z?`lxm^N@y6SF(aP4wo&^SZ1M8*HrI*FV##ym{*yJ&L;kSR(bA>~$tM z3wRDC5?l)=v^*({BX8ut=!R5u67s9b;eL7D_xu(6u-=mAIP}!qKkgtM(|KH$LMX3n zkA7t($8#dr|1GrmZAa%kncG0b2P`N#205x6eHtME-DIGE4@%ZF=!Y$3W+c~fk!9}7 zbt*d_X8*8Y(MX>VXheXHTg;S)(xlU3UQE$-d1D~eK8C;bdu#Bddym@TD7 zVkQaoiYOikvfNxlH^-H-gr){ zziRsm=P<52P0NTy@^VF2AWc}KV4jn>xxGfROU#N4?WXy8tRtPGa72?BSON+?j*635 z^rDCx@q?}oD0vcq^z@=IudmhQP_>gg54te6iwwc9Pc3xb$<5X93}P<3Wd_qZ()1)K zg7;Q#wisXEraqj_PQD$gIQNsht;B9#zo^Ez?)~xOoJGBLV7)do{tN0V+yyi!9bao& zbXK>OHZN9GEj|WLy(sO^62M=bJC%^ndQdsED!`78bzJnhL&&yllb%MQzy94VSj=^}NffA%#mZlFk}o}DWHBTj)%Mt$ zyqjJ^gfn71EH2Ml+!K|V;Q>$mXxk1Kb)M-Nqs9%wYfSX!|87}M-}XnZ4)YJx_;gaAM8_(#bwwi^)v9p+vr^`T_*Zyy#x>=>@iUkdHtUO-@ALXCwx9b zBiAmxf?+1T-?)~jMk0jejBLweekxB((jO#ce{JO1KFg%$S-2s)Ni0|U>DmS$nlI|o z@bU3v_HBMeOAmUO>~d+-Yj1cogB}x7!HhFXdP{vXncC+cj0=Y7R54<;Dgv0BDun zR^XA9$>9m_RsV{%_(WWl+1#*W>+Nk)=o1a*_jH{{i^b{(^9KAC&Weqp?~w${vMh1t zCF@)xL$d&6GN^KB;JX!eYsqb3VZpv9Ug40>GeV-Pft5TIuFEGF=0@$gyV|Y{{fV?; zOic$4v$XFw$s}xjO&nBd5hj%3VJso=0FHnAmYP*n5dsa5s+lNfMm0IF5aud}8QxxO z(*q^tCIXuI8&sc6NA7jWC5wxy|Lh9KCLf1>LhMZy*0u)Ze$+5G>v-%JG;}jO6=TMO z&x`8$lMSpyn3%$+f}Vj=mPegkxkw-`V5_?LDzVqUrczuGg|X&L-~LKlGaCC~$&xz# zmI74=P0ztUI4~JbFHFHxB~SG#+~tN?gsQoMo-k}v0-OFINBcpS`-6;_4P895#{xPu z;ij_S*o?9~pVl5(osCaJQdE#Pkv@j-La6@CD{4h(6WpMRTh7f<3WnRu?ztVm<2MCL zzC?`C+xdyj~Mj1)dMwvekjm?wf@m(hC=ot~@ApB=T3eomj*@-zP&wv>)6^ zhteVgVRPh}*VCb_Fz%4}zd=%YfYnA3J5MKn%^~WVl$VmglAu`GD z$LG#aV@>6)S`=(Jb>+5B?Tl-(V&vzbC5#?8JbUx(CD%&kNkGX@Logq|J=m#;jh8xK zk0>%ihp;vME=|r3MvvO1{*DRc4U`MD-BuMX=N>>hA84A72pW?}gpY%l?BMyuh-Dpy z8f8LdYKE;#smA@Wj1WGpxMy*%OkQ9`DX_zTOzFQ{Os4ya|N3J#w?}s7+H`F)zn0;- zp1w#BoVuwcPjThNU(KdJKc@x3GpsS`aOo@NpXGys;G)mW$M5cB}dZj`BnTHq8k;b(_Ki$;gPj)#!5s7PzJGyM z0MY#7N6z8b0dS)tf9bc6MC`g+QDJBev3y^dd|$Xq_eUF!KdqHbb9J^gT^nPGWx`?h zO?Z|bY^6aY9XgXp6Y;oA(nb*J3?F+;6}C8n|0|SlDkEu6V@H12t2_N16t7myfLz3k zZ{m8}2oXE0qz7ITu`b7S76*Uh$6*$oq+~RtvDEPSWeHm-d@zMI0}C)VBfj?<>VPwf zgLrYJ-N>3}u&(ER%h;h2GVo1o-PLu-A#b#URo^A=)iA?IAUR))gPMVe(+Kc75h)Pi z#n1KJ-O=>f5LgIVHde?c@~kRtF5I2f6eB!wn;hGulo3riL3nV27mPp_B6%l#}yLD z)RhCiDBEhHp54R{k9I)}f(@pQW3k1uyUkec_VAKRy~T?D-#~%hK;)R&sjLVm=Whjd*m{ ztcGDS3>8)|H==NsEbiAk3T&!f9$?u6JD9rOzJFZ(O zTm71;;U@%}+2lM*ql|M4xU2y&_B+_xWW1&)5nX?w7Of`r4P_M`0w9^5JFSCZ8O%kJf95aA z!fL3o&rGvxHDQ4oc2BmP6=3`$F9!7I1%t@O7o*BV%G7a@e?qNgL&&xfTTJSv2cTn7 zbYZ*Ug{+?|pUcftNO4;Je9u_69KoDmZoj(oT6@Fjaz*a7E;(d~0jMc(^w1ZT7RUg| z7=RUQ1{Ad&u8Re;sp(N^m}I|$_4Z&R6;v0jUu8ls1h0}SpN|B^YFIS-xP)1M53w%+ z<8d5mSSYF;ioHD*4nHJ^+#Bpduzzj8IpcuY2m9v0{{8pAFN88(G?k+%<%^>M)XkF)?u@_(*F4*Z`J*K4aR1;qG0`al4)@@ z*o|m3n_s5kDwN(`s6U%SaY@o<8ajo+9N-@V=`glB(CY|Z;~s8MaI%d(?8cfQ{X_M^ z2L~Z2km6-?!>o{DzE;T$yy_u&J?+!C6@+>oIdd0W@Qqp#p(v=O^5V_-62bK^>5$u{ zv8b_XH|JoSmNhHoTWh90I%A(xwmQtc82hs~PBS(BV0*)J7>kwTz~F~4jT}+g>kZx0 z13Rhj5nfvWS+;P)o|Ga($;j*n=Q#l#^6+s>m?kAkGJ8eTsiN@9IK8bt3CP3{RnNhU zf|LArLXr|*TWYEQm*jG_=)Q_b((&%~9QT)a(5G^=m_EH%tvR^q=}9%d1MbBW^I``O<-6mb(yj+y1pBX7do;}=Qus_Tk(0TbSN6(Iwkh+Z*c`_4M!rzf-&f1Fn109qS+!9#G zgU_xmV*laX2tv}jUwKJ?iAlf!nJKt2*(xY1VL%@W^4I4X{-H_}A?E+b&JCHeFgxL; z^lzP~Kox<ylaKc&VA2^PhO#s;T^rn8*g6$7WU5*pgQ7j-1%%2oO&4CnDHH@K|x#QTq8Fn6w zu2v)_$(6k@03xR9#o3cPn2_JR@PUBt_lo?2z-Oij4@HF1xvzF%yoZft`!)XKDIXKw zV5YjG&9k19w*A7>L`M>+0oZ=(@2r7HR5|iO@Vfrz*$Z&SdSvDe!azvqwLoHI$`>;N zkZ=)Qy@!#911YSjAx+1m^wCcHUS2i+Yy~NAk_}J^`CAd5S-UIZD2u-vD zx*)p-;XrM)_8qsMGwFt6a+7U~Y?_;liGbRu-tc?d`!iAbU{P$Oom!`;KtA96NLi=D zu%i@C6! zY}-c#1?xK*f+dn;FdvyJ@DX2UUx5Vki~D3eSG;@y7kij<6H!gq57Sw>%4rc^TQKH;lSpkdJr;!kR3>%V{s&_jlD3h_pg>zPCm8*k>r z;~AA@s(JGo3sZM|6pF8`Lkp&S9Q`=Jtgyc)w|xJiZ>6KK+ch)Q$YxIjr4Fy%<{Wj- z>n`l3V#GyZ*SB$lS00T_U@*gyN9c=UZ~AGF#&8AM>U^JBsLWehYD8Wf6*b~;f;?aP zDL&FAD&eAt&29{$`Q2@c?X`%TJgpV*XqtziKJiD{xDGr~GqTN_pNX9HNMsP%{~$y2 zQ*(DD5EX>FkEp=_$;z=_b%-VKZOysm$miRSL&$l5KSZu0rS`@fKS}Lr#0t6j^_h&K z!JX2qKwMZiCL{oE|JXz?XWH{30cW*zt{_;ZKve=)L}0C?t3wO!wY;)XLkeaK#6;jC z(Yf{SgU&@THac(b$nPA7u+Zt|LyG$J-=Jvke;EJwHQ|X1(SPXwWhS-+m<>I!vr~lF z@LN}=qM3pC<;~K6p#vDzg+fw2&|El+VgJivG2krE3Q3eKu8FrO4F? z$LLmx`mPkUy>n;zN4L1{sSs*&mkQ+U_3GoL&QwE5aeeb2VwSrH-2X#p*v8Ah{qPpn z9#E@2Fv^IzLSlEm?HcJO2<*_ym##+g=)OGfpQ-$xYQZ_YN}jDasD)3Fl7GGZA+Pgz z?aEVHyjX8F9R(;&%p zzrV(uwM7ORFW1E+sBDT-s)Hitl&20(!kl z8M(PrYHuh!RF?hm?mruHuy}&vUH=%Zx3|8v8abLnNI7vBG5B;eZ+iSLzm`Hm*mA=U zF;N=1dqLZBH8Ru}nWxKIF+$9F>rOARBqj}zmXpx#0;7`R>kpI>;JeI6)49$2K&W%sY=z;Gu0g9ArxKpUc%( zrIIEmK|pW5G4616H7ls&Xt-Zpofz6-o&DEGNDkc#}c^B`^ z4awJR6?cq}-vqv@$#U?@o8Of{N-2|nK1>0YCOn}fJ9ua1qY#=rSbPHjY@dGAz(*b+3G+Fh&KnY zqc{~sFOW@e!N%^Th(~-PWb?j?V36A=n-@ zg1J1?R*(hM zD@?onG4d<2;=1;GbAXf+4OHeNoC$?L(Io`RKdts=UL0g+yWJ`=ez9gh7$p5^#G&yUkQlj0p@TSRlZT}N^Gs<*p>0Bj29!=Hq8_2>(ko*oW;Fp6 zdxX)jREB%SMZgP-Y)yh^(=iQ=1>cR~1FCqfaBogmY_Ccxz1`8haZG3~bs(thyLziG zYLp8o_|}bNlTFF?*BH!hEKXzuHV4eL-y`yx&TQ0Q$BXf-Xizr-T4_7~nf+luIIr=M zF?eh;r6!hhMg+Kv@j8FRC8mbwk|BrRNGw?R+eOH!X$4X{C5_;0n6w62q{84WS}@@; zCmlp&a*8ZAE>rr@DlKlZ#8Re5kmkz`C+t(n(c;ztRxCN~=8Ab8l7fnB*x#m#02R$P z1}uNmYvY_emR18yPy!EWH?DTh)2~^X=;Q3yX7yqB=10!Pi^`{Be6iVb#0H-Uyq2i` zL^k4gh&WKf`E;hRTZx<&7zllod3c**^IQe{5Fd28=O4S&G92h!+q%SlEiwE)B1az5 z^006hG_fQlG#;0!Ht1B-?Z)mVbS3R}nz?Pmu`)}zeKuXR4gmdCGh0FUSk;^QUZ|I0 zNn`f!kGqqid@g0YPZU=WMRnU|4@rH(?SjZl_s~N<z98l1vw+JT?pNEn9YKDvy^MnI4;K;T1YP`FVgbaEeq4A_B9XXujA6*#|+4@ z!al?XOOU`SI}f0P&_7F&npCK0ea>V{ufl6!DEt3fVV)%upgVE? zHOBncAA_Eun_tlVGyfm(&9gglKzC@jrJrBZ{3okV<$p*)(zFXo#|<_$e--D=rw)HuY`yBiv!YIr25FsNpA@w?@{-{s2(}G*`}gE9)%27Rq(?I zB#@g}VSR9YF(CuOmX-`j;IG6-JV{n=*80X`LV}2*n?e_A_~9+zX;7g^uwq_BA{`Ymh`m? z9VGFg?W*-c)G$WI$_H&?MI#Hd-PSb|v~B)lXXFFb(j#<#&x|;dR6#+3^y+Dilz(z7 zGz^~slB(=Q29il+^IT_ zaji8~O$n@yDMN|UejfY2z!M)07I6;`&NYRKb|_Rl3(t5SbPaTR+K}T@Edy#=q&68t z9lm_IkD^58(;&rrm}VA9-9#F`?>t_b?EadrG?=E%n;M6?_1#L)cj{DA+1&+>x{J)r zAxjGH8|E!d#if_^7b<&a$*%_P$%14{N=Wc|0blzxD%|LLU;Zin&Y8bh@tujVhp9R3 zxQ4}!X<65K`%LBGm>vzuvT&PN8Lu(<^tsh=nIn^yHxr(G*G&Gc$eYMwop#H+kz5P? zro(eF{7FR{aykyTjJ(Wf0BsKT&NI0ppP-%xo>1S%=-I2TYS~Ic@AB# zFGxGzPA#>M4o0hh=d6Es6~3zUdf?0zL(fis)A?o`vb4?&; z>WXawA4t^U#E*5{)>zV11Q69xsS}vNon<7uKGh2GyD1^F@2}w!`{cic{{&dzn_hC_ z>dWl!d;a)kdqmkgV%;;K`klXoO>Fq4a-VWZYfj)Lc1zm4!D9;1KM5W$i^e?@znY_# z&17Qp5zv=iecXA?Qkul?>N@T{#cw8GS9Sihj;oxAxd9xRyx%2d?2e%l3=Mi8#Rmaa zZRA}wX0CaYjd!q%g(pQGq9lRDFlO7aMGmXS#*v4T zG)PH{_4VK8l1kt?d7iB2$oUs0TB*0I!=p0{D9)^nA8})A0_7VDO#0D74x{*zh2a~k z(YV(X6#0MH|5I_+7FqTwENI8)809G$DdWl0A%fRys`-rsDE8^k^s~G$_6zM)9cj9E zO|j8zus;;+$Tm;I54c5pQyMTF#zTbzRWE^2vw_4A2+JYFfvSc|Lt9t164T#mI4@aN#!nli9d>s#=Xl19|14w z7vF4ZRAODdTFo~02j0MPCkj-xUNO}ARu7%wP^7ryB4mK%v=6t_FHKBiKM9U!74`eI zwg#Mfpkm#fa}reIH8wyQljvXx8bxPTZ!e`i_W^{?F75LeypqV-EUx26DbiW6#;0-S z0D3T(LJe3q$uOo%SJA>9H0 z5vs_`nD4$$WCw)LShW*D{DXmsvF-(H8DR-agedcjxgXr_rEMZNA|3aeY1$hZbH|j_ znnZcCd~~;P zTbh`ul4aEc3xJHui)Z7%kFO;fW(2{21@T)9jm>p+loAO5MEZWMke7?m-LCJbX*m9Ln`!iEnDX` zMd+arsLaT`Qv6Z3qwCQz1Xq_Nw1SzC7h`w3Zw1R}anv@y{kJsL32z+-0!vla@hUjQ z;jJ{Pd~fmT|2Z&|l_^5+Z+^Z(_kiY;AXnaUpii2@0?B3)beCx=x)&aOv{E3cD^M0* zX9_#-Q}_9K`7^GIVr3aw>Ay_8HHw5LCb9OY>`2B`{xNcC2&;IDwFay;-=DQ=Uqa8>{4yG@d(cL$Vm7lUv%ZS(fn?w z%+&yEoL~$7yWiZy0T?jcZ2$=N>L@le#G0_ffB^KGAds%HUncaI-%cY_GW zLxJ8>tBEd5;B~jDAT8O~6JkANlSDY6&GmB~b`elFZMW!C7pyMtvvbQWC;OYTl2>MX zSs>|75%cE4TBpo~?y6~4n2y@k#9Z_KV)SIyUr(n+`v~lsnUzLoj%uUX;aAZsaSIj! zRZX;YB$MW3A1Jhrz3J-@uS%ph7~9d{^y2T zCxhSU_mQsJ>E{P{)g9qR7yjvE#a<&42802ciDbE6JE6axkZ$QG9;Vz$6QiJy3P{Pj zncz_lw|*hpnwS6a*oNBVx@|#fWYub{LF3d> zKKOAqixZJPo|f%TtAu-i)_2%pkP{iKk}UuBv}x&M+=9ayGPm>HQQ4EQ=(2D=ZW_Rx z+L=8vNDSP#a$QNbFt()nt@dQ1shScMZZfhD#`pN2M9&bu+uw2VrSLWj#cdf^?{(}K zxwZzJiFZ{J<-VaTRV2?8(n3uG?a8}^C6P}(Tyyfgjbe5@!%W*4q6nVlVM&+g+<~ zXeR<>zZUqDFE*#yazylJ{O9P#3#2#f&SYdXWx$W?d*!#E`T0(n?UwE=t!R-OBdz-c zYj9y!QD&e*W7X8JRVd9+Cv~w*U9a^{)DH(H%th!Ys?y(^MN)%jpeK0t{R&~%irHNxA8c?M2RcJ zjtBhC0q>=I{rVbzu+vIM`<>*Kf+@IFAKa?Vx;W)F)%pt+R;h#gI?YC=cxqb?yq6mzwAPh zL3fX39(c3v{w|UjEwlKiqlv^Tr+pMZX~g!*BEUb3$Tqx)P_ifgjEL7b&@cf z(_})kxs!g>ygQy| z&!^7Mvs@mTq-SHr>wb9Nu-G7KtaE2Cy*)b5!nrJDe{(F-Ewz32#Z$@r ztRr2qM$8{agwmjN`eDH^A|m`NR5mtT$y^Ea3CFvy9iK?a+`YVnFL^dg`S}`3bMo5t z5xlW`mFMny3J>TbO;8tt0mQ+=L=xa&!6*m-t$5NG3Y+2ZPrfMfFZmeEp~qY(*1`TW zy37Fd-Neri;O+B@el@Y1!4+jGOdw958|;DwCg?9;z0-WR^T~IsUKUKduBxh_D8)tq z(97XuvD;I)n1OD7(hpdRVypXlHOa54dLk9LJ+L{;HaTP}0CQrrtNufa1$RSw{z;zc zSq|_mzWp5kX8`a-l8NsI1C%59kQc=G(LVShV(ZaDJ?tz9wm8FvQ`imjWbB{zTfGYK zjnsADm4*%!Cw87lp`O`|7wJdUv^xNU<#+Hi?DV>AX{T8ofHYRL^V2P#;&nZ!K+?01 z2>1bIeIsKTJ=kQqx>uRJwF<0;hK^i2B#^B`fruJZcx-T`!{H3_<=d#k-Lz9%9&rSV z6TxR%@DZ8Ng1GK4R(y}ztp%9$BVS?ZYuGxh_O?(PD53HYR8D3xMY?hSd6C>T)ravz zw!ed9tZ??v@6{VX|Ei~tSStRX!oCBXt?z%BqN+98Dr$dQMO#IQ6}uFz+0s&5QEHC_ z6|)0HQMHL(o2X5!mZDZf?Gb7wMkt9byf?nT|NB1wcRa7>-sh2X&S#JF$vNlV;NCjR z$RC`nypd_*`1@GRD1ngl@uK-}s*1La)5C%IM0CWC2Zi;u!YXM>gNS!FG~ zu)p0H#s+$v_pL{o3qMU7Kb;-U%q>BOoL0$}OYAv9S)EX1h%?S+f_0q^9;F=2G{O>E zzbQy5t>-e0gl+WWYet{@u*kX{=Sh(vY)UpXP3!H18tBdxBA8X>0FxnE8WdQ@st+ zmUb-<8LDp%Ro-Wo%~MqDiH{MOfgS}>$ex=6Xcaa_l}u6qWl$a9si7Nbv^Pv9Hm9@D_L(}=n}03< zY6M3A=$%@3!n7D=4=6T9wwh75`LHN75Hg**(`j<(F>!MB0stSEVIM~S?l)`E!`yfN zOcV@^qe*+ar*EUEW0_mM2v@=dY$~juex?g&y24s{?^5OW++Te855-eH{r-g|cpuA> zs+zsA6UU5hbNe)YdJO{Salsp*a9@OJ7BWoY3h%1oYUb7WfeUJLX!{SH1=N|Ug3>4f zAJjp_6#T6PLzu=aVa@5LpP#Md-`Uu(0c`Kv@14+kRp~oZ zdxHt-kn;+yu!YV}No88%40gS6Dh;in#KlWGI5_SbDQR##Y(F3-o>QokgP-j886tdC z_Y&7~WBnhx^w9%s`J*0LqDxjqOzf*bePbm08$*Lhi)?Um}*C^kO#V`#ISx zxrC~gLc1q*g4qLkbtls1cB*@xp$wQ=+iSQK+7)4C4c%GNsHE1iR2K1>8WwGjP|Rl` z=|yGBg`7ZT$|`fwP4|`cpY`ZyN^g9&Y?~w82@pC|l~D zR*T7}^-{`uPA2Pz<+6Ttth~M5EclirB=O$Guvh-0_ApLVQ&hM!Kt99O_>-R`3ET76 z(az_^G%a*-oogkhSfAF`!1k1q0oeEe-)*lO^Yr%&t55g=!%?F^l3ayfjb?H%++S#Lv9d%@c|(YK^^g zdzNOui-H?Gb)PNxw-y>R17bv*r+@?~@>1g@RE&eJtvzLSs-Zp-eER6xMVk;Y4j~(x zgi9cG^Chy>T--L4}bT_$=hPY-9T;Y~rE(<^@k>TFs=z z#Y=c9hV+}|pff1eGjb=r{9FzRq82xRC;AF+$}Exl^4>{}|VGvx^IWj{}+9djBRO>SpUm zuO=f-d13(m^d&`1Nzb(dvqB|Gpy3Gq_=f?(LC#ZuaRE~FWcD2TZRHqvs{H%GHQ5xg zP%a2mc`p!keXGxZG8!(f)&ghPQJ~ny6)z8D5lJk%%c8>bF`p za=y=mQ(kdKZLm!$TuSGYZVXGj``l=?O^-JOAt_p^;`Un}P^`Bc(`0x9a8&ts zUkcf$!7;6Vb@Dz^uS~B9!@Yy%w(7xi^L>jA9#!8*xIwCq@WFwb^ zPoNQ6UO2D0FI>ekZFXgh)#?E&^@A@I808BCqWnJkKX8#xh#e{<8Z>ubO7$-@E-f#< z?)ZZ@*sG|wVb0)PYsQAZyZGG57@p>(8{>k36rmec((lvu1m7*r@b3Uny$&8U(YIDR zfUT48v343$zyf6NL24mh4&UxGvi%SS@@n3 zaU3;~^><9`!JM1V2%ECcZTr5-hbE=N6Y&?LeD7K+Y;0RSs(r@JnY%p2a=8C=E)FXM z85N1M6OI}()jZfyqj|#(<6~vhD_qox+*5#VC;9n2$1$&7%94v6npcs#BN6@CP_3Ef zPKDj#?c|M{7EN?b-Yxny&wdnb_FUx7pQ>>0)H*O3+PQ*DeUZD^PrpjC9OT>btBWxt zUinZacDJ+ap>M0mYnz~A)%Z(-LPvQ~2%|P>%_GaqJGXk4cJ^UlkL5K|lm z+6w3TP*-wtw>m)UF_ser-)()TYsk>0ao|-t%#;m%}mX?AXTQcmlI95K* zJ{3I)z0R+Ow>ZOoK0B6{)!Mn_;#Gcq$Yo{h&ZQoK$vcACPTg(>+tg@EjLBkngX*Gn z-paRU?zro()AC@5M(|ecRfAA1-?S~H0eXZ2s$92hCIvD5@EYK{*ykVro>9K6t8AGy zT6JLDcEy61GA&dZdrjNyl2gW~?2eiotnOq!)6t~t4U&q3k8b$Q)^TA?U`*Z8J&qRE zd@y@1MtA7Eu>sHSn16%=?_S^ownfG`Abmo8u%FnQPw#9v<@fM6i#1layurN;a$(yG zR8FF9AbjNl_#FY;bc(>7bUVM{C7MHpY>$$|Fn9MXR11DJro{t$>y2Rh-)ObX)Y@d; z3EiP<1V*Mt-wlNj5q7R}a<7DaJe0}YwZSe!7$@?b9X4JU1=(bWK2FrTm#RSr9fj;-r42d5xqns3_*F(vT#-tf+RC-044YEQocnJs0V*5!d zWV042$7KFxY^*ew8mjE0r<+~Eqa!S6Gwz)V?K=lQ2y3>$JXXr?UHqVM8^B>6S2eB! zlEQZ)F4s4JluYQ?8ZF6{dRa9G4+Y8ECp~JH&Uc03?{Ya zQm}IG`^3pN!VmwrqxdU7BtAZjziuM9CSU7NT2>}3A|e}p6@Xv?=Ptg$)r?vr8q?JS zZ8m327Gwrwf|H&n(Xi)zuzHCyoQaZVYf9u5*~^XrmzYMn_Tw$ z-(rgWoSbge+5J)&!)5T6z{>oaSt);$?V(5q-gD&HyDb+92HWuxtAfT)ApuW-nnq6< z)yT3DvJ%}d0h5brrSRdV)Uibcw$2)L-5znw{(e0!j1m{jV?%{GkEuvex8SO}kE43^ z6MlZSIHbHVG)LV?-^Stb<>l^u$t)@uk%1^iG&!nx53WeB^@?6ydm8%uCx=yBx%FT3 z`M)(kzw9ZgtI-l=IGxTzjl>G_muqb3tGd2ky6eynF)I1V8XrmMrUmf8qa*_;Q3sRP z=I4{k9t0(ZPK@3(M@Lp$WKs>=0YzRDM5=JFWQ6Oz_xx8UynhdNXu+fIdZ z=}Uj$^)hzo%+v$o7?n3B)+)QfP9XaEtZ8%iJN?pc4XDE_AB7GmlHbk+W`?>{mP@1 z(@B5&V~2^#mcKj4jHB^49BQuGFZ@WIAc zX}gwU#8Kbzw@mtc(NP|CJMi%P2_tMQ03SV%T}yZ9vC-d68OA$T)#WpVr+`SmIFJvBa8G?sC#QUZ7?C={_j&wp*m${?6)%9OyI~VQ9n9lL zxzSlsdZDldsFgDGbRBKVY^uwhqq4fpgV#W66l4_Bo?lSX!l*Fx0t+GV0dF}K5H>Ii zFz2y4Yx_Z)@42{bCnPp1fEXU!vbSwRD7LtZmrCo`$ot)+Mp&glw}Z|VJUAy+>Jr_BpPGwl|GcoX$m`8rZ-&k>xv!e2mY4Pcrkr^l z*SIN-$~e{J{$Z3s-^!Rt32R~?GN%z9;27g=8ic-*zA?S^(fN~G$ok7_^`P;mmO_?2 zeY0nMX`p1w=}{e5%K(NFKo3#71t=!3M^vDv0$<82X9ypB2}rn4bxQBWhnvgk(Uk3R!-wX~&)mB^qO z`QnnP6(w$ZOl!L$><`?p1yy%$`sx)gW*4!24pT%hLJMUq!)_$9U~9GyUt-(~KKj)# ztJM}BS9V1Yj)|t>LfccxMt@iDHlE{g-vp<}p-U=n{hYDhHhT!1Qlur;gTte0I0hOn z!Qvk`@C{2!N#&A*wW_C~N8yhml6E^8^279;pefB`xI;Wp5wb6tVR_sO;4#@oxq3Z1 zOXj|#Pl0%||57#mM^?!=i^HIfnWKE*(nTt=Z#x6wf#a2j&yMSUW!AZRNf}6o8P9c# zK_f#4TSf#rhVi#R##ShSvskoGme6SNMZV$_-e`^>1h4b_m`(hP%b0+LiZs{;Nd}9x53P0k3yBJV*fY z1{Dkj76O`vd^5dy=#gLVX908MfC5&r;H3++f^cr2L5Zk5KRoXA6Zm5(z4(29vIMfGl=)mBVRzL}l zLx&(Pki}z8h{I_sR9Nh<;-?uDephpmM;i1SBR+V{7&VE$Ou8oZmPszILl19Z%1|N9 zal`4ybsGR~h$$d*C>f?HSxMxN(HdXS?j7*~N9sawoY(;~Y1CsYn z@5;;zCsR>xZ;8^!(__UydA}9>{nl&k_j8;VR{unaS+R)s!l4Ew880&&k}#A!naeSH zcopk%>0O&ZSuuM^Q!*>`W`Qi%{S}P_Ccx1Cy7N6_HJ?$~q%R!b1oyu6GA^<|5bSMv zpyWOXIG>(kfge>szxUgt#8ya=>{G%s_3Hynvfw{^Jez>R1v7@4D@N&7%${6~qcUH< zk;#R#P_yLyx2sB3IzL*(yH>JvrwDkPV8eZObV|}zc&P4@#OSF8C&j2Rg$>j9aT+Ut z*%Po36mW!wvX}T|DC#0Jh54>pASNq}hvhmiee)pg`-M14v^~dROAN$`uUBlRjsH&B z<5z#;wHdAbSF?|3vIfM7&yg?j&#kbUH;iyUE`kAVIjdS0aE@wYv4N-#6<2i1z1@5k za^n61#&A0Ema@rB!HsBO>>_Nq8<)uA@2UFuF6v;zwnd%@u0|EkQ8CQ-yo?tO5 zqv%{#Pvy)&oS&$YRQc+^x&8a`dE9X4r0`lud98Y4aTigZ6W8}U6*w@x5%J?Fs&gsV zb78xxb4i+ifiug1(@6mVSw>*%mQ?J}#?vZ{xGFJdIrqpwhNx)^rEEoowoa#U+qVnjG_lvt(0FLNz3GGW?MEoa! zZU#53Dbb0e@KwD;RtfX=%)MM{;svyj+eU)sM#Ra%y)HM?=r`H2K_u(0k9d!7YDOPN zi0_*Bi7Q$UFN)#Oa$&O!r=P$`$$}ElbEg*|QTIBj(knY=y4ZYbW9O;R)k0h$?#8?} zXJOK}Ro8yw?3u5xWq~2#Exqn^%1LUDQow;!o}1oj?bk>DR{2bxM{c>)W*ZfTN)pr< zM%7sdgV;rug|8gbNCS!IzShR75xd~Ry+M9XgFD!Z<;KE_Pyt}o9MJp11?NxWZcn3% z3V!}D>Nt`xdx*RD=Yb(myDP`c`6JXMN@+Yrer=_885dTq0{#=s0}dq+5~qAcKNE2M z3-?sy$VXvG1lM>&Cg35Ljp8+TVWW1ArKYtYO@Rwg)`kUoG-bM(g;Me6$v#0K%kM)= z(2S>4X%yhEQk9P$B+b>MCFd2gsEH4=%l(g>m%^5+>b#WqJX}L&F0CHda^)8c`|i@* zrc?mqc6z4XCkO_kd|b_L4^>K+rl6dT$0RP?v(hWNmy>r5J@lbvuOO(UVPbzaS3C>S z*7OhJm6I))?vL3;v_a3$4{7~Cb@g}!Q?9jkI`f?iGXSicZum!Tnr$h~?a~1xO7Jz! zvoHOkIM)^;|1q6|Upm=*>{7603*>Zz3fQ1L^3m#PS500aciI1zA`g7?P;a z0dOaDjXEpg+@1$tBrpa;(e4dci(crkqd(j888irc7m9$~uwssExHu+6o>#ycv#0xi z=XisDa;5L5r$AK3I7T~B17H-X0BaqgCjeNY85ejuI<|B*ORjw~g&B@Lo!(0YJ*ZVR1Sz9X7pdluhylJS;7vcSR`$aExJ4R6c9W0)Bz5(s>e| z7Ily2#xSwzKQwI@Z^7$o*eXjK;8jlwY+nc@eIqBe%RoxT;LRGP9SI>Nu^}O{{CswV zGj0Zb34eaP&y2aR!3*{gZ4W?Oerj5PiiFAX4~dW~+Ven}=62e8IM2KHWUv8MvnSDH z@?zXWqO|*E;@pdJVA(cft@vnS>TsgfeKcKmM$shnXkGM@0Q7gmHP0IIbh;36(q4&- ziN*u-8lJprj^#Gxi@d%ZuiZ$779x7CJr3BLQ*|ycs@U{In6EiEiF$=$r#D5|N6E&( zHeEMrF};gvWv(xIm72XtNStHU#$n?jtbu3vZE$Nrg-M1dCcw8~&d3IOdzAvX*3&RN zpekbv{vBBE@S6jkNDmemJF2NA;6i|MlSLWldMF*>0rJ^NHCkVL>NSgpvyPyY!fH=8X~v52-mECeuCx4$XHA7n;@mL7y-Paq<)*92)T7_P(>io2KkcX~ z&s`FBVnuhb)ifn0Jxcr={mSqho!|OD_o&A!sQ9ir%?H1K`1jTKA6?42wW8hN@BX0& zj=9BwCB+C=uac6bL}K}8+~{Q-?|{~r!N|38HH3!N6u_Ik{P5N3gPSS?jqpep85@hT zZn**P_dN8pfUB+4bcJnj80D%KHA*{Awm2%=BWzNhWYod#0P1K6K5@)E1|j}*wTia7 zD!@erh};LR^$H>`(pgm~&e$Px)KDucojeLI*z}H?@z00u!ER(H3D(Y)+6bh6A{g(UA5wjgD+15*WYDw9IO=t@It{JP_5Ia_19sDJbD_|CqN^=mrE4tnj0*!QRxK zl8b`#*Gq1lL83FlJjCsfc#PpYCCOz>E;XTs9FYEu)|lN99>F8Ju9;r2DQz zd5K+8=hrwkOb2;({w5i!wwsjJ z+(LI(cXf2CjN%U3K1jjiYKNrEM803v+SyXQd{g!&>DZj%55GS|qp4rDaQhNd)kcdec~zfp}jdT0+QWD+=mu+aF1 zT&*6MChbeXLB-1nwT)S0SCj2$nL4wMdOux7C-KO(HmAF_gZ(Tf*jdM}FeB%y&AEw3 z9=|qxfQldJ-h{ig(>$K?#g%=4qCQ=op#*q^?p?n$8*200TVc)bN+iO1po9Zwc7ZGf zw7tQHQ#YelOYcnk2FgjH?&PxE$Hi?{pbsS7;?Q{fkq!`!=e+EdnN14vG8Goon*r!9 zr3=>}O>}h3N5B7Y2EzuA83*MiS2s%nK9nt_GZm0Mbb01XS5^b^9yN372!-*PL`NIOu+-v4`%^c)FunowpelAB>3$b^Nk-Vaz;U^&7*;YH3{In)}(@w_K zsnHWxQ1K~*QZ`GJ4cKcMBhypQs>Zyob?Qk`q9T8}`#4}*S64;$x;-w1BpyQX)kBhl zGufjL#UI$GSGm-q9U22H;`8A^iF!t2%|D9Wknm`VQ&C4|q-uc?a^|MhCzkPNl*2*y z5CndSr9Qx*lnOnvMUST3`!dF={&A2C>M6O1+arz7Y6FD%-?kX|JE|&Kp*~sv-W8na zPMiCwI+d%+OSJ!M2M8ld3$1Kyo_B2z(V228jtSr(+Haq=QxUljcbeuM+kL;{C1>@p z7qczB?TBYxlu*cv{@{~#*LJ*^gJ19PMeOAJMONhx44iXKa06Zcjw8CPZ{OI?xkhCtZHVVJ zj*aS7W+x>#;}Z&`bva#c>rI*dsM@`N){_GTf&kImOJ`dxqq1ko8TEAhe$Z8hbUE?j z`Rci3W`S|$+|`$ryAIieMjIgAFkc^ZShaXl6)R%a1PZ!J-~4knYrkC)nXWS>7?WZ2 zJmZIAETDXtiX&8YKmQ=k4EJiU16$3|608szA9Jl!l1v}@HBo}-HC%Ah!DyPdemD78!-dA?sEb0_LP;8g6)hId+WX9IJ2 z(fyg!D%iGz-PkKAKbMUUblyZWBs=2D;w^g}FxfrUKV9NQ^_MDuCXX8W^YJBdzjv+J zK-BL7CxX_cf$}e4E(SY3env~sFim~LVcrdwtpO1OUFn~y18KlDrA)c1gfg> zBK57t0O#9HXo|cvtB~s+;rchgNKDg1cVuxv4f#!+wguSJSiY^=FXQ|j^~rsOS48LDCo=*aND%$#Q!LieK!ph+Hn9dS zKRX}bo?3q<-;FHbhYk8BC+4Sta6)fAjl7_YMW?vCekwALRFH`~h+rT+(HRv{Ze72%f957`I6;+B-AG6aZ5_-I zRQqdj5p-|J4$lSkItyEj9K76@1pQ>$BwM;5;HPuVGL69!rdkyuy3GI%9H6S*f<%WHL}l7-inKrp}}rBh`8n za}KDe7;zQKb?xAO!0srQ&)^ceJYUS@I6~+EimICcgrHP7k2?@gs%eZMWMA&@%4^{6 z+QI46`*}FglapUbm}?jWc8lu{3cPIn8)f;SRKun1aVYQ{J20z(iQ<0s)WWC<9xgxo zn@>eH9LM-1=N9G25l(3?29<-y@y&gjhp+r#XynNQQw1EBVw|X1$VMJfsbhrX8_V4R zfZ@N6pLm`|SVR%KxzJnM$}!wXuVhgFWXHUjRR+EXVOivO(cs_8fD*}q>W+2SP-u~1 zOX+pBykX#&+7=H`<3=Z_*0mk{VDj-0xnEvq`$N9ZeEGrqvji>_;u=Db^zlG}21Yrz ztrQuE${OE+34#jAfisj5v~jGK*|QDAvG=K}GQsGm$YKkLwJlSq4JQF?AA%(Pp`l-5CfBmxq@Uz`7M;D z3!!|M&09}Quj33b1=P6UmU{H2_sS@tQF~>>%NgBYlGsVs;NJSYnG%%u&fG-MCHjEL zb~8X5Y=Cc$oyKNP?WL{E^KyzkkZuEm&E8$Z?%qMk6AaN-ij;@Mx_t69d5`$t3fzu! z7_Mh)c)RFYKy-_}JN=w-A~xt@;w%OCfZ0W$EbXvcSsk!sz@>>P&w}5Wh(&+M?KpVS z*~ED_*-s?~c6ts-L~ZIse?^@Spev+?ww>~J>yT2t)>q=W-i@R@hkMPb5JN4j;lg{V z5e~D~?`;=b6R`x7IcvT|4$}V5*EL4Pjp`mE;mg(zJVY5f9hdtW4>cZII{&BgRSZS= zb#usW2ILE>8Fw5oC;IX^_lSfj2AndWxB8ZX1CO`L%QmqqM7(s(>|pOGvFCQ&!8Anb z*Zsbr74>@h=aIW)H|yg+istD;)%yeQSXj1gT+^AF`KSFpo2+};XAM<{|M**Gi^Qw| z$nm|0%ZxV&t3^=XPwSTqxdYVmz&4d}D%;rW`+~H;{2h?V(mB)+X4qG~<=|-hbFlc| z$H7d?683^maF8HNfOIW z(%rYRs1_JTaV<|zYdS?(>Bfp4kdxcV8??_w?X+}*!1^z7UVqwz>SC#6Gw5(J=PV_I{f|AniHy%xcpBz?zIxeG)YP>WtMB3SR-u98Dm7pc$h5nyG zz@$%^?ivlgj<=iH4V(cTy4ftP_dDpCBeX=UKEC@GHyyMRoc~7kT|+`;+~$(Du}EJj z^~0GTY2l~9BEfmt2`HG{&mW(R!FJ+p9YEu00N zs~cPC=yO$$>YEW(CRJH%#ll{c_lh1}zKnA_@!j+9v;X4gHS1Z`Pf(t=6~LxL>`#gWbm`HgdLl*lq2*MqeyX_FI3P`2O2}o80evY^bCSQr)dy zS_Yf&b~CY(2>cpQ>zjvz;TG5R1PSp=D=fRN-A9opUANBKpN1y7Unkw# zWFf_9MdN-xB<5Zr^>rK@RaN;!VmC04jRUuB<*k$+ZI|N2|D|`~p=JFS(H8E8zyml( zWr61blTsc}cEGWvb3z=~V0bugK8FoqcI=3{ML4}h*nVRYc#;`*aQd~mso5;s{x|d? z?~B2Lu6El%!B@UA!b+bOWn*W{(I5xe9HwtL`%cjkTSVx3_|hDtTJ;g)TAeRE9^F&SWP@$!v0TCtt1+j0=64~ z{DrtL|3x19;6F(C4?BF~8nq7lMVc=RULn;-v~0QCuFl=e;gikbbs8kZff~}&m;rJh z1L10!L4hXCh5-LpNc)k29D`T52gCSsgJ|wQTMUInGg5RtCk__b^9`j%nwbXQ@Flk# zC3)lm9~MMqDgKeA$l;|LWb?L@8YRjHoV*)vs1#%4*c1rL{2Y~HAZD4Fz>w1GBA<2z zv3$I^xJWaXY%e8fIsD3I)loN@LJo3Ot4$}#RIA5(uc&_p$zwEFfY4cF8=-ss z%L{k`vX2{z)m!9KL?_p5YVr)6g`sFN(92W3cBLVG!c2D`%KEI&&-$X8%fON$o0_Vw zlKj(g_E?w0&N$5ng{dhUh`T1^##|Q%3o=&x4i_J7tZo#?<26HDv}pJT3}v!e_RJ-?p)|YXt9(_Y7Kdx5JXL)-Aq%5y@2XfiL8o>>+Z_=^ev@(V z4NiTAdTJ0d%Hd(F2k<)l+QzlCuKlQlxyu28-iMPBRyln?uOVeuk`IDr&0-nAO5*&2 z$f%-8^A`b7LkYW+298!mldFp9oTkieMz760qg`!Wr=RE~8EgK6`UoAaWOE=dMP&Ts z3KHkz0ZAWX`uV#*J3hK60E30z@QRDHUe+-&y@J3V=lo^S@3;8O(bX~H+~jwHkD?n~ z139xR7{|x<;-2{R)*38qhECNO9Et*f|{MaA$A<#_Ihw>Becvd2ws1 zhT)aINP4?UOhEE7&ZstN**-*#$;S0p)YL-q!K~m#g37|!*A-9Iz4}zGkmp6Tj4%6E z`k8_M_+tw326cwE<>*4=PmK+?O!~J_J;ddY>ynwgi06CLmLiJ?)P+c%PKhG@)y>Wj zG5*YcK^@>s?{l4s)`yoz2z~j}=Pa)gdPD&|C?o|5*4bU}aBey>B9yL6N@D^RM*hlc zD5df?#;BJ+ok-SrqGKIlxx-hOZ>Dkh;-A2Cm+n)OU6=2FyQwI0{&W2!n?v<~-eiCO zzrm65{C@$DC)8*u9-lXWQpjjt=B5B5?SI{r6odck0)mn9zuy$V_w{bQ6u5Ny~y}p(c5I+&O&6YTVt0A_*3Gm!n=yC_ZK) z`)h?ClvV;bh9 zKQGRExA7D2VI?d9*saOkEZuL|qp@_Wd(-&T2uE|Lqew%VO zy|V5@pblpp>%j%PMnOL{rrqKnGrf|S-+OmG7hK-BblZ%Zzly=-9qxJS=IndfX;AjWE;Fo62@(ty95 zV(D@c6>NM@!e{2ry+5oP7Z0S#gGuGCweMVG>Y^;3cv+#X9+R40YZTM9R?K3dQ&Y8s zHv(Qd<(AZ3G368>j*KuXFEV)Iv?>SZlv108KxrI>3o1(W!W9h;-zyd%4l8}f5Mc#! z(~-E3B4Qew$r(r!vGnGrl_1n3mTvA_T-6&D}yr!cvC#-)1czoJBD;*VXh(K zT9B3_D6%|ULp*$k^uSTEmf>pj9WWmex_WPr?ae^Q++4A*VNL^#&hz(|f9X#;k1Cxk_U>!1$DaCw#sEssLZ8m1%hx!|<`yr&EW zjt5DrkW+%cYiCHTjC1v#1tTp&h7t`&!b}XJt{mDEYaBI+g?GYnhZ_sXaGcssjZ7|i zqV7POgA2np)QJ%*y%{G@K;6xD`Rh*JIG%9Vq*0Z@k_z0*qWMG~PZ;|kCY1Z`_$S0e zBh?q?!;2=8?ndSJUuZ%l(WJ7gnyW|??X?69ex*1pN1Aoyt%3oaoR{7*E&~xg`S}ha z!H{zp@$JRP4E?Hil&CYAy@euY1oofR_ZH!6X@kuqFvzb0$l!M>a45&>?^X{pheG6Q zbee}$ef*F>wV=kfaIW#Xy&BV!+tJAo-jfd|^1M3IqXMVvf*Er%b-XsSn-+_Ed8hef z^>g5-6MUSCzrVkqTf*nsDy^357aTZY72d73Q|7Iv#06q1c~@(!6X_!jWvFIgkj!ue z!|-cw5kCX@(+161x@Lv#BTBLfUL*OV8OGv%mq&lfe>A8IuAi6yBU_!-q#=|EB_m-Y z-~#E~wF7j3=>rz+^7RoH1N|J@Bba@mr$@7a+flk3V#;UBnhQt{w>FYs9(^7LrqgfU z`-ZZX>Ffxt=U;5tt-?-}b#pZfeK^psR^$Ca__FzRZ9b1TGGsQ~DX}Poa}-RU8W_DX zakXgP)$_jT%CqL_;kR+0G8CS9tB%FV2$~0V9sI7**jC)PRfu*xA>_$H)Bgrdy}SI4 VHWG0k_&HXJ$7;F{5h_;i{s*1+Bjf-8 diff --git a/assets/images/DeleteWidget-1bed7f83ff7701a4798a05e6c16a8c68.png b/assets/images/DeleteWidget-1bed7f83ff7701a4798a05e6c16a8c68.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf3a56ece323433f66401221ccb310871de6fa5 GIT binary patch literal 119498 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�`aCs>a>h5WYcyz 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

    _GYRDYgR-0kr(4^ER%WWgYMv&ASOFfczm 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 KUv%n9$o~WI{+7-F literal 0 HcmV?d00001 diff --git a/assets/images/EditDashboard-65933356245c0ff0557897065a20848e.png b/assets/images/EditDashboard-65933356245c0ff0557897065a20848e.png deleted file mode 100644 index 67e2867d24d29a29b330c849f29795e637427158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19434 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 diff --git a/assets/images/EditDashboard-931c64aa1443a24eb4f7ca8390714030.png b/assets/images/EditDashboard-931c64aa1443a24eb4f7ca8390714030.png new file mode 100644 index 0000000000000000000000000000000000000000..6150a21d71efd1eef90a31ddc72f0563fb003016 GIT binary patch literal 76666 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 literal 0 HcmV?d00001 diff --git a/assets/images/EditWidget-3ba0f4537b2c0f83f581b256a71fa0bf.png b/assets/images/EditWidget-3ba0f4537b2c0f83f581b256a71fa0bf.png new file mode 100644 index 0000000000000000000000000000000000000000..500e4d98dd46dd30910a71b8054a318d28422b2b GIT binary patch literal 170195 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%0Av3ipH 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

    Improving test automation stability

    Challenges

    • Complex, manual test runs
    • Low stability of regression for unclear reasons (60% passing rate)
    • Unclear reporting for non-technical stakeholders, leading to the lack of transparency in test automation results and progress
    • Test automation feedback is unclear, unreliable, incomprehensible, and insufficient to decide to push the app to production

    Highlights

    By integrating the test framework with ReportPortal.io, EPAM's team provided:

    • Simplified test runs
    • Key info for the manual root cause analysis of test failures, such as logs, screenshots, attachments
    • A possibility to triage failed items (AI-based and manual)
    • Clear reporting for non-technical stakeholders

    Results

    • Improved automation stability from 60% to 77% in one sprint
    • Discovered that most failures were caused by environment issues and reduced the number of such failures from 20% to 2%
    • Reduced test automation results analysis effort by 45%
    • Provided clear and comprehensive test automation reporting dashboard: number of test cases, regression passing rate, reasons for failures, product status
    - + \ No newline at end of file diff --git a/case-studies/IncreasingTestAutomationStabilityAndVisibility/index.html b/case-studies/IncreasingTestAutomationStabilityAndVisibility/index.html index e40a2f5bb..d3df8b6f8 100644 --- a/case-studies/IncreasingTestAutomationStabilityAndVisibility/index.html +++ b/case-studies/IncreasingTestAutomationStabilityAndVisibility/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Increasing test automation stability and visibility

    Challenges

    • 2,000 unique tests had low stability (25% passing rate)
    • Complex and inconvenient test results reporting
    • QA team didn’t have capacity for test failure analysis
    • Automation results were ignored by decision makers: no analysis of the causes of failed tests, no trust in the automation testing process
    • Lack of visibility into failed tests and failure causes
    • Absence of clear reporting of QA engineers’ workload and performance

    Highlights

    Integration with ReportPortal.io allowed the client to:

    • Collect history for previous test runs
    • Identify passing, failing, and unstable tests
    • Select stable tests in a separate run
    • Assign unstable test for refactoring and add them to a separate run for implementation
    • Configure ReportPortal.io charts to track a refactoring progress
    • Accelerate test failure analysis through access to related logs, screenshots, and attachments in one place

    Results

    • Automation stability improved from 25% to 95%
    • Analysis efforts of QA engineers decreased by 10 times
    • Client stakeholders use ReportPortal.io data to make release decisions
    • ReportPortal.io became the main tool for tracking test automation progress and health
    - + \ No newline at end of file diff --git a/case-studies/ReducingRegressionAnalysisEfforts/index.html b/case-studies/ReducingRegressionAnalysisEfforts/index.html index b729e8753..30ad60747 100644 --- a/case-studies/ReducingRegressionAnalysisEfforts/index.html +++ b/case-studies/ReducingRegressionAnalysisEfforts/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Reducing regression analysis efforts

    Challenges

    • Test analysis could only start after full execution was completed (4 hours wasted daily)
    • All test failures had to be analyzed manually
    • No visibility into causes for tests failures
    • Absence of history and trends of test failures
    • No tools to manage team workload
    • Test execution reports were done manually (1 hour of daily efforts)

    Highlights

    • Real-time analysis during test runs: results available after the first job execution, saving team capacity and providing an early reaction
    • Automatic re-run of failed tests provided additional value and saved up to 5.5 of team’s hours per day
    • About 20% of defects previously analyzed manually are being updated automatically through ML capabilities
    • Clear visibility into the number of new /existing production defects, auto test related issues, and environment related issues
    • Full understanding of application quality, correct planning of maintenance time, and transparent communication of environment instability based on real-time statistics
    • History of tests execution helps to analyze causes of test failures more efficiently
    • Improved task management due to possibility to plan work allocation and track tests assigned to each team member
    • Real-time dashboards were tailored to client’s KPIs, giving full transparency of test execution results
    - + \ No newline at end of file diff --git a/case-studies/ReducingRegressionTimeBy50/index.html b/case-studies/ReducingRegressionTimeBy50/index.html index 9be62512f..f80cbcad1 100644 --- a/case-studies/ReducingRegressionTimeBy50/index.html +++ b/case-studies/ReducingRegressionTimeBy50/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Reducing regression time by 50%

    EPAM helps a Canadian retail company to reverse-engineer their legacy IBM-based store management system to a modern tech stack. As part of this project, ReportPortal was deployed as a centralized test reporting tool.

    Challenges

    • Unavailble environments (15VMs) blocked by aggregation scripts
    • High risk of aggregation fail: 1 in 10 aggregations fails. In case of a fail, the whole regression should be re-run.
    • Constant regression fails move weekly releases for 1 day
    • Lack of information for investigation: no screenshots/no history/no structure/no all info
    • Duplicated analysis efforts: missing history of test cases and known issues

    Highlights

    • Simplified test run reporting by integrating the test framework with ReportPortal.io
    • Distributed test execution data for root cause analysis: logs/screenshots/ attachments
    • Provided a possibility for AI-based defects triage and manual triage
    • Provided clear reporting for non-technical stakeholders
    • Real-time reporting
    • Save on early reaction: team result analysis right after execution started in real time
    • Collaborative results analysis
    • Test Case History helped to identify flaky test cases
    • Extended ML Analyzer
    - + \ No newline at end of file diff --git a/category/admin-panel/index.html b/category/admin-panel/index.html index 744408cbf..b728c81a6 100644 --- a/category/admin-panel/index.html +++ b/category/admin-panel/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/analysis/index.html b/category/analysis/index.html index 56da5af03..6d044957f 100644 --- a/category/analysis/index.html +++ b/category/analysis/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/case-studies/index.html b/category/case-studies/index.html index b50c3b67e..359bb5a65 100644 --- a/category/case-studies/index.html +++ b/category/case-studies/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/dashboards-and-widgets/index.html b/category/dashboards-and-widgets/index.html index d87c42770..3e6e39eef 100644 --- a/category/dashboards-and-widgets/index.html +++ b/category/dashboards-and-widgets/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Dashboards and widgets

    - + \ No newline at end of file diff --git a/category/developers-guides/index.html b/category/developers-guides/index.html index b05e9afe2..0beff1537 100644 --- a/category/developers-guides/index.html +++ b/category/developers-guides/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/installation-steps/index.html b/category/installation-steps/index.html index bbe0773cf..bccdfe3be 100644 --- a/category/installation-steps/index.html +++ b/category/installation-steps/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Installation Steps

    - + \ No newline at end of file diff --git a/category/issues-troubleshooting/index.html b/category/issues-troubleshooting/index.html index 0a18fcffc..48b9d95dc 100644 --- a/category/issues-troubleshooting/index.html +++ b/category/issues-troubleshooting/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/log-data-in-reportportal/index.html b/category/log-data-in-reportportal/index.html index 295f4450d..1b146c9f3 100644 --- a/category/log-data-in-reportportal/index.html +++ b/category/log-data-in-reportportal/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/loggers-1/index.html b/category/loggers-1/index.html index 811c8039b..28665510d 100644 --- a/category/loggers-1/index.html +++ b/category/loggers-1/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/loggers/index.html b/category/loggers/index.html index b102aadf1..2a22fd4f7 100644 --- a/category/loggers/index.html +++ b/category/loggers/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Loggers

    - + \ No newline at end of file diff --git a/category/plugins/index.html b/category/plugins/index.html index b24f601b0..ac0c8c5d4 100644 --- a/category/plugins/index.html +++ b/category/plugins/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/quality-gates/index.html b/category/quality-gates/index.html index 1607edc6f..68d01901d 100644 --- a/category/quality-gates/index.html +++ b/category/quality-gates/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/reportportal-configuration/index.html b/category/reportportal-configuration/index.html index 7bb6e3617..ec25b1e60 100644 --- a/category/reportportal-configuration/index.html +++ b/category/reportportal-configuration/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/saved-searches-filters/index.html b/category/saved-searches-filters/index.html index f02dda63d..2de5e34d1 100644 --- a/category/saved-searches-filters/index.html +++ b/category/saved-searches-filters/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/terms--conditions/index.html b/category/terms--conditions/index.html index d25707ec9..5c7df7551 100644 --- a/category/terms--conditions/index.html +++ b/category/terms--conditions/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@
    - + \ No newline at end of file diff --git a/category/user-account/index.html b/category/user-account/index.html index b57161a20..afb2395f6 100644 --- a/category/user-account/index.html +++ b/category/user-account/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/category/work-with-reports/index.html b/category/work-with-reports/index.html index 05f942e88..71852477e 100644 --- a/category/work-with-reports/index.html +++ b/category/work-with-reports/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/dashboards-and-widgets/ComponentHealthCheck/index.html b/dashboards-and-widgets/ComponentHealthCheck/index.html index 1d000dd1c..c26cbf127 100644 --- a/dashboards-and-widgets/ComponentHealthCheck/index.html +++ b/dashboards-and-widgets/ComponentHealthCheck/index.html @@ -12,7 +12,7 @@ - + @@ -34,7 +34,7 @@ link to the widget list view: Filter list view + test method: Test + status: Passed, Failed, Skipped, Interrupted, InProgress; the number of items is equal to the number of Test cases in the widget a color line which depends on passing rate (see section Widget legend) Widget legend

    Widget legend has two lines: Passed and Failed

    Failed

    The failed line has four colors:

    • light red
    • regular red
    • strong red
    • dark red

    And have values - less than specified on widget wizard -1

    Passed

    The passing line has only two colors:

    • slightly green
    • green = Passed

    And have values - from specified on widget wizard to 100%. Depends on this color scheme each group on the widget has its own color.

    Let's say we set 'The min allowable passing rate for the component' to be 90%.

    • passed green: groups which have passing rate 100%.
    • slightly green: groups which passing rate from 99 - specified on widget wizard.
    • light red: from 3* (90% - 1)/4 to (90% - 1)
    • strong red: from (90% - 1)/2 to 3* (90% - 1)/4
    • regular red: from (90% - 1)/4 to 2*(90% - 1)/4
    • dark red: 0 - ((90% - 1)/4 -1)
    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/CumulativeTrendChart/index.html b/dashboards-and-widgets/CumulativeTrendChart/index.html index 443b57431..6cc6daebb 100644 --- a/dashboards-and-widgets/CumulativeTrendChart/index.html +++ b/dashboards-and-widgets/CumulativeTrendChart/index.html @@ -12,7 +12,7 @@ - + @@ -38,7 +38,7 @@ Separate bars - is shown a separate bar for each status, and each defect type group.

    Tests / Per cent Test mode - OY axis is calculated in test cases. Percent mode - OY axis is calculated in percent. OY = 100%.

    A user can combine different options. Options are saved per user.

    note

    The widget doesn't contain 'IN PROGRESS" launches. The widget statistics calculated only in items with method type TEST.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/DifferentLaunchesComparisonChart/index.html b/dashboards-and-widgets/DifferentLaunchesComparisonChart/index.html index e0d94e327..7383152ee 100644 --- a/dashboards-and-widgets/DifferentLaunchesComparisonChart/index.html +++ b/dashboards-and-widgets/DifferentLaunchesComparisonChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Different launches comparison chart

    The widget allows you to compare statistics for the 2 last launches side by side.

    Widget's parameters:

    • Filter.

    Widget view

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows the percentage of test-cases by statuses.

    The widget contains agenda with statuses, the user can click on a status to remove/add it to the chart.

    The tooltip on mouse hover over the chart area shows launch details: launch name and number, launch start times and percentage of test cases of a particular type.

    The widget has clickable sections when you click on specific sections in the widget, the system forwards you to the launch view for the appropriate selection.

    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/FailedCasesTrendChart/index.html b/dashboards-and-widgets/FailedCasesTrendChart/index.html index 818fdf340..b28d2da90 100644 --- a/dashboards-and-widgets/FailedCasesTrendChart/index.html +++ b/dashboards-and-widgets/FailedCasesTrendChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Failed cases trend chart

    The widget shows the trend of growth in the number of failed test cases (Product Bugs + Auto Bugs + System Issues + No Defects + To Investigates) from run to run.

    Widget's parameters:

    • Filter.
    • Items: 1-150. The default meaning is 50.

    Widget view

    The widget contains the agenda: "Failed".

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows several Failed issues (sum of Product Bugs + Auto Bugs + System Issues + No Defects + To Investigates).

    The tooltip on mouse hover over the chart area shows launch details: launch name and number, launch start time and several failed test cases.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/FlakyTestCasesTableTop20/index.html b/dashboards-and-widgets/FlakyTestCasesTableTop20/index.html index a0bc42043..de09c1992 100644 --- a/dashboards-and-widgets/FlakyTestCasesTableTop20/index.html +++ b/dashboards-and-widgets/FlakyTestCasesTableTop20/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Flaky test cases table (TOP-20)

    Shows the TOP-20 the flakiest test cases within the specified previous launches. The widget defines test cases with the highest percentage of switching their status in the execution. So that you can click on the test cases and be redirected to the last test item in execution to check the reasons.

    Widget's parameters:

    • Launches count: 2-150. The default meaning is 30.

    • Launch name. Is required

    • Include /Exclude Before and After methods

    Widget view

    The widget has a table view with the following data displayed:

    • Test Item name - link to the Step level of the last launch

    • Switches - count of found results with often switches;

    • % of Switches - the percent of the fact switches and the possible;

    • Last switch - date and time of the last run, when the test item switches the status, displayed in 'time ago' format (i.e. "10 minutes ago").

    On mouse hover, the system will display accurate start times.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/InvestigatedPercentageOfLaunches/index.html b/dashboards-and-widgets/InvestigatedPercentageOfLaunches/index.html index a2745e7a5..a3181c29e 100644 --- a/dashboards-and-widgets/InvestigatedPercentageOfLaunches/index.html +++ b/dashboards-and-widgets/InvestigatedPercentageOfLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Investigated percentage of launches

    The widget can be used in two modes - Launch mode and Timeline mode:

    • The widget in the Launch mode shows the percentage of "Investigated" and "To Investigate" items by launch to sum (Product Bugs + Auto Bugs + System Issues + To Investigates).
    • The widget in the Timeline mode shows the percentage of "Investigated" and "To Investigate" items to sum (Product Bugs + Auto Bugs + System Issues + To Investigates) in all runs per day, distributed by dates.

    Widget's parameters:

    • Filter: At least one filter is required.
    • Items: 1-150. The default meaning is 50.
    • Mode: Launch or Timeline. The default meaning is Launch mode.

    Widget view

    The widget contains an agenda with "To Investigate" and "Investigated" labels.

    The widget view in Launch mode:

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows the percent of "Investigated" and "To Investigate" items to sum. (Product Bugs + Auto Bugs + System Issues + To Investigates)

    The tooltip on mouse hover over the chart area shows launch details: launch name, number, launch start time and "percentage of "Investigated" or "To Investigate" items.

    The widget view in Timeline mode:

    • The X-axis shows dates and weekdays.
    • Y-axis shows a percent of "Investigated" and "To Investigate" items to sum (Product Bugs + Auto Bugs + System Issues + No Defects + To Investigates) distributed by dates.

    The tooltip on mouse hover over the chart area shows launch details: date and percentage of "Investigated" or "To Investigate" items.

    The widget has clickable sections when you click on a specific section in the widget, the system forwards you to the launch view for the appropriate selection.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/LaunchExecutionAndIssueStatistic/index.html b/dashboards-and-widgets/LaunchExecutionAndIssueStatistic/index.html index c8862bbb2..4b9f171b7 100644 --- a/dashboards-and-widgets/LaunchExecutionAndIssueStatistic/index.html +++ b/dashboards-and-widgets/LaunchExecutionAndIssueStatistic/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Launch execution and issue statistic

    The Launch Execution and Issue Statistic chart shows the status and issues statistics for the last launch of a specified range.

    Widget's parameters:

    • Filter: required

    Widget view

    The widget shows statistics of the last finished launch for the chosen filter. The statistics are divided into the following sections:

    • Skipped, Passed, Failed
    • Product Bug, System Issue, Automation Bug, No Defect (default and custom) and To Investigate.

    The widget contains agenda with statuses, the user can click on a status to remove/add it to the chart.

    Tooltip on mouse hover over chart area shows launch details: launch name, number, and duration.

    The statistics for every type is shown in percentage. On hover, the exact number is shown for each type.

    The widget has clickable sections when you click on a specified section in the widget, the system forwards you to the launch view for the appropriate selection.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/LaunchStatisticsChart/index.html b/dashboards-and-widgets/LaunchStatisticsChart/index.html index fa722ccf6..e8ac489d2 100644 --- a/dashboards-and-widgets/LaunchStatisticsChart/index.html +++ b/dashboards-and-widgets/LaunchStatisticsChart/index.html @@ -12,7 +12,7 @@ - + @@ -27,7 +27,7 @@

    The widget view in Timeline mode:

    • The X-axis shows dates and weekdays.
    • Y-axis shows the sum of launches statistics with each selected statuses, distributed by weekdays.

    The tooltip on mouse hover over the chart area shows details: date and total launches statistics.

    The widget has clickable sections; when you click on a specified section in the widget, the system forwards you to launch view for appropriate selection.

    Area view

    Bar view

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/LaunchesDurationChart/index.html b/dashboards-and-widgets/LaunchesDurationChart/index.html index ef770bd87..b14af8106 100644 --- a/dashboards-and-widgets/LaunchesDurationChart/index.html +++ b/dashboards-and-widgets/LaunchesDurationChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Launches duration chart

    The Launch Duration Chart shows the duration of the selected launches.

    Widget's parameters:

    • Filter: At least one filter is required
    • Items: 1-150. Default meaning is 50
    • Mode All launches/ Latest launches

    Widget view

    The widget shows the duration of the filtered launches.

    • The X-axis shows launches duration.
    • Y-axis shows launches numbers and launches names on hover.

    Tooltip on mouse hover over chart area shows launch details: launch name, number, and duration.

    The Widget has clickable sections when you click on a specified section in a widget, the system forwards you to launch view for appropriate selection.

    The Widget has two states: All launches and Latest lunches. If you chose All launches mode, the widget will show statistics about all launches in the filter. To view only the latest executions of each launch, you should choose Latest launches.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/LaunchesTable/index.html b/dashboards-and-widgets/LaunchesTable/index.html index 0d81500b1..d97819692 100644 --- a/dashboards-and-widgets/LaunchesTable/index.html +++ b/dashboards-and-widgets/LaunchesTable/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Launches table

    The widget shows a configurable table of launches.

    Widget's parameters:

    • The widget criteria are as follows: Total, Passed, Failed, Skipped, Product Bug, Automation Bug, System Issue, To Investigate, Attributes, User, Description, Start time, Finish time. All criteria are selected by default. To specify them, uncheck unnecessary items in "Criteria for Widget".
    • Items: 1-150. The default meaning is 50.

    Widget view

    The widget has a table view.

    The widget has clickable elements "launch name", "owner", "attributes", and "number of items"; when you click on specific elements in the widget, the system forwards you to the launch view for the appropriate selection.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/ManageWidgets/index.html b/dashboards-and-widgets/ManageWidgets/index.html index 7b4fcf13e..12dcf540f 100644 --- a/dashboards-and-widgets/ManageWidgets/index.html +++ b/dashboards-and-widgets/ManageWidgets/index.html @@ -12,7 +12,7 @@ - + @@ -20,9 +20,8 @@

    Manage Widgets

    Customize widget

    When you create a widget in our test automation dashboard, it has a basic size. Afterward, you may change the widget size.

    To resize widget the user can hover the mouse cursor over the widget. The system will show resizing arrows.

    Grab the arrow with the cursor and drag it to the desired width and height.

    You can maintain the existing aspect ratio or set a new one when resizing the widget.

    note

    Widgets have a minimum and maximum mean of width and height defined within the application.

    Another way you can customize your dashboard is by changing the widgets' placement within the dashboard canvas area.

    To change a widget placement on the dashboard, perform the following: grab a widget with the cursor by clicking and dragging it to the selected position, holding down the mouse button.

    When you move the widget to the area with sufficient space, the system highlights this place. -The widgets located in this space, are moved to the relocatable widget place. Using this option the user can configure the desired location of the widgets on a dashboard.

    Edit widget

    To create a new widget for data visualization, perform the following steps:

    1. Click the "Edit" icon in the right corner of the widget header.

    2. After the "Edit Widget" window is opened, you can edit any widget settings except the template itself.

    3. Make the necessary changes and click the "Save" button. The widget will be updated.

    View widgets in full-screen mode

    To view widgets on the whole screen, click the 'Full Screen' button in the right top corner of the dashboard.

    Widgets are shown in the same order as for standard view.

    note

    Clickable areas or elements are disabled for the full-screen mode selected, therefore it will not be possible to create a new widget, update, or delete available widgets in this mode.

    The auto-refresh timeout for widgets in full-screen mode is 30 sec.

    Delete widget

    To delete the widget:

    1. Click the "Delete" icon (X) in the right corner of the widget header.

    2. Click the "Delete" button on the confirmation popup.

    3. The widget will be deleted from the system.

    If you delete a shared widget, the deleted widget will be displayed for other -users as "Widget not found".

    - +The widgets located in this space, are moved to the relocatable widget place. Using this option the user can configure the desired location of the widgets on a dashboard.

    Edit widget

    To create a new widget for data visualization, perform the following steps:

    1. Click the "Edit" icon in the right corner of the widget header.

    2. After the "Edit Widget" window is opened, you can edit any widget settings except the template itself.

    3. Make the necessary changes and click the "Save" button. The widget will be updated.

    View widgets in full-screen mode

    To view widgets on the whole screen, click the 'Full Screen' button in the right top corner of the dashboard.

    Widgets are shown in the same order as for standard view.

    note

    Clickable areas or elements are disabled for the full-screen mode selected, therefore it will not be possible to create a new widget, update, or delete available widgets in this mode.

    The auto-refresh timeout for widgets in full-screen mode is 30 sec.

    Delete widget

    To delete the widget:

    1. Click the "Delete" icon (X) in the right corner of the widget header.

    2. Click the "Delete" button on the confirmation popup.

    3. The widget will be deleted from the system.

    + \ No newline at end of file diff --git a/dashboards-and-widgets/MostFailedTestCasesTableTop20/index.html b/dashboards-and-widgets/MostFailedTestCasesTableTop20/index.html index 6590b9568..a69171129 100644 --- a/dashboards-and-widgets/MostFailedTestCasesTableTop20/index.html +++ b/dashboards-and-widgets/MostFailedTestCasesTableTop20/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Most failed test-cases table (TOP-20)

    The widget contains a table with statistical information about the TOP-20 most problematic test cases.

    Widget's parameters:

    • The widget criteria are as follows: Failed, Skipped, Product Bug, Automation Bug, System Issue, No Defect. Failed is selected by default.

    • Launches count: 2-150. By default, "Launches count" is 30.

    • Launch name: Is required.

    • Include /Exclude Before and After methods

    Widget view

    The widget has a table view with the following data displayed:

    • Test Item name - link to the Step level of the last launch
    • Failed - count of found failed results
    • Last failure - date and time of the last run, when the test item was failed, displayed in 'time ago' format (i.e. "10 minutes ago"). On mouse hover, the system will display accurate start times.
    note

    The widget contains statistics of the most problematic test cases in all launches, except "IN PROGRESS" and "INTERRUPTED" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/MostPopularPatternTableTop20/index.html b/dashboards-and-widgets/MostPopularPatternTableTop20/index.html index 73e160004..23225d64a 100644 --- a/dashboards-and-widgets/MostPopularPatternTableTop20/index.html +++ b/dashboards-and-widgets/MostPopularPatternTableTop20/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ The system leaves only the latest launches in each group (if the user has chosen option Latest launches in the widget wizard). For each group of launches, a list with pattern aggregated.

    Widget view

    On the widget a user can view a table which shows:

    • 20 patterns with the biggest number of test cases in each defined group.

    Via drop-down user can transit from group to group. A pattern name is clickable. By clicking on pattern name a user is redirected to a list with all test cases which have clicked pattern. A list of test cases includes test cases from different launches.

    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/MostTimeConsumingTestCasesWidgetTop20/index.html b/dashboards-and-widgets/MostTimeConsumingTestCasesWidgetTop20/index.html index 62fdc816f..eb5de16bb 100644 --- a/dashboards-and-widgets/MostTimeConsumingTestCasesWidgetTop20/index.html +++ b/dashboards-and-widgets/MostTimeConsumingTestCasesWidgetTop20/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Most time-consuming test cases widget (TOP-20)

    Show the TOP 20 test cases with the highest duration in the last execution of the specified launch.

    Widget's parameters:

    • Test Status. Default value - Passed, Failed

    • Launch name. Is required

    • Include /Exclude Before and After methods

    • View options: Bar view, Table view

    Widget view

    Table View

    The widget has a table view with the following data displayed:

    • Test Item name - link to the log of the last launch

    • Test Status

    • Test Duration

    • Test Start Time - date and time of the last run, displayed in 'time ago' format (i.e. "10 minutes ago").

    On mouse hover, the system will display accurate start times.

    Bar View

    Bar chart where:

    • axis OY - Tests
    • axsic OX - Duration

    Bar color specifies a color of execution. On mouse hover, the system will display accurate start times.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/NonPassedTestCasesTrendChart/index.html b/dashboards-and-widgets/NonPassedTestCasesTrendChart/index.html index 3545c7cf0..6f7ca1df1 100644 --- a/dashboards-and-widgets/NonPassedTestCasesTrendChart/index.html +++ b/dashboards-and-widgets/NonPassedTestCasesTrendChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Non-passed test-cases trend chart

    The widget shows the percent ratio of non-passed test cases "Failed + Skipped" and "Total" cases from run to run.

    Widget's parameters:

    To configure the widget, click the "Add New Widget" button on the dashboard header, then select a template and specify the following settings on the second step:

    • Filter.
    • Items: 1-150. Default meaning is 50

    Widget view

    The widget contains agenda: % (Failed + Skipped) / Total.

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows the percent of sum Failed + Skipped test cases to Total.

    The tooltip on mouse hover over the chart area shows launch details: launch name and number, launch start time and percentage of non-passed cases.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/OverallStatistics/index.html b/dashboards-and-widgets/OverallStatistics/index.html index 89380d5ca..21942e8be 100644 --- a/dashboards-and-widgets/OverallStatistics/index.html +++ b/dashboards-and-widgets/OverallStatistics/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Overall statistics

    The panel shows a summary of test cases with each status for each selected launch.

    Widget's parameters:

    • Filter: At least one filter is required
    • Items: 1-150. The default meaning is 50.
    • Widget Criteria: All criteria are selected by default.
    • Type of view: Panel view/ Donut view
    • Mode All launches/ Latest launches

    Widget view

    The widget shows statistics of the All launches/or Latest launches for the chosen filter. Statistics are divided into the following sections:

    • Skipped, Passed, Failed
    • Product Bug, System Issue, Automation Bug, No Defect and To Investigate.

    The statistics for every type are shown in percentages. On hover, the exact number is shown for each type. The Widget has clickable sections when you click on a specified section in the widget, the system forwards you to launch view for appropriate selection.

    If you chose All launches mode, the widget will show the statistics about all launches in the filter. To view only the latest executions of each launch, you should choose Latest launches.

    The widget can be viewed in two options as shown on pictures: Panel view

    or Donut view.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/PassingRatePerLaunch/index.html b/dashboards-and-widgets/PassingRatePerLaunch/index.html index 95089b1d4..a4c4a3f91 100644 --- a/dashboards-and-widgets/PassingRatePerLaunch/index.html +++ b/dashboards-and-widgets/PassingRatePerLaunch/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Passing rate per launch

    Shows the percentage ratio of Passed test cases to Total test cases for the last run of selected launch.

    note

    Total test cases = Passed + Not Passed, while Not Passed = Failed + Skipped + Interrupted

    Thus, Passing rate = Passed / (Passed + Failed + Skipped + Interrupted)

    Widget's parameters:

    • Launch Name: the name of any finished launch

    • Mode: Bar View/Pie View

    • Widget name: any text

    • Description: any text

    Please find below an example of configuration:

    As you can see, this widget was built based on the test results of the last run of the Daily Smoke Suite:

    Widget view

    The widget can be displayed in two options as shown on the pictures below:

    Bar View

    Pie View

    The tooltip on mouse hover over chart area shows the quantity of Passed/Failed test cases and percentage ratio of Passed/Failed test cases to Total cases for the last run.

    The widget has clickable sections. When you click on a specific section in the widget, the system forwards you to the launch view for appropriate selection.

    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/PassingRateSummary/index.html b/dashboards-and-widgets/PassingRateSummary/index.html index aee07dde2..5431a005e 100644 --- a/dashboards-and-widgets/PassingRateSummary/index.html +++ b/dashboards-and-widgets/PassingRateSummary/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Passing rate summary

    Shows the percentage ratio of Passed test cases to Total test cases for set of launches.

    note

    Total test cases = Passed + Not Passed, while Not Passed = Failed + Skipped + Interrupted

    Thus, Passing rate = Passed / (Passed + Failed + Skipped + Interrupted)

    Widget's parameters:

    • Filter: At least one filter is required

    • Items: 1-600. The default meaning is 50.

    • Mode: Bar View/Pie View

    • Widget name: any text

    • Description: any text

    Please find below an example of configuration:

    Widget view

    The widget can be displayed in two options as shown on the pictures below:

    Bar View

    Pie view

    As you can see, this widget was built based on the “regression” filter.

    The tooltip on mouse hover over chart area shows the quantity of Passed/Not passed test cases and percentage ratio of Passed/Not passed test cases to Total test cases for the specified set of launches.

    The widget has clickable sections. When you click on a specific section in the widget, the system forwards you to the launches view for the appropriate selection.

    Thanks to “Passing rate summary” widget, it is no longer needed to spend time on calculating Passing rate of the specified set of launches. ReportPortal provides these statistics as a visualization – it is a quick and convenient decision. You can take the screenshot of widget and use it in the Test results report.

    note

    The widget doesn't contain 'IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/PossibleDashboardsInReportPortal/index.html b/dashboards-and-widgets/PossibleDashboardsInReportPortal/index.html index 179721d23..5097d284f 100644 --- a/dashboards-and-widgets/PossibleDashboardsInReportPortal/index.html +++ b/dashboards-and-widgets/PossibleDashboardsInReportPortal/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ Let's assume that we have a Regression suite which contains:

    • a suite with API test cases
    • a suite with UI test cases
    • a suite with integration test cases

    The whole Regression is running against nightly build every day. Different teams are responsible for different suites.

    Which dashboard I can create in such conditions?

    Report for one tests run (A dashboard for an engineer)

    The goal for this test results dashboard to show the status of the latest test run. For instance to see the latest results for launch with an API suite.

    You can configure: Passing rate widget that shows a passing rate for a latest launch "API suite'

    Most popular pattern tracks TOP-20 problems in the last and previous runs of this suite.

    note

    For Most popular pattern table, you should you create a set of rules and run Pattern Analysis

    With Investigated percentage of launches you can find out the status of failure investigations. You will be able to evaluate team performance and consistency of results.

    Failed cases trend chart shows the history of failures in previous runs.

    Duration chart will be very helpful for those who track duration KPI and want to increase the speed of tests run.

    Test growth trend chart shows you the speed of new test cases creation.

    Also, you can create "Most flaky test cases" and "Most failed test case" and find the most unstable items which should be taken into account.

    Let's assume that you have a lot of test results and a lot of teams.

    You can create Overall statistics and Launches table, and now a team who is responsible for API suite has no need to go to the test results. It can use only this dashboard which gives enough information for test failure management.

    Build / Release/ Sprint Report (A dashboard for a Team leads, PM, DM)

    The goal of this report to show status for the whole version. It means for this report we want to see the latest results of aggregated statistics for several lanches.

    In our example, I want to see the latest results for the whole Regression (latest results for API suite + latest results for UI + latest results for Integration tests).

    Also, it is very useful to compare the results of the Regression on the current version with the Regression on previous versions and to see details about business metrics.

    On this dashboard you can see different metrics:

    • on different env
    • on a different dimension
    • by business metrics / by features/ by user roles / by etc

    Also with a help of Component Health Check Widget you can create a Test Pyramid.

    note

    You need to report test executions with attributes which specified needed metrics or envs

    note

    Component Health Check Widget and Cumulative trend chart are very configurable and you can create your own widget based on project needs.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/ProjectActivityPanel/index.html b/dashboards-and-widgets/ProjectActivityPanel/index.html index 18c28f04f..3cd881855 100644 --- a/dashboards-and-widgets/ProjectActivityPanel/index.html +++ b/dashboards-and-widgets/ProjectActivityPanel/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Project activity panel

    The widget shows all activities occurring on the project.

    Widget's parameters:

    • The actions for the widget are as follows: Update Project Settings, Update Defect Types, Delete Launch, Start Launch, Finish Launch, Share Widget, Dashboard, Unshare Widget, Dashboard, Post Issue to BTS, Add, Register User, Update BTS. By default, all actions are checked.

    • Items: 1-150. The default meaning is 50.

    • Type user name: By default all user's activities.

    Widget view

    The actions on the widget are present in a table, separated by days. Action messages have the following format:

    Member (name) did action.
    Time - displayed in 'time ago' format (i.e. "10 minutes ago"). On mouse hover, the system should display accurate action time.)

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/TableComponentHealthCheck/index.html b/dashboards-and-widgets/TableComponentHealthCheck/index.html index 0a182e9a4..a702d85d1 100644 --- a/dashboards-and-widgets/TableComponentHealthCheck/index.html +++ b/dashboards-and-widgets/TableComponentHealthCheck/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ But if you run a new version (for instance version: xxx+1), you should repeat previous actions one more time: create the filter, update the widget.

    Solution: How you can skip these steps. Create filter which includes 3 launches: API launch, UI launch, and Integration launch. Create a Component Health Check widget (table view) with this filter and add attribute key 'version' for grouping. Now you will see a summary for the latest version every day. If a new version appears in the system, a widget automatically removes info about the previous one and adds the latest version.

    Use case #2

    Use Case: To track information regarding components such features/browsers/ platforms/ or others

    Problem: You are running different launches API launch, UI launch, and Integration launch. In these 3 launches, there are test cases which belong to different features. One feature can have test cases with different types: API, UI, Integration. You need to track overall statistics for features, not for launch.

    Solution: Create filter which includes 3 launches: API launch, UI launch, and Integration launch. Create a Component Health Check widget (table view) with this filter and add attribute key 'feature' for grouping. Now you will see a summary for all features from different launches.

    Widget logic is the same as for Component health check.

    Widget's parameters:

    • Filter
    • Parameters: All launches/ Latest launches
    • The min allowable passing rate for the component: Possible value from 50 - 100%. Default value 100%.
    • Attribute key for the first level (mandatory)
    • Attribute key for the 2-10 levels (optional)
    • Custom column

    Widget view

    The widget has a table view. Each line contains information regarding one component (one unique attribute value):

    • component name
    • component passing rate
    • statistics: Total/Passed/Failed/Skipped/ Product bugs/ Automation bugs/ System issues/ To investigate
    • information about attribute value in the custom column

    The total line shows a summary of all components.

    Custom column

    Why you may need a custom column? Let's see it in the example.

    Use case #3

    Use Case: You need to understand the impact of failed test cases

    Problem: You created a Component Health Check widget and can see a list with features and their passing rate. But you can not understand the importance of failed features.

    Solution: Add for all test executions attributes with an attribute key 'priority: XXX'. For instance:

    • priority: low
    • priority: major
    • priority: critical

    Then add to widget wizard attribute key 'priority' in the custom column field. So that system adds to the widget view information regarding priority to each feature.

    *Custom sorting

    You can choose how components should be sorted in the table. Possible criteria:

    • Total
    • Passing rate
    • Custom column
    • Failed items
    note

    Component Health Check widget (table view) is the first widget that uses a materialized view of PostgreSQL. It takes time to create it. So that is why information about new launches in the filter adds dynamically. For that reason, a user should update a widget manually by сlicking on the update button. On the widget, a user can see the time for the last update.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/TestCasesGrowthTrendChart/index.html b/dashboards-and-widgets/TestCasesGrowthTrendChart/index.html index 49006f4f6..b7e7f8ee5 100644 --- a/dashboards-and-widgets/TestCasesGrowthTrendChart/index.html +++ b/dashboards-and-widgets/TestCasesGrowthTrendChart/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Test-cases growth trend chart

    The widget can be used in two modes - Launch mode and Timeline mode:

    • The widget in the Launch mode shows the increment of test-cases from run to run,
    • The widget in the Timeline mode shows the increment of test-cases distributed by dates (in launches with the largest number of test-cases per day).

    Widget's parameters:

    • Filter: At least one filter is required
    • Items: 1-150. The default meaning is 50.
    • Mode: Launch or Timeline.

    Widget view

    The widget view in Launch mode:

    • The X-axis shows launches numbers and launches names on hover.
    • Y-axis shows the increment of test-cases.

    The tooltip on mouse hover over the chart area shows launch details: launch name and number, launch start time and launch statistics - total number of test cases and test cases growth.

    The widget view in Timeline mode:

    • The X-axis shows dates and weekdays.
    • Y-axis shows the increment of test-cases in launches with the largest number of test-cases per day.

    The tooltip on mouse hover over the chart area shows launch details: date and launch statistics - total number of test cases and test cases growth.

    The widget has clickable sections when you click on a specific section in the widget, the system forwards you to the launch view for the appropriate selection.

    note

    The widget doesn't contain "IN PROGRESS" launches.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/UniqueBugsTable/index.html b/dashboards-and-widgets/UniqueBugsTable/index.html index 3e24365d2..0835ec8ff 100644 --- a/dashboards-and-widgets/UniqueBugsTable/index.html +++ b/dashboards-and-widgets/UniqueBugsTable/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Unique bugs table

    The widget shows real identified bugs, posted to the Bug Tracking System from ReportPortal, and existing bugs, that were added to the items on ReportPortal.

    Widget's parameters:

    • Filter: At least one filter is required
    • Items: 1-150. The default meaning is 10.

    Widget view

    The widget has a table view and bugs that are found are then sorted by the date they were posted or added.

    The widget has the following data displayed:

    • Bug ID - links to the issue in Bug Tracking System.
    • Found in - links to the test item, to which the bug was posted/added.
    • Submit date - the date the bug was submitted/added. Time is displayed in 'time ago' format (i.e. "10 minutes ago"). On mouse hover, the system should display accurate action time.
    • Submitter - user, who submitted/added the bug.
    note

    The bugs from launches "IN PROGRESS" are not shown on the widget. In case a bug is found in multiple items, all of the items will be listed in the "Found in" column.

    - + \ No newline at end of file diff --git a/dashboards-and-widgets/WidgetCreation/index.html b/dashboards-and-widgets/WidgetCreation/index.html index d910e1d42..ae9b6c0d8 100644 --- a/dashboards-and-widgets/WidgetCreation/index.html +++ b/dashboards-and-widgets/WidgetCreation/index.html @@ -12,7 +12,7 @@ - + @@ -20,9 +20,9 @@

    Widget Creation

    In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and -easy-to-use way of displaying and analyzing your automation trends and data.

    The widgets can be added to dashboards on the "Dashboards" tab. Widgets will be visible within the project, they are created.

    Create widget

    To create a new widget, perform the following steps:

    1. Navigate to the "All Dashboards" page and create a new dashboard or choose the existing one.

    2. Click the "Add New Widget" button.

    3. The Widget Wizard will be opened. To add a new widget, you need to pass all the required steps.

      • Step 1. Select the template of the widget (detailed description is below).

      • Step 2. Select a filter from the list below or create a new filter. Search functionality helps to find the filter quicker. Select other widget options: Criteria, Items, Launch or Timeline mode (if applicable for selected widget template)

      • Step 3. Enter a widget name, description and share a widget (if need). +easy-to-use way of displaying and analyzing your automation trends and data.

      The widgets can be added to dashboards on the "Dashboards" tab. Widgets will be visible within the project, they are created.

      Create widget

      To create a new widget, perform the following steps:

      1. Navigate to the "All Dashboards" page and create a new dashboard or choose the existing one.

      2. Click the "Add New Widget" button.

      3. The Widget Wizard will be opened. To add a new widget, you need to pass all the required steps.

        • Step 1. Select the template of the widget (detailed description is below).

        • Step 2. Select a filter from the list below or create a new filter. Search functionality helps to find the filter quicker. Select other widget options: Criteria, Items, Launch or Timeline mode (if applicable for selected widget template)

        • Step 3. Enter a widget name and description. A widget name should be unique for a user on the project.

      4. After you have completed all steps, click the "Save" button. The new widget will be added to the dashboard on the top.

      Widgets are automatically refreshed every minute.

      Predefined widgets types

      There are 15 widget templates in ReportPortal for tracking different KPI:

      KPIWidget template
      Track the reasons of failuresLaunch statistics chart
      Passing rate for filter summary, and structure of problemsOverall statistics
      Track the longest launch in the filterLaunches duration chart
      Track the passing rate and structure of problems of the latest run in the systemLaunch execution and issue statistic
      Track the activity of your QA teamProject activity panel
      Track the growth of new test cases in your buildTest-cases growth trend chart
      Track the speed of test failure analysisInvestigated percentage of launches
      Follow up information about only important launches for your teamLaunches table
      Track new BTS issues in your runUnique bugs table
      Track the most unstable test cases in the buildMost failed test-cases table
      See the trend of the number of failed test cases from build to buildFailed cases trend chart
      See the trend of the number of failed and skipped test cases from build to buildNon-passed test-cases trend chart
      Compare two launches togetherDifferent launches comparison chart
      Track passing rate for one launchPassing rate per launch
      Track passing rate for the buildPassing rate summary
      Find the most flakiest test in the buildFlaky test cases table (TOP-20)
      Compare statistics for different builds on one graphCumulative trend chart
      Track the most popular failure reasons in the buildMost popular pattern table (TOP-20)
      Track the passing rate of different components of your applicationComponent health check
      Track the statistics of different components of your applicationComponent health check (table)
      Track the top-20 tests with longest execution timeMost time-consuming test cases widget (TOP-20)
    - + \ No newline at end of file diff --git a/dashboards-and-widgets/WorkWithDashboards/index.html b/dashboards-and-widgets/WorkWithDashboards/index.html index 62ebb9ea9..3459dd464 100644 --- a/dashboards-and-widgets/WorkWithDashboards/index.html +++ b/dashboards-and-widgets/WorkWithDashboards/index.html @@ -12,23 +12,20 @@ - +
    -

    Work with dashboards

    Dashboards on our continuous testing platform are special containers, where users can create widgets.

    To create and use dashboards, navigate to the "Dashboards" tab.

    You can create a dashboard that will be visible on the current project. If you share dashboard on the project, it will be available to all users of the project the dashboard is created in.

    Create dashboard

    To create a new dashboard, perform the following steps:

    1. Navigate to the "Dashboards" page and click "Add New +

      Work with dashboards

      Dashboards on our continuous testing platform are special containers, where users can create widgets.

      To create and use dashboards, navigate to the "Dashboards" tab.

      You can create a dashboard that will be visible on the current project.

      Create dashboard

      To create a new dashboard, perform the following steps:

      1. Navigate to the "Dashboards" page and click "Add New Dashboard" button in the top right corner of the page.

      2. The "Add New Dashboard" popup will be opened.

      3. Enter a name for a new dashboard. The name should be between 3 to 55 characters long and unique for the user per the -project. You can add the description for your dashboard as well.

      4. Select Share mode ON – if you want your dashboard to be shared. Leave -Share mode OFF – if you do not want to share your dashboard.

      5. Click "Add" button. The new dashboard will be created.

      Now you can add widgets to the dashboard.

      Edit own dashboard

      To edit a dashboard, perform the following steps:

      1. Navigate to "All Dashboards" page.

      2. Click the "Edit" icon in the top corner of the dashboard or +project. You can add the description for your dashboard as well.

      3. Click "Add" button. The new dashboard will be created.

      Now you can add widgets to the dashboard.

      Edit dashboard

      To edit a dashboard, perform the following steps:

      1. Navigate to "All Dashboards" page.

      2. Click the "Edit" icon in the top corner of the dashboard or click the name of the dashboard and click 'Edit' button in the header of the dashboard.

      3. The "Edit Dashboard" popup will be opened.

      4. Make the necessary changes and click "Update" button. The dashboard will -be displayed with updates.

      Delete dashboard

      To remove a dashboard from the project, perform the following steps:

      1. Click the "Delete" button in the top right corner of the dashboard.

      2. Click the "Delete" button on confirmation pop-up.

      The dashboard and related widgets will be deleted from the system.

      note

      A user with a PROJECT MANAGER role can delete a dashboard shared by other members by clicking on the ‘Delete’ button -in the top right corner of the dashboard tile. The dashboard will be deleted from the system.

      Shared dashboard

      Dashboards that were created and shared by another project member are stored in Shared Dashboards.

      You can open and see the data on such dashboards, but you are not able to modify or delete them.

      Our test reporting tool allows project members to see shared dashboards by other project members dashboards by a direct link.

      note

      A user with an ADMIN account role / PROJECT MANAGER project role can delete a dashboard shared by other members by clicking on ‘Delete’ icon. -The dashboard and widgets on the dashboard will be deleted from the system.

    - +be displayed with updates.

    Delete dashboard

    To remove a dashboard from the project, perform the following steps:

    1. Click the "Delete" button in the top right corner of the dashboard.

    2. Click the "Delete" button on confirmation pop-up.

    The dashboard and related widgets will be deleted from the system.

    + \ No newline at end of file diff --git a/dev-guides/APIDifferencesBetweenV4AndV5/index.html b/dev-guides/APIDifferencesBetweenV4AndV5/index.html index 7e1b0d56c..4d9a7a647 100644 --- a/dev-guides/APIDifferencesBetweenV4AndV5/index.html +++ b/dev-guides/APIDifferencesBetweenV4AndV5/index.html @@ -12,7 +12,7 @@ - + @@ -30,7 +30,7 @@ Using request above you can retrieve physical id from database of just reported test item and use it in next queries for items, logs etc.

    PUT /v1/{projectName}/item/info - Bulk update items attributes and descriptions.

    PUT /v1/{projectName}/item/issue/link - Link external issue for specified test items.

    PUT /v1/{projectName}/item/issue/unlink - Unlink external issue for specified test items.


    User controller

    GET /v1/user/export - Export information about all users.

    GET /v1/user/registration - Get user bid info.

    GET /v1/user/registration/info - Validate user login and/or email.

    GET /v1/user/search - Search users by term.

    GET /v1/user/{userName}/projects - Retrieve all user projects.

    DELETE /v1/user - Delete specified users by ids.


    Widget controller

    New group of widgets that may have few levels

    GET /v1/{projectName}/widget/multilevel/{widgetId} - Get multilevel widget by id.


    New controllers

    Bug tracking system controller - replacement of external system controller.

    GET /v1/bts/{integrationId}/fields-set - Get list of fields required for posting ticket.

    GET /v1/bts/{integrationId}/issue_types - Get list of allowable issue types for bug tracking system.

    GET /v1/bts/{projectName}/ticket/{ticketId} - Get ticket from the bts integration.

    GET /v1/bts/{projectName}/{integrationId}/fields-set - Get list of fields required for posting ticket (project integration).

    GET /v1/bts/{projectName}/{integrationId}/issue_types - Get list of allowable issue types for bug tracking system (project integration).

    POST - /v1/bts/{projectName}/{integrationId}/ticket - Post ticket to the bts integration.


    Integration controller

    GET /v1/integration/global/all - Get available global integrations.

    GET /v1/integration/global/all/{pluginName} - Get available global integrations for plugin.

    GET /v1/integration/project/{projectName}/all - Get available project integrations.

    GET /v1/integration/project/{projectName}/all/{pluginName} - Get available project integrations for plugin.

    GET /v1/integration/{integrationId} - Get specified global integration by id.

    GET /v1/integration/{integrationId}/connection/test - Test connection to the global integration.

    GET /v1/integration/{projectName}/{integrationId}/connection/test - Test connection to the integration through the project config.

    GET /v1/integration/{projectName}/{integrationId} - Get specified project integration by id.

    PUT /v1/integration/{projectName}/{integrationId} - Update specified project integration by id.

    PUT /v1/integration/{integrationId} - Update specified global integration by id.

    PUT /v1/integration/{projectName}/{integrationId}/{command} - Execute command to the integration instance.

    POST /v1/integration/{pluginName} - Create global integration.

    POST /v1/integration/{projectName}/{pluginName} - Create project integration instance.

    DELETE /v1/integration/all/{type} - Delete all global integrations by type.

    DELETE /v1/integration/{projectName}/all/{type} - Delete all project integrations by type.

    DELETE /v1/integration/{integrationId} - Delete specified global integration by id.

    DELETE /v1/integration/{projectName}/{integrationId} - Delete specified project integration by id.


    Launch asynchronous controller

    POST /v2/{projectName}/launch - Start launch for specified project.

    POST /v2/{projectName}/launch/merge - Merge set of specified launches in common one.

    PUT /v2/{projectName}/launch/{launchId}/finish - Finish launch for specified project.


    Test item asynchronous controller

    POST /v2/{projectName}/item - Start root test item.

    POST /v2/{projectName}/item/{parentItem} - Start child test item.

    PUT /v2/{projectName}/item/{testItemId} - Finish test item.


    Log asynchronous controller

    POST /v2/{projectName}/log - Create log.


    Differences in reporting

    Launch rerun

    Rerun developers guide

    Nested steps

    Nested steps wiki

    Launch logs

    Create log request contains fields launchUuid and itemUuid. At least one of them should not be null.

    {
    "itemUuid": "7f32fb6a-fcc2-4ecb-a4f7-780c559a37ca",
    "launchUuid": "6fd4638d-90e2-4f52-a9bd-bf433ebfb0f3"
    }

    If they both are present - log will be saved as test item log. If only itemUuid is present - log will be saved as test item log. If only launchUuid is present - log will be saved as launch log.

    Java client has static methods for launch log reporting:

    //TODO fix links after java client final version release

    - + \ No newline at end of file diff --git a/dev-guides/AsynchronousReporting/index.html b/dev-guides/AsynchronousReporting/index.html index 1b2113591..1e1c76163 100644 --- a/dev-guides/AsynchronousReporting/index.html +++ b/dev-guides/AsynchronousReporting/index.html @@ -12,7 +12,7 @@ - + @@ -57,7 +57,7 @@ In case the launch finish request is not last in the queue it will be finished anyway. But all the next requests under the launch will be handled as soon as they get to the consumer and the launch statistics will be updated. So it is possible to report items under already finished launch.

    - + \ No newline at end of file diff --git a/dev-guides/AttachmentsGuide/index.html b/dev-guides/AttachmentsGuide/index.html index 4f33230e3..526c765b5 100644 --- a/dev-guides/AttachmentsGuide/index.html +++ b/dev-guides/AttachmentsGuide/index.html @@ -12,7 +12,7 @@ - + @@ -31,7 +31,7 @@ There is no built-in capability to send attachments during test execution as the Jest Reporter works post-factum and does not allow to provide specific data to the report.

    agent-js-postman: There is no built-in capability at the moment to send attachments during test execution due to the specifics of postman nature.

    agent-js-nightwatch: The attachment can be added via ReportingAPI, follow docs for details.

    An example for each agent can be found here.

    How to log attachments (Screenshots) on .Net agents?

    General documentation on this in .net-commons: https://github.com/reportportal/commons-net/blob/develop/docs/Logging.md

    You can attach any binary content:

    Context.Current.Log.Info("my binary", "image/png", bytes);
    // where bytes is byte[] and image/png is mime type of content

    Or use file instead:

    Context.Current.Log.Info("my file", new FileInfo(filePath));
    // where filePath is relative/absolute path to your file
    // mime type is determined automatically
    - + \ No newline at end of file diff --git a/dev-guides/BackEndJavaContributionGuide/index.html b/dev-guides/BackEndJavaContributionGuide/index.html index b7ea7d7ab..c574cf3d1 100644 --- a/dev-guides/BackEndJavaContributionGuide/index.html +++ b/dev-guides/BackEndJavaContributionGuide/index.html @@ -12,7 +12,7 @@ - + @@ -43,7 +43,7 @@ How to apply a fix and check if everything works fine? To do this you should follow these steps:

    • clone/update Commons DAO repository
    • checkout develop branch
    • make changes
    • create branch according to the name policy
    • push to the remote
    • create PR to the develop branch Now you have your branch on the GitHub page and can see the commit hash:
    • go to the service where your changes should be applied (Service API in our example)
    • copy commit hash and replace already existing in the build.gradle of the required service (Service API in our example):
    • after re-building project using gradle dependency will be resolved and downloaded using Jitpack tool
    • create branch according to the name policy
    • push to the remote
    • create a PR to the develop branch

    Summary notes

    This documentation should help you save your time by configuring ReportPortal local dev environment and give you understanding of some standards/conventions that we try stick to.

    Simplified development workflow should look like this:

    • always have the latest schema and data in your local DB instance using this instructions
    • checkout develop branch in the required repository
    • make changes
    • if changes in dependencies are required:
      • go to the dependency repository, make changes, create a branch and PR according to conventions
      • using commit hash update dependency in the build.gradle
    • create branch according to the name policy
    • push to the remote
    • create a PR according to the name policy
    - + \ No newline at end of file diff --git a/dev-guides/InteractionsBetweenAPIAndAnalyzer/index.html b/dev-guides/InteractionsBetweenAPIAndAnalyzer/index.html index ed71bd8bf..4b5094b6d 100644 --- a/dev-guides/InteractionsBetweenAPIAndAnalyzer/index.html +++ b/dev-guides/InteractionsBetweenAPIAndAnalyzer/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Interactions between API and Analyzer

    Overview

    Communication between API service and analyzer service is carried out using AMQP 0-9-1 and RabbitMQ as message broker. API service creates virtual host inside RabbitMQ with name analyzer on start. Analyzers in theirs turn connect to the virtual host and declare exchange with name and arguments. Any type of request from API and response from analyzer stores in the same queue. Request and response messages is presented as JSON.

    Declaring exchange

    Each analyzer has to declare direct exchange with the following arguments:

    • analyzer - Name of analyzer (string)
    • version - Analyzer version (string)
    • analyzer_index - Is indexing supported (boolean, false by default)
    • analyzer_log_search - Is log searching supported (boolean, false by default)
    • analyzer_priority - Priority of analyzer (number). The lower the number, the higher the priority.

    Declaring queues

    Each analyzer has to declare 5 queues with names: analyze, search, index, clean, delete.

    Indexing

    Index request can be used to store info about logs and then analysis will be proceed based on the info. Requests and responses use index queue.

    Index request structure from API:

    IndexLaunch:

    AttributeDescriptionExample
    launchIdId of launch101
    launchNameName of launchSmoke Test
    projectId of project12
    analyzerConfigAnalyzer configuration
    testItemsArray of test items

    AnalyzerConfig:

    AttributeDescriptionExample
    minDocFreqThe minimum frequency of the saved logs1
    minTermFreqThe minimum frequency of the word in the analyzed log1
    minShouldMatchPercent of words equality between analyzed log and particular log from index95
    numberOfLogLinesThe number of first lines of log message that should be considered in indeT-1
    isAutoAnalyzerEnabledIs auto analysis enabledtrue
    analyzerModeAnalysis mode. Allowable values: "all", "launch_name", "current_launch"all
    indexingRunningIs indexing runningfalse

    IndexTestItem:

    AttributeDescriptionExample
    testItemIdId of test item123
    issueTypeIssue type locatorpb001
    uniqueIdUnique id of test itemauto:c6edafc24a03c6f69b6ec070d1fd0089
    isAutoAnalyzedIs test item auto analyzedfalse
    logsArray of test item logs

    IndexLog:

    AttributeDescrioptionExample
    logIdId of log125
    logLevelLog level40000
    messageLog messagejava.lang.AssertionError: 1 expectation failed. Expected status code <200> but was <400>. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

    API send array of IndexLaunch entities that have to be indexed.

    Example in json :

    [
    {
    "launchId":110,
    "launchName":"Smoke Test",
    "project":11,
    "analyzerConfig":{
    "minDocFreq":1,
    "minTermFreq":1,
    "minShouldMatch":95,
    "numberOfLogLines":-1,
    "isAutoAnalyzerEnabled":true,
    "analyzerMode":"all",
    "indexingRunning":false
    },
    "testItems":[
    {
    "testItemId":101,
    "issueType":"pb001",
    "uniqueId":"auto:c6edafc24a03c6f69b6ec070d1fd0089",
    "isAutoAnalyzed":false,
    "logs":[
    {
    "logId":111,
    "logLevel":40000,
    "message":"java.lang.AssertionError: 1 expectation failed. Expected status code <200> but was <400>."
    },
    {
    "logId":112,
    "logLevel":40000,
    "message":"java.lang.AssertionError: 1 expectation failed. Expected status code <200> but was <500>."
    }
    ]
    }
    ]
    }
    ]

    Analyzer should return response with number of indexed logs.

    Analyze

    Analyze request can be used to find matches from request in indexed data. Requests and responses use analyze queue.

    Analyze request is the same as IndexLaunch entity used for indexing. It contains info about test items and logs thad have to be analyzed.

    Response from analyzer should contain array of the following entities (info about analyzed test items):

    AnalyzedItemRs:

    AttributeDescriptionExample
    itemIdId of analyzed test item111
    relevantItemIdId of relevant test item123
    issueTypeIssue type locatorpb001

    Search logs

    Search request can be used to find similar logs from test items with to_investigate type. Requests and responses use search queue.

    Search logs request from API:

    SearchRq:

    AttributeDescriptionExample
    launchIdId of launch111
    launchNameName of launchSmoke Test
    itemIdId of test item112
    projectIdId of project10
    filteredLaunchIdsArray of launch ids, among with search would be applied[1,2,3]
    logMessagesArray of log messages looking for["first message", "second message"]
    logLinesNumber of logs lines that will be used in comparison5

    Analyzer should return array of log ids that matches as a response.

    Clean

    Clean request can be used to remove stored log from index. Requests use clean queue.

    Clean logs request from API:

    CleanIndexRq:

    AttributeDescriptionExample
    projectId of project10
    idsArray of log ids to be removed[111, 122, 123]

    Analyzer do not send response on the request.

    Delete

    Delete request can be used to delete entire index. Requests use delete queue.

    Request message from API contains only id of index.

    Analyzer do not send response on the request.

    Examples

    Custom analyzer written in java using Spring AMQP.

    - + \ No newline at end of file diff --git a/dev-guides/PluginDevelopersGuide/index.html b/dev-guides/PluginDevelopersGuide/index.html index bcf1cca1c..eb4674cc0 100644 --- a/dev-guides/PluginDevelopersGuide/index.html +++ b/dev-guides/PluginDevelopersGuide/index.html @@ -12,7 +12,7 @@ - + @@ -35,7 +35,7 @@ allows us to load it using GetFileCommand.

    That's how our build.gradle looks now:

    import com.github.spotbugs.SpotBugsTask

    plugins {
    id "io.spring.dependency-management" version "1.0.9.RELEASE"
    id 'java'
    id 'com.github.johnrengelman.shadow' version '5.2.0'
    id "com.moowork.node" version "1.3.1"
    }

    apply from: 'ui.gradle'

    repositories {
    mavenCentral()
    }

    dependencies {
    implementation 'com.epam.reportportal:plugin-api:5.4.0'
    annotationProcessor 'com.epam.reportportal:plugin-api:5.4.0'
    }

    artifacts {
    archives shadowJar
    }

    sourceSets {
    main {
    resources
    {
    exclude '**'
    }
    }
    }

    jar {
    from("src/main/resources") {
    into("/resources")
    }
    from("ui/build") {
    into("/resources")
    }
    manifest {
    attributes(
    "Class-Path": configurations.compile.collect { it.getName() }.join(' '),
    "Plugin-Id": "${pluginId}",
    "Plugin-Version": "${project.version}",
    "Plugin-Provider": "Report Portal",
    "Plugin-Class": "com.epam.reportportal.extension.example.ExamplePlugin",
    "Plugin-Service": "api"
    )
    }
    }

    shadowJar {
    from("src/main/resources") {
    into("/resources")
    }
    from("ui/build") {
    into("/resources")
    }
    configurations = [project.configurations.compile]
    zip64 true
    dependencies {
    }
    }

    task plugin(type: Jar) {
    getArchiveBaseName().set("plugin-${pluginId}")
    into('classes') {
    with jar
    }
    into('lib') {
    from configurations.compile
    }
    extension('zip')
    }

    task assemblePlugin(type: Copy) {
    from plugin
    into pluginsDir
    }

    task assemblePlugins(type: Copy) {
    dependsOn subprojects.assemblePlugin
    }

    compileJava.dependsOn npm_run_build

    Now we can just execute ./gradlew build and get plugin binaries (as jar and as shadowJar) that can be loaded to the application.

    Event listeners

    All plugin commands are executed through the core application end-point with mapping:

    https://host:port/v1/integration/{projectName}/{integrationId}/{command}

    As we can see integrationId is a mandatory parameter that specifies integration to be used in the command execution.

    We can affect logic executed in core application from the plugin by handling predefined set of events. As for now we will use mandatory PluginLoadedEventHandler as an example.

    This handler creates the very first integration and uses PluginInfoProvider to update plugin data in the database.

    To add a new listener we should use ApplicationContext after plugin was loaded - so we do it in the method marked by @PostConstruct.

    Also, we should remove listeners when we unload plugin - so we implement DisposableBean interface and provide this logic in the preDestroy() method.

    That's how our extension looks now:


    @Extension
    public class ExampleExtension implements ReportPortalExtensionPoint, DisposableBean {

    public static final String BINARY_DATA_PROPERTIES_FILE_ID = "example-binary-data.properties";
    private static final String PLUGIN_ID = "example";
    private final String resourcesDir;

    private final Supplier<Map<String, PluginCommand<?>>> pluginCommandMapping = new MemoizingSupplier<>(this::getCommands);
    private final Supplier<ApplicationListener<PluginEvent>> pluginLoadedListenerSupplier;

    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    private IntegrationTypeRepository integrationTypeRepository;

    @Autowired
    private IntegrationRepository integrationRepository;

    public ExampleExtension(Map<String, Object> initParams) {
    resourcesDir = IntegrationTypeProperties.RESOURCES_DIRECTORY.getValue(initParams).map(String::valueOf).orElse("");

    pluginLoadedListenerSupplier = new MemoizingSupplier<>(() -> new ExamplePluginEventListener(PLUGIN_ID,
    new PluginEventHandlerFactory(integrationTypeRepository,
    integrationRepository,
    new PluginInfoProviderImpl(resourcesDir, BINARY_DATA_PROPERTIES_FILE_ID)
    )
    ));
    }

    @Override
    public Map<String, ?> getPluginParams() {
    Map<String, Object> params = new HashMap<>();
    params.put(ALLOWED_COMMANDS, new ArrayList<>(pluginCommandMapping.get().keySet()));
    return params;
    }

    @Override
    public PluginCommand<?> getCommandToExecute(String commandName) {
    return pluginCommandMapping.get().get(commandName);
    }

    @PostConstruct
    public void createIntegration() throws IOException {
    initListeners();
    }

    private void initListeners() {
    ApplicationEventMulticaster applicationEventMulticaster = applicationContext.getBean(AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME,
    ApplicationEventMulticaster.class
    );
    applicationEventMulticaster.addApplicationListener(pluginLoadedListenerSupplier.get());
    }

    @Override
    public void destroy() {
    removeListeners();
    }

    private void removeListeners() {
    ApplicationEventMulticaster applicationEventMulticaster = applicationContext.getBean(AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME,
    ApplicationEventMulticaster.class
    );
    applicationEventMulticaster.removeApplicationListener(pluginLoadedListenerSupplier.get());
    }

    private Map<String, PluginCommand<?>> getCommands() {
    Map<String, PluginCommand<?>> pluginCommandMapping = new HashMap<>();
    pluginCommandMapping.put("getFile", new GetFileCommand(resourcesDir, BINARY_DATA_PROPERTIES_FILE_ID));
    pluginCommandMapping.put("testConnection", (integration, params) -> true);
    return pluginCommandMapping;
    }
    }

    Lazy initialization

    All plugin components that relies on @Autowired dependencies should be loaded lazily using MemoizingSupplier or another lazy-load mechanism. This is the restriction of plugin installation flow:

    We create extension object using constructor and only then we autowire dependencies. If we don't use lazy initialization - all objects created in the constructor will be created with NULL objects that were marked as @Autowired
    - + \ No newline at end of file diff --git a/dev-guides/ReportPortalAPI/index.html b/dev-guides/ReportPortalAPI/index.html index ee1686c0b..5ac1600de 100644 --- a/dev-guides/ReportPortalAPI/index.html +++ b/dev-guides/ReportPortalAPI/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/dev-guides/ReportingDevelopersGuide/index.html b/dev-guides/ReportingDevelopersGuide/index.html index 0606cfa56..0a81a67a1 100644 --- a/dev-guides/ReportingDevelopersGuide/index.html +++ b/dev-guides/ReportingDevelopersGuide/index.html @@ -12,7 +12,7 @@ - + @@ -42,7 +42,7 @@ To do that use the same log endpoint, but in body do not send itemUuid

    {
    "launchUuid": "96d1bc02-6a3f-451e-b706-719149d51ce4",
    "time": "2019-11-06T15:50:53.187Z",
    "message": "java.lang.NullPointerException",
    "level": 40000,
    "file": {
    "name": "file2.txt"
    }
    }

    The same way we can report all the rest test items.

    Finish root(suite) item

    Finishing root item can be done the same way as finish parent item and finish child item. But we should specify its uuid in request parameter.

    curl --header "Content-Type: application/json" \
    --header "Authorization: Bearer 039eda00-b397-4a6b-bab1-b1a9a90376d1" \
    --request PUT \
    --data '{"endTime":"1574423247000","launchUuid":"96d1bc02-6a3f-451e-b706-719149d51ce4"}' \
    http://rp.com/api/v1/rp_project/item/1e183148-c79f-493a-a615-2c9a888cb441
    {
    "endTime": "1574423247000",
    "launchUuid": "96d1bc02-6a3f-451e-b706-719149d51ce4"
    }

    Finish launch

    When we finished all test items, it's time to finish launch. Endpoint:

    PUT /api/{version}/{projectName}/launch/{launchUuid}/finish

    Finish request model:

    AttributeRequiredDescriptionDefault valueExamples
    endTimeYesLaunch end time-2019-11-22T11:47:01+00:00 (ISO 8601); Fri, 22 Nov 2019 11:47:01 +0000 (RFC 822, 1036, 1123, 2822); 2019-11-22T11:47:01+00:00 (RFC 3339); 1574423221000 (Unix Timestamp)
    statusNoLaunch status. Allowable values: "passed", "failed", "stopped", "skipped", "interrupted", "cancelled"calculated from children test itemsfailed
    descriptionNoLaunch description. Overrides description on startemptyservice test
    attributesNoLaunch attributes. Pairs of key and value. Overrides attributes on startempty

    Finish response model

    AttributeRequiredDescriptionExample
    idYesLaunch UUID6f084c4d-edb5-4691-90ba-d9e819ba61ba
    number (*)NoLaunch number1
    link (*)NoUI link to launchhttp://rp.com/ui/#rp_project/launches/all/73336

    (*) - In case async endpoint field is missing or empty

    Full request:

    curl --header "Content-Type: application/json" \
    --header "Authorization: Bearer 039eda00-b397-4a6b-bab1-b1a9a90376d1" \
    --request PUT \
    --data '{"endTime":"1574423255000"}' \
    http://rp.com/api/v1/rp_project/launch/96d1bc02-6a3f-451e-b706-719149d51ce4/finish

    Where body is:

    {
    "endTime": "1574423255000"
    }

    Example

    Example using bash yo can find here

    - + \ No newline at end of file diff --git a/dev-guides/RerunDevelopersGuide/index.html b/dev-guides/RerunDevelopersGuide/index.html index 48a259b57..2bd6e0737 100644 --- a/dev-guides/RerunDevelopersGuide/index.html +++ b/dev-guides/RerunDevelopersGuide/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Rerun developers guide

    What is rerun

    Let's imagine we have some set of tests:

    After run we can see few failed items:

    We are fixing issues and want to launch tests again. But running all the tests can take a lot of time. So it would be better to run only failed tests from previous launch.

    Now we have the following:

    So what do we have here? Two launches with the same tests that was just be started again, but they are have difference in passed and failed items. And it is hard to find which test was fixed and which was not.

    The main idea of reruns is to restart the same launch and trace changes between them not creating new launch every time.

    Let's try to report the same launches using rerun.

    We have only one launch with last run data

    On the step view we can see that items with names getActivitiesForProject, getActivityPositive and getTestITemActivitiesPositive have retries. Items getActivityPositive and getTestITemActivitiesPositive was fixed and getActivitiesForProject is still failing.

    How to start rerun

    Latest launch

    Using API

    To start launch rerun you should call default start launch endpoint adding "rerun"=true parameter in the request body.

    {
    "name": "launch_name",
    "description": "some description",
    "mode": "DEFAULT",
    "rerun": true
    }

    And response will contain found launch id for asynchronous endpoint or id and number for synchronous.

    {
    "id": "89f6d409-bee0-428e-baca-4848f86c06e7",
    "number": 4
    }

    Using agent

    To start launch rerun add rp.rerun=true to reportportal.properties file. No need to change anything else(name, project, etc.).

    rp.endpoint=https://rp.com
    rp.apiKey=caccb4bd-f6e7-48f2-af3a-eca0f566b3bd
    rp.launch=rerun_test_example
    rp.project=reporting-test
    rp.reporting.async=true
    rp.rerun=true

    Handling

    System tries to find the latest launch on the project with same name as in request.

    If launch found - system updates the following attributes (if they are present in request and they are different from stored):

    • Mode
    • Description
    • Attributes
    • UUID
    • Status = IN_PROGRESS

    If system cannot find launch with the same name - system throws error with 404 code.

    Specified launch

    Using API

    To start launch rerun you should call default start launch endpoint adding "rerun"=true and "rerunOf"=launch_uuid parameters in the request body. Where launch_uuid is UUID of launch that have to be reruned.

    {
    "name": "launch_name",
    "description": "some description",
    "mode": "DEFAULT",
    "rerun": true,
    "rerunOf": "79446272-a439-45f9-8073-5ca7869f140b"
    }

    And response will contain found launch id for asynchronous endpoint or id and number for synchronous.

    {
    "id": "79446272-a439-45f9-8073-5ca7869f140b",
    "number": 4
    }

    Using agent

    To start launch rerun set rp.rerun=true and rp.rerun.of=launch_uuid in reportportal.properties file. Where launch_uuid is UUID of launch that have to be reruned.

    rp.endpoint=https://rp.com
    rp.apiKey=caccb4bd-f6e7-48f2-af3a-eca0f566b3bd
    rp.launch=rerun_test_example
    rp.project=reporting-test
    rp.reporting.async=true
    rp.rerun=true
    rp.rerun.of=79446272-a439-45f9-8073-5ca7869f140b

    Where 79446272-a439-45f9-8073-5ca7869f140b is UUID of desired launch.

    Handling

    The same as for specified launch.

    Test Items behavior

    There are no differences in API calls for starting and finishing items inside rerun launch. But such items handling is different.

    Container types (has children)

    System tries to find item with the same name, set of parameters and under the same path.

    If such item found - the following attributes will be updated:

    • Description
    • UUID
    • Status = IN_PROGRESS

    If not - new item will be created.

    Step types (without children)

    System tries to find item with the same name, set of parameters and under the same path.

    If such item found - retry of the item will be created.

    If not - new item will be created.

    Example

    You can try to rerun launch here

    - + \ No newline at end of file diff --git a/dev-guides/RetriesReporting/index.html b/dev-guides/RetriesReporting/index.html index 17a5a193f..418597974 100644 --- a/dev-guides/RetriesReporting/index.html +++ b/dev-guides/RetriesReporting/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ Also Test item with type Suite cannot be reported as a retry.

    Retries handling triggered only if Test item has retry=true flag in the request. For example:

    First request will trigger retries handling, but if it's the first reported Test item it won't be a retry:

    {
    "name": "example step",
    "startTime": "1574423237100",
    "type": "step",
    "launchUuid": "<launch uuid>",
    "description": "Item that should be retried",
    "retry": true
    }

    Second request won't trigger retries handling, because retry=false is specified (or this field isn't provided) in the request:

    {
    "name": "example step",
    "startTime": "1574423237100",
    "type": "step",
    "launchUuid": "<launch uuid>",
    "description": "Item that should be retried",
    "retry": false
    }

    As a result 2 separate Test items will be displayed, so ORDER of sent requests matters (if send this items in reversed order they will be grouped as retries).

    In ReportPortal the only Test item from the Retries group that has statistics and can have an issue attached is the one with max startTime. In previous requests startTime was 1574423237000 for the first one and 1574423237100 for the second one, so the second one is a 'main' Test Item with statistics and issue (if attached).

    - + \ No newline at end of file diff --git a/index.html b/index.html index 65250e468..4638fa0a5 100644 --- a/index.html +++ b/index.html @@ -12,7 +12,7 @@ - + @@ -20,10 +20,10 @@

    What is ReportPortal?

    ReportPortal is a TestOps service, that provides increased capabilities to speed up results analysis and reporting through the use of built-in analytic features.

    ReportPortal is a great addition to Continuous Integration and Continuous -Testing process.

    What ReportPortal can do?

    • Mainstream platforms integration

    ReportPortal seamlessly integrates with mainstream platforms such as Jenkins, Jira, BDD process, majority of Functional and Unit testing frameworks.

    • Real-time results

    Real-time integration provides businesses the ability to manage and track execution status directly from the ReportPortal.

    • Test case execution results structure

    Test case execution results are stored following the same structure you have in your reporting suites and test plan. The test cases are shown together with all related data in one place, right where you need it: logs, screenshots, binary data. The execution pipeline of certain test cases are also available for you, so one can see previous test execution report in one click.

    • Collaborative analysis

    Our test report dashboard also gives you the ability to collaboratively analyze the test automation results and quickly get automation test report. Particular test cases can be associated with a product bug, an automation issue, a system issue or can be submitted as an issue ticket directly from the execution result.

    • Historical data of test execution

    ReportPortal provides enhanced capabilities along with auto-results analysis by +Testing process.

    ReportPortal is distributed under the Apache v2.0 license, and it is free to use and modify, even for commercial purposes. We offer the only paid premium feature – Quality Gates.

    If a company is interested in our services, we can provide support hours to deploy, integrate, configure, or customize the tool, as well as SaaS options.

    What ReportPortal can do?

    • Mainstream platforms integration

    ReportPortal seamlessly integrates with mainstream platforms such as Jenkins, Jira, BDD process, majority of Functional and Unit testing frameworks.

    • Real-time results

    Real-time integration provides businesses the ability to manage and track execution status directly from the ReportPortal.

    • Test case execution results structure

    Test case execution results are stored following the same structure you have in your reporting suites and test plan. The test cases are shown together with all related data in one place, right where you need it: logs, screenshots, binary data. The execution pipeline of certain test cases are also available for you, so one can see previous test execution report in one click.

    • Collaborative analysis

    Our test report dashboard also gives you the ability to collaboratively analyze the test automation results and quickly get automation test report. Particular test cases can be associated with a product bug, an automation issue, a system issue or can be submitted as an issue ticket directly from the execution result.

    • Historical data of test execution

    ReportPortal provides enhanced capabilities along with auto-results analysis by leveraging historical data of test execution.

    • Automatic Analysis

    With each execution, ReportPortal automatically figures out the root cause of a fail. As a result of AI-based defects triage, ReportPortal is marking a test result with a flag. Engineers will be alerted about this issue to provide further analysis: if it has been resolved already or which test results require actual human analysis.

    What technologies are used?

    Considering a high load rate and performance requirements, we use cutting edge technologies such as:

    • PostgreSQL - The World's Most Advanced Open Source Relational Database.

    • REST Web Service - lightweight requests, industry standard.

    • Mobile responsive UI - check it at any mobile device with the default browser.

    Benefits of report automation with ReportPortal

    Report automation is the procedure by which reports are routinely and automatically refreshed.

    • Speedy decision-making

    Report automation is an effective technique to provide information that is essential to business operations. Delivering crucial information to the appropriate people at the appropriate time becomes considerably quicker and simpler by automatically generated reports. It allows to get business faster insights and drive better decisions.

    • Accurate data

    In ReportPortal, you have fully real-time analytic report automation. Since the reports are automatically generated, you are insured against human error when reports are generated manually.

    • Advanced reporting

    ReportPortal offers widgets with a user-friendly visual interface to create interactive reports for all your needs. For example, you can build qa metrics dashboard using Overall statistics, Unique bugs table, Passing rate summary widgets.

    • Easily running CI/CD tests

    ReportPortal is CI/CD agnostic tool solution. You can use any CI environment to run automated tests to improve quality of product by catching issues early in development lifecycle.

    - + \ No newline at end of file diff --git a/installation-steps/AdditionalConfigurationParameters/index.html b/installation-steps/AdditionalConfigurationParameters/index.html index c8020447e..6586d437b 100644 --- a/installation-steps/AdditionalConfigurationParameters/index.html +++ b/installation-steps/AdditionalConfigurationParameters/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Additional configuration parameters

    Configuration parameterDefault ValueServiceDescription
    RP_PROFILES-API,UATSpecifies application settings profiles. Should be set to 'docker'
    RP_SESSION_LIVE3600UATSession token live time in seconds
    RP_SERVER_PORT8080UIUI service port
    POSTGRES_SERVERpostgresAPI,UAT,MIGRATIONSPostgreSQL host
    POSTGRES_PORT5432API,UAT,MIGRATIONSPostgreSQL port
    POSTGRES_USERrpuserAPI,UAT,MIGRATIONSPostgreSQL user name
    POSTGRES_PASSWORDrppassAPI,UAT,MIGRATIONSPostgreSQL user password
    POSTGRES_DBreportportalAPI,UAT,MIGRATIONSPostgreSQL database name
    RABBITMQ_DEFAULT_USERrabbitmqAPI,ANALYZERPostgreSQL database name
    RABBITMQ_DEFAULT_PASSrabbitmqAPI,ANALYZERPostgreSQL database name

    Example of docker compose with filled out configuration parameters can be found here.

    - + \ No newline at end of file diff --git a/installation-steps/BasicMonitoringConfiguration/index.html b/installation-steps/BasicMonitoringConfiguration/index.html index 3dda978a8..8ffecc3d7 100644 --- a/installation-steps/BasicMonitoringConfiguration/index.html +++ b/installation-steps/BasicMonitoringConfiguration/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ To avoid competition for resources with the services of the ReportPortal, deploy a separate virtual machine for monitoring (for our instances we using m5.large shape for the monitoring node) and install the following services:

    1) InfluxDB database: https://docs.influxdata.com/influxdb/v2.0/install/?t=Docker;

    2) Grafana: Dashboard examples(Grafana IDs): 5955, 3056.

    3) Telegraf:

    • Kubernetes deployment: telegraf agent needs to be installed at each cluster node.
    • Docker deployment: telegraf agent should be installed at the ReportPortal VM. In case of rollouting the Database server on the separate VM, telegraf agent should be installed also at that VM.

    Telegraf installation guide:

    Update your system.

        sudo yum -y update

    Add Influxdata RPM repository.

        cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
    [influxdb]
    name = InfluxDB Repository - RHEL
    baseurl = https://repos.influxdata.com/rhel/7/x86_64/stable/
    enabled = 1
    gpgcheck = 1
    gpgkey = https://repos.influxdata.com/influxdb.key
    EOF

    Install Telegraf on RHEL 8 / CentOS 8. Once the repository has been added, install Telegraf on RHEL 8 using the command below.

        sudo dnf -y install telegraf

    Open "telegraf.conf" file for the monitoring configuration. In the case of Kubernetes deployment need to configure telegraf on each cluster node separately.

        sudo nano /etc/telegraf/telegraf.conf

    Change following configs(press Ctrl+W to search for the particular configs):

        hostname = "api_node_1"

    Search for the "outputs.influxdb" and update URL and database name for the InfluxDB:

        [[outputs.influxdb]]
    urls = ["http://<influxdb_host>:8086"]
    database = "telegraf"

    Search for the "inputs.docker" and update next configs(should be uncommented each value which you need to add to the monitoring):

        [[inputs.docker]]
    endpoint = "unix://var/run/docker.sock"
    perdevice_include = ["cpu"]
    total_include = ["cpu", "blkio", "network"]

    Search for the "inputs.net" for adding the network metrics to the monitoring. Uncomment only the plugin name:

        [[inputs.net]]

    Save changes, close "telegraf.conf" and start telegraf service:

        sudo systemctl enable --now telegraf

    Check the status(should be green and in active running status):

        sudo systemctl status telegraf

    In case of errors "E! [inputs.docker] Error in plugin: Got permission denied while trying to connect to the Docker daemon socket at unix://var/run/docker.sock Permission denied"

    Need to add permissions to the /var/run/docker.sock:

        sudo chmod 666 /var/run/docker.sock

    PGHero - simple monitoring dashboard for PostgreSQL

    Functionality

    • requests statistic: number of calls, average and total execution time (with the ability to store history);
    • currently active queries;
    • information about tables: disk space occupied, dates of the last VACUUM and ANALYSE launches;
    • information about indexes: disk space occupied, presence of duplicated / unused indexes;
    • recommendations regarding adding an index on complex queries with Seq Scan;
    • statistics on open connections to the database;
    • displaying basic database settings that affect performance (shared_buffers, work_mem, maintenance_work_mem, etc.).

    Installation

    How to enable query stats

    In the database settings(for RDS database - in parameter group) add/change the following parameters:

        shared_preload_libraries = 'pg_stat_statements'
    pg_stat_statements.track = all
    pg_stat_statements.max = 10000
    track_activity_query_size = 2048

    Restart the database or reboot the RDS instance. As a superuser from the psql console, run:

        CREATE extension pg_stat_statements;

    How to configure historical query stats

    To track query stats over time, create a table to store them.

    Execute the following query for table creation:

        CREATE TABLE "pghero_query_stats" (
    "id" bigserial primary key,
    "database" text,
    "user" text,
    "query" text,
    "query_hash" bigint,
    "total_time" float,
    "calls" bigint,
    "captured_at" timestamp
    );

    Build index on the created table:

        CREATE INDEX ON "pghero_query_stats" ("database", "captured_at");

    Include the following to the installation string to schedule the task to run every 5 minutes:

        bin/rake pghero:capture_query_stats

    The query stats table can grow large over time. Remove old stats with:

        bin/rake pghero:clean_query_stats
    - + \ No newline at end of file diff --git a/installation-steps/DeployOnUbuntuOS/index.html b/installation-steps/DeployOnUbuntuOS/index.html index b5665b12c..5ea8671f3 100644 --- a/installation-steps/DeployOnUbuntuOS/index.html +++ b/installation-steps/DeployOnUbuntuOS/index.html @@ -12,7 +12,7 @@ - + @@ -25,7 +25,7 @@ docker ps to check that all containers from previous step are up and running.

    1. Check that ReportPortal is running In the VM opten browser to 0.0.0.0:8080 --> ReportPortal login page will open.
    note

    If you are behind a proxy you need to add 0.0.0.0 to the NO_PROXY (no_proxy) ENV.
    After setting the port forwarding like explained in video PART 2 (link below) open browser on your host machine to localhost:8080 or 127.0.0.1:8080 --> ReportPortal loginpage will open

    OPTIONAL

    If you don't like to write 'sudo' before each docker-command do this but be aware of possible security issue with that!

       sudo groupadd docker
    sudo usermod -aG docker $USER

    >>> RESTART VM!

    Helpful links (video tutorial)

    Part 1

    Part 2

    - + \ No newline at end of file diff --git a/installation-steps/DeployWithAWSECSFargate/index.html b/installation-steps/DeployWithAWSECSFargate/index.html index 799db13f7..4ca065268 100644 --- a/installation-steps/DeployWithAWSECSFargate/index.html +++ b/installation-steps/DeployWithAWSECSFargate/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ c. Now inspect the logs of traefik service to see if all RP components are being picked up in the configuration from ECS provider.

    Index: For some obvious reasons the index (with Ruby runtime) service couldn't run on ECS - hence ported to Lambda with Python runtime. Create a lambda function with 128M memory & 120s timeout with following code.

    Add environment variable TRAEFIK_SERVICES_URL with the IP address of Traefik endpoint (it can be fetched from the task details. Eg: http://192.168.2.120:8081)

    mureq can be obtained from mureq.py - place it beside the lamda_function.py file.

    import os
    import json
    import mureq


    def lambda_handler(event, context):
    print("-------------------EVENT BEGIN-------------------------------")
    print(event)
    print("-------------------EVENT END-------------------------------")
    traefik_services= mureq.get(os.environ['TRAEFIK_SERVICES_URL'])

    if event['path'] == '/composite/info':
    rp_status = {}
    for service in traefik_services.json():
    if "loadBalancer" in service:
    app_name = service['name'].replace('@ecs','')
    app_info = mureq.get(service['loadBalancer']['servers'][0]['url'] + '/info')
    rp_status.update({app_name: app_info.json()})
    return{
    "statusCode": 200,
    "statusDescription": "200 OK",
    "isBase64Encoded": False,
    "headers": {
    "Content-Type": "application/json"
    },
    "body": json.dumps(rp_status)
    }
    if event['path'] == '/composite/health':
    rp_health = {}
    for service in traefik_services.json():
    if "loadBalancer" in service:
    app_name = service['name'].replace('@ecs','')
    app_health = list(service['serverStatus'].values())[0]
    rp_health.update({app_name: app_health})
    return{
    "statusCode": 200,
    "statusDescription": "200 OK",
    "isBase64Encoded": False,
    "headers": {
    "Content-Type": "application/json"
    },
    "body": json.dumps(rp_health)
    }
    if event['path'] == '/':
    redirect_url= event['headers']['x-forwarded-proto'] + "://" + event['headers']['host'] + '/ui'
    print(redirect_url)
    return{
    "statusCode": 301,
    "statusDescription": "301 Found",
    "isBase64Encoded": False,
    "headers": {
    "Location": redirect_url
    },
    "body": ""
    }

    if event['path'] == '/ui':
    redirect_url= event['headers']['x-forwarded-proto'] + "://" + event['headers']['host'] + '/ui/'
    print(redirect_url)
    return{
    "statusCode": 301,
    "statusDescription": "301 Found",
    "isBase64Encoded": False,
    "headers": {
    "Location": redirect_url
    },
    "body": ""
    }

    Now add this lambda to the Index TargetGroup created earlier.

    DNS

    Add relevent DNS records in the Route53 hostedzone.

    Validation

    Access the application with default credentials once the DNS record addition is propogated & validate if all sections are loading without errors.

    - + \ No newline at end of file diff --git a/installation-steps/DeployWithDockerOnLinuxMac/index.html b/installation-steps/DeployWithDockerOnLinuxMac/index.html index 40f218ac3..40d74b89c 100644 --- a/installation-steps/DeployWithDockerOnLinuxMac/index.html +++ b/installation-steps/DeployWithDockerOnLinuxMac/index.html @@ -12,15 +12,15 @@ - +
    -

    Deploy with Docker on Linux/Mac

    ReportPortal can be easily deployed using Docker Compose.

    Install Docker

    Docker is supported by all major Linux distributions, MacOS and Windows.

    ⚠️ Recomended change resources limits at least 2 CPU 5 GB RAM for Docker Desktop: MAC | Windows | Linux

    Deploy ReportPortal with Docker

    1. Download the latest ReportPortal Docker Compose file from here. You can make it by run the following command:
    curl -LO https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml
    1. Make the ElasticSearch configuration prerequisites for the analyzer service

      • OPTIONAL: Set {vm.max_map_count} kernel setting before ReportPortal deploying with the following Commands
      • Give right permissions to ElasticSearch data folder using the following commands:
    mkdir -p data/elasticsearch
    chmod 777 data/elasticsearch
    chgrp 1000 data/elasticsearch

    For more details about ElasticSearch visit ElasticSearch guide

    OPTIONAL

    PostgreSQL Performance Tuning

    Depends on your hardware configuration and parameters of your system, you can additionally optimize your PostgreSQL performance by adding the following parameters to "command" option in the Docker compose file:

     -c effective_io_concurrency=
    -c shared_buffers=
    -c max_connections=
    -c effective_cache_size=
    -c maintenance_work_mem=
    -c random_page_cost=
    -c seq_page_cost=
    -c min_wal_size=
    -c max_wal_size=
    -c max_worker_processes=
    -c max_parallel_workers_per_gather=

    Please choose set the values of these variables that are right for your system.

    You can also change PostgreSQL host by passing a new value to POSTGRES_SERVER environment variable.

    1. Start the application using the following command:
    docker-compose -p reportportal up -d --force-recreate

    Where:

    • -p reportportal adds project prefix 'reportportal' to all containers
    • up creates and starts containers
    • -d daemon mode
    • --force-recreate Re-creates containers if there any

    Useful commands:

    • docker-compose logs shows logs from all containers
    • docker logs <container_name> shows logs from selected container
    • docker ps -a | grep "reportportal_" | awk '{print $1}' | xargs docker rm -f Deletes all ReportPortal containers
    • docker-compose down
    1. Open your web-browser with an IP address of the deployed environment at port 8080

    Use the following login\pass to access:

    • Default User: default\1q2w3e
    • Administrator: superadmin\erebus

    ⚠️ Please change the admin password for better security

    - +

    Deploy with Docker on Linux/Mac

    ReportPortal can be easily deployed using Docker Compose.

    Install Docker

    Docker is supported by all major Linux distributions, MacOS and Windows.

    ⚠️ Recomended change resources limits at least 2 CPU 5 GB RAM for Docker Desktop: MAC | Windows | Linux

    Deploy ReportPortal with Docker

    1. Download the latest ReportPortal Docker Compose file from here. You can make it by run the following command:
    curl -LO https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml
    1. Make the ElasticSearch configuration prerequisites for the analyzer service

      • OPTIONAL: Set {vm.max_map_count} kernel setting before ReportPortal deploying with the following Commands
      • Give right permissions to ElasticSearch data folder using the following commands:
    mkdir -p data/elasticsearch
    chmod 777 data/elasticsearch
    chgrp 1000 data/elasticsearch

    For more details about ElasticSearch visit ElasticSearch guide

    OPTIONAL

    PostgreSQL Performance Tuning

    Depends on your hardware configuration and parameters of your system, you can additionally optimize your PostgreSQL performance by adding the following parameters to "command" option in the Docker compose file:

     -c effective_io_concurrency=
    -c shared_buffers=
    -c max_connections=
    -c effective_cache_size=
    -c maintenance_work_mem=
    -c random_page_cost=
    -c seq_page_cost=
    -c min_wal_size=
    -c max_wal_size=
    -c max_worker_processes=
    -c max_parallel_workers_per_gather=

    Please choose set the values of these variables that are right for your system.

    You can also change PostgreSQL host by passing a new value to POSTGRES_SERVER environment variable.

    1. Ensure you override the UAT Service environment variable RP_INITIAL_ADMIN_PASSWORD
    version: '2.4'
    services:

    uat:
    environment:
    RP_INITIAL_ADMIN_PASSWORD: "My_Strong_Password!"

    We've modified the current approach: during the initial installation and the first login of the superadmin, they will need to create a unique initial password, different from the default password provided in the ReportPortal installation documentation. Failure to do so will prevent the Auth service from starting.

    1. Start the application using the following command:
    docker-compose -p reportportal up -d --force-recreate

    Where:

    • -p reportportal adds project prefix 'reportportal' to all containers
    • up creates and starts containers
    • -d daemon mode
    • --force-recreate Re-creates containers if there any

    Useful commands:

    • docker-compose logs shows logs from all containers
    • docker logs <container_name> shows logs from selected container
    • docker ps -a | grep "reportportal_" | awk '{print $1}' | xargs docker rm -f Deletes all ReportPortal containers
    • docker-compose down
    1. Open your web-browser with an IP address of the deployed environment at port 8080

    Use the following login\pass to access:

    • Default User: default\1q2w3e
    • Administrator: superadmin\erebus

    ⚠️ Please change the admin password for better security

    + \ No newline at end of file diff --git a/installation-steps/DeployWithDockerOnWindows/index.html b/installation-steps/DeployWithDockerOnWindows/index.html index 53fc56801..a41e64962 100644 --- a/installation-steps/DeployWithDockerOnWindows/index.html +++ b/installation-steps/DeployWithDockerOnWindows/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Deploy with Docker on Windows

    In case you went with Docker on Windows, please make sure you changed the 'volumes' value for postgres container from "For unix host" to the "For windows host":

      volumes:
    # For windows host
    - postgres:/var/lib/postgresql/data
    # For unix host
    # - ./data/postgres:/var/lib/postgresql/data

    If you haven’t done this, you will get an error

    data directory “/var/lib/postgresql/data/pgdata” has wrong ownership

    Then uncomment the following:

        volumes:
    # For unix host
    # - ./data/storage:/data
    # For windows host
    - minio:/data

    And after that uncomment the following:

    # Docker volume for Windows host
    volumes:
    postgres:
    minio:

    Updating ReportPortal with Docker

    Updating ReportPortal with Docker is a two step process.

    In the first step, your Docker Compose file should be replaced with a new one (with the latest version services) from here.

    The second step is update / redeploy the application using the following command:

    docker-compose -p reportportal up -d --force-recreate

    There is no strict need for backup / restore the data if you are keep the postgres, elasticsearch & minio volumes. However, it is recommended (see Maintain commands Cheat sheet).

    ReportPortal Services

    The ReportPortal consists of the following services:

    • Authorization Service. In charge of access tokens distribution.
    • Gateway Service. Main entry point to application. Port used by gateway should be opened and accessible from outside network.
    • API Service. Main application API.
    • UI Service. All statics for user interface.
    • Analyzer Service. Collects and processes the information, then sends it to ElasticSearch
    • Index Service. Responsible for redirections, collection of services information, handling errors
    - + \ No newline at end of file diff --git a/installation-steps/DeployWithKubernetes/index.html b/installation-steps/DeployWithKubernetes/index.html index 27b310751..722e00b1a 100644 --- a/installation-steps/DeployWithKubernetes/index.html +++ b/installation-steps/DeployWithKubernetes/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/installation-steps/DeployWithoutDocker/index.html b/installation-steps/DeployWithoutDocker/index.html index 2a125e3dc..b1f709bff 100644 --- a/installation-steps/DeployWithoutDocker/index.html +++ b/installation-steps/DeployWithoutDocker/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Deploy without Docker

    The instruction designed for the version 5.3.5 and might be outdated for the latest versions. Do not hesitate to contribute and send us a pull request with updates. We appreciate your help!

    In order to get started with ReportPortal on Red Hat Family and Ubuntu Linux distributions non-Docker/Kubernetes usage, please use the following links

    1. [Outdated] ReportPortal 5.3.5

    ReportPortal 5.3.5 installation guide

    Supported OS

    Ubuntu LTS 18.04, 20.04 / Red Hat family 6, 7, 8 (RHEL, CentOS, etc)

    Required service

    • PSQL 12.6
    • RabbitMQ 3.8.14
    • ElasticSearch 7.12
    • Traefik 1.7.29

    In addition, these services are compatible with earlier versions.

    2. [Outdated] ReportPortal 5.0.0

    ReportPortal 5.0.0 installation guide

    Supported OS

    Ubuntu LTS 16.04, 18.04 / Red Hat family 6, 7 (RHEL, CentOS, etc)

    Required service

    • PSQL 11
    • RabbitMQ 3.6.10
    • ElasticSearch 6.7.0"
    • Traefik 1.7.19
    - + \ No newline at end of file diff --git a/installation-steps/MaintainCommandsCheatSheet/index.html b/installation-steps/MaintainCommandsCheatSheet/index.html index 958f3d839..404f3de3f 100644 --- a/installation-steps/MaintainCommandsCheatSheet/index.html +++ b/installation-steps/MaintainCommandsCheatSheet/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Maintain commands Cheat sheet

    Export as env var: 

    export RP_PRJ=$(docker ps --filter="name=api" --format="\{{.Names}}" | sed 's/\(.*\)_api_[0-9]*/\1/')

    Install/restart ReportPortal: 

    docker-compose -p $RP_PRJ up -d --force-recreate

    Show all logs: 

    docker-compose -p $RP_PRJ logs

    Show specific logs: 

    docker-compose -p $RP_PRJ logs <name, e.g. api>

    Delete everything except data: 

    docker-compose -p $RP_PRJ down --rmi -v --remove-orphans

    Backup / Dump the data: 

    docker exec <postgres_container_name> pg_dump -U <POSTGRES_USER> <database_name> > backup.sql

    Clean up the data: 

    docker exec -it <postgres_container_name> psql -U <POSTGRES_USER> -d <database_name>
        DROP TABLE schema_migrations;
    DROP SCHEMA quartz CASCADE;
    DROP SCHEMA public CASCADE; CREATE SCHEMA public;
    \q

    Restore the data: 

    docker exec -i <postgres_container_name> psql -U <POSTGRES_USER> -d <database_name> < backup.sql

    You can download PDF file with commands.

    - + \ No newline at end of file diff --git a/installation-steps/OptimalPerformanceHardwareSetup/index.html b/installation-steps/OptimalPerformanceHardwareSetup/index.html index 7d423eea7..ac1729f92 100644 --- a/installation-steps/OptimalPerformanceHardwareSetup/index.html +++ b/installation-steps/OptimalPerformanceHardwareSetup/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ In grand total such a structure creates 3 Launches with 243 test case inside and produces 1253 requests.

    Now we can divide their number by the duration in seconds, and get the RPS result. if it runs for 6 minutes (2 minutes each lunch), then: 60s * 6 = 360 and 1253 / 360 ~=4.5 requests per second.

    If launches will be executed in parallel, 3 at the time, then RPS will be equal to 4.5*3 = 13.5 rps.


    Summary

    Having information regarding number of test cases in your framework, average number of logs, number of parallel threads and durations, you can calculate system capacity according to the tables below.


    Configuration testing results

    The purpose of the configuration performance testing is to determine saturation points and overall system capacity for different instance sizes and specifications. Testing was conducted on the С5 instances which are optimized for compute-intensive workloads and deliver cost-effective high performance at a low price per compute ratio(Compute Optimized Instances) with Up to 3.4GHz, and single core turbo frequency of up to 3.5 GHz 2nd generation Intel Xeon Scalable Processors (Cascade Lake) or 1st generation Intel Xeon Platinum 8000 series (Skylake-SP) processor with a sustained all core Turbo frequency.

    Application and Database are deployed on separate VMs

    Instance TypeSaturation point, rpsvUsers countDisk IOPSJava Options
    с5.xlarge64060up to 3000-Xmx1g
    c5.2xlarge1374115up to 4000-Xmx2g
    c5.4xlarge3104356up to 8000-Xmx3g
    с5.9xlarge5700489up to 10000-Xmx4g

    Application and Database are deployed on single VM

    Instance TypeSaturation point, rpsvUsers countDisk IOPSJava Options
    с5.xlarge52150up to 3000-Xmx1g
    c5.2xlarge107883up to 4000-Xmx2g
    c5.4xlarge2940305up to 8000-Xmx3g
    с5.9xlarge5227440up to 10000-Xmx4g


    4. The database separately from other services

    Consider deploying the database separately from other RP services. It allows increasing throughput of the server and performance of the ReportPortal overall. This can be, for example, AWS RDS PostgreSQL Database or a separate VM only for the PostgreSQL database.

    The separate database instance should be the same by CPU's and RAM, but started from middle+ server type, the database instance may need to have doubled CPU's and RAM size in comparison with the application instance. This is explained by the fact that with an increase in the size of the database and the number of concurrent users, the load is distributed more on the database server: increased volume of resources(CPU, memory, IOPS number, etc.) required to performing each DB query since it handles / can handle more data volume and/or can handle of a greater number of concurrent users.

    Example for the middle+ server:

    Instance typeCPU'sRAM size, GbDisk space, GbAWS Shape
    Application instance1632200c5.4xlarge
    Database instance16321000c5.4xlarge

    5. PostgreSQL Performance Tuning

    Since PostgreSQL Database is used, it needs some set of special configs for the best performance. These set contains two categories:

    • general and universal for any capacity of the instance hardware:

      effective_io_concurrency=200
      random_page_cost=0.1
      seq_page_cost=1
      min_wal_size=1GB
      max_wal_size=4GB
      wal_buffers=16MB
      default_statistics_target=100
      synchronous_commit=off
      wal_writer_delay=10ms
      checkpoint_completion_target=0.9
    • based on CPU/RAM size at the instance(example for 4 CPUs/8GB RAM; the database is deployed on the separate VM):

      shared_buffers=2GB
      effective_cache_size=6GB
      maintenance_work_mem=512MB
      work_mem=96MB
      max_worker_processes=4
      max_parallel_workers_per_gather=2
      max_parallel_workers=4
      max_parallel_maintenance_workers=2

      Recommendations regarding PostgreSQL server tuning for the instance with 8 CPUs/16GB RAM(where all RP services are deployed):

      shared_buffers=4GB
      effective_cache_size=8GB
      wal_buffers=16MB
      default_statistics_target=100
      effective_io_concurrency=200
      work_mem=96MB
      min_wal_size=1GB
      synchronous_commit=off
      wal_writer_delay=10ms
      maintenance_work_mem=1GB
      seq_page_cost=1
      checkpoint_completion_target=0.9
      random_page_cost=0.1
      max_wal_size=4GB
      max_worker_processes=8
      max_parallel_workers_per_gather=4
      max_parallel_workers=8
      max_parallel_maintenance_workers=4

      If the PostgreSQL database and services are deployed on the separate VM’s, the "effective_cache_size" parameter should be changed to "12GB"(total RAM size - shared_buffers size).


      **Simple ways to set these parameters:**

      CPU’s count related:

      max_worker_processes = <DB instance CPU’s count>
      max_parallel_workers_per_gather = <DB instance CPU’s count / 2>
      max_parallel_workers = <DB instance CPU’s count>
      max_parallel_maintenance_workers = <DB instance CPU’s count / 2>

      RAM size related:

      shared_buffers = <DB instance RAM size in GB / 4>
      effective_cache_size = <DB instance RAM size in GB - shared_buffers>
      maintenance_work_mem = < if total RAM size > 16 Gb – 2Gb; under 16Gb – 1Gb and less>

      For the docker-compose: add the following lines to the command section by the “-c” option to “postgres” service.

      Example:

      postgres:
      image: postgres:12-alpine
      shm_size: '512m'
      ...
      command:
      -c effective_io_concurrency=200
      -c random_page_cost=0.1
      -c seq_page_cost=1
      ...
      # Some another configs

      For the AWS RDS: create new parameter group(Services -> RDS -> Parameter groups -> Create parameter group), search config by the name and set up the following values, then apply created parameter group to the RDS DB.

      The following parameters can be scaled and depends on CPU’s number and RAM size of the instance. For example, for the instance 16 CPUs/32GB RAM(the database is deployed on the separate VM) this parameters should be:

      shared_buffers = '8GB'
      effective_cache_size = '24GB'
      max_worker_processes = '16'
      max_parallel_workers = '16'

    6. Application connections pool tuning

    By default, ReportPortal has 27 connections on service-api and 27 connections in pool on service-authorization. In general these values are valid for the small and middle servers. But from the middle+ server type, the connection pool may be increased if it's not enough for your server load.

    It can be detected as periodic freezes and the "Loading" message when opening any page, and/or slowing down the work with RP after a certain period of time during active reporting and use with UI. Restarts of API and UAT services can also be observed.

    To increasing the connection pool on both services, need to add next environment variables to the service-api and to the service-authorization:

    RP_DATASOURCE_MAXIMUMPOOLSIZE=100

    After increasing the connection pool from the application side, do not forget increase the max_connections from the Database side, using following DB configuration paramether:

    max_connections=500

    The values of these parameters are given for example only, but in general, can be valid for all types of loads for servers middle+ and large.

    Please note, that the max_connections paramether must be more than the sum of the RP_DATASOURCE_MAXIMUMPOOLSIZE for the API and the UAT services + several connections for connecting to the database from outside.

    7. Elasticsearch Performance Tuning

    As mentioned above, in some cases may be necessary to increase the limits of shards. The general rule is 2 active shards per 1 data stream(1 data stream equals 1 project in the ReportPortal on the default configuration). If the data stream reaches the default 50 GB storage limit, it will be rollovered and a new generation will be created (please see the diagram below). Please consider that the number of Elasticsearch shards on the default configuration is insufficient for ReportPortal installations with a large number of projects. As a result, after storing close to 3000 indices without any tuning the logs-saving behavior may be incorrect.

    To retrieve statistics from a cluster (to check the value of shard):

    GET /_cluster/stats

    {
    "_nodes": {
    "total": 3,
    "successful": 3,
    "failed": 0
    },
    "cluster_name": "elasticsearch",
    "cluster_uuid": "Oq5UUZUg3RGE0Pa_Trfds",
    "timestamp": 172365897412,
    "status": "green",
    "indices": {
    "count": 470,
    "shards": {
    "total": 940,
    "primaries": 470,
    "replication": 1.0,
    "index": {
    "shards": {
    "min": 2,
    "max": 2,
    "avg": 2.0
    },
    ...
    }

    The API returns basic index metrics (shard numbers, store size, memory usage) and information about the current nodes that form the cluster (number, roles, os, jvm versions, memory usage, cpu and installed plugins).

    To increase the limits of the total number of primary and replica shards for the cluster:

    PUT /_cluster/settings

    {
    "persistent" : {
    "cluster.max_shards_per_node": 3000
    }
    }

    Keep in mind, that the more shards you allow per node the more resources each node will need and the worse the performance can get.

    We also recommend to check the next guides in the official Elasticsearch documentation:

    Data streams

    Size your shards

    - + \ No newline at end of file diff --git a/installation-steps/ReportPortal23.1FileStorageOptions/index.html b/installation-steps/ReportPortal23.1FileStorageOptions/index.html index 976fda897..813b364c8 100644 --- a/installation-steps/ReportPortal23.1FileStorageOptions/index.html +++ b/installation-steps/ReportPortal23.1FileStorageOptions/index.html @@ -12,15 +12,15 @@ - +
    -

    ReportPortal 23.1 File storage options

    In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins.

    • AWS S3
    • MinIO distributed object storage
    • Container's File system

    Currently we have 2 file storage systems: multi-bucket and single-bucket.

    In the multi-bucket system structure of buckets looks like this:

    • bucketPrefix + ‘keystore’ (bucket for storing integration secrets)
    • bucketPrefix + ‘users’ (bucket for storing user data)
    • defaultBucketName (bucket for storing plugins)
    • bucketPrefix + projectId (bucket for storing project attachments)

    In the single-bucket system structure of single-bucket is the following:

    • singleBucketName/integration-secrets/ (prefix for integration secrets)
    • singleBucketName/user-data/ (prefix for user data)
    • singleBucketName/plugins/ (prefix for plugins)
    • singleBucketName/project-data/projectId (prefix for project attachments)

    AWS S3

    Amazon Simple Storage Service (Amazon S3) is an object storage service offering industry-leading scalability, data availability, security, and performance. Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition. A partition is a grouping of Regions.

    To set up AWS S3 in API, UAT & Jobs services use the following variables:

    • DATASTORE_TYPE: s3
    • DATASTORE_ACCESSKEY for AWS S3 AccessKey
    • DATASTORE_SECRETKEY for AWS S3 SecretKey
    • DATASTORE_REGION for AWS region

    To set up the multi-bucket system, use the following environment variables:

    • DATASTORE_BUCKETPREFIX for prefix of bucket name (‘prj-‘ by default)
    • DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (‘rp-bucket’ by default)

    To set up the single-bucket system, use the following environment variables:

    • DATASTORE_DEFAULTBUCKETNAME for single-bucket name
    • RP_FEATURE_FLAGS: singleBucket

    MinIO

    MinIO is a high-performance distributed object storage server. It stays on top of S3 or any other cloud storage and allows to have a shared FS for several API, UAT & Jobs pods in Kubernetes.

    To set up MinIO in services, use the following variables:

    • DATASTORE_TYPE: minio
    • DATASTORE_ENDPOINT for endpoint (address)
    • DATASTORE_ACCESSKEY for accesskey
    • DATASTORE_SECRETKEY for secretkey

    To set the multi-bucket system, use the following environment variables:

    • DATASTORE_BUCKETPREFIX for prefix of bucket name (‘prj-‘ by default)
    • DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (‘rp-bucket’ by default)

    To set the single-bucket system, use the following environment variables:

    • DATASTORE_DEFAULTBUCKETNAME for single-bucket name
    • RP_FEATURE_FLAGS : singleBucket

    Container's File system

    The container's file system option is used when you want to store this data in a mounted folder in the service-api or/and service-uat containers.

    To use this option, set up environment variables like this:

    • DATASTORE_TYPE: filesystem
    • DATASTORE_PATH for path in filesystem to store files.

    It can be done in both Docker and Kubernetes ReportPortal versions.

    - +

    ReportPortal 23.1 File storage options

    In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins.

    • AWS S3
    • MinIO distributed object storage
    • File system

    Currently we have 2 file storage systems: multi-bucket and single-bucket.

    In the multi-bucket system structure of buckets looks like this:

    • bucketPrefix + ‘keystore’ (bucket for storing integration secrets)
    • bucketPrefix + ‘users’ (bucket for storing user data)
    • defaultBucketName (bucket for storing plugins)
    • bucketPrefix + projectId (bucket for storing project attachments)

    In the single-bucket system structure of single-bucket is the following:

    • singleBucketName/integration-secrets/ (prefix for integration secrets)
    • singleBucketName/user-data/ (prefix for user data)
    • singleBucketName/plugins/ (prefix for plugins)
    • singleBucketName/project-data/projectId (prefix for project attachments)

    AWS S3

    Amazon Simple Storage Service (Amazon S3) is an object storage service offering industry-leading scalability, data availability, security, and performance. Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition. A partition is a grouping of Regions.

    To set up AWS S3 in API, UAT & Jobs services use the following variables:

    • DATASTORE_TYPE: s3
    • DATASTORE_ACCESSKEY for AWS S3 AccessKey
    • DATASTORE_SECRETKEY for AWS S3 SecretKey
    • DATASTORE_REGION for AWS region

    To set up the multi-bucket system, use the following environment variables:

    • DATASTORE_BUCKETPREFIX for prefix of bucket name (‘prj-‘ by default)
    • DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (‘rp-bucket’ by default)

    To set up the single-bucket system, use the following environment variables:

    • DATASTORE_DEFAULTBUCKETNAME for single-bucket name
    • RP_FEATURE_FLAGS: singleBucket

    MinIO

    MinIO is a high-performance distributed object storage server. It stays on top of S3 or any other cloud storage and allows to have a shared FS for several API, UAT & Jobs pods in Kubernetes.

    To set up MinIO in services, use the following variables:

    • DATASTORE_TYPE: minio
    • DATASTORE_ENDPOINT for endpoint (address)
    • DATASTORE_ACCESSKEY for accesskey
    • DATASTORE_SECRETKEY for secretkey

    To set the multi-bucket system, use the following environment variables:

    • DATASTORE_BUCKETPREFIX for prefix of bucket name (‘prj-‘ by default)
    • DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (‘rp-bucket’ by default)

    To set the single-bucket system, use the following environment variables:

    • DATASTORE_DEFAULTBUCKETNAME for single-bucket name
    • RP_FEATURE_FLAGS : singleBucket

    File system

    The file system option is used when you want to store this data in a mounted folder in the service-api or/and service-uat.

    To use this option, set up environment variables like this:

    • DATASTORE_TYPE: filesystem
    • DATASTORE_PATH for path in filesystem to store files.

    It can be done in both Docker and Kubernetes ReportPortal versions.

    + \ No newline at end of file diff --git a/installation-steps/SetupTSLSSLInTraefik2.0.x/index.html b/installation-steps/SetupTSLSSLInTraefik2.0.x/index.html index aa5183df6..f2c0f216e 100644 --- a/installation-steps/SetupTSLSSLInTraefik2.0.x/index.html +++ b/installation-steps/SetupTSLSSLInTraefik2.0.x/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Setup TLS(SSL) in Traefik 2.0.x

    This is a short guideline that provides information on how to configure ReportPortal to use Let TLS/SSL certificate setup for your existing ReportPortal environment.

    Overview

    We use Traefik as a layer-7 load balancer with TLS/SSL termination for the set of micro-services used to run ReportPortal web application.

    Pre-requisites

    • Server with a public IP address, with Docker and docker-compose installed on it
    • Installed ReportPortal on this servers
    • Your own domain and the DNS configured accordingly so the hostname records

    Configuration

    Provided below is an example of using Traefik (gateway service) in docker-compose.yaml. If you don't have any custom configurations, you are free to use the example below.

    Create a directory on the server for Traefik data and storing certificates

    mkdir data/traefik/ && mkdir -p data/certs/traefik

    Check:

    data
    |-- certs
    |-- elasticsearch
    |-- postgres
    |-- traefik

    Create config file for Traefik with certificate and key path.

    cat << EOF | tee -a data/traefik/certs-traefik.yaml
    tls:
    certificates:
    - certFile: /etc/certs/examplecert.crt
    keyFile: /etc/certs/examplecert.key
    EOF

    Place certificate examplecert.crt and key examplecert.key to directory data/certs/traefik/ you created earlier.

    Edit Traefik service in the docker-compose.yaml

    Add the following volumes to Traefik:

    services:
    gateway:
    volumes:
    - "./data/traefik/dynamic/certs-traefik.yaml:/etc/traefik/dynamic/certs-traefik.yaml"
    - "./data/certs/traefik:/etc/certs/"

    commands:

    services:
    gateway:
    commands:
    - "--providers.file.directory=/etc/traefik/dynamic"
    - "--entrypoints.websecure.address=:443"

    and ports:

    services:
    gateway:
    ports:
    - "443:443"

    Check the Traefik part:

    version: '2.4'
    services:

    gateway:
    image: traefik:v2.0.5
    ports:
    - "8080:8080" # HTTP exposed
    - "8081:8081" # HTTP Administration exposed
    - "443:443" # TLS/SSL
    volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"
    - "./data/traefik/dynamic/certs-traefik.yaml:/etc/traefik/dynamic/certs-traefik.yaml"
    - "./data/certs/traefik:/etc/certs/"
    command:
    - "--providers.docker=true"
    - "--providers.docker.constraints=Label(`traefik.expose`, `true`)"
    - "--entrypoints.web.address=:8080"
    - "--entrypoints.traefik.address=:8081"
    - "--api.dashboard=true"
    - "--api.insecure=true"
    # TLS/SSL
    - "--providers.file.directory=/etc/traefik/dynamic"
    - "--entrypoints.websecure.address=:443"
    restart: always

    Add the following labels to existing services api, uat, index, ui, replacing <service> with the corresponding service name

    labels:
    - "traefik.http.routers.<service>.tls=true"

    Check the UI and API services as an example:

    version: '2.4'
    services:

    ui:
    image: reportportal/service-ui:5.3.4
    environment:
    - RP_SERVER_PORT=8080
    labels:
    - "traefik.http.middlewares.ui-strip-prefix.stripprefix.prefixes=/ui"
    - "traefik.http.routers.ui.middlewares=ui-strip-prefix@docker"
    - "traefik.http.routers.ui.rule=PathPrefix(`/ui`)"
    - "traefik.http.routers.ui.service=ui"
    - "traefik.http.services.ui.loadbalancer.server.port=8080"
    - "traefik.http.services.ui.loadbalancer.server.scheme=http"
    - "traefik.expose=true"
    - "traefik.http.routers.ui.tls=true" # label is here
    restart: always
    note

    Make sure that the required ports are opened. Please check your firewall settings.

    1. Traefik HTTPS&TLS Offical documentation
    2. Traefik 2 & TLS 101
    3. Traefik Routing TLS

    Issues

    Unable to find valid certification path to requested target

    Feb-2 00:00:00.000 [rp-io-1] ERROR Launch - [18] ReportPortal execution error
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    Solutions:

    1. Recomended. Add certificate to Java-machine
    2. Not recommended. Ignoring SSL certificate
    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToAddATestStackTraceToADescriptionAutomatically/index.html b/issues-troubleshooting/HowToAddATestStackTraceToADescriptionAutomatically/index.html index ece76d409..3a2049ba1 100644 --- a/issues-troubleshooting/HowToAddATestStackTraceToADescriptionAutomatically/index.html +++ b/issues-troubleshooting/HowToAddATestStackTraceToADescriptionAutomatically/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    How to add a test stack trace to a description automatically

    You can make your process of a test analysis more convenient and quick by adding a description for failed tests that will include a last error message from the test log.

    You will not need to open an every single test to see the failure reason. With this new functionality you will see test failures reasons right in a table on All launches (step level), so that you can perform group actions to items.

    How to activate this option:

    Change your listener to wrap log messages on error level with special text:

        <place your error message here>

    We have prepared an example how to extend a TestNG agent, and you can find it below:

    An extend agent service:

        public static class ParamTaggingTestNgService extends TestNGService {

    public ParamTaggingTestNgService(ListenerParameters parameters, ReportPortalClient reportPortalClient) {
    super(parameters, reportPortalClient);
    }

    @Override
    protected StartTestItemRQ buildStartStepRq(ITestResult testResult) {
    final StartTestItemRQ rq = super.buildStartStepRq(testResult);
    if (testResult.getParameters() != null && testResult.getParameters().length != 0) {
    final Set<String> tags = Optional.fromNullable(rq.getTags()).or(new HashSet<>());
    for (Object param : testResult.getParameters()) {
    tags.add(param.toString());
    }
    rq.setTags(tags);

    }
    return rq;
    }

    @Override
    protected FinishTestItemRQ buildFinishTestMethodRq(String status, ITestResult testResult) {
    FinishTestItemRQ finishTestItemRQ = super.buildFinishTestMethodRq(status, testResult);
    if (testResult.getThrowable() != null) {
    String description =
    "```error\n"
    + Throwables.getStackTraceAsString(testResult.getThrowable())
    + "\n```";
    description = description + Throwables.getStackTraceAsString(testResult.getThrowable());
    finishTestItemRQ.setDescription(description);
    }
    return finishTestItemRQ;
    }
    }

    An extend listener with your extended service:

        public static class ExtendedListener extends BaseTestNGListener {
    public ExtendedListener() {
    super(override(new TestNGAgentModule()).with((Module) binder -> binder.bind(ITestNGService.class)
    .toProvider(new TestNGProvider() {
    @Override
    protected TestNGService createTestNgService(ListenerParameters listenerParameters,
    ReportPortalClient reportPortalClient) {
    return new ParamTaggingTestNgService(listenerParameters, reportPortalClient);
    }
    })));
    }
    }
    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToAvoidLocalExecutionReportedIntoProjectSpace/index.html b/issues-troubleshooting/HowToAvoidLocalExecutionReportedIntoProjectSpace/index.html index 1a0c51578..d9ac0bca3 100644 --- a/issues-troubleshooting/HowToAvoidLocalExecutionReportedIntoProjectSpace/index.html +++ b/issues-troubleshooting/HowToAvoidLocalExecutionReportedIntoProjectSpace/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    How to avoid local execution reported into project space

    Option 1:

    Use a specific attribute for launches, which should represent the state.

    Create filters using those attributes. Build widgets and dashboards, based on those attributes.

    You can add those additional attributes via the CI command line.

    So, only Jenkins will generate launches with those attributes.

    Option 2:

    Put rp.mode=debug in all reportportal.properties files.

    For Jenkins executions, overload this param via the command line as rp.mode=default,

    so that all local launches will be in debug, all Jenkins – in launches.

    Option 3:

    Combine option #2 and option #3, in the launch name.

    rp.launch=xxx saved in all reportportal.properties files.

    For Jenkins executions, overload this param via the command line as rp.launch=yyy

    The auto-analysis will use only yyy launches for review.

    Use filter, based on your yyy name for widgets.

    Option 4:

    The same like option 2, but with rp.enable=false|true

    This will turn off reporting for local launches

    Option 5:

    Set all users on the project with the Role Operator. This role can’t report data into RP.

    Create an internal user for Jenkins executions, set him/her as a PROJECT MANAGER role.

    This will make it possible to create launches only for Jenkins users

    note

    It is also possible to combine all those options at the same time.

    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToCheckLDAPConnection/index.html b/issues-troubleshooting/HowToCheckLDAPConnection/index.html index dfeb74517..06d462ce9 100644 --- a/issues-troubleshooting/HowToCheckLDAPConnection/index.html +++ b/issues-troubleshooting/HowToCheckLDAPConnection/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    How to check LDAP connection

    Firstly, check the availability of your LDAP server from the server when ReportPortal is installed. For example, use the command ldapsearch.

    ldapsearch -x -h <ldap hostname> -p <ldap port> -D "<bind DN>" -w "<bind password>" -b "<base users DN>" "uid=user1"

    Output will be:

    # extended LDIF
    #
    # LDAPv3
    # base <dc=rp,dc=com> with scope subtree
    # filter: uid=user1
    # requesting: ALL
    #

    # user1, people, rp.com
    dn: cn=tester,ou=people,dc=rp,dc=com
    objectClass: inetOrgPerson
    cn: user1
    sn: user1
    uid: user1
    userPassword:: PASSWORD
    mail: user1@rp.com
    description: user1 for experiments

    # search result
    search: 2
    result: 0 Success

    # numResponses: 2
    # numEntries: 1

    Hints

    If you are using docker you can also use the internal container IP docker inspect -f '\{{range .NetworkSettings.Networks}}\{{.IPAddress}}\{{end}}' <LDAP container name>

    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingPGRepack/index.html b/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingPGRepack/index.html index dd9a54284..84bd78816 100644 --- a/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingPGRepack/index.html +++ b/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingPGRepack/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    How to clean up the ReportPortal database using PG_REPACK

    Description

    pg_repack is a PostgreSQL extension that lets you remove bloat from tables and indexes, and optionally restore the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing. pg_repack is efficient to boot, with performance comparable to using CLUSTER directly.

    Performance

    Initial Database SizeFinal Database SizeRepack durationDuration
    1500 Gb251 Gb1200 Gb7 hours

    Overall pg_repack performance has been tested during load tests running and without. The database load during pg_repack is pretty good by capacity and instance   High DB RAM Utilization faced at the pr_repack starting, but then the overall RAM Usage becomes normal. During reporting(load tests running) faced small response times and throughput degradation around 10 minutes, but then they became a regular performance. Also, no KO requests during reporting and pg_repack run in parallel, so that all Staging pg_repack configuration can be safely porting to Production.

    Detailed DB Resource Utilization Stats

    ResourcesUsed
    CPU utilization13 %
    CPU IOwait7%
    Disk IO Read/Write1800/30000 IOPS

    PG_REPACK installation

    To install PG_REPACK use the guide from the official GitHub page. If you use Amazon RDS follow the link

    PG_REPACK usage

    • Attach to Screen session:
    screen

    For more information about the Screen read this guide.

    • You need to add the path to the PG_REPACK executable file. The PATH variable is an environment variable that contains an ordered list of paths that Unix will search for executables when running a command. Run the following command:
    export PATH=$PATH:/usr/pgsql-12/bin/
    • Create .pgpass file and fill your data. The file .pgpass the file referenced by PGPASSFILE contain passwords to be used if the connection requires a password. Documentation.
    cat << EOF | tee -a /.pgpass
    <database_host>:<database_port>:<database_name>:<database_user>:<database_password>
    EOF

    For example, .pgpass file should look like this:

    reportportal-cdufjldqrau0.eu-west-3.rds.amazonaws.com:5432:reportportal:rpuser:strongpassword
    • Change permissions to .pgpasss file:
    chmod 600 /.pgpass
    • Set PGPASSFILE environment variable:
    export PGPASSFILE='/.pgpass'
    • Fill your data and run PG_REPACK:
    pg_repack -h <database_address> -U <database_user> -k <database_name> &>> /pg_repack-rpdb.log

    No password is needed for the database because you are using .pgpass.

    When you run the command, you will get artifact pg_repack-rpdb.log, where PG_REPACK will storage the logs. The pg_repack-rpdb.log file is stored in your root directory /.

    • To detach from the Screen session type Control+a+d (on OSX and Linux). The result will be similar to:
    [detached from 22556.pts-0.ip-10-68-38-165]

    22556 is ID of you screen session. You will get a different ID. Save it.

    • Attach to the Screen session:
    screen -r

    If you have one Screen session, you will join it. If you have two or more of them, you will get the following result:

    There are several suitable screens on:
    22556.pts-0.ip-10-68-38-165 (Detached)
    8175.pts-0.ip-10-68-38-165 (Detached)
    Type "screen [-d] -r [pid.]tty.host" to resume one of them.

    To join the PG_REPACK Screen session fill your Screen ID that you saved in step 4 and run the following command:

    screen -r <your_screen_id>
    • To view the process of running the command you can read pg_repack-rpdb.log with command:
    cat /pg_repack-rpdb.log

    In addition, you can stream log with the command:

    tail -F /pg_repack-rpdb.log

    Type Control+c (on OSX and Linux) to exit from Tail

    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingVacuumFull/index.html b/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingVacuumFull/index.html index 5d6aff60d..05f667b34 100644 --- a/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingVacuumFull/index.html +++ b/issues-troubleshooting/HowToCleanUpTheReportPortalDatabaseUsingVacuumFull/index.html @@ -12,7 +12,7 @@ - + @@ -25,7 +25,7 @@ VACUUM FULL rewrites the entire contents of the table into a new disk file with no extra space, allowing unused space to be returned to the operating system. This form is much slower and requires an exclusive lock on each table while it is being processed.

    The main goals for performing VACUUM FULL at the ReportPoral database:

    • improve DB queries performance by removing dead tuples and updating statistics;
    • reclaim storage space occupied by dead tuples;
    • prevent bloating tables.

    Parameters

    ParameterDescription
    FULLSelects "full" vacuum, which can reclaim more space, but takes much longer and exclusively locks the table. This method also requires extra disk space, since it writes a new copy of the table and doesn't release the old copy until the operation is complete. Usually this should only be used when a significant amount of space needs to be reclaimed from within the table.
    FREEZESelects aggressive "freezing" of tuples. Specifying FREEZE is equivalent to performing VACUUM with the vacuum_freeze_min_age and vacuum_freeze_table_age parameters set to zero. Aggressive freezing is always performed when the table is rewritten, so this option is redundant when FULL is specified.
    VERBOSEPrints a detailed vacuum activity report for each table.
    ANALYZEUpdates statistics used by the planner to determine the most efficient way to execute a query.

    ⚠️ Important notes

    1. Assuming that VACUUM FULL required exclusive locks on the tables and required high time-consuming on the large databases, the suggestions are:

      • conduct testing of the VACUUM FULL execution at Staging/Dev/Non-Prod environment;
      • schedule the particular downtime for the Production database and shut down the application services except for the database.
    2. Сheck that the database disk has free space equal to or greater than the size of the largest table(with its indexes) in the database.

    The main suggestion is to perform VACUUM FULL operation periodically not for the whole database, but only for the particular tables defined below, which helps increase overall SQL queries performance. VACUUM FULL frequency for the databases more than 1Tb with high reporting amount - at least once per 3 months.

    Tables list and it's operations duration on our database(AWS RDS PostgreSQL Database spec: db.m5.4xlarge 16CPUs, 64Gb RAM):

    TableRows countVACUUM OperationDuration
    log614 372 224FULL14h 30m
    log614 372 224ANALYZE1h 30m
    test_item207 311 552FULL1h 50m
    test_item207 311 552ANALYZE21m
    statistics299 341 024FULL10m
    statistics299 341 024ANALYZE3m 49s
    test_item_results450 264 992FULL9m
    test_item_results450 264 992ANALYZE4m 12s

    VACUUM FULL execution

    Preconditions: Apply next configuration to PostgreSQL Parameter Group(database restart not needed after applying):

    maintenance_work_mem=8000000
    max_parallel_maintenance_workers=16
    • Configuration examples are defined for the database shape 16CPU, 64Gb RAM. The suggestion for other database shapes are: for maintenance_work_mem - 1/4 part of the total database RAM size; max_parallel_maintenance_workers - database CPUs count.

    Perform VACUUM FULL and ANALYZE on the each database table using the query:

    VACUUM (FULL, ANALYZE) my_table

    Or perform VACUUM FULL and VACUUM ANALYZE on all tables in the database using commands sequentially:

    VACUUM FULL
    VACUUM ANALYZE

    Postconditions: Apply regular configuration to PostgreSQL Parameter Group(database restart not needed after applying):

    maintenance_work_mem=2000000
    max_parallel_maintenance_workers=8

    Useful PostgreSQL queries

    Total database size:

    SELECT pg_size_pretty(pg_database_size('reportportal'));

    Show autovacuum stats:

    SELECT relname, last_vacuum, last_autovacuum FROM pg_stat_user_tables;

    Detailed statistic by each table and indexes:

    SELECT *, pg_size_pretty(total_bytes) AS total
    , pg_size_pretty(index_bytes) AS index
    , pg_size_pretty(toast_bytes) AS toast
    , pg_size_pretty(table_bytes) AS table
    FROM (
    SELECT *, total_bytes-index_bytes-coalesce(toast_bytes,0) AS table_bytes FROM (
    SELECT c.oid,nspname AS table_schema, relname AS table_name
    , c.reltuples AS row_estimate
    , pg_total_relation_size(c.oid) AS total_bytes
    , pg_indexes_size(c.oid) AS index_bytes
    , pg_total_relation_size(reltoastrelid) AS toast_bytes
    FROM pg_class c
    LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
    WHERE relkind = 'r'
    ) a
    ) a;

    Dead tuples amount per table:

    SELECT relname, n_dead_tup FROM pg_stat_user_tables order by n_dead_tup desc;
    - + \ No newline at end of file diff --git a/issues-troubleshooting/HowToResolveIssuesWithMigrationToTheNewVersion/index.html b/issues-troubleshooting/HowToResolveIssuesWithMigrationToTheNewVersion/index.html index 8eb6c3777..1ad816f9f 100644 --- a/issues-troubleshooting/HowToResolveIssuesWithMigrationToTheNewVersion/index.html +++ b/issues-troubleshooting/HowToResolveIssuesWithMigrationToTheNewVersion/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    How to resolve issues with migration to the new version

    Error: Dirty database version XX. Fix and force version.

    That means, migration process has been interrupted during XX migration (migration has been started but not finished)

    1. At first, you need to check the logs of migration (service itselft and database), it can be helpful, if yes, make some actions based on logs, if not then move next.
    2. You need to rollback all applied (if any) migration XX parts.

    The format for url is the next:

    https://github.com/reportportal/migrations/blob/develop/migrations/XX_some_name.up.sql

    (Usually nothing to rollback, but need check)

    1. Change in schema_migrations table, change values in this table to version=XX-1 (previous successful migration number), and dirty flag set to true.
    2. Restart migration.

    For instance, if you have "Error: Dirty database version 10. Fix and force version."

    1. Check the logs(service itselft and database), in case we've found nothing, move next.
    2. You need to check 10 migration (https://github.com/reportportal/migrations/blob/develop/migrations/10_attachment_size.up.sql) and rollback if you have some partly migration.
    3. Then execute #update schema_migrations set version=9, dirty=f
    4. Redeploy RP based on docker-composer for example (migration should be started automatically, if you followed by instructions of installation for this way.)

    Error: org.jasypt.exceptions.EncryptionOperationNotPossibleException: null. API doesn't start. ReportPortal unavailable.

    Minio files are used during migration to change integration passwords encryption. Files in Minio may be corrupted and deleted somehow before migration during Reportportal usage.

    Removing existing integrations from db before deploying can help. Creation of a new integration will use a new encryption type.

    1. Execute the next script in database to remove existing integrations before deploy:
    DELETE FROM integration WHERE type IN (SELECT id FROM integration_type WHERE name IN ('email', 'jira', 'ldap', 'ad'));

    1. Deploy Reportportal
    2. Create integrations again
    - + \ No newline at end of file diff --git a/issues-troubleshooting/IssuesWithJIRABugTrackingSystemHowToResolve/index.html b/issues-troubleshooting/IssuesWithJIRABugTrackingSystemHowToResolve/index.html index e16559077..d3b2d41f8 100644 --- a/issues-troubleshooting/IssuesWithJIRABugTrackingSystemHowToResolve/index.html +++ b/issues-troubleshooting/IssuesWithJIRABugTrackingSystemHowToResolve/index.html @@ -12,7 +12,7 @@ - + @@ -32,7 +32,7 @@ login name and password into the fields)
  • Submit the login form Screen with CAPTCHA should appears
  • Enter the symbols
  • Submit the credentials again
  • Now try to establish the connection to JIRA on ReportPortal project.
  • Fourth, maybe the connection to the jira instance requires a certificate, in this case you need to import the certificate inside the jira container:

    1. docker exec -it reportportal_jira_1 ash # go inside shell
    2. cd /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/
    3. wget url://to/your/foo.cert
    4. keytool -importcert -noprompt -file foo.crt -alias "JIRA CERT" -keystore cacerts -storepass abc123 (default password for keystore: changeit)
    5. exit and restart the docker jira
    6. Now try to establish the connection to JIRA on ReportPortal project.

    or

    1. docker cp cert.der reportportal_jira_1:/cert.der
    2. docker exec -t -i reportportal_jira_1 ./usr/lib/jvm/java-1.8-openjdk/jre/bin/keytool -import -alias rootcert -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -file /cert.der
    3. exit and restart the docker jira
    4. Now try to establish the connection to JIRA on ReportPortal project.
    note

    SSL instance of JIRA (even cloud version) can be accessed by JIRA API token, used instead of password.

    If these didn't resolve your issues, please contact us.

    - + \ No newline at end of file diff --git a/issues-troubleshooting/IssuesWithLDAPSHowToResolve/index.html b/issues-troubleshooting/IssuesWithLDAPSHowToResolve/index.html index 28e6e81da..6b9ee5ee9 100644 --- a/issues-troubleshooting/IssuesWithLDAPSHowToResolve/index.html +++ b/issues-troubleshooting/IssuesWithLDAPSHowToResolve/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Issues with LDAPS: how to resolve

    When configuring LDAP to work with ldaps:// users may see the following error when trying to log in:

    sun.security.validator.ValidatorException: PKIX path building failed: 
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

    This error can be solved by importing the needed certificate within the authorization container:

    # Enter service-authorization container as root
    docker exec -u 0 -it reportportal_uat_1 sh

    # Download certificates
    cd /usr/local/share/ca-certificates/
    wget url://to/your/foo.cert

    # Import the cert to keytool. if password is required the default should be "changeit"
    $JAVA_HOME/bin/keytool -import -alias ldap_cert -keystore $JAVA_HOME/lib/security/cacerts -file /usr/local/share/ca-certificates/foo.cert

    # exit container and restart it
    docker restart reportportal_uat_1
    - + \ No newline at end of file diff --git a/issues-troubleshooting/ResolveAnalyzerKnownIssues/index.html b/issues-troubleshooting/ResolveAnalyzerKnownIssues/index.html index 8fb7e586a..94993ec16 100644 --- a/issues-troubleshooting/ResolveAnalyzerKnownIssues/index.html +++ b/issues-troubleshooting/ResolveAnalyzerKnownIssues/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Resolve Analyzer Known Issues

    Problem 1. Auto-Analyser doesn't work. Analyzer health check status failed: Elasticsearch is not healthy

    Problem Description

    Analyzer log:

    2021-09-09 11:34:47,927 - analyzerApp - ERROR - Analyzer health check status failed: Elasticsearch is not healthy;
    [pid: 10|app: 0|req: 1/3] 127.0.0.1 () {28 vars in 294 bytes} [Thu Sep 9 11:34:46 2021] GET / => generated 43 bytes in 1643 msecs (HTTP/1.1 503) 3 headers in 120 bytes (1 switches on core 0)
    2021-09-09 11:35:48,737 - analyzerApp.utils - ERROR - Error with loading url: http://elasticsearch:9200/_cluster/health
    2021-09-09 11:35:48,752 - analyzerApp.utils - ERROR - HTTPConnectionPool(host='elasticsearch', port=9200): Max retries exceeded with url: /_cluster/health (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f5cb82d4290>: Failed to establish a new connection: [Errno 111] Connection refused'))
    2021-09-09 11:35:48,753 - analyzerApp.esclient - ERROR - Elasticsearch is not healthy
    2021-09-09 11:35:48,753 - analyzerApp.esclient - ERROR - list indices must be integers or slices, not str

    ElasticSearch container restarting all the time:

    STATUS                                     NAMES
    Up Less than a second (health: starting) reportportal_elasticsearch_1

    Solution

    Create a directory for ElasticSearch and assign permissions with the following commands

    mkdir -p data/elasticsearch
    chmod 777 data/elasticsearch
    chgrp 1000 data/elasticsearch

    Recreate ReportPortal services.

    Problem 2. Auto-Analyser doesn't work. KeyError: 'found_test_and_methods' not found

    Problem Description

    2021-09-09 11:35:48,737 - analyzerApp.utils - ERROR - KeyError: 'found_test_and_methods' not found

    Solution

    Regenerate index in the ElasticSearch. Project settings -> Auto-Analysis -> Genetate Index

    Problem 3. Amqp connection was not established

    Problem Description

    2021-09-09 11:32:00,579 - analyzerApp - INFO - Starting waiting for AMQP connection
    2021-09-09 11:32:00,586 - analyzerApp.amqp - INFO - Try connect to amqp://rabbitmq:5672/analyzer?heartbeat=600
    2021-09-09 11:32:00,595 - analyzerApp - ERROR - Amqp connection was not established

    Solution

    RabbitMQ container is not running. Wait for status running or recreate the RabbitMQ container.

    Problem 4. Performance

    Problem Description

    Slowing down analysis or waiting for a long time fore responce.

    Analyzer logs:

    DAMN ! worker 1 (pid: 9191) died, killed by signal 9 :( trying respawn ...
    Respawned uWSGI worker 1 (new pid: 9490)

    Solution

    Increase VM stats. We recommend using the minimum memory:

    Also you can reduce the number of Analyzer processes with processing environment variable UWSGI_WORKERS: 2 (default 4), then:

    However, UWSGI_WORKERS will slow down the Analyzer.

    - + \ No newline at end of file diff --git a/issues-troubleshooting/TuningCITool/index.html b/issues-troubleshooting/TuningCITool/index.html index 9c003054f..8a3aa0731 100644 --- a/issues-troubleshooting/TuningCITool/index.html +++ b/issues-troubleshooting/TuningCITool/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    Tuning CI tool

    How to provide parameters via system variables in the CI tool (for example - Jenkins) for our continuous testing platform.

    In order to provide specific parameters (Such as attributes) for different executions that are based on the parameters loading order, you can provide them as system variables.

    To do so, follow the steps below:

    1. Open the Job configuration in Jenkins.
    1. Select the "This build is parameterized" check-box.

    2. Click the "Add Parameter" and select "Text Parameter".

    1. Define any name for the parameter and set the default value (note that attributes should have semicolon-separated values, with no spaces).
    1. Update the execution command at the "Build" section: add ReportPortal parameters using –D for a system variable parameters. For attributes it is "rp.tags":
    1. Click the "Build with Parameters" button.
    1. In the opened dialog, specify the needed parameters, using semicolons to separate values.
    1. Then Click the "Build" button.
    - + \ No newline at end of file diff --git a/log-data-in-reportportal/HowToRunYourTests/index.html b/log-data-in-reportportal/HowToRunYourTests/index.html index 94898e177..db0dae943 100644 --- a/log-data-in-reportportal/HowToRunYourTests/index.html +++ b/log-data-in-reportportal/HowToRunYourTests/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/ImplementOwnIntegration/index.html b/log-data-in-reportportal/ImplementOwnIntegration/index.html index c9b11966a..1a491f5e4 100644 --- a/log-data-in-reportportal/ImplementOwnIntegration/index.html +++ b/log-data-in-reportportal/ImplementOwnIntegration/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/ImportDataToReportPortal/index.html b/log-data-in-reportportal/ImportDataToReportPortal/index.html index 08c360774..496f9ddf9 100644 --- a/log-data-in-reportportal/ImportDataToReportPortal/index.html +++ b/log-data-in-reportportal/ImportDataToReportPortal/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Import data to ReportPortal

    Import functionality gives the opportunity to upload log files via UI. To start the import process, you should hit the 'Import' button on the Launch page (All Launches tab). In a new pop-up window 'Import Launch' you can drop files or add them by adding a link.

    ReportPortal checks file size and format first. Imported files should meet the following requirements:

    • File format is zip archive or XML file.
    • File size is up to 32Mb.
    • Timestamp format is 2022-11-17T10:15:43

    If the file format is incorrect, it is marked in red and the reason is shown in the tooltip on hovering over the file in the pop-up window. This is to prevent any incorrect files from being run through the import process.

    If all the files added are correct you may hit the 'Import' or 'Cancel' buttons:

    • The Cancel button closes the pop-up window without any operation under log files.
    • The Import button starts copying files into the RP file storage and disables the 'Import' button.

    The System will start copying files into the RP file storage if the files meet the following requirements:

    • The File format is a zip archive.
    • The File size is up to 32Mb.
    • The XML files must have the JUnit structure in the zip archive.

    The system copies valid XML files into RP file storage and marked them in green in the Import pop-up window.

    If files from the zip archive have formats other than XML, the system will skip them.

    If the XML file is not in the JUnit structure, the system will interrupt the process of copying and mark the file in red. The reason is then shown on the tooltip when hovering the file in the pop-up window.

    note

    Files that were copied earlier stay in the RP file storage

    When all of the valid log files are downloaded and processed the 'OK' button is enabled. The 'OK' button closes the Import launches pop-up window. The Zip archive is then deleted after the Import is finished or canceled.

    You can only interrupt the import in UI when files are being downloaded into the RP file storage. In this case, you should hit the 'Cancel' button (or X button in the pop-up window) and confirm the cancellation of import and then hit the 'Cancel' button again.

    Import via API

    The details about import via API you can find on the ReportPortal menu at the bottom: API -> launch controller -> Import junit xml report

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/ReportingSDK/index.html b/log-data-in-reportportal/ReportingSDK/index.html index 7c9817b06..6c588b770 100644 --- a/log-data-in-reportportal/ReportingSDK/index.html +++ b/log-data-in-reportportal/ReportingSDK/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Cucumber/index.html b/log-data-in-reportportal/test-framework-integration/Java/Cucumber/index.html index 34315fb65..6393219db 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Cucumber/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Cucumber/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    ReportPortal Cucumber Integration

    There is an agent to integrate Cucumber with ReportPortal.

    Cucumber is a popular open-source framework for behavior-driven development (BDD) which based on Gherkin language and allows developers, testers, and business stakeholders to work together and define an application's behavior.

    Compatibility matrix for cucumber agents

    Version(s) of cucumber java and cucumber junitGherkin's version(s)Link to agent's github
    1.2.52.12.2sources/cucumber1
    2.0.0 - 2.4.03.2.0 - 5.1.0sources/cucumber2
    3.0.0 - 3.0.2_sources/cucumber3
    4.4.0 - 4.8.13.2.0 - 5.1.0sources/cucumber4
    5.0.0 - 5.7.0_sources/cucumber5
    6.0.0 - 7.0.06.0.0 - 7.0.0sources/cucumber6

    Installation guide

    Examples

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/JBehave/index.html b/log-data-in-reportportal/test-framework-integration/Java/JBehave/index.html index cae11ac19..aa8c6fad6 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/JBehave/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/JBehave/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/JUnit4/index.html b/log-data-in-reportportal/test-framework-integration/Java/JUnit4/index.html index eba305611..68d9601e6 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/JUnit4/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/JUnit4/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/JUnit5/index.html b/log-data-in-reportportal/test-framework-integration/Java/JUnit5/index.html index 64e385d51..017cdf581 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/JUnit5/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/JUnit5/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/ApacheHttpComponents/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/ApacheHttpComponents/index.html index 414c9b5c1..2e91d2f78 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/ApacheHttpComponents/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/ApacheHttpComponents/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Log4J/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Log4J/index.html index 904afbe62..ae19f4ec8 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Log4J/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Log4J/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Logback/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Logback/index.html index 504ec74e7..673bff913 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Logback/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Logback/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/OkHttp3/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/OkHttp3/index.html index 000132deb..7a56beab5 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/OkHttp3/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/OkHttp3/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/RestAssured/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/RestAssured/index.html index 1f5f9515a..45db65fb0 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/RestAssured/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/RestAssured/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Selenide/index.html b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Selenide/index.html index 7f5835904..cd39f0061 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Loggers/Selenide/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Loggers/Selenide/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/SoapUI/index.html b/log-data-in-reportportal/test-framework-integration/Java/SoapUI/index.html index dbb4f3312..482773984 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/SoapUI/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/SoapUI/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/Spock/index.html b/log-data-in-reportportal/test-framework-integration/Java/Spock/index.html index a4a88dcc0..72fdfb899 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/Spock/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/Spock/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/TestNG/index.html b/log-data-in-reportportal/test-framework-integration/Java/TestNG/index.html index f30346b00..af530d13f 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/TestNG/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/TestNG/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    ReportPortal TestNG Integration

    There is an agent to integrate TestNG with ReportPortal.

    TestNG provides support for attaching custom listeners, reporters, annotation transformers and method interceptors to your tests.

    TestNG agent can handle next events:

    • Start launch
    • Finish launch
    • Start suite
    • Finish suite
    • Start test
    • Finish test
    • Start test step
    • Successful finish of test step
    • Fail of test step
    • Skip of test step
    • Start configuration (All «before» and «after» methods)
    • Fail of configuration
    • Successful finish of configuration
    • Skip configuration

    Installation guide

    Examples

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Java/index.html b/log-data-in-reportportal/test-framework-integration/Java/index.html index 9bca7574d..eca2e59f5 100644 --- a/log-data-in-reportportal/test-framework-integration/Java/index.html +++ b/log-data-in-reportportal/test-framework-integration/Java/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Java

    To integrate your Java test framework with ReportPortal, you need to create a file named reportportal.properties in your in your Java project in a source folder src/main/resources or src/test/resources (depending on where your tests are located):

    reportportal.properties

    rp.endpoint={RP_SERVER_URL}

    rp.api.key={YOUR_TOKEN}

    rp.project={YOUR_PROJECT}

    rp.launch={NAME_OF_YOUR_LAUNCH}

    Property description

    rp.endpoint - the URL for the report portal server (actual link).

    rp.api.key - an access token for Report Portal which is used for user identification. It can be found on your report portal user profile page.

    rp.project - a project code on which the agent will report test launches. Must be set to one of your assigned projects.

    rp.launch - a user-selected identifier of test launches.

    This set of properties will allow you to report your tests. And there are more properties available for fine grain tuning of integration. Details available here.

    If you need a sophisticated and full-featured integration with a test framework, you can configure it by your self.

    All agents use client-java to communicate with ReportPortal API and as common code library. Also you can use any combination of agent and logger.

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Codecept/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Codecept/index.html index 9b8d7c9ae..f465cd4fe 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Codecept/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Codecept/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/CucumberJS/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/CucumberJS/index.html index 20bf178fa..7f0e87043 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/CucumberJS/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/CucumberJS/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Cypress/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Cypress/index.html index 513735c37..08051f2b9 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Cypress/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Cypress/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Jasmine/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Jasmine/index.html index 3d15ccedd..ab9e75276 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Jasmine/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Jasmine/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Jest/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Jest/index.html index bf0189d4b..5f07df44f 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Jest/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Jest/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Mocha/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Mocha/index.html index 61ba8f603..c53381035 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Mocha/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Mocha/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Nightwatch/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Nightwatch/index.html index 064ab964b..01bc7eafc 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Nightwatch/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Nightwatch/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Playwright/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Playwright/index.html index 1c5e748e8..8263d1112 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Playwright/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Playwright/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/Postman/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/Postman/index.html index 8e88e45ce..c25d56822 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/Postman/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/Postman/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/TestCafe/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/TestCafe/index.html index 7035d3834..9959eaa43 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/TestCafe/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/TestCafe/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/WebdriverIO/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/WebdriverIO/index.html index e8d6c534e..c0f83efc2 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/WebdriverIO/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/WebdriverIO/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/JavaScript/index.html b/log-data-in-reportportal/test-framework-integration/JavaScript/index.html index ecbe9175c..d33be752e 100644 --- a/log-data-in-reportportal/test-framework-integration/JavaScript/index.html +++ b/log-data-in-reportportal/test-framework-integration/JavaScript/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/Loggers/Log4Net/index.html b/log-data-in-reportportal/test-framework-integration/Net/Loggers/Log4Net/index.html index 523f9b04a..ba43b73bd 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/Loggers/Log4Net/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/Loggers/Log4Net/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/Loggers/NLog/index.html b/log-data-in-reportportal/test-framework-integration/Net/Loggers/NLog/index.html index 75f3fb93a..c52ffe347 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/Loggers/NLog/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/Loggers/NLog/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/Loggers/Serilog/index.html b/log-data-in-reportportal/test-framework-integration/Net/Loggers/Serilog/index.html index f2b02e224..598948158 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/Loggers/Serilog/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/Loggers/Serilog/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/Loggers/TraceListener/index.html b/log-data-in-reportportal/test-framework-integration/Net/Loggers/TraceListener/index.html index 327b9c110..55082f28b 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/Loggers/TraceListener/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/Loggers/TraceListener/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/NUnit/index.html b/log-data-in-reportportal/test-framework-integration/Net/NUnit/index.html index 04f53e0f6..e9e393799 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/NUnit/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/NUnit/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/SpecFlow/index.html b/log-data-in-reportportal/test-framework-integration/Net/SpecFlow/index.html index e22b94133..260967dd3 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/SpecFlow/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/SpecFlow/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/VSTest/index.html b/log-data-in-reportportal/test-framework-integration/Net/VSTest/index.html index ca64f9b2e..20c58d9fe 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/VSTest/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/VSTest/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/index.html b/log-data-in-reportportal/test-framework-integration/Net/index.html index 769b59b11..0fd9d36db 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Net/xUnit/index.html b/log-data-in-reportportal/test-framework-integration/Net/xUnit/index.html index 4d83b4e73..247a6994a 100644 --- a/log-data-in-reportportal/test-framework-integration/Net/xUnit/index.html +++ b/log-data-in-reportportal/test-framework-integration/Net/xUnit/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    ReportPortal xUnit Integration

    There is an agent to integrate xUnit with ReportPortal.

    xUnit is a testing framework for .NET applications. The "Arrange, Act, Assert" (AAA) pattern, which is a systematic method of designing test cases, is the foundation of xUnit. The AAA pattern places emphasis on how each test should clearly distinguish between how the test environment and data are set up, how the test code is executed, and how the test result is verified (Assert).

    Installation guide

    Examples

    - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Other/index.html b/log-data-in-reportportal/test-framework-integration/Other/index.html index 5d7478847..0a214cf3b 100644 --- a/log-data-in-reportportal/test-framework-integration/Other/index.html +++ b/log-data-in-reportportal/test-framework-integration/Other/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/PHP/Behat/index.html b/log-data-in-reportportal/test-framework-integration/PHP/Behat/index.html index c26a1c163..49f9433c3 100644 --- a/log-data-in-reportportal/test-framework-integration/PHP/Behat/index.html +++ b/log-data-in-reportportal/test-framework-integration/PHP/Behat/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/PHP/Codeception/index.html b/log-data-in-reportportal/test-framework-integration/PHP/Codeception/index.html index 764a89278..04de672f1 100644 --- a/log-data-in-reportportal/test-framework-integration/PHP/Codeception/index.html +++ b/log-data-in-reportportal/test-framework-integration/PHP/Codeception/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/PHP/PHPUnit/index.html b/log-data-in-reportportal/test-framework-integration/PHP/PHPUnit/index.html index b57bf8988..6a99864d0 100644 --- a/log-data-in-reportportal/test-framework-integration/PHP/PHPUnit/index.html +++ b/log-data-in-reportportal/test-framework-integration/PHP/PHPUnit/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/PHP/index.html b/log-data-in-reportportal/test-framework-integration/PHP/index.html index 57356ad80..d386d4056 100644 --- a/log-data-in-reportportal/test-framework-integration/PHP/index.html +++ b/log-data-in-reportportal/test-framework-integration/PHP/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/RobotFramework/index.html b/log-data-in-reportportal/test-framework-integration/Python/RobotFramework/index.html index 884a62814..804774f5c 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/RobotFramework/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/RobotFramework/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/behave/index.html b/log-data-in-reportportal/test-framework-integration/Python/behave/index.html index 3b7d7bc7b..b71c76084 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/behave/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/behave/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/index.html b/log-data-in-reportportal/test-framework-integration/Python/index.html index b82d8ce82..791c84037 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/nosetests/index.html b/log-data-in-reportportal/test-framework-integration/Python/nosetests/index.html index 6c59624a8..28df12df2 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/nosetests/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/nosetests/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/Python/pytest/index.html b/log-data-in-reportportal/test-framework-integration/Python/pytest/index.html index 7ff3b5c3d..d7f3112d6 100644 --- a/log-data-in-reportportal/test-framework-integration/Python/pytest/index.html +++ b/log-data-in-reportportal/test-framework-integration/Python/pytest/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/log-data-in-reportportal/test-framework-integration/index.html b/log-data-in-reportportal/test-framework-integration/index.html index 013465ee9..af07ba5eb 100644 --- a/log-data-in-reportportal/test-framework-integration/index.html +++ b/log-data-in-reportportal/test-framework-integration/index.html @@ -12,7 +12,7 @@ - + @@ -27,7 +27,7 @@ For specific tool details, select your language and Test Framework in the sections below.

    Examples

    If you do not know anything about ReportPortal. If you just want to integrate ReportPortal with your Test Framework and view info about test case executions: a name, a status, a duration, parameters, attachments (files, screenshots, video and other), logs and others. So this section for you.

    You can review and mimic the following examples to start your integration with the ReportPortal.

    Test frameworksExamples
    Java Test Frameworkshttps://github.com/reportportal/examples-java
    JavaScript based Test Frameworkshttps://github.com/reportportal/examples-js
    .Net based Test Frameworkshttps://github.com/reportportal?q=example-net&type=&language=&sort=
    Python based Test Frameworkshttps://github.com/reportportal/examples-python
    - + \ No newline at end of file diff --git a/plugins/AzureDevOpsBTS/index.html b/plugins/AzureDevOpsBTS/index.html index 3f50df10e..60f04ba93 100644 --- a/plugins/AzureDevOpsBTS/index.html +++ b/plugins/AzureDevOpsBTS/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Azure DevOps BTS

    To install the Azure DevOps BTS plugin, see Upload plugin section.

    Integration with our centralized test automation tool can be helpful for projects which are already using Azure DevOps BTS (Bug Tracking System) as a tracking tool. This feature allows posting issues and linking/unlinking issues, getting updates on their statuses. For example, just a few clicks – and bug with detailed logs is created!

    Azure DevOps BTS integration can be configured on the global level (for all projects on the instance) or on the project level (only for one project).

    Global Azure DevOps BTS integration

    Add new global Azure DevOps BTS integration

    You might want to configure global integrations which will be applied on all projects if all projects on your instance are using the same Azure DevOps BTS projects.

    1. Log in as ADMIN.

    2. Go to Administrate > Plugins.

    3. Click on Azure DevOps plugin.

    4. Click on the “Add integration” button.

    1. Fill and Save the authorization form.

    Please, follow the steps below to get a token for Azure DevOps integration:

    You can choose predefined Azure DevOps ticket fields after you have created a connection with the Azure DevOps BTS project. These fields will be shown to you all the time when you post an issue to the Azure DevOps BTS.

    This feature also gives you the ability to choose proper issue type for newly created issues in Azure DevOps BTS.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions on the opened Configuration form:

    1. Choose issue type from the drop-down.

    2. 2.Check the fields needed and fill them in if necessary.

    3. Click on “Submit” button.

    Now team members on all your projects will be able to submit issues in Azure DevOps BTS. Options for Post Issue/Link issue are activated.

    You can add more integrations by clicking on “Add integration”.

    User can add several integrations, but with a different name to the one Azure DevOps BTS project.

    Use case:

    Situation: User wants to post to Azure DevOps BTS issues with type Issue and Task to the project NNN-MMM in Azure DevOps BTS. Is it possible? Yes!

    Solution: Add two integrations to the project NNN-MMM in Azure DevOps BTS with names e.g., “Project -1” and “Project -2”. Add to the “Project -1” issue type Issue and for “Project -2” - issue type Task. While posing issue procedure, choose integration with needed type.

    Update global Azure DevOps BTS integration

    If you need to edit Azure DevOps BTS integration authorization parameters, please perform actions:

    1. Log in as ADMIN.

    2. Go to Administrate > Plugins.

    3. Click on Azure DevOps plugin.

    4. Click on a tab with existing integration.

    5. Click on “Edit authorization” link.

    1. Change “Integration name”.

    2. Type your Azure DevOps credentials.

    3. Submit the form.

    note

    You can edit only “Integration name”. If you need other changes, please submit new integration.

    If you need to edit fields which should be posted in Azure DevOps BTS, please perform actions:

    1. Log in as ADMIN.

    2. Go to Administrate > Plugins.

    3. Click on Azure DevOps plugin.

    4. Click on the tab with existing integration.

    5. Click on “Configure” button.

    1. Choose issue type from the drop-down.

    2. Check the fields needed and fill them in if necessary.

    3. Click on “Submit” button.

    Remove global Azure DevOps BTS integration

    If you need to remove Azure DevOps BTS integration, please perform actions:

    1. Log in as ADMIN.

    2. Go to Administrate > Plugins.

    3. Click on Azure DevOps plugin.

    4. Click on the tab with existing integration.

    5. Click on “Remove integration”.

    1. Submit the action.

    Project Azure DevOps BTS integration

    Add new project Azure DevOps BTS integration

    If any project needs different Azure DevOps BTS configurations, you should unlink a project from Global configurations and add a Project configuration. It means that now when a new global integration is added to the ReportPortal, it won't be applied to the unlinked project.

    For that,

    1. Log in as an ADMIN or Project Manager.

    2. Go to Project Settings > Integrations.

    3. Click on the Azure DevOps integration panel.

    4. Click on “Unlink and setup manually” button.

    1. Fill and confirm the authorization form.
    note

    Please, have a look at Global Azure DevOps BTS integration for detailed configuration steps.

    You can choose predefined Azure DevOps ticket fields after you have created a connection with the Azure DevOps BTS project. These fields will be shown to you all the time when you post an issue to the Azure DevOps BTS.

    This feature also gives you the ability to choose proper issue type for newly created issues in Azure DevOps BTS.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions on the opened Configuration form:

    1. Choose issue type from the drop-down.

    2. Check the needed fields and fill them in if necessary.

    3. Click on “Submit” button.

    Now team members on this project will be able to submit issues in Azure DevOps BTS. Options for Post Issue/Link issue are activated.

    You can add more integrations by clicking on “Add integration” button.

    Reset to project Azure DevOps BTS Integrations

    If you want to delete project integrations with Azure DevOps BTS and link your project with global configurations, please perform actions described below:

    1. Log in as an ADMIN or Project Manager.

    2. Go to Project Settings > Integrations.

    3. Click on the Azure DevOps integration panel.

    4. Click on “Reset to global settings” button.

    5. Confirm the action.

    Post issue to Azure DevOps BTS

    Posting an issue to Azure DevOps BTS means creating a new issue in Azure DevOps BTS from ReportPortal and uploading logs and attachments from an execution.

    If you want to post a new issue to Azure DevOps BTS, you need to have a project or global integration with Azure DevOps BTS.

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator.

    2. Go to Launches.

    3. Choose a needed item.

    1. Click on the pencil icon to open “Make decision” modal.
    1. Choose “Post issue” option and then “Apply & Continue”.
    1. Fill in the “Post Issue” form with valid data and submit the form.
    1. A new issue will be posted in Azure DevOps BTS with information from ReportPortal.
    1. A label with issue ID will be added to the test item.

    Linking an issue with an issue in Azure DevOps BTS means adding a clickable link to an existing issue in Azure DevOps BTS from ReportPortal that will show a status of this issue.

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator.

    2. Go to Launches.

    3. Choose a needed item.

    1. Click on the pencil icon to open “Make decision” modal.
    1. Choose “Link issue” option and then “Apply & Continue”.
    1. Fill in the “Link issue” form with valid data and submit the form.
    1. A label with issue ID will be added to the test item.
    1. Link is redirected to this issue in Azure DevOps BTS.

    You can also unlink an issue.

    1. Click on the “remove” icon.
    1. Click “Unlink Issue”.
    1. Link to the issue in Azure DevOps BTS is removed.

    Custom issue type in Azure DevOps BTS

    You can configure any custom issue type (e.g., Bug for Adam) in Azure DevOps BTS and then choose it as predefined Azure DevOps ticket field. So, developer Adam will see on the Azure DevOps BTS all issues from ReporPortal which assigned to him.

    Follow the steps below to configure custom issue type:

    1. Log in to Azure portal.

    2. Go to Organization settings.

    1. Click on the “Process” menu item.
    1. Select three dots near the current process and create a new one.
    1. Click on the name of the just created process.
    1. Create custom issue type.
    1. Click on the project quantity and change the process for your project.
    1. Change Issue Type for Azure DevOps BTS integration on ReportPortal.
    1. Post issues to Azure DevOps BTS.

    2. Now you can see issues with custom issue type on Azure DevOps BTS.

    - + \ No newline at end of file diff --git a/plugins/EmailServer/index.html b/plugins/EmailServer/index.html index 391a5aade..34c05b32c 100644 --- a/plugins/EmailServer/index.html +++ b/plugins/EmailServer/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    E-mail server

    E-mail server plugin is available in ReportPortal on the Plugins page.

    You don't need to download . It is already available in ReportPortal on the Plugins page.

    Add E-mail server integrations

    You can integrate our centralized test automation tool with an E-mail server via SMTP protocol. With this integration, you will be able to perform such functions as:

    • invite a new user to the project
    • configure notification rules on launch finish

    Permissions:

    user with account role ADMINISTRATOR can configure E-mail integration for the whole instance or per project. User with account role PROJECT MANAGER can configure E-mail integration only on a project where he is assigned on as Project Manager.

    Global E-mail server integration

    To configure the SMTP server for the whole instance:

    1. Log in to the ReportPortal as an ADMIN user

    2. Then open the list on the right of the user's image.

    3. Click the 'Administrative' link

    4. Click the 'Plugins' from the left-hand sidebar

    5. Click on the 'Email Server' tab.

    6. Click on Add new integration

    7. The next fields should be present:

    `Host`: <host_name_of_email_server>
    `Protocol`: SMTP (predefined)
    `Default sender name`: (optional)
    `Port`: <port_number>
    `Authorization`: OFF/ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    'TLS' or 'SSL': should be checked depends on the selected port.

    Example of SMTP server configuration for Gmail email server (detailed info could be found here)

    `Host`: smtp.gmail.com
    `Protocol`: SMTP
    `Default sender name`: Report Portal
    `Port`: 465
    `Authorization`: ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    `SSL`: checkbox should be checked.

    Example of an SMTP server configuration for a Yandex email server (detailed info can be found here)

    `Host`: smtp.yandex.com
    `Protocol`: SMTP
    `Default sender name`: Report Portal
    `Port`: 465
    `Authorization`: ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    `SSL`: checkbox should be checked.
    1. Confirm data in the form

    After E-mail server integration adding, the configuration will be applied to all projects on the instance.

    Project E-mail integration

    If E-mail integration has not to be added on the project, or if Project Manager or Admin want to specified special configurations for a special project, they can configure E-mail server in the project settings.

    To configure SMTP server for one single project instance:

    1. Log in to the ReportPortal as an ADMIN or PM user
    2. Then click on the Project settings icon.
    3. Click on the Integrations tab.
    4. Click on the 'E-mail Server' tab.
    5. Click on the button "Unlink & Setup Manually"
    6. The next fields should be present:
    `Host`: <host_name_of_email_server>
    `Protocol`: SMTP (predefined)
    `Default sender name`: (optional)
    `Port`: <port_number>
    `Authorization`: OFF/ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    'TLS' or 'SSL': should be checked depends on the selected port.

    Example of SMTP server configuration for Gmail email server (detailed info could be found here)

    `Host`: smtp.gmail.com
    `Protocol`: SMTP
    `Default sender name`: Report Portal
    `Port`: 465
    `Authorization: ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    `SSL`: checkbox should be checked.

    Example of an SMTP server configuration for a Yandex email server (detailed info can be found here)

    Host: smtp.yandex.com
    `Protocol`: SMTP
    `Default sender name`: Report Portal
    `Port`: 465
    `Authorization`: ON
    `Username`: <user_email_address>
    `Password`: <user_email_password>
    `SSL`: checkbox should be checked.
    1. Confirm data in the form

    After E-mail server integration adding, the configuration will be applied to all projects on the instance.

    note

    In case you unlink your project settings from Global settings, for the chosen project

    A possibility to provide custom host in links (started from 5.4 version)

    You can make this operation via API. For that just choose an API call Integration controller - Update project integration instance, and provide a link to your host in the field ' "rpHost": "custom_link.com" ''

    PUT/v1/integration/{projectName}/{integrationId}

    {
    "enabled": true,
    "integrationParameters": {
    "protocol": "smtp",
    "rpHost": "custom_link.com",
    "authEnabled": true,
    "port": "",
    "sslEnabled": false,
    "starTlsEnabled": true,
    "host": "smtp.com",
    "username": ""
    }
    }
    - + \ No newline at end of file diff --git a/plugins/JiraCloud/index.html b/plugins/JiraCloud/index.html index c3e5005c1..a3cddd958 100644 --- a/plugins/JiraCloud/index.html +++ b/plugins/JiraCloud/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ Yes!

    Solution: Add two integrations to the project NNN-MMM in Jira with names f.e. "Project -1" and "Project -2". Add to the "Project -1" issue type Defect and for "Project -2" - issue type Task. While posing issue procedure, choose integration with needed type.

    Update global Jira Cloud integration

    If you need to edit Jira Cloud integration authorization parameters, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Cloud plugin panel

    4. Click on a tab with existing integration

    5. Click on "Edit authorization" link

    6. Change "Integration name"

    7. Submit the form

    note

    You can edit the "Integration name" only. If you need other changes, please submit new integration.

    If you need to edit fields which should be posted in Jira Cloud, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Cloud plugin panel

    4. Click on a tab with existing integration

    5. Click on "Configure" button

    6. Choose issue type from the drop-down

    7. Check the needed fields and fill them in if necessary

    8. Click on "Submit" button

    Remove global Jira Cloud integration

    If you need to remove Jira Cloud integration, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Cloud plugin panel

    4. Click on a tab with existing integration

    5. Click on "Remove integration"

    6. Submit the action

    Project JIRA Cloud integration

    Add new project Jira Cloud integration

    If any project needs different Jira Cloud configurations, you should unlink a project from Global configurations and add a project configuration. It means that now when a new global integration is added to our test automation results dashboard, it won't be applied to the unlinked project.

    For that,

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the JIRA Cloud integration panel

    4. Click on "Unlink and setup manually" button

    5. Fill and confirm the authorization form

    'Integration Name': <The name which you want to give to your integration> - should be unique
    'Link to BTS': <valid URL of bug tracking system>
    'Project key in BTS': <project key in bug tracking system>
    'Email': <user email>
    'API Token': <user API Token>

    After you have created a connection with the JIRA project, you can choose predefined JIRA ticket fields. These fields will be shown to you all the time when you post the issue in Jira Cloud.

    This feature gives you the ability to choose which type you will post a ticket.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions:

    1. Click on "Configure" button

    2. Choose issue type from the drop-down

    3. Check the needed fields and fill them in if necessary

    4. Click on "Submit" button

    Now team members on this project will be able to submit issues in Jira Cloud. Options for Post Issue / Link issue are activated.

    You can add more integrations by clicking on "Add integration" button.

    Reset to project Jira Cloud Integrations

    If you want to delete project integrations with Jira Cloud and link your project with global configurations, please perform actions described below:

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the JIRA Cloud integration panel

    4. Click on "Reset to global settings" button

    5. Confirm the action

    Post issue to Jira Cloud

    Posting an issue to Jira Cloud means to create a new issue in Jira from ReportPortal and upload logs and attachments from an execution.

    If you want to post a new issue to Jira, you need to have a project or global integration with Jira Cloud.

    Post issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Post issue" option

    6. Fill in the "Post issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Predefined fields`: fields which you choose on Project Settings/ or Plugins
    `Included data`: which data should be posted to BTS (attachments, logs, comments)
    1. Submit the form

    2. A new issue will be posted in BTS with information from ReportPortal

    3. A label with issue ID will be added to the test item

    Linking an issue with an issue in Jira Cloud means adding a clickable link to an existing issue in Jira from ReportPortal that will show a status of this issue.

    Link issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Link issue" option

    6. Fill in the "Link issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Link to issue`: a full link to the item in BTS
    `Issue ID`: information which will be displayed on the label in ReportPortal
    1. Submit the form

    2. A label with issue ID will be added to the test item

    - + \ No newline at end of file diff --git a/plugins/JiraServer/index.html b/plugins/JiraServer/index.html index 606958938..f3e782c6d 100644 --- a/plugins/JiraServer/index.html +++ b/plugins/JiraServer/index.html @@ -12,7 +12,7 @@ - + @@ -25,7 +25,7 @@ Add to the "Project -1" issue type Defect and for "Project -2" - issue type Task. While posing issue procedure, choose integration with needed type.

    Update global Jira Server integration

    If you need to edit Jira Server integration authorization parameters, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Server plugin panel

    4. Click on a tab with existing integration

    5. Click on "Edit authorization" link

    6. Change "Integration name"

    7. Type your Jira Server credentials

    8. Submit the form

    note

    You can edit the "Integration name" only. If you need other changes, please submit new integration.

    If you need to edit fields which should be posted in Jira Server, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Server plugin panel

    4. Click on a tab with existing integration

    5. Click on "Configure" button

    6. Choose issue type from the drop-down

    7. Check the needed fields and fill them in if necessary

    8. Click on "Submit" button

    Remove global Jira Server integration

    If you need to remove Jira Server integration, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on JIRA Server plugin panel

    4. Click on a tab with existing integration

    5. Click on "Remove integration"

    6. Submit the action

    Project JIRA Server integration

    Add new project Jira Server integration

    If any project needs different Jira Server configurations, you should unlink a project from Global configurations and add a project configuration. It means that now when a new global integration is added to the our centralized test automation tool, it won't be applied to the unlinked project.

    For that,

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the JIRA Server integration panel

    4. Click on "Unlink and setup manually" button

    5. Fill and confirm the authorization form

    'Integration Name': <The name which you want to give to your integration> - should be unique
    'Link to BTS': <valid URL of bug tracking system>
    'Project key in BTS': <project key in bug tracking system>
    'Authorization Type': Basic (predefined)
    'BTS Username': <JIRA user name>
    'BTS Password': <JIRA user password>

    After you have created a connection with the JIRA project, you can choose predefined JIRA ticket fields. These fields will be shown to you all the time when you post the issue in Jira.

    This feature gives you the ability to choose which type you will post a ticket.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions:

    1. Click on "Configure" button

    2. Choose issue type from the drop-down

    3. Check the needed fields and fill them in if necessary

    4. Click on "Submit" button

    Now team members on this project will be able to submit issues in Jira. Options for Post Issue / Link issue are activated.

    You can add more integrations by clicking on "Add integration" button.

    Reset to project Jira Server Integrations

    If you want to delete project integrations with Jira Server and link your project with global configurations, please perform actions described below:

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the JIRA Server integration panel

    4. Click on "Reset to global settings" button

    5. Confirm the action

    Some tricks when you create a new connection:

    1. Verify that the link to the JIRA Server system is correct. There are several possible variants are possible, for instance:
    https://jira.company.com/jira
    https://jiraeu.company.com
    1. Verify the project key in JIRA Server is correct. Please fill in the Project key field with project key-value, e.g. project ABC-DEF has key ABCDEF.

    2. Verify the username and password data. Make sure, that the login name and not the email are in the username field. In case all the data above is correct, but the error appears again, check whether the user's credentials to JIRA Server are not expired. As far as JIRA Server sends the request in HTML format, we are not able to display the real reason for the error. To check and/or resolve the issue, please do the next steps:

      • Open JIRA Server page
      • Log in to JIRA Server with domain credentials using basic authorization (i.e., fill in user's login name and password into the fields)
      • Submit the login form Screen with CAPTCHA should appear
      • Enter the symbols
      • Submit the credentials again
      • Now try to establish the connection to JIRA Server on the ReportPortal project.
    3. SSL instance of JIRA (even cloud version) can be accessed by JIRA API token, used instead of a password. After you have connected Jira and our test automation results dashboard, you can choose an issue type that you will be able to add to Jira during the “Post Issue” operation. Also, the user can add predefined fields that the user can fill.

    Post issue to Jira Server

    Posting an issue to Jira Server means to create a new issue in Jira from ReportPortal and upload logs and attachments from an execution.

    If you want to post a new issue to Jira, you need to have a project or global integration with Jira Server.

    Post issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Post issue" option

    6. Fill in the "Post issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Predefined fields`: fields which you choose on Project Settings/ or Plugins
    `Included data`: which data should be posted to BTS (attachments, logs, comments)
    `BTS username`: reporter login in Jira Server
    `BTS password`: reporter password in Jira Server
    1. Submit the form

    2. A new issue will be posted in BTS with information from ReportPortal

    3. A label with issue ID will be added to the test item

    Linking an issue with an issue in Jira Server means adding a clickable link to an existing issue in Jira from ReportPortal that will show a status of this issue.

    Link issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Link issue" option

    6. Fill in the "Link issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Link to issue`: a full link to the item in BTS
    `Issue ID`: information which will be displayed on the label in ReportPortal
    1. Submit the form

    2. A label with issue ID will be added to the test item

    - + \ No newline at end of file diff --git a/plugins/ManagePlugins/index.html b/plugins/ManagePlugins/index.html index 07c7ca9de..ba38f00f3 100644 --- a/plugins/ManagePlugins/index.html +++ b/plugins/ManagePlugins/index.html @@ -12,7 +12,7 @@ - + @@ -35,7 +35,7 @@ Pros: Project Manager or Administrator configures integrations per project, team members from different projects can not see configurations of each other.

    Use case 3:

    Situation: On ReportPortal instance there are several projects. Separate projects are added for different teams. But for one team has been added several projects. So several projects on ReportPortal have connections with one Jira (or Rally) project and several projects have a connection with different Jira (or Rally) projects. Solution: configure global integrations on the Management board, and configure project integrations for Jira (or Rally) plugin on the Project settings. Pros: Administrator configures integration once for those who need the same settings, and Project Manager or Administrator configures integrations per project, for those projects who need to limit access.

    - + \ No newline at end of file diff --git a/plugins/Rally/index.html b/plugins/Rally/index.html index b9e640273..7b1b85edd 100644 --- a/plugins/Rally/index.html +++ b/plugins/Rally/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ Yes!

    Solution: Add two integrations to the project NNN-MMM in RALLY with names f.e. "Project -1" and "Project -2". Add to the "Project -1" issue type Defect and for "Project -2" - issue type Task. While posing issue procedure, choose integration with needed type.

    Update global RALLY integration

    If you need to edit RALLY integration authorization parameters, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on RALLY plugin panel

    4. Click on a tab with existing integration

    5. Click on "Edit authorization" link

    6. Change "Integration name"

    7. Type your RALLY credentials

    8. Submit the form

    note

    You can edit only "Integration name". If you need other changes, please submit new integration.

    If you need to edit fields which should be posted in RALLY, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on RALLY plugin panel

    4. Click on a tab with existing integration

    5. Click on "Configure" button

    6. Choose issue type from the drop-down

    7. Check the needed fields and fill them in if necessary

    8. Click on "Submit" button

    Remove global RALLY integration

    If you need to remove RALLY integration, please perform actions:

    1. Log in as ADMIN

    2. Go to Administrative > Plugins

    3. Click on RALLY plugin panel

    4. Click on a tab with existing integration

    5. Click on "Remove integration"

    6. Submit the action

    Project RALLY integration

    Add new project RALLY integration

    If any project needs different RALLY configurations, you should unlink a project from Global configurations and add a project configuration. It means that now when a new global integration is added to the ReportPortal, it won't be applied to the unlinked project.

    For that,

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the RALLY integration panel

    4. Click on "Unlink and setup manually" button

    5. Fill and confirm the authorization form

    'Integration Name ': <The name which you want to give to your integration> - should be unique
    'Link to BTS': <valid URL of bug tracking system>
    'Project ID in BTS': <project ID in bug tracking system>
    'Authorization Type': Basic (predefined)
    'BTS Username': <RALLY user name>
    'BTS Password': <RALLY user password>

    After you have created a connection with the RALLY project, you can choose predefined RALLY ticket fields. These fields will be shown to you all the time when you post the issue in the RALLY.

    This feature gives you the ability to choose which type you will post a ticket with.

    To choose a needed issue type and predefined field for the chosen issue, you should perform the following actions:

    1. Click on "Configure" button

    2. Choose issue type from the drop-down

    3. Check the needed fields and fill them in if necessary

    4. Click on "Submit" button

    Now team members on this project will be able to submit issues in RALLY. Options for Post Issue / Link issue are activated.

    You can add more integrations by clicking on "Add integration" button.

    Reset to project RALLY Integrations

    If you want to delete project integrations with RALLY and link your project with global configurations, please perform actions described below:

    1. Log in as an ADMIN or Project Manager

    2. Go to Project Settings > Integrations

    3. Click on the RALLY integration panel

    4. Click on "Reset to global settings" button

    5. Confirm the action

    Post issue to Rally

    Posting an issue to Rally means to create a new issue in Rally from ReportPortal and upload logs and attachments from an execution.

    If you want to post a new issue to Rally, you need to have a project or global integration with Rally.

    Post issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Post issue" option

    6. Fill in the "Post issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Predefined fields`: fields which you choose on Project Settings/ or Plugins
    `Included data`: which data should be posted to BTS (attachments, logs, comments)
    `ApiKey`: user apikey
    1. Submit the form

    2. A new issue will be posted in BTS with information from ReportPortal

    3. A label with issue ID will be added to the test item

    Linking an issue with an issue in Rally means adding a clickable link to an existing issue in Rally from ReportPortal that will show a status of this issue.

    Link issue via Step view

    1. Log in to ReportPortal as Admin, PM, Member, Customer or Operator

    2. Go to a Step view

    3. Choose a needed item

    4. Click on "Actions" button

    5. Choose "Link issue" option

    6. Fill in the "Link issue" form with valid data

    `BTS`: if you have configured BTS integrations, you will be able to choose between them
    `Integration name`: from the drop-down, you can choose any of integrations for chosen earlier BTS
    `Link to issue`: a full link to the item in BTS
    `Issue ID`: information which will be displayed on the label in ReportPortal
    1. Submit the form

    2. A label with issue ID will be added to the test item

    - + \ No newline at end of file diff --git a/plugins/SauceLabs/index.html b/plugins/SauceLabs/index.html index a55354f67..24c862699 100644 --- a/plugins/SauceLabs/index.html +++ b/plugins/SauceLabs/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Sauce Labs

    To install the Sauce Labs plugin, see Upload plugin section.

    Add the Sauce Labs integration

    Configure the integration with Sauce Labs to watch a video of test executions in the our centralized test automation tool.

    Permissions:

    • User with account role ADMINISTRATOR can configure the integration for the whole instance or per project.
    • User with account role PROJECT MANAGER can configure the integration only on a project where they are assigned on as Project Manager.

    Global Sauce Labs integration

    To configure Sauce Labs for the whole instance:

    1. Log in to ReportPortal as an ADMIN user.

    2. Open the list on the right of the user's image.

    3. Click the 'Administrative' link.

    4. Click 'Plugins' from the left-hand sidebar.

    5. Click the 'Sauce Labs' tab.

    6. Click 'Add integration'.

    7. The following fields should be present:

      `User name`: <host_name_of_email_server>
      `Access token`: <your access token>
      `Data center`: <Europe, USA>
    8. Confirm data in the form.

    After you've added the Sauce Labs integration, you can use the Sauce Labs in ReportPortal.

    Project Sauce Labs integration

    If the plugin is configured on the global level, then all projects at this instance will use this configuration by default.

    However, you can unlink the integration from the global level and use a project level configuration instead.

    To unlink the integration, click 'Unlink & Setup Manually', then follow the on-screen instructions.

    How to use the Sauce Labs integration

    Before using this feature, you should report test results to ReportPortal with the attribute: SLID: XXXXXXXX.

    Where: SLID = Sauce Labs ID and XXXXXXXX = # of job in Sauce Labs

    The SLID: XXXXXXXX attribute links the execution in ReportPortal and a job in Sauce Labs. If a test item has attribute SLID: XXXXXXXX, and there is a global or project integration with Sauce Labs, a user will be able to view a video from Sauce Labs for the appropriate job in ReportPortal on a log view.

    - + \ No newline at end of file diff --git a/quality-gates/AssessmentOfTestResultsUsingQualityGates/index.html b/quality-gates/AssessmentOfTestResultsUsingQualityGates/index.html index b91dc7d1f..ab9ebb602 100644 --- a/quality-gates/AssessmentOfTestResultsUsingQualityGates/index.html +++ b/quality-gates/AssessmentOfTestResultsUsingQualityGates/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ Second, let's check how to send assessment results to CI/CD.

    Quality Gate Analysis

    How to run Quality Gates Manually

    By default, all launches have "N\A" status. It means that Quality Gate analysis has not been run for these launches.

    If you want to run Quality Gate analysis manually, click on the label "N/A" and click on the "Run Quality Gate" in the opened pop-up.

    How to recalculate Quality Gates

    If you want to recalculate Quality Gate status for a launch, just perform next actions:

    • click on the label with a status of a launch
    • click on the "Recalculate" in the opened pop-up

    Quality Gates can not be run for launches in progress.

    note

    If Quality Gate status has been already sent to CI/CD, a status can not be recalculated for a such launch.

    How to run Quality Gates Automatically

    You can configure Auto Quality Gate Analysis on the Project Settings. If you switch Quality Gate Analysis ON, the system will start QG analysis on the launch finish.

    Quality Gate Status and Timeout

    When a launch finishes, the system starts Quality Gate Analysis.

    First, the system checks if there Quality Gate for a launch under analysis. If there is no, such Quality Gate, the system shows error message. Second, if Quality Gates is found, the systems checks all rules in Quality Gate one by one and define a status for each rule Third, if all rules are done, the system defines the status of a whole Quality Gate.

    How is status calculated:

    StatusCalculationMeaning
    PassedAll rules in a Quality Gate have status PASSEDQuality Assessment passed, a test run matches specified quality criteria
    UndefinedIf Quality Gate does not have FAILED, IN PROGRESS rules, but at least one rule has status UndefinedQuality Assessment can not be finished ❓
    In ProgressIf Quality Gate does not have FAILED rules, but at least one rule in a Quality Gate has status IN PROGRESSQuality Assessment is in progress
    FailedAt least one rule in a Quality Gate has status FAILEDQuality Assessment failed, a test run does not match specified quality criteria

    Forth, if there is an integration with CI/CD, the system sends status to CI/CD tools to a pipeline.

    ❓ The reasons why Quality Gates can get a status Undefined:

    • For "Amount of issues" rule: if a number of To Investigate issues in the analyzed launch is more than allowable To Investigate level
    • For "New Failure": if a baseline is not found in the system

    If you get this status, you can proceed with launch analysis (or choose another baseline) and rerun Quality Gates. For that check the section ### How to recalculate Qulaity Gates.

    Timeout

    Specially for integration with CI\CD, Quality Gates has parameter Timeout. If a launch whose status should be sent to a pipeline, gets UNDEFINED status, the system uses a value from Timeout. Default Timeout equals to 2 hours. It means, that after 2 hours after launch finish, the system force recaluculats Quality Gate Status and defined status.

    Jenkins Job StatusQuality Gate StatusDescription
    SUCCESSPASSEDAll Rulles Passed
    FAILEDFAILEDAt least one rule does not pass

    If you want to choose other options for a timeout, you can do it:

    • Login ReportPortal as Project Manager or Admin
    • Open Project Settings> Quality Gates
    • Click on the pencil on the Quality Gate rule
    • Click on "Edit Details."
    • Choose needed option in a dropdown "Timeout"
    • Save a Quality Gate

    If there is no needed option in the dropdown, you can specify custom value via API.

    Quality Gate Report

    A Quality Gate report is a full report that shows information on Quality gate results. This is a table that shows:

    • all rules in a Quality Gate
    • rule status: Passed/Failed/Skipped
    • expected results
    • actual results

    All actual results are clickable in the report except New Failure. A clickable area for New failure will be available in the version 5.7. So user can drill down and investigate items, that became a reason of build failure.

    - + \ No newline at end of file diff --git a/quality-gates/DeleteQualityGates/index.html b/quality-gates/DeleteQualityGates/index.html index b7f8dc2bd..617170009 100644 --- a/quality-gates/DeleteQualityGates/index.html +++ b/quality-gates/DeleteQualityGates/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/quality-gates/FeatureOverview/index.html b/quality-gates/FeatureOverview/index.html index 9197124f7..b7afd9150 100644 --- a/quality-gates/FeatureOverview/index.html +++ b/quality-gates/FeatureOverview/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Feature overview

    Quality Gate analysis provides capabilities to speed up CI/CD pipeline by sending auto-feedback to your CI/CD tools. ReportPortal assesses the build quality and sends auto feedback to CI/CD.

    Quality Gates plugin adds to our continuous testing platform possibilities:

    • to create quality rules based on general test automation KPI: number of executed tests and executed tests, failure rate, failure of critical components, number of issues in completed tests, number of essential issues in the critical parts, new failures & new errors in the build
    • run Quality Gates analysis for build and view build report that helps to troubleshoot issues in the build
    • automatically send Quality Gates status to CI/CD.
    - + \ No newline at end of file diff --git a/quality-gates/HowToInstallQualityGates/index.html b/quality-gates/HowToInstallQualityGates/index.html index c4c502f43..92e60ea83 100644 --- a/quality-gates/HowToInstallQualityGates/index.html +++ b/quality-gates/HowToInstallQualityGates/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/quality-gates/IntegrationWithCICD/IntegrationWithGitLabCI/index.html b/quality-gates/IntegrationWithCICD/IntegrationWithGitLabCI/index.html index b2b0d3c31..436054bba 100644 --- a/quality-gates/IntegrationWithCICD/IntegrationWithGitLabCI/index.html +++ b/quality-gates/IntegrationWithCICD/IntegrationWithGitLabCI/index.html @@ -12,7 +12,7 @@ - + @@ -137,7 +137,7 @@ shell scripts and console commands. We also implemented HashiCorp Vault integration to store our test secrets securely. To provide more outlook we described how to run tests in Kotlin and Python.

    And here are the corresponding pipeline files, which we implemented:

    - + \ No newline at end of file diff --git a/quality-gates/IntegrationWithCICD/IntegrationWithJenkins/index.html b/quality-gates/IntegrationWithCICD/IntegrationWithJenkins/index.html index be5eb4cdf..e65e13414 100644 --- a/quality-gates/IntegrationWithCICD/IntegrationWithJenkins/index.html +++ b/quality-gates/IntegrationWithCICD/IntegrationWithJenkins/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    Integration with Jenkins

    Jenkins configuration

    1. Go to “Manage Jenkins” -> “Manage Plugins”.
    2. Make sure that the necessary Jenkins plugin is installed:

    a. Switch to the “Installed” tab and search for the “Webhook Step” plugin.

    b. If no results of the search:

    i. Switch to the “Available” tab;

    ii. Search for “Webhook Step”;

    iii. Install the plugin with “Download now and install after restart”.

    1. Define webhook configuration to the Jenkins job/pipeline before tests execution:
    def hook = registerWebhook();
    def encodedUrl = sh(script: "echo -n ${hook.getURL().toString()} | base64 -w 0", returnStdout: true)

    encodedUrl – this is a unique string that will be generated from the Jenkins job/pipeline and connect each reported launch with the appropriate Jenkins run from which the launch was reported.

    Put the encodedUrl variable into the test execution string at the enumeration of RP.attributes. For example(Maven build):

    Drp.attributes='k1:v1;k2:v2;rp.webhook.key:${encodedUrl}'
    1. Configure webhook waiting data from RP:

    a. Option #1

    This option allows sending the Quality Gates result status to the separate pipeline stage. It doesn’t affect the tests execution stage, and the status of that stage will be determined by the result of the Quality Gate status. Add additional pipeline stage Wait for webhook and define the particular TIMEOUT_TIME, how long Jenkins should wait for data from RP:

    stage('Wait for webhook') {
    timeout(time: params.TIMEOUT_TIME, unit: params.TIMEOUT_UNIT) {

    echo 'Waiting for RP processing...'
    data = waitForWebhook hook;
    echo "Processing finished... ${data}"

    def jsonData = readJSON text: data
    assert jsonData['status'] == 'PASSED'
    }
    }

    Parameters for TIMEOUT_TIME and TIMEOUT_UNIT can be defined like that:

    parameters {
    string(name: 'TIMEOUT_TIME', defaultValue: '30', description: '')
    string(name: 'TIMEOUT_UNIT', defaultValue: 'SECONDS', description: '')
    }

    b. Option #2

    This option should send the results from the RP to the tests run pipeline stage, and the status of that stage(tests execution) will be determined by the result of the Quality Gate status. Add next code in the pipeline stage, where tests run:

    echo 'Waiting for RP processing...'
    data = waitForWebhook hook;
    echo "Processing finished... ${data}"

    def jsonData = readJSON text: data
    assert jsonData['status'] == 'PASSED'

    If the Jenkins received a response about QualityGate status from RP, the build status should be appropriately marked:

    Jenkins Job StatusQuality Gate StatusDescription
    SUCCESSPASSEDQuality Gate is passed
    ABORTEDUNDEFINEDThe Jenkins timeout has been exceeded
    FAILEDFAILEDQuality Gate is failed
    - + \ No newline at end of file diff --git a/quality-gates/IntegrationWithCICD/index.html b/quality-gates/IntegrationWithCICD/index.html index dc8184ebb..07bc355d4 100644 --- a/quality-gates/IntegrationWithCICD/index.html +++ b/quality-gates/IntegrationWithCICD/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/quality-gates/QualityGateEdit/index.html b/quality-gates/QualityGateEdit/index.html index b17b16f5f..b8841563a 100644 --- a/quality-gates/QualityGateEdit/index.html +++ b/quality-gates/QualityGateEdit/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/quality-gates/QualityGatePurpose/index.html b/quality-gates/QualityGatePurpose/index.html index 91f5063be..c426e3f81 100644 --- a/quality-gates/QualityGatePurpose/index.html +++ b/quality-gates/QualityGatePurpose/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Quality Gate Purpose

    ReportPortal is a continuous testing platform with build-in functionality - Quality Gates.

    The primary Quality Gate purpose is to speed up a CI/CD pipeline.

    Quality Gates plugin supports the next user flow:

    • Create Quality Gate rules in ReportPortal
    • Start a test job in CI/CD with webhook
    • ReportPortal assesses launch quality using created rules
    • ReportPortal sends auto feedback to CI/CD tool with status Passed or Failed
    • Based on ReportPortal Feedback, CI/CD tool fails a build or promotes it to the next stage

    The second purpose of Quality Gate is to simplify interactions between a QA team and business stakeholders. Quality Gates provides a possibility to create business-friendly rules such as:

    • define required number of tests in a job
    • specify tests that should be executed (features, components)
    • define minimum executed tests failure rate
    • new failure of critical components
    • define a number of issues in executed tests
    • define a number of critical issues in the critical components
    • new failures & new errors in the build

    And it leads us to the third purpose of Quality Gates. It is a full-featured report on Quality Gates analysis results which helps to troubleshoot problems and fix them.

    - + \ No newline at end of file diff --git a/quality-gates/QualityRulesConfiguration/index.html b/quality-gates/QualityRulesConfiguration/index.html index 5a3222a68..dc2e3ca18 100644 --- a/quality-gates/QualityRulesConfiguration/index.html +++ b/quality-gates/QualityRulesConfiguration/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ Failure rate = items with type STEP with status FAILED / ALL items with type STEP in the analyzed launch

    You can add only 1 "All tests failure rate" rule to 1 Quality Gate.

    Failure rate in a component/feature/etc

    You can also track the failure rate of tests that belong to a feature, component, priority or others in a launch. For that, tests in the analyzed launch should have attributes (f.i. feature: Payment, or component: Payment, or priority: critical, or any others).

    Then you need to add an "amount" rule with an attribute option:

    1. Open Project Settings> Quality Gate
    2. Click on the pencil on the Quality Gate
    3. Click on the drop-down: "Add a new rule"
    4. Choose the option "Percent"
    5. Choose option "Tests with attributes"
    6. Add a % of min allowable failure rate - N%
    7. Click on the tick
    8. The rule is added to the Quality Gate

    In this case, on the finish, the system will automatically analyze a launch and compare the failure rate of tests with a specified attribute in the analyzed launch with failure rate from the rule in the Quality Gate. If the failure rate is more than specified in the rule, the system fails the rule and Quality Gate.

    note

    How a failure rate is calculated

    Failure rate for tests with a attribute = items with type STEP with status FAILED and with a specified attribut / ALL items with type STEP in the analyzed launch and with a specified attribut

    You can add several "Tests with attribute percent" rules to the Quality Gate. But it is impossible to create duplicates.

    Not passing rate in the launch or a component/feature/etc.

    You can use the "Percent rule" in several options: Failure /Not passed.

    The failure rule is described in the previous sections.

    If you choose the "Not passed" option, the system will use another calculation method.

    note

    How a notpassed rate is calculated

    Not passed rate = items with type STEP with status FAILED and SKIPPED / ALL items with type STEP in the analyzed launch

    Not passed rate for tests with a attribute = items with type STEP with status FAILED and SKIPPED and with a specified attribut / ALL items with type STEP > in the analyzed launch and with a specified attribut

    Amount of issues in the run

    Case 1: You want to track that the regression suite run should not have a critical issue or Product bugs.

    Case 2: Regression suite contains 500 tests with critical priority. You want to track that the run should not have critical issues or Product bugs (or any other) in these 500 tests.

    Amount of issues also has 2 options "All tests" and "Tests with the attribute". The purpose of the rule is to limit the number of unwanted defects in the run. With the option "All tests", you can restrict issues for all tests in the launch.

    With the option "Test with attributes", you can limit issues in the critical features, components, etc.

    Ammount of issues in the launch

    For adding this rule Project Manager or Admin should:

    1. Open Project Settings> Quality Gate
    2. Click on the pencil on the Quality Gate
    3. Click on the drop-down: "Add a new rule"
    4. Choose the option "Amount of issues"
    5. Choose the option "All tests"
    6. Choose a defect type: "Total Defect Types" or "Defect Type"
    7. Add a number of min allowable issues - N%
    8. Click on the tick
    9. The rule is added to the Quality Gate

    On the finish, the system will automatically analyze a launch and compare a number of specified defects in the analyzed launch with a issues numbers in the "amount issues" rule in the Quality Gate. If the a number of issues in the launch is more than in the rule, the system fails the rule and Quality Gate.

    note

    How a number of issues is calculated

    if in the rule specified "Total Defect type"

    A number of issues in the test run = SUM of items with defect types which belong to the Defect type group

    if in the rule specified "Defect type"

    A number of issues in the test run = number of items with specified defect types

    Ammount of issues in tests with attribute

    For this rule a user can choose an option Tests with an attribute". The logic for this rule is the same as for rule "Amount of tests with an attribute".

    Allowable level of To investigate

    When you choose a rule "Amount of issues", the system automatically adds a parameter "Allowable To investigate level" to the Quality Gate.

    What does this parameter mean?

    The purpose of the rule is a check and a guarantee that the run does not contain specified issues. But if a launch includes "To investigate", the system can not make an analysis of the system and guarantee that the forbidden problems are absent in a launch.

    For this reason, we have added the parameter "Allowable To investigate level". By default, this parameter equals 0. But you can change this parameter and set your custom value.

    For this Project Manager or Admin can edit Quality Gate:

    • Open Project Settings> Quality Gates
    • Click on the pencil on the Quality Gate
    • Click on the button "Edit Details"
    • Change value in the field "Allowable TI"
    • Click on the button "Save"

    New failures in the run

    Case 1: Regression suite has 1000 tests. In the last released version, five tests failed in a regression suite. You want to track that the regression runs on the version in development should not have new failures.

    Case 2: Regression suite contains 500 tests with critical priority. In the last released version 1 test with critical priority failed. You want to track that critical tests in the regression run on the version in development should not have new failures.

    The purpose of the rule is to block a run that has new failures compared to a chosen baseline.

    New failures also have 2 options "All tests" and "Tests with an attribute". The purpose of the rule is to block a run that has new failures compared to a chosen baseline.

    1. Open Project Settings> Quality Gate
    2. Click on the pencil on the Quality Gate
    3. Click on the drop-down: "Add a new rule."
    4. Choose the option "New failure."
    5. Choose the option "All tests"/"Test with attributes."
    6. Click on the tick
    7. The rule is added to the Quality Gate

    In this case, on the finish, the system will automatically analyze a launch and compare failed tests /or failed tests with the specified attribute in the analyzed launch with tests in the baseline. It fails a rule if the system detects a new failure in the launch or in tests with specified attributes.

    How does the rule works

    For defining test uniqueness, our continuous testing platform uses Test Case ID principles.

    note

    For now, ReportPortal can not process items with the same Test Case ID correctly.

    How to choose a Baseline for the "New failures" rule

    Default Baseline

    By default, a system will use a previous launch for comparison. For example, for "Launch A #3", the system will use "Launch A #2" as a baseline. If there is no "Launch A #2" (f.e. this launch has been deleted by retention job) in the system, the system will use "Launch A #1".

    If there is no fitting launch in the system, the "New failure" rule will get the status "Undefine".

    Customized Baseline

    If you want to choose other options for a baseline, you can do it:

    • Login ReportPortal as Project Manager or Admin
    • Open Project Settings> Quality Gates
    • Click on the pencil on the Quality Gate rule
    • Click on "Edit Details."
    • Unclick a checkbox on "Choose a previous launch as a baseline."
    • The system activates fields for baseline configuration
    CaseFileds configuration
    You want to specify a static launch that should always be usedSelect launch name and add launch number in the baseline section
    You want to specify dynamic launcgSelect launch name and check a button "Latest" ❓

    ❓ When you use "latest", the system will use the latest launch with a specified launch name, which has been run before the analyzed launch. If you want to specify a baseline, you also can add launch attributes. In this case, the system will use the latest launch with specified launch name and attributes, which have been run before the analyzed launch.

    New errors in the run

    “Unique errors” functionality with a new Quality Gates rule – New Errors – was implemented in version 5.7. This feature saves your time for searching and analyzing repeated errors in launches. “New Errors” rule will help to group errors into new and known ones and, for example, fail build if there are new error not seen previously.

    To begin using this functionality, you need to create a Quality Gate and add the “New Errors” rule. Please follow the steps below:

    1) Log in to ReportPortal as Admin/PM.

    2) Go to Project Settings.

    3) Select Quality Gates section.

    4) Click Create Quality Gate button.

    5) Enter Quality Gate Name and Analyzed Launch, then click Save button.

    note

    if you want the Quality Gate not to run for all launches, you can adjust it only for the launches with specific attributes. Click Add attribute and specify value and key, e.g., browser.

    On the example in the screenshot above Quality Gate will run for launches with name “Test” with attributes Browser Chrome, Feature Reporting, Device MacBook.

    6) Click on the Add a new rule dropdown and select New Errors.

    Click the “confirm” icon.

    note

    Please, note that “New Errors” rule can be created with “All tests” condition only.

    Before running automation tests, make sure that “Quality Gates” feature is ON.

    Now everything is ready to use.

    7) Go to automation testing tool.

    8) Run autotests.

    9) Go to ReportPortal.

    10) Open the Launches section and click the Refresh button at the top.

    11) Verify the Quality Gates' status.

    Passed - there are no failures.

    Failed - there are new errors.

    N/A - appears if the quality gate was created after a launch was finished, or there is no quality gate for this launch. If the status is Not Available, click on the “N/A” and then click “Run Quality Gate” button (+ “Refresh”).

    12) To look at the failed test results, click on the Failed status and then click on the number under Current column.

    You will be redirected to the Unique errors tab with a list of all new error logs of the launch. If you want to see known issues as well, open the All Unique Errors dropdown at the top and click the Known Errors checkbox.

    By default, a previous launch execution is used as a Baseline Launch for the Quality Gate. Besides, you can as well define any other launch by specifying its name and sequence number or select Latest for the prior run of the specified launch to be used as a baseline.

    To make these changes, click Edit Details on the Quality Gate page and uncheck the Choose a previous launch as a baseline checkbox.

    Follow the steps below depending on the preferable settings for the Baseline Launch.

    In this way you can compare analyzed launch not only with its previous execution but also with another launch.

    - + \ No newline at end of file diff --git a/quality-gates/UploadQualityGateToReportPortal/index.html b/quality-gates/UploadQualityGateToReportPortal/index.html index 513b00ac1..c12172df1 100644 --- a/quality-gates/UploadQualityGateToReportPortal/index.html +++ b/quality-gates/UploadQualityGateToReportPortal/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Upload Quality Gate to ReportPortal

    The default configuration of our continuous testing platform doesn't contain Quality Gate. For adding this feature, you need to receive a link to the .jar file from ReportPortal.

    Download the .jar file and upload it to ReportPortal. Fo that pleases perform, following actions:

    • Login ReportPortal as an Admin
    • Open Admin Page > Plugins
    • Click on the button Upload
    • Add .jar file to the modal Upload plugin
    • And click the button Upload
    • Reload page

    As soon as the plugin has been added to the ReportPortal, a new Quality Gates tab will be added to the Project Settings.

    On the All launches page, the system adds a label "N/A" to each launch. A label "N/A" means that the Quality Gates has not been run for a launch yet.

    - + \ No newline at end of file diff --git a/reportportal-configuration/ComponentsOverview/index.html b/reportportal-configuration/ComponentsOverview/index.html index 630591155..c0da624bf 100644 --- a/reportportal-configuration/ComponentsOverview/index.html +++ b/reportportal-configuration/ComponentsOverview/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@ below and creates internal OAuth2 token which is used by UI and agents. There are two types of tokens:
  • UI (expiring token)
  • API - non-expiring token, intended to use on agent side
  • Analyzer Service

    Keeps index of user logs per project and provides ability to perform search by that index. Used by auto-analysis functionality.
    Collects and processes the information, then sends it to Elasticsearch.

    Migrations Service

    Database migrations written in Go. Migrate reads migrations from sources and applies them in correct order to a database.

    Index Service

    The Index services handle requests that do not match any pattern of other services. It also aggregates some information/health data from other services to provide UI with that information.

    UI Service

    All statics for user interface.

    - + \ No newline at end of file diff --git a/reportportal-configuration/CreationOfProjectAndAddingUsers/index.html b/reportportal-configuration/CreationOfProjectAndAddingUsers/index.html index 309beac28..3fc708711 100644 --- a/reportportal-configuration/CreationOfProjectAndAddingUsers/index.html +++ b/reportportal-configuration/CreationOfProjectAndAddingUsers/index.html @@ -12,7 +12,7 @@ - + @@ -20,31 +20,31 @@

    Creation of project and adding users

    The main question of how you can organize your working space in ReportPortal. -Let's see two use cases which can help you to make a decision.

    Use Case 1:

    Situation: We have a small team. Everybody can see everything. We need one dashboard which shows information about the whole project.

    Solution: Create one project. Assign all users on the created project. View all types of test cases (UI, API, Unit and so on) on this project. Divide executions by custom filters. Create a dashboard with a widget based on filters.

    Pros: You have a dashboard that can combine all results needed for your team. You need to configure only one project.

    Cons: All team members can see all results, you can not configure permissions rules.

    Use Case 2:

    Situation: We have a big team with a difficult permission structure and nested streams. Only persons with granted permissions can see results of a certain stream.

    Solution: Create separate projects for different streams. Assign users to appropriate projects. Create a dashboard with a widget based on filters for each project.

    Pros: Security, only users with granted permission will have access to the data.

    Cons: You can not see a single dashboard for several dashboards.

    If you choose a strategy, it is time to create your first project.

    Permission: -Via "Administrate" section ADMINISTRATOR can create, configure, delete projects and add/invite/assign/unassign users on/to the projects.

    Create a project

    To create a project for a team:

    • Login to the ReportPortal as an ADMIN user
    • Open menu at the bottom.
    • Click the 'Administrate' link
    • Select 'Projects' from the left-hand sidebar
    • Click the 'Add New Project' button in the right top corner
    • Then enter a name of the project
    • Click the 'Add' button.

    A confirmation message in the status bar should appear.

    note

    The name of the project should contain between 3-256 symbols. +Let's see two use cases which can help you to make a decision.

    Use Case 1:

    Situation: We have a small team. Everybody can see everything. We need one dashboard which shows information about the whole project.

    Solution: Create one project. Assign all users on the created project. View all types of test cases (UI, API, Unit and so on) on this project. Divide executions by custom filters. Create a dashboard with a widget based on filters.

    Pros: You have a dashboard that can combine all results needed for your team. You need to configure only one project.

    Cons: All team members can see all results, you can not configure permissions rules.

    Use Case 2:

    Situation: We have a big team with a difficult permission structure and nested streams. Only persons with granted permissions can see results of a certain stream.

    Solution: Create separate projects for different streams. Assign users to appropriate projects. Create a dashboard with a widget based on filters for each project.

    Pros: Security, only users with granted permission will have access to the data.

    Cons: You can not see a single dashboard for several dashboards.

    If you choose a strategy, it is time to create your first project.

    Permission: +Via "Administrate" section ADMINISTRATOR can create, configure, delete projects and add/invite/assign/unassign users on/to the projects.

    Create a project

    To create a project for a team:

    • Login to the ReportPortal as an ADMIN user
    • Open menu at the bottom.
    • Click the 'Administrate' link
    • Select 'Projects' from the left-hand sidebar
    • Click the 'Add New Project' button in the right top corner
    • Then enter a name of the project
    • Click the 'Add' button.

    A confirmation message in the status bar should appear.

    note

    The name of the project should contain between 3-256 symbols. It can include Latin and numeric characters, as well as underscores and dashes. The name should be unique and cannot be changed after saving.

    An Admin can configure the project settings or leave them as the default. Project members with PROJECT_MANAGER roles are able to set up the project settings. To know how project settings could be updated, go to the ProjectConfiguration section.

    To know more about the project's management, go to "Administrate" section > "All Projects" page.

    You have a project, now add your team members to it. You can create a new user and send credentials for them - Add user or you can send them an invite link - Invite user.

    Add users to project

    Permission: -Via "Administrate" section, only ADMINISTRATOR can add users.

    To add a user, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All users" page.

    3. Click "Add User" button.

    4. Fill all fields with valid data in the "Add user" form and click on the "Add" button.

    'login': <unique_login_name>
    'Full Name': <user_full_name>
    'Email': <unique_email_address>
    'Account role': USER (by default)
    'Project Role': MEMBER (by default)
    'Password': could be entered manually (at least 6 symbols required) or generated via the link under the field.

    Example of user creation:

    Enter the user's login: Demo
    Enter the user's full name: Demo user
    Enter the user's email: demo_user@example.com
    'Account role': USER (by default)
    'Project Role': MEMBER (by default)
    Add password: 1q2w3e
    note

    This is the only place in the system where an Administrator can be created +Via "Administrate" section, only ADMINISTRATOR can add users.

    To add a user, perform the following steps:

    1. Login into ReportPortal instance as Administrator.
    2. Navigate to the "Administrate" section -> "All users" page.
    3. Click "Add User" button.
    4. Fill all fields with valid data in the "Add user" form and click on the "Add" button.
    'login': <unique_login_name>
    'Full Name': <user_full_name>
    'Email': <unique_email_address>
    'Account role': USER (by default)
    'Project Role': MEMBER (by default)
    'Password': could be entered manually (at least 6 symbols required) or generated via the link under the field.

    Example of user creation:

    Enter the user's login: Demo
    Enter the user's full name: Demo user
    Enter the user's email: demo_user@example.com
    'Account role': USER (by default)
    'Project Role': MEMBER (by default)
    Add password: 1q2w3e
    note

    This is the only place in the system where an Administrator can be created from. "Project role" is disabled, if "Administrator" value has been selected in the "Account role" field. The "ProjectRole" parameter is not specified for -Administrator, the Administrator has full privileges on the project.

    Submit the form.

    A confirmation message in the status bar should appear.

    The notification email letter is sent to the email address of the new user.

    note

    Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.

    By default, the system creates a personal project for new users. All new users which have been added to the ReportPortal will have a personal project along with the project where they have been assigned on. The user will be assigned to "Personal Project" with the PROJECT MANAGER project role.

    note

    If you do not need a personal project, ADMINISTRATOR can delete it. This project will be removed from the instance. But if the user is unassigned from all projects in the system, and he/she will log in to the ReportPortal after that - the deleted personal project will be created once more time.

    If you wish to know more about adding user options, go to "Administrate" section > "All Users" page.

    Invite a user to a project

    Permission: -Via Administrate section, only ADMINISTRATOR can invite users. -Via Project Space, ADMINISTRATOR and PROJECT MANAGER can invite users.

    To invite a user on the "All Users" page, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All users" page.

    3. Click on the "Invite User" button.

    4. Fill all fields with valid data in the "Invite user" form and click on the "Invite" button. - The invitation +Administrator, the Administrator has full privileges on the project.

    Submit the form.

    A confirmation message in the status bar should appear.

    The notification email letter is sent to the email address of the new user.

    note

    Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.

    By default, the system creates a personal project for new users. All new users which have been added to the ReportPortal will have a personal project along with the project where they have been assigned on. The user will be assigned to "Personal Project" with the PROJECT MANAGER project role.

    note

    If you do not need a personal project, ADMINISTRATOR can delete it. This project will be removed from the instance. But if the user is unassigned from all projects in the system, and he/she will log in to the ReportPortal after that - the deleted personal project will be created once more time.

    If you wish to know more about adding user options, go to "Administrate" section > "All Users" page.

    Invite a user to a project

    Permission: +Via Administrate section, only ADMINISTRATOR can invite users. +Via Project Space, ADMINISTRATOR and PROJECT MANAGER can invite users.

    To invite a user on the "All Users" page, perform the following steps:

    1. Login into ReportPortal instance as Administrator.
    2. Navigate to the "Administrate" section -> "All users" page.
    3. Click on the "Invite User" button.
    4. Fill all fields with valid data in the "Invite user" form and click on the "Invite" button. - The invitation has been sent. You can copy the link to the invitation from the "Link to -invitation" field.

    5. The user will receive an email with the link to the invitation. Registration +invitation" field.

    6. The user will receive an email with the link to the invitation. Registration link will be active until the user registers in the system by this reference, -but not more than 24 hours. When the user clicks the link, he/she will see a registration form.

    7. The user needs to fill in the registration form and click the "Register" button to complete the registration. +but not more than 24 hours. When the user clicks the link, he/she will see a registration form.

    8. The user needs to fill in the registration form and click the "Register" button to complete the registration. The user will be assigned to the project that was specified by you during the invitation, -and to "Personal Project" with the PROJECT MANAGER project role.

    Assign user to the project

    Permission: -Via "Administrate" section, only ADMINISTRATOR can assign users. -Via Project Space ADMINISTRATOR and PROJECT MANAGER can assign users.

    Perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Users" page.

    3. Find a user and click "+ Assign to project" button.

    4. Fill the name of project.

    5. Select a project role.

    6. Click on the "Tick" button. - The user will be assigned to the project.

    Edit project role

    Permission: -Via "Administrate" section, only ADMINISTRATOR can edit the project role. -Via Project Space ADMINISTRATOR and PROJECT MANAGER can edit the project role.

    To edit the project role, perform the following steps:

    1. Login into ReportPortal instance as Administrator.

    2. Navigate to the "Administrate" section -> "All Users" page.

    3. Find a user and their project in the "Projects and roles" column.

    4. Click on the name of project.

    5. Select a new value from the "Project Role" drop-down.

    6. Click on the "Tick" icon.

    Unassign user from the project

    Permission: -Via "Administrate" section, only ADMINISTRATOR can unassign users. -Via Project Space ADMINISTRATOR and PROJECT MANAGER can unassign users.

    note

    Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.

    Depending on the project needs the assignment could be removed. -To unassign the assignment for the user on the project, perform the following steps:

    1. Navigate to the "Administrate" section -> "All Users" page.

    2. Find a user and their project in the "Projects and roles" column.

    3. Click on the name of project.

    4. Click on "Cross" icon near the needed project.

    5. Confirm the action. - The user will be unassigned from the current project but will stay in the system.

    note

    Users can not be unassign from their own personal projects.

    - +and to "Personal Project" with the PROJECT MANAGER project role.

    Assign user to the project

    Permission: +Via "Administrate" section, only ADMINISTRATOR can assign users. +Via Project Space ADMINISTRATOR and PROJECT MANAGER can assign users.

    Perform the following steps:

    1. Login into ReportPortal instance as Administrator.
    2. Navigate to the "Administrate" section -> "All Users" page.
    3. Find a user and click "+ Assign to project" button.
    4. Fill the name of project.
    5. Select a project role.
    6. Click on the "Tick" button. - The user will be assigned to the project.

    Edit project role

    Permission: +Via "Administrate" section, only ADMINISTRATOR can edit the project role. +Via Project Space ADMINISTRATOR and PROJECT MANAGER can edit the project role.

    To edit the project role, perform the following steps:

    1. Login into ReportPortal instance as Administrator.
    2. Navigate to the "Administrate" section -> "All Users" page.
    3. Find a user and their project in the "Projects and roles" column.
    4. Click on the name of project.
    5. Select a new value from the "Project Role" drop-down.
    6. Click on the "Tick" icon.

    Unassign user from the project

    Permission: +Via "Administrate" section, only ADMINISTRATOR can unassign users. +Via Project Space ADMINISTRATOR and PROJECT MANAGER can unassign users.

    note

    Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.

    Depending on the project needs the assignment could be removed. +To unassign the assignment for the user on the project, perform the following steps:

    1. Navigate to the "Administrate" section -> "All Users" page.
    2. Find a user and their project in the "Projects and roles" column.
    3. Click on the name of project.
    4. Click on "Cross" icon near the needed project.
    5. Confirm the action. - The user will be unassigned from the current project but will stay in the system.
    note

    Users can not be unassign from their own personal projects.

    + \ No newline at end of file diff --git a/reportportal-configuration/HowToGetAnAccessTokenInReportPortal/index.html b/reportportal-configuration/HowToGetAnAccessTokenInReportPortal/index.html index 3fd224335..89808637a 100644 --- a/reportportal-configuration/HowToGetAnAccessTokenInReportPortal/index.html +++ b/reportportal-configuration/HowToGetAnAccessTokenInReportPortal/index.html @@ -12,16 +12,16 @@ - +
    -

    How to get an access token in ReportPortal

    There are two ways to authorize in the ReportPortal API:

    1. Authorization with user’s login and password

    This is the main and recommended way to get access to ReportPortal API.

    Make the following HTTP request to get user's access token using login and password:

    POST <report_portal_url>/uat/sso/oauth/token

    BODY with parameters:
    grant_type: password
    username: <username>
    password: <password>

    Or you can use the following curl request:

    curl --header "Content-Type: application/x-www-form-urlencoded" \
    --request POST \
    --data "grant_type=password&username=<username>&password=<password>" \
    --user "ui:uiman" \
    <report_portal_url>/uat/sso/oauth/token

    Then you will receive a response with an access token:

    {
    "access_token": <access_token>,
    "token_type": "bearer",
    "expires_in": <token_lifetime_ms>,
    "refresh_token": <refresh_token>,
    ...
    }

    Now you can use “access_token” with any request to API by sending it as HTTP Authorization header:

    HTTP Header:
    Authorization: Bearer <access_token>

    2. Authorization with user's API Key (for agents)

    Another method involves using the API Key found on the user's Profile page.

    The API Key is a unique token that grants access to the ReportPortal REST API.

    To use it, log in and navigate to the Profile page, then find the API Keys tab. If you've previously created a token, it now has been converted to a Legacy API Key at the moment of migration to newest version and it remains valid and operational.

    note

    It will continue to work even if you generate new API Keys.

    Thus, you can use several API keys at the same time. And revoke unused, expired or publicly exposed keys.

    To generate a new API key in the ReportPortal app, click on the "Generate API Key" button.

    You are free to assign any name to this API key, as long as it is unique and consists of 1 to 40 characters. Keep in mind that duplicate API key names are not allowed.

    The system will automatically prefix the generated API key with its assigned name for easy identification. If the API key name contains spaces or underscores, these will be replaced by hyphens in the API key prefix.

    It's crucial to understand that the API key will be visible only at the point of creation. We strongly recommend copying and securely storing it for future use, as it will be impossible to retrieve later. This practice aligns with stringent security measures and standards.

    You have the ability to create multiple API keys for various purposes, such as for automation or for integration with third-party services. However, it's important to note that all API keys generated from the user's Profile page are functionally equivalent from the permissions standpoint.

    Users can also revoke an API key at any time. Upon revocation, all related information will be removed from the database, and the revoked API key will no longer be usable.

    An API key functions similarly to a regular token. When making requests to the ReportPortal API, simply include it in the HTTP Authorization header as follows:

    HTTP Header:
    +

    How to get an access token in ReportPortal

    There are two ways to authorize in the ReportPortal API:

    1. Authorization with user’s login and password

    This is the main and recommended way to get access to ReportPortal API.

    Make the following HTTP request to get user's access token using login and password:

    POST <report_portal_url>/uat/sso/oauth/token

    BODY with parameters:
    grant_type: password
    username: <username>
    password: <password>

    Or you can use the following curl request:

    curl --header "Content-Type: application/x-www-form-urlencoded" \
    --request POST \
    --data "grant_type=password&username=<username>&password=<password>" \
    --user "ui:uiman" \
    <report_portal_url>/uat/sso/oauth/token

    Then you will receive a response with an access token:

    {
    "access_token": <access_token>,
    "token_type": "bearer",
    "expires_in": <token_lifetime_ms>,
    "refresh_token": <refresh_token>,
    ...
    }

    Now you can use “access_token” with any request to API by sending it as HTTP Authorization header:

    HTTP Header:
    Authorization: Bearer <access_token>

    2. Authorization with user's API Key (for agents)

    Another method involves using the API Key found on the user's Profile page.

    The API Key is a unique token that grants access to the ReportPortal REST API.

    To use it, log in and navigate to the Profile page, then find the API Keys tab. If you've previously created a token, it now has been converted to a Legacy API Key at the moment of migration to newest version and it remains valid and operational.

    note

    It will continue to work even if you generate new API Keys.

    Thus, you can use several API keys at the same time. And revoke unused, expired or publicly exposed keys.

    To generate a new API key in the ReportPortal app, click on the "Generate API Key" button.

    You are free to assign any name to this API key, as long as it is unique and consists of 1 to 40 characters. Keep in mind that duplicate API key names are not allowed.

    The system will automatically prefix the generated API key with its assigned name for easy identification. If the API key name contains spaces or underscores, these will be replaced by hyphens in the API key prefix.

    It's crucial to understand that the API key will be visible only at the point of creation. We strongly recommend copying and securely storing it for future use, as it will be impossible to retrieve later. This practice aligns with stringent security measures and standards.

    You have the ability to create multiple API keys for various purposes, such as for automation or for integration with third-party services. However, it's important to note that all API keys generated from the user's Profile page are functionally equivalent from the permissions standpoint.

    Users can also revoke an API key at any time. Upon revocation, all related information will be removed from the database, and the revoked API key will no longer be usable.

    An API key functions similarly to a regular token. When making requests to the ReportPortal API, simply include it in the HTTP Authorization header as follows:

    HTTP Header:
    Authorization: Bearer <access_token>

    note

    Please be aware that this type of token is specifically designed for use by ReportPortal client tools (agents). We do not recommend using it to provide direct access to API endpoints.

    - + \ No newline at end of file diff --git a/reportportal-configuration/IntegrationViaPlugin/index.html b/reportportal-configuration/IntegrationViaPlugin/index.html index f247ee28e..b8c317d33 100644 --- a/reportportal-configuration/IntegrationViaPlugin/index.html +++ b/reportportal-configuration/IntegrationViaPlugin/index.html @@ -12,16 +12,16 @@ - +
    -

    Integration via plugin

    Users can reinforce ReportPortal with adding additional integrtions with:

    If you want to integrate ReportPortal with these external systems, and you can not find a needed tab on the Project Settings, please check the section in documentation Plugins.

    Integration configurations can be added on the global level (for all projects on the instance) in the Administrate section or the project level (only for one project) on Project Settings.

    If you have another configuration than other projects have or you want to integrate only your project with an external system, you should perform the next actions:

    1. Log in to ReportPortal as PROJECT MANAGER or ADMIN

    2. Go to Project settings > Integrations

    3. Click on one of the integration panels

    4. And click the button "Unlink and setup manually"

    By this action, you unlink the current project from the global settings and configure your integration.

    note

    If you unlink project setting and ADMIN changes global settings for the whole instance, your project will use your project settings.

    To return global settings, you need to click a button "Reset to global settings". +

    Integration via plugin

    Users can reinforce ReportPortal with adding additional integrtions with:

    If you want to integrate ReportPortal with these external systems, and you can not find a needed tab on the Project Settings, please check the section in documentation Plugins.

    Integration configurations can be added on the global level (for all projects on the instance) in the Administrate section or the project level (only for one project) on Project Settings.

    If you have another configuration than other projects have or you want to integrate only your project with an external system, you should perform the next actions:

    1. Log in to ReportPortal as PROJECT MANAGER or ADMINISTRATOR
    2. Go to Project settings > Integrations
    3. Click on one of the integration panels
    4. And click the button "Unlink and setup manually"

    By this action, you unlink the current project from the global settings and configure your integration.

    note

    If you unlink project setting and ADMIN changes global settings for the whole instance, your project will use your project settings.

    To return global settings, you need to click a button "Reset to global settings". In this case, your settings will be deleted, and integration will use global settings.

    You can always reset to the global settings.

    - + \ No newline at end of file diff --git a/reportportal-configuration/ProjectConfiguration/index.html b/reportportal-configuration/ProjectConfiguration/index.html index fe7d695c2..4f956298e 100644 --- a/reportportal-configuration/ProjectConfiguration/index.html +++ b/reportportal-configuration/ProjectConfiguration/index.html @@ -12,7 +12,7 @@ - + @@ -21,34 +21,30 @@

    Project configuration

    To see the list of available projects and open a project, click the drop-down list in the top of the left menu.

    ReportPortal supports customization of the default settings.

    Permission: Users with the Administrator role can edit project settings on the project "Settings" page in Administrate section and on the Project space. -Users with the PROJECT_MANAGER role can edit the settings on the project space only. -MEMBER/ OPERATOR/ CUSTOMER can only view applied project settings.

    Project settings

    To go to the project settings page, click the "Project Settings" icon in the left menu.

    The project configuration page will be opened.

    The project settings are divided into following tabs: "General", "Integrations", "Notifications", "Defect Types", "Analyzer", "Pattern Analysis", "Demo Data" and "Quality Gates" (if you have our premium feature).

    General settings

    Our test automation results dashboard allows you to control the amount of the stored data (launches, test items, logs and attachments) by removing outdated elements using Quartz jobs. -Functionality of data removing depends on two configurations.

    The first one is API service back-end environment variables that are described in ReportPortal jobs configuration

    The second one is the "General" tab you can configure parameter of data storage in ReportPortal for this project:

    • Name – is a disabled field as the project name cannot be changed.

    • Launch inactivity timeout - this parameter specifies the scheduled time for a job to interrupt inactive launches (launches which have the status 'in progress', but there is no any items during the chosen period). There are six options:

    • 1 hour,
    • 3 hours,
    • 6 hours,
    • 12 hours,
    • 1 day,
    • 7 days.
    • Keep launches - this parameter specifies how long the system will keep old launches in the data base. There are five options:
    • 7 days,
    • 14 days,
    • 21 days,
    • 30 days,
    • 90 days.

    After this period a launch will be deleted, and you can not see it in ReportPortal.

    • Keep logs - this parameter specifies how long the system will keep old logs in launches. Related launch structures will be saved, to keep statistics. There are five options:
    • 7 days,
    • 14 days,
    • 21 days,
    • 30 days,
    • 90 days.
    • Keep attachments - this parameter specifies how long to keep binary data (screenshots, files, video, and others attachments) -in the system. There are five options:
    • 7 days,
    • 14 days,
    • 21 days,
    • 30 days,
    • 90 days.

    Integrations

    The "Integration" tab can allow the project to connect ReportPortal with external systems or rewrite global configurations for third party systems.

    For more information on this topic, please refer to Integration with external systems.

    E-mail notifications

    The "Notifications" tab provides the administrator with the ability to activate e-mail notifications on the project.

    ReportPortal provides a way to add multiple rules with specific conditions. The Notification rule should be unique per project, have a unique parameter set, and specify recipients. For Example: In case, Launch names, attributes).

    Permissions: -Users with Administrator a role can configure "Notifications" in the Administrate section. -Users with PROJECT_MANAGER roles can edit the settings on the project space only.

    To do that, perform the following steps:

    1. Login to the ReportPortal.

    2. Navigate to the Project -> Project "Settings" page.

    3. Open the "Notifications" tab and click on a button "Create new notification rule"

    4. Enter your email into the "From" field. This email will be used as a notification sender.

    5. Select recipients. To do that, start typing any symbols into the "Recipients" field. +Users with the PROJECT_MANAGER role can edit the settings on the project space only. +MEMBER/ OPERATOR/ CUSTOMER can only view applied project settings.

      Project settings

      To go to the project settings page, click the "Project Settings" icon in the left menu.

      The project configuration page will be opened.

      The project settings are divided into following tabs: "General", "Integrations", "Notifications", "Defect Types", "Analyzer", "Pattern Analysis", "Demo Data" and "Quality Gates" (if you have our premium feature).

      General settings

      Our test automation results dashboard allows you to control the amount of the stored data (launches, test items, logs and attachments) by removing outdated elements using Quartz jobs. +Functionality of data removing depends on two configurations.

      The first one is API service back-end environment variables that are described in ReportPortal jobs configuration

      The second one is the "General" tab you can configure parameter of data storage in ReportPortal for this project:

      • Name – is a disabled field as the project name cannot be changed.

      • Launch inactivity timeout - this parameter specifies the scheduled time for a job to interrupt inactive launches (launches which have the status 'in progress', but there is no any items during the chosen period). There are six options:

        • 1 hour,
        • 3 hours,
        • 6 hours,
        • 12 hours,
        • 1 day,
        • 7 days.
      • Keep launches - this parameter specifies how long the system will keep old launches in the data base. There are five options:

        • 7 days,
        • 14 days,
        • 21 days,
        • 30 days,
        • 90 days.

      After this period a launch will be deleted, and you can not see it in ReportPortal.

      • Keep logs - this parameter specifies how long the system will keep old logs in launches. Related launch structures will be saved, to keep statistics. There are five options:

        • 7 days,
        • 14 days,
        • 21 days,
        • 30 days,
        • 90 days.
      • Keep attachments - this parameter specifies how long to keep binary data (screenshots, files, video, and others attachments) +in the system. There are five options:

        • 7 days,
        • 14 days,
        • 21 days,
        • 30 days,
        • 90 days.

      Integrations

      The "Integration" tab can allow the project to connect ReportPortal with external systems or rewrite global configurations for third party systems.

      For more information on this topic, please refer to Integration with external systems.

      E-mail notifications

      The "Notifications" tab provides the administrator with the ability to activate e-mail notifications on the project.

      ReportPortal provides a way to add multiple rules with specific conditions. The Notification rule should be unique per project, have a unique parameter set, and specify recipients. For Example: In case, Launch names, attributes).

      Permissions: +Users with ADMINISTRATOR a role can configure "Notifications" in the Administrate section. +Users with PROJECT_MANAGER roles can edit the settings on the project space only.

      To do that, perform the following steps:

      1. Login to the ReportPortal.
      2. Navigate to the Project -> Project "Settings" page.
      3. Open the "Notifications" tab and click on a button "Create new notification rule"
      4. Enter your email into the "From" field. This email will be used as a notification sender.
      5. Select recipients. To do that, start typing any symbols into the "Recipients" field. You can select an item from the auto-complete tool-tip using the keyboard (use the "Up" and "Down" arrows and "Enter" button). You can also enter a custom email into the "Recipients" field. To add a custom -email, just enter the email address and press "Enter".

      6. The "Launch owner" is selected by default. Uncheck "Launch owner" to exclude -him/her from the notification.

      7. Select the "In Case" setting. To do that, select one of the following options from the "In Case" drop-down.

      8. Select launches (optional). To do that, start typing any symbols into the "Launch names" field. -You can select an item from the auto-complete tool-tip using the "Up" and "Down" arrows and clicking "Enter" on the keyboard. This is an alternate way you can add a new launch name that does not exist on the project. Several launches names can be selected; the recipients will receive notifications when each of them finishes.

      9. Then Select attributes (optional). To do that, start typing any symbols into the "Attribute key" and "Attribute value" fields. The system will suggest the results in the drop-down, after at least 1 symbol is provided. It is also possible to add a new attribute (that does not exist on the project). Several attributes can be selected at once; the corresponding recipients will receive notifications about the launches that have all the specified attributes.

      10. Switch ON Notifications

      11. The system will activate the "Email notification" option. After the launch is finished, the recipients will receive a notification via email.

      12. Add more rules, if needed. Each Notification rule should be unique.

      13. You can edit/ copy/enable/disable notification rule by clicking on the appropriate controls on the notification rule.

      note

      Users with a MEMBER/ OPERATOR/ CUSTOMER project role will not have the capability to edit the project settings, however, they do have the permissions to view them.

      tip

      For using this functionality be sure that the E-mail server is configured.

      Custom defect types

      The "Defect Types" tab allows users with permissions to create custom defect types as subtypes of default defects on the project.

      After Installation the ReportPortal by default sets-up the following defect types groups:

      To investigate - means that no investigation was performed on this defect -yet.

      Product Bug - defect was investigated and a production bug was found as a -cause for this test failure.

      Automation Bug - defect was investigated and an automation test is not -correct.

      System Issue - defect was investigated and it turns out that it is a system-level -issue, like the app, crashed and caused the test to fail.

      No Defect - defect was investigated and defined as not a defect.

      ReportPortal allows the use of existing defect types (Product Bug, Automation Bug, System Issue, No Defect, To investigate) and or to create custom ones on the project settings page.

      To create custom defect types, perform the following steps:

      1. Login into the ReportPortal.

      2. Navigate to Projects -> Project "Settings" page.

      3. Open "Defect Types" tab

      4. Click "Add Defect Type" button under any default defect type

      5. Add new defect type form will appear

      6. Enter "Defect name" and "Abbreviation", select color for defect presentation on the launches grid and widgets.

      7. Submit form. You will see an added defect type on the chart preview.

      Add more custom defects, if you need it. The system allows us to add up to ten subtypes of each default defect type.

      Now you can do bug triage and set defect types as default Product Bug/Automation Bug/System Issue/No Defect/TO investigate or custom defects. All of them will be available to select on the Defect Type editor. +email, just enter the email address and press "Enter".

    6. The "Launch owner" is selected by default. Uncheck "Launch owner" to exclude +him/her from the notification.
    7. Select the "In Case" setting. To do that, select one of the following options from the "In Case" drop-down.
    8. Select launches (optional). To do that, start typing any symbols into the "Launch names" field. +You can select an item from the auto-complete tool-tip using the "Up" and "Down" arrows and clicking "Enter" on the keyboard. This is an alternate way you can add a new launch name that does not exist on the project. Several launches names can be selected; the recipients will receive notifications when each of them finishes.
    9. Then Select attributes (optional). To do that, start typing any symbols into the "Attribute key" and "Attribute value" fields. The system will suggest the results in the drop-down, after at least 1 symbol is provided. It is also possible to add a new attribute (that does not exist on the project). Several attributes can be selected at once; the corresponding recipients will receive notifications about the launches that have all the specified attributes.
    10. Switch ON Notifications
    11. The system will activate the "Email notification" option. After the launch is finished, the recipients will receive a notification via email.
    12. Add more rules, if needed. Each Notification rule should be unique.
    13. You can edit/ copy/enable/disable notification rule by clicking on the appropriate controls on the notification rule.
    note

    Users with a MEMBER/ OPERATOR/ CUSTOMER project role will not have the capability to edit the project settings, however, they do have the permissions to view them.

    tip

    For using this functionality be sure that the E-mail server is configured.

    Custom defect types

    The "Defect Types" tab allows users with permissions to create custom defect types as subtypes of default defects on the project.

    After Installation the ReportPortal by default sets-up the following defect types groups:

    • To investigate - means that no investigation was performed on this defect yet.
    • Product Bug - defect was investigated and a production bug was found as a cause for this test failure.
    • Automation Bug - defect was investigated and an automation test is not correct.
    • System Issue - defect was investigated and it turns out that it is a system-level issue, like the app, crashed and caused the test to fail.
    • No Defect - defect was investigated and defined as not a defect.

    ReportPortal allows the use of existing defect types (Product Bug, Automation Bug, System Issue, No Defect, To investigate) and or to create custom ones on the project settings page.

    To create custom defect types, perform the following steps:

    1. Login into the ReportPortal.
    2. Navigate to Projects -> Project "Settings" page.
    3. Open "Defect Types" tab
    4. Click "Add Defect Type" button under any default defect type
    5. Add new defect type form will appear
    6. Enter "Defect name" and "Abbreviation", select color for defect presentation on the launches grid and widgets.
    7. Submit form. You will see an added defect type on the chart preview.

    Add more custom defects, if you need it. The system allows us to add up to ten subtypes of each default defect type.

    Now you can do bug triage and set defect types as default Product Bug/Automation Bug/System Issue/No Defect/TO investigate or custom defects. All of them will be available to select on the Defect Type editor. For more information refer to the Investigation of failure topic.

    note

    Default defects cannot be modified and or deleted from the system. Custom defect types can be deleted at any time.

    You can create up to 15 custom defect types for each group.

    tip

    If you have deleted a custom type from the system, all test executions with this deleted defect type get the parent type of the group in which deleted defect has belonged. Statistics updates in all launches where a deleted defect was present.
    For example, if you create a custom "Product Bug-1" as a subtype of "Product Bugs" group and investigate a few defects as "Product Bug-1", then remove "Product Bug-1" from your project, all investigated "Product Bug-1" defects will be shown as "Product Bug".

    Auto-analysis and Pattern analysis

    The "Auto-Analysis" and "Pattern analysis" tabs can allow reducing test failure analysis routine on the project.

    For more information on this topic, please refer to Analysis.

    Demo data

    The "Demo Data" tab provides a way to generate demo data on the project.

    The generated data could demonstrate how the launches, filter, and dashboard will look. On the other hand, demo data could be -modified or removed without any effect of your real objects.

    Management of users on the project

    On the "Project Members" page users with the appropriate roles can invite new members.

    Permissions:

    User with Administrator role and users with project role PROJECT_MANAGER.

    Invite user on a project

    To invite a user on the "Project Members" page, perform the following steps:

    1. Login into ReportPortal instance as with the PROJECT_MANAGER project role.

    2. Navigate to the "Project Members" page on the left menu.

    3. Click the "Invite User" tab.

    4. Enter the email address of the user in case he/she is not present in the ReportPortal database or enter his/her login name.

    5. In case the user is already available in the ReportPortal, his/her name will appear in the suggestion list. -If not, the Admin should enter the correct email address.

    6. Select an appropriate role.

    7. Then click 'Invite'.

    8. In case the user is already available in ReportPortal s/he will be assigned to the project -If not, the letter with an invitation link will be sent to the user email address.

    9. The user will receive an email with the link to the registration. -When the user clicks the link, he/she will see a registration form.

    10. The user needs to fill in the registration form and click the "Register" -button to complete the registration.

    11. The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT -MANAGER project role.

    Project role

    Every user is given a specific Project role within a specific project.

    Depends on the role, the user is able or not able to perform some actions. For more details, please see the "Permissions map".

    There are 4 possible Project roles in ReportPortal:

    • PROJECT MANAGER
    • MEMBER
    • OPERATOR
    • CUSTOMER
    note

    The administrator has all privileges on the project.

    Edit project role

    To edit the project role, perform the following steps:

    1. Login into the ReportPortal as a user with PROJECT_MANAGER project role.

    2. Navigate to the "Project Members" page on the left menu.

    3. Select a new value from the "Project Role" drop-down for the user. - The new project role will be automatically saved.

    Unassign user from the project

    Depending on the project needs the assignment could be removed. -To unassign the assignment for the user on the project, perform the following steps:

    1. Login into the ReportPortal as a user with PROJECT_MANAGER project role.

    2. Navigate to the "Project Members" page on the left menu.

    3. Find the required member.

    4. Click the 'Unassign' button for the user.

    5. Confirm the action in the popup.

    6. The user will be unassigned from the current project but will stay in the system.

    note

    Invite user, Assign/Unassign internal user to/from the project, change user's role on a project action can be done for a user +modified or removed without any effect of your real objects.

    Management of users on the project

    On the "Project Members" page users with the appropriate roles can invite new members.

    Permissions:

    User with ADMINISTRATOR role and users with project role PROJECT_MANAGER.

    Invite user on a project

    To invite a user on the "Project Members" page, perform the following steps:

    1. Login into ReportPortal instance as with the PROJECT_MANAGER project role.
    2. Navigate to the "Project Members" page on the left menu.
    3. Click the "Invite User" tab.
    4. Enter the email address of the user in case he/she is not present in the ReportPortal database or enter his/her login name.
    5. In case the user is already available in the ReportPortal, his/her name will appear in the suggestion list. +If not, the Admin should enter the correct email address.
    6. Select an appropriate role.
    7. Then click 'Invite'.
    8. In case the user is already available in ReportPortal s/he will be assigned to the project +If not, the letter with an invitation link will be sent to the user email address.
    9. The user will receive an email with the link to the registration. +When the user clicks the link, he/she will see a registration form.
    10. The user needs to fill in the registration form and click the "Register" +button to complete the registration.
    11. The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT +MANAGER project role.

    Project role

    Every user is given a specific Project role within a specific project.

    Depends on the role, the user is able or not able to perform some actions. For more details, please see the "Permissions map".

    There are 4 possible Project roles in ReportPortal:

    • PROJECT MANAGER
    • MEMBER
    • OPERATOR
    • CUSTOMER
    note

    The ADMINISTRATOR has all privileges on the project.

    Edit project role

    To edit the project role, perform the following steps:

    1. Login into the ReportPortal as a user with PROJECT_MANAGER project role.
    2. Navigate to the "Project Members" page on the left menu.
    3. Select a new value from the "Project Role" drop-down for the user. - The new project role will be automatically saved.

    Unassign user from the project

    Depending on the project needs the assignment could be removed. +To unassign the assignment for the user on the project, perform the following steps:

    1. Login into the ReportPortal as a user with PROJECT_MANAGER project role.
    2. Navigate to the "Project Members" page on the left menu.
    3. Find the required member.
    4. Click the 'Unassign' button for the user.
    5. Confirm the action in the popup.
    6. The user will be unassigned from the current project but will stay in the system.
    note

    Invite user, Assign/Unassign internal user to/from the project, change user's role on a project action can be done for a user with a similar and lower role only.

    - + \ No newline at end of file diff --git a/reportportal-configuration/ReportPortalJobsConfiguration/index.html b/reportportal-configuration/ReportPortalJobsConfiguration/index.html index c61a21610..8c5a8a0f9 100644 --- a/reportportal-configuration/ReportPortalJobsConfiguration/index.html +++ b/reportportal-configuration/ReportPortalJobsConfiguration/index.html @@ -12,21 +12,21 @@ - +
    -

    ReportPortal jobs configuration

    Currently, ReportPortal has 5 configurable jobs for data removing:

    • Clean launches
    • Clean logs
    • Clean attachments info
    • Clean attachments binaries
    • Project binary storage size recalculation

    Job execution period can be configured using environment variables, where period value should be provided as spring cron expression:

    • /30 * * * * - every 30 seconds
    • 0 /2 * * * - every 2 minutes
    • 0 0 /24 * * - every 24 hours (every day)

    Job environment variables example for docker

    Clean launches job

    Clean launches job removes launches, their test items and logs. -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON=0 /10 * * * - specifies how often job will be started (every 10 minutes)

    Clean logs job

    Clean logs job removes logs. -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON=0 /5 * * * - specifies how often job will be started (every 5 minutes)

    Clean attachments info job

    Clean attachments info job removes attachments data from main database storage and puts into temporary table to remove binaries from the file storage -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON=0 /2 * * * - specifies how often job will be started (every 2 minutes)

    Clean attachments binaries job

    Clean attachments binaries job uses data from the temporary table (filled by previous job) +

    ReportPortal jobs configuration

    Currently, ReportPortal has 5 configurable jobs for data removing:

    • Clean launches
    • Clean logs
    • Clean attachments info
    • Clean attachments binaries
    • Project binary storage size recalculation

    Job execution period can be configured using environment variables, where period value should be provided as spring cron expression:

    • */30 * * * * * - every 30 seconds
    • 0 */2 * * * * - every 2 minutes
    • 0 0 */24 * * * - every 24 hours (every day)

    Job environment variables example for docker

    Clean launches job

    Clean launches job removes launches, their test items and logs. +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON=0 */10 * * * * - specifies how often job will be started (every 10 minutes)

    Clean logs job

    Clean logs job removes logs. +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON=0 */5 * * * * - specifies how often job will be started (every 5 minutes)

    Clean attachments info job

    Clean attachments info job removes attachments data from main database storage and puts into temporary table to remove binaries from the file storage +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON=0 */2 * * * * - specifies how often job will be started (every 2 minutes)

    Clean attachments binaries job

    Clean attachments binaries job uses data from the temporary table (filled by previous job) and removes binaries from the file storage -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON=/30 * * * * - specifies how often job will be started (every 30 seconds)
    • RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSize=1000 - specifies the size of the batch to be selected from the temporary table to be removed

    Project binary storage size recalculation job

    Project binary storage size recalculation job updates allocated storage value of the project based on the existing attachments at the moment. -Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON=0 /1 * * * - specifies how often job will be started (every minute)
    - +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON=*/30 * * * * * - specifies how often job will be started (every 30 seconds)
    • RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSize=1000 - specifies the size of the batch to be selected from the temporary table to be removed

    Project binary storage size recalculation job

    Project binary storage size recalculation job updates allocated storage value of the project based on the existing attachments at the moment. +Environment variables for configuration with default values:

    • RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON=0 */1 * * * * - specifies how often job will be started (every minute)
    + \ No newline at end of file diff --git a/reportportal-configuration/authorization/ActiveDirectory/index.html b/reportportal-configuration/authorization/ActiveDirectory/index.html index 415378f06..6cc61a56f 100644 --- a/reportportal-configuration/authorization/ActiveDirectory/index.html +++ b/reportportal-configuration/authorization/ActiveDirectory/index.html @@ -12,18 +12,18 @@ - +
    -

    Active Directory

    Active Directory plugin is available in ReportPortal on the Plugins page.

    To set up access with Active Directory:

    1. Log in to the ReportPortal as an ADMIN user

    2. Then open the list on the right of the user's image.

    3. Click the 'Administrative' link

    4. Click the 'Plugins' from the left-hand sidebar

    5. Click on the'Activate Directory' tab.

    6. Click on Add new integration

    7. The next fields should be present:

    'Domain*': text
    'URL*': text
    'Base DN*': text
    'Email attribute*': text
    'Full name attribute' : text
    'Photo attribute' : text
    'UserSearchFilter' (the same as for LDAP): text

    Mandatory fields are marked with red. +

    Active Directory

    Active Directory plugin is available in ReportPortal on the Plugins page.

    To set up access with Active Directory:

    1. Log in to the ReportPortal as an ADMIN user
    2. Then open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Plugins' from the left-hand sidebar
    5. Click on the'Activate Directory' tab.
    6. Click on Add new integration
    7. The next fields should be present:
    'Domain*': text
    'URL*': text
    'Base DN*': text
    'Email attribute*': text
    'Full name attribute' : text
    'Photo attribute' : text
    'UserSearchFilter' (the same as for LDAP): text

    Mandatory fields are marked with red. Click the 'Submit' button. All users of Active Directory will have access to the ReportPortal instance.
    -For entrance to ReportPortal, the user should use their domain credentials (Login and password).

    Please find the example with configurations for Microsoft Active Directory that worked successfully provided by our user:

    Table with properties and values for LDAP Microsoft Active Directory

    PropertyValue
    Urlauth-servers.domain.org.int:3358
    Base DNOU=MAIN,DC=DOMAIN,DC=ORG,DC=INT
    Manager DNcn=Service UserBind,ou=Service Accounts,ou=Colombia,ou=America,ou=ServiceAccounts,dc=DOMAIN,dc=ORG,dc=INT
    User search filter(&(objectClass=user)(sAMAccountName={0}))
    Password encoder typeNO
    Email attributemail
    Full name attributedisplayName
    Photo attributethumbnailPhoto
    - +For entrance to ReportPortal, the user should use their domain credentials (Login and password).

    Please find the example with configurations for Microsoft Active Directory that worked successfully provided by our user:

    Table with properties and values for LDAP Microsoft Active Directory

    PropertyValue
    Urlauth-servers.domain.org.int:3358
    Base DNOU=MAIN,DC=DOMAIN,DC=ORG,DC=INT
    Manager DNcn=Service UserBind,ou=Service Accounts,ou=Colombia,ou=America,ou=ServiceAccounts,dc=DOMAIN,dc=ORG,dc=INT
    User search filter(&(objectClass=user)(sAMAccountName={0}))
    Password encoder typeNO
    Email attributemail
    Full name attributedisplayName
    Photo attributethumbnailPhoto
    + \ No newline at end of file diff --git a/reportportal-configuration/authorization/GitHub/index.html b/reportportal-configuration/authorization/GitHub/index.html index cb92d49f7..491dbfc29 100644 --- a/reportportal-configuration/authorization/GitHub/index.html +++ b/reportportal-configuration/authorization/GitHub/index.html @@ -12,20 +12,20 @@ - +
    -

    GitHub

    Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow.

    Presequences

    To enable this feature you need to register new application in Github

    Fill the following fields:

    NameValueDescription
    Application nameReport PortalJust something which allow you recognize what's this.
    Homepage URLhttps://{HOST}:{PORT}/uat/sso/userReplace with {HOST} and {PORT} with appropriate values of your instance. Naturally you can omit :{PORT} if it's default port for HTTPS protocol.
    Authorization callback URLhttps://{HOST}:{PORT}/uat/sso/login/githubAs in the previous field replace with {HOST} and {PORT} with your appropriate values.

    Once new application is created, you will have Client ID. Click on "Generate a new client secret" to get Client Secret, but do not close the window until you configure the Authorization on RP, since it will never show you the Secret again.

    ReportPortal configuration

    To setup access with GitHub auth on ReportPortal:

    1. Log in to the ReportPortal as an ADMIN user
    2. Open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Server Settings' from the left-hand sidebar
    5. Go to the 'Authorization Configuration' tab
    6. Then change the switcher position of 'Activate GitHub Authorization' to ON
    7. The Next fields should appear:
    'Client ID': <value_of_clientId>
    'Client Secret': <value_of_clientSecret>
    'Add GitHub Organization' button-link: (optional)
    note

    In case the 'Organization Name' is not added, all GitHub users will have access to the ReportPortal instance.
    +

    GitHub

    Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow.

    Presequences

    To enable this feature you need to register new application in Github

    Fill the following fields:

    NameValueDescription
    Application nameReport PortalJust something which allow you recognize what's this.
    Homepage URLhttps://{HOST}:{PORT}/uat/sso/userReplace with {HOST} and {PORT} with appropriate values of your instance. Naturally you can omit :{PORT} if it's default port for HTTPS protocol.
    Authorization callback URLhttps://{HOST}:{PORT}/uat/sso/login/githubAs in the previous field replace with {HOST} and {PORT} with your appropriate values.

    Once new application is created, you will have Client ID. Click on "Generate a new client secret" to get Client Secret, but do not close the window until you configure the Authorization on RP, since it will never show you the Secret again.

    ReportPortal configuration

    To setup access with GitHub auth on ReportPortal:

    1. Log in to the ReportPortal as an ADMIN user
    2. Open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Server Settings' from the left-hand sidebar
    5. Go to the 'Authorization Configuration' tab
    6. Then change the switcher position of 'Activate GitHub Authorization' to ON
    7. The Next fields should appear:
    'Client ID': <value_of_clientId>
    'Client Secret': <value_of_clientSecret>
    'Add GitHub Organization' button-link: (optional)
    note

    In case the 'Organization Name' is not added, all GitHub users will have access to the ReportPortal instance.
    If the 'Organization Name' is specified, only users of this organization will have an access to ReportPortal instance.
    If the Name of GitHub organization is not validated, verify that the name is correct.

    Example of GitHub auth configuration: Fill in the form:

    'Client Id': 8767988c424a0e7a2640
    'Client Secret': ef22c9f804257afaf399a2dada7c8f22dee5fd1b
    'Organization Name': reportportal

    Click on 'Submit' button. A confirmation message in status bar should be shown. A 'Login with GitHub' button will appear on login form.

    - + \ No newline at end of file diff --git a/reportportal-configuration/authorization/LDAP/index.html b/reportportal-configuration/authorization/LDAP/index.html index f4f3dcedd..33612fb12 100644 --- a/reportportal-configuration/authorization/LDAP/index.html +++ b/reportportal-configuration/authorization/LDAP/index.html @@ -12,17 +12,17 @@ - +
    -

    LDAP

    LDAP plugin is available in ReportPortal on the Plugins page.

    To set up access with LDAP:

    1. Log in to the ReportPortal as an ADMIN user

    2. Then open the list on the right of the user's image.

    3. Click the 'Administrative' link

    4. Click the 'Plugins' from the left-hand sidebar

    5. Click on the'LDAP' tab.

    6. Click on Add new integration

    7. The next fields should be present:

    'URL*': text
    'Base DN*': text
    'Manager DN': text
    'Manager password': text
    'User DN pattern': text
    'User search filter': text
    'Group search base': text
    'Group search filter': text
    'Password encoder type': text
    'Email attribute*': text
    'Full name attribute' : text
    'Photo attribute' : text

    Mandatory fields are marked with red. +

    LDAP

    LDAP plugin is available in ReportPortal on the Plugins page.

    To set up access with LDAP:

    1. Log in to the ReportPortal as an ADMIN user
    2. Then open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Plugins' from the left-hand sidebar
    5. Click on the'LDAP' tab.
    6. Click on Add new integration
    7. The next fields should be present:
    'URL*': text
    'Base DN*': text
    'Manager DN': text
    'Manager password': text
    'User DN pattern': text
    'User search filter': text
    'Group search base': text
    'Group search filter': text
    'Password encoder type': text
    'Email attribute*': text
    'Full name attribute' : text
    'Photo attribute' : text

    Mandatory fields are marked with red. Click the 'Submit' button. All users of LDAP will have access to the ReportPortal instance. For access to the ReportPortal, the user should use their domain credentials (Login and password).

    - + \ No newline at end of file diff --git a/reportportal-configuration/authorization/SAMLProvider/AzureSAML/index.html b/reportportal-configuration/authorization/SAMLProvider/AzureSAML/index.html index 842c5c1cd..8c3f45f2b 100644 --- a/reportportal-configuration/authorization/SAMLProvider/AzureSAML/index.html +++ b/reportportal-configuration/authorization/SAMLProvider/AzureSAML/index.html @@ -12,15 +12,35 @@ - +
    -

    Azure SAML

    SAML plugin is available in ReportPortal on the Plugins page.

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    Login to ReportPortal via Azure SAML is available starting from version 5.7 (SAML Okta was implemented in versions before 5.7).

    Azure SAML is a useful authorization method for big companies with 100+ employees, especially if this organization is already presented in Azure service. The main benefit here is no need for manual account creation. Users can log in to the ReportPortal using Azure SAML in an uncomplicated way: select login with SAML, then choose Azure, and upon login users’ data is synchronized with ReportPortal automatically.

    If your organization is using Azure SAML and some employees left, there is no need to remove their accounts from ReportPortal and from other Azure applications – just clearing their accounts in Azure will be enough.

    To configure authorization via Azure SAML we need to synchronize Azure and ReportPortal.

    Firstly, configure SAML on Azure side.

    Configure SAML on Azure side

    1. Log in to Azure portal using your organization creds.

    2. Click App Services.

    1. Click View in the Manage Azure Active Directory section.
    1. Click Manage Tenants.

    Create organization in Azure

    1. If you haven’t configured organization in Azure yet, click Create.
    note

    if you have configured organization in Azure, please, go to step 9.

    1. Select a tenant type (Azure Active Directory) and click Next: Configuration > button.
    1. Fill in the necessary fields and click Next: Review + create > button.
    1. Pass the Captcha verification and click the Create button.

    Create your application in Azure

    1. After the creation of an organization go to the Enterprise Applications section.
    1. Click New application.
    1. Click Create your own application.
    1. Enter the name of your application, choose Integrate any other application you don't find in the gallery (Non-gallery) bullet and click Create button.

    Assign users to the application in Azure

    1. Assign users (e.g., yourself) to this application. Please, follow the next screenshots:

    Configure Single sign-on on Azure

    1. Go to the Single sign-on section.
    1. Choose SAML.

    Basic SAML Configuration

    1. Configure Basic SAML Configuration settings as follows:

    Add Azure attributes

    1. Edit Attributes & Claims settings and add email, firstName and lastName attributes (default Azure attributes have ugly format). Please follow the next screenshots:

    SAML configuration is completed on Azure side after adding these attributes.

    Lastly, configure SAML on ReportPortal side.

    Configure SAML on ReportPortal side

    1. Log in to ReportPortal as Admin.

    2. Open Menu at the bottom and choose Administrate section.

    1. Select Plugins.
    1. Open SAML.
    1. Click the Add integration button.

    Synchronize Azure SAML and ReportPortal

    1. Synchronize Azure SAML and ReportPortal as follows:

    Finally, you can log in to ReportPortal using Azure SAML.

    - +

    Azure SAML

    SAML plugin is available in ReportPortal on the Plugins page.

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    Login to ReportPortal via Azure SAML is available starting from version 5.7 (SAML Okta was implemented in versions before 5.7).

    Azure SAML is a useful authorization method for big companies with 100+ employees, especially if this organization is already presented in Azure service. The main benefit here is no need for manual account creation. Users can log in to the ReportPortal using Azure SAML in an uncomplicated way: select login with SAML, then choose Azure, and upon login users’ data is synchronized with ReportPortal automatically.

    If your organization is using Azure SAML and some employees left, there is no need to remove their accounts from ReportPortal and from other Azure applications – just clearing their accounts in Azure will be enough.

    To configure authorization via Azure SAML we need to synchronize Azure and ReportPortal.

    Firstly, configure SAML on Azure side.

    Configure SAML on Azure side

    1. Log in to Azure portal using your organization creds.
    2. Click App Services. +
    3. Click View in the Manage Azure Active Directory section. +
    4. Click Manage Tenants. +

    Create organization in Azure

    1. If you haven’t configured organization in Azure yet, click Create.
      note

      if you have configured organization in Azure, please, go to step 9.

    2. Select a tenant type (Azure Active Directory) and click Next: Configuration > button. +
    3. Fill in the necessary fields and click Next: Review + create > button. +
    4. Pass the Captcha verification and click the Create button. +

    Create your application in Azure

    1. After the creation of an organization go to the Enterprise Applications section. +
    2. Click New application. +
    3. Click Create your own application. +
    4. Enter the name of your application, choose Integrate any other application you don't find in the gallery (Non-gallery) bullet and click Create button. +

    Assign users to the application in Azure

    1. Assign users (e.g., yourself) to this application. Please, follow the next screenshots: +

    Configure Single sign-on on Azure

    1. Go to the Single sign-on section. +
    2. Choose SAML. +

    Basic SAML Configuration

    1. Configure Basic SAML Configuration settings as follows: +

    Add Azure attributes

    1. Edit Attributes & Claims settings and add email, firstName and lastName attributes (default Azure attributes have ugly format). Please follow the next screenshots: +

    SAML configuration is completed on Azure side after adding these attributes.

    Lastly, configure SAML on ReportPortal side.

    Configure SAML on ReportPortal side

    1. Log in to ReportPortal as Admin.
    2. Open Menu at the bottom and choose Administrate section. +
    3. Select Plugins. +
    4. Open SAML. +
    5. Click the Add integration button. +

    Synchronize Azure SAML and ReportPortal

    1. Synchronize Azure SAML and ReportPortal as follows: +

    Finally, you can log in to ReportPortal using Azure SAML.

    + \ No newline at end of file diff --git a/reportportal-configuration/authorization/SAMLProvider/OktaSAML/index.html b/reportportal-configuration/authorization/SAMLProvider/OktaSAML/index.html index 9e312d20d..fd0fc23da 100644 --- a/reportportal-configuration/authorization/SAMLProvider/OktaSAML/index.html +++ b/reportportal-configuration/authorization/SAMLProvider/OktaSAML/index.html @@ -12,18 +12,18 @@ - +
    -

    Okta SAML

    SAML plugin is available in ReportPortal on the Plugins page.

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    To set up access with SAML:

    1. Log in to the ReportPortal as an ADMIN user

    2. Then open the list on the right of the user's image.

    3. Click the 'Administrative' link

    4. Click the 'Plugins' from the left-hand sidebar

    5. Click on the'SAML' tab.

    6. Click on Add new integration

    7. The next fields should be present:

    'Identity provider name ID*': text
    'Provider name*': text
    'Metadata URL*': URL
    'RP callback URL': URL - RP host/uat
    'Email attribute*': text
    'Name attributes mode' :
    'Last name attribute' text
    'First name attribute' text
    or
    'Full name attribute' : text

    Mandatory fields are marked with red. +

    Okta SAML

    SAML plugin is available in ReportPortal on the Plugins page.

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    To set up access with SAML:

    1. Log in to the ReportPortal as an ADMIN user
    2. Then open the list on the right of the user's image.
    3. Click the 'Administrative' link
    4. Click the 'Plugins' from the left-hand sidebar
    5. Click on the'SAML' tab.
    6. Click on Add new integration
    7. The next fields should be present:
    'Identity provider name ID*': text
    'Provider name*': text
    'Metadata URL*': URL
    'RP callback URL': URL - RP host/uat
    'Email attribute*': text
    'Name attributes mode' :
    'Last name attribute' text
    'First name attribute' text
    or
    'Full name attribute' : text

    Mandatory fields are marked with red. Click the 'Submit' button. All users of SAML will have access to the ReportPortal instance.
    Just click on the button 'Login with SAML' and choose a needed integration from the drop-down

    On Octa side you should to specify SSO url. The format for url is the next:

    https://your domain adress/uat/saml/sp/SSO/alias/report-portal-sp

    “RP callback URL” field is an optional field to provide a redirect base path right in SAML integration settings. Fill in the field in format “RP host/uat”. The format for url is the next:

    https://reportportal.com/uat

    Once you have submitted an integration with “RP callback URL”, the URL will be applied to all SAML integrations.

    - + \ No newline at end of file diff --git a/reportportal-configuration/authorization/SAMLProvider/index.html b/reportportal-configuration/authorization/SAMLProvider/index.html index 71ea850b6..6f3ae9af4 100644 --- a/reportportal-configuration/authorization/SAMLProvider/index.html +++ b/reportportal-configuration/authorization/SAMLProvider/index.html @@ -12,16 +12,16 @@ - +
    -

    SAML provider

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    This plugin allows you to configure a connection with a SAML provider.

    Integration with SAML will allow you to login into ReportPortal using SSO instead of tedious manual user creation.

    The plugin provides a mechanism to exchange information between ReportPortal and SAML provider, such as the possibility to login to ReportPortal with SAML credentials.

    SAML provider requirements

    • SAML 2.0 version
    • HTTP-POST Binding
    • URL to download SAML IdP Metadata
    • HTTPS connection for SAML Metadata
    • Support SAML attributes:
      • email
      • first name
      • last name
      • full name (instead first and last name)
    tip

    There are detailed manuals for configuration of Azure SAML and Okta SAML.

    Add integration

    ReportPortal contains the SAML Plugin by default.

    1. Go to Administration -> Plugins -> SAML

    2. Select Add integration.

    Set up connection

    Identity provider configuration

    ReportPortal SSO initial URL

    You need to provide a URL for a SAML Provider to deliver SAML data for the identity federation.

    https://<host>/uat/saml/sp/SSO/alias/report-portal-sp

    Identifier

    Set up identifier (aka Audience Restriction, aka Entity ID) for application as report.portal.sp.id. -You can specify personal Entity id when you deploy the Authorization service by environment variable RP_AUTH_SAML_ENTITYID.

    Custom attribute as claims in token

    The IDp app user profile must provide attributes like this:

    - user.email
    - user.firstName
    - user.lastName

    Also, Make sure there is a mapping created according to the values that you use in the ReportPortal SAML plugin like this:

    - user.email -> Email
    - user.firstName -> FirstName
    - user.lastName -> LastName

    ReportPortal configuration

    Identity provider name ID (Optional)

    Identity provider name ID (aka name identifier formats) controls how the users at identity providers are mapped to users at service providers.

    We support next formats:

    UNSPECIFIED - used by default

    urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

    EMAIL

    urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

    PERSISTENT

    urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

    Provider name

    Provider name associated with IDP.

    Metadata URL

    URL that provides data with information about SAML Provider.

    Email

    Attribute name from SAML metadata which contains an user email.

    <saml:Attribute Name="Email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">neuromancer@cyberspace.net</saml:AttributeValue>
    </saml:Attribute>

    ReportPortal Callback URL (Optional)

    This field provides a redirect base path.

    Once you have submitted an integration with “RP callback URL”, the URL will be applied to all SAML integrations.

    https://<host>/uat

    First name

    Attribute name from SAML metadata which contains an user first/given name.

    <saml:Attribute Name="FirstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">William</saml:AttributeValue>
    </saml:Attribute>

    Last name

    Attribute name from SAML metadata which contains an user last/family name.

    <saml:Attribute Name="LastName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">Gibson</saml:AttributeValue>
    </saml:Attribute>

    Full name

    Attribute name from SAML metadata which contains a full user name. You can use either two separate attributes for first name and last name or a combined first and last name attribute. This solely depends on your SAML provider.

    <saml:Attribute Name="FullName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">William Gibson</saml:AttributeValue>
    </saml:Attribute>
    - +

    SAML provider

    If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).

    This plugin allows you to configure a connection with a SAML provider.

    Integration with SAML will allow you to login into ReportPortal using SSO instead of tedious manual user creation.

    The plugin provides a mechanism to exchange information between ReportPortal and SAML provider, such as the possibility to login to ReportPortal with SAML credentials.

    SAML provider requirements

    • SAML 2.0 version
    • HTTP-POST Binding
    • URL to download SAML IdP Metadata
    • HTTPS connection for SAML Metadata
    • Support SAML attributes:
      • email
      • first name
      • last name
      • full name (instead first and last name)
    tip

    There are detailed manuals for configuration of Azure SAML and Okta SAML.

    Add integration

    ReportPortal contains the SAML Plugin by default.

    1. Go to Administration -> Plugins -> SAML
    2. Select Add integration.

    Set up connection

    Identity provider configuration

    ReportPortal SSO initial URL

    You need to provide a URL for a SAML Provider to deliver SAML data for the identity federation.

    https://<host>/uat/saml/sp/SSO/alias/report-portal-sp

    Identifier

    Set up identifier (aka Audience Restriction, aka Entity ID) for application as report.portal.sp.id. +You can specify personal Entity id when you deploy the Authorization service by environment variable RP_AUTH_SAML_ENTITYID.

    Custom attribute as claims in token

    The IDp app user profile must provide attributes like this:

    - user.email
    - user.firstName
    - user.lastName

    Also, Make sure there is a mapping created according to the values that you use in the ReportPortal SAML plugin like this:

    - user.email -> Email
    - user.firstName -> FirstName
    - user.lastName -> LastName

    ReportPortal configuration

    Identity provider name ID (Optional)

    Identity provider name ID (aka name identifier formats) controls how the users at identity providers are mapped to users at service providers.

    We support next formats:

    UNSPECIFIED - used by default

    urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

    EMAIL

    urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

    PERSISTENT

    urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

    Provider name - Provider name associated with IDP.

    Metadata URL - URL that provides data with information about SAML Provider.

    Email - Attribute name from SAML metadata which contains an user email.

    <saml:Attribute Name="Email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">neuromancer@cyberspace.net</saml:AttributeValue>
    </saml:Attribute>

    ReportPortal Callback URL (Optional) - This field provides a redirect base path.

    Once you have submitted an integration with “RP callback URL”, the URL will be applied to all SAML integrations.

    https://<host>/uat

    First name - Attribute name from SAML metadata which contains an user first/given name.

    <saml:Attribute Name="FirstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">William</saml:AttributeValue>
    </saml:Attribute>

    Last name - Attribute name from SAML metadata which contains an user last/family name.

    <saml:Attribute Name="LastName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">Gibson</saml:AttributeValue>
    </saml:Attribute>

    Full name - Attribute name from SAML metadata which contains a full user name. You can use either two separate attributes for first name and last name or a combined first and last name attribute. This solely depends on your SAML provider.

    <saml:Attribute Name="FullName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
    <saml:AttributeValue xsi:type="xs:string">William Gibson</saml:AttributeValue>
    </saml:Attribute>
    + \ No newline at end of file diff --git a/reportportal-configuration/authorization/index.html b/reportportal-configuration/authorization/index.html index ff4b6f1c5..8338dca01 100644 --- a/reportportal-configuration/authorization/index.html +++ b/reportportal-configuration/authorization/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/reportportal-glossary/index.html b/reportportal-glossary/index.html index e6d54625f..f4fa032fc 100644 --- a/reportportal-glossary/index.html +++ b/reportportal-glossary/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    ReportPortal Glossary

    Agent

    Agents are direct test framework integrations. If you integrate your tests with an agent then you don’t need to do anything, except adding properties and test metadata. Basically, each agent has the same naming convention: agent-{ language }-{ framework }. E.G. “agent-python-pytest”. The best way to see which agents we do have and check out the latest documentation for them is to go on ReportPortal organization page on GitHub and start searching.

    Each agent project contains a README with the latest installation instructions. Agent pages usually are being updated along with the agent code. If you found any issue with the documentation you are free to correct it with a PR or post an issue.

    Agents are complete and self-sufficient integrations, all you need is to provide correct properties and optionally test metadata (like attributes and steps).

    Client

    Clients are basically interfaces for our Rest API, like agents they have its naming convention: client-{ language }. E.G. “client-java”. And, like Agents, the best way to find the latest library version and documentation is to find it on GitHub.

    Unlike agents, Clients are not self-sufficient. They provide convenient way to call ReportPortal API, but you must do this in your code. It is also your part of responsibility which metadata you send to ReportPortal if you decided to use a Client.

    Logger

    Loggers are special type of libraries which a responsible for saving logs into ReportPortal. They can be attached to logging framework or a test tool, E.G. Selenide, to report steps and log records. Basically, you can report logs yourself with certain methods inside Clients, but Loggers do this for you.

    Here is an example of how OkHttp3 logger works:

    Like agents and clients, loggers have their own naming pattern: logger-{ language }-{ framework / tool }.

    Plugin

    Plugins are co-applications which add additional functionality to ReportPortal. We have separate examples and development guide for our users. You are free to extend our test automation results dashboard as you wish, we don’t limit or obligate our users with any clauses. ReportPortal provides some plugins for free like Jira and Rally integrations but also has closed plugins, which we provide only with our paid plans, e.g., “Quality Gates” plugin:

    Launch

    The first reporting-related word in our list. The Launch is a collection of all reported tests which were run at single test execution. Launches allows you to monitor your application-under-test state. The idea is that you take certain number of tests and test suites and run them periodically on different environments and our widgets draws you the picture of your application health from launch to launch. You are not obligated to stop adding new test reports into a launch after the launch finish, you are free to add more data. Or, for example, you can create several Launches and merge them into one. Or run your tests in a distributed way and report everything into a single Launch. The key concept here is that Launch is the biggest data point on our widgets, everything else is up to you.

    Suite

    For the convenience of locating and navigating data, you can put your tests into test suites. Features, Stories, Suites, Test Classes, Test (sic!), etc., they are all Suites from ReportPortal view, just with different names. Suites are hierarchical, to put one Suite inside another you should specify Parent Suite UUID. Also, as a limitation, child Suite and Items start time should not be earlier than Parent Suite start time due to Database limitations, please keep that in mind.

    Step

    Step is the only entity with statistics in our centralized test automation tool. Every time you report a step, ReportPortal adds 1 to test count and every time a Step fails it counts it as a test failure.

    Nested step

    Nested steps are like suites but located as child step elements. They are like containers for test logs and represented as dropdown lists inside Log View. On the screen below Nested step is the first entity.

    Log

    Logs are textual data necessary for debugging and problem solving. Our Analyzer uses them in the same way. Logs should be neat and informative, but not too much verbose. Tons of logs usually the same problem as their full absence.

    Test Case ID

    The ID which is used along with Steps. It is unique signature of tests by which we build test history. In general, you don’t need to manipulate these IDs, since every agent usually generates them with Code reference and parameters. But if you want to customize your history view this is the first point where to look. Agents usually generate Test Case IDs based on code reference and have a way to customize it.

    - + \ No newline at end of file diff --git a/reportportal-tutorial/index.html b/reportportal-tutorial/index.html index d4b2167d3..f8cbabca2 100644 --- a/reportportal-tutorial/index.html +++ b/reportportal-tutorial/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    ReportPortal Tutorial

    Overview

    The goal of this tutorial is to introduce all ReportPortal capabilities. Along the way, you'll learn how to use ReportPortal features and how to get the most out of them, as well as expert tips for using our test automation results dashboard.

    How to explore ReportPortal without installation

    One day you found ReportPortal which promises to simplify the analysis of failed tests and bring many more benefits.

    “Really? I don’t believe it”, – your first reaction.

    Do you just want to see how ReportPortal works to make sure you need it? It is easy! Just visit our Demo instance and use default credentials for login:

    login: default

    password: 1q2w3e

    Or you can use a button "Login with GitHub" to login.

    How to deploy ReportPortal instance

    You tried the demo session. You are impressed with ReportPortal features / possibilities and decided to install a ReportPortal. Excellent! Visit our detailed documentation on how deploy ReportPortal:

    Please also check the technical requirements for your system

    If you don’t want to deal with technical details, we will be happy to assist you.

    How to invite Team to ReportPortal

    Finally, you logged into ReportPortal. And you see just empty tabs... Looks confusing for the first step. What can we do to get started?

    Let’s start by inviting your team members. You can also do it as a final step, but it would be nice to investigate ReportPortal together.

    In order to add other users to ReportPortal you can send invitations via email. To make sure that the Email service is configured, please follow the next steps (as an admin user): E-mail server configuration. Once emailing is configured, you can either invite new users or create a new user in the project.

    After this step you will have emailing capabilities enabled, and several more users invited to ReportPortal.

    How to generate first data in ReportPortal

    The main section for work with ReportPortal is Launches tab in the left menu. But Launches table is empty and it’s hard to understand what ReportPortal can do and what to do next.

    Generate demo data feature can help you with this, by generating a set of demo launches (test executions), filters and dashboards.

    Once generated, you will see 5 launches (each Launch is equivalent to a testing session, or testing execution, or one Jenkins job). On the Filters tab you will find 1 filter. And Dashboards will have a Demo dashboard with visualizations/widgets built on top of the data from launches.

    Let’s understand how ReportPortal works based on demo data, and later we can return to the upload of your actual data from your testing frameworks. You can navigate to this section right now if you wish.

    How to triage test failures with ReportPortal

    So far you have Demo launches in ReportPortal. You see the list of test executions on the Launches page with Total/Passed/Failed/Skipped numbers of test cases, and some of the issues are already sorted: Product Bug, Auto Bug, System Issue. But some issues required the attention of engineers, and they are marked with the “To Investigate” flag.

    The next step and the main goal for QA engineers is defect triage. This means opening each test case, identifying the root of the failure reason, and categorizing/associating it with a particular defect type. We call this action “Make decision”.

    Based on test results, you can make decisions on further steps to improve your product. For example, you can arrange a call with a Development Team Leader to discuss bug fixing, if you have a lot of Product Bugs.

    In case of a large number of System Issues, you can ask a DevOps engineer to fix the environment or to review the testing infrastructure. Thus, you won‘t waste your team's effort and time by receiving failed reports due to an inconsistent environment.

    If you have a lot of Automation Bugs, put more effort into the test cases stabilization, and convert test automation (flaky) fails into valuable test cases, which will test your application for real.

    Moreover, you can post and link issues in just a few clicks using Bug Tracking System plugins:

    Jira Server

    Jira Cloud

    Azure DevOps

    Rally

    How to filter test executions in ReportPortal

    To distinguish executions by type and focus only on required or related to your team today, you can use filters. Filters have “tab” capabilities, so you can easily navigate between different selections. You can filter by different criteria like launch name, description, number of failed or passed test cases, attributes, etc.

    How to add more attributes for filtering launches in ReportPortal

    There is also a possibility to filter by attributes. You can find an example of setting attributes in your profile. You can include them in the parameters of automation, then additional attributes will appear under the Launch name, and you can filter test executions by these attributes as well.

    How to visualize test results in ReportPortal

    So, you’ve separated your own test data from others. Now let’s visualize our test results. Navigate to the Dashboards tab and open the Demo Dashboard. Here you can see basic visualizations that will help you understand the state of the product.

    You can also create new Dashboards. Since managers love charts, let’s practice building some self-updated charts! And let them see the actual statistics and value of your test automation along with you, at any given moment of the time, since dashboards and widgets will be updated in real-time. The best widget to start from is Investigated percentage of launches which shows how well the QA team analyzes failures.

    Once QA team categorized all issues, we can understand why automation tests fail. Create Launch statistics chart widget for that. It shows the reasons of failures, for example, broken environment, outdated tests, product bugs.

    The next step can be creating the Overall statistics chart to define the Total test cases number and how many of them are Passed/Failed/Skipped. This widget can be applied for all launches or for the latest launches only.

    We've reviewed basic widgets. How can I get some insights from launches? Our suggestion is to create a Flaky test cases table to find tests that often change status from passed to failed in different launches. These unstable tests do not give any confidence. The widget allows you to identify them so that you can pay special attention to them and fix them faster.

    Next, you might want to understand how long it takes to pass each test case. Most time-consuming test cases widget helps to find the longest scenarios.

    How to use ML power of ReportPortal

    ML suggestions feature prompts similar tests and defect types they have. In this way we don’t waste time re-reading the log but use ML hints instead.

    ML suggestions analysis is running every time you enter "Make decision" editor. ML suggestions are executed for all test items no matter what defect type they currently have.

    How to use Pattern Analysis

    Pattern Analysis feature helps to find static repeating patterns within automation. For example, you know that a 404 error in your application might be caused by a specific product bug. Create the rule with a problem phrase, launch a test run, and Pattern Analysis will find all failed items which have known patterns in error logs. This allows you to draw a quick conclusion.

    How to run Auto-Analysis in ReportPortal

    ReportPortal has Auto-Analysis feature which makes it possible for the application to independently check and perform some of the routine tasks.

    When you have test executions on the Launches page, you might need to analyze them automatically using ML. You can switch ON Auto-Analysis in the settings – then it will start as soon as any launch finishes. Auto-Analysis takes a part of your routine work and defines the reason for the test item failure based on the previous launches and sets: a defect type; a link to BTS (in case it exists); comment (in case it exists). As a result, you save time, and you can create new test cases instead of analyzing test results.

    You can run Auto-Analysis manually as well.

    When the test item is analyzed by ReportPortal, a label “AA” is set on the test item on a Step Level.

    How to see the historical trend of the causes of falls

    And now let's build a more detailed “Launch statistics chart” widget with the historical changes in tests results. So, I can see how the results of my launches have changed over time.

    Use case

    Goal: Create a widget to show historical changes in Passed/Failed test cases in my API tests.

    Follow the instructions below to create this Launch statistics chart.

    Here you can see the historical distribution of your test results: there are Passed or Failed tests.

    Instead of just Failed tests, you can see the dynamics of the total number of Product bugs, Automation bugs, System issues and No Defect.

    In this way, you see the historical trend of the causes of falls.

    How to make automated test results part of my pipeline

    ReportPortal supports Continuous Testing with built-in functionality – Quality Gates (premium feature). Quality Gate is a set of predefined criteria that should be met in order launch run to be considered as successful.

    Firstly, navigate to Project settings and create a Quality Gate with the rules which will be applied to a specific launch that matches the conditions.

    Finally, configure integration with CI/CD to send results to the pipeline.

    How to use nested steps and attributes in ReportPortal

    Usually, you see the results of automation as a carpet of error logs, and only an automation engineer can understand what is happening inside. Adding nested steps (Java, Python) allows applying a one-time change in the test code to make a logical grouping of steps and make these error logs more readable for the whole team.

    You can also use attributes on any level (launch/suite/test/step) to provide more contextual information.

    How to evaluate product health with ReportPortal

    You can create a “Component health check” widget based on attributes to understand which components do not work well, and which areas we need to pay more attention to.

    Use case 1

    Goal: define which features are affected by failed scenarios.

    You can see scenarios on the first screenshot.

    Select failed scenario to see which features were affected.

    Finally, let’s see what is the priority of the failed test cases.

    Use case 2

    Goal: define the priority of failed test cases.

    You can see that failures occurred in test cases with critical priority.

    Select Critical to understand which operating system is having problems.

    Next, select Android to see the list of features that need more attention.

    Use case 3

    Goal: define state of test cases on mobile devices.

    On the screenshot below you can see that our trouble spot is Android.

    You can go to the test cases level and see what problems they had.

    How to add test results to ReportPortal

    You have checked demo test results, dashboards and widgets. And now you want to see your real data in ReportPortal.

    ReportPortal is a TestOps service that integrates with your Test Framework, listens to events and visualizes test results. You cannot execute results right from ReportPortal, but you can integrate ReportPortal with a Test Framework or Implement own integration.

    - + \ No newline at end of file diff --git a/saved-searches-filters/CreateFilters/index.html b/saved-searches-filters/CreateFilters/index.html index ed9fc295a..ac468d0db 100644 --- a/saved-searches-filters/CreateFilters/index.html +++ b/saved-searches-filters/CreateFilters/index.html @@ -12,7 +12,7 @@ - + @@ -21,7 +21,7 @@

    Create filters

    Filters in the our test automation reporting dashboard are saved searches of the launches.

    Filters could be used as an independent object and for creating widgets as well.

    Permission: all users of the project despite their role.

    To create a filter, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Click on the "Add Filter" button.

    3. The new tab will be opened. Now you can configure your filter. The unsaved filter is marked with an asterisk (*).

    4. Add filtering parameters to have the relevant data.

    5. Click 'Save' button.

    6. 'ADD FILTER' popup will appear.

    7. Enter a new filter name (3-55 symbols long) and click "Add" button.

    Your new filter will be saved and shown on the "Filters" page.

    note

    ReportPortal allows saving a filter on the "Launches" mode only. It's impossible to save filters on the "Debug" tab.

    - + \ No newline at end of file diff --git a/saved-searches-filters/FiltersPage/index.html b/saved-searches-filters/FiltersPage/index.html index d8a1b3ebd..9120d1caf 100644 --- a/saved-searches-filters/FiltersPage/index.html +++ b/saved-searches-filters/FiltersPage/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Filters page

    You can see the list of your saved searches and filters created by other team members on the "Filters" page.

    The following information is present on the "Filters" page:

    • Filter name and description
    • Options: criteria of search
    • Owner: the user who created the filter
    • Display on launches: ON/OFF switcher
    • Delete option

    To open launches based on saved filter, click the link of filter's name. The filter will be opened as a tab on the "Launches" page.

    It is the only place where it is possible to delete the filter from our test report&analytics dashboard.

    To do this, click the 'delete' icon of your filter and confirm the action. The filter will be deleted but not launches in it.

    - + \ No newline at end of file diff --git a/saved-searches-filters/ManageFilters/index.html b/saved-searches-filters/ManageFilters/index.html index c44e55c06..6d8a5e1a6 100644 --- a/saved-searches-filters/ManageFilters/index.html +++ b/saved-searches-filters/ManageFilters/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Manage filters

    Filters feature is a base for data visualization in test automation because widgets are built on their basis.

    OPERATIONS WITH FILTERS

    After the filter is saved, there are some options to manage them.

    EDIT FILTER

    This option allows edit filter name and description.

    To edit a filter, perform the following steps:

    1. Open your filter from the tab on the "Launches" page.

    2. Click the "Edit" option on the tab menu.

    3. The Edit filter popup window will appear.

    4. Make changes.

    5. To save the updates, select the "Save" option from the filter context menu.

    Your changes for the filter will be saved.

    CLONE

    This option allows you to create a new tab with the same criteria.

    To clone an already existed filter, perform the following steps:

    1. Open any filter on the "Launches" page.

    2. Click the "Clone" option on the tab menu.

    3. Enter the unique name, description and submit.

    4. The content of filter will be the same as in original filter.

    DISCARD

    This option helps to reset unsaved filter changes.

    To discard unsaved changes, perform the following steps:

    1. Open any filter on the "Launches" page.

    2. Add new criteria to the filter options.

    3. Asterisk mark appears for the filter.

    4. Click 'Discard' to remove most recent changes.

    5. All unsaved changes are removed.

    6. Asterisk mark removed for the filter tab.

    CLOSE

    This option allows to close filter tab with all selected criteria. The option is available on the filter tab.

    DELETE option is available from 'Filters' page only.

    - + \ No newline at end of file diff --git a/search/index.html b/search/index.html index 341cc8990..f214766c9 100644 --- a/search/index.html +++ b/search/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Search the documentation

    - + \ No newline at end of file diff --git a/terms-and-conditions/GoogleAnalyticsUsageByReportPortal/index.html b/terms-and-conditions/GoogleAnalyticsUsageByReportPortal/index.html index 66805dfec..85b25f836 100644 --- a/terms-and-conditions/GoogleAnalyticsUsageByReportPortal/index.html +++ b/terms-and-conditions/GoogleAnalyticsUsageByReportPortal/index.html @@ -12,7 +12,7 @@ - + @@ -27,7 +27,7 @@ everything with OK button. The changes will be applied after the system restart.

    Build systems

    Some build systems can set environment variables on their own we can use this feature to set the variable.

    Gradle

    Gradle has environment keyword which sets variables for child processes, so all you need to do is to set it in test task:

    test {
    environment "AGENT_NO_ANALYTICS", "1"
    }

    Maven

    maven-surefire-plugin has option to set environment variables for forked processes, so you can configure the plugin accordingly:

    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.epam.reportportal.example</groupId>
    <artifactId>example-mute</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
    <forkMode>once</forkMode>
    <environmentVariables>
    <AGENT_NO_ANALYTICS>1</AGENT_NO_ANALYTICS>
    </environmentVariables>
    </configuration>
    </plugin>
    </plugins>
    </build>
    </project>

    tox

    Python's tox automation tool also provides a way to set necessary variables with setenv parameter in tox.ini file:

    [testenv]
    setenv =
    AGENT_NO_ANALYTICS = 1

    Docker

    If your tests are wrapped in a docker container you need to bypass this variable through command-line with -e flag:

    docker run --rm -it \
    -e "AGENT_NO_ANALYTICS=1"
    selenium/standalone-chrome:103.0

    Or you can use ENV keyword in your Dockerfile when building the image:

    ENV AGENT_NO_ANALYTICS=1

    Thanks to Google Analytics, we can deliver interesting and helpful features to ReportPortal. As a result, you will have effective working instruments and better customer support.

    - + \ No newline at end of file diff --git a/terms-and-conditions/PremiumFeatures/index.html b/terms-and-conditions/PremiumFeatures/index.html index 45d4b7b46..3e60a6e2e 100644 --- a/terms-and-conditions/PremiumFeatures/index.html +++ b/terms-and-conditions/PremiumFeatures/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Premium Features

    At ReportPortal, we understand that every enterprise's testing environment is unique, requiring tailored solutions that address specific needs. To cater to this demand, we've introduced our Premium Features, exclusively available to our Managed Services and SaaS subscription clients.

    Our Premium Features have been meticulously designed and developed with large-scale, enterprise-level needs in mind. They are the cornerstone for organizations seeking to establish true continuous testing within their operational setup. Whether it's the ability to navigate the complexities of testing at scale, or the demand for more granular insights to drive decision-making, these premium options are equipped to handle it all.

    We invite you to explore our Premium Features, understanding their objectives and benefits in detail on our documentation page. We are confident that you'll find the value they add to be well worth the investment. As always, we're here to answer any questions and assist you in getting the most out of your ReportPortal experience.

    Available Premium Features:

    - + \ No newline at end of file diff --git a/user-account/EditPersonalInformation/index.html b/user-account/EditPersonalInformation/index.html index 69dd03714..28668760d 100644 --- a/user-account/EditPersonalInformation/index.html +++ b/user-account/EditPersonalInformation/index.html @@ -12,7 +12,7 @@ - + @@ -25,7 +25,7 @@ name and email fields will become available.

    The full name allows: 3-256 symbols, English, Latin, Cyrillic, numeric characters and the following symbols: hyphen, underscore, dot, and space. The email should be unique in ReportPortal.

    Make changes and click the "Save" button.

    note

    Personal information for a GitHub user cannot be changed.

    Change password

    To change your password in ReportPortal, click on the "Change password" button above the form and enter:

    • Old password
    • New password
    • Confirm new password

    Check the box "Show password" to verify the password entered is what you intended to enter.

    Fill in these fields and click the "Submit" button under the form.

    note

    GitHub users cannot change the password on ReportPortal.

    - + \ No newline at end of file diff --git a/user-account/RestoreAPassword/index.html b/user-account/RestoreAPassword/index.html index d3996ce02..ef82e4976 100644 --- a/user-account/RestoreAPassword/index.html +++ b/user-account/RestoreAPassword/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    Restore a password

    If you forgot your password, you can restore it on the login page. To do that, perform the following steps:

    1. Click the "Forgot your password?" link on the login page.

    2. Enter your email in the form that appears and click the "Change Password" button. The password recovery instructions will be sent to your email.

    3. Follow the link from the email. The Restore Password form will appear.

    4. Fill in the restore password form and click the "Change Password" button. Now you can log in ReportPortal with the new credentials.

    note

    GitHub user cannot restore the password on ReportPortal.

    - + \ No newline at end of file diff --git a/user-role-guides/index.html b/user-role-guides/index.html index 7ac25c351..1e5e32439 100644 --- a/user-role-guides/index.html +++ b/user-role-guides/index.html @@ -12,7 +12,7 @@ - + @@ -48,7 +48,7 @@ Saved searches (Filters)
    Dashboards and Widgets
    User account

    - + \ No newline at end of file diff --git a/work-with-reports/FilteringLaunches/index.html b/work-with-reports/FilteringLaunches/index.html index c95640e99..8bea5ba90 100644 --- a/work-with-reports/FilteringLaunches/index.html +++ b/work-with-reports/FilteringLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -47,7 +47,7 @@ Defect Comments "abcd", "zabc", "zabcd", "abc".

    • contains - shown all test items that contain specified combination in the defect comment;
    • not contains - shown all test items that don't contain specified combination in the defect comment;
    • equals - shown all test items which defect comment is absolutely equal to the specified combination;
    • not equals - shown all test items without items which defect comment is absolutely equal to the specified combination;
    • Attributes - 1 symbol is enough for this search. The system searches for the items with or without a specified Attribute(s). Multiple Attributes may be specified at once. The following filtering conditions are available: ALL/ANY and WITHOUT ALL/WITHOUT ANY.
    • all ( in API: 'filter.has.attributes') - shown all test items which contain all specified Attributess;
    • without all( in API:'filter.!in.attributes') - shown all test items without specified Attributess in any combinations;
    • any ( in API:filter.in.attributes) - shown all test items which contain any combinations of specified attributes;
    • without any ( in API:'filter.!has.attributes') - shown all test items without all specified attributes in case, when both of attributes present in the test item;
    • Analysed by RP (AA) - there are two options: With AA mark, Without AA mark.

    • Ignored in AA - there are two options: With Ignore mark, Without ignoring mark.

    • Issue in BTS - there are two options: 1 symbol is enough for autocomplete. The system searches for the items with or without a specified Issue in BTS. Multiple Issues may be specified at once. The following filtering conditions are available: ALL/ANY and WITHOUT ALL/WITHOUT ANY.

    • all (has) - shown all test items which contain all specified Issues;
    • without all(!has) - shown test items without all specified Issies in any combinations;
    • any (in) - shown all test items which contain any combinations of specified Issues;
    • without any (!in) - shown all test items without any specified Issues
    • Pattern name - all patterns names, which a PM creates on Project Settings

    • Has retries/Hasn't retries - there are two options: Has retries/ No retries.

    - + \ No newline at end of file diff --git a/work-with-reports/HistoryOfLaunches/index.html b/work-with-reports/HistoryOfLaunches/index.html index 02c0a3ebc..3d34c7157 100644 --- a/work-with-reports/HistoryOfLaunches/index.html +++ b/work-with-reports/HistoryOfLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -20,16 +20,14 @@

    History of launches

    Historical trend of executions

    The historical trend of executions represents your history view for the list of test items in our test execution dashboard. This feature can help you to find -the most unstable test cases in your suites/ launches/ builds.

    To see a table of the historical trend of executions, navigate to the "Launches" page and drill down to launch structure/ or launch statistics.

    History table: Test Case ID or Unique ID

    ReportPortal acquires a lot of real-time test results and you can choose by which parameter you want the history of test results to get defined. -There are 2 options:

    Difference between Test Case ID and Unique ID

    Please find the description of what Test Case ID and Unique by the links:

    They are both a unique identifiers of executions uniquness.

    But Unique ID (deprecated) generates on the base of a launch name where test execution is situated. -And Test Case ID usually doesn't contain a launch name.

    So that the main difference between a history table based on Unique ID (deprecated) and Test Case ID is that:

    • History on Unique ID (deprecated) shows only executions from launches with the same name
    • History on Test Case ID shows executions from all launches.

    Unique ID history

    (deprecated/ will be replaced by Test Case ID gradually)

    1. Take the ReportPortal release version 5.2.2 or higher. docker-compose.yml

    2. Add an environment variable to the service-API service:

    RP_ENVIRONMENT_VARIABLE_HISTORY_OLD=true
    1. Redeploy ReportPortal

    Test Case ID history

    Run ReportPortal without env variable.

    History table

    Where you can find History table.

    Drill down to the Step view (test executions list).

    Click the "History" button.

    You will see a historical trend in a table.

    History trends have the following color scheme:

    • Red - indicates the launches with failed or interrupted cases

    • Green - indicates passed launches

    • Yellow – indicates the launches with several equal test items present within a required level

    • Grey - indicates the test item with no descendants in this run.

    • Animated - still without state [in progress]

    You can select the depth of history: 3, 5, 10, 15, 20, 25 or 30 launches from the "History -Depth" drop-down menu.

    There are two options for a History table:

    • history for all launches
    • history for launches with the same name

    If your are using History table based on Test Case ID, you will be able to use both of this options. +the most unstable test cases in your suites/ launches/ builds.

    To see a table of the historical trend of executions, navigate to the "Launches" page and drill down to launch structure/ or launch statistics.

    History table based on Test Case Hash

    Test case hash is a parameter that is automatically generated based on the Test Case ID (if specified) or the full path to the test.

    You can read about the Test Case ID here.

    Unique ID history

    (deprecated)

    1. Take the ReportPortal release version 5.2.2 or higher. docker-compose.yml

    2. Add an environment variable to the service-API service:

    RP_ENVIRONMENT_VARIABLE_HISTORY_OLD=true
    1. Redeploy ReportPortal

    Test Case Hash history

    Run ReportPortal without env variable.

    History table

    Where you can find History table.

    Drill down to the Step view (test executions list).

    Click the "History" button.

    You will see a historical trend in a table.

    History trends have the following color scheme:

    • Red - indicates the launches with failed or interrupted cases

    • Green - indicates passed launches

    • Yellow – indicates the launches with several equal test items present within a required level

    • Grey - indicates the test item with no descendants in this run.

    • Animated - still without state [in progress]

    You can select the depth of history: 3, 5, 10, 15, 20, 25 or 30 launches from the "History +Depth" drop-down menu.

    There are two options for a History table:

    • history for all launches
    • history for launches with the same name

    If your are using History table based on Test Case Hash, you will be able to use both of this options. In case you use a history table based on UID, a history table will show you results in mode: "History for launches with the same name".

    History for all launches

    If you have configured ReportPortal with TestCase History table. -This option is for you.

    How you can open a history table with execution from all launches?

    • Open All launches tab
    • Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics
    • Click on the button 'History'
    • Choose the option 'All launches' in the drop-down 'BASE'

    What information is shown on the table based on Test Case ID?

    On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from all launches on the project. +This option is for you.

    How you can open a history table with execution from all launches?

    • Open All launches tab
    • Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics
    • Click on the button 'History'
    • Choose the option 'All launches' in the drop-down 'BASE'

    What information is shown on the table based on Test Case Hash?

    On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from all launches on the project. Each column on the history table is equaled to a number of the execution.

    Let's see an example.

    Use case: You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux. After test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: Regression_MacOS, Regression_Win, Regression_Linux. If you click on the Total statistic for the launch Regression_MacOS and click on the 'History' button, you will see a History table with all test cases in the suite and their 10 last executions from all launches on the project (e.g. from Regression_MacOS, Regression_Win, Regression_Linux)

    Test case nameExecution #3Execution #2Execution #1
    Test 1PassedFailedPassed
    Test 2FailedPassedPassed
    Test 3FailedPassedPassed

    When you hover one of the cells on the table, you will be able to see to what launch this execution belongs to.

    History table for launches with the same name

    If you have configured ReportPortal with TestCase History table or with Unique ID (deprecated). -This option is for you.

    How you can open a history table with execution launches with the same name?

    • Open All launches tab
    • Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics
    • Click on the button 'History'
    • Choose the option 'Launches with the same name' in the drop-down 'BASE'

    What information is shown on the table based on Unique ID (deprecated) ot Test Case ID (with option "Launches with the same name"?)

    On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from only launches with the same name on the project. +This option is for you.

    How you can open a history table with execution launches with the same name?

    • Open All launches tab
    • Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics
    • Click on the button 'History'
    • Choose the option 'Launches with the same name' in the drop-down 'BASE'

    What information is shown on the table based on Unique ID (deprecated) or Test Case Hash (with option "Launches with the same name"?)

    On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from only launches with the same name on the project. Each column on the history table is equaled to a number of the execution.

    Let's see an example.

    Use case: You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux. After test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: Regression_MacOS, Regression_Win, Regression_Linux. If you click on the Total statistic for the launch Regression_MacOS and click on the 'History' button and you choose the option 'Launches with the same name', you will see executions only from launches with name Regression_MacOS.

    Test case nameExecution #2
    Test 1Passed
    Test 2Passed
    Test 3Passed

    Actions

    From the History table you will be able to perform the next actions:

    For that:

    • Hover the cell on the history table
    • Click on the checkbox
    • Check needed item
    • Click on the button 'Action'
    • Choose needed action

    Compare launch results with the filter

    You can add a custom column with the latest filter results to the History table.

    Use case: You have a test suite for the regression. You run this suite for different versions (version 1, version2, version 3). @@ -44,8 +42,8 @@ using the defect editor block.

    To come into a certain execution of an appropriate launch, hit a launch number above the item.

    Also on a History line, you can see an "i" label, it means that the item with this label has a defect comment or/and a link to the Bug Tracking System.

    History across All launches

    By default system shows history across Launches with the same name.

    But you can choose option "History across All Launches" and system will show you executions of the test cases which have been executed in launches with different names.

    On hover user can find launch name of test and all launch attributes.

    Duration fluctuation

    If test execution has duration growth in comparison with previous run, the system marks such items with red triangles:

    No duration growth - 0 triangles

    duration growh from 0 to 20% - 1 triangles

    duration growh from 21% - 50% - 2 trianges

    duration growh from 51% - 100% - 3 trianges

    duration growh from 101% and higher - 4 trianges

    Load more History

    By default the system shows 12 latest executions. If you need more history you can click on the button "Load more 9 items and the system loaded more executions on history line. Max number of items on History line is 30 executions.

    User can move on History line using horizontal scroll.

    Test Item actions history

    Test Item actions history will show you the history of actions, which have been made to a certain test item. You can see the kind of activity, and who performed it.

    The following actions are shown on the history of actions:

    user changed defect type of test item

    user posted a comment to the test item

    user posted a bug to the Bug Tracking System or added a link to the existing in Bug Tracking System issue.

    analyzer changed defect type of test item based on the item (where "item" is a link to a log view of an item which has been chosen by Analyzer as the most relevant result)

    analyzer posted a comment to the test item

    analyzer posted a bug to the Bug Tracking System or added a link to the existing in the Bug Tracking System issue.

    To see the history of actions, navigate to a certain child item. By default you -will see the last action in one line.

    Use spoiler to maximize actions history:

    - +will see the last action in one line.

    Use spoiler to maximize actions history:

    + \ No newline at end of file diff --git a/work-with-reports/InvestigationOfFailure/index.html b/work-with-reports/InvestigationOfFailure/index.html index 5d20643eb..ec097bc43 100644 --- a/work-with-reports/InvestigationOfFailure/index.html +++ b/work-with-reports/InvestigationOfFailure/index.html @@ -12,7 +12,7 @@ - + @@ -20,7 +20,7 @@

    Investigation of failure

    Set defect type

    ReportPortal provides the possibility for test failure analysis of your runs. The investigation includes setting the appropriate defect type of failed items, posting a defect for them or linking the ID of a defect that is already created in the bug tracking system.

    Using “Make decision” modal, you can choose the real reason of your failure and provide a comment for this fail.

    When a defect is found in a test, the bug triage should be performed and proper defect type should be assigned to it, in order to have accurate test runs statistics. You will be able to change a defect type for a test and mark it as a Product Bug/Automation Bug/System Issue/No Defect at any time.

    The available defect types are described below:

    “To investigate” means that no investigation has been made on this defect yet.

    “Product bug” means that the defect was investigated and a production bug found as the reason for the failure of this test.

    “Automation bug” means that the defect was investigated and the automation test is not correct.

    “System issue” means that the defect was investigated and it turns out that a system-level issue, like an app crash, caused the test to fail.

    “No defect” means that the defect was investigated and was defined to be not a defect.

    Post bug to Bug Tracking System

    ReportPortal allows to connect some popular bug tracking systems with our test automation reporting platform and post a bug to them or link the ticket ID of the already posted defect to the test item in ReportPortal.

    Before posting/linking a bug, make sure that the bug tracking systems are connected to the project on the project settings page. To check it, please, find the user guides below:

    - + \ No newline at end of file diff --git a/work-with-reports/OperationsUnderLaunches/index.html b/work-with-reports/OperationsUnderLaunches/index.html index fab47d27c..0eb3d4566 100644 --- a/work-with-reports/OperationsUnderLaunches/index.html +++ b/work-with-reports/OperationsUnderLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -36,7 +36,7 @@ and select "Move to All Launches" from the 'Actions' list.

    Force finish launches

    The system allows finishing launches on the "Launches" and the "Debug" pages manually.

    Permission: Next users are able to stop launches:

    • Administrator

    • User with PROJECT MANAGER Project Role

    • User with one of Project Role {MEMBER, CUSTOMER} on the project - Launch Owner

    In order to finish a launch that is in progress now, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select the "Force Finish" option in the context menu on the left hand of the launch name.

    3. The warning popup will be opened.

    4. Click the "Finish" button.

    5. The launch will be stopped and shown in the launches table with the "stopped" tag and the "stopped" description. All the statistics collected by this time will be displayed.

    In order to finish some launches simultaneously those are in progress now, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select required launches that are in progress by click on their checkboxes

    3. Open 'Actions' list

    4. Select "Force Finish" from the list

    5. The warning popup will be opened.

    6. Confirm the action

    7. All selected launches will be stopped and shown in the launches table with the "stopped" tag and the "stopped" description. All the statistics collected by this time will be displayed.

    Export launches reports

    The system allows exporting launches reports on the "Launches" and the "Debug" modes. You can export the launch report in the following formats: PDF, XML, HTML.

    In order to export a launch, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select the required format from the "Export" option in the context menu on the left hand of the launch name.

    3. The launch report in the selected format will be opened.

    note

    The export operation works for a separate launch only. No multiple actions for the export of launches.

    Delete launches

    The system allows deleting launches on the "Launches" and "Debug" pages.

    Permission: next users are able to delete launches:

    • Administrator

    • User with PROJECT MANAGER Project Role

    • User with one of Project Role {MEMBER, CUSTOMER} on the project - Launch Owner

    There are two ways how the launch/es can be deleted

    In order to delete a launch, perform the following steps:

    1. Navigate to the "Launches" page.

    2. Select the "Delete" option in the context menu on the left hand of the launch name.

    3. The warning popup will be opened.

    4. Click the "Delete" button.

    5. The launch will be deleted from ReportPortal. All related content will be deleted: test items, logs, screenshots.

    In order to delete more than one launch simultaneously, perform the following steps:

    1. Navigate to the "Launches" page

    2. Select required launches by click on their checkboxes

    3. Open 'Actions' list

    4. Click 'Delete' option

    5. The warning popup will be opened.

    6. Confirm the action

    7. The launches will be deleted from ReportPortal. All related content will be deleted: test items, logs, screenshots.

    note

    It is impossible to delete launches IN PROGRESS - "Delete" launch option will be disabled.

    Delete test item

    The system allows deleting test items in all levels of launch in the "Launches" and "Debug" pages.

    Permission: Next users are able to delete the test item:

    • Administrator

    • User with PROJECT MANAGER Project Role

    • User with one of Project Role {MEMBER, CUSTOMER} on the project - Launch Owner

    In order to delete a test item, perform the following steps:

    1. Navigate to the "Launches" page

    2. Drill down to the test level of any item

    3. Select the "Delete" option in the context menu next to the selected test item.

    4. The warning popup will be opened.

    5. Click the "Delete" button.

    6. The test item will be deleted from ReportPortal with all related content (logs, screenshots).

    In order to delete some test items simultaneously, perform the following steps:

    1. Navigate to the "Launches" page

    2. Drill down to the test level of any item

    3. Select required test items by click on their checkboxes

    4. If you are on SUITE or TEST view, click 'Delete' button from the header

      If you are on STEP view, open 'Actions' list and select "Delete" option

    5. The warning popup will be opened.

    6. Confirm the action

    7. Test items will be deleted from ReportPortal with all related content (logs, screenshots).

    note

    It is impossible to delete test items in launches IN PROGRESS - "Delete" test item option is disabled for test items in launches IN PROGRESS.

    - + \ No newline at end of file diff --git a/work-with-reports/TestCaseId/index.html b/work-with-reports/TestCaseId/index.html index 8a0aea8e9..4b0e79707 100644 --- a/work-with-reports/TestCaseId/index.html +++ b/work-with-reports/TestCaseId/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ It is a unique identifier from your source test management system which help ReportPortal.io to identify the uniqueness of a test case

    Where Test Case ID is using?

    Test case id is using for:

    • The history line
    • The history table

    You can find a test case ID in the 'Edit' modal.

    How you can report items with Test case ID?

    You can report test case id via agents. All details you can find in the dev guide https://github.com/reportportal/client-java/wiki/Test-case-ID

    If the test execution has test parameters, a test case ID will be generated on the base of:

    Test case id in ReportPortal = reported 'TestCaseID + all test parameters

    What does happen if you do not report items with Test case ID?

    In case a user doesn't report tests with Test Case ID, the system generates it automatically:

    • Auto-generation based on 'Code reference' and 'Parameters' If users do not report test case ID, it is generated automatically on the base of:

    Test case id in ReportPortal = 'Code reference' + all test parameters

    • Automatically based on Test Execution name, All parents name, Parameters If users do not report Test Case ID and Code reference, then test case ID is generated on the base of:

    Test case id in ReportPortal = Test Case Name + All parents Name (except Launch name) + All parameters

    - + \ No newline at end of file diff --git a/work-with-reports/UniqueId/index.html b/work-with-reports/UniqueId/index.html index 40c6a5686..60349ef17 100644 --- a/work-with-reports/UniqueId/index.html +++ b/work-with-reports/UniqueId/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@

    Unique ID

    (deprecated/ will be replaced by Test Case ID gradually)

    ReportPortal generates an ID automatically for all test items by default. The UniqueID generation is based on:

    • A test item name;
    • A project name;
    • A launch name;
    • Names of all parents;
    • All parameters of the item;
    note

    Unique ID deprecated/will be replaced by Test Case ID gradually.

    All this information becomes part of a test item in the form of the MD5 hash. After that, a UID becomes a part of the item. It allows defining the item's uniqueness with no possibility of doubt. ReportPortal uses this functionality in a process of building widgets ( f.e.:'Most failed test cases', 'Flacky tests'), 'Retry' and 'Rerun'and, etc.

    - + \ No newline at end of file diff --git a/work-with-reports/ViewLaunches/index.html b/work-with-reports/ViewLaunches/index.html index f6f9a0fa8..937114865 100644 --- a/work-with-reports/ViewLaunches/index.html +++ b/work-with-reports/ViewLaunches/index.html @@ -12,7 +12,7 @@ - + @@ -50,7 +50,7 @@ than 5 lines. You can expand the log message clicking on the special "Expand" icon.

    You can use a filter to specify the level.

    Also, you can use the logs sorting by time, and filtering logs to find a certain message in logs.

    Stack trace

    On the Log view for the fast redirection to the last 5 error log messages, please click on the tab Stack trace, in this section you can find *5 last error logs".

    Attachments

    In case you are interested in logs with attachments only, check the corresponding checkbox.

    Click on the file in log opens the preview of the attachment.

    The attachments could be rotated on a preview screen if needed.

    ReportPortal provides the possibility of preview for such types of attachments as:

    • 'xml',
    • 'javascript',
    • 'json',
    • 'css',
    • 'php'

    Other types of attachments will be opened in a new browser tab or downloaded.

    The alternative way to view these files is by using the Attachments.

    To view data via the Attachments section, perform the following steps:

    1. Open Log view of launch for test items with attachments available

    2. Click 'Attachments' tab

    3. Select the required file by clicking on its thumbnail.

    4. To expand the area, click the view on the main box.

    Items details

    In the section Items details, you can find information about test case such as:

    • Test Case name
    • Test case status
    • Test case start time
    • Duration and duration fluctuation
    • Description
    • Parameters
    • Attributes
    • Code location (that can be easily copied by a user)

    History of actions

    In this section, you can find all activities which were performed under the test case such as:

    • user changed defect type of test item
    • user posted a comment to the test item
    • user posted a bug to the Bug Tracking System
    • user-added link to the existing in Bug Tracking System bug.
    • analyzer changed defect type of test item based on the item (where "item" is a link to a log view of an item which has been chosen by the analyzer as the most relevant result)
    • analyzer posted a comment to the test item
    • analyzer posted a bug to the Bug Tracking System or added a link to the existing in Bug Tracking System issue.
    • pattern analysis add a found pattern

    History of actions is not shown if nobody performed actions with the item. By default, you will see the last action in one line.

    Markdown mode on Logs view

    You can view logs in Markdown mode or in the Console view.

    To enable Markdown mode, please perform actions:

    • Click on "M" button on the log level

    To disable Markdown mode, please perform actions:

    • Click on "M" button on log level one more time

    The same logic applies to the Console view.

    Log view for containers (for a launch or a suite)

    A user can report logs not only to the test execution but also to containers:

    • Launch
    • Suite

    If user want to view attached logs:

    • Login ReportPortal
    • Click on a launch name, or a suite name
    • Click on Log tab

    Nested Steps

    Retried test case (retry)

    How can I report retry items In case you implemented a retry logic for your tests in a test framework, ReportPortal will reflect it by adding a special retry structure. If there were a few invocations of the one test case, all these invocations will be shown as the one test case in ReportPortal.

    On a long view, you can see all logs and all information about all invocations. But in statistics and auto-analysis the ReportPortal will take into account only the last invocation. So that launch statistics will be more accurate.

    The defect type can be set for the last invocation only.

    On a Launch view, you can see a label, which means that the launch includes retries.

    On a step view, you can see the number of invocations and stack trace of each invocation.

    On a log view, you can see the number of invocations and logs, attachments of each invocation.

    - + \ No newline at end of file

    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 literal 0 HcmV?d00001 diff --git a/assets/images/EditWidget-df992198bf7499a6180883f83b489330.png b/assets/images/EditWidget-df992198bf7499a6180883f83b489330.png deleted file mode 100644 index e9f5281e85d47b4ec160ec154f1e4dd556115ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24087 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.d(t,{Zo:()=>p,kt:()=>g});var a=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=a.createContext({}),u=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(r),m=o,g=c["".concat(l,".").concat(m)]||c[m]||d[m]||n;return r?a.createElement(g,i(i({ref:t},p),{},{components:r})):a.createElement(g,i({ref:t},p))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,i=new Array(n);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>u});var a=r(87462),o=(r(67294),r(3905));const n={sidebar_position:1,slug:"/",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics."},i="What is ReportPortal?",s={unversionedId:"intro",id:"intro",title:"What is ReportPortal?",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics."},sidebar:"defaultSidebar",next:{title:"ReportPortal Tutorial",permalink:"/docs/reportportal-tutorial/"}},l={},u=[{value:"What ReportPortal can do?",id:"what-reportportal-can-do",level:2},{value:"What technologies are used?",id:"what-technologies-are-used",level:2},{value:"Benefits of report automation with ReportPortal",id:"benefits-of-report-automation-with-reportportal",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"what-is-reportportal"},"What is ReportPortal?"),(0,o.kt)("p",null,"ReportPortal is a TestOps service, that provides increased capabilities to speed up results analysis and reporting through the use of built-in analytic features."),(0,o.kt)("p",null,"ReportPortal is a great addition to Continuous Integration and Continuous\nTesting process."),(0,o.kt)("p",null,"ReportPortal is distributed under the Apache v2.0 license, and it is free to use and modify, even for commercial purposes. We offer the only paid premium feature \u2013 ",(0,o.kt)("a",{parentName:"p",href:"/category/quality-gates"},"Quality Gates"),"."),(0,o.kt)("p",null,"If a company is interested in our services, we can provide support hours to deploy, integrate, configure, or customize the tool, as well as ",(0,o.kt)("a",{parentName:"p",href:"https://reportportal.io/pricing"},"SaaS options"),"."),(0,o.kt)("h2",{id:"what-reportportal-can-do"},"What ReportPortal can do?"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Mainstream platforms integration")))),(0,o.kt)("p",null,"ReportPortal seamlessly integrates with mainstream platforms such as Jenkins, Jira, BDD process, majority of Functional and Unit testing frameworks."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Real-time results")))),(0,o.kt)("p",null,"Real-time integration provides businesses the ability to manage and track execution status directly from the ReportPortal."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Test case execution results structure")))),(0,o.kt)("p",null,"Test case execution results are stored following the same structure you have in your reporting suites and test plan. The test cases are shown together with all related data in one place, right where you need it: logs, screenshots, binary data. The execution pipeline of certain test cases are also available for you, so one can see previous test execution report in one click."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Collaborative analysis")))),(0,o.kt)("p",null,"Our test report dashboard also gives you the ability to collaboratively analyze the test automation results and quickly get automation test report. Particular test cases can be associated with a product bug, an automation issue, a system issue or can be submitted as an issue ticket directly from the execution result."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Historical data of test execution")))),(0,o.kt)("p",null,"ReportPortal provides enhanced capabilities along with auto-results analysis by\nleveraging historical data of test execution."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Automatic Analysis")))),(0,o.kt)("p",null,"With each execution, ReportPortal automatically figures out the root cause of a fail. As a result of AI-based defects triage, ReportPortal is marking a test result with a flag. Engineers will be alerted about this issue to provide further analysis: if it has been resolved already or which test results require actual human analysis."),(0,o.kt)("h2",{id:"what-technologies-are-used"},"What technologies are used?"),(0,o.kt)("p",null,"Considering a high load rate and performance requirements, we use\ncutting edge technologies such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"PostgreSQL - The World's Most Advanced Open Source Relational Database.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"REST Web Service - lightweight requests, industry standard.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Mobile responsive UI - check it at any mobile device with the default browser."))),(0,o.kt)("h2",{id:"benefits-of-report-automation-with-reportportal"},"Benefits of report automation with ReportPortal"),(0,o.kt)("p",null,"Report automation is the procedure by which reports are routinely and automatically refreshed."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Speedy decision-making")))),(0,o.kt)("p",null,"Report automation is an effective technique to provide information that is essential to business operations. Delivering crucial information to the appropriate people at the appropriate time becomes considerably quicker and simpler by automatically generated reports. It allows to get business faster insights and drive better decisions."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Accurate data")))),(0,o.kt)("p",null,"In ReportPortal, you have fully real-time analytic report automation. Since the reports are automatically generated, you are insured against human error when reports are generated manually."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Advanced reporting")))),(0,o.kt)("p",null,"ReportPortal offers widgets with a user-friendly visual interface to create interactive reports for all your needs. For example, you can build qa metrics dashboard using ",(0,o.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/OverallStatistics"},"Overall statistics"),", ",(0,o.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/UniqueBugsTable"},"Unique bugs table"),", ",(0,o.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/PassingRateSummary"},"Passing rate summary")," widgets. "),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"Easily running CI/CD tests")))),(0,o.kt)("p",null,"ReportPortal is CI/CD agnostic tool solution. You can use ",(0,o.kt)("a",{parentName:"p",href:"/log-data-in-reportportal/HowToRunYourTests"},"any CI environment")," to run automated tests to improve quality of product by catching issues early in development lifecycle."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0e384e19.fb41a6cf.js b/assets/js/0e384e19.fb41a6cf.js deleted file mode 100644 index 16e43817e..000000000 --- a/assets/js/0e384e19.fb41a6cf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9671],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>g});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),u=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(r),m=n,g=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return r?a.createElement(g,i(i({ref:t},p),{},{components:r})):a.createElement(g,i({ref:t},p))}));function g(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:n,i[1]=s;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=r(87462),n=(r(67294),r(3905));const o={sidebar_position:1,slug:"/",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics."},i="What is ReportPortal?",s={unversionedId:"intro",id:"intro",title:"What is ReportPortal?",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics.",source:"@site/docs/intro.md",sourceDirName:".",slug:"/",permalink:"/docs/",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1,slug:"/",description:"How to get started with our test reporting tool. Improve testing process with ML-driven failure triage. Get real time results and test failure analytics."},sidebar:"defaultSidebar",next:{title:"ReportPortal Tutorial",permalink:"/docs/reportportal-tutorial/"}},l={},u=[{value:"What ReportPortal can do?",id:"what-reportportal-can-do",level:2},{value:"What technologies are used?",id:"what-technologies-are-used",level:2},{value:"Benefits of report automation with ReportPortal",id:"benefits-of-report-automation-with-reportportal",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"what-is-reportportal"},"What is ReportPortal?"),(0,n.kt)("p",null,"ReportPortal is a TestOps service, that provides increased capabilities to speed up results analysis and reporting through the use of built-in analytic features."),(0,n.kt)("p",null,"ReportPortal is a great addition to Continuous Integration and Continuous\nTesting process."),(0,n.kt)("h2",{id:"what-reportportal-can-do"},"What ReportPortal can do?"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Mainstream platforms integration")))),(0,n.kt)("p",null,"ReportPortal seamlessly integrates with mainstream platforms such as Jenkins, Jira, BDD process, majority of Functional and Unit testing frameworks."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Real-time results")))),(0,n.kt)("p",null,"Real-time integration provides businesses the ability to manage and track execution status directly from the ReportPortal."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Test case execution results structure")))),(0,n.kt)("p",null,"Test case execution results are stored following the same structure you have in your reporting suites and test plan. The test cases are shown together with all related data in one place, right where you need it: logs, screenshots, binary data. The execution pipeline of certain test cases are also available for you, so one can see previous test execution report in one click."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Collaborative analysis")))),(0,n.kt)("p",null,"Our test report dashboard also gives you the ability to collaboratively analyze the test automation results and quickly get automation test report. Particular test cases can be associated with a product bug, an automation issue, a system issue or can be submitted as an issue ticket directly from the execution result."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Historical data of test execution")))),(0,n.kt)("p",null,"ReportPortal provides enhanced capabilities along with auto-results analysis by\nleveraging historical data of test execution."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Automatic Analysis")))),(0,n.kt)("p",null,"With each execution, ReportPortal automatically figures out the root cause of a fail. As a result of AI-based defects triage, ReportPortal is marking a test result with a flag. Engineers will be alerted about this issue to provide further analysis: if it has been resolved already or which test results require actual human analysis."),(0,n.kt)("h2",{id:"what-technologies-are-used"},"What technologies are used?"),(0,n.kt)("p",null,"Considering a high load rate and performance requirements, we use\ncutting edge technologies such as:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"PostgreSQL - The World's Most Advanced Open Source Relational Database.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"REST Web Service - lightweight requests, industry standard.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Mobile responsive UI - check it at any mobile device with the default browser."))),(0,n.kt)("h2",{id:"benefits-of-report-automation-with-reportportal"},"Benefits of report automation with ReportPortal"),(0,n.kt)("p",null,"Report automation is the procedure by which reports are routinely and automatically refreshed."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Speedy decision-making")))),(0,n.kt)("p",null,"Report automation is an effective technique to provide information that is essential to business operations. Delivering crucial information to the appropriate people at the appropriate time becomes considerably quicker and simpler by automatically generated reports. It allows to get business faster insights and drive better decisions."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Accurate data")))),(0,n.kt)("p",null,"In ReportPortal, you have fully real-time analytic report automation. Since the reports are automatically generated, you are insured against human error when reports are generated manually."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Advanced reporting")))),(0,n.kt)("p",null,"ReportPortal offers widgets with a user-friendly visual interface to create interactive reports for all your needs. For example, you can build qa metrics dashboard using ",(0,n.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/OverallStatistics"},"Overall statistics"),", ",(0,n.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/UniqueBugsTable"},"Unique bugs table"),", ",(0,n.kt)("a",{parentName:"p",href:"/dashboards-and-widgets/PassingRateSummary"},"Passing rate summary")," widgets. "),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"Easily running CI/CD tests")))),(0,n.kt)("p",null,"ReportPortal is CI/CD agnostic tool solution. You can use ",(0,n.kt)("a",{parentName:"p",href:"/log-data-in-reportportal/HowToRunYourTests"},"any CI environment")," to run automated tests to improve quality of product by catching issues early in development lifecycle."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/33580f2e.5e68215f.js b/assets/js/33580f2e.d4dccbfe.js similarity index 74% rename from assets/js/33580f2e.5e68215f.js rename to assets/js/33580f2e.d4dccbfe.js index 634cca798..6ffd0a078 100644 --- a/assets/js/33580f2e.5e68215f.js +++ b/assets/js/33580f2e.d4dccbfe.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2106],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>k});var o=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(r),d=a,k=u["".concat(s,".").concat(d)]||u[d]||m[d]||n;return r?o.createElement(k,l(l({ref:t},p),{},{components:r})):o.createElement(k,l({ref:t},p))}));function k(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,l=new Array(n);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:a,l[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var o=r(87462),a=(r(67294),r(3905));const n={sidebar_position:3,sidebar_label:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker."},l="Deploy with Docker on Linux/Mac",i={unversionedId:"installation-steps/DeployWithDockerOnLinuxMac",id:"installation-steps/DeployWithDockerOnLinuxMac",title:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker.",source:"@site/docs/installation-steps/DeployWithDockerOnLinuxMac.md",sourceDirName:"installation-steps",slug:"/installation-steps/DeployWithDockerOnLinuxMac",permalink:"/docs/installation-steps/DeployWithDockerOnLinuxMac",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/installation-steps/DeployWithDockerOnLinuxMac.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker."},sidebar:"defaultSidebar",previous:{title:"Basic monitoring configuration",permalink:"/docs/installation-steps/BasicMonitoringConfiguration"},next:{title:"Deploy with Docker on Windows",permalink:"/docs/installation-steps/DeployWithDockerOnWindows"}},s={},c=[{value:"Install Docker",id:"install-docker",level:2},{value:"Deploy ReportPortal with Docker",id:"deploy-reportportal-with-docker",level:2}],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"deploy-with-docker-on-linuxmac"},"Deploy with Docker on Linux/Mac"),(0,a.kt)("p",null,"ReportPortal can be easily deployed using Docker Compose."),(0,a.kt)("h2",{id:"install-docker"},"Install Docker"),(0,a.kt)("p",null,"Docker is supported by all major Linux distributions, MacOS and Windows."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.docker.com/get-started"},"Download")," Docker"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/compose/install/"},"Download")," Docker Compose")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f Recomended change resources limits at least ",(0,a.kt)("strong",{parentName:"p"},"2")," CPU ",(0,a.kt)("strong",{parentName:"p"},"5")," GB RAM for Docker Desktop: ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/mac/#advanced"},"MAC")," | ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/windows/#advanced"},"Windows")," | ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/linux/#advanced"},"Linux"))),(0,a.kt)("h2",{id:"deploy-reportportal-with-docker"},"Deploy ReportPortal with Docker"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Download the latest ReportPortal Docker Compose file from ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/reportportal/reportportal/blob/master/docker-compose.yml"},"here"),". You can make it by run the following command:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"curl -LO https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Make the ElasticSearch configuration prerequisites for the analyzer service"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"OPTIONAL: Set {vm.max_map_count} kernel setting before ReportPortal deploying with the following ",(0,a.kt)("a",{parentName:"li",href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#docker-cli-run-prod-mode"},"Commands")),(0,a.kt)("li",{parentName:"ul"},"Give right permissions to ElasticSearch data folder using the following commands:")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir -p data/elasticsearch\nchmod 777 data/elasticsearch\nchgrp 1000 data/elasticsearch\n")),(0,a.kt)("p",null,"For more details about ElasticSearch visit ElasticSearch ",(0,a.kt)("a",{parentName:"p",href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#_notes_for_production_use_and_defaults"},"guide")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"OPTIONAL"),(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("strong",{parentName:"p"},"PostgreSQL Performance Tuning")),(0,a.kt)("p",{parentName:"blockquote"},'Depends on your hardware configuration and parameters of your system, you can additionally optimize your PostgreSQL performance by adding the following parameters to "command" option in the Docker compose file:'),(0,a.kt)("pre",{parentName:"blockquote"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"}," -c effective_io_concurrency=\n -c shared_buffers=\n -c max_connections=\n -c effective_cache_size=\n -c maintenance_work_mem=\n -c random_page_cost=\n -c seq_page_cost= \n -c min_wal_size= \n -c max_wal_size=\n -c max_worker_processes=\n -c max_parallel_workers_per_gather=\n")),(0,a.kt)("p",{parentName:"blockquote"},"Please choose set the values of these variables that are right for your system."),(0,a.kt)("p",{parentName:"blockquote"},"You can also change PostgreSQL host by passing a new value to POSTGRES_SERVER environment ",(0,a.kt)("a",{parentName:"p",href:"./AdditionalConfigurationParameters"},"variable"),".")),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},"Start the application using the following command:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker-compose -p reportportal up -d --force-recreate\n")),(0,a.kt)("p",null,"Where:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"-p reportportal")," adds project prefix 'reportportal' to all containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"up")," creates and starts containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"-d")," daemon mode"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"--force-recreate")," Re-creates containers if there any")),(0,a.kt)("p",null,"Useful commands:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker-compose logs")," shows logs from all containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker logs ","<","container_name",">")," shows logs from selected container"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker ps -a | grep \"reportportal_\" | awk '{print $1}' | xargs docker rm -f")," Deletes all ReportPortal containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker-compose down"))),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},"Open your web-browser with an IP address of the deployed environment at port ",(0,a.kt)("strong",{parentName:"li"},"8080"))),(0,a.kt)("p",null,"Use the following ",(0,a.kt)("strong",{parentName:"p"},"login\\pass")," to access:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Default User: ",(0,a.kt)("inlineCode",{parentName:"li"},"default\\1q2w3e")),(0,a.kt)("li",{parentName:"ul"},"Administrator: ",(0,a.kt)("inlineCode",{parentName:"li"},"superadmin\\erebus"))),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f Please change the admin password for better security")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2106],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>k});var o=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(r),d=a,k=u["".concat(s,".").concat(d)]||u[d]||m[d]||n;return r?o.createElement(k,l(l({ref:t},p),{},{components:r})):o.createElement(k,l({ref:t},p))}));function k(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,l=new Array(n);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:a,l[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var o=r(87462),a=(r(67294),r(3905));const n={sidebar_position:3,sidebar_label:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker."},l="Deploy with Docker on Linux/Mac",i={unversionedId:"installation-steps/DeployWithDockerOnLinuxMac",id:"installation-steps/DeployWithDockerOnLinuxMac",title:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker.",source:"@site/docs/installation-steps/DeployWithDockerOnLinuxMac.md",sourceDirName:"installation-steps",slug:"/installation-steps/DeployWithDockerOnLinuxMac",permalink:"/docs/installation-steps/DeployWithDockerOnLinuxMac",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/installation-steps/DeployWithDockerOnLinuxMac.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Deploy with Docker on Linux/Mac",description:"Make your test automation reporting more portable. Reduce the risk of configuration issues with your test reporting tool using Docker."},sidebar:"defaultSidebar",previous:{title:"Basic monitoring configuration",permalink:"/docs/installation-steps/BasicMonitoringConfiguration"},next:{title:"Deploy with Docker on Windows",permalink:"/docs/installation-steps/DeployWithDockerOnWindows"}},s={},c=[{value:"Install Docker",id:"install-docker",level:2},{value:"Deploy ReportPortal with Docker",id:"deploy-reportportal-with-docker",level:2}],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"deploy-with-docker-on-linuxmac"},"Deploy with Docker on Linux/Mac"),(0,a.kt)("p",null,"ReportPortal can be easily deployed using Docker Compose."),(0,a.kt)("h2",{id:"install-docker"},"Install Docker"),(0,a.kt)("p",null,"Docker is supported by all major Linux distributions, MacOS and Windows."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.docker.com/get-started"},"Download")," Docker"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/compose/install/"},"Download")," Docker Compose")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f Recomended change resources limits at least ",(0,a.kt)("strong",{parentName:"p"},"2")," CPU ",(0,a.kt)("strong",{parentName:"p"},"5")," GB RAM for Docker Desktop: ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/mac/#advanced"},"MAC")," | ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/windows/#advanced"},"Windows")," | ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/desktop/settings/linux/#advanced"},"Linux"))),(0,a.kt)("h2",{id:"deploy-reportportal-with-docker"},"Deploy ReportPortal with Docker"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Download the latest ReportPortal Docker Compose file from ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/reportportal/reportportal/blob/master/docker-compose.yml"},"here"),". You can make it by run the following command:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"curl -LO https://raw.githubusercontent.com/reportportal/reportportal/master/docker-compose.yml\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Make the ElasticSearch configuration prerequisites for the analyzer service"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"OPTIONAL: Set {vm.max_map_count} kernel setting before ReportPortal deploying with the following ",(0,a.kt)("a",{parentName:"li",href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#docker-cli-run-prod-mode"},"Commands")),(0,a.kt)("li",{parentName:"ul"},"Give right permissions to ElasticSearch data folder using the following commands:")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir -p data/elasticsearch\nchmod 777 data/elasticsearch\nchgrp 1000 data/elasticsearch\n")),(0,a.kt)("p",null,"For more details about ElasticSearch visit ElasticSearch ",(0,a.kt)("a",{parentName:"p",href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html#_notes_for_production_use_and_defaults"},"guide")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"OPTIONAL"),(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("strong",{parentName:"p"},"PostgreSQL Performance Tuning")),(0,a.kt)("p",{parentName:"blockquote"},'Depends on your hardware configuration and parameters of your system, you can additionally optimize your PostgreSQL performance by adding the following parameters to "command" option in the Docker compose file:'),(0,a.kt)("pre",{parentName:"blockquote"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"}," -c effective_io_concurrency=\n -c shared_buffers=\n -c max_connections=\n -c effective_cache_size=\n -c maintenance_work_mem=\n -c random_page_cost=\n -c seq_page_cost= \n -c min_wal_size= \n -c max_wal_size=\n -c max_worker_processes=\n -c max_parallel_workers_per_gather=\n")),(0,a.kt)("p",{parentName:"blockquote"},"Please choose set the values of these variables that are right for your system."),(0,a.kt)("p",{parentName:"blockquote"},"You can also change PostgreSQL host by passing a new value to POSTGRES_SERVER environment ",(0,a.kt)("a",{parentName:"p",href:"./AdditionalConfigurationParameters"},"variable"),".")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"Ensure you override the UAT Service environment variable RP_INITIAL_ADMIN_PASSWORD")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"version: '2.4'\nservices:\n\n uat:\n environment:\n RP_INITIAL_ADMIN_PASSWORD: \"My_Strong_Password!\"\n")),(0,a.kt)("p",null,"We've modified the current approach: during the initial installation and the first login of the superadmin, they will need to create a unique initial password, different from the default password provided in the ReportPortal installation documentation. Failure to do so will prevent the Auth service from starting."),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},"Start the application using the following command:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker-compose -p reportportal up -d --force-recreate\n")),(0,a.kt)("p",null,"Where:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"-p reportportal")," adds project prefix 'reportportal' to all containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"up")," creates and starts containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"-d")," daemon mode"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"--force-recreate")," Re-creates containers if there any")),(0,a.kt)("p",null,"Useful commands:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker-compose logs")," shows logs from all containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker logs ","<","container_name",">")," shows logs from selected container"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker ps -a | grep \"reportportal_\" | awk '{print $1}' | xargs docker rm -f")," Deletes all ReportPortal containers"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"docker-compose down"))),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},"Open your web-browser with an IP address of the deployed environment at port ",(0,a.kt)("strong",{parentName:"li"},"8080"))),(0,a.kt)("p",null,"Use the following ",(0,a.kt)("strong",{parentName:"p"},"login\\pass")," to access:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Default User: ",(0,a.kt)("inlineCode",{parentName:"li"},"default\\1q2w3e")),(0,a.kt)("li",{parentName:"ul"},"Administrator: ",(0,a.kt)("inlineCode",{parentName:"li"},"superadmin\\erebus"))),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u26a0\ufe0f Please change the admin password for better security")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/40be41a9.619ee169.js b/assets/js/40be41a9.619ee169.js new file mode 100644 index 000000000..fd352e6ba --- /dev/null +++ b/assets/js/40be41a9.619ee169.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6325],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>g});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=u(a),m=r,g=p["".concat(s,".").concat(m)]||p[m]||d[m]||i;return a?n.createElement(g,o(o({ref:t},c),{},{components:a})):n.createElement(g,o({ref:t},c))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:r,o[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var n=a(87462),r=(a(67294),a(3905));const i={sidebar_label:"Azure SAML"},o="Azure SAML",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/AzureSAML",id:"reportportal-configuration/authorization/SAMLProvider/AzureSAML",title:"Azure SAML",description:"SAML plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/AzureSAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"Azure SAML"},sidebar:"defaultSidebar",previous:{title:"SAML Provider",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/"},next:{title:"Okta SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML"}},s={},u=[{value:"Configure SAML on Azure side",id:"configure-saml-on-azure-side",level:2},{value:"Create organization in Azure",id:"create-organization-in-azure",level:3},{value:"Create your application in Azure",id:"create-your-application-in-azure",level:3},{value:"Assign users to the application in Azure",id:"assign-users-to-the-application-in-azure",level:3},{value:"Configure Single sign-on on Azure",id:"configure-single-sign-on-on-azure",level:3},{value:"Basic SAML Configuration",id:"basic-saml-configuration",level:3},{value:"Add Azure attributes",id:"add-azure-attributes",level:3},{value:"Configure SAML on ReportPortal side",id:"configure-saml-on-reportportal-side",level:2},{value:"Synchronize Azure SAML and ReportPortal",id:"synchronize-azure-saml-and-reportportal",level:2}],c={toc:u},p="wrapper";function d(e){let{components:t,...i}=e;return(0,r.kt)(p,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"azure-saml"},"Azure SAML"),(0,r.kt)("p",null,"SAML plugin is available in ReportPortal on the Plugins page."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,r.kt)("p",null,"Login to ReportPortal via Azure SAML is available starting from version 5.7 (SAML Okta was implemented in versions before 5.7)."),(0,r.kt)("p",null,"Azure SAML is a useful authorization method for big companies with 100+ employees, especially if this organization is already presented in Azure service. The main benefit here is no need for manual account creation. Users can log in to the ReportPortal using Azure SAML in an uncomplicated way: select login with SAML, then choose Azure, and upon login users\u2019 data is synchronized with ReportPortal automatically."),(0,r.kt)("p",null,"If your organization is using Azure SAML and some employees left, there is no need to remove their accounts from ReportPortal and from other Azure applications \u2013 just clearing their accounts in Azure will be enough."),(0,r.kt)("p",null,"To configure authorization via Azure SAML we need to synchronize Azure and ReportPortal."),(0,r.kt)("p",null,"Firstly, configure SAML on Azure side."),(0,r.kt)("h2",{id:"configure-saml-on-azure-side"},"Configure SAML on Azure side"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Log in to ",(0,r.kt)("a",{parentName:"li",href:"https://portal.azure.com"},"Azure portal")," using your organization creds."),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"App Services"),".\n",(0,r.kt)("media-view",{src:a(86100),alt:"App Services button"})),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"View")," in the ",(0,r.kt)("inlineCode",{parentName:"li"},"Manage Azure Active Directory")," section.\n",(0,r.kt)("media-view",{src:a(12181),alt:"View button"})),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"Manage Tenants"),".\n",(0,r.kt)("media-view",{src:a(79949),alt:"Manage Tenants"}))),(0,r.kt)("h3",{id:"create-organization-in-azure"},"Create organization in Azure"),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"If you haven\u2019t configured organization in Azure yet, click ",(0,r.kt)("inlineCode",{parentName:"li"},"Create"),".",(0,r.kt)("admonition",{parentName:"li",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"if you have configured organization in Azure, please, go to step 9.")),(0,r.kt)("media-view",{src:a(29962),alt:"Configure organization"})),(0,r.kt)("li",{parentName:"ol"},"Select a tenant type (",(0,r.kt)("inlineCode",{parentName:"li"},"Azure Active Directory"),") and click ",(0,r.kt)("inlineCode",{parentName:"li"},"Next: Configuration >")," button.\n",(0,r.kt)("media-view",{src:a(50747),alt:"Select a tenant type"})),(0,r.kt)("li",{parentName:"ol"},"Fill in the necessary fields and click ",(0,r.kt)("inlineCode",{parentName:"li"},"Next: Review + create >")," button.\n",(0,r.kt)("media-view",{src:a(52365),alt:"Create a tenant"})),(0,r.kt)("li",{parentName:"ol"},"Pass the Captcha verification and click the ",(0,r.kt)("inlineCode",{parentName:"li"},"Create")," button.\n",(0,r.kt)("media-view",{src:a(54383),alt:"Captcha verification"}))),(0,r.kt)("h3",{id:"create-your-application-in-azure"},"Create your application in Azure"),(0,r.kt)("ol",{start:9},(0,r.kt)("li",{parentName:"ol"},"After the creation of an organization go to the ",(0,r.kt)("inlineCode",{parentName:"li"},"Enterprise Applications")," section.\n",(0,r.kt)("media-view",{src:a(61512),alt:"Enterprise Applications section"})),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"New application"),".\n",(0,r.kt)("media-view",{src:a(98621),alt:"New application button"})),(0,r.kt)("li",{parentName:"ol"},"Click ",(0,r.kt)("inlineCode",{parentName:"li"},"Create your own application"),".\n",(0,r.kt)("media-view",{src:a(67524),alt:"Create your own application"})),(0,r.kt)("li",{parentName:"ol"},"Enter the name of your application, choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Integrate any other application you don't find in the gallery (Non-gallery)")," bullet and click ",(0,r.kt)("inlineCode",{parentName:"li"},"Create")," button.\n",(0,r.kt)("media-view",{src:a(57140),alt:"The name of your application"}))),(0,r.kt)("h3",{id:"assign-users-to-the-application-in-azure"},"Assign users to the application in Azure"),(0,r.kt)("ol",{start:13},(0,r.kt)("li",{parentName:"ol"},"Assign users (e.g., yourself) to this application. Please, follow the next screenshots:\n",(0,r.kt)("media-view",{src:a(31005),alt:"Assign users to your application"}),(0,r.kt)("media-view",{src:a(94962),alt:"Add user/group"}),(0,r.kt)("media-view",{src:a(63431),alt:"Add assignment"}))),(0,r.kt)("h3",{id:"configure-single-sign-on-on-azure"},"Configure Single sign-on on Azure"),(0,r.kt)("ol",{start:14},(0,r.kt)("li",{parentName:"ol"},"Go to the ",(0,r.kt)("inlineCode",{parentName:"li"},"Single sign-on")," section.\n",(0,r.kt)("media-view",{src:a(96260),alt:"Single sign-on section"})),(0,r.kt)("li",{parentName:"ol"},"Choose SAML.\n",(0,r.kt)("media-view",{src:a(73798),alt:"Select a Single sign-on method"}))),(0,r.kt)("h3",{id:"basic-saml-configuration"},"Basic SAML Configuration"),(0,r.kt)("ol",{start:16},(0,r.kt)("li",{parentName:"ol"},"Configure ",(0,r.kt)("inlineCode",{parentName:"li"},"Basic SAML Configuration")," settings as follows:\n",(0,r.kt)("media-view",{src:a(15055),alt:"Basic SAML Configuration"}))),(0,r.kt)("h3",{id:"add-azure-attributes"},"Add Azure attributes"),(0,r.kt)("ol",{start:17},(0,r.kt)("li",{parentName:"ol"},"Edit ",(0,r.kt)("inlineCode",{parentName:"li"},"Attributes & Claims")," settings and add ",(0,r.kt)("strong",{parentName:"li"},(0,r.kt)("em",{parentName:"strong"},"email")),", ",(0,r.kt)("strong",{parentName:"li"},(0,r.kt)("em",{parentName:"strong"},"firstName"))," and ",(0,r.kt)("strong",{parentName:"li"},(0,r.kt)("em",{parentName:"strong"},"lastName"))," attributes (default Azure attributes have ugly format). Please follow the next screenshots:\n",(0,r.kt)("media-view",{src:a(27503),alt:"Edit Attributes & Claims settings"}),(0,r.kt)("media-view",{src:a(36619),alt:"Add new claim"}),(0,r.kt)("media-view",{src:a(90745),alt:"Manage claim"}))),(0,r.kt)("p",null,"SAML configuration is completed on Azure side after adding these attributes."),(0,r.kt)("p",null,"Lastly, configure SAML on ReportPortal side."),(0,r.kt)("h2",{id:"configure-saml-on-reportportal-side"},"Configure SAML on ReportPortal side"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Log in to ",(0,r.kt)("strong",{parentName:"li"},"ReportPortal")," as Admin."),(0,r.kt)("li",{parentName:"ol"},"Open Menu at the bottom and choose ",(0,r.kt)("inlineCode",{parentName:"li"},"Administrate")," section.\n",(0,r.kt)("media-view",{src:a(84280),alt:"Administrate section in our test automation reporting platform"})),(0,r.kt)("li",{parentName:"ol"},"Select ",(0,r.kt)("inlineCode",{parentName:"li"},"Plugins"),".\n",(0,r.kt)("media-view",{src:a(67919),alt:"Plugins section in our continuous testing platform"})),(0,r.kt)("li",{parentName:"ol"},"Open ",(0,r.kt)("inlineCode",{parentName:"li"},"SAML"),".\n",(0,r.kt)("media-view",{src:a(6991),alt:"SAML plugin"})),(0,r.kt)("li",{parentName:"ol"},"Click the ",(0,r.kt)("inlineCode",{parentName:"li"},"Add integration")," button.\n",(0,r.kt)("media-view",{src:a(62772),alt:"Add integration"}))),(0,r.kt)("h2",{id:"synchronize-azure-saml-and-reportportal"},"Synchronize Azure SAML and ReportPortal"),(0,r.kt)("ol",{start:6},(0,r.kt)("li",{parentName:"ol"},"Synchronize Azure SAML and ReportPortal as follows:\n",(0,r.kt)("media-view",{src:a(57803),alt:"Configure Azure SAML in our test automation dashboard"}))),(0,r.kt)("p",null,"Finally, you can log in to ReportPortal using Azure SAML."))}d.isMDXComponent=!0},86100:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML1-92b042929d4e97ced259a68ff9c48595.png"},67524:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML10-6a23fd3b721c2602c55c7ed2a0be6bbc.png"},57140:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML11-1004dc6e53af486ffca2d4e69c810f18.png"},31005:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML12-ef24287d428faf1c1225268f31276a06.png"},94962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML13-527d6583c9f0fc9663ad826bf699054f.png"},63431:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML14-8f34adbfd9f99384a1170e5ad3c1650e.png"},96260:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML15-43590b9488a24255e9c31db9384c3604.png"},73798:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML16-7de84a049daded06d2efc5e1aae1c09c.png"},15055:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML17-31dc030807624856b9769c82af7ac7da.png"},27503:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML18-5d4186bafc7685bbdb9838a38ff96393.png"},36619:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML19-e424d1bd6e85298967bb1680c6713643.png"},12181:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML2-b88ab5331da6850050d3bdc2e29e0224.png"},90745:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML20-78ea4fb5fe53ef4fb6c826517b218533.png"},84280:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML21-e96d50d6b9c587b71220461098459175.png"},67919:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML22-630e92e9c9422a3d516085766af00840.png"},6991:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML23-947d036a20b59253157372519c149f91.png"},62772:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML24-2ebfa04dfad9edff564ed1af0a0f1090.png"},79949:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML3-980285de43e221c4754358f0d095c165.png"},29962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML4-df61701732d7a04a632ae489776041de.png"},50747:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML5-e8e490ee53127d32e35266b27172df07.png"},52365:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML6-787a5dba2a61ba981a2f78b4e84318f1.png"},54383:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML7-93d6b3810967b1835920afcd3856c21a.png"},61512:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML8-798f0f507c461ecc20e7f40ec9825459.png"},98621:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/AzureSAML9-5a79b3928b71f7c1acb8e81c7d8fe07d.png"},57803:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/SAMLIntegration-ea71af4655807dc1ee2d23cdbef1ed6f.png"}}]); \ No newline at end of file diff --git a/assets/js/40be41a9.6445dfd1.js b/assets/js/40be41a9.6445dfd1.js deleted file mode 100644 index 6abf669aa..000000000 --- a/assets/js/40be41a9.6445dfd1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6325],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),u=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(a),m=n,g=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return a?r.createElement(g,o(o({ref:t},p),{},{components:a})):r.createElement(g,o({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:n,o[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_label:"Azure SAML"},o="Azure SAML",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/AzureSAML",id:"reportportal-configuration/authorization/SAMLProvider/AzureSAML",title:"Azure SAML",description:"SAML plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/AzureSAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"Azure SAML"},sidebar:"defaultSidebar",previous:{title:"SAML Provider",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/"},next:{title:"Okta SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML"}},s={},u=[{value:"Configure SAML on Azure side",id:"configure-saml-on-azure-side",level:2},{value:"Create organization in Azure",id:"create-organization-in-azure",level:3},{value:"Create your application in Azure",id:"create-your-application-in-azure",level:3},{value:"Assign users to the application in Azure",id:"assign-users-to-the-application-in-azure",level:3},{value:"Configure Single sign-on on Azure",id:"configure-single-sign-on-on-azure",level:3},{value:"Basic SAML Configuration",id:"basic-saml-configuration",level:3},{value:"Add Azure attributes",id:"add-azure-attributes",level:3},{value:"Configure SAML on ReportPortal side",id:"configure-saml-on-reportportal-side",level:2},{value:"Synchronize Azure SAML and ReportPortal",id:"synchronize-azure-saml-and-reportportal",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...i}=e;return(0,n.kt)(c,(0,r.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"azure-saml"},"Azure SAML"),(0,n.kt)("p",null,"SAML plugin is available in ReportPortal on the Plugins page."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,n.kt)("p",null,"Login to ReportPortal via Azure SAML is available starting from version 5.7 (SAML Okta was implemented in versions before 5.7)."),(0,n.kt)("p",null,"Azure SAML is a useful authorization method for big companies with 100+ employees, especially if this organization is already presented in Azure service. The main benefit here is no need for manual account creation. Users can log in to the ReportPortal using Azure SAML in an uncomplicated way: select login with SAML, then choose Azure, and upon login users\u2019 data is synchronized with ReportPortal automatically."),(0,n.kt)("p",null,"If your organization is using Azure SAML and some employees left, there is no need to remove their accounts from ReportPortal and from other Azure applications \u2013 just clearing their accounts in Azure will be enough."),(0,n.kt)("p",null,"To configure authorization via Azure SAML we need to synchronize Azure and ReportPortal."),(0,n.kt)("p",null,"Firstly, configure SAML on Azure side."),(0,n.kt)("h2",{id:"configure-saml-on-azure-side"},"Configure SAML on Azure side"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Log in to ",(0,n.kt)("a",{parentName:"p",href:"https://portal.azure.com"},"Azure portal")," using your organization creds.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click ",(0,n.kt)("inlineCode",{parentName:"p"},"App Services"),"."))),(0,n.kt)("media-view",{src:a(86100),alt:"App Services button"}),(0,n.kt)("ol",{start:3},(0,n.kt)("li",{parentName:"ol"},"Click ",(0,n.kt)("inlineCode",{parentName:"li"},"View")," in the ",(0,n.kt)("inlineCode",{parentName:"li"},"Manage Azure Active Directory")," section.")),(0,n.kt)("media-view",{src:a(12181),alt:"View button"}),(0,n.kt)("ol",{start:4},(0,n.kt)("li",{parentName:"ol"},"Click ",(0,n.kt)("inlineCode",{parentName:"li"},"Manage Tenants"),".")),(0,n.kt)("media-view",{src:a(79949),alt:"Manage Tenants"}),(0,n.kt)("h3",{id:"create-organization-in-azure"},"Create organization in Azure"),(0,n.kt)("ol",{start:5},(0,n.kt)("li",{parentName:"ol"},"If you haven\u2019t configured organization in Azure yet, click ",(0,n.kt)("inlineCode",{parentName:"li"},"Create"),".")),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"if you have configured organization in Azure, please, go to step 9.")),(0,n.kt)("media-view",{src:a(29962),alt:"Configure organization"}),(0,n.kt)("ol",{start:6},(0,n.kt)("li",{parentName:"ol"},"Select a tenant type (",(0,n.kt)("inlineCode",{parentName:"li"},"Azure Active Directory"),") and click ",(0,n.kt)("inlineCode",{parentName:"li"},"Next: Configuration >")," button.")),(0,n.kt)("media-view",{src:a(50747),alt:"Select a tenant type"}),(0,n.kt)("ol",{start:7},(0,n.kt)("li",{parentName:"ol"},"Fill in the necessary fields and click ",(0,n.kt)("inlineCode",{parentName:"li"},"Next: Review + create >")," button.")),(0,n.kt)("media-view",{src:a(52365),alt:"Create a tenant"}),(0,n.kt)("ol",{start:8},(0,n.kt)("li",{parentName:"ol"},"Pass the Captcha verification and click the ",(0,n.kt)("inlineCode",{parentName:"li"},"Create")," button.")),(0,n.kt)("media-view",{src:a(54383),alt:"Captcha verification"}),(0,n.kt)("h3",{id:"create-your-application-in-azure"},"Create your application in Azure"),(0,n.kt)("ol",{start:9},(0,n.kt)("li",{parentName:"ol"},"After the creation of an organization go to the ",(0,n.kt)("inlineCode",{parentName:"li"},"Enterprise Applications")," section.")),(0,n.kt)("media-view",{src:a(61512),alt:"Enterprise Applications section"}),(0,n.kt)("ol",{start:10},(0,n.kt)("li",{parentName:"ol"},"Click ",(0,n.kt)("inlineCode",{parentName:"li"},"New application"),".")),(0,n.kt)("media-view",{src:a(98621),alt:"New application button"}),(0,n.kt)("ol",{start:11},(0,n.kt)("li",{parentName:"ol"},"Click ",(0,n.kt)("inlineCode",{parentName:"li"},"Create your own application"),".")),(0,n.kt)("media-view",{src:a(67524),alt:"Create your own application"}),(0,n.kt)("ol",{start:12},(0,n.kt)("li",{parentName:"ol"},"Enter the name of your application, choose ",(0,n.kt)("inlineCode",{parentName:"li"},"Integrate any other application you don't find in the gallery (Non-gallery)")," bullet and click ",(0,n.kt)("inlineCode",{parentName:"li"},"Create")," button.")),(0,n.kt)("media-view",{src:a(57140),alt:"The name of your application"}),(0,n.kt)("h3",{id:"assign-users-to-the-application-in-azure"},"Assign users to the application in Azure"),(0,n.kt)("ol",{start:13},(0,n.kt)("li",{parentName:"ol"},"Assign users (e.g., yourself) to this application. Please, follow the next screenshots:")),(0,n.kt)("media-view",{src:a(31005),alt:"Assign users to your application"}),(0,n.kt)("media-view",{src:a(94962),alt:"Add user/group"}),(0,n.kt)("media-view",{src:a(63431),alt:"Add assignment"}),(0,n.kt)("h3",{id:"configure-single-sign-on-on-azure"},"Configure Single sign-on on Azure"),(0,n.kt)("ol",{start:14},(0,n.kt)("li",{parentName:"ol"},"Go to the ",(0,n.kt)("inlineCode",{parentName:"li"},"Single sign-on")," section.")),(0,n.kt)("media-view",{src:a(96260),alt:"Single sign-on section"}),(0,n.kt)("ol",{start:15},(0,n.kt)("li",{parentName:"ol"},"Choose SAML.")),(0,n.kt)("media-view",{src:a(73798),alt:"Select a Single sign-on method"}),(0,n.kt)("h3",{id:"basic-saml-configuration"},"Basic SAML Configuration"),(0,n.kt)("ol",{start:16},(0,n.kt)("li",{parentName:"ol"},"Configure ",(0,n.kt)("inlineCode",{parentName:"li"},"Basic SAML Configuration")," settings as follows:")),(0,n.kt)("media-view",{src:a(15055),alt:"Basic SAML Configuration"}),(0,n.kt)("h3",{id:"add-azure-attributes"},"Add Azure attributes"),(0,n.kt)("ol",{start:17},(0,n.kt)("li",{parentName:"ol"},"Edit ",(0,n.kt)("inlineCode",{parentName:"li"},"Attributes & Claims")," settings and add ",(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"email")),", ",(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"firstName"))," and ",(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("em",{parentName:"strong"},"lastName"))," attributes (default Azure attributes have ugly format). Please follow the next screenshots:")),(0,n.kt)("media-view",{src:a(27503),alt:"Edit Attributes & Claims settings"}),(0,n.kt)("media-view",{src:a(36619),alt:"Add new claim"}),(0,n.kt)("media-view",{src:a(90745),alt:"Manage claim"}),(0,n.kt)("p",null,"SAML configuration is completed on Azure side after adding these attributes."),(0,n.kt)("p",null,"Lastly, configure SAML on ReportPortal side."),(0,n.kt)("h2",{id:"configure-saml-on-reportportal-side"},"Configure SAML on ReportPortal side"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Log in to ",(0,n.kt)("strong",{parentName:"p"},"ReportPortal")," as Admin.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Open Menu at the bottom and choose ",(0,n.kt)("inlineCode",{parentName:"p"},"Administrate")," section."))),(0,n.kt)("media-view",{src:a(84280),alt:"Administrate section in our test automation reporting platform"}),(0,n.kt)("ol",{start:3},(0,n.kt)("li",{parentName:"ol"},"Select ",(0,n.kt)("inlineCode",{parentName:"li"},"Plugins"),".")),(0,n.kt)("media-view",{src:a(67919),alt:"Plugins section in our continuous testing platform"}),(0,n.kt)("ol",{start:4},(0,n.kt)("li",{parentName:"ol"},"Open ",(0,n.kt)("inlineCode",{parentName:"li"},"SAML"),".")),(0,n.kt)("media-view",{src:a(6991),alt:"SAML plugin"}),(0,n.kt)("ol",{start:5},(0,n.kt)("li",{parentName:"ol"},"Click the ",(0,n.kt)("inlineCode",{parentName:"li"},"Add integration")," button.")),(0,n.kt)("media-view",{src:a(62772),alt:"Add integration"}),(0,n.kt)("h2",{id:"synchronize-azure-saml-and-reportportal"},"Synchronize Azure SAML and ReportPortal"),(0,n.kt)("ol",{start:6},(0,n.kt)("li",{parentName:"ol"},"Synchronize Azure SAML and ReportPortal as follows:")),(0,n.kt)("media-view",{src:a(57803),alt:"Configure Azure SAML in our test automation dashboard"}),(0,n.kt)("p",null,"Finally, you can log in to ReportPortal using Azure SAML."))}d.isMDXComponent=!0},86100:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML1-92b042929d4e97ced259a68ff9c48595.png"},67524:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML10-6a23fd3b721c2602c55c7ed2a0be6bbc.png"},57140:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML11-1004dc6e53af486ffca2d4e69c810f18.png"},31005:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML12-ef24287d428faf1c1225268f31276a06.png"},94962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML13-527d6583c9f0fc9663ad826bf699054f.png"},63431:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML14-8f34adbfd9f99384a1170e5ad3c1650e.png"},96260:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML15-43590b9488a24255e9c31db9384c3604.png"},73798:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML16-7de84a049daded06d2efc5e1aae1c09c.png"},15055:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML17-31dc030807624856b9769c82af7ac7da.png"},27503:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML18-5d4186bafc7685bbdb9838a38ff96393.png"},36619:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML19-e424d1bd6e85298967bb1680c6713643.png"},12181:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML2-b88ab5331da6850050d3bdc2e29e0224.png"},90745:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML20-78ea4fb5fe53ef4fb6c826517b218533.png"},84280:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML21-e96d50d6b9c587b71220461098459175.png"},67919:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML22-630e92e9c9422a3d516085766af00840.png"},6991:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML23-947d036a20b59253157372519c149f91.png"},62772:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML24-2ebfa04dfad9edff564ed1af0a0f1090.png"},79949:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML3-980285de43e221c4754358f0d095c165.png"},29962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML4-df61701732d7a04a632ae489776041de.png"},50747:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML5-e8e490ee53127d32e35266b27172df07.png"},52365:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML6-787a5dba2a61ba981a2f78b4e84318f1.png"},54383:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML7-93d6b3810967b1835920afcd3856c21a.png"},61512:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML8-798f0f507c461ecc20e7f40ec9825459.png"},98621:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/AzureSAML9-5a79b3928b71f7c1acb8e81c7d8fe07d.png"},57803:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/SAMLIntegration-ea71af4655807dc1ee2d23cdbef1ed6f.png"}}]); \ No newline at end of file diff --git a/assets/js/5668619f.3177252b.js b/assets/js/5668619f.3177252b.js new file mode 100644 index 000000000..2fccc17b2 --- /dev/null +++ b/assets/js/5668619f.3177252b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[225],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return a?n.createElement(h,r(r({ref:t},c),{},{components:a})):n.createElement(h,r({ref:t},c))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=a(87462),o=(a(67294),a(3905));const i={sidebar_position:3,sidebar_label:"Project configuration"},r="Project configuration",l={unversionedId:"reportportal-configuration/ProjectConfiguration",id:"reportportal-configuration/ProjectConfiguration",title:"Project configuration",description:"To see the list of available projects and open a project, click the drop-down list in the top of the left menu.",source:"@site/docs/reportportal-configuration/ProjectConfiguration.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/ProjectConfiguration",permalink:"/docs/reportportal-configuration/ProjectConfiguration",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/ProjectConfiguration.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Project configuration"},sidebar:"defaultSidebar",previous:{title:"Creation of project and adding users",permalink:"/docs/reportportal-configuration/CreationOfProjectAndAddingUsers"},next:{title:"ReportPortal jobs configuration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration"}},s={},p=[{value:"Project settings",id:"project-settings",level:2},{value:"General settings",id:"general-settings",level:3},{value:"Integrations",id:"integrations",level:3},{value:"E-mail notifications",id:"e-mail-notifications",level:3},{value:"Custom defect types",id:"custom-defect-types",level:3},{value:"Auto-analysis and Pattern analysis",id:"auto-analysis-and-pattern-analysis",level:3},{value:"Demo data",id:"demo-data",level:3},{value:"Management of users on the project",id:"management-of-users-on-the-project",level:2},{value:"Invite user on a project",id:"invite-user-on-a-project",level:3},{value:"Project role",id:"project-role",level:3},{value:"Edit project role",id:"edit-project-role",level:3},{value:"Unassign user from the project",id:"unassign-user-from-the-project",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(u,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"project-configuration"},"Project configuration"),(0,o.kt)("p",null,"To see the list of available projects and open a project, click the drop-down list in the top of the left menu."),(0,o.kt)("p",null,"ReportPortal supports customization of the default settings."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nUsers with the Administrator role can edit project settings on the project "Settings" page in Administrate section and on the Project space.\nUsers with the ',(0,o.kt)("inlineCode",{parentName:"p"},"PROJECT_MANAGER")," role can edit the settings on the project space only.\n",(0,o.kt)("inlineCode",{parentName:"p"},"MEMBER"),"/ ",(0,o.kt)("inlineCode",{parentName:"p"},"OPERATOR"),"/ ",(0,o.kt)("inlineCode",{parentName:"p"},"CUSTOMER")," can only view applied project settings."),(0,o.kt)("h2",{id:"project-settings"},"Project settings"),(0,o.kt)("p",null,'To go to the project settings page, click the "Project Settings" icon in the left menu.'),(0,o.kt)("p",null,"The project configuration page will be opened."),(0,o.kt)("p",null,'The project settings are divided into following tabs: "General", "Integrations", "Notifications", "Defect Types", "Analyzer", "Pattern Analysis", "Demo Data" and "Quality Gates" (if you have our ',(0,o.kt)("a",{parentName:"p",href:"/category/quality-gates"},"premium feature"),")."),(0,o.kt)("h3",{id:"general-settings"},"General settings"),(0,o.kt)("p",null,"Our test automation results dashboard allows you to control the amount of the stored data (launches, test items, logs and attachments) by removing outdated elements using Quartz jobs.\nFunctionality of data removing depends on two configurations. "),(0,o.kt)("p",null,"The first one is API service back-end environment variables that are described in ",(0,o.kt)("a",{parentName:"p",href:"./ReportPortalJobsConfiguration"},"ReportPortal jobs configuration")),(0,o.kt)("p",null,'The second one is the "General" tab you can configure parameter of data storage in ReportPortal for this project:'),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Name \u2013 is a disabled field as the project name cannot be changed.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Launch inactivity timeout")," - this parameter specifies the scheduled time for a job to interrupt inactive launches (launches which have the status 'in progress', but there is no any items during the chosen period). There are six options: "),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"1 hour, "),(0,o.kt)("li",{parentName:"ul"},"3 hours, "),(0,o.kt)("li",{parentName:"ul"},"6 hours, "),(0,o.kt)("li",{parentName:"ul"},"12 hours, "),(0,o.kt)("li",{parentName:"ul"},"1 day, "),(0,o.kt)("li",{parentName:"ul"},"7 days."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Keep launches")," - this parameter specifies how long the system will keep old launches in the data base. There are five options:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")))),(0,o.kt)("p",null,"After this period a launch will be deleted, and you can not see it in ReportPortal."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Keep logs")," - this parameter specifies how long the system will keep old logs in launches. Related launch structures will be saved, to keep statistics. There are five options:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Keep attachments")," - this parameter specifies how long to keep binary data (screenshots, files, video, and others attachments)\nin the system. There are five options:"),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")))),(0,o.kt)("media-view",{thumbnail:a(87194),src:"https://youtu.be/ih-ECyC29f0",alt:"Project settings in our real time dashboard open source",type:"video"}),(0,o.kt)("h3",{id:"integrations"},"Integrations"),(0,o.kt)("p",null,'The "Integration" tab can allow the project to connect ReportPortal with external systems or rewrite global configurations for third party systems.'),(0,o.kt)("p",null,"For more information on this topic, please refer to ",(0,o.kt)("a",{parentName:"p",href:"./IntegrationViaPlugin"},"Integration with external systems"),"."),(0,o.kt)("h3",{id:"e-mail-notifications"},"E-mail notifications"),(0,o.kt)("p",null,'The "Notifications" tab provides the administrator with the ability to activate e-mail notifications on the project.'),(0,o.kt)("p",null,"ReportPortal provides a way to add multiple rules with specific conditions. The Notification rule should be unique per project, have a unique parameter set, and specify recipients. For Example: In case, Launch names, attributes)."),(0,o.kt)("p",null,"Permissions:\nUsers with ",(0,o.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR"),' a role can configure "Notifications" in the Administrate section.\nUsers with ',(0,o.kt)("inlineCode",{parentName:"p"},"PROJECT_MANAGER")," roles can edit the settings on the project space only."),(0,o.kt)("p",null,"To do that, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login to the ReportPortal."),(0,o.kt)("li",{parentName:"ol"},"Navigate to the Project -",">",' Project "Settings" page.'),(0,o.kt)("li",{parentName:"ol"},'Open the "Notifications" tab and click on a button "Create new notification rule" '),(0,o.kt)("li",{parentName:"ol"},'Enter your email into the "From" field. This email will be used as a notification sender.'),(0,o.kt)("li",{parentName:"ol"},'Select recipients. To do that, start typing any symbols into the "Recipients" field.\nYou can select an item from the auto-complete tool-tip using the\nkeyboard (use the "Up" and "Down" arrows and "Enter" button). You can also enter a custom email into the "Recipients" field. To add a custom\nemail, just enter the email address and press "Enter".'),(0,o.kt)("li",{parentName:"ol"},'The "Launch owner" is selected by default. Uncheck "Launch owner" to exclude\nhim/her from the notification.'),(0,o.kt)("li",{parentName:"ol"},'Select the "In Case" setting. To do that, select one of the following options from the "In Case" drop-down.'),(0,o.kt)("li",{parentName:"ol"},'Select launches (optional). To do that, start typing any symbols into the "Launch names" field.\nYou can select an item from the auto-complete tool-tip using the "Up" and "Down" arrows and clicking "Enter" on the keyboard. This is an alternate way you can add a new launch name that does not exist on the project. Several launches names can be selected; the recipients will receive notifications when each of them finishes.'),(0,o.kt)("li",{parentName:"ol"},'Then Select attributes (optional). To do that, start typing any symbols into the "Attribute key" and "Attribute value" fields. The system will suggest the results in the drop-down, after at least 1 symbol is provided. It is also possible to add a new attribute (that does not exist on the project). Several attributes can be selected at once; the corresponding recipients will receive notifications about the launches that have all the specified attributes.'),(0,o.kt)("li",{parentName:"ol"},"Switch ON Notifications"),(0,o.kt)("li",{parentName:"ol"},'The system will activate the "Email notification" option. After the launch is finished, the recipients will receive a notification via email.'),(0,o.kt)("li",{parentName:"ol"},"Add more rules, if needed. Each Notification rule should be unique."),(0,o.kt)("li",{parentName:"ol"},"You can edit/ copy/enable/disable notification rule by clicking on the appropriate controls on the notification rule. ")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Users with a ",(0,o.kt)("inlineCode",{parentName:"p"},"MEMBER"),"/ ",(0,o.kt)("inlineCode",{parentName:"p"},"OPERATOR"),"/ ",(0,o.kt)("inlineCode",{parentName:"p"},"CUSTOMER")," project role will not have the capability to edit the project settings, however, they do have the permissions to view them.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"For using this functionality be sure that the E-mail server is configured.")),(0,o.kt)("h3",{id:"custom-defect-types"},"Custom defect types"),(0,o.kt)("p",null,'The "Defect Types" tab allows users with permissions to create custom defect types as subtypes of default defects on the project.'),(0,o.kt)("p",null,"After Installation the ReportPortal by default sets-up the following defect types groups:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"To investigate")," - means that no investigation was performed on this defect yet."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Product Bug")," - defect was investigated and a production bug was found as a cause for this test failure."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Automation Bug")," - defect was investigated and an automation test is not correct."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"System Issue")," - defect was investigated and it turns out that it is a system-level issue, like the app, crashed and caused the test to fail."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"No Defect")," - defect was investigated and defined as not a defect.")),(0,o.kt)("p",null,"ReportPortal allows the use of existing defect types (Product Bug, Automation Bug, System Issue, No Defect, To investigate) and or to create custom ones on the project settings page."),(0,o.kt)("p",null,"To create custom defect types, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login into the ReportPortal."),(0,o.kt)("li",{parentName:"ol"},"Navigate to Projects -",">",' Project "Settings" page.'),(0,o.kt)("li",{parentName:"ol"},'Open "Defect Types" tab '),(0,o.kt)("li",{parentName:"ol"},'Click "Add Defect Type" button under any default defect type'),(0,o.kt)("li",{parentName:"ol"},"Add new defect type form will appear "),(0,o.kt)("li",{parentName:"ol"},'Enter "Defect name" and "Abbreviation", select color for defect presentation on the launches grid and widgets. '),(0,o.kt)("li",{parentName:"ol"},"Submit form. You will see an added defect type on the chart preview.")),(0,o.kt)("p",null,"Add more custom defects, if you need it. The system allows us to add up to ten subtypes of each default defect type."),(0,o.kt)("p",null,"Now you can do bug triage and set defect types as default Product Bug/Automation Bug/System Issue/No Defect/TO investigate or custom defects. All of them will be available to select on the Defect Type editor.\nFor more information refer to the ",(0,o.kt)("a",{parentName:"p",href:"/work-with-reports/InvestigationOfFailure"},"Investigation of failure")," topic."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Default defects cannot be modified and or deleted from the system. Custom defect types can be deleted at any time."),(0,o.kt)("p",{parentName:"admonition"},"You can create up to 15 custom defect types for each group.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you have deleted a custom type from the system, all test executions with this deleted defect type get the parent type of the group in which deleted defect has belonged. Statistics updates in all launches where a deleted defect was present.",(0,o.kt)("br",{parentName:"p"}),"\n",'For example, if you create a custom "Product Bug-1" as a subtype of "Product Bugs" group and investigate a few\ndefects as "Product Bug-1", then remove "Product Bug-1" from your project, all investigated "Product Bug-1" defects\nwill be shown as "Product Bug".')),(0,o.kt)("media-view",{thumbnail:a(94410),src:"https://youtu.be/CcU2_dEu59k",alt:"Defect Type Configuration for clear test execution report",type:"video"}),(0,o.kt)("h3",{id:"auto-analysis-and-pattern-analysis"},"Auto-analysis and Pattern analysis"),(0,o.kt)("p",null,'The "Auto-Analysis" and "Pattern analysis" tabs can allow reducing test failure analysis routine on the project.'),(0,o.kt)("p",null,"For more information on this topic, please refer to ",(0,o.kt)("a",{parentName:"p",href:"/category/analysis"},"Analysis"),"."),(0,o.kt)("h3",{id:"demo-data"},"Demo data"),(0,o.kt)("p",null,'The "Demo Data" tab provides a way to generate demo data on the project.'),(0,o.kt)("p",null,"The generated data could demonstrate how the launches, filter, and dashboard will look. On the other hand, demo data could be\nmodified or removed without any effect of your real objects."),(0,o.kt)("media-view",{thumbnail:a(2422),src:"https://youtu.be/bXHY0_sXAF8",alt:"Generate Demo Data with test report&analytics dashboard",type:"video"}),(0,o.kt)("h2",{id:"management-of-users-on-the-project"},"Management of users on the project"),(0,o.kt)("p",null,'On the "Project Members" page users with the appropriate roles can invite new members.'),(0,o.kt)("p",null,"Permissions: "),(0,o.kt)("p",null,"User with ",(0,o.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," role and users with project role ",(0,o.kt)("inlineCode",{parentName:"p"},"PROJECT_MANAGER"),"."),(0,o.kt)("h3",{id:"invite-user-on-a-project"},"Invite user on a project"),(0,o.kt)("p",null,'To invite a user on the "Project Members" page, perform the following steps:'),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as with the PROJECT_MANAGER project role."),(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Project Members" page on the left menu.'),(0,o.kt)("li",{parentName:"ol"},'Click the "Invite User" tab.'),(0,o.kt)("li",{parentName:"ol"},"Enter the email address of the user in case he/she is not present in the ReportPortal database or enter his/her login name."),(0,o.kt)("li",{parentName:"ol"},"In case the user is already available in the ReportPortal, his/her name will appear in the suggestion list.\nIf not, the Admin should enter the correct email address."),(0,o.kt)("li",{parentName:"ol"},"Select an appropriate role."),(0,o.kt)("li",{parentName:"ol"},"Then click 'Invite'."),(0,o.kt)("li",{parentName:"ol"},"In case the user is already available in ReportPortal s/he will be assigned to the project\nIf not, the letter with an invitation link will be sent to the user email address."),(0,o.kt)("li",{parentName:"ol"},"The user will receive an email with the link to the registration.\nWhen the user clicks the link, he/she will see a registration form."),(0,o.kt)("li",{parentName:"ol"},'The user needs to fill in the registration form and click the "Register"\nbutton to complete the registration. '),(0,o.kt)("li",{parentName:"ol"},'The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT\nMANAGER project role. ')),(0,o.kt)("media-view",{thumbnail:a(37802),src:"https://youtu.be/VOk80XZHpWc",alt:"Invite User From Project Members Page",type:"video"}),(0,o.kt)("h3",{id:"project-role"},"Project role"),(0,o.kt)("p",null,"Every user is given a specific Project role within a specific project."),(0,o.kt)("p",null,'Depends on the role, the user is able or not able to perform some actions. For more details, please see the "Permissions map".'),(0,o.kt)("p",null,"There are 4 possible Project roles in ReportPortal:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"PROJECT MANAGER")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"MEMBER")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"OPERATOR")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"CUSTOMER"))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The ",(0,o.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," has all privileges on the project.")),(0,o.kt)("h3",{id:"edit-project-role"},"Edit project role"),(0,o.kt)("p",null,"To edit the project role, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login into the ReportPortal as a user with ",(0,o.kt)("inlineCode",{parentName:"li"},"PROJECT_MANAGER")," project role."),(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Project Members" page on the left menu.'),(0,o.kt)("li",{parentName:"ol"},'Select a new value from the "Project Role" drop-down for the user. - The new project role will be automatically saved.')),(0,o.kt)("media-view",{thumbnail:a(73787),src:"https://youtu.be/DF38BbE5vws",alt:"Edit Project Role From Project Members Page",type:"video"}),(0,o.kt)("h3",{id:"unassign-user-from-the-project"},"Unassign user from the project"),(0,o.kt)("p",null,"Depending on the project needs the assignment could be removed.\nTo unassign the assignment for the user on the project, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Login into the ReportPortal as a user with ",(0,o.kt)("inlineCode",{parentName:"li"},"PROJECT_MANAGER")," project role."),(0,o.kt)("li",{parentName:"ol"},'Navigate to the "Project Members" page on the left menu.'),(0,o.kt)("li",{parentName:"ol"},"Find the required member."),(0,o.kt)("li",{parentName:"ol"},"Click the 'Unassign' button for the user."),(0,o.kt)("li",{parentName:"ol"},"Confirm the action in the popup."),(0,o.kt)("li",{parentName:"ol"},"The user will be unassigned from the current project but will stay in the system.")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Invite user, Assign/Unassign internal user to/from the project, change user's role on a project action can be done for a user\nwith a similar and lower role only.")))}d.isMDXComponent=!0},94410:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/CustomDefectTypes-bf0065f64620b1ddd1c8d7f9ebb96978.png"},2422:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/DemoData-f9ebc1074ae52bb91fb962299c5f6ba2.png"},73787:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/EditProjectRole-511e7a213727f82d0387d78ac1dfd3c8.png"},37802:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/InviteUserProjectMembers-8e699a1dac0cbdb4c4b60bb32f4644ae.png"},87194:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/ProjectSettingsGeneral-20664c531eb7e0ad7aa63ff3d8126419.png"}}]); \ No newline at end of file diff --git a/assets/js/5668619f.72782681.js b/assets/js/5668619f.72782681.js deleted file mode 100644 index f6da1ae49..000000000 --- a/assets/js/5668619f.72782681.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[225],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),m=o,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return a?n.createElement(h,r(r({ref:t},c),{},{components:a})):n.createElement(h,r({ref:t},c))}));function h(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=a(87462),o=(a(67294),a(3905));const i={sidebar_position:3,sidebar_label:"Project configuration"},r="Project configuration",l={unversionedId:"reportportal-configuration/ProjectConfiguration",id:"reportportal-configuration/ProjectConfiguration",title:"Project configuration",description:"To see the list of available projects and open a project, click the drop-down list in the top of the left menu.",source:"@site/docs/reportportal-configuration/ProjectConfiguration.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/ProjectConfiguration",permalink:"/docs/reportportal-configuration/ProjectConfiguration",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/ProjectConfiguration.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Project configuration"},sidebar:"defaultSidebar",previous:{title:"Creation of project and adding users",permalink:"/docs/reportportal-configuration/CreationOfProjectAndAddingUsers"},next:{title:"ReportPortal jobs configuration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration"}},s={},p=[{value:"Project settings",id:"project-settings",level:2},{value:"General settings",id:"general-settings",level:3},{value:"Integrations",id:"integrations",level:3},{value:"E-mail notifications",id:"e-mail-notifications",level:3},{value:"Custom defect types",id:"custom-defect-types",level:3},{value:"Auto-analysis and Pattern analysis",id:"auto-analysis-and-pattern-analysis",level:3},{value:"Demo data",id:"demo-data",level:3},{value:"Management of users on the project",id:"management-of-users-on-the-project",level:2},{value:"Invite user on a project",id:"invite-user-on-a-project",level:3},{value:"Project role",id:"project-role",level:3},{value:"Edit project role",id:"edit-project-role",level:3},{value:"Unassign user from the project",id:"unassign-user-from-the-project",level:3}],c={toc:p},u="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(u,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"project-configuration"},"Project configuration"),(0,o.kt)("p",null,"To see the list of available projects and open a project, click the drop-down list in the top of the left menu."),(0,o.kt)("p",null,"ReportPortal supports customization of the default settings."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nUsers with the Administrator role can edit project settings on the project "Settings" page in Administrate section and on the Project space.\nUsers with the PROJECT_MANAGER role can edit the settings on the project space only.\nMEMBER/ OPERATOR/ CUSTOMER can only view applied project settings.'),(0,o.kt)("h2",{id:"project-settings"},"Project settings"),(0,o.kt)("p",null,'To go to the project settings page, click the "Project Settings" icon in the left menu.'),(0,o.kt)("p",null,"The project configuration page will be opened."),(0,o.kt)("p",null,'The project settings are divided into following tabs: "General", "Integrations", "Notifications", "Defect Types", "Analyzer", "Pattern Analysis", "Demo Data" and "Quality Gates" (if you have our ',(0,o.kt)("a",{parentName:"p",href:"/category/quality-gates"},"premium feature"),")."),(0,o.kt)("h3",{id:"general-settings"},"General settings"),(0,o.kt)("p",null,"Our test automation results dashboard allows you to control the amount of the stored data (launches, test items, logs and attachments) by removing outdated elements using Quartz jobs.\nFunctionality of data removing depends on two configurations. "),(0,o.kt)("p",null,"The first one is API service back-end environment variables that are described in ",(0,o.kt)("a",{parentName:"p",href:"./ReportPortalJobsConfiguration"},"ReportPortal jobs configuration")),(0,o.kt)("p",null,'The second one is the "General" tab you can configure parameter of data storage in ReportPortal for this project:'),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Name \u2013 is a disabled field as the project name cannot be changed.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Launch inactivity timeout")," - this parameter specifies the scheduled time for a job to interrupt inactive launches (launches which have the status 'in progress', but there is no any items during the chosen period). There are six options: "))),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 hour, "),(0,o.kt)("li",{parentName:"ul"},"3 hours, "),(0,o.kt)("li",{parentName:"ul"},"6 hours, "),(0,o.kt)("li",{parentName:"ul"},"12 hours, "),(0,o.kt)("li",{parentName:"ul"},"1 day, "),(0,o.kt)("li",{parentName:"ul"},"7 days.")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Keep launches")," - this parameter specifies how long the system will keep old launches in the data base. There are five options:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")),(0,o.kt)("p",null,"After this period a launch will be deleted, and you can not see it in ReportPortal."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Keep logs")," - this parameter specifies how long the system will keep old logs in launches. Related launch structures will be saved, to keep statistics. There are five options:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Keep attachments")," - this parameter specifies how long to keep binary data (screenshots, files, video, and others attachments)\nin the system. There are five options:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"7 days,"),(0,o.kt)("li",{parentName:"ul"},"14 days,"),(0,o.kt)("li",{parentName:"ul"},"21 days,"),(0,o.kt)("li",{parentName:"ul"},"30 days,"),(0,o.kt)("li",{parentName:"ul"},"90 days.")),(0,o.kt)("media-view",{thumbnail:a(87194),src:"https://youtu.be/ih-ECyC29f0",alt:"Project settings in our real time dashboard open source",type:"video"}),(0,o.kt)("h3",{id:"integrations"},"Integrations"),(0,o.kt)("p",null,'The "Integration" tab can allow the project to connect ReportPortal with external systems or rewrite global configurations for third party systems.'),(0,o.kt)("p",null,"For more information on this topic, please refer to ",(0,o.kt)("a",{parentName:"p",href:"./IntegrationViaPlugin"},"Integration with external systems"),"."),(0,o.kt)("h3",{id:"e-mail-notifications"},"E-mail notifications"),(0,o.kt)("p",null,'The "Notifications" tab provides the administrator with the ability to activate e-mail notifications on the project.'),(0,o.kt)("p",null,"ReportPortal provides a way to add multiple rules with specific conditions. The Notification rule should be unique per project, have a unique parameter set, and specify recipients. For Example: In case, Launch names, attributes)."),(0,o.kt)("p",null,'Permissions:\nUsers with Administrator a role can configure "Notifications" in the Administrate section.\nUsers with PROJECT_MANAGER roles can edit the settings on the project space only.'),(0,o.kt)("p",null,"To do that, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login to the ReportPortal.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Navigate to the Project -",">",' Project "Settings" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Open the "Notifications" tab and click on a button "Create new notification rule" ')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Enter your email into the "From" field. This email will be used as a notification sender.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select recipients. To do that, start typing any symbols into the "Recipients" field.\nYou can select an item from the auto-complete tool-tip using the\nkeyboard (use the "Up" and "Down" arrows and "Enter" button). You can also enter a custom email into the "Recipients" field. To add a custom\nemail, just enter the email address and press "Enter".')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Launch owner" is selected by default. Uncheck "Launch owner" to exclude\nhim/her from the notification.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select the "In Case" setting. To do that, select one of the following options from the "In Case" drop-down.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select launches (optional). To do that, start typing any symbols into the "Launch names" field.\nYou can select an item from the auto-complete tool-tip using the "Up" and "Down" arrows and clicking "Enter" on the keyboard. This is an alternate way you can add a new launch name that does not exist on the project. Several launches names can be selected; the recipients will receive notifications when each of them finishes.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Then Select attributes (optional). To do that, start typing any symbols into the "Attribute key" and "Attribute value" fields. The system will suggest the results in the drop-down, after at least 1 symbol is provided. It is also possible to add a new attribute (that does not exist on the project). Several attributes can be selected at once; the corresponding recipients will receive notifications about the launches that have all the specified attributes.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Switch ON Notifications")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The system will activate the "Email notification" option. After the launch is finished, the recipients will receive a notification via email.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add more rules, if needed. Each Notification rule should be unique.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"You can edit/ copy/enable/disable notification rule by clicking on the appropriate controls on the notification rule. "))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Users with a MEMBER/ OPERATOR/ CUSTOMER project role will not have the capability to edit the project settings, however, they do have the permissions to view them.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"For using this functionality be sure that the E-mail server is configured.")),(0,o.kt)("h3",{id:"custom-defect-types"},"Custom defect types"),(0,o.kt)("p",null,'The "Defect Types" tab allows users with permissions to create custom defect types as subtypes of default defects on the project.'),(0,o.kt)("p",null,"After Installation the ReportPortal by default sets-up the following defect types groups:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"To investigate")," - means that no investigation was performed on this defect\nyet.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"Product Bug")," - defect was investigated and a production bug was found as a\ncause for this test failure.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"Automation Bug")," - defect was investigated and an automation test is not\ncorrect.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"System Issue")," - defect was investigated and it turns out that it is a system-level\nissue, like the app, crashed and caused the test to fail.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," ",(0,o.kt)("em",{parentName:"p"},"No Defect")," - defect was investigated and defined as not a defect.")),(0,o.kt)("p",null,"ReportPortal allows the use of existing defect types (Product Bug, Automation Bug, System Issue, No Defect, To investigate) and or to create custom ones on the project settings page."),(0,o.kt)("p",null,"To create custom defect types, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into the ReportPortal.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Navigate to Projects -",">",' Project "Settings" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Open "Defect Types" tab ')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click "Add Defect Type" button under any default defect type')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add new defect type form will appear ")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Enter "Defect name" and "Abbreviation", select color for defect presentation on the launches grid and widgets. ')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Submit form. You will see an added defect type on the chart preview."))),(0,o.kt)("p",null,"Add more custom defects, if you need it. The system allows us to add up to ten subtypes of each default defect type."),(0,o.kt)("p",null,"Now you can do bug triage and set defect types as default Product Bug/Automation Bug/System Issue/No Defect/TO investigate or custom defects. All of them will be available to select on the Defect Type editor.\nFor more information refer to the ",(0,o.kt)("a",{parentName:"p",href:"/work-with-reports/InvestigationOfFailure"},"Investigation of failure")," topic."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Default defects cannot be modified and or deleted from the system. Custom defect types can be deleted at any time."),(0,o.kt)("p",{parentName:"admonition"},"You can create up to 15 custom defect types for each group.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you have deleted a custom type from the system, all test executions with this deleted defect type get the parent type of the group in which deleted defect has belonged. Statistics updates in all launches where a deleted defect was present.",(0,o.kt)("br",{parentName:"p"}),"\n",'For example, if you create a custom "Product Bug-1" as a subtype of "Product Bugs" group and investigate a few\ndefects as "Product Bug-1", then remove "Product Bug-1" from your project, all investigated "Product Bug-1" defects\nwill be shown as "Product Bug".')),(0,o.kt)("media-view",{thumbnail:a(94410),src:"https://youtu.be/CcU2_dEu59k",alt:"Defect Type Configuration for clear test execution report",type:"video"}),(0,o.kt)("h3",{id:"auto-analysis-and-pattern-analysis"},"Auto-analysis and Pattern analysis"),(0,o.kt)("p",null,'The "Auto-Analysis" and "Pattern analysis" tabs can allow reducing test failure analysis routine on the project.'),(0,o.kt)("p",null,"For more information on this topic, please refer to ",(0,o.kt)("a",{parentName:"p",href:"/category/analysis"},"Analysis"),"."),(0,o.kt)("h3",{id:"demo-data"},"Demo data"),(0,o.kt)("p",null,'The "Demo Data" tab provides a way to generate demo data on the project.'),(0,o.kt)("p",null,"The generated data could demonstrate how the launches, filter, and dashboard will look. On the other hand, demo data could be\nmodified or removed without any effect of your real objects."),(0,o.kt)("media-view",{thumbnail:a(2422),src:"https://youtu.be/bXHY0_sXAF8",alt:"Generate Demo Data with test report&analytics dashboard",type:"video"}),(0,o.kt)("h2",{id:"management-of-users-on-the-project"},"Management of users on the project"),(0,o.kt)("p",null,'On the "Project Members" page users with the appropriate roles can invite new members.'),(0,o.kt)("p",null,"Permissions: "),(0,o.kt)("p",null,"User with Administrator role and users with project role PROJECT_MANAGER."),(0,o.kt)("h3",{id:"invite-user-on-a-project"},"Invite user on a project"),(0,o.kt)("p",null,'To invite a user on the "Project Members" page, perform the following steps:'),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as with the PROJECT_MANAGER project role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Project Members" page on the left menu.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Invite User" tab.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Enter the email address of the user in case he/she is not present in the ReportPortal database or enter his/her login name.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In case the user is already available in the ReportPortal, his/her name will appear in the suggestion list.\nIf not, the Admin should enter the correct email address.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select an appropriate role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Then click 'Invite'.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In case the user is already available in ReportPortal s/he will be assigned to the project\nIf not, the letter with an invitation link will be sent to the user email address.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"The user will receive an email with the link to the registration.\nWhen the user clicks the link, he/she will see a registration form.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The user needs to fill in the registration form and click the "Register"\nbutton to complete the registration. ')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The user will be assigned to the project that the invitation was sent from, and to "Personal Project" with the PROJECT\nMANAGER project role. '))),(0,o.kt)("media-view",{thumbnail:a(37802),src:"https://youtu.be/VOk80XZHpWc",alt:"Invite User From Project Members Page",type:"video"}),(0,o.kt)("h3",{id:"project-role"},"Project role"),(0,o.kt)("p",null,"Every user is given a specific Project role within a specific project."),(0,o.kt)("p",null,'Depends on the role, the user is able or not able to perform some actions. For more details, please see the "Permissions map".'),(0,o.kt)("p",null,"There are 4 possible Project roles in ReportPortal:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"PROJECT MANAGER"),(0,o.kt)("li",{parentName:"ul"},"MEMBER"),(0,o.kt)("li",{parentName:"ul"},"OPERATOR"),(0,o.kt)("li",{parentName:"ul"},"CUSTOMER")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The administrator has all privileges on the project.")),(0,o.kt)("h3",{id:"edit-project-role"},"Edit project role"),(0,o.kt)("p",null,"To edit the project role, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into the ReportPortal as a user with PROJECT_MANAGER project role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Project Members" page on the left menu.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select a new value from the "Project Role" drop-down for the user. - The new project role will be automatically saved.'))),(0,o.kt)("media-view",{thumbnail:a(73787),src:"https://youtu.be/DF38BbE5vws",alt:"Edit Project Role From Project Members Page",type:"video"}),(0,o.kt)("h3",{id:"unassign-user-from-the-project"},"Unassign user from the project"),(0,o.kt)("p",null,"Depending on the project needs the assignment could be removed.\nTo unassign the assignment for the user on the project, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into the ReportPortal as a user with PROJECT_MANAGER project role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Project Members" page on the left menu.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Find the required member.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click the 'Unassign' button for the user.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Confirm the action in the popup.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"The user will be unassigned from the current project but will stay in the system."))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Invite user, Assign/Unassign internal user to/from the project, change user's role on a project action can be done for a user\nwith a similar and lower role only.")))}d.isMDXComponent=!0},94410:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/CustomDefectTypes-bf0065f64620b1ddd1c8d7f9ebb96978.png"},2422:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/DemoData-f9ebc1074ae52bb91fb962299c5f6ba2.png"},73787:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/EditProjectRole-511e7a213727f82d0387d78ac1dfd3c8.png"},37802:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/InviteUserProjectMembers-8e699a1dac0cbdb4c4b60bb32f4644ae.png"},87194:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/ProjectSettingsGeneral-20664c531eb7e0ad7aa63ff3d8126419.png"}}]); \ No newline at end of file diff --git a/assets/js/6ef1a459.3ffd4a9b.js b/assets/js/6ef1a459.3ffd4a9b.js new file mode 100644 index 000000000..b5b69bbcd --- /dev/null +++ b/assets/js/6ef1a459.3ffd4a9b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6027],{3905:(t,e,r)=>{r.d(e,{Zo:()=>c,kt:()=>f});var n=r(67294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var p=n.createContext({}),u=function(t){var e=n.useContext(p),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},c=function(t){var e=u(t.components);return n.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(t,e){var r=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=u(r),m=a,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return r?n.createElement(f,i(i({ref:e},c),{},{components:r})):n.createElement(f,i({ref:e},c))}));function f(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:a,i[1]=l;for(var u=2;u{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_label:"Okta SAML"},i="Okta SAML",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/OktaSAML",id:"reportportal-configuration/authorization/SAMLProvider/OktaSAML",title:"Okta SAML",description:"SAML plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/OktaSAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"Okta SAML"},sidebar:"defaultSidebar",previous:{title:"Azure SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML"},next:{title:"User account",permalink:"/docs/category/user-account"}},p={},u=[],c={toc:u},s="wrapper";function d(t){let{components:e,...o}=t;return(0,a.kt)(s,(0,n.Z)({},c,o,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"okta-saml"},"Okta SAML"),(0,a.kt)("p",null,"SAML plugin is available in ReportPortal on the Plugins page."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,a.kt)("media-view",{thumbnail:r(23799),src:"https://youtu.be/ljXvCVWG4mQ",alt:"Okta SAML authorization in our open source test reporting tool",type:"video"}),(0,a.kt)("p",null,"To set up access with SAML:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,a.kt)("li",{parentName:"ol"},"Then open the list on the right of the user's image."),(0,a.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,a.kt)("li",{parentName:"ol"},"Click the 'Plugins' from the left-hand sidebar"),(0,a.kt)("li",{parentName:"ol"},"Click on the'SAML' tab."),(0,a.kt)("li",{parentName:"ol"},"Click on Add new integration"),(0,a.kt)("li",{parentName:"ol"},"The next fields should be present:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Identity provider name ID*': text\n'Provider name*': text\n'Metadata URL*': URL\n'RP callback URL': URL - RP host/uat\n'Email attribute*': text\n'Name attributes mode' : \n'Last name attribute' text\n'First name attribute' text\nor\n'Full name attribute' : text\n")),(0,a.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of SAML will have access to the ReportPortal instance.",(0,a.kt)("br",{parentName:"p"}),"\n","Just click on the button 'Login with SAML' and choose a needed integration from the drop-down"),(0,a.kt)("p",null,"On Octa side you should to specify SSO url. The format for url is the next:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},"https://your domain adress/uat/saml/sp/SSO/alias/report-portal-sp\n")),(0,a.kt)("p",null,"\u201cRP callback URL\u201d field is an optional field to provide a redirect base path right in SAML integration settings. Fill in the field in format \u201cRP host/uat\u201d. The format for url is the next:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"https://reportportal.com/uat\n")),(0,a.kt)("p",null,"Once you have submitted an integration with \u201cRP callback URL\u201d, the URL will be applied to all SAML integrations."))}d.isMDXComponent=!0},23799:(t,e,r)=>{r.r(e),r.d(e,{default:()=>n});const n=r.p+"assets/images/OktaSAML-a3676ee795f60d4b46db48703329889a.png"}}]); \ No newline at end of file diff --git a/assets/js/6ef1a459.8a6685fe.js b/assets/js/6ef1a459.8a6685fe.js deleted file mode 100644 index 1443d6878..000000000 --- a/assets/js/6ef1a459.8a6685fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6027],{3905:(t,e,r)=>{r.d(e,{Zo:()=>c,kt:()=>f});var a=r(67294);function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,a)}return r}function i(t){for(var e=1;e=0||(n[r]=t[r]);return n}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}var p=a.createContext({}),u=function(t){var e=a.useContext(p),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},c=function(t){var e=u(t.components);return a.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var r=t.components,n=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=u(r),m=n,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return r?a.createElement(f,i(i({ref:e},c),{},{components:r})):a.createElement(f,i({ref:e},c))}));function f(t,e){var r=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:n,i[1]=l;for(var u=2;u{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=r(87462),n=(r(67294),r(3905));const o={sidebar_label:"Okta SAML"},i="Okta SAML",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/OktaSAML",id:"reportportal-configuration/authorization/SAMLProvider/OktaSAML",title:"Okta SAML",description:"SAML plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/OktaSAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/OktaSAML.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"Okta SAML"},sidebar:"defaultSidebar",previous:{title:"Azure SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML"},next:{title:"User account",permalink:"/docs/category/user-account"}},p={},u=[],c={toc:u},s="wrapper";function d(t){let{components:e,...o}=t;return(0,n.kt)(s,(0,a.Z)({},c,o,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"okta-saml"},"Okta SAML"),(0,n.kt)("p",null,"SAML plugin is available in ReportPortal on the Plugins page."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,n.kt)("media-view",{thumbnail:r(23799),src:"https://youtu.be/ljXvCVWG4mQ",alt:"Okta SAML authorization in our open source test reporting tool",type:"video"}),(0,n.kt)("p",null,"To set up access with SAML:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Log in to the ReportPortal as an ADMIN user")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Then open the list on the right of the user's image.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click the 'Administrative' link")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click the 'Plugins' from the left-hand sidebar")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click on the'SAML' tab.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click on Add new integration")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The next fields should be present:"))),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-javascript"},"'Identity provider name ID*': text\n'Provider name*': text\n'Metadata URL*': URL\n'RP callback URL': URL - RP host/uat\n'Email attribute*': text\n'Name attributes mode' : \n'Last name attribute' text\n'First name attribute' text\nor\n'Full name attribute' : text\n")),(0,n.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of SAML will have access to the ReportPortal instance.",(0,n.kt)("br",{parentName:"p"}),"\n","Just click on the button 'Login with SAML' and choose a needed integration from the drop-down"),(0,n.kt)("p",null,"On Octa side you should to specify SSO url. The format for url is the next:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"https://your domain adress/uat/saml/sp/SSO/alias/report-portal-sp\n")),(0,n.kt)("p",null,"\u201cRP callback URL\u201d field is an optional field to provide a redirect base path right in SAML integration settings. Fill in the field in format \u201cRP host/uat\u201d. The format for url is the next:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"https://reportportal.com/uat\n")),(0,n.kt)("p",null,"Once you have submitted an integration with \u201cRP callback URL\u201d, the URL will be applied to all SAML integrations."))}d.isMDXComponent=!0},23799:(t,e,r)=>{r.r(e),r.d(e,{default:()=>a});const a=r.p+"assets/images/OktaSAML-a3676ee795f60d4b46db48703329889a.png"}}]); \ No newline at end of file diff --git a/assets/js/7bd95ec4.12b719e2.js b/assets/js/7bd95ec4.12b719e2.js new file mode 100644 index 000000000..544488b0e --- /dev/null +++ b/assets/js/7bd95ec4.12b719e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3360],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>k});var n=r(67294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var c=n.createContext({}),p=function(t){var e=n.useContext(c),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=p(t.components);return n.createElement(c.Provider,{value:e},t.children)},d="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(t,e){var r=t.components,a=t.mdxType,o=t.originalType,c=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),d=p(r),m=a,k=d["".concat(c,".").concat(m)]||d[m]||s[m]||o;return r?n.createElement(k,i(i({ref:e},u),{},{components:r})):n.createElement(k,i({ref:e},u))}));function k(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=t,l[d]="string"==typeof t?t:a,i[1]=l;for(var p=2;p{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>s,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_label:"Active Directory"},i="Active Directory",l={unversionedId:"reportportal-configuration/authorization/ActiveDirectory",id:"reportportal-configuration/authorization/ActiveDirectory",title:"Active Directory",description:"Active Directory plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/ActiveDirectory.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/ActiveDirectory",permalink:"/docs/reportportal-configuration/authorization/ActiveDirectory",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/ActiveDirectory.md",tags:[],version:"current",frontMatter:{sidebar_label:"Active Directory"},sidebar:"defaultSidebar",previous:{title:"Authorization",permalink:"/docs/reportportal-configuration/authorization/"},next:{title:"GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub"}},c={},p=[],u={toc:p},d="wrapper";function s(t){let{components:e,...r}=t;return(0,a.kt)(d,(0,n.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"active-directory"},"Active Directory"),(0,a.kt)("p",null,"Active Directory plugin is available in ReportPortal on the Plugins page."),(0,a.kt)("p",null,"To set up access with Active Directory:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,a.kt)("li",{parentName:"ol"},"Then open the list on the right of the user's image."),(0,a.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,a.kt)("li",{parentName:"ol"},"Click the 'Plugins' from the left-hand sidebar"),(0,a.kt)("li",{parentName:"ol"},"Click on the'Activate Directory' tab."),(0,a.kt)("li",{parentName:"ol"},"Click on Add new integration"),(0,a.kt)("li",{parentName:"ol"},"The next fields should be present:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Domain*': text\n'URL*': text\n'Base DN*': text\n'Email attribute*': text\n'Full name attribute' : text\n'Photo attribute' : text\n'UserSearchFilter' (the same as for LDAP): text \n")),(0,a.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of Active Directory will have access to the ReportPortal instance.",(0,a.kt)("br",{parentName:"p"}),"\n","For entrance to ReportPortal, the user should use their domain credentials (Login and password)."),(0,a.kt)("p",null,"Please find the example with configurations for Microsoft Active Directory that worked successfully provided by our user:"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Table with properties and values for LDAP Microsoft Active Directory")),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:"center"},"Property"),(0,a.kt)("th",{parentName:"tr",align:"center"},"Value"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Url"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"auth-servers.domain.org.int:3358"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Base DN"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"OU=MAIN,DC=DOMAIN,DC=ORG,DC=INT"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Manager DN"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"cn=Service UserBind,ou=Service Accounts,ou=Colombia,ou=America,ou=ServiceAccounts,dc=DOMAIN,dc=ORG,dc=INT"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"User search filter"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"(&(objectClass=user)(sAMAccountName={0}))"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Password encoder type"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"NO"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Email attribute"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"mail"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Full name attribute"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"displayName"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"center"},"Photo attribute"),(0,a.kt)("td",{parentName:"tr",align:"center"},(0,a.kt)("inlineCode",{parentName:"td"},"thumbnailPhoto"))))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7bd95ec4.9bd7a5e4.js b/assets/js/7bd95ec4.9bd7a5e4.js deleted file mode 100644 index 1043deaf0..000000000 --- a/assets/js/7bd95ec4.9bd7a5e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3360],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>k});var a=r(67294);function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,a)}return r}function i(t){for(var e=1;e=0||(n[r]=t[r]);return n}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}var c=a.createContext({}),p=function(t){var e=a.useContext(c),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=p(t.components);return a.createElement(c.Provider,{value:e},t.children)},s="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},d=a.forwardRef((function(t,e){var r=t.components,n=t.mdxType,o=t.originalType,c=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),s=p(r),d=n,k=s["".concat(c,".").concat(d)]||s[d]||m[d]||o;return r?a.createElement(k,i(i({ref:e},u),{},{components:r})):a.createElement(k,i({ref:e},u))}));function k(t,e){var r=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var o=r.length,i=new Array(o);i[0]=d;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=t,l[s]="string"==typeof t?t:n,i[1]=l;for(var p=2;p{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var a=r(87462),n=(r(67294),r(3905));const o={sidebar_label:"Active Directory"},i="Active Directory",l={unversionedId:"reportportal-configuration/authorization/ActiveDirectory",id:"reportportal-configuration/authorization/ActiveDirectory",title:"Active Directory",description:"Active Directory plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/ActiveDirectory.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/ActiveDirectory",permalink:"/docs/reportportal-configuration/authorization/ActiveDirectory",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/ActiveDirectory.md",tags:[],version:"current",frontMatter:{sidebar_label:"Active Directory"},sidebar:"defaultSidebar",previous:{title:"Authorization",permalink:"/docs/reportportal-configuration/authorization/"},next:{title:"GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub"}},c={},p=[],u={toc:p},s="wrapper";function m(t){let{components:e,...r}=t;return(0,n.kt)(s,(0,a.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"active-directory"},"Active Directory"),(0,n.kt)("p",null,"Active Directory plugin is available in ReportPortal on the Plugins page."),(0,n.kt)("p",null,"To set up access with Active Directory:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Log in to the ReportPortal as an ADMIN user")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Then open the list on the right of the user's image.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click the 'Administrative' link")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click the 'Plugins' from the left-hand sidebar")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click on the'Activate Directory' tab.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Click on Add new integration")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The next fields should be present:"))),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-javascript"},"'Domain*': text\n'URL*': text\n'Base DN*': text\n'Email attribute*': text\n'Full name attribute' : text\n'Photo attribute' : text\n'UserSearchFilter' (the same as for LDAP): text \n")),(0,n.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of Active Directory will have access to the ReportPortal instance.",(0,n.kt)("br",{parentName:"p"}),"\n","For entrance to ReportPortal, the user should use their domain credentials (Login and password)."),(0,n.kt)("p",null,"Please find the example with configurations for Microsoft Active Directory that worked successfully provided by our user:"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Table with properties and values for LDAP Microsoft Active Directory")),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"center"},"Property"),(0,n.kt)("th",{parentName:"tr",align:"center"},"Value"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Url"),(0,n.kt)("td",{parentName:"tr",align:"center"},"auth-servers.domain.org.int:3358")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Base DN"),(0,n.kt)("td",{parentName:"tr",align:"center"},"OU=MAIN,DC=DOMAIN,DC=ORG,DC=INT")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Manager DN"),(0,n.kt)("td",{parentName:"tr",align:"center"},"cn=Service UserBind,ou=Service Accounts,ou=Colombia,ou=America,ou=ServiceAccounts,dc=DOMAIN,dc=ORG,dc=INT")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"User search filter"),(0,n.kt)("td",{parentName:"tr",align:"center"},"(&(objectClass=user)(sAMAccountName={0}))")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Password encoder type"),(0,n.kt)("td",{parentName:"tr",align:"center"},"NO")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Email attribute"),(0,n.kt)("td",{parentName:"tr",align:"center"},"mail")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Full name attribute"),(0,n.kt)("td",{parentName:"tr",align:"center"},"displayName")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"center"},"Photo attribute"),(0,n.kt)("td",{parentName:"tr",align:"center"},"thumbnailPhoto")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/98a1fcd9.2d13f844.js b/assets/js/98a1fcd9.494f8b22.js similarity index 84% rename from assets/js/98a1fcd9.2d13f844.js rename to assets/js/98a1fcd9.494f8b22.js index 5f996df5f..943b1fa06 100644 --- a/assets/js/98a1fcd9.2d13f844.js +++ b/assets/js/98a1fcd9.494f8b22.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2516],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>h});var a=i(67294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function o(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var s=a.createContext({}),l=function(e){var t=a.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},c=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},g="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var i=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),g=l(i),u=n,h=g["".concat(s,".").concat(u)]||g[u]||p[u]||r;return i?a.createElement(h,o(o({ref:t},c),{},{components:i})):a.createElement(h,o({ref:t},c))}));function h(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=i.length,o=new Array(r);o[0]=u;var d={};for(var s in t)hasOwnProperty.call(t,s)&&(d[s]=t[s]);d.originalType=e,d[g]="string"==typeof e?e:n,o[1]=d;for(var l=2;l{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var a=i(87462),n=(i(67294),i(3905));const r={sidebar_position:4,sidebar_label:"Manage Widgets"},o="Manage Widgets",d={unversionedId:"dashboards-and-widgets/ManageWidgets",id:"dashboards-and-widgets/ManageWidgets",title:"Manage Widgets",description:"Customize widget",source:"@site/docs/dashboards-and-widgets/ManageWidgets.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/ManageWidgets",permalink:"/docs/dashboards-and-widgets/ManageWidgets",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/ManageWidgets.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_label:"Manage Widgets"},sidebar:"defaultSidebar",previous:{title:"Widget Creation",permalink:"/docs/dashboards-and-widgets/WidgetCreation"},next:{title:"Launch statistics chart",permalink:"/docs/dashboards-and-widgets/LaunchStatisticsChart"}},s={},l=[{value:"Customize widget",id:"customize-widget",level:2},{value:"Edit widget",id:"edit-widget",level:2},{value:"View widgets in full-screen mode",id:"view-widgets-in-full-screen-mode",level:2},{value:"Delete widget",id:"delete-widget",level:2}],c={toc:l},g="wrapper";function p(e){let{components:t,...r}=e;return(0,n.kt)(g,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"manage-widgets"},"Manage Widgets"),(0,n.kt)("h2",{id:"customize-widget"},"Customize widget"),(0,n.kt)("p",null,"When you create a widget in our test automation dashboard, it has a basic size. Afterward, you may change the widget size."),(0,n.kt)("p",null,"To resize widget the user can hover the mouse cursor over the widget. The system will show resizing arrows."),(0,n.kt)("p",null,"Grab the arrow with the cursor and drag it to the desired width and height."),(0,n.kt)("p",null,"You can maintain the existing aspect ratio or set a new one when resizing the widget."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Widgets have a minimum and maximum mean of width and height defined within the application.")),(0,n.kt)("p",null,"Another way you can customize your dashboard is by changing the widgets' placement within the dashboard canvas area."),(0,n.kt)("p",null,"To change a widget placement on the dashboard, perform the following: grab a widget with the cursor by clicking and dragging it to the selected position, holding down the mouse button."),(0,n.kt)("p",null,"When you move the widget to the area with sufficient space, the system highlights this place.\nThe widgets located in this space, are moved to the relocatable widget place. Using this option the user can configure the desired location of the widgets on a dashboard."),(0,n.kt)("media-view",{thumbnail:i(69623),src:"https://youtu.be/6nPsNI2v_po",alt:"Customize widgets in our qa automation dashboard",type:"video"}),(0,n.kt)("h2",{id:"edit-widget"},"Edit widget"),(0,n.kt)("p",null,"To create a new widget for data visualization, perform the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Edit" icon in the right corner of the widget header.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'After the "Edit Widget" window is opened, you can edit any widget settings except the template itself.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Make the necessary changes and click the "Save" button. The widget will be updated.'))),(0,n.kt)("media-view",{thumbnail:i(79608),src:"https://youtu.be/VlpvP7IIEoY",alt:"Edit Widget",type:"video"}),(0,n.kt)("h2",{id:"view-widgets-in-full-screen-mode"},"View widgets in full-screen mode"),(0,n.kt)("p",null,"To view widgets on the whole screen, click the 'Full Screen' button in the right top corner of the dashboard."),(0,n.kt)("p",null,"Widgets are shown in the same order as for standard view."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Clickable areas or elements are disabled for the full-screen mode selected, therefore it will not be possible to create a new widget, update, or delete available widgets in this mode.")),(0,n.kt)("p",null,"The auto-refresh timeout for widgets in full-screen mode is 30 sec."),(0,n.kt)("h2",{id:"delete-widget"},"Delete widget"),(0,n.kt)("p",null,"To delete the widget: "),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Delete" icon (X) in the right corner of the widget header.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Delete" button on the confirmation popup.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The widget will be deleted from the system."))),(0,n.kt)("media-view",{thumbnail:i(86870),src:"https://youtu.be/BrY6BnW7aAE",alt:"Delete Widget",type:"video"}),(0,n.kt)("p",null,'If you delete a shared widget, the deleted widget will be displayed for other\nusers as "Widget not found".'))}p.isMDXComponent=!0},69623:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/CustomizeWidget-372a06c18d9aa15b6c80bef0a03c0828.png"},86870:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/DeleteWidget-14fae75ee085ca966504213d5ba8cb09.png"},79608:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/EditWidget-df992198bf7499a6180883f83b489330.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[2516],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>h});var a=i(67294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function o(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var s=a.createContext({}),l=function(e){var t=a.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},c=function(e){var t=l(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var i=e.components,n=e.mdxType,r=e.originalType,s=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),p=l(i),u=n,h=p["".concat(s,".").concat(u)]||p[u]||g[u]||r;return i?a.createElement(h,o(o({ref:t},c),{},{components:i})):a.createElement(h,o({ref:t},c))}));function h(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=i.length,o=new Array(r);o[0]=u;var d={};for(var s in t)hasOwnProperty.call(t,s)&&(d[s]=t[s]);d.originalType=e,d[p]="string"==typeof e?e:n,o[1]=d;for(var l=2;l{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>g,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var a=i(87462),n=(i(67294),i(3905));const r={sidebar_position:4,sidebar_label:"Manage Widgets"},o="Manage Widgets",d={unversionedId:"dashboards-and-widgets/ManageWidgets",id:"dashboards-and-widgets/ManageWidgets",title:"Manage Widgets",description:"Customize widget",source:"@site/docs/dashboards-and-widgets/ManageWidgets.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/ManageWidgets",permalink:"/docs/dashboards-and-widgets/ManageWidgets",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/ManageWidgets.mdx",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_label:"Manage Widgets"},sidebar:"defaultSidebar",previous:{title:"Widget Creation",permalink:"/docs/dashboards-and-widgets/WidgetCreation"},next:{title:"Launch statistics chart",permalink:"/docs/dashboards-and-widgets/LaunchStatisticsChart"}},s={},l=[{value:"Customize widget",id:"customize-widget",level:2},{value:"Edit widget",id:"edit-widget",level:2},{value:"View widgets in full-screen mode",id:"view-widgets-in-full-screen-mode",level:2},{value:"Delete widget",id:"delete-widget",level:2}],c={toc:l},p="wrapper";function g(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"manage-widgets"},"Manage Widgets"),(0,n.kt)("h2",{id:"customize-widget"},"Customize widget"),(0,n.kt)("p",null,"When you create a widget in our test automation dashboard, it has a basic size. Afterward, you may change the widget size."),(0,n.kt)("p",null,"To resize widget the user can hover the mouse cursor over the widget. The system will show resizing arrows."),(0,n.kt)("p",null,"Grab the arrow with the cursor and drag it to the desired width and height."),(0,n.kt)("p",null,"You can maintain the existing aspect ratio or set a new one when resizing the widget."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Widgets have a minimum and maximum mean of width and height defined within the application.")),(0,n.kt)("p",null,"Another way you can customize your dashboard is by changing the widgets' placement within the dashboard canvas area."),(0,n.kt)("p",null,"To change a widget placement on the dashboard, perform the following: grab a widget with the cursor by clicking and dragging it to the selected position, holding down the mouse button."),(0,n.kt)("p",null,"When you move the widget to the area with sufficient space, the system highlights this place.\nThe widgets located in this space, are moved to the relocatable widget place. Using this option the user can configure the desired location of the widgets on a dashboard."),(0,n.kt)("media-view",{thumbnail:i(69623),src:"https://youtu.be/icuOipeRtAU",alt:"Customize widgets in our qa automation dashboard",type:"video"}),(0,n.kt)("h2",{id:"edit-widget"},"Edit widget"),(0,n.kt)("p",null,"To create a new widget for data visualization, perform the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Edit" icon in the right corner of the widget header.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'After the "Edit Widget" window is opened, you can edit any widget settings except the template itself.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Make the necessary changes and click the "Save" button. The widget will be updated.'))),(0,n.kt)("media-view",{thumbnail:i(79608),src:"https://youtu.be/F-K0sM66lhY",alt:"Edit Widget",type:"video"}),(0,n.kt)("h2",{id:"view-widgets-in-full-screen-mode"},"View widgets in full-screen mode"),(0,n.kt)("p",null,"To view widgets on the whole screen, click the 'Full Screen' button in the right top corner of the dashboard."),(0,n.kt)("p",null,"Widgets are shown in the same order as for standard view."),(0,n.kt)("admonition",{type:"note"},(0,n.kt)("p",{parentName:"admonition"},"Clickable areas or elements are disabled for the full-screen mode selected, therefore it will not be possible to create a new widget, update, or delete available widgets in this mode.")),(0,n.kt)("p",null,"The auto-refresh timeout for widgets in full-screen mode is 30 sec."),(0,n.kt)("h2",{id:"delete-widget"},"Delete widget"),(0,n.kt)("p",null,"To delete the widget: "),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Delete" icon (X) in the right corner of the widget header.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Delete" button on the confirmation popup.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The widget will be deleted from the system."))),(0,n.kt)("media-view",{thumbnail:i(86870),src:"https://youtu.be/pACkyeSH5mc",alt:"Delete Widget",type:"video"}))}g.isMDXComponent=!0},69623:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/CustomizeWidget-029599e6fed04ca6071d96980828538f.png"},86870:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/DeleteWidget-1bed7f83ff7701a4798a05e6c16a8c68.png"},79608:(e,t,i)=>{i.r(t),i.d(t,{default:()=>a});const a=i.p+"assets/images/EditWidget-3ba0f4537b2c0f83f581b256a71fa0bf.png"}}]); \ No newline at end of file diff --git a/assets/js/a68ea571.295d7694.js b/assets/js/a68ea571.295d7694.js deleted file mode 100644 index 10b87db83..000000000 --- a/assets/js/a68ea571.295d7694.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6636],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=u(r),k=a,f=c["".concat(s,".").concat(k)]||c[k]||m[k]||l;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[c]="string"==typeof e?e:a,o[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var n=r(87462),a=(r(67294),r(3905));const l={},o="ReportPortal 23.1 File storage options",i={unversionedId:"installation-steps/ReportPortal23.1FileStorageOptions",id:"installation-steps/ReportPortal23.1FileStorageOptions",title:"ReportPortal 23.1 File storage options",description:"In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins.",source:"@site/docs/installation-steps/ReportPortal23.1FileStorageOptions.md",sourceDirName:"installation-steps",slug:"/installation-steps/ReportPortal23.1FileStorageOptions",permalink:"/docs/installation-steps/ReportPortal23.1FileStorageOptions",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/installation-steps/ReportPortal23.1FileStorageOptions.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Deploy with AWS ECS Fargate",permalink:"/docs/installation-steps/DeployWithAWSECSFargate"},next:{title:"ReportPortal Configuration",permalink:"/docs/category/reportportal-configuration"}},s={},u=[{value:"AWS S3",id:"aws-s3",level:2},{value:"MinIO",id:"minio",level:2},{value:"Container's File system",id:"containers-file-system",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"reportportal-231-file-storage-options"},"ReportPortal 23.1 File storage options"),(0,a.kt)("p",null,"In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS S3"),(0,a.kt)("li",{parentName:"ul"},"MinIO distributed object storage"),(0,a.kt)("li",{parentName:"ul"},"Container's File system")),(0,a.kt)("p",null,"Currently we have 2 file storage systems: ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," and ",(0,a.kt)("strong",{parentName:"p"},"single-bucket"),"."),(0,a.kt)("p",null,"In the multi-bucket system structure of buckets looks like this:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix")," + \u2018keystore\u2019 (bucket for storing integration secrets)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix")," + \u2018users\u2019 (bucket for storing user data)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"defaultBucketName")," (bucket for storing plugins)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix + projectId")," (bucket for storing project attachments)")),(0,a.kt)("p",null,"In the single-bucket system structure of single-bucket is the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"integration-secrets/ (prefix for integration secrets)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"user-data/ (prefix for user data)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"plugins/ (prefix for plugins)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"project-data/projectId (prefix for project attachments)")),(0,a.kt)("h2",{id:"aws-s3"},"AWS S3"),(0,a.kt)("p",null,"Amazon Simple Storage Service (Amazon S3) is an object storage service offering industry-leading scalability, data availability, security, and performance. Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition. A partition is a grouping of ",(0,a.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/general/latest/gr/s3.html"},"Regions"),"."),(0,a.kt)("p",null,"To set up AWS S3 in API, UAT & Jobs services use the following variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: s3"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ACCESSKEY for AWS S3 AccessKey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_SECRETKEY for AWS S3 SecretKey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_REGION for AWS region")),(0,a.kt)("p",null,"To set up the ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_BUCKETPREFIX for prefix of bucket name (\u2018prj-\u2018 by default)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (\u2018rp-bucket\u2019 by default)")),(0,a.kt)("p",null,"To set up the ",(0,a.kt)("strong",{parentName:"p"},"single-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for single-bucket name"),(0,a.kt)("li",{parentName:"ul"},"RP_FEATURE_FLAGS: singleBucket")),(0,a.kt)("h2",{id:"minio"},"MinIO"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://min.io/"},"MinIO")," is a high-performance distributed object storage server. It stays on top of S3 or any other cloud storage and allows to have a shared FS for several API, UAT & Jobs pods in Kubernetes."),(0,a.kt)("p",null,"To set up MinIO in services, use the following variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: minio"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ENDPOINT for endpoint (address)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ACCESSKEY for accesskey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_SECRETKEY for secretkey")),(0,a.kt)("p",null,"To set the ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_BUCKETPREFIX for prefix of bucket name (\u2018prj-\u2018 by default)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (\u2018rp-bucket\u2019 by default)")),(0,a.kt)("p",null,"To set the ",(0,a.kt)("strong",{parentName:"p"},"single-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for single-bucket name"),(0,a.kt)("li",{parentName:"ul"},"RP_FEATURE_FLAGS : singleBucket")),(0,a.kt)("h2",{id:"containers-file-system"},"Container's File system"),(0,a.kt)("p",null,"The container's file system option is used when you want to store this data in a mounted folder in the service-api or/and service-uat containers."),(0,a.kt)("p",null,"To use this option, set up environment variables like this:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: filesystem"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_PATH for path in filesystem to store files.")),(0,a.kt)("p",null,"It can be done in both Docker and Kubernetes ReportPortal versions."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a68ea571.85917d12.js b/assets/js/a68ea571.85917d12.js new file mode 100644 index 000000000..8c71af80a --- /dev/null +++ b/assets/js/a68ea571.85917d12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6636],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=u(r),k=a,f=c["".concat(s,".").concat(k)]||c[k]||m[k]||l;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[c]="string"==typeof e?e:a,o[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var n=r(87462),a=(r(67294),r(3905));const l={},o="ReportPortal 23.1 File storage options",i={unversionedId:"installation-steps/ReportPortal23.1FileStorageOptions",id:"installation-steps/ReportPortal23.1FileStorageOptions",title:"ReportPortal 23.1 File storage options",description:"In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins.",source:"@site/docs/installation-steps/ReportPortal23.1FileStorageOptions.md",sourceDirName:"installation-steps",slug:"/installation-steps/ReportPortal23.1FileStorageOptions",permalink:"/docs/installation-steps/ReportPortal23.1FileStorageOptions",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/installation-steps/ReportPortal23.1FileStorageOptions.md",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Deploy with AWS ECS Fargate",permalink:"/docs/installation-steps/DeployWithAWSECSFargate"},next:{title:"ReportPortal Configuration",permalink:"/docs/category/reportportal-configuration"}},s={},u=[{value:"AWS S3",id:"aws-s3",level:2},{value:"MinIO",id:"minio",level:2},{value:"File system",id:"file-system",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"reportportal-231-file-storage-options"},"ReportPortal 23.1 File storage options"),(0,a.kt)("p",null,"In ReportPortal 23.1 we can use multiple ways to store log attachments, user pictures and plugins."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS S3"),(0,a.kt)("li",{parentName:"ul"},"MinIO distributed object storage"),(0,a.kt)("li",{parentName:"ul"},"File system")),(0,a.kt)("p",null,"Currently we have 2 file storage systems: ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," and ",(0,a.kt)("strong",{parentName:"p"},"single-bucket"),"."),(0,a.kt)("p",null,"In the multi-bucket system structure of buckets looks like this:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix")," + \u2018keystore\u2019 (bucket for storing integration secrets)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix")," + \u2018users\u2019 (bucket for storing user data)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"defaultBucketName")," (bucket for storing plugins)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"bucketPrefix + projectId")," (bucket for storing project attachments)")),(0,a.kt)("p",null,"In the single-bucket system structure of single-bucket is the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"integration-secrets/ (prefix for integration secrets)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"user-data/ (prefix for user data)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"plugins/ (prefix for plugins)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"singleBucketName/"),"project-data/projectId (prefix for project attachments)")),(0,a.kt)("h2",{id:"aws-s3"},"AWS S3"),(0,a.kt)("p",null,"Amazon Simple Storage Service (Amazon S3) is an object storage service offering industry-leading scalability, data availability, security, and performance. Bucket names must be unique across all AWS accounts in all the AWS Regions within a partition. A partition is a grouping of ",(0,a.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/general/latest/gr/s3.html"},"Regions"),"."),(0,a.kt)("p",null,"To set up AWS S3 in API, UAT & Jobs services use the following variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: s3"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ACCESSKEY for AWS S3 AccessKey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_SECRETKEY for AWS S3 SecretKey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_REGION for AWS region")),(0,a.kt)("p",null,"To set up the ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_BUCKETPREFIX for prefix of bucket name (\u2018prj-\u2018 by default)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (\u2018rp-bucket\u2019 by default)")),(0,a.kt)("p",null,"To set up the ",(0,a.kt)("strong",{parentName:"p"},"single-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for single-bucket name"),(0,a.kt)("li",{parentName:"ul"},"RP_FEATURE_FLAGS: singleBucket")),(0,a.kt)("h2",{id:"minio"},"MinIO"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://min.io/"},"MinIO")," is a high-performance distributed object storage server. It stays on top of S3 or any other cloud storage and allows to have a shared FS for several API, UAT & Jobs pods in Kubernetes."),(0,a.kt)("p",null,"To set up MinIO in services, use the following variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: minio"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ENDPOINT for endpoint (address)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_ACCESSKEY for accesskey"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_SECRETKEY for secretkey")),(0,a.kt)("p",null,"To set the ",(0,a.kt)("strong",{parentName:"p"},"multi-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_BUCKETPREFIX for prefix of bucket name (\u2018prj-\u2018 by default)"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for name of plugins bucket (\u2018rp-bucket\u2019 by default)")),(0,a.kt)("p",null,"To set the ",(0,a.kt)("strong",{parentName:"p"},"single-bucket")," system, use the following environment variables:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_DEFAULTBUCKETNAME for single-bucket name"),(0,a.kt)("li",{parentName:"ul"},"RP_FEATURE_FLAGS : singleBucket")),(0,a.kt)("h2",{id:"file-system"},"File system"),(0,a.kt)("p",null,"The file system option is used when you want to store this data in a mounted folder in the service-api or/and service-uat."),(0,a.kt)("p",null,"To use this option, set up environment variables like this:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"DATASTORE_TYPE: filesystem"),(0,a.kt)("li",{parentName:"ul"},"DATASTORE_PATH for path in filesystem to store files.")),(0,a.kt)("p",null,"It can be done in both Docker and Kubernetes ReportPortal versions."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a76ff2eb.25258038.js b/assets/js/a76ff2eb.25258038.js deleted file mode 100644 index 805b4353e..000000000 --- a/assets/js/a76ff2eb.25258038.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1904],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),f=r,h=c["".concat(l,".").concat(f)]||c[f]||d[f]||a;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=n(87462),r=(n(67294),n(3905));const a={},i="How to get an access token in ReportPortal",s={unversionedId:"reportportal-configuration/HowToGetAnAccessTokenInReportPortal",id:"reportportal-configuration/HowToGetAnAccessTokenInReportPortal",title:"How to get an access token in ReportPortal",description:"There are two ways to authorize in the ReportPortal API:",source:"@site/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/HowToGetAnAccessTokenInReportPortal",permalink:"/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal.mdx",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Integration via plugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin"},next:{title:"Authorization",permalink:"/docs/reportportal-configuration/authorization/"}},l={},p=[{value:"1. Authorization with user\u2019s login and password",id:"1-authorization-with-users-login-and-password",level:2},{value:"2. Authorization with user's API Key (for agents)",id:"2-authorization-with-users-api-key-for-agents",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"how-to-get-an-access-token-in-reportportal"},"How to get an access token in ReportPortal"),(0,r.kt)("p",null,"There are two ways to authorize in the ReportPortal API:"),(0,r.kt)("h2",{id:"1-authorization-with-users-login-and-password"},"1. Authorization with user\u2019s login and password"),(0,r.kt)("p",null,"This is the main and ",(0,r.kt)("strong",{parentName:"p"},"recommended way")," to get access to ReportPortal API."),(0,r.kt)("p",null,"Make the following HTTP request to get user's access token using login and password:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"POST /uat/sso/oauth/token\n\nBODY with parameters:\ngrant_type: password\nusername: \npassword: \n")),(0,r.kt)("media-view",{src:n(46786),alt:"Authorization to ReportPortal Testops with user\u2019s login and password"}),(0,r.kt)("p",null,"Or you can use the following curl request:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'curl --header "Content-Type: application/x-www-form-urlencoded" \\\n--request POST \\\n--data "grant_type=password&username=&password=" \\\n--user "ui:uiman" \\\n/uat/sso/oauth/token\n')),(0,r.kt)("p",null,"Then you will receive a response with an access token:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'{\n"access_token": ,\n"token_type": "bearer",\n"expires_in": ,\n"refresh_token": ,\n...\n}\n')),(0,r.kt)("p",null,"Now you can use \u201caccess_token\u201d with any request to API by sending it as HTTP Authorization header:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"HTTP Header:\nAuthorization: Bearer \n\n")),(0,r.kt)("h2",{id:"2-authorization-with-users-api-key-for-agents"},"2. Authorization with user's API Key (for agents)"),(0,r.kt)("p",null,"Another method involves using the API Key found on the user's Profile page."),(0,r.kt)("p",null,"The API Key is a unique token that grants access to the ReportPortal REST API."),(0,r.kt)("p",null,"To use it, log in and navigate to the Profile page, then find the API Keys tab. If you've previously created a token, it now has been converted to a Legacy API Key at the moment of migration to newest version and it remains valid and operational."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"It will continue to work even if you generate new API Keys.")),(0,r.kt)("p",null,"Thus, you can use several API keys at the same time. And revoke unused, expired or publicly exposed keys."),(0,r.kt)("media-view",{src:n(53486),alt:"Authorization with user's API Key (for agents)"}),(0,r.kt)("p",null,'To generate a new API key in the ReportPortal app, click on the "Generate API Key" button.'),(0,r.kt)("p",null,"You are free to assign any name to this API key, as long as it is unique and consists of 1 to 40 characters. Keep in mind that duplicate API key names are not allowed."),(0,r.kt)("p",null,"The system will automatically prefix the generated API key with its assigned name for easy identification. If the API key name contains spaces or underscores, these will be replaced by hyphens in the API key prefix."),(0,r.kt)("p",null,"It's crucial to understand that the API key will be visible only at the point of creation. We strongly recommend copying and securely storing it for future use, as it will be impossible to retrieve later. This practice aligns with stringent security measures and standards."),(0,r.kt)("media-view",{src:n(85344),alt:"API Keys"}),(0,r.kt)("p",null,"You have the ability to create multiple API keys for various purposes, such as for automation or for integration with third-party services. However, it's important to note that all API keys generated from the user's Profile page are functionally equivalent from the permissions standpoint."),(0,r.kt)("p",null,"Users can also revoke an API key at any time. Upon revocation, all related information will be removed from the database, and the revoked API key will no longer be usable."),(0,r.kt)("p",null,"An API key functions similarly to a regular token. When making requests to the ReportPortal API, simply include it in the HTTP Authorization header as follows:"),(0,r.kt)("p",null,"HTTP Header:",(0,r.kt)("br",null),"\nAuthorization: Bearer "),(0,r.kt)("media-view",{src:n(76842),alt:"How to use API Key"}),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please be aware that this type of token is specifically designed for use by ReportPortal client tools (agents). We do not recommend using it to provide direct access to API endpoints.")))}d.isMDXComponent=!0},76842:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/APIKeyUsing-5c6d31aa71abaafa8c7b7cf2f0478b81.png"},46786:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/AccessToken1-3532d99465a7eab2f5324de85f65597b.png"},53486:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/LegacyAPIKey-1a2f0785ac76880fe940d4947e2f6652.png"},85344:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/NewAPIKeys-897a3764fc447092a383e01afd2152e1.png"}}]); \ No newline at end of file diff --git a/assets/js/a76ff2eb.6b79db18.js b/assets/js/a76ff2eb.6b79db18.js new file mode 100644 index 000000000..b555a7c8e --- /dev/null +++ b/assets/js/a76ff2eb.6b79db18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[1904],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(n),h=r,f=c["".concat(l,".").concat(h)]||c[h]||d[h]||a;return n?o.createElement(f,s(s({ref:t},u),{},{components:n})):o.createElement(f,s({ref:t},u))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,s=new Array(a);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:r,s[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var o=n(87462),r=(n(67294),n(3905));const a={},s="How to get an access token in ReportPortal",i={unversionedId:"reportportal-configuration/HowToGetAnAccessTokenInReportPortal",id:"reportportal-configuration/HowToGetAnAccessTokenInReportPortal",title:"How to get an access token in ReportPortal",description:"There are two ways to authorize in the ReportPortal API:",source:"@site/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/HowToGetAnAccessTokenInReportPortal",permalink:"/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal.mdx",tags:[],version:"current",frontMatter:{},sidebar:"defaultSidebar",previous:{title:"Integration via plugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin"},next:{title:"Authorization",permalink:"/docs/reportportal-configuration/authorization/"}},l={},p=[{value:"1. Authorization with user\u2019s login and password",id:"1-authorization-with-users-login-and-password",level:2},{value:"2. Authorization with user's API Key (for agents)",id:"2-authorization-with-users-api-key-for-agents",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"how-to-get-an-access-token-in-reportportal"},"How to get an access token in ReportPortal"),(0,r.kt)("p",null,"There are two ways to authorize in the ReportPortal API:"),(0,r.kt)("h2",{id:"1-authorization-with-users-login-and-password"},"1. Authorization with user\u2019s login and password"),(0,r.kt)("p",null,"This is the main and ",(0,r.kt)("strong",{parentName:"p"},"recommended way")," to get access to ReportPortal API."),(0,r.kt)("p",null,"Make the following HTTP request to get user's access token using login and password:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"POST /uat/sso/oauth/token\n\nBODY with parameters:\ngrant_type: password\nusername: \npassword: \n")),(0,r.kt)("media-view",{src:n(46786),alt:"Authorization to ReportPortal Testops with user\u2019s login and password"}),(0,r.kt)("p",null,"Or you can use the following curl request:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-curl"},'curl --header "Content-Type: application/x-www-form-urlencoded" \\\n --request POST \\\n --data "grant_type=password&username=&password=" \\\n --user "ui:uiman" \\\n /uat/sso/oauth/token\n')),(0,r.kt)("p",null,"Then you will receive a response with an access token:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "access_token": ,\n "token_type": "bearer",\n "expires_in": ,\n "refresh_token": ,\n ...\n}\n')),(0,r.kt)("p",null,"Now you can use \u201caccess_token\u201d with any request to API by sending it as HTTP Authorization header:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-http"},"HTTP Header:\nAuthorization: Bearer \n\n")),(0,r.kt)("h2",{id:"2-authorization-with-users-api-key-for-agents"},"2. Authorization with user's API Key (for agents)"),(0,r.kt)("p",null,"Another method involves using the API Key found on the user's Profile page."),(0,r.kt)("p",null,"The API Key is a unique token that grants access to the ReportPortal REST API."),(0,r.kt)("p",null,"To use it, log in and navigate to the Profile page, then find the API Keys tab. If you've previously created a token, it now has been converted to a Legacy API Key at the moment of migration to newest version and it remains valid and operational."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"It will continue to work even if you generate new API Keys.")),(0,r.kt)("p",null,"Thus, you can use several API keys at the same time. And revoke unused, expired or publicly exposed keys."),(0,r.kt)("media-view",{src:n(53486),alt:"Authorization with user's API Key (for agents)"}),(0,r.kt)("p",null,'To generate a new API key in the ReportPortal app, click on the "Generate API Key" button.'),(0,r.kt)("p",null,"You are free to assign any name to this API key, as long as it is unique and consists of 1 to 40 characters. Keep in mind that duplicate API key names are not allowed."),(0,r.kt)("p",null,"The system will automatically prefix the generated API key with its assigned name for easy identification. If the API key name contains spaces or underscores, these will be replaced by hyphens in the API key prefix."),(0,r.kt)("p",null,"It's crucial to understand that the API key will be visible only at the point of creation. We strongly recommend copying and securely storing it for future use, as it will be impossible to retrieve later. This practice aligns with stringent security measures and standards."),(0,r.kt)("media-view",{src:n(85344),alt:"API Keys"}),(0,r.kt)("p",null,"You have the ability to create multiple API keys for various purposes, such as for automation or for integration with third-party services. However, it's important to note that all API keys generated from the user's Profile page are functionally equivalent from the permissions standpoint."),(0,r.kt)("p",null,"Users can also revoke an API key at any time. Upon revocation, all related information will be removed from the database, and the revoked API key will no longer be usable."),(0,r.kt)("p",null,"An API key functions similarly to a regular token. When making requests to the ReportPortal API, simply include it in the HTTP Authorization header as follows:"),(0,r.kt)("p",null,"HTTP Header:",(0,r.kt)("br",null),"\nAuthorization: Bearer "),(0,r.kt)("media-view",{src:n(76842),alt:"How to use API Key"}),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please be aware that this type of token is specifically designed for use by ReportPortal client tools (agents). We do not recommend using it to provide direct access to API endpoints.")))}d.isMDXComponent=!0},76842:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/APIKeyUsing-5c6d31aa71abaafa8c7b7cf2f0478b81.png"},46786:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/AccessToken1-3532d99465a7eab2f5324de85f65597b.png"},53486:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/LegacyAPIKey-1a2f0785ac76880fe940d4947e2f6652.png"},85344:(e,t,n)=>{n.r(t),n.d(t,{default:()=>o});const o=n.p+"assets/images/NewAPIKeys-897a3764fc447092a383e01afd2152e1.png"}}]); \ No newline at end of file diff --git a/assets/js/a830598a.376dedc8.js b/assets/js/a830598a.376dedc8.js new file mode 100644 index 000000000..1974a8166 --- /dev/null +++ b/assets/js/a830598a.376dedc8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5414],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),f=o,m=u["".concat(s,".").concat(f)]||u[f]||b[f]||a;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>b,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:4,sidebar_label:"ReportPortal jobs configuration"},i="ReportPortal jobs configuration",l={unversionedId:"reportportal-configuration/ReportPortalJobsConfiguration",id:"reportportal-configuration/ReportPortalJobsConfiguration",title:"ReportPortal jobs configuration",description:"Currently, ReportPortal has 5 configurable jobs for data removing:",source:"@site/docs/reportportal-configuration/ReportPortalJobsConfiguration.md",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/ReportPortalJobsConfiguration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/ReportPortalJobsConfiguration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_label:"ReportPortal jobs configuration"},sidebar:"defaultSidebar",previous:{title:"Project configuration",permalink:"/docs/reportportal-configuration/ProjectConfiguration"},next:{title:"Integration via plugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin"}},s={},p=[{value:"Clean launches job",id:"clean-launches-job",level:2},{value:"Clean logs job",id:"clean-logs-job",level:2},{value:"Clean attachments info job",id:"clean-attachments-info-job",level:2},{value:"Clean attachments binaries job",id:"clean-attachments-binaries-job",level:2},{value:"Project binary storage size recalculation job",id:"project-binary-storage-size-recalculation-job",level:2}],c={toc:p},u="wrapper";function b(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"reportportal-jobs-configuration"},"ReportPortal jobs configuration"),(0,o.kt)("p",null,"Currently, ReportPortal has 5 configurable jobs for data removing:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Clean launches"),(0,o.kt)("li",{parentName:"ul"},"Clean logs"),(0,o.kt)("li",{parentName:"ul"},"Clean attachments info"),(0,o.kt)("li",{parentName:"ul"},"Clean attachments binaries"),(0,o.kt)("li",{parentName:"ul"},"Project binary storage size recalculation")),(0,o.kt)("p",null,"Job execution period can be configured using environment variables, where period value should be provided as ",(0,o.kt)("a",{parentName:"p",href:"https://www.baeldung.com/cron-syntax-linux-vs-spring"},(0,o.kt)("strong",{parentName:"a"},"spring cron"))," expression:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"*/30 * * * * *")," - every 30 seconds"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"0 */2 * * * *")," - every 2 minutes"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"0 0 */24 * * *")," - every 24 hours (every day)")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://github.com/reportportal/reportportal/blob/2b22c61f87674aaf2efc7a973af38004c2517680/docker-compose.yml#L237-L241"},"Job environment variables example for docker")),(0,o.kt)("h2",{id:"clean-launches-job"},"Clean launches job"),(0,o.kt)("p",null,"Clean launches job removes launches, their test items and logs.\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON=0 */10 * * * *")," - specifies how often job will be started (every 10 minutes)")),(0,o.kt)("h2",{id:"clean-logs-job"},"Clean logs job"),(0,o.kt)("p",null,"Clean logs job removes logs.\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON=0 */5 * * * *")," - specifies how often job will be started (every 5 minutes)")),(0,o.kt)("h2",{id:"clean-attachments-info-job"},"Clean attachments info job"),(0,o.kt)("p",null,"Clean attachments info job removes attachments data from main ",(0,o.kt)("strong",{parentName:"p"},"database")," storage and puts into ",(0,o.kt)("strong",{parentName:"p"},"temporary table")," to remove binaries from the ",(0,o.kt)("strong",{parentName:"p"},"file storage"),"\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON=0 */2 * * * *")," - specifies how often job will be started (every 2 minutes)")),(0,o.kt)("h2",{id:"clean-attachments-binaries-job"},"Clean attachments binaries job"),(0,o.kt)("p",null,"Clean attachments binaries job uses data from the ",(0,o.kt)("strong",{parentName:"p"},"temporary table")," (filled by previous job)\nand removes binaries from the ",(0,o.kt)("strong",{parentName:"p"},"file storage"),"\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON=*/30 * * * * *")," - specifies how often job will be started (every 30 seconds)"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSize=1000")," - specifies the size of the batch to be selected from the ",(0,o.kt)("strong",{parentName:"li"},"temporary table")," to be removed")),(0,o.kt)("h2",{id:"project-binary-storage-size-recalculation-job"},"Project binary storage size recalculation job"),(0,o.kt)("p",null,"Project binary storage size recalculation job updates ",(0,o.kt)("strong",{parentName:"p"},"allocated storage")," value of the ",(0,o.kt)("strong",{parentName:"p"},"project")," based on the existing attachments at the moment.\nEnvironment variables for configuration with default values:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON=0 */1 * * * *")," - specifies how often job will be started (every minute)")))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a830598a.4fd1d6d5.js b/assets/js/a830598a.4fd1d6d5.js deleted file mode 100644 index 24ff641b7..000000000 --- a/assets/js/a830598a.4fd1d6d5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5414],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(r),b=a,f=u["".concat(s,".").concat(b)]||u[b]||m[b]||o;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=b;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_position:4,sidebar_label:"ReportPortal jobs configuration"},i="ReportPortal jobs configuration",l={unversionedId:"reportportal-configuration/ReportPortalJobsConfiguration",id:"reportportal-configuration/ReportPortalJobsConfiguration",title:"ReportPortal jobs configuration",description:"Currently, ReportPortal has 5 configurable jobs for data removing:",source:"@site/docs/reportportal-configuration/ReportPortalJobsConfiguration.md",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/ReportPortalJobsConfiguration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/ReportPortalJobsConfiguration.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_label:"ReportPortal jobs configuration"},sidebar:"defaultSidebar",previous:{title:"Project configuration",permalink:"/docs/reportportal-configuration/ProjectConfiguration"},next:{title:"Integration via plugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin"}},s={},p=[{value:"Clean launches job",id:"clean-launches-job",level:2},{value:"Clean logs job",id:"clean-logs-job",level:2},{value:"Clean attachments info job",id:"clean-attachments-info-job",level:2},{value:"Clean attachments binaries job",id:"clean-attachments-binaries-job",level:2},{value:"Project binary storage size recalculation job",id:"project-binary-storage-size-recalculation-job",level:2}],c={toc:p},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"reportportal-jobs-configuration"},"ReportPortal jobs configuration"),(0,a.kt)("p",null,"Currently, ReportPortal has 5 configurable jobs for data removing:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Clean launches"),(0,a.kt)("li",{parentName:"ul"},"Clean logs"),(0,a.kt)("li",{parentName:"ul"},"Clean attachments info"),(0,a.kt)("li",{parentName:"ul"},"Clean attachments binaries"),(0,a.kt)("li",{parentName:"ul"},"Project binary storage size recalculation")),(0,a.kt)("p",null,"Job execution period can be configured using environment variables, where period value should be provided as ",(0,a.kt)("a",{parentName:"p",href:"https://www.baeldung.com/cron-syntax-linux-vs-spring"},(0,a.kt)("strong",{parentName:"a"},"spring cron"))," expression:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("em",{parentName:"li"},"/30 ")," * * * * - every 30 seconds"),(0,a.kt)("li",{parentName:"ul"},"0 ",(0,a.kt)("em",{parentName:"li"},"/2 ")," * * * - every 2 minutes"),(0,a.kt)("li",{parentName:"ul"},"0 0 ",(0,a.kt)("em",{parentName:"li"},"/24 ")," * * - every 24 hours (every day)")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://github.com/reportportal/reportportal/blob/2b22c61f87674aaf2efc7a973af38004c2517680/docker-compose.yml#L237-L241"},"Job environment variables example for docker")),(0,a.kt)("h2",{id:"clean-launches-job"},"Clean launches job"),(0,a.kt)("p",null,"Clean launches job removes launches, their test items and logs.\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON=0 ",(0,a.kt)("em",{parentName:"li"},"/10 ")," * * * - specifies how often job will be started (every 10 minutes)")),(0,a.kt)("h2",{id:"clean-logs-job"},"Clean logs job"),(0,a.kt)("p",null,"Clean logs job removes logs.\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON=0 ",(0,a.kt)("em",{parentName:"li"},"/5 ")," * * * - specifies how often job will be started (every 5 minutes)")),(0,a.kt)("h2",{id:"clean-attachments-info-job"},"Clean attachments info job"),(0,a.kt)("p",null,"Clean attachments info job removes attachments data from main ",(0,a.kt)("strong",{parentName:"p"},"database")," storage and puts into ",(0,a.kt)("strong",{parentName:"p"},"temporary table")," to remove binaries from the ",(0,a.kt)("strong",{parentName:"p"},"file storage"),"\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON=0 ",(0,a.kt)("em",{parentName:"li"},"/2 ")," * * * - specifies how often job will be started (every 2 minutes)")),(0,a.kt)("h2",{id:"clean-attachments-binaries-job"},"Clean attachments binaries job"),(0,a.kt)("p",null,"Clean attachments binaries job uses data from the ",(0,a.kt)("strong",{parentName:"p"},"temporary table")," (filled by previous job)\nand removes binaries from the ",(0,a.kt)("strong",{parentName:"p"},"file storage"),"\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON=",(0,a.kt)("em",{parentName:"li"},"/30 ")," * * * * - specifies how often job will be started (every 30 seconds)"),(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSize=1000 - specifies the size of the batch to be selected from the ",(0,a.kt)("strong",{parentName:"li"},"temporary table")," to be removed")),(0,a.kt)("h2",{id:"project-binary-storage-size-recalculation-job"},"Project binary storage size recalculation job"),(0,a.kt)("p",null,"Project binary storage size recalculation job updates ",(0,a.kt)("strong",{parentName:"p"},"allocated storage")," value of the ",(0,a.kt)("strong",{parentName:"p"},"project")," based on the existing attachments at the moment.\nEnvironment variables for configuration with default values:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON=0 ",(0,a.kt)("em",{parentName:"li"},"/1 ")," * * * - specifies how often job will be started (every minute)")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bdb17ab6.03e80846.js b/assets/js/bdb17ab6.03e80846.js new file mode 100644 index 000000000..e51315a3d --- /dev/null +++ b/assets/js/bdb17ab6.03e80846.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5792],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>h});var r=a(67294);function n(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function l(t){for(var e=1;e=0||(n[a]=t[a]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(n[a]=t[a])}return n}var d=r.createContext({}),s=function(t){var e=r.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},p=function(t){var e=s(t.components);return r.createElement(d.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var a=t.components,n=t.mdxType,i=t.originalType,d=t.parentName,p=o(t,["components","mdxType","originalType","parentName"]),u=s(a),m=n,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||i;return a?r.createElement(h,l(l({ref:e},p),{},{components:a})):r.createElement(h,l({ref:e},p))}));function h(t,e){var a=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=a.length,l=new Array(i);l[0]=m;var o={};for(var d in e)hasOwnProperty.call(e,d)&&(o[d]=e[d]);o.originalType=t,o[u]="string"==typeof t?t:n,l[1]=o;for(var s=2;s{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_position:3,sidebar_label:"Widget Creation"},l="Widget Creation",o={unversionedId:"dashboards-and-widgets/WidgetCreation",id:"dashboards-and-widgets/WidgetCreation",title:"Widget Creation",description:"In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and",source:"@site/docs/dashboards-and-widgets/WidgetCreation.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/WidgetCreation",permalink:"/docs/dashboards-and-widgets/WidgetCreation",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/WidgetCreation.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Widget Creation"},sidebar:"defaultSidebar",previous:{title:"Work with dashboards",permalink:"/docs/dashboards-and-widgets/WorkWithDashboards"},next:{title:"Manage Widgets",permalink:"/docs/dashboards-and-widgets/ManageWidgets"}},d={},s=[{value:"Create widget",id:"create-widget",level:2},{value:"Predefined widgets types",id:"predefined-widgets-types",level:2}],p={toc:s},u="wrapper";function c(t){let{components:e,...i}=t;return(0,n.kt)(u,(0,r.Z)({},p,i,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"widget-creation"},"Widget Creation"),(0,n.kt)("p",null,"In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and\neasy-to-use way of displaying and analyzing your automation trends and data."),(0,n.kt)("p",null,'The widgets can be added to dashboards on the "Dashboards" tab. Widgets will be visible within the project, they are created.'),(0,n.kt)("h2",{id:"create-widget"},"Create widget"),(0,n.kt)("p",null,"To create a new widget, perform the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Navigate to the "All Dashboards" page and create a new dashboard or choose the existing one.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Add New Widget" button.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The Widget Wizard will be opened. To add a new widget, you need to pass all the required steps."),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 1. Select the template of the widget (detailed description is below)."),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 2. Select a filter from the list below or create a new filter. Search functionality helps to find the filter quicker. Select other widget options: Criteria, Items, Launch or Timeline mode (if applicable for selected widget template)"),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 3. Enter a widget name and description.\nA widget name should be unique for a user on the project.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'After you have completed all steps, click the "Save" button. The new widget will be added to the dashboard on the top.'))),(0,n.kt)("p",null,"Widgets are automatically refreshed every minute."),(0,n.kt)("media-view",{thumbnail:a(40227),src:"https://youtu.be/GdyAM_6Nz10",alt:"Create widget for test report&analytics dashboard",type:"video"}),(0,n.kt)("h2",{id:"predefined-widgets-types"},"Predefined widgets types"),(0,n.kt)("p",null,"There are 15 widget templates in ReportPortal for tracking different KPI:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"KPI"),(0,n.kt)("th",{parentName:"tr",align:null},"Widget template"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the reasons of failures"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchStatisticsChart"},"Launch statistics chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Passing rate for filter summary, and structure of problems"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./OverallStatistics"},"Overall statistics"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the longest launch in the filter"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchesDurationChart"},"Launches duration chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the passing rate and structure of problems of the latest run in the system"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchExecutionAndIssueStatistic"},"Launch execution and issue statistic"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the activity of your QA team"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./ProjectActivityPanel"},"Project activity panel"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the growth of new test cases in your build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./TestCasesGrowthTrendChart"},"Test-cases growth trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the speed of test failure analysis"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./InvestigatedPercentageOfLaunches"},"Investigated percentage of launches"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Follow up information about only important launches for your team"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchesTable"},"Launches table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track new BTS issues in your run"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./UniqueBugsTable"},"Unique bugs table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the most unstable test cases in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostFailedTestCasesTableTop20"},"Most failed test-cases table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"See the trend of the number of failed test cases from build to build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./FailedCasesTrendChart"},"Failed cases trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"See the trend of the number of failed and skipped test cases from build to build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./NonPassedTestCasesTrendChart"},"Non-passed test-cases trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Compare two launches together"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./DifferentLaunchesComparisonChart"},"Different launches comparison chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track passing rate for one launch"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./PassingRatePerLaunch"},"Passing rate per launch"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track passing rate for the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./PassingRateSummary"},"Passing rate summary"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Find the most flakiest test in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./FlakyTestCasesTableTop20"},"Flaky test cases table (TOP-20)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Compare statistics for different builds on one graph"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./CumulativeTrendChart"},"Cumulative trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the most popular failure reasons in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostPopularPatternTableTop20"},"Most popular pattern table (TOP-20)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the passing rate of different components of your application"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./ComponentHealthCheck"},"Component health check"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the statistics of different components of your application"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./TableComponentHealthCheck"},"Component health check (table)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the top-20 tests with longest execution time"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostTimeConsumingTestCasesWidgetTop20"},"Most time-consuming test cases widget (TOP-20)"))))))}c.isMDXComponent=!0},40227:(t,e,a)=>{a.r(e),a.d(e,{default:()=>r});const r=a.p+"assets/images/CreateWidget-f596ab25c80ea89a250a68dfcff3f53d.png"}}]); \ No newline at end of file diff --git a/assets/js/bdb17ab6.fbdff6bb.js b/assets/js/bdb17ab6.fbdff6bb.js deleted file mode 100644 index adae36fa9..000000000 --- a/assets/js/bdb17ab6.fbdff6bb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[5792],{3905:(t,e,a)=>{a.d(e,{Zo:()=>p,kt:()=>h});var r=a(67294);function n(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,r)}return a}function l(t){for(var e=1;e=0||(n[a]=t[a]);return n}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(n[a]=t[a])}return n}var d=r.createContext({}),s=function(t){var e=r.useContext(d),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},p=function(t){var e=s(t.components);return r.createElement(d.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var a=t.components,n=t.mdxType,i=t.originalType,d=t.parentName,p=o(t,["components","mdxType","originalType","parentName"]),u=s(a),m=n,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||i;return a?r.createElement(h,l(l({ref:e},p),{},{components:a})):r.createElement(h,l({ref:e},p))}));function h(t,e){var a=arguments,n=e&&e.mdxType;if("string"==typeof t||n){var i=a.length,l=new Array(i);l[0]=m;var o={};for(var d in e)hasOwnProperty.call(e,d)&&(o[d]=e[d]);o.originalType=t,o[u]="string"==typeof t?t:n,l[1]=o;for(var s=2;s{a.r(e),a.d(e,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_position:3,sidebar_label:"Widget Creation"},l="Widget Creation",o={unversionedId:"dashboards-and-widgets/WidgetCreation",id:"dashboards-and-widgets/WidgetCreation",title:"Widget Creation",description:"In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and",source:"@site/docs/dashboards-and-widgets/WidgetCreation.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/WidgetCreation",permalink:"/docs/dashboards-and-widgets/WidgetCreation",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/WidgetCreation.mdx",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_label:"Widget Creation"},sidebar:"defaultSidebar",previous:{title:"Work with dashboards",permalink:"/docs/dashboards-and-widgets/WorkWithDashboards"},next:{title:"Manage Widgets",permalink:"/docs/dashboards-and-widgets/ManageWidgets"}},d={},s=[{value:"Create widget",id:"create-widget",level:2},{value:"Predefined widgets types",id:"predefined-widgets-types",level:2}],p={toc:s},u="wrapper";function c(t){let{components:e,...i}=t;return(0,n.kt)(u,(0,r.Z)({},p,i,{components:e,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"widget-creation"},"Widget Creation"),(0,n.kt)("p",null,"In our test automation dashboard widgets contain special graphical control elements that were designed to provide a simple and\neasy-to-use way of displaying and analyzing your automation trends and data."),(0,n.kt)("p",null,'The widgets can be added to dashboards on the "Dashboards" tab. Widgets will be visible within the project, they are created.'),(0,n.kt)("h2",{id:"create-widget"},"Create widget"),(0,n.kt)("p",null,"To create a new widget, perform the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Navigate to the "All Dashboards" page and create a new dashboard or choose the existing one.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'Click the "Add New Widget" button.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"The Widget Wizard will be opened. To add a new widget, you need to pass all the required steps."),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 1. Select the template of the widget (detailed description is below)."),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 2. Select a filter from the list below or create a new filter. Search functionality helps to find the filter quicker. Select other widget options: Criteria, Items, Launch or Timeline mode (if applicable for selected widget template)"),(0,n.kt)("p",{parentName:"li"},"\u2022 Step 3. Enter a widget name, description and share a widget (if need).\nA widget name should be unique for a user on the project.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'After you have completed all steps, click the "Save" button. The new widget will be added to the dashboard on the top.'))),(0,n.kt)("p",null,"Widgets are automatically refreshed every minute."),(0,n.kt)("media-view",{thumbnail:a(40227),src:"https://youtu.be/uRY_ihUe_oU",alt:"Create widget for test report&analytics dashboard",type:"video"}),(0,n.kt)("h2",{id:"predefined-widgets-types"},"Predefined widgets types"),(0,n.kt)("p",null,"There are 15 widget templates in ReportPortal for tracking different KPI:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"KPI"),(0,n.kt)("th",{parentName:"tr",align:null},"Widget template"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the reasons of failures"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchStatisticsChart"},"Launch statistics chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Passing rate for filter summary, and structure of problems"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./OverallStatistics"},"Overall statistics"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the longest launch in the filter"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchesDurationChart"},"Launches duration chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the passing rate and structure of problems of the latest run in the system"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchExecutionAndIssueStatistic"},"Launch execution and issue statistic"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the activity of your QA team"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./ProjectActivityPanel"},"Project activity panel"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the growth of new test cases in your build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./TestCasesGrowthTrendChart"},"Test-cases growth trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the speed of test failure analysis"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./InvestigatedPercentageOfLaunches"},"Investigated percentage of launches"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Follow up information about only important launches for your team"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./LaunchesTable"},"Launches table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track new BTS issues in your run"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./UniqueBugsTable"},"Unique bugs table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the most unstable test cases in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostFailedTestCasesTableTop20"},"Most failed test-cases table"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"See the trend of the number of failed test cases from build to build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./FailedCasesTrendChart"},"Failed cases trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"See the trend of the number of failed and skipped test cases from build to build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./NonPassedTestCasesTrendChart"},"Non-passed test-cases trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Compare two launches together"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./DifferentLaunchesComparisonChart"},"Different launches comparison chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track passing rate for one launch"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./PassingRatePerLaunch"},"Passing rate per launch"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track passing rate for the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./PassingRateSummary"},"Passing rate summary"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Find the most flakiest test in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./FlakyTestCasesTableTop20"},"Flaky test cases table (TOP-20)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Compare statistics for different builds on one graph"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./CumulativeTrendChart"},"Cumulative trend chart"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the most popular failure reasons in the build"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostPopularPatternTableTop20"},"Most popular pattern table (TOP-20)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the passing rate of different components of your application"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./ComponentHealthCheck"},"Component health check"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the statistics of different components of your application"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./TableComponentHealthCheck"},"Component health check (table)"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Track the top-20 tests with longest execution time"),(0,n.kt)("td",{parentName:"tr",align:null},(0,n.kt)("a",{parentName:"td",href:"./MostTimeConsumingTestCasesWidgetTop20"},"Most time-consuming test cases widget (TOP-20)"))))))}c.isMDXComponent=!0},40227:(t,e,a)=>{a.r(e),a.d(e,{default:()=>r});const r=a.p+"assets/images/CreateWidget-25ed2492b3e2a2abc0b915d59d695542.png"}}]); \ No newline at end of file diff --git a/assets/js/bf477335.c38ae492.js b/assets/js/bf477335.c38ae492.js deleted file mode 100644 index 36b6af04a..000000000 --- a/assets/js/bf477335.c38ae492.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[963],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(h,i(i({ref:t},c),{},{components:n})):r.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:2,sidebar_label:"Creation of project and adding users"},i="Creation of project and adding users",s={unversionedId:"reportportal-configuration/CreationOfProjectAndAddingUsers",id:"reportportal-configuration/CreationOfProjectAndAddingUsers",title:"Creation of project and adding users",description:"The main question of how you can organize your working space in ReportPortal.",source:"@site/docs/reportportal-configuration/CreationOfProjectAndAddingUsers.md",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/CreationOfProjectAndAddingUsers",permalink:"/docs/reportportal-configuration/CreationOfProjectAndAddingUsers",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/CreationOfProjectAndAddingUsers.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"Creation of project and adding users"},sidebar:"defaultSidebar",previous:{title:"Components Overview",permalink:"/docs/reportportal-configuration/ComponentsOverview"},next:{title:"Project configuration",permalink:"/docs/reportportal-configuration/ProjectConfiguration"}},l={},p=[{value:"Create a project",id:"create-a-project",level:2},{value:"Add users to project",id:"add-users-to-project",level:2},{value:"Invite a user to a project",id:"invite-a-user-to-a-project",level:2},{value:"Assign user to the project",id:"assign-user-to-the-project",level:2},{value:"Edit project role",id:"edit-project-role",level:2},{value:"Unassign user from the project",id:"unassign-user-from-the-project",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"creation-of-project-and-adding-users"},"Creation of project and adding users"),(0,o.kt)("p",null,"The main question of how you can organize your working space in ReportPortal.\nLet's see two use cases which can help you to make a decision."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use Case 1"),": "),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Situation:")," We have a small team. Everybody can see everything. We need one dashboard which shows information about the whole project."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Solution:")," Create one project. Assign all users on the created project. View all types of test cases (UI, API, Unit and so on) on this project. Divide executions by custom filters. Create a dashboard with a widget based on filters."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Pros:")," You have a dashboard that can combine all results needed for your team. You need to configure only one project."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Cons:")," All team members can see all results, you can not configure permissions rules.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use Case 2"),": "),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Situation:")," We have a big team with a difficult permission structure and nested streams. Only persons with granted permissions can see results of a certain stream. "),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Solution:")," Create separate projects for different streams. Assign users to appropriate projects. Create a dashboard with a widget based on filters for each project."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Pros:")," Security, only users with granted permission will have access to the data."),(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Cons:")," You can not see a single dashboard for several dashboards. ")),(0,o.kt)("p",null,"If you choose a strategy, it is time to create your first project."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section ADMINISTRATOR can create, configure, delete projects and add/invite/assign/unassign users on/to the projects. '),(0,o.kt)("h2",{id:"create-a-project"},"Create a project"),(0,o.kt)("p",null,"To create a project for a team:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Login to the ReportPortal as an ADMIN user"),(0,o.kt)("li",{parentName:"ul"},"Open menu at the bottom."),(0,o.kt)("li",{parentName:"ul"},"Click the 'Administrate' link "),(0,o.kt)("li",{parentName:"ul"},"Select 'Projects' from the left-hand sidebar"),(0,o.kt)("li",{parentName:"ul"},"Click the 'Add New Project' button in the right top corner"),(0,o.kt)("li",{parentName:"ul"},"Then enter a name of the project"),(0,o.kt)("li",{parentName:"ul"},"Click the 'Add' button.")),(0,o.kt)("p",null,"A confirmation message in the status bar should appear."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"The name of the project should contain between 3-256 symbols.\nIt can include Latin and numeric characters, as well as underscores and dashes.\nThe name should be unique and cannot be changed after saving.")),(0,o.kt)("p",null,"An Admin can configure the project settings or leave them as the default.\nProject members with PROJECT_MANAGER roles are able to set up the project settings.\nTo know how project settings could be updated, go to the ",(0,o.kt)("a",{parentName:"p",href:"./ProjectConfiguration"},"ProjectConfiguration")," section."),(0,o.kt)("p",null,'To know more about the project\'s management, go to "Administrate" section > "All Projects" page.'),(0,o.kt)("p",null,"You have a project, now add your team members to it. You can create a new user and send credentials for them - ",(0,o.kt)("strong",{parentName:"p"},"Add user")," or you can send them an invite link - ",(0,o.kt)("strong",{parentName:"p"},"Invite user"),"."),(0,o.kt)("h2",{id:"add-users-to-project"},"Add users to project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ADMINISTRATOR can add users.'),(0,o.kt)("p",null,"To add a user, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as Administrator.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click "Add User" button.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Fill all fields with valid data in the "Add user" form and click on the "Add" button.'))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"'login': \n'Full Name': \n'Email': \n'Account role': USER (by default)\n'Project Role': MEMBER (by default)\n'Password': could be entered manually (at least 6 symbols required) or generated via the link under the field.\n")),(0,o.kt)("p",null,"Example of user creation:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"Enter the user's login: Demo\nEnter the user's full name: Demo user\nEnter the user's email: demo_user@example.com\n'Account role': USER (by default)\n'Project Role': MEMBER (by default)\nAdd password: 1q2w3e \n")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},'This is the only place in the system where an Administrator can be created\nfrom. "Project role" is disabled, if "Administrator" value has been selected in the "Account role" field. The "ProjectRole" parameter is not specified for\nAdministrator, the Administrator has full privileges on the project.')),(0,o.kt)("p",null,"Submit the form."),(0,o.kt)("p",null,"A confirmation message in the status bar should appear."),(0,o.kt)("p",null,"The notification email letter is sent to the email address of the new user."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.")),(0,o.kt)("p",null,'By default, the system creates a personal project for new users. All new users which have been added to the ReportPortal will have a personal project along with the project where they have been assigned on. The user will be assigned to "Personal Project" with the PROJECT MANAGER project role.'),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"If you do not need a personal project, ADMINISTRATOR can delete it. This project will be removed from the instance. But if the user is unassigned from all projects in the system, and he/she will log in to the ReportPortal after that - the deleted personal project will be created once more time.")),(0,o.kt)("p",null,'If you wish to know more about adding user options, go to "Administrate" section > "All Users" page.'),(0,o.kt)("h2",{id:"invite-a-user-to-a-project"},"Invite a user to a project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),"\nVia Administrate section, only ADMINISTRATOR can invite users.\nVia Project Space, ADMINISTRATOR and PROJECT MANAGER can invite users."),(0,o.kt)("p",null,'To invite a user on the "All Users" page, perform the following steps:'),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as Administrator.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click on the "Invite User" button.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Fill all fields with valid data in the "Invite user" form and click on the "Invite" button. - The invitation\nhas been sent. You can copy the link to the invitation from the "Link to\ninvitation" field.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"The user will receive an email with the link to the invitation. Registration\nlink will be active until the user registers in the system by this reference,\nbut not more than 24 hours. When the user clicks the link, he/she will see a registration form.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The user needs to fill in the registration form and click the "Register" button to complete the registration.\nThe user will be assigned to the project that was specified by you during the invitation,\nand to "Personal Project" with the PROJECT MANAGER project role.'))),(0,o.kt)("h2",{id:"assign-user-to-the-project"},"Assign user to the project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ADMINISTRATOR can assign users.\nVia Project Space ADMINISTRATOR and PROJECT MANAGER can assign users.'),(0,o.kt)("p",null,"Perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as Administrator.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All Users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Find a user and click "+ Assign to project" button.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Fill the name of project.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select a project role.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click on the "Tick" button. - The user will be assigned to the project.'))),(0,o.kt)("h2",{id:"edit-project-role"},"Edit project role"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ADMINISTRATOR can edit the project role.\nVia Project Space ADMINISTRATOR and PROJECT MANAGER can edit the project role.'),(0,o.kt)("p",null,"To edit the project role, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Login into ReportPortal instance as Administrator.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All Users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Find a user and their project in the "Projects and roles" column.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click on the name of project.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Select a new value from the "Project Role" drop-down.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click on the "Tick" icon.'))),(0,o.kt)("h2",{id:"unassign-user-from-the-project"},"Unassign user from the project"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ADMINISTRATOR can unassign users.\nVia Project Space ADMINISTRATOR and PROJECT MANAGER can unassign users.'),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.")),(0,o.kt)("p",null,"Depending on the project needs the assignment could be removed.\nTo unassign the assignment for the user on the project, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Administrate" section -',">",' "All Users" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Find a user and their project in the "Projects and roles" column.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click on the name of project.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click on "Cross" icon near the needed project.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Confirm the action. - The user will be unassigned from the current project but will stay in the system."))),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Users can not be unassign from their own personal projects.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bf477335.dbaea5ba.js b/assets/js/bf477335.dbaea5ba.js new file mode 100644 index 000000000..9db5fcc4e --- /dev/null +++ b/assets/js/bf477335.dbaea5ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[963],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,h=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return n?o.createElement(h,i(i({ref:t},c),{},{components:n})):o.createElement(h,i({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=n(87462),r=(n(67294),n(3905));const a={sidebar_position:2,sidebar_label:"Creation of project and adding users"},i="Creation of project and adding users",s={unversionedId:"reportportal-configuration/CreationOfProjectAndAddingUsers",id:"reportportal-configuration/CreationOfProjectAndAddingUsers",title:"Creation of project and adding users",description:"The main question of how you can organize your working space in ReportPortal.",source:"@site/docs/reportportal-configuration/CreationOfProjectAndAddingUsers.md",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/CreationOfProjectAndAddingUsers",permalink:"/docs/reportportal-configuration/CreationOfProjectAndAddingUsers",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/CreationOfProjectAndAddingUsers.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"Creation of project and adding users"},sidebar:"defaultSidebar",previous:{title:"Components Overview",permalink:"/docs/reportportal-configuration/ComponentsOverview"},next:{title:"Project configuration",permalink:"/docs/reportportal-configuration/ProjectConfiguration"}},l={},p=[{value:"Create a project",id:"create-a-project",level:2},{value:"Add users to project",id:"add-users-to-project",level:2},{value:"Invite a user to a project",id:"invite-a-user-to-a-project",level:2},{value:"Assign user to the project",id:"assign-user-to-the-project",level:2},{value:"Edit project role",id:"edit-project-role",level:2},{value:"Unassign user from the project",id:"unassign-user-from-the-project",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"creation-of-project-and-adding-users"},"Creation of project and adding users"),(0,r.kt)("p",null,"The main question of how you can organize your working space in ReportPortal.\nLet's see two use cases which can help you to make a decision."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Use Case 1"),": "),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Situation:")," We have a small team. Everybody can see everything. We need one dashboard which shows information about the whole project."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Solution:")," Create one project. Assign all users on the created project. View all types of test cases (UI, API, Unit and so on) on this project. Divide executions by custom filters. Create a dashboard with a widget based on filters."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Pros:")," You have a dashboard that can combine all results needed for your team. You need to configure only one project."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Cons:")," All team members can see all results, you can not configure permissions rules.")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Use Case 2"),": "),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Situation:")," We have a big team with a difficult permission structure and nested streams. Only persons with granted permissions can see results of a certain stream. "),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Solution:")," Create separate projects for different streams. Assign users to appropriate projects. Create a dashboard with a widget based on filters for each project."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Pros:")," Security, only users with granted permission will have access to the data."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"Cons:")," You can not see a single dashboard for several dashboards. ")),(0,r.kt)("p",null,"If you choose a strategy, it is time to create your first project."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can create, configure, delete projects and add/invite/assign/unassign users on/to the projects. "),(0,r.kt)("h2",{id:"create-a-project"},"Create a project"),(0,r.kt)("p",null,"To create a project for a team:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Login to the ReportPortal as an ADMIN user"),(0,r.kt)("li",{parentName:"ul"},"Open menu at the bottom."),(0,r.kt)("li",{parentName:"ul"},"Click the 'Administrate' link "),(0,r.kt)("li",{parentName:"ul"},"Select 'Projects' from the left-hand sidebar"),(0,r.kt)("li",{parentName:"ul"},"Click the 'Add New Project' button in the right top corner"),(0,r.kt)("li",{parentName:"ul"},"Then enter a name of the project"),(0,r.kt)("li",{parentName:"ul"},"Click the 'Add' button.")),(0,r.kt)("p",null,"A confirmation message in the status bar should appear."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The name of the project should contain between 3-256 symbols.\nIt can include Latin and numeric characters, as well as underscores and dashes.\nThe name should be unique and cannot be changed after saving.")),(0,r.kt)("p",null,"An Admin can configure the project settings or leave them as the default.\nProject members with PROJECT_MANAGER roles are able to set up the project settings.\nTo know how project settings could be updated, go to the ",(0,r.kt)("a",{parentName:"p",href:"./ProjectConfiguration"},"ProjectConfiguration")," section."),(0,r.kt)("p",null,'To know more about the project\'s management, go to "Administrate" section > "All Projects" page.'),(0,r.kt)("p",null,"You have a project, now add your team members to it. You can create a new user and send credentials for them - ",(0,r.kt)("strong",{parentName:"p"},"Add user")," or you can send them an invite link - ",(0,r.kt)("strong",{parentName:"p"},"Invite user"),"."),(0,r.kt)("h2",{id:"add-users-to-project"},"Add users to project"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can add users."),(0,r.kt)("p",null,"To add a user, perform the following steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as Administrator."),(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All users" page.'),(0,r.kt)("li",{parentName:"ol"},'Click "Add User" button.'),(0,r.kt)("li",{parentName:"ol"},'Fill all fields with valid data in the "Add user" form and click on the "Add" button.')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"'login': \n'Full Name': \n'Email': \n'Account role': USER (by default)\n'Project Role': MEMBER (by default)\n'Password': could be entered manually (at least 6 symbols required) or generated via the link under the field.\n")),(0,r.kt)("p",null,"Example of user creation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"Enter the user's login: Demo\nEnter the user's full name: Demo user\nEnter the user's email: demo_user@example.com\n'Account role': USER (by default)\n'Project Role': MEMBER (by default)\nAdd password: 1q2w3e \n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},'This is the only place in the system where an Administrator can be created\nfrom. "Project role" is disabled, if "Administrator" value has been selected in the "Account role" field. The "ProjectRole" parameter is not specified for\nAdministrator, the Administrator has full privileges on the project.')),(0,r.kt)("p",null,"Submit the form."),(0,r.kt)("p",null,"A confirmation message in the status bar should appear."),(0,r.kt)("p",null,"The notification email letter is sent to the email address of the new user."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.")),(0,r.kt)("p",null,'By default, the system creates a personal project for new users. All new users which have been added to the ReportPortal will have a personal project along with the project where they have been assigned on. The user will be assigned to "Personal Project" with the ',(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," project role."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you do not need a personal project, ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can delete it. This project will be removed from the instance. But if the user is unassigned from all projects in the system, and he/she will log in to the ReportPortal after that - the deleted personal project will be created once more time.")),(0,r.kt)("p",null,'If you wish to know more about adding user options, go to "Administrate" section > "All Users" page.'),(0,r.kt)("h2",{id:"invite-a-user-to-a-project"},"Invite a user to a project"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),"\nVia Administrate section, only ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can invite users.\nVia Project Space, ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," can invite users."),(0,r.kt)("p",null,'To invite a user on the "All Users" page, perform the following steps:'),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as Administrator."),(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All users" page.'),(0,r.kt)("li",{parentName:"ol"},'Click on the "Invite User" button.'),(0,r.kt)("li",{parentName:"ol"},'Fill all fields with valid data in the "Invite user" form and click on the "Invite" button. - The invitation\nhas been sent. You can copy the link to the invitation from the "Link to\ninvitation" field.'),(0,r.kt)("li",{parentName:"ol"},"The user will receive an email with the link to the invitation. Registration\nlink will be active until the user registers in the system by this reference,\nbut not more than 24 hours. When the user clicks the link, he/she will see a registration form."),(0,r.kt)("li",{parentName:"ol"},'The user needs to fill in the registration form and click the "Register" button to complete the registration.\nThe user will be assigned to the project that was specified by you during the invitation,\nand to "Personal Project" with the ',(0,r.kt)("inlineCode",{parentName:"li"},"PROJECT MANAGER")," project role.")),(0,r.kt)("h2",{id:"assign-user-to-the-project"},"Assign user to the project"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can assign users.\nVia Project Space ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," can assign users."),(0,r.kt)("p",null,"Perform the following steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as Administrator."),(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All Users" page.'),(0,r.kt)("li",{parentName:"ol"},'Find a user and click "+ Assign to project" button.'),(0,r.kt)("li",{parentName:"ol"},"Fill the name of project."),(0,r.kt)("li",{parentName:"ol"},"Select a project role."),(0,r.kt)("li",{parentName:"ol"},'Click on the "Tick" button. - The user will be assigned to the project.')),(0,r.kt)("h2",{id:"edit-project-role"},"Edit project role"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can edit the project role.\nVia Project Space ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," can edit the project role."),(0,r.kt)("p",null,"To edit the project role, perform the following steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Login into ReportPortal instance as Administrator."),(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All Users" page.'),(0,r.kt)("li",{parentName:"ol"},'Find a user and their project in the "Projects and roles" column.'),(0,r.kt)("li",{parentName:"ol"},"Click on the name of project."),(0,r.kt)("li",{parentName:"ol"},'Select a new value from the "Project Role" drop-down.'),(0,r.kt)("li",{parentName:"ol"},'Click on the "Tick" icon.')),(0,r.kt)("h2",{id:"unassign-user-from-the-project"},"Unassign user from the project"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Permission:"),'\nVia "Administrate" section, only ',(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," can unassign users.\nVia Project Space ",(0,r.kt)("inlineCode",{parentName:"p"},"ADMINISTRATOR")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PROJECT MANAGER")," can unassign users."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Please, do not forget to review project roles on regular basis. We recommend to do it at least quarterly.")),(0,r.kt)("p",null,"Depending on the project needs the assignment could be removed.\nTo unassign the assignment for the user on the project, perform the following steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},'Navigate to the "Administrate" section -',">",' "All Users" page.'),(0,r.kt)("li",{parentName:"ol"},'Find a user and their project in the "Projects and roles" column.'),(0,r.kt)("li",{parentName:"ol"},"Click on the name of project."),(0,r.kt)("li",{parentName:"ol"},'Click on "Cross" icon near the needed project.'),(0,r.kt)("li",{parentName:"ol"},"Confirm the action. - The user will be unassigned from the current project but will stay in the system.")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Users can not be unassign from their own personal projects.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c3038888.8ba87a9d.js b/assets/js/c3038888.8ba87a9d.js deleted file mode 100644 index 73bae930c..000000000 --- a/assets/js/c3038888.8ba87a9d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7100],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>d});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},s=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},c="mdxType",g={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,s=l(t,["components","mdxType","originalType","parentName"]),c=u(n),f=a,d=c["".concat(p,".").concat(f)]||c[f]||g[f]||o;return n?r.createElement(d,i(i({ref:e},s),{},{components:n})):r.createElement(d,i({ref:e},s))}));function d(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=n.length,i=new Array(o);i[0]=f;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[c]="string"==typeof t?t:a,i[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_position:6,sidebar_label:"Integration via plugin"},i="Integration via plugin",l={unversionedId:"reportportal-configuration/IntegrationViaPlugin",id:"reportportal-configuration/IntegrationViaPlugin",title:"Integration via plugin",description:"Users can reinforce ReportPortal with adding additional integrtions with:",source:"@site/docs/reportportal-configuration/IntegrationViaPlugin.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/IntegrationViaPlugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/IntegrationViaPlugin.mdx",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,sidebar_label:"Integration via plugin"},sidebar:"defaultSidebar",previous:{title:"ReportPortal jobs configuration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration"},next:{title:"How to get an access token in ReportPortal",permalink:"/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal"}},p={},u=[],s={toc:u},c="wrapper";function g(t){let{components:e,...o}=t;return(0,a.kt)(c,(0,r.Z)({},s,o,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"integration-via-plugin"},"Integration via plugin"),(0,a.kt)("p",null,"Users can reinforce ReportPortal with adding additional integrtions with:"),(0,a.kt)("media-view",{src:n(54753),alt:"Integrations with our test automation results dashboard"}),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/JiraServer"},"Jira Server")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/JiraCloud"},"Jira Cloud")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/Rally"},"Rally")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/AzureDevOpsBTS"},"Azure DevOps")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/SauceLabs"},"Sauce Labs")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/plugins/EmailServer"},"E-mail server")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/LDAP"},"LDAP")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/ActiveDirectory"},"Active Directory")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/SAMLProvider/OktaSAML"},"Okta SAML")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/SAMLProvider/AzureSAML"},"Azure SAML"))),(0,a.kt)("p",null,"If you want to integrate ReportPortal with these external systems, and you can not find a needed tab on the Project Settings, please check the section in documentation ",(0,a.kt)("a",{parentName:"p",href:"/category/plugins"},"Plugins"),"."),(0,a.kt)("p",null,"Integration configurations can be added on the global level (for all projects on the instance) in the Administrate section or the project level (only for one project) on Project Settings."),(0,a.kt)("p",null,"If you have another configuration than other projects have or you want to integrate only your project with an external system, you should perform the next actions:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Log in to ReportPortal as PROJECT MANAGER or ADMIN")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Go to Project settings > Integrations")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click on one of the integration panels")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},'And click the button "Unlink and setup manually"'))),(0,a.kt)("p",null,"By this action, you unlink the current project from the global settings and configure your integration."),(0,a.kt)("media-view",{src:n(97524),alt:"Unlink Global Jira Integration"}),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"If you unlink project setting and ADMIN changes global settings for the whole instance, your project will use your project settings.")),(0,a.kt)("p",null,'To return global settings, you need to click a button "Reset to global settings".\nIn this case, your settings will be deleted, and integration will use global settings.'),(0,a.kt)("p",null,"You can always reset to the global settings."))}g.isMDXComponent=!0},54753:(t,e,n)=>{n.r(e),n.d(e,{default:()=>r});const r=n.p+"assets/images/Integrations-939c7351871dea98250271244a1ae0ae.png"},97524:(t,e,n)=>{n.r(e),n.d(e,{default:()=>r});const r=n.p+"assets/images/UnlinkGlobalIntegration-472618f9a893b44147f1ab1544498eb5.png"}}]); \ No newline at end of file diff --git a/assets/js/c3038888.fa2c8662.js b/assets/js/c3038888.fa2c8662.js new file mode 100644 index 000000000..b12fab06a --- /dev/null +++ b/assets/js/c3038888.fa2c8662.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[7100],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>d});var r=n(67294);function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},s=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},c="mdxType",g={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var n=t.components,o=t.mdxType,a=t.originalType,p=t.parentName,s=l(t,["components","mdxType","originalType","parentName"]),c=u(n),f=o,d=c["".concat(p,".").concat(f)]||c[f]||g[f]||a;return n?r.createElement(d,i(i({ref:e},s),{},{components:n})):r.createElement(d,i({ref:e},s))}));function d(t,e){var n=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[c]="string"==typeof t?t:o,i[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>g,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var r=n(87462),o=(n(67294),n(3905));const a={sidebar_position:6,sidebar_label:"Integration via plugin"},i="Integration via plugin",l={unversionedId:"reportportal-configuration/IntegrationViaPlugin",id:"reportportal-configuration/IntegrationViaPlugin",title:"Integration via plugin",description:"Users can reinforce ReportPortal with adding additional integrtions with:",source:"@site/docs/reportportal-configuration/IntegrationViaPlugin.mdx",sourceDirName:"reportportal-configuration",slug:"/reportportal-configuration/IntegrationViaPlugin",permalink:"/docs/reportportal-configuration/IntegrationViaPlugin",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/IntegrationViaPlugin.mdx",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,sidebar_label:"Integration via plugin"},sidebar:"defaultSidebar",previous:{title:"ReportPortal jobs configuration",permalink:"/docs/reportportal-configuration/ReportPortalJobsConfiguration"},next:{title:"How to get an access token in ReportPortal",permalink:"/docs/reportportal-configuration/HowToGetAnAccessTokenInReportPortal"}},p={},u=[],s={toc:u},c="wrapper";function g(t){let{components:e,...a}=t;return(0,o.kt)(c,(0,r.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"integration-via-plugin"},"Integration via plugin"),(0,o.kt)("p",null,"Users can reinforce ReportPortal with adding additional integrtions with:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/JiraServer"},"Jira Server")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/JiraCloud"},"Jira Cloud")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/Rally"},"Rally")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/AzureDevOpsBTS"},"Azure DevOps")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/SauceLabs"},"Sauce Labs")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/plugins/EmailServer"},"E-mail server")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/LDAP"},"LDAP")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/ActiveDirectory"},"Active Directory")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/SAMLProvider/OktaSAML"},"Okta SAML")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/reportportal-configuration/authorization/SAMLProvider/AzureSAML"},"Azure SAML"))),(0,o.kt)("media-view",{src:n(54753),alt:"Integrations with our test automation results dashboard"}),(0,o.kt)("p",null,"If you want to integrate ReportPortal with these external systems, and you can not find a needed tab on the Project Settings, please check the section in documentation ",(0,o.kt)("a",{parentName:"p",href:"/category/plugins"},"Plugins"),"."),(0,o.kt)("p",null,"Integration configurations can be added on the global level (for all projects on the instance) in the Administrate section or the project level (only for one project) on Project Settings."),(0,o.kt)("p",null,"If you have another configuration than other projects have or you want to integrate only your project with an external system, you should perform the next actions:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Log in to ReportPortal as ",(0,o.kt)("inlineCode",{parentName:"li"},"PROJECT MANAGER")," or ",(0,o.kt)("inlineCode",{parentName:"li"},"ADMINISTRATOR")),(0,o.kt)("li",{parentName:"ol"},"Go to Project settings > Integrations"),(0,o.kt)("li",{parentName:"ol"},"Click on one of the integration panels"),(0,o.kt)("li",{parentName:"ol"},'And click the button "Unlink and setup manually"')),(0,o.kt)("p",null,"By this action, you unlink the current project from the global settings and configure your integration."),(0,o.kt)("media-view",{src:n(97524),alt:"Unlink Global Jira Integration"}),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"If you unlink project setting and ADMIN changes global settings for the whole instance, your project will use your project settings.")),(0,o.kt)("p",null,'To return global settings, you need to click a button "Reset to global settings".\nIn this case, your settings will be deleted, and integration will use global settings.'),(0,o.kt)("p",null,"You can always reset to the global settings."))}g.isMDXComponent=!0},54753:(t,e,n)=>{n.r(e),n.d(e,{default:()=>r});const r=n.p+"assets/images/Integrations-939c7351871dea98250271244a1ae0ae.png"},97524:(t,e,n)=>{n.r(e),n.d(e,{default:()=>r});const r=n.p+"assets/images/UnlinkGlobalIntegration-472618f9a893b44147f1ab1544498eb5.png"}}]); \ No newline at end of file diff --git a/assets/js/c60355ff.66645129.js b/assets/js/c60355ff.66645129.js new file mode 100644 index 000000000..3d85ffa2c --- /dev/null +++ b/assets/js/c60355ff.66645129.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9063],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var r=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function d(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var i=r.createContext({}),l=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):d(d({},t),e)),a},p=function(e){var t=l(e.components);return r.createElement(i.Provider,{value:t},e.children)},h="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},b=r.forwardRef((function(e,t){var a=e.components,o=e.mdxType,n=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=l(a),b=o,u=h["".concat(i,".").concat(b)]||h[b]||c[b]||n;return a?r.createElement(u,d(d({ref:t},p),{},{components:a})):r.createElement(u,d({ref:t},p))}));function u(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=a.length,d=new Array(n);d[0]=b;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[h]="string"==typeof e?e:o,d[1]=s;for(var l=2;l{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>d,default:()=>c,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=a(87462),o=(a(67294),a(3905));const n={sidebar_position:2,sidebar_label:"Work with dashboards"},d="Work with dashboards",s={unversionedId:"dashboards-and-widgets/WorkWithDashboards",id:"dashboards-and-widgets/WorkWithDashboards",title:"Work with dashboards",description:"Dashboards on our continuous testing platform are special containers, where users can create widgets.",source:"@site/docs/dashboards-and-widgets/WorkWithDashboards.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/WorkWithDashboards",permalink:"/docs/dashboards-and-widgets/WorkWithDashboards",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/WorkWithDashboards.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"Work with dashboards"},sidebar:"defaultSidebar",previous:{title:"Possible Dashboards in ReportPortal",permalink:"/docs/dashboards-and-widgets/PossibleDashboardsInReportPortal"},next:{title:"Widget Creation",permalink:"/docs/dashboards-and-widgets/WidgetCreation"}},i={},l=[{value:"Create dashboard",id:"create-dashboard",level:2},{value:"Edit dashboard",id:"edit-dashboard",level:2},{value:"Delete dashboard",id:"delete-dashboard",level:2}],p={toc:l},h="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(h,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"work-with-dashboards"},"Work with dashboards"),(0,o.kt)("p",null,"Dashboards on our continuous testing platform are special containers, where users can create widgets."),(0,o.kt)("p",null,'To create and use dashboards, navigate to the "Dashboards" tab.'),(0,o.kt)("p",null,"You can create a dashboard that will be visible on the current project."),(0,o.kt)("h2",{id:"create-dashboard"},"Create dashboard"),(0,o.kt)("p",null,"To create a new dashboard, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Dashboards" page and click "Add New\nDashboard" button in the top right corner of the page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Add New Dashboard" popup will be opened.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Enter a name for a new dashboard. The\nname should be between 3 to 55 characters long and unique for the user per the\nproject. You can add the description for your dashboard as well.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click "Add" button. The new dashboard will be created.'))),(0,o.kt)("p",null,"Now you can add widgets to the dashboard."),(0,o.kt)("media-view",{thumbnail:a(44218),src:"https://youtu.be/dP_AqeWWu7w",alt:"Create test execution dashboard",type:"video"}),(0,o.kt)("h2",{id:"edit-dashboard"},"Edit dashboard"),(0,o.kt)("p",null,"To edit a dashboard, perform the following steps: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to "All Dashboards" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click the \"Edit\" icon in the top corner of the dashboard or\nclick the name of the dashboard and click 'Edit' button in the header of the dashboard.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Edit Dashboard" popup will be opened.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Make the necessary changes and click "Update" button. The dashboard will\nbe displayed with updates.'))),(0,o.kt)("media-view",{thumbnail:a(35852),src:"https://youtu.be/BuzggC_kKcs",alt:"Edit dashboard",type:"video"}),(0,o.kt)("h2",{id:"delete-dashboard"},"Delete dashboard"),(0,o.kt)("p",null,"To remove a dashboard from the project, perform the following steps: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Delete" button in the top right corner of the dashboard.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Delete" button on confirmation pop-up.'))),(0,o.kt)("p",null,"The dashboard and related widgets will be deleted from the system."),(0,o.kt)("media-view",{thumbnail:a(22940),src:"https://youtu.be/ICqrwD5rRLU",alt:"Delete dashboard",type:"video"}))}c.isMDXComponent=!0},44218:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/CreateDashboard-2e25ca8b7611c63c5cd7f605b2b3cb3d.png"},22940:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/DeleteDashboard-de6c2f781a84e327df0f8a29fd761374.png"},35852:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/EditDashboard-931c64aa1443a24eb4f7ca8390714030.png"}}]); \ No newline at end of file diff --git a/assets/js/c60355ff.e76f313e.js b/assets/js/c60355ff.e76f313e.js deleted file mode 100644 index e5e7c6a2d..000000000 --- a/assets/js/c60355ff.e76f313e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[9063],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>u});var r=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function d(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function n(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var i=r.createContext({}),l=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):n(n({},t),e)),a},h=function(e){var t=l(e.components);return r.createElement(i.Provider,{value:t},e.children)},b="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,o=e.mdxType,d=e.originalType,i=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),b=l(a),c=o,u=b["".concat(i,".").concat(c)]||b[c]||p[c]||d;return a?r.createElement(u,n(n({ref:t},h),{},{components:a})):r.createElement(u,n({ref:t},h))}));function u(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var d=a.length,n=new Array(d);n[0]=c;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[b]="string"==typeof e?e:o,n[1]=s;for(var l=2;l{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>n,default:()=>p,frontMatter:()=>d,metadata:()=>s,toc:()=>l});var r=a(87462),o=(a(67294),a(3905));const d={sidebar_position:2,sidebar_label:"Work with dashboards"},n="Work with dashboards",s={unversionedId:"dashboards-and-widgets/WorkWithDashboards",id:"dashboards-and-widgets/WorkWithDashboards",title:"Work with dashboards",description:"Dashboards on our continuous testing platform are special containers, where users can create widgets.",source:"@site/docs/dashboards-and-widgets/WorkWithDashboards.mdx",sourceDirName:"dashboards-and-widgets",slug:"/dashboards-and-widgets/WorkWithDashboards",permalink:"/docs/dashboards-and-widgets/WorkWithDashboards",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/dashboards-and-widgets/WorkWithDashboards.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_label:"Work with dashboards"},sidebar:"defaultSidebar",previous:{title:"Possible Dashboards in ReportPortal",permalink:"/docs/dashboards-and-widgets/PossibleDashboardsInReportPortal"},next:{title:"Widget Creation",permalink:"/docs/dashboards-and-widgets/WidgetCreation"}},i={},l=[{value:"Create dashboard",id:"create-dashboard",level:2},{value:"Edit own dashboard",id:"edit-own-dashboard",level:2},{value:"Delete dashboard",id:"delete-dashboard",level:2},{value:"Shared dashboard",id:"shared-dashboard",level:2}],h={toc:l},b="wrapper";function p(e){let{components:t,...d}=e;return(0,o.kt)(b,(0,r.Z)({},h,d,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"work-with-dashboards"},"Work with dashboards"),(0,o.kt)("p",null,"Dashboards on our continuous testing platform are special containers, where users can create widgets."),(0,o.kt)("p",null,'To create and use dashboards, navigate to the "Dashboards" tab.'),(0,o.kt)("p",null,"You can create a dashboard that will be visible on the current project. If you share dashboard on the project, it will be available to all users of the project the dashboard is created in."),(0,o.kt)("h2",{id:"create-dashboard"},"Create dashboard"),(0,o.kt)("p",null,"To create a new dashboard, perform the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to the "Dashboards" page and click "Add New\nDashboard" button in the top right corner of the page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Add New Dashboard" popup will be opened.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Enter a name for a new dashboard. The\nname should be between 3 to 55 characters long and unique for the user per the\nproject. You can add the description for your dashboard as well.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select Share mode ON \u2013 if you want your dashboard to be shared. Leave\nShare mode OFF \u2013 if you do not want to share your dashboard.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click "Add" button. The new dashboard will be created.'))),(0,o.kt)("p",null,"Now you can add widgets to the dashboard."),(0,o.kt)("media-view",{thumbnail:a(44218),src:"https://youtu.be/-3JkuMxiGE4",alt:"Create test execution dashboard",type:"video"}),(0,o.kt)("h2",{id:"edit-own-dashboard"},"Edit own dashboard"),(0,o.kt)("p",null,"To edit a dashboard, perform the following steps: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Navigate to "All Dashboards" page.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click the \"Edit\" icon in the top corner of the dashboard or\nclick the name of the dashboard and click 'Edit' button in the header of the dashboard.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'The "Edit Dashboard" popup will be opened.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Make the necessary changes and click "Update" button. The dashboard will\nbe displayed with updates.'))),(0,o.kt)("media-view",{thumbnail:a(35852),src:"https://youtu.be/649Zk8awSM0",alt:"Edit dashboard",type:"video"}),(0,o.kt)("h2",{id:"delete-dashboard"},"Delete dashboard"),(0,o.kt)("p",null,"To remove a dashboard from the project, perform the following steps: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Delete" button in the top right corner of the dashboard.')),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},'Click the "Delete" button on confirmation pop-up.'))),(0,o.kt)("p",null,"The dashboard and related widgets will be deleted from the system."),(0,o.kt)("media-view",{thumbnail:a(22940),src:"https://youtu.be/vvO09XrBFCs",alt:"Delete dashboard",type:"video"}),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"A user with a PROJECT MANAGER role can delete a dashboard shared by other members by clicking on the \u2018Delete\u2019 button\nin the top right corner of the dashboard tile. The dashboard will be deleted from the system.")),(0,o.kt)("h2",{id:"shared-dashboard"},"Shared dashboard"),(0,o.kt)("p",null,"Dashboards that were created and shared by another project member are stored in Shared Dashboards."),(0,o.kt)("p",null,"You can open and see the data on such dashboards, but you are not able to modify or delete them."),(0,o.kt)("p",null,"Our test reporting tool allows project members to see shared dashboards by other project members dashboards by a direct link."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"A user with an ADMIN account role / PROJECT MANAGER project role can delete a dashboard shared by other members by clicking on \u2018Delete\u2019 icon.\nThe dashboard and widgets on the dashboard will be deleted from the system.")))}p.isMDXComponent=!0},44218:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/CreateDashboard-4f7bc94f27a9ffb36b7b5f8c81fb3d75.png"},22940:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/DeleteDashboard-94ed5725252069d9c2565d1b56f7c5bb.png"},35852:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/EditDashboard-65933356245c0ff0557897065a20848e.png"}}]); \ No newline at end of file diff --git a/assets/js/d09084ee.449dca62.js b/assets/js/d09084ee.c6557d0f.js similarity index 56% rename from assets/js/d09084ee.449dca62.js rename to assets/js/d09084ee.c6557d0f.js index 8cfd0e087..df3eb58fa 100644 --- a/assets/js/d09084ee.449dca62.js +++ b/assets/js/d09084ee.c6557d0f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3653],{3905:(t,e,n)=>{n.d(e,{Zo:()=>c,kt:()=>f});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},c=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=u(n),m=a,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return n?r.createElement(f,i(i({ref:e},c),{},{components:n})):r.createElement(f,i({ref:e},c))}));function f(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:a,i[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_label:"GitHub"},i="GitHub",l={unversionedId:"reportportal-configuration/authorization/GitHub",id:"reportportal-configuration/authorization/GitHub",title:"GitHub",description:"Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow.",source:"@site/docs/reportportal-configuration/authorization/GitHub.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/GitHub.md",tags:[],version:"current",frontMatter:{sidebar_label:"GitHub"},sidebar:"defaultSidebar",previous:{title:"Active Directory",permalink:"/docs/reportportal-configuration/authorization/ActiveDirectory"},next:{title:"LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP"}},p={},u=[{value:"Presequences",id:"presequences",level:3},{value:"ReportPortal configuration",id:"reportportal-configuration",level:3}],c={toc:u},s="wrapper";function d(t){let{components:e,...n}=t;return(0,a.kt)(s,(0,r.Z)({},c,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"github"},"GitHub"),(0,a.kt)("p",null,"Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow."),(0,a.kt)("h3",{id:"presequences"},"Presequences"),(0,a.kt)("p",null,"To enable this feature you need to ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/settings/applications/new"},"register new application in Github")),(0,a.kt)("p",null,"Fill the following fields:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Value"),(0,a.kt)("th",{parentName:"tr",align:null},"Description"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Application name"),(0,a.kt)("td",{parentName:"tr",align:null},"Report Portal"),(0,a.kt)("td",{parentName:"tr",align:null},"Just something which allow you recognize what's this.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Homepage URL"),(0,a.kt)("td",{parentName:"tr",align:null},"https://{HOST}:{PORT}/uat/sso/user"),(0,a.kt)("td",{parentName:"tr",align:null},"Replace with ",(0,a.kt)("inlineCode",{parentName:"td"},"{HOST}")," and ",(0,a.kt)("inlineCode",{parentName:"td"},"{PORT}")," with appropriate values of your instance. Naturally you can omit ",(0,a.kt)("inlineCode",{parentName:"td"},":{PORT}")," if it's default port for HTTPS protocol.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Authorization callback URL"),(0,a.kt)("td",{parentName:"tr",align:null},"https://{HOST}:{PORT}/uat/sso/login/github"),(0,a.kt)("td",{parentName:"tr",align:null},"As in the previous field replace with ",(0,a.kt)("inlineCode",{parentName:"td"},"{HOST}")," and ",(0,a.kt)("inlineCode",{parentName:"td"},"{PORT}")," with your appropriate values.")))),(0,a.kt)("p",null,'Once new application is created, you will have Client ID. Click on "Generate a new client secret" to get Client Secret, but do not close the window until you configure the Authorization on RP, since it will never show you the Secret again.'),(0,a.kt)("h3",{id:"reportportal-configuration"},"ReportPortal configuration"),(0,a.kt)("p",null,"To setup access with GitHub auth on ReportPortal:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,a.kt)("li",{parentName:"ol"},"Open the list on the right of the user's image."),(0,a.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,a.kt)("li",{parentName:"ol"},"Click the 'Server Settings' from the left-hand sidebar"),(0,a.kt)("li",{parentName:"ol"},"Go to the 'Authorization Configuration' tab"),(0,a.kt)("li",{parentName:"ol"},"Then change the switcher position of 'Activate GitHub Authorization' to ON"),(0,a.kt)("li",{parentName:"ol"},"The Next fields should appear:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Client ID': \n'Client Secret': \n'Add GitHub Organization' button-link: (optional)\n")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"In case the 'Organization Name' is not added, all GitHub users will have access to the ReportPortal instance.",(0,a.kt)("br",null),"\nIf the 'Organization Name' is specified, only users of this organization will have an access to ReportPortal instance.",(0,a.kt)("br",null),"\nIf the Name of GitHub organization is not validated, verify that the name is correct.")),(0,a.kt)("p",null,"Example of GitHub auth configuration:\nFill in the form:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Client Id': 8767988c424a0e7a2640\n'Client Secret': ef22c9f804257afaf399a2dada7c8f22dee5fd1b\n'Organization Name': reportportal\n")),(0,a.kt)("p",null,"Click on 'Submit' button.\nA confirmation message in status bar should be shown.\nA 'Login with GitHub' button will appear on login form."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[3653],{3905:(t,e,n)=>{n.d(e,{Zo:()=>c,kt:()=>f});var r=n(67294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},c=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=u(n),m=a,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||o;return n?r.createElement(f,i(i({ref:e},c),{},{components:n})):r.createElement(f,i({ref:e},c))}));function f(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:a,i[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=n(87462),a=(n(67294),n(3905));const o={sidebar_label:"GitHub"},i="GitHub",l={unversionedId:"reportportal-configuration/authorization/GitHub",id:"reportportal-configuration/authorization/GitHub",title:"GitHub",description:"Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow.",source:"@site/docs/reportportal-configuration/authorization/GitHub.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/GitHub.md",tags:[],version:"current",frontMatter:{sidebar_label:"GitHub"},sidebar:"defaultSidebar",previous:{title:"Active Directory",permalink:"/docs/reportportal-configuration/authorization/ActiveDirectory"},next:{title:"LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP"}},p={},u=[{value:"Presequences",id:"presequences",level:3},{value:"ReportPortal configuration",id:"reportportal-configuration",level:3}],c={toc:u},s="wrapper";function d(t){let{components:e,...n}=t;return(0,a.kt)(s,(0,r.Z)({},c,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"github"},"GitHub"),(0,a.kt)("p",null,"Our open source test reporting tool allows logging in via GitHub OAuth Web Application Flow."),(0,a.kt)("h3",{id:"presequences"},"Presequences"),(0,a.kt)("p",null,"To enable this feature you need to ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/settings/applications/new"},"register new application in Github")),(0,a.kt)("p",null,"Fill the following fields:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Value"),(0,a.kt)("th",{parentName:"tr",align:null},"Description"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Application name"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Report Portal")),(0,a.kt)("td",{parentName:"tr",align:null},"Just something which allow you recognize what's this.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Homepage URL"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"https://{HOST}:{PORT}/uat/sso/user")),(0,a.kt)("td",{parentName:"tr",align:null},"Replace with ",(0,a.kt)("inlineCode",{parentName:"td"},"{HOST}")," and ",(0,a.kt)("inlineCode",{parentName:"td"},"{PORT}")," with appropriate values of your instance. Naturally you can omit ",(0,a.kt)("inlineCode",{parentName:"td"},":{PORT}")," if it's default port for HTTPS protocol.")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Authorization callback URL"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"https://{HOST}:{PORT}/uat/sso/login/github")),(0,a.kt)("td",{parentName:"tr",align:null},"As in the previous field replace with ",(0,a.kt)("inlineCode",{parentName:"td"},"{HOST}")," and ",(0,a.kt)("inlineCode",{parentName:"td"},"{PORT}")," with your appropriate values.")))),(0,a.kt)("p",null,'Once new application is created, you will have Client ID. Click on "Generate a new client secret" to get Client Secret, but do not close the window until you configure the Authorization on RP, since it will never show you the Secret again.'),(0,a.kt)("h3",{id:"reportportal-configuration"},"ReportPortal configuration"),(0,a.kt)("p",null,"To setup access with GitHub auth on ReportPortal:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,a.kt)("li",{parentName:"ol"},"Open the list on the right of the user's image."),(0,a.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,a.kt)("li",{parentName:"ol"},"Click the 'Server Settings' from the left-hand sidebar"),(0,a.kt)("li",{parentName:"ol"},"Go to the 'Authorization Configuration' tab"),(0,a.kt)("li",{parentName:"ol"},"Then change the switcher position of 'Activate GitHub Authorization' to ON"),(0,a.kt)("li",{parentName:"ol"},"The Next fields should appear:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Client ID': \n'Client Secret': \n'Add GitHub Organization' button-link: (optional)\n")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"In case the 'Organization Name' is not added, all GitHub users will have access to the ReportPortal instance.",(0,a.kt)("br",null),"\nIf the 'Organization Name' is specified, only users of this organization will have an access to ReportPortal instance.",(0,a.kt)("br",null),"\nIf the Name of GitHub organization is not validated, verify that the name is correct.")),(0,a.kt)("p",null,"Example of GitHub auth configuration:\nFill in the form:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'Client Id': 8767988c424a0e7a2640\n'Client Secret': ef22c9f804257afaf399a2dada7c8f22dee5fd1b\n'Organization Name': reportportal\n")),(0,a.kt)("p",null,"Click on 'Submit' button.\nA confirmation message in status bar should be shown.\nA 'Login with GitHub' button will appear on login form."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dc2f4bb3.011105a8.js b/assets/js/dc2f4bb3.011105a8.js new file mode 100644 index 000000000..e998510eb --- /dev/null +++ b/assets/js/dc2f4bb3.011105a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4415],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>d});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},h=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,h=i(e,["components","mdxType","originalType","parentName"]),c=u(a),m=o,d=c["".concat(l,".").concat(m)]||c[m]||p[m]||s;return a?n.createElement(d,r(r({ref:t},h),{},{components:a})):n.createElement(d,r({ref:t},h))}));function d(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=a.length,r=new Array(s);r[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:o,r[1]=i;for(var u=2;u{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var n=a(87462),o=(a(67294),a(3905));const s={sidebar_position:5,sidebar_label:"History of launches"},r="History of launches",i={unversionedId:"work-with-reports/HistoryOfLaunches",id:"work-with-reports/HistoryOfLaunches",title:"History of launches",description:"Historical trend of executions",source:"@site/docs/work-with-reports/HistoryOfLaunches.mdx",sourceDirName:"work-with-reports",slug:"/work-with-reports/HistoryOfLaunches",permalink:"/docs/work-with-reports/HistoryOfLaunches",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/work-with-reports/HistoryOfLaunches.mdx",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,sidebar_label:"History of launches"},sidebar:"defaultSidebar",previous:{title:"Investigation of failure",permalink:"/docs/work-with-reports/InvestigationOfFailure"},next:{title:"Test case ID",permalink:"/docs/work-with-reports/TestCaseId"}},l={},u=[{value:"Historical trend of executions",id:"historical-trend-of-executions",level:2},{value:"History table based on Test Case Hash",id:"history-table-based-on-test-case-hash",level:3},{value:"Unique ID history",id:"unique-id-history",level:3},{value:"Test Case Hash history",id:"test-case-hash-history",level:3},{value:"History table",id:"history-table",level:2},{value:"History for all launches",id:"history-for-all-launches",level:3},{value:"History table for launches with the same name",id:"history-table-for-launches-with-the-same-name",level:3},{value:"Actions",id:"actions",level:3},{value:"Compare launch results with the filter",id:"compare-launch-results-with-the-filter",level:4},{value:"Historical line of executions",id:"historical-line-of-executions",level:4},{value:"History across All launches",id:"history-across-all-launches",level:4},{value:"Duration fluctuation",id:"duration-fluctuation",level:4},{value:"Load more History",id:"load-more-history",level:4},{value:"Test Item actions history",id:"test-item-actions-history",level:3}],h={toc:u},c="wrapper";function p(e){let{components:t,...s}=e;return(0,o.kt)(c,(0,n.Z)({},h,s,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"history-of-launches"},"History of launches"),(0,o.kt)("h2",{id:"historical-trend-of-executions"},"Historical trend of executions"),(0,o.kt)("p",null,"The historical trend of executions represents your history view for the list of test items in our test execution dashboard. This feature can help you to find\nthe most unstable test cases in your suites/ launches/ builds."),(0,o.kt)("p",null,'To see a table of the historical trend of executions, navigate to the "Launches" page and drill down to launch structure/ or launch statistics.'),(0,o.kt)("h3",{id:"history-table-based-on-test-case-hash"},"History table based on Test Case Hash"),(0,o.kt)("p",null,"Test case hash is a parameter that is automatically generated based on the Test Case ID (if specified) or the full path to the test."),(0,o.kt)("p",null,"You can read about the Test Case ID ",(0,o.kt)("a",{parentName:"p",href:"/work-with-reports/TestCaseId"},"here"),"."),(0,o.kt)("h3",{id:"unique-id-history"},"Unique ID history"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)"))),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Take the ReportPortal release version 5.2.2 or higher. docker-compose.yml")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add an environment variable to the service-API service:"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"RP_ENVIRONMENT_VARIABLE_HISTORY_OLD=true\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Redeploy ReportPortal")),(0,o.kt)("h3",{id:"test-case-hash-history"},"Test Case Hash history"),(0,o.kt)("p",null,"Run ReportPortal without env variable."),(0,o.kt)("h2",{id:"history-table"},"History table"),(0,o.kt)("p",null,"Where you can find History table."),(0,o.kt)("p",null,"Drill down to the Step view (test executions list). "),(0,o.kt)("p",null,'Click the "History" button.'),(0,o.kt)("p",null,"You will see a historical trend in a table."),(0,o.kt)("p",null,"History trends have the following color scheme:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Red - indicates the launches with failed or interrupted cases")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Green - indicates passed launches")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Yellow \u2013 indicates the launches with several equal test items present within a required level")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Grey - indicates the test item with no descendants in this run.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Animated - still without state ","[in progress]"))),(0,o.kt)("p",null,'You can select the depth of history: 3, 5, 10, 15, 20, 25 or 30 launches from the "History\nDepth" drop-down menu. '),(0,o.kt)("p",null,"There are two options for a History table:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"history for all launches"),(0,o.kt)("li",{parentName:"ul"},"history for launches with the same name")),(0,o.kt)("p",null,'If your are using History table based on Test Case Hash, you will be able to use both of this options.\nIn case you use a history table based on UID, a history table will show you results in mode: "History for launches with the same name".'),(0,o.kt)("h3",{id:"history-for-all-launches"},"History for all launches"),(0,o.kt)("p",null,"If you have configured ReportPortal with ",(0,o.kt)("a",{parentName:"p",href:"./HistoryOfLaunches#history-table"},"TestCase History table"),".\nThis option is for you."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"How you can open a history table with execution from all launches?")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open All launches tab"),(0,o.kt)("li",{parentName:"ul"},"Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics"),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'History'"),(0,o.kt)("li",{parentName:"ul"},"Choose the option '",(0,o.kt)("strong",{parentName:"li"},"All launches'")," in the drop-down 'BASE'")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"What information is shown on the table based on Test Case Hash?")),(0,o.kt)("p",null,"On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from all launches on the project.\nEach column on the history table is equaled to a number of the execution."),(0,o.kt)("p",null,"Let's see an example."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux.\nAfter test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),".\nIf you click on the Total statistic for the launch ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS")," and click on the 'History' button, you will see a History table with all test cases in the suite and their 10 last executions from all launches on the project (e.g. from ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),")"),(0,o.kt)("table",{parentName:"blockquote"},(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Test case name"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #3"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #2"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #1"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 1"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 2"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 3"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")))),(0,o.kt)("p",{parentName:"blockquote"},"When you hover one of the cells on the table, you will be able to see to what launch this execution belongs to.")),(0,o.kt)("media-view",{thumbnail:a(30665),src:"https://youtu.be/m_SkXKgc6NE",alt:"History Table of launches in our test execution dashboard",type:"video"}),(0,o.kt)("h3",{id:"history-table-for-launches-with-the-same-name"},"History table for launches with the same name"),(0,o.kt)("p",null,"If you have configured ReportPortal with ",(0,o.kt)("a",{parentName:"p",href:"./HistoryOfLaunches#history-table"},"TestCase History table")," or with Unique ID ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)")),".\nThis option is for you."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"How you can open a history table with execution launches with the same name?")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open All launches tab"),(0,o.kt)("li",{parentName:"ul"},"Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics"),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'History'"),(0,o.kt)("li",{parentName:"ul"},"Choose the option ",(0,o.kt)("strong",{parentName:"li"},"'Launches with the same name'")," in the drop-down 'BASE'")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},'What information is shown on the table based on Unique ID (deprecated) or Test Case Hash (with option "Launches with the same name"?)')),(0,o.kt)("p",null,"On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from only launches with the same name on the project.\nEach column on the history table is equaled to a number of the execution."),(0,o.kt)("p",null,"Let's see an example."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux.\nAfter test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),".\nIf you click on the Total statistic for the launch ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS")," and click on the 'History' button and you choose the option ",(0,o.kt)("strong",{parentName:"p"},"'Launches with the same name'"),", you will see executions only from launches with name ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS"),"."),(0,o.kt)("table",{parentName:"blockquote"},(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Test case name"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #2"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 1"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 2"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 3"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"))))),(0,o.kt)("media-view",{thumbnail:a(8548),src:"https://youtu.be/DoKW0jFBELo",alt:"History Table launches with the same name",type:"video"}),(0,o.kt)("h3",{id:"actions"},"Actions"),(0,o.kt)("p",null,"From the History table you will be able to perform the next actions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"edit items"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/work-with-reports/InvestigationOfFailure#set-defect-type"},"edit defect")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/work-with-reports/InvestigationOfFailure#post-bug-to-bug-tracking-system"},"post issue")),(0,o.kt)("li",{parentName:"ul"},"link / unlink issue"),(0,o.kt)("li",{parentName:"ul"},"delete items")),(0,o.kt)("p",null,"For that:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Hover the cell on the history table"),(0,o.kt)("li",{parentName:"ul"},"Click on the checkbox"),(0,o.kt)("li",{parentName:"ul"},"Check needed item "),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'Action'"),(0,o.kt)("li",{parentName:"ul"},"Choose needed action")),(0,o.kt)("h4",{id:"compare-launch-results-with-the-filter"},"Compare launch results with the filter"),(0,o.kt)("p",null,"You can add a custom column with the latest filter results to the History table. "),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You run this suite for different versions (version 1, version2, version 3).\nWhen you run tests for the new version you need to find out if new bugs appeared in it in comparison with the previous version.\nYou can create a filter that includes test executions for the previous version (version 2).\nThen you can open a history table for the launch with results for version 3 and add a custom column with the filter 'Version 2'.\nThe system adds the latest executions from filter 'Version 2' and you will be able to compare the latest results for version 2 and version 3.")),(0,o.kt)("media-view",{thumbnail:a(97487),src:"https://youtu.be/trv2f5g62Is",alt:"Compare results of a launch with the filter",type:"video"}),(0,o.kt)("h4",{id:"historical-line-of-executions"},"Historical line of executions"),(0,o.kt)("p",null,"The historical line of executions represents the statuses of the current test case in history."),(0,o.kt)("p",null,"You can see the historical line of executions at the Log level. History is shown only for the\ncurrent item and there are 30 items max in history.\nYou can click on the item in the history and check the results in previous executions, read\nthe comments, find the bugs, posted to this fail.\nThis feature will save you time and help you to understand the reason for your failure."),(0,o.kt)("p",null,"History line has the following color scheme:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Red - failed or interrupted. Contains a link to a related bug (it has it)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Grey - skipped. Contains a link to a related bug (it has it)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Green - passed. Contains only execution number")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Animated - still without state ","[in progress]"))),(0,o.kt)("p",null,"You can mark the current method or case with a defect type, and write a comment\nusing the defect editor block."),(0,o.kt)("p",null,"To come into a certain execution of an appropriate launch, hit a launch number\nabove the item."),(0,o.kt)("p",null,'Also on a History line, you can see an "i" label, it means that the item with this label has a defect comment or/and a link to the Bug Tracking System.'),(0,o.kt)("h4",{id:"history-across-all-launches"},"History across All launches"),(0,o.kt)("p",null,"By default system shows history across Launches with the same name."),(0,o.kt)("p",null,'But you can choose option "History across All Launches" and system will show you executions of the test cases which have been executed in launches with different names.'),(0,o.kt)("p",null,"On hover user can find launch name of test and all launch attributes."),(0,o.kt)("media-view",{thumbnail:a(51948),src:"https://youtu.be/YFzorxQO_S0",alt:"History Line ToolTip in our real time dashboard open source",type:"video"}),(0,o.kt)("h4",{id:"duration-fluctuation"},"Duration fluctuation"),(0,o.kt)("p",null,"If test execution has duration growth in comparison with previous run, the system marks such items with red triangles:"),(0,o.kt)("p",null,"No duration growth - 0 triangles"),(0,o.kt)("p",null,"duration growh from 0 to 20% - 1 triangles"),(0,o.kt)("p",null,"duration growh from 21% - 50% - 2 trianges "),(0,o.kt)("p",null,"duration growh from 51% - 100% - 3 trianges "),(0,o.kt)("p",null,"duration growh from 101% and higher - 4 trianges "),(0,o.kt)("h4",{id:"load-more-history"},"Load more History"),(0,o.kt)("p",null,'By default the system shows 12 latest executions. If you need more history you can click on the button "Load more 9 items and the system loaded more executions on history line. Max number of items on History line is 30 executions. '),(0,o.kt)("p",null,"User can move on History line using horizontal scroll."),(0,o.kt)("h3",{id:"test-item-actions-history"},"Test Item actions history"),(0,o.kt)("p",null,"Test Item actions history will show you the history of actions, which have been made to a\ncertain test item. You can see the kind of activity, and who performed it."),(0,o.kt)("p",null,"The following actions are shown on the history of actions:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user changed defect type of test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user posted a comment to the test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user posted a bug to the Bug Tracking System or added a link to the existing in Bug Tracking System issue.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},' analyzer changed defect type of test item based on the item (where "item" is a link to a log view of an item which has been chosen by Analyzer as the most relevant result)')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," analyzer posted a comment to the test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," analyzer posted a bug to the Bug Tracking System or added a link to the existing in the Bug Tracking System issue. ")),(0,o.kt)("p",null,"To see the history of actions, navigate to a certain child item. By default you\nwill see the last action in one line."),(0,o.kt)("p",null,"Use spoiler to maximize actions history:"),(0,o.kt)("media-view",{thumbnail:a(79483),src:"https://youtu.be/X5u_6rI5V8k",alt:"Action History",type:"video"}))}p.isMDXComponent=!0},97487:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/CompareLaunchResults-7e6d164b1290375ac9dff3661d0a8913.png"},51948:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoricalLineOfExecutions-6a0bc293523fa70ad1cd710608488537.png"},30665:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoryTable-d9c0fdceb236c5b4ec837ea4cb74b0e1.png"},8548:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoryTableSameName-7c814f249742a7d86f447f932fd9b153.png"},79483:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/TestItemActionsHistory-3d029b1afdd281035f285ce1cf2bd8cc.png"}}]); \ No newline at end of file diff --git a/assets/js/dc2f4bb3.e775a227.js b/assets/js/dc2f4bb3.e775a227.js deleted file mode 100644 index 4e79b83b1..000000000 --- a/assets/js/dc2f4bb3.e775a227.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4415],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>d});var n=a(67294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},h=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),c=u(a),m=o,d=c["".concat(l,".").concat(m)]||c[m]||p[m]||r;return a?n.createElement(d,i(i({ref:t},h),{},{components:a})):n.createElement(d,i({ref:t},h))}));function d(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var n=a(87462),o=(a(67294),a(3905));const r={sidebar_position:5,sidebar_label:"History of launches"},i="History of launches",s={unversionedId:"work-with-reports/HistoryOfLaunches",id:"work-with-reports/HistoryOfLaunches",title:"History of launches",description:"Historical trend of executions",source:"@site/docs/work-with-reports/HistoryOfLaunches.mdx",sourceDirName:"work-with-reports",slug:"/work-with-reports/HistoryOfLaunches",permalink:"/docs/work-with-reports/HistoryOfLaunches",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/work-with-reports/HistoryOfLaunches.mdx",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,sidebar_label:"History of launches"},sidebar:"defaultSidebar",previous:{title:"Investigation of failure",permalink:"/docs/work-with-reports/InvestigationOfFailure"},next:{title:"Test case ID",permalink:"/docs/work-with-reports/TestCaseId"}},l={},u=[{value:"Historical trend of executions",id:"historical-trend-of-executions",level:2},{value:"History table: Test Case ID or Unique ID",id:"history-table-test-case-id-or-unique-id",level:3},{value:"Difference between Test Case ID and Unique ID",id:"difference-between-test-case-id--and-unique-id",level:3},{value:"Unique ID history",id:"unique-id-history",level:3},{value:"Test Case ID history",id:"test-case-id-history",level:3},{value:"History table",id:"history-table",level:2},{value:"History for all launches",id:"history-for-all-launches",level:3},{value:"History table for launches with the same name",id:"history-table-for-launches-with-the-same-name",level:3},{value:"Actions",id:"actions",level:3},{value:"Compare launch results with the filter",id:"compare-launch-results-with-the-filter",level:4},{value:"Historical line of executions",id:"historical-line-of-executions",level:4},{value:"History across All launches",id:"history-across-all-launches",level:4},{value:"Duration fluctuation",id:"duration-fluctuation",level:4},{value:"Load more History",id:"load-more-history",level:4},{value:"Test Item actions history",id:"test-item-actions-history",level:3}],h={toc:u},c="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},h,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"history-of-launches"},"History of launches"),(0,o.kt)("h2",{id:"historical-trend-of-executions"},"Historical trend of executions"),(0,o.kt)("p",null,"The historical trend of executions represents your history view for the list of test items in our test execution dashboard. This feature can help you to find\nthe most unstable test cases in your suites/ launches/ builds."),(0,o.kt)("p",null,'To see a table of the historical trend of executions, navigate to the "Launches" page and drill down to launch structure/ or launch statistics.'),(0,o.kt)("h3",{id:"history-table-test-case-id-or-unique-id"},"History table: Test Case ID or Unique ID"),(0,o.kt)("p",null,"ReportPortal acquires a lot of real-time test results and you can choose by which parameter you want the history of test results to get defined.\nThere are 2 options:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"by ",(0,o.kt)("a",{parentName:"li",href:"./UniqueId"},"Unique ID")," ",(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"(deprecated/ will be replaced by Test Case ID gradually)"))),(0,o.kt)("li",{parentName:"ul"},"by ",(0,o.kt)("a",{parentName:"li",href:"./TestCaseId"},"Test Case ID")," ")),(0,o.kt)("h3",{id:"difference-between-test-case-id--and-unique-id"},"Difference between Test Case ID and Unique ID"),(0,o.kt)("p",null,"Please find the description of what Test Case ID and Unique by the links:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"./UniqueId"},"UUID")," ",(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"(deprecated/ will be replaced by Test Case ID gradually)"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"./TestCaseId"},"Test Case ID")," ")),(0,o.kt)("p",null,"They are both a unique identifiers of executions uniquness."),(0,o.kt)("p",null,"But Unique ID ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)"))," generates on the base of a launch name where test execution is situated.\nAnd Test Case ID usually doesn't contain a launch name. "),(0,o.kt)("p",null,"So that the main difference between a history table based on Unique ID ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)"))," and Test Case ID is that:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"History on Unique ID ",(0,o.kt)("strong",{parentName:"li"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)"))," shows only executions from launches with the same name"),(0,o.kt)("li",{parentName:"ul"},"History on Test Case ID shows executions from all launches.")),(0,o.kt)("h3",{id:"unique-id-history"},"Unique ID history"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated/ will be replaced by Test Case ID gradually)"))),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Take the ReportPortal release version 5.2.2 or higher. docker-compose.yml")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Add an environment variable to the service-API service:"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"RP_ENVIRONMENT_VARIABLE_HISTORY_OLD=true\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Redeploy ReportPortal")),(0,o.kt)("h3",{id:"test-case-id-history"},"Test Case ID history"),(0,o.kt)("p",null,"Run ReportPortal without env variable."),(0,o.kt)("h2",{id:"history-table"},"History table"),(0,o.kt)("p",null,"Where you can find History table."),(0,o.kt)("p",null,"Drill down to the Step view (test executions list). "),(0,o.kt)("p",null,'Click the "History" button.'),(0,o.kt)("p",null,"You will see a historical trend in a table."),(0,o.kt)("p",null,"History trends have the following color scheme:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Red - indicates the launches with failed or interrupted cases")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Green - indicates passed launches")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Yellow \u2013 indicates the launches with several equal test items present within a required level")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Grey - indicates the test item with no descendants in this run.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Animated - still without state ","[in progress]"))),(0,o.kt)("p",null,'You can select the depth of history: 3, 5, 10, 15, 20, 25 or 30 launches from the "History\nDepth" drop-down menu. '),(0,o.kt)("p",null,"There are two options for a History table:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"history for all launches"),(0,o.kt)("li",{parentName:"ul"},"history for launches with the same name")),(0,o.kt)("p",null,'If your are using History table based on Test Case ID, you will be able to use both of this options.\nIn case you use a history table based on UID, a history table will show you results in mode: "History for launches with the same name".'),(0,o.kt)("h3",{id:"history-for-all-launches"},"History for all launches"),(0,o.kt)("p",null,"If you have configured ReportPortal with ",(0,o.kt)("a",{parentName:"p",href:"./HistoryOfLaunches#history-table"},"TestCase History table"),".\nThis option is for you."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"How you can open a history table with execution from all launches?")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open All launches tab"),(0,o.kt)("li",{parentName:"ul"},"Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics"),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'History'"),(0,o.kt)("li",{parentName:"ul"},"Choose the option '",(0,o.kt)("strong",{parentName:"li"},"All launches'")," in the drop-down 'BASE'")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"What information is shown on the table based on Test Case ID?")),(0,o.kt)("p",null,"On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from all launches on the project.\nEach column on the history table is equaled to a number of the execution."),(0,o.kt)("p",null,"Let's see an example."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux.\nAfter test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),".\nIf you click on the Total statistic for the launch ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS")," and click on the 'History' button, you will see a History table with all test cases in the suite and their 10 last executions from all launches on the project (e.g. from ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),")"),(0,o.kt)("table",{parentName:"blockquote"},(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Test case name"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #3"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #2"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #1"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 1"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 2"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 3"),(0,o.kt)("td",{parentName:"tr",align:null},"Failed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")))),(0,o.kt)("p",{parentName:"blockquote"},"When you hover one of the cells on the table, you will be able to see to what launch this execution belongs to.")),(0,o.kt)("media-view",{thumbnail:a(30665),src:"https://youtu.be/m_SkXKgc6NE",alt:"History Table of launches in our test execution dashboard",type:"video"}),(0,o.kt)("h3",{id:"history-table-for-launches-with-the-same-name"},"History table for launches with the same name"),(0,o.kt)("p",null,"If you have configured ReportPortal with ",(0,o.kt)("a",{parentName:"p",href:"./HistoryOfLaunches#history-table"},"TestCase History table")," or with Unique ID ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"(deprecated)")),".\nThis option is for you."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"How you can open a history table with execution launches with the same name?")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Open All launches tab"),(0,o.kt)("li",{parentName:"ul"},"Click on the Launch name/ Total/ Passed/ Failed/ Skipped /Product Bug/ Auto Bug/ System Issues/ To investigate statistics"),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'History'"),(0,o.kt)("li",{parentName:"ul"},"Choose the option ",(0,o.kt)("strong",{parentName:"li"},"'Launches with the same name'")," in the drop-down 'BASE'")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},'What information is shown on the table based on Unique ID (deprecated) ot Test Case ID (with option "Launches with the same name"?)')),(0,o.kt)("p",null,"On the history table, you can see the first 20 test cases their last 10 (or 3/5/10/15/20/25/30) executions from only launches with the same name on the project.\nEach column on the history table is equaled to a number of the execution."),(0,o.kt)("p",null,"Let's see an example."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You want to perform regression testing in different environments. For those reasons, you are running your regression suite on macOS, Windows, and Linux.\nAfter test runs finish, you will be able to see on the All launches tab on ReportPortal 3 launches with different names: ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS, Regression_Win, Regression_Linux"),".\nIf you click on the Total statistic for the launch ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS")," and click on the 'History' button and you choose the option ",(0,o.kt)("strong",{parentName:"p"},"'Launches with the same name'"),", you will see executions only from launches with name ",(0,o.kt)("em",{parentName:"p"},"Regression_MacOS"),"."),(0,o.kt)("table",{parentName:"blockquote"},(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Test case name"),(0,o.kt)("th",{parentName:"tr",align:null},"Execution #2"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 1"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 2"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Test 3"),(0,o.kt)("td",{parentName:"tr",align:null},"Passed"))))),(0,o.kt)("media-view",{thumbnail:a(8548),src:"https://youtu.be/DoKW0jFBELo",alt:"History Table launches with the same name",type:"video"}),(0,o.kt)("h3",{id:"actions"},"Actions"),(0,o.kt)("p",null,"From the History table you will be able to perform the next actions:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"edit items"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/work-with-reports/InvestigationOfFailure#set-defect-type"},"edit defect")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/work-with-reports/InvestigationOfFailure#post-bug-to-bug-tracking-system"},"post issue")),(0,o.kt)("li",{parentName:"ul"},"link / unlink issue"),(0,o.kt)("li",{parentName:"ul"},"delete items")),(0,o.kt)("p",null,"For that:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Hover the cell on the history table"),(0,o.kt)("li",{parentName:"ul"},"Click on the checkbox"),(0,o.kt)("li",{parentName:"ul"},"Check needed item "),(0,o.kt)("li",{parentName:"ul"},"Click on the button 'Action'"),(0,o.kt)("li",{parentName:"ul"},"Choose needed action")),(0,o.kt)("h4",{id:"compare-launch-results-with-the-filter"},"Compare launch results with the filter"),(0,o.kt)("p",null,"You can add a custom column with the latest filter results to the History table. "),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},(0,o.kt)("strong",{parentName:"p"},"Use case:")," You have a test suite for the regression. You run this suite for different versions (version 1, version2, version 3).\nWhen you run tests for the new version you need to find out if new bugs appeared in it in comparison with the previous version.\nYou can create a filter that includes test executions for the previous version (version 2).\nThen you can open a history table for the launch with results for version 3 and add a custom column with the filter 'Version 2'.\nThe system adds the latest executions from filter 'Version 2' and you will be able to compare the latest results for version 2 and version 3.")),(0,o.kt)("media-view",{thumbnail:a(97487),src:"https://youtu.be/trv2f5g62Is",alt:"Compare results of a launch with the filter",type:"video"}),(0,o.kt)("h4",{id:"historical-line-of-executions"},"Historical line of executions"),(0,o.kt)("p",null,"The historical line of executions represents the statuses of the current test case in history."),(0,o.kt)("p",null,"You can see the historical line of executions at the Log level. History is shown only for the\ncurrent item and there are 30 items max in history.\nYou can click on the item in the history and check the results in previous executions, read\nthe comments, find the bugs, posted to this fail.\nThis feature will save you time and help you to understand the reason for your failure."),(0,o.kt)("p",null,"History line has the following color scheme:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Red - failed or interrupted. Contains a link to a related bug (it has it)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Grey - skipped. Contains a link to a related bug (it has it)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Green - passed. Contains only execution number")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Animated - still without state ","[in progress]"))),(0,o.kt)("p",null,"You can mark the current method or case with a defect type, and write a comment\nusing the defect editor block."),(0,o.kt)("p",null,"To come into a certain execution of an appropriate launch, hit a launch number\nabove the item."),(0,o.kt)("p",null,'Also on a History line, you can see an "i" label, it means that the item with this label has a defect comment or/and a link to the Bug Tracking System.'),(0,o.kt)("h4",{id:"history-across-all-launches"},"History across All launches"),(0,o.kt)("p",null,"By default system shows history across Launches with the same name."),(0,o.kt)("p",null,'But you can choose option "History across All Launches" and system will show you executions of the test cases which have been executed in launches with different names.'),(0,o.kt)("p",null,"On hover user can find launch name of test and all launch attributes."),(0,o.kt)("media-view",{thumbnail:a(51948),src:"https://youtu.be/YFzorxQO_S0",alt:"History Line ToolTip in our real time dashboard open source",type:"video"}),(0,o.kt)("h4",{id:"duration-fluctuation"},"Duration fluctuation"),(0,o.kt)("p",null,"If test execution has duration growth in comparison with previous run, the system marks such items with red triangles:"),(0,o.kt)("p",null,"No duration growth - 0 triangles"),(0,o.kt)("p",null,"duration growh from 0 to 20% - 1 triangles"),(0,o.kt)("p",null,"duration growh from 21% - 50% - 2 trianges "),(0,o.kt)("p",null,"duration growh from 51% - 100% - 3 trianges "),(0,o.kt)("p",null,"duration growh from 101% and higher - 4 trianges "),(0,o.kt)("h4",{id:"load-more-history"},"Load more History"),(0,o.kt)("p",null,'By default the system shows 12 latest executions. If you need more history you can click on the button "Load more 9 items and the system loaded more executions on history line. Max number of items on History line is 30 executions. '),(0,o.kt)("p",null,"User can move on History line using horizontal scroll."),(0,o.kt)("h3",{id:"test-item-actions-history"},"Test Item actions history"),(0,o.kt)("p",null,"Test Item actions history will show you the history of actions, which have been made to a\ncertain test item. You can see the kind of activity, and who performed it."),(0,o.kt)("p",null,"The following actions are shown on the history of actions:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user changed defect type of test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user posted a comment to the test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," user posted a bug to the Bug Tracking System or added a link to the existing in Bug Tracking System issue.")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},' analyzer changed defect type of test item based on the item (where "item" is a link to a log view of an item which has been chosen by Analyzer as the most relevant result)')),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," analyzer posted a comment to the test item")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"}," analyzer posted a bug to the Bug Tracking System or added a link to the existing in the Bug Tracking System issue. ")),(0,o.kt)("p",null,"To see the history of actions, navigate to a certain child item. By default you\nwill see the last action in one line."),(0,o.kt)("p",null,"Use spoiler to maximize actions history:"),(0,o.kt)("media-view",{thumbnail:a(79483),src:"https://youtu.be/X5u_6rI5V8k",alt:"Action History",type:"video"}))}p.isMDXComponent=!0},97487:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/CompareLaunchResults-7e6d164b1290375ac9dff3661d0a8913.png"},51948:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoricalLineOfExecutions-6a0bc293523fa70ad1cd710608488537.png"},30665:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoryTable-d9c0fdceb236c5b4ec837ea4cb74b0e1.png"},8548:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/HistoryTableSameName-7c814f249742a7d86f447f932fd9b153.png"},79483:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=a.p+"assets/images/TestItemActionsHistory-3d029b1afdd281035f285ce1cf2bd8cc.png"}}]); \ No newline at end of file diff --git a/assets/js/dc8f36d8.4e8837df.js b/assets/js/dc8f36d8.4e8837df.js new file mode 100644 index 000000000..c403770e3 --- /dev/null +++ b/assets/js/dc8f36d8.4e8837df.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6863],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=r.createContext({}),s=function(e){var t=r.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},u=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(a),c=n,k=m["".concat(p,".").concat(c)]||m[c]||d[c]||i;return a?r.createElement(k,o(o({ref:t},u),{},{components:a})):r.createElement(k,o({ref:t},u))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[m]="string"==typeof e?e:n,o[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_label:"SAML Provider"},o="SAML provider",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/index",id:"reportportal-configuration/authorization/SAMLProvider/index",title:"SAML provider",description:"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/index.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/index.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"SAML Provider"},sidebar:"defaultSidebar",previous:{title:"LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP"},next:{title:"Azure SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML"}},p={},s=[{value:"SAML provider requirements",id:"saml-provider-requirements",level:2},{value:"Add integration",id:"add-integration",level:2},{value:"Set up connection",id:"set-up-connection",level:2},{value:"Identity provider configuration",id:"identity-provider-configuration",level:3},{value:"ReportPortal SSO initial URL",id:"reportportal-sso-initial-url",level:4},{value:"Identifier",id:"identifier",level:4},{value:"Custom attribute as claims in token",id:"custom-attribute-as-claims-in-token",level:4},{value:"ReportPortal configuration",id:"reportportal-configuration",level:3}],u={toc:s},m="wrapper";function d(e){let{components:t,...i}=e;return(0,n.kt)(m,(0,r.Z)({},u,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"saml-provider"},"SAML provider"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,n.kt)("p",null,"This plugin allows you to configure a connection with a SAML provider."),(0,n.kt)("p",null,"Integration with SAML will allow you to login into ReportPortal using SSO instead of tedious manual user creation."),(0,n.kt)("p",null,"The plugin provides a mechanism to exchange information between ReportPortal and SAML provider, such as the possibility to login to ReportPortal with SAML credentials."),(0,n.kt)("h2",{id:"saml-provider-requirements"},"SAML provider requirements"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"SAML 2.0 version"),(0,n.kt)("li",{parentName:"ul"},"HTTP-POST Binding"),(0,n.kt)("li",{parentName:"ul"},"URL to download ",(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/SAML_metadata#Identity_provider_metadata"},"SAML IdP Metadata")),(0,n.kt)("li",{parentName:"ul"},"HTTPS connection for SAML Metadata"),(0,n.kt)("li",{parentName:"ul"},"Support SAML attributes:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"email"),(0,n.kt)("li",{parentName:"ul"},"first name"),(0,n.kt)("li",{parentName:"ul"},"last name"),(0,n.kt)("li",{parentName:"ul"},"full name (instead first and last name)")))),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"There are detailed manuals for configuration of ",(0,n.kt)("a",{parentName:"p",href:"./AzureSAML"},"Azure SAML")," and ",(0,n.kt)("a",{parentName:"p",href:"./OktaSAML"},"Okta SAML"),".")),(0,n.kt)("h2",{id:"add-integration"},"Add integration"),(0,n.kt)("p",null,"ReportPortal contains the SAML Plugin by default."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Go to ",(0,n.kt)("inlineCode",{parentName:"li"},"Administration")," -> ",(0,n.kt)("inlineCode",{parentName:"li"},"Plugins")," -> ",(0,n.kt)("inlineCode",{parentName:"li"},"SAML")),(0,n.kt)("li",{parentName:"ol"},"Select ",(0,n.kt)("inlineCode",{parentName:"li"},"Add integration"),".")),(0,n.kt)("h2",{id:"set-up-connection"},"Set up connection"),(0,n.kt)("h3",{id:"identity-provider-configuration"},"Identity provider configuration"),(0,n.kt)("h4",{id:"reportportal-sso-initial-url"},"ReportPortal SSO initial URL"),(0,n.kt)("p",null,"You need to provide a URL for a SAML Provider to deliver SAML data for the identity federation."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-url"},"https:///uat/saml/sp/SSO/alias/report-portal-sp\n")),(0,n.kt)("h4",{id:"identifier"},"Identifier"),(0,n.kt)("p",null,"Set up identifier (aka Audience Restriction, aka Entity ID) for application as ",(0,n.kt)("inlineCode",{parentName:"p"},"report.portal.sp.id"),".\nYou can specify personal Entity id when you deploy the Authorization service by environment variable ",(0,n.kt)("inlineCode",{parentName:"p"},"RP_AUTH_SAML_ENTITYID"),"."),(0,n.kt)("h4",{id:"custom-attribute-as-claims-in-token"},"Custom attribute as claims in token"),(0,n.kt)("p",null,"The IDp app user profile must provide attributes like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"- user.email\n- user.firstName\n- user.lastName\n")),(0,n.kt)("p",null,"Also, Make sure there is a mapping created according to the values that you use in the ReportPortal SAML plugin like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"- user.email -> Email\n- user.firstName -> FirstName\n- user.lastName -> LastName\n")),(0,n.kt)("h3",{id:"reportportal-configuration"},"ReportPortal configuration"),(0,n.kt)("media-view",{src:a(62163),alt:"SAML plugin configuration to integrate with our qa automation dashboard"}),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Identity provider name ID (Optional)"))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Identity provider name ID")," (aka name identifier formats) controls how the users at identity providers are mapped to users at service providers."),(0,n.kt)("p",null,"We support next formats:"),(0,n.kt)("p",null,"UNSPECIFIED - used by default"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\n")),(0,n.kt)("p",null,"EMAIL"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\n")),(0,n.kt)("p",null,"PERSISTENT"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Provider name"))," - Provider name associated with IDP."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Metadata URL"))," - URL that provides data with information about SAML Provider."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Email"))," - Attribute name from SAML metadata which contains an user email."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\n neuromancer@cyberspace.net\n \n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"ReportPortal Callback URL (Optional)"))," - This field provides a redirect base path."),(0,n.kt)("p",null,"Once you have submitted an integration with \u201cRP callback URL\u201d, the URL will be applied to all SAML integrations."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-url"},"https:///uat\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"First name"))," - Attribute name from SAML metadata which contains an user first/given name."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nWilliam\n\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Last name"))," - Attribute name from SAML metadata which contains an user last/family name."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nGibson\n\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Full name"))," - Attribute name from SAML metadata which contains a full user name. You can use either two separate attributes for first name and last name or a combined first and last name attribute. This solely depends on your SAML provider."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nWilliam Gibson\n\n')))}d.isMDXComponent=!0},62163:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/SAMLPlugin-6444da5543c5fcdb3a7fdd0d5013136d.png"}}]); \ No newline at end of file diff --git a/assets/js/dc8f36d8.bb175eed.js b/assets/js/dc8f36d8.bb175eed.js deleted file mode 100644 index 2dad12666..000000000 --- a/assets/js/dc8f36d8.bb175eed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[6863],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>k});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=r.createContext({}),u=function(e){var t=r.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),m=u(a),c=n,k=m["".concat(p,".").concat(c)]||m[c]||d[c]||i;return a?r.createElement(k,o(o({ref:t},s),{},{components:a})):r.createElement(k,o({ref:t},s))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[m]="string"==typeof e?e:n,o[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=a(87462),n=(a(67294),a(3905));const i={sidebar_label:"SAML Provider"},o="SAML provider",l={unversionedId:"reportportal-configuration/authorization/SAMLProvider/index",id:"reportportal-configuration/authorization/SAMLProvider/index",title:"SAML provider",description:"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name).",source:"@site/docs/reportportal-configuration/authorization/SAMLProvider/index.mdx",sourceDirName:"reportportal-configuration/authorization/SAMLProvider",slug:"/reportportal-configuration/authorization/SAMLProvider/",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/SAMLProvider/index.mdx",tags:[],version:"current",frontMatter:{sidebar_label:"SAML Provider"},sidebar:"defaultSidebar",previous:{title:"LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP"},next:{title:"Azure SAML",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/AzureSAML"}},p={},u=[{value:"SAML provider requirements",id:"saml-provider-requirements",level:2},{value:"Add integration",id:"add-integration",level:2},{value:"Set up connection",id:"set-up-connection",level:2},{value:"Identity provider configuration",id:"identity-provider-configuration",level:3},{value:"ReportPortal SSO initial URL",id:"reportportal-sso-initial-url",level:4},{value:"Identifier",id:"identifier",level:4},{value:"Custom attribute as claims in token",id:"custom-attribute-as-claims-in-token",level:4},{value:"ReportPortal configuration",id:"reportportal-configuration",level:3}],s={toc:u},m="wrapper";function d(e){let{components:t,...i}=e;return(0,n.kt)(m,(0,r.Z)({},s,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"saml-provider"},"SAML provider"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"If you have a pre-created Internal user, you can't log in by SAML using their credentials (Email or Name)."))),(0,n.kt)("p",null,"This plugin allows you to configure a connection with a SAML provider."),(0,n.kt)("p",null,"Integration with SAML will allow you to login into ReportPortal using SSO instead of tedious manual user creation."),(0,n.kt)("p",null,"The plugin provides a mechanism to exchange information between ReportPortal and SAML provider, such as the possibility to login to ReportPortal with SAML credentials."),(0,n.kt)("h2",{id:"saml-provider-requirements"},"SAML provider requirements"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"SAML 2.0 version"),(0,n.kt)("li",{parentName:"ul"},"HTTP-POST Binding"),(0,n.kt)("li",{parentName:"ul"},"URL to download ",(0,n.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/SAML_metadata#Identity_provider_metadata"},"SAML IdP Metadata")),(0,n.kt)("li",{parentName:"ul"},"HTTPS connection for SAML Metadata"),(0,n.kt)("li",{parentName:"ul"},"Support SAML attributes:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"email"),(0,n.kt)("li",{parentName:"ul"},"first name"),(0,n.kt)("li",{parentName:"ul"},"last name"),(0,n.kt)("li",{parentName:"ul"},"full name (instead first and last name)")))),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"There are detailed manuals for configuration of ",(0,n.kt)("a",{parentName:"p",href:"./AzureSAML"},"Azure SAML")," and ",(0,n.kt)("a",{parentName:"p",href:"./OktaSAML"},"Okta SAML"),".")),(0,n.kt)("h2",{id:"add-integration"},"Add integration"),(0,n.kt)("p",null,"ReportPortal contains the SAML Plugin by default."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Go to ",(0,n.kt)("inlineCode",{parentName:"p"},"Administration")," -> ",(0,n.kt)("inlineCode",{parentName:"p"},"Plugins")," -> ",(0,n.kt)("inlineCode",{parentName:"p"},"SAML"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Select ",(0,n.kt)("inlineCode",{parentName:"p"},"Add integration"),"."))),(0,n.kt)("h2",{id:"set-up-connection"},"Set up connection"),(0,n.kt)("h3",{id:"identity-provider-configuration"},"Identity provider configuration"),(0,n.kt)("h4",{id:"reportportal-sso-initial-url"},"ReportPortal SSO initial URL"),(0,n.kt)("p",null,"You need to provide a URL for a SAML Provider to deliver SAML data for the identity federation."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-url"},"https:///uat/saml/sp/SSO/alias/report-portal-sp\n")),(0,n.kt)("h4",{id:"identifier"},"Identifier"),(0,n.kt)("p",null,"Set up identifier (aka Audience Restriction, aka Entity ID) for application as ",(0,n.kt)("inlineCode",{parentName:"p"},"report.portal.sp.id"),".\nYou can specify personal Entity id when you deploy the Authorization service by environment variable ",(0,n.kt)("inlineCode",{parentName:"p"},"RP_AUTH_SAML_ENTITYID"),"."),(0,n.kt)("h4",{id:"custom-attribute-as-claims-in-token"},"Custom attribute as claims in token"),(0,n.kt)("p",null,"The IDp app user profile must provide attributes like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"- user.email\n- user.firstName\n- user.lastName\n")),(0,n.kt)("p",null,"Also, Make sure there is a mapping created according to the values that you use in the ReportPortal SAML plugin like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"- user.email -> Email\n- user.firstName -> FirstName\n- user.lastName -> LastName\n")),(0,n.kt)("h3",{id:"reportportal-configuration"},"ReportPortal configuration"),(0,n.kt)("media-view",{src:a(62163),alt:"SAML plugin configuration to integrate with our qa automation dashboard"}),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Identity provider name ID (Optional)"))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Identity provider name ID")," (aka name identifier formats) controls how the users at identity providers are mapped to users at service providers."),(0,n.kt)("p",null,"We support next formats:"),(0,n.kt)("p",null,"UNSPECIFIED - used by default"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\n")),(0,n.kt)("p",null,"EMAIL"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\n")),(0,n.kt)("p",null,"PERSISTENT"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-urn"},"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Provider name"))),(0,n.kt)("p",null,"Provider name associated with IDP."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Metadata URL"))),(0,n.kt)("p",null,"URL that provides data with information about SAML Provider."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Email"))),(0,n.kt)("p",null,"Attribute name from SAML metadata which contains an user email."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\n neuromancer@cyberspace.net\n \n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"ReportPortal Callback URL (Optional)"))),(0,n.kt)("p",null,"This field provides a redirect base path."),(0,n.kt)("p",null,"Once you have submitted an integration with \u201cRP callback URL\u201d, the URL will be applied to all SAML integrations."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-url"},"https:///uat\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"First name"))),(0,n.kt)("p",null,"Attribute name from SAML metadata which contains an user first/given name."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nWilliam\n\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Last name"))),(0,n.kt)("p",null,"Attribute name from SAML metadata which contains an user last/family name."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nGibson\n\n')),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("em",{parentName:"strong"},"Full name"))),(0,n.kt)("p",null,"Attribute name from SAML metadata which contains a full user name. You can use either two separate attributes for first name and last name or a combined first and last name attribute. This solely depends on your SAML provider."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-xml"},'\nWilliam Gibson\n\n')))}d.isMDXComponent=!0},62163:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const r=a.p+"assets/images/SAMLPlugin-6444da5543c5fcdb3a7fdd0d5013136d.png"}}]); \ No newline at end of file diff --git a/assets/js/de98de14.484f49ed.js b/assets/js/de98de14.484f49ed.js new file mode 100644 index 000000000..44eeffb33 --- /dev/null +++ b/assets/js/de98de14.484f49ed.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4953],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>m});var n=r(67294);function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var p=n.createContext({}),c=function(t){var e=n.useContext(p),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=c(t.components);return n.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},f=n.forwardRef((function(t,e){var r=t.components,o=t.mdxType,a=t.originalType,p=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),s=c(r),f=o,m=s["".concat(p,".").concat(f)]||s[f]||d[f]||a;return r?n.createElement(m,i(i({ref:e},u),{},{components:r})):n.createElement(m,i({ref:e},u))}));function m(t,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:o,i[1]=l;for(var c=2;c{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(87462),o=(r(67294),r(3905));const a={sidebar_label:"LDAP"},i="LDAP",l={unversionedId:"reportportal-configuration/authorization/LDAP",id:"reportportal-configuration/authorization/LDAP",title:"LDAP",description:"LDAP plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/LDAP.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/LDAP.md",tags:[],version:"current",frontMatter:{sidebar_label:"LDAP"},sidebar:"defaultSidebar",previous:{title:"GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub"},next:{title:"SAML Provider",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/"}},p={},c=[],u={toc:c},s="wrapper";function d(t){let{components:e,...r}=t;return(0,o.kt)(s,(0,n.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ldap"},"LDAP"),(0,o.kt)("p",null,"LDAP plugin is available in ReportPortal on the Plugins page."),(0,o.kt)("p",null,"To set up access with LDAP:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Log in to the ReportPortal as an ADMIN user"),(0,o.kt)("li",{parentName:"ol"},"Then open the list on the right of the user's image."),(0,o.kt)("li",{parentName:"ol"},"Click the 'Administrative' link"),(0,o.kt)("li",{parentName:"ol"},"Click the 'Plugins' from the left-hand sidebar"),(0,o.kt)("li",{parentName:"ol"},"Click on the'LDAP' tab."),(0,o.kt)("li",{parentName:"ol"},"Click on Add new integration"),(0,o.kt)("li",{parentName:"ol"},"The next fields should be present:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},"'URL*': text\n'Base DN*': text\n'Manager DN': text\n'Manager password': text\n'User DN pattern': text\n'User search filter': text\n'Group search base': text\n'Group search filter': text\n'Password encoder type': text\n'Email attribute*': text\n'Full name attribute' : text\n'Photo attribute' : text\n")),(0,o.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of LDAP will have access to the ReportPortal instance. For access to the ReportPortal, the user should use their domain credentials (Login and password)."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/de98de14.6a3df179.js b/assets/js/de98de14.6a3df179.js deleted file mode 100644 index 0dfb05f6b..000000000 --- a/assets/js/de98de14.6a3df179.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocumentation=self.webpackChunkdocumentation||[]).push([[4953],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>m});var n=r(67294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var p=n.createContext({}),c=function(t){var e=n.useContext(p),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=c(t.components);return n.createElement(p.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},f=n.forwardRef((function(t,e){var r=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),s=c(r),f=a,m=s["".concat(p,".").concat(f)]||s[f]||d[f]||o;return r?n.createElement(m,i(i({ref:e},u),{},{components:r})):n.createElement(m,i({ref:e},u))}));function m(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=r.length,i=new Array(o);i[0]=f;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l[s]="string"==typeof t?t:a,i[1]=l;for(var c=2;c{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(87462),a=(r(67294),r(3905));const o={sidebar_label:"LDAP"},i="LDAP",l={unversionedId:"reportportal-configuration/authorization/LDAP",id:"reportportal-configuration/authorization/LDAP",title:"LDAP",description:"LDAP plugin is available in ReportPortal on the Plugins page.",source:"@site/docs/reportportal-configuration/authorization/LDAP.md",sourceDirName:"reportportal-configuration/authorization",slug:"/reportportal-configuration/authorization/LDAP",permalink:"/docs/reportportal-configuration/authorization/LDAP",draft:!1,editUrl:"https://github.com/reportportal/docs/blob/develop/docs/reportportal-configuration/authorization/LDAP.md",tags:[],version:"current",frontMatter:{sidebar_label:"LDAP"},sidebar:"defaultSidebar",previous:{title:"GitHub",permalink:"/docs/reportportal-configuration/authorization/GitHub"},next:{title:"SAML Provider",permalink:"/docs/reportportal-configuration/authorization/SAMLProvider/"}},p={},c=[],u={toc:c},s="wrapper";function d(t){let{components:e,...r}=t;return(0,a.kt)(s,(0,n.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"ldap"},"LDAP"),(0,a.kt)("p",null,"LDAP plugin is available in ReportPortal on the Plugins page."),(0,a.kt)("p",null,"To set up access with LDAP:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Log in to the ReportPortal as an ADMIN user")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Then open the list on the right of the user's image.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click the 'Administrative' link")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click the 'Plugins' from the left-hand sidebar")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click on the'LDAP' tab.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Click on Add new integration")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"The next fields should be present:"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-javascript"},"'URL*': text\n'Base DN*': text\n'Manager DN': text\n'Manager password': text\n'User DN pattern': text\n'User search filter': text\n'Group search base': text\n'Group search filter': text\n'Password encoder type': text\n'Email attribute*': text\n'Full name attribute' : text\n'Photo attribute' : text\n")),(0,a.kt)("p",null,"Mandatory fields are marked with red.\nClick the 'Submit' button.\nAll users of LDAP will have access to the ReportPortal instance. For access to the ReportPortal, the user should use their domain credentials (Login and password)."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.c10e0a5c.js b/assets/js/runtime~main.a58c9405.js similarity index 73% rename from assets/js/runtime~main.c10e0a5c.js rename to assets/js/runtime~main.a58c9405.js index 2771c4a58..5f2a4bbb3 100644 --- a/assets/js/runtime~main.c10e0a5c.js +++ b/assets/js/runtime~main.a58c9405.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,d,b,c={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=c,r.c=t,e=[],r.O=(f,a,d,b)=>{if(!a){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,d,b]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};f=f||[null,a({}),a([]),a(a)];for(var t=2&d&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>c[f]=()=>e[f]));return c.default=()=>e,r.d(b,c),b},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({26:"9bf2f1ad",38:"b02e6e62",39:"6417b00a",53:"935f2afb",102:"855c8e88",104:"527a0828",150:"54146d47",195:"5aa350ff",225:"5668619f",367:"74cbe0b8",376:"c9eb37d0",414:"306aee24",452:"295d89fa",529:"a11133f1",562:"7a770024",570:"a7f8e40f",720:"dffd512f",742:"37a6abbb",747:"07d78bf6",757:"9ce9f59c",795:"78dfb7e9",862:"ba4cd107",963:"bf477335",973:"f7444008",1006:"069ddc90",1219:"ac3f047d",1320:"849f9212",1392:"41a0b225",1413:"71498ad5",1434:"3938886d",1451:"ea56d3e1",1472:"6efd3b1f",1490:"7821a10c",1510:"a74ebc46",1562:"bc969540",1613:"6e16c901",1627:"ef851841",1688:"37e2c88f",1904:"a76ff2eb",1985:"98ca32ed",1995:"0a099a4f",2024:"ab510b4f",2066:"661e81a0",2106:"33580f2e",2147:"220207ff",2169:"267ccbc6",2253:"23a9762f",2297:"1da087e0",2310:"2a424e83",2346:"ff6a9465",2439:"5ce704b9",2471:"68053dc3",2483:"9c874da5",2516:"98a1fcd9",2539:"5e24e3bc",2629:"5c2df135",2630:"1e1599cb",2654:"06de0160",2719:"98b03dc7",2720:"396f0464",2813:"61d84721",2822:"4b05701a",3079:"269e975a",3082:"d26eef7b",3155:"9a364eec",3197:"befb6058",3322:"a573d8f7",3360:"7bd95ec4",3466:"00dd8e60",3477:"7de4166c",3540:"fb391353",3588:"cf1f907d",3608:"8a0d7266",3653:"d09084ee",3731:"d008ba81",3854:"ea49187a",3885:"338561f9",3892:"e1b7d783",3931:"7d141066",3938:"fea2b63c",3962:"cf84801a",3969:"11ffa791",4021:"6bc80c47",4143:"d331ba2f",4216:"17e33bf8",4415:"dc2f4bb3",4472:"84982dca",4485:"8dc7c7b8",4580:"3d7d2ef4",4585:"e2f45cda",4587:"0225d014",4612:"bebf2496",4695:"855239bf",4708:"ed9ad71b",4735:"ec038b21",4772:"bc209e08",4946:"00e97bf6",4953:"de98de14",5069:"a0d375c1",5090:"46ef8a18",5106:"145e5b9f",5114:"05bac479",5165:"24ad2548",5170:"be477480",5212:"72119d79",5222:"5718d6db",5261:"da84d3ce",5296:"086e8e8b",5326:"73bb90fb",5355:"925c0b5c",5398:"1a613e91",5400:"2baa0d2f",5414:"a830598a",5421:"53e81573",5445:"84d47c34",5449:"c7b25a99",5635:"4859ca05",5711:"28b23d2a",5792:"bdb17ab6",6002:"a89000ee",6027:"6ef1a459",6059:"910d5a4e",6066:"b3bfe149",6086:"e5386a75",6255:"882bd5c3",6325:"40be41a9",6329:"c7dff32f",6365:"47aa7b91",6385:"59b068d1",6412:"84e29575",6635:"bc0c4574",6636:"a68ea571",6797:"dbee08c0",6863:"dc8f36d8",7062:"b8e550c7",7100:"c3038888",7145:"eebb9f3e",7186:"e429fb18",7213:"7236dcb4",7260:"4656db35",7318:"7bbaf234",7330:"dadf679c",7537:"a4179dd8",7543:"6063f56a",7727:"a194bf09",7762:"85d780d7",7810:"17cee6e7",7811:"e378912b",7819:"35b6bff0",7868:"914c5fe7",7918:"17896441",7920:"1a4e3797",7979:"e9a76c81",8007:"8272edfd",8010:"24317c98",8069:"81bc17b9",8105:"d9fb2f5f",8193:"146035e7",8270:"3c7c043e",8448:"69cd44f6",8467:"fd64f10f",8633:"abf83c96",8658:"58f41459",8734:"7ef0b1f8",8760:"c84a9109",8834:"c8588910",8877:"60ab5c4c",8893:"fbe4c47e",8916:"8fda0747",8934:"525802b3",9052:"69c1213a",9063:"c60355ff",9106:"5200637f",9145:"63a8a649",9168:"027cf034",9222:"3c75ee7d",9272:"a6ef86a7",9292:"d5397252",9314:"0e3ba2c6",9334:"247783bb",9413:"07801322",9417:"00685d85",9509:"ca88c6ba",9514:"1be78505",9671:"0e384e19",9714:"1f98178b",9721:"db699483",9764:"2e91390a",9779:"fb2c10d0",9817:"14eb3368",9836:"39df2a2d",9944:"67854d34",9998:"3ac6333e"}[e]||e)+"."+{26:"6ee6df48",38:"25dbb0a5",39:"db0f7227",53:"c410e8a9",102:"c1d3dab3",104:"69a2b6b8",150:"d7d0926b",195:"8bf681a0",225:"72782681",367:"e48d7d06",376:"e0510c28",414:"8940b5d5",452:"2d0a34f5",529:"37973ca6",562:"8d8c12a3",570:"4f4c44ea",720:"55cab5bf",742:"4d967d0b",747:"2478ee7b",757:"b751fb80",795:"b4234a42",862:"418f3bd4",963:"c38ae492",973:"79855f17",1006:"2cf3ff86",1219:"02dbc5b7",1320:"d0e2d40e",1392:"4ea0db8e",1413:"bc3d8477",1434:"c7a4d03c",1451:"b2ecce3d",1472:"234e467d",1490:"2165cfdf",1510:"8a5eb4ad",1562:"e06cd197",1613:"14e9eca4",1627:"8c55abdf",1688:"b472ecf2",1904:"25258038",1949:"e89740ad",1985:"8c7dbcc3",1995:"18f4548d",2024:"e57a2cac",2066:"14f8298d",2106:"5e68215f",2147:"b1f81382",2169:"a61ed3eb",2253:"882f27ab",2297:"4aba8fae",2310:"0ed5e133",2346:"d4bf8fd2",2439:"ecd97376",2471:"22ba9fcb",2483:"f13a94f6",2516:"2d13f844",2539:"753efd8a",2629:"bf3a0a82",2630:"05b73ec0",2654:"bb24bebb",2719:"46b7f948",2720:"e164a7a0",2813:"a59096f1",2822:"4d559ede",3079:"9122047a",3082:"2ae052c7",3155:"2dbd5eaf",3197:"b9b03ab0",3322:"ada0be0e",3360:"9bd7a5e4",3466:"e5818a8e",3477:"e391f6ae",3540:"c9937d51",3588:"ba8093a8",3608:"8378c4fd",3653:"449dca62",3731:"d2d17dbc",3854:"8f8eccdc",3885:"3a34a919",3892:"49ed9e3f",3931:"7c68e7ab",3938:"e7da601d",3962:"d0a15929",3969:"ead65a90",4021:"76d4b7c3",4143:"a4d13ab0",4216:"704a22c2",4415:"e775a227",4472:"73212368",4483:"dd6f4c67",4485:"9630363d",4580:"ef590e62",4585:"a875facb",4587:"2593e756",4612:"4550cabf",4695:"16c42d4f",4708:"723dc706",4735:"39315364",4772:"64a09734",4946:"2c67a4b7",4953:"6a3df179",5069:"cad12094",5090:"5bb085e8",5106:"c7833d51",5114:"2eda4c43",5165:"0383fd6a",5170:"20d85d6e",5212:"3cd30d3e",5222:"e67d1cf3",5261:"37925ae8",5296:"3c1a2d2c",5326:"6ea26858",5355:"1e0b67bb",5398:"08dd51e1",5400:"822ffc1a",5414:"4fd1d6d5",5421:"62730e04",5445:"b4bf663a",5449:"68c091cf",5635:"63bb2a27",5711:"7b95556c",5792:"fbdff6bb",6002:"832e026a",6027:"8a6685fe",6059:"1131599e",6066:"736f214a",6086:"d986e717",6255:"f499efc6",6325:"6445dfd1",6329:"3f0cae1d",6365:"0a9d5509",6385:"5a3ae9cd",6412:"5f71aa97",6635:"eeec2ec3",6636:"295d7694",6797:"7f7419e3",6798:"07cc0f1a",6863:"bb175eed",6945:"5f538c43",7062:"c2c077f2",7100:"8ba87a9d",7145:"6bbe307d",7186:"16239f67",7213:"a1eb159f",7260:"b9ab1777",7318:"b36d1256",7330:"8551e18f",7537:"6ba3cd60",7543:"ce33bac3",7727:"f8c3b35c",7762:"86cfaa25",7810:"abbf84b1",7811:"a94f7506",7819:"f771775e",7868:"7441f7f0",7918:"6e1eeb6f",7920:"1e9d3f1b",7979:"9d167bdd",8007:"96bb7f0a",8010:"84b1a128",8069:"ab64e3ed",8105:"654d919c",8193:"952539e2",8270:"a0014bc8",8382:"33a3e703",8448:"b3aaed4f",8467:"a0cb28ff",8633:"ffefd990",8658:"f2c58039",8734:"d32f0fd4",8760:"b62319bd",8834:"404cde65",8877:"2f835953",8893:"c936a38a",8894:"1b69866b",8916:"75559028",8934:"b0c0f464",9052:"986e9e16",9063:"e76f313e",9106:"36712c92",9145:"56a85afc",9168:"23e9fced",9222:"098d4938",9272:"ad4b3729",9292:"dc7c1c76",9314:"95c6177b",9334:"b669e8d5",9413:"c2c4fde8",9417:"43db1677",9509:"d2f35955",9514:"f143f5a3",9671:"fb41a6cf",9714:"3be9e931",9721:"db9fa5b0",9764:"9e2e6e32",9779:"188159e2",9817:"1e4fec31",9836:"280bbbea",9944:"56b17b3c",9998:"d344e8e4"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,f)=>Object.prototype.hasOwnProperty.call(e,f),d={},b="documentation:",r.l=(e,f,a,c)=>{if(d[e])d[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),f)return f(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/docs/",r.gca=function(e){return e={17896441:"7918","9bf2f1ad":"26",b02e6e62:"38","6417b00a":"39","935f2afb":"53","855c8e88":"102","527a0828":"104","54146d47":"150","5aa350ff":"195","5668619f":"225","74cbe0b8":"367",c9eb37d0:"376","306aee24":"414","295d89fa":"452",a11133f1:"529","7a770024":"562",a7f8e40f:"570",dffd512f:"720","37a6abbb":"742","07d78bf6":"747","9ce9f59c":"757","78dfb7e9":"795",ba4cd107:"862",bf477335:"963",f7444008:"973","069ddc90":"1006",ac3f047d:"1219","849f9212":"1320","41a0b225":"1392","71498ad5":"1413","3938886d":"1434",ea56d3e1:"1451","6efd3b1f":"1472","7821a10c":"1490",a74ebc46:"1510",bc969540:"1562","6e16c901":"1613",ef851841:"1627","37e2c88f":"1688",a76ff2eb:"1904","98ca32ed":"1985","0a099a4f":"1995",ab510b4f:"2024","661e81a0":"2066","33580f2e":"2106","220207ff":"2147","267ccbc6":"2169","23a9762f":"2253","1da087e0":"2297","2a424e83":"2310",ff6a9465:"2346","5ce704b9":"2439","68053dc3":"2471","9c874da5":"2483","98a1fcd9":"2516","5e24e3bc":"2539","5c2df135":"2629","1e1599cb":"2630","06de0160":"2654","98b03dc7":"2719","396f0464":"2720","61d84721":"2813","4b05701a":"2822","269e975a":"3079",d26eef7b:"3082","9a364eec":"3155",befb6058:"3197",a573d8f7:"3322","7bd95ec4":"3360","00dd8e60":"3466","7de4166c":"3477",fb391353:"3540",cf1f907d:"3588","8a0d7266":"3608",d09084ee:"3653",d008ba81:"3731",ea49187a:"3854","338561f9":"3885",e1b7d783:"3892","7d141066":"3931",fea2b63c:"3938",cf84801a:"3962","11ffa791":"3969","6bc80c47":"4021",d331ba2f:"4143","17e33bf8":"4216",dc2f4bb3:"4415","84982dca":"4472","8dc7c7b8":"4485","3d7d2ef4":"4580",e2f45cda:"4585","0225d014":"4587",bebf2496:"4612","855239bf":"4695",ed9ad71b:"4708",ec038b21:"4735",bc209e08:"4772","00e97bf6":"4946",de98de14:"4953",a0d375c1:"5069","46ef8a18":"5090","145e5b9f":"5106","05bac479":"5114","24ad2548":"5165",be477480:"5170","72119d79":"5212","5718d6db":"5222",da84d3ce:"5261","086e8e8b":"5296","73bb90fb":"5326","925c0b5c":"5355","1a613e91":"5398","2baa0d2f":"5400",a830598a:"5414","53e81573":"5421","84d47c34":"5445",c7b25a99:"5449","4859ca05":"5635","28b23d2a":"5711",bdb17ab6:"5792",a89000ee:"6002","6ef1a459":"6027","910d5a4e":"6059",b3bfe149:"6066",e5386a75:"6086","882bd5c3":"6255","40be41a9":"6325",c7dff32f:"6329","47aa7b91":"6365","59b068d1":"6385","84e29575":"6412",bc0c4574:"6635",a68ea571:"6636",dbee08c0:"6797",dc8f36d8:"6863",b8e550c7:"7062",c3038888:"7100",eebb9f3e:"7145",e429fb18:"7186","7236dcb4":"7213","4656db35":"7260","7bbaf234":"7318",dadf679c:"7330",a4179dd8:"7537","6063f56a":"7543",a194bf09:"7727","85d780d7":"7762","17cee6e7":"7810",e378912b:"7811","35b6bff0":"7819","914c5fe7":"7868","1a4e3797":"7920",e9a76c81:"7979","8272edfd":"8007","24317c98":"8010","81bc17b9":"8069",d9fb2f5f:"8105","146035e7":"8193","3c7c043e":"8270","69cd44f6":"8448",fd64f10f:"8467",abf83c96:"8633","58f41459":"8658","7ef0b1f8":"8734",c84a9109:"8760",c8588910:"8834","60ab5c4c":"8877",fbe4c47e:"8893","8fda0747":"8916","525802b3":"8934","69c1213a":"9052",c60355ff:"9063","5200637f":"9106","63a8a649":"9145","027cf034":"9168","3c75ee7d":"9222",a6ef86a7:"9272",d5397252:"9292","0e3ba2c6":"9314","247783bb":"9334","07801322":"9413","00685d85":"9417",ca88c6ba:"9509","1be78505":"9514","0e384e19":"9671","1f98178b":"9714",db699483:"9721","2e91390a":"9764",fb2c10d0:"9779","14eb3368":"9817","39df2a2d":"9836","67854d34":"9944","3ac6333e":"9998"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(f,a)=>{var d=r.o(e,f)?e[f]:void 0;if(0!==d)if(d)a.push(d[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var b=new Promise(((a,b)=>d=e[f]=[a,b]));a.push(d[2]=b);var c=r.p+r.u(f),t=new Error;r.l(c,(a=>{if(r.o(e,f)&&(0!==(d=e[f])&&(e[f]=void 0),d)){var b=a&&("load"===a.type?"missing":a.type),c=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var d,b,c=a[0],t=a[1],o=a[2],n=0;if(c.some((f=>0!==e[f]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,a,f,d,b,c={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return c[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=c,r.c=t,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({26:"9bf2f1ad",38:"b02e6e62",39:"6417b00a",53:"935f2afb",102:"855c8e88",104:"527a0828",150:"54146d47",195:"5aa350ff",225:"5668619f",367:"74cbe0b8",376:"c9eb37d0",414:"306aee24",452:"295d89fa",529:"a11133f1",562:"7a770024",570:"a7f8e40f",720:"dffd512f",742:"37a6abbb",747:"07d78bf6",757:"9ce9f59c",795:"78dfb7e9",862:"ba4cd107",963:"bf477335",973:"f7444008",1006:"069ddc90",1219:"ac3f047d",1320:"849f9212",1392:"41a0b225",1413:"71498ad5",1434:"3938886d",1451:"ea56d3e1",1472:"6efd3b1f",1490:"7821a10c",1510:"a74ebc46",1562:"bc969540",1613:"6e16c901",1627:"ef851841",1688:"37e2c88f",1904:"a76ff2eb",1985:"98ca32ed",1995:"0a099a4f",2024:"ab510b4f",2066:"661e81a0",2106:"33580f2e",2147:"220207ff",2169:"267ccbc6",2253:"23a9762f",2297:"1da087e0",2310:"2a424e83",2346:"ff6a9465",2439:"5ce704b9",2471:"68053dc3",2483:"9c874da5",2516:"98a1fcd9",2539:"5e24e3bc",2629:"5c2df135",2630:"1e1599cb",2654:"06de0160",2719:"98b03dc7",2720:"396f0464",2813:"61d84721",2822:"4b05701a",3079:"269e975a",3082:"d26eef7b",3155:"9a364eec",3197:"befb6058",3322:"a573d8f7",3360:"7bd95ec4",3466:"00dd8e60",3477:"7de4166c",3540:"fb391353",3588:"cf1f907d",3608:"8a0d7266",3653:"d09084ee",3731:"d008ba81",3854:"ea49187a",3885:"338561f9",3892:"e1b7d783",3931:"7d141066",3938:"fea2b63c",3962:"cf84801a",3969:"11ffa791",4021:"6bc80c47",4143:"d331ba2f",4216:"17e33bf8",4415:"dc2f4bb3",4472:"84982dca",4485:"8dc7c7b8",4580:"3d7d2ef4",4585:"e2f45cda",4587:"0225d014",4612:"bebf2496",4695:"855239bf",4708:"ed9ad71b",4735:"ec038b21",4772:"bc209e08",4946:"00e97bf6",4953:"de98de14",5069:"a0d375c1",5090:"46ef8a18",5106:"145e5b9f",5114:"05bac479",5165:"24ad2548",5170:"be477480",5212:"72119d79",5222:"5718d6db",5261:"da84d3ce",5296:"086e8e8b",5326:"73bb90fb",5355:"925c0b5c",5398:"1a613e91",5400:"2baa0d2f",5414:"a830598a",5421:"53e81573",5445:"84d47c34",5449:"c7b25a99",5635:"4859ca05",5711:"28b23d2a",5792:"bdb17ab6",6002:"a89000ee",6027:"6ef1a459",6059:"910d5a4e",6066:"b3bfe149",6086:"e5386a75",6255:"882bd5c3",6325:"40be41a9",6329:"c7dff32f",6365:"47aa7b91",6385:"59b068d1",6412:"84e29575",6635:"bc0c4574",6636:"a68ea571",6797:"dbee08c0",6863:"dc8f36d8",7062:"b8e550c7",7100:"c3038888",7145:"eebb9f3e",7186:"e429fb18",7213:"7236dcb4",7260:"4656db35",7318:"7bbaf234",7330:"dadf679c",7537:"a4179dd8",7543:"6063f56a",7727:"a194bf09",7762:"85d780d7",7810:"17cee6e7",7811:"e378912b",7819:"35b6bff0",7868:"914c5fe7",7918:"17896441",7920:"1a4e3797",7979:"e9a76c81",8007:"8272edfd",8010:"24317c98",8069:"81bc17b9",8105:"d9fb2f5f",8193:"146035e7",8270:"3c7c043e",8448:"69cd44f6",8467:"fd64f10f",8633:"abf83c96",8658:"58f41459",8734:"7ef0b1f8",8760:"c84a9109",8834:"c8588910",8877:"60ab5c4c",8893:"fbe4c47e",8916:"8fda0747",8934:"525802b3",9052:"69c1213a",9063:"c60355ff",9106:"5200637f",9145:"63a8a649",9168:"027cf034",9222:"3c75ee7d",9272:"a6ef86a7",9292:"d5397252",9314:"0e3ba2c6",9334:"247783bb",9413:"07801322",9417:"00685d85",9509:"ca88c6ba",9514:"1be78505",9671:"0e384e19",9714:"1f98178b",9721:"db699483",9764:"2e91390a",9779:"fb2c10d0",9817:"14eb3368",9836:"39df2a2d",9944:"67854d34",9998:"3ac6333e"}[e]||e)+"."+{26:"6ee6df48",38:"25dbb0a5",39:"db0f7227",53:"c410e8a9",102:"c1d3dab3",104:"69a2b6b8",150:"d7d0926b",195:"8bf681a0",225:"3177252b",367:"e48d7d06",376:"e0510c28",414:"8940b5d5",452:"2d0a34f5",529:"37973ca6",562:"8d8c12a3",570:"4f4c44ea",720:"55cab5bf",742:"4d967d0b",747:"2478ee7b",757:"b751fb80",795:"b4234a42",862:"418f3bd4",963:"dbaea5ba",973:"79855f17",1006:"2cf3ff86",1219:"02dbc5b7",1320:"d0e2d40e",1392:"4ea0db8e",1413:"bc3d8477",1434:"c7a4d03c",1451:"b2ecce3d",1472:"234e467d",1490:"2165cfdf",1510:"8a5eb4ad",1562:"e06cd197",1613:"14e9eca4",1627:"8c55abdf",1688:"b472ecf2",1904:"6b79db18",1949:"e89740ad",1985:"8c7dbcc3",1995:"18f4548d",2024:"e57a2cac",2066:"14f8298d",2106:"d4dccbfe",2147:"b1f81382",2169:"a61ed3eb",2253:"882f27ab",2297:"4aba8fae",2310:"0ed5e133",2346:"d4bf8fd2",2439:"ecd97376",2471:"22ba9fcb",2483:"f13a94f6",2516:"494f8b22",2539:"753efd8a",2629:"bf3a0a82",2630:"05b73ec0",2654:"bb24bebb",2719:"46b7f948",2720:"e164a7a0",2813:"a59096f1",2822:"4d559ede",3079:"9122047a",3082:"2ae052c7",3155:"2dbd5eaf",3197:"b9b03ab0",3322:"ada0be0e",3360:"12b719e2",3466:"e5818a8e",3477:"e391f6ae",3540:"c9937d51",3588:"ba8093a8",3608:"8378c4fd",3653:"c6557d0f",3731:"d2d17dbc",3854:"8f8eccdc",3885:"3a34a919",3892:"49ed9e3f",3931:"7c68e7ab",3938:"e7da601d",3962:"d0a15929",3969:"ead65a90",4021:"76d4b7c3",4143:"a4d13ab0",4216:"704a22c2",4415:"011105a8",4472:"73212368",4483:"dd6f4c67",4485:"9630363d",4580:"ef590e62",4585:"a875facb",4587:"2593e756",4612:"4550cabf",4695:"16c42d4f",4708:"723dc706",4735:"39315364",4772:"64a09734",4946:"2c67a4b7",4953:"484f49ed",5069:"cad12094",5090:"5bb085e8",5106:"c7833d51",5114:"2eda4c43",5165:"0383fd6a",5170:"20d85d6e",5212:"3cd30d3e",5222:"e67d1cf3",5261:"37925ae8",5296:"3c1a2d2c",5326:"6ea26858",5355:"1e0b67bb",5398:"08dd51e1",5400:"822ffc1a",5414:"376dedc8",5421:"62730e04",5445:"b4bf663a",5449:"68c091cf",5635:"63bb2a27",5711:"7b95556c",5792:"03e80846",6002:"832e026a",6027:"3ffd4a9b",6059:"1131599e",6066:"736f214a",6086:"d986e717",6255:"f499efc6",6325:"619ee169",6329:"3f0cae1d",6365:"0a9d5509",6385:"5a3ae9cd",6412:"5f71aa97",6635:"eeec2ec3",6636:"85917d12",6797:"7f7419e3",6798:"07cc0f1a",6863:"4e8837df",6945:"5f538c43",7062:"c2c077f2",7100:"fa2c8662",7145:"6bbe307d",7186:"16239f67",7213:"a1eb159f",7260:"b9ab1777",7318:"b36d1256",7330:"8551e18f",7537:"6ba3cd60",7543:"ce33bac3",7727:"f8c3b35c",7762:"86cfaa25",7810:"abbf84b1",7811:"a94f7506",7819:"f771775e",7868:"7441f7f0",7918:"6e1eeb6f",7920:"1e9d3f1b",7979:"9d167bdd",8007:"96bb7f0a",8010:"84b1a128",8069:"ab64e3ed",8105:"654d919c",8193:"952539e2",8270:"a0014bc8",8382:"33a3e703",8448:"b3aaed4f",8467:"a0cb28ff",8633:"ffefd990",8658:"f2c58039",8734:"d32f0fd4",8760:"b62319bd",8834:"404cde65",8877:"2f835953",8893:"c936a38a",8894:"1b69866b",8916:"75559028",8934:"b0c0f464",9052:"986e9e16",9063:"66645129",9106:"36712c92",9145:"56a85afc",9168:"23e9fced",9222:"098d4938",9272:"ad4b3729",9292:"dc7c1c76",9314:"95c6177b",9334:"b669e8d5",9413:"c2c4fde8",9417:"43db1677",9509:"d2f35955",9514:"f143f5a3",9671:"d1d3a88b",9714:"3be9e931",9721:"db9fa5b0",9764:"9e2e6e32",9779:"188159e2",9817:"1e4fec31",9836:"280bbbea",9944:"56b17b3c",9998:"d344e8e4"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},b="documentation:",r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/docs/",r.gca=function(e){return e={17896441:"7918","9bf2f1ad":"26",b02e6e62:"38","6417b00a":"39","935f2afb":"53","855c8e88":"102","527a0828":"104","54146d47":"150","5aa350ff":"195","5668619f":"225","74cbe0b8":"367",c9eb37d0:"376","306aee24":"414","295d89fa":"452",a11133f1:"529","7a770024":"562",a7f8e40f:"570",dffd512f:"720","37a6abbb":"742","07d78bf6":"747","9ce9f59c":"757","78dfb7e9":"795",ba4cd107:"862",bf477335:"963",f7444008:"973","069ddc90":"1006",ac3f047d:"1219","849f9212":"1320","41a0b225":"1392","71498ad5":"1413","3938886d":"1434",ea56d3e1:"1451","6efd3b1f":"1472","7821a10c":"1490",a74ebc46:"1510",bc969540:"1562","6e16c901":"1613",ef851841:"1627","37e2c88f":"1688",a76ff2eb:"1904","98ca32ed":"1985","0a099a4f":"1995",ab510b4f:"2024","661e81a0":"2066","33580f2e":"2106","220207ff":"2147","267ccbc6":"2169","23a9762f":"2253","1da087e0":"2297","2a424e83":"2310",ff6a9465:"2346","5ce704b9":"2439","68053dc3":"2471","9c874da5":"2483","98a1fcd9":"2516","5e24e3bc":"2539","5c2df135":"2629","1e1599cb":"2630","06de0160":"2654","98b03dc7":"2719","396f0464":"2720","61d84721":"2813","4b05701a":"2822","269e975a":"3079",d26eef7b:"3082","9a364eec":"3155",befb6058:"3197",a573d8f7:"3322","7bd95ec4":"3360","00dd8e60":"3466","7de4166c":"3477",fb391353:"3540",cf1f907d:"3588","8a0d7266":"3608",d09084ee:"3653",d008ba81:"3731",ea49187a:"3854","338561f9":"3885",e1b7d783:"3892","7d141066":"3931",fea2b63c:"3938",cf84801a:"3962","11ffa791":"3969","6bc80c47":"4021",d331ba2f:"4143","17e33bf8":"4216",dc2f4bb3:"4415","84982dca":"4472","8dc7c7b8":"4485","3d7d2ef4":"4580",e2f45cda:"4585","0225d014":"4587",bebf2496:"4612","855239bf":"4695",ed9ad71b:"4708",ec038b21:"4735",bc209e08:"4772","00e97bf6":"4946",de98de14:"4953",a0d375c1:"5069","46ef8a18":"5090","145e5b9f":"5106","05bac479":"5114","24ad2548":"5165",be477480:"5170","72119d79":"5212","5718d6db":"5222",da84d3ce:"5261","086e8e8b":"5296","73bb90fb":"5326","925c0b5c":"5355","1a613e91":"5398","2baa0d2f":"5400",a830598a:"5414","53e81573":"5421","84d47c34":"5445",c7b25a99:"5449","4859ca05":"5635","28b23d2a":"5711",bdb17ab6:"5792",a89000ee:"6002","6ef1a459":"6027","910d5a4e":"6059",b3bfe149:"6066",e5386a75:"6086","882bd5c3":"6255","40be41a9":"6325",c7dff32f:"6329","47aa7b91":"6365","59b068d1":"6385","84e29575":"6412",bc0c4574:"6635",a68ea571:"6636",dbee08c0:"6797",dc8f36d8:"6863",b8e550c7:"7062",c3038888:"7100",eebb9f3e:"7145",e429fb18:"7186","7236dcb4":"7213","4656db35":"7260","7bbaf234":"7318",dadf679c:"7330",a4179dd8:"7537","6063f56a":"7543",a194bf09:"7727","85d780d7":"7762","17cee6e7":"7810",e378912b:"7811","35b6bff0":"7819","914c5fe7":"7868","1a4e3797":"7920",e9a76c81:"7979","8272edfd":"8007","24317c98":"8010","81bc17b9":"8069",d9fb2f5f:"8105","146035e7":"8193","3c7c043e":"8270","69cd44f6":"8448",fd64f10f:"8467",abf83c96:"8633","58f41459":"8658","7ef0b1f8":"8734",c84a9109:"8760",c8588910:"8834","60ab5c4c":"8877",fbe4c47e:"8893","8fda0747":"8916","525802b3":"8934","69c1213a":"9052",c60355ff:"9063","5200637f":"9106","63a8a649":"9145","027cf034":"9168","3c75ee7d":"9222",a6ef86a7:"9272",d5397252:"9292","0e3ba2c6":"9314","247783bb":"9334","07801322":"9413","00685d85":"9417",ca88c6ba:"9509","1be78505":"9514","0e384e19":"9671","1f98178b":"9714",db699483:"9721","2e91390a":"9764",fb2c10d0:"9779","14eb3368":"9817","39df2a2d":"9836","67854d34":"9944","3ac6333e":"9998"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var b=new Promise(((f,b)=>d=e[a]=[f,b]));f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,c=f[0],t=f[1],o=f[2],n=0;if(c.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n - + @@ -20,7 +20,7 @@